/home/lnzliplg/public_html/installer.zip
PK�c�\��/55images/error.pngnu�[����PNG


IHDR�a�IDATx�S�A}�o۶m�Im~��7�m۶m;�m۸ۙ^��^�Kaf�T���j������hם
�~?i�_5�����kZ��X�=���9�C����<������e.��Bw�cD�'[J�H�ݍE�LT�%�9�3`>Y׸J��W楦�6L4�9��J�s\ظP���˅{jW�����ԃ;�
�l<
�����յ�`�\����Ktu����W�Rؙ�F:F6���r��g��$h�qQ��)�SCy�yD¸�����`��=>�V>����n_)��:/���&��xu�r�$���71Pzz
��Zxg����m��=��?)`As�c[�L�!�Y�L�꥝gp��M,��G���/����|c�j��[�jߒ�0��qo��N�`V���1~faݽa��Ǘ��ٝ5tb�{t�ҝ�U	E��M�O�-�Z�щmC���f��J�֗�0����\&�[S��)׬��ws���T�IEND�B`�PK�c�\q�����images/banner_gradient.gifnu�[���GIF89a
R�����������������������������������������������������!�,
R��'�di�h��+�5�
����m���؝E�lo�]g��ƥQ��̪�ڹv$]+WB[%4y�f��dL-�0r	^��c}�����x����������������������������������������������		���������	������������������������2d80�@�*h0a�f(�B��3X�xq�FCB ��I�Fw�\��eJ/G�����L�5s�4�S�O
<j� hP�.�@��
C7<���)T��j�T+6������
�~[Vڰi�*��쇹eצ�@�,_|�̷��È+^̸�ἐ�;PK�c�\�<)9}}images/delete.pngnu�[����PNG


IHDR�aDIDATxb���?EC�990�
p�Զm+w��ڮ�dk۶m۶�ƴk��}�yü��E�jb�+(�\��	��B^臀��*ȡ>�3���*U�Q.w�޴�Gw����W��|�Ib|`���,�,딓M2y8x�$��#y�,��6 �g��؍��n�=w^�
��I�����y�=t��i?#�s�4����f
i�W�@��qX�<�f�>�qI O�=�(����`��&ޕ�]�,Gh��s��~B<d�K�D9w�S{�_=�8�*	� �vܚY�O�֖�2a4q���4�/���>w�8x�l�l��	ݣ%��N4v��K'!�PZc�#f"�{+n�K�L�w��6�Me�X59�_4���qsL��%|�f���1��:�0^qj%ّ9��TD��c�+��n]��9���x�ݪ�!r�@��y�D��5��y܋�\F�l�2�U�1��&{�*kT�$b"r�|Ki�9p���]L!�/��Rpmt�p�LVy��g'��
v�N�ל��n\W�m�d<�%_v���<�G�M���dO흔n��c:���o��6�
ued��S���ι�,��IEND�B`�PK�c�\.���images/add.pngnu�[����PNG


IHDR�aTIDATxb���?EC�'=4�`�/��ڶ�ڶͨnX�m۶5�k�ۯgj��{(l�P�seW;Q�
�?e����)��S���n����j]�g�b�}&��`�Sj�p�a����2MC}�ل]�6�J��
Mo��E% uN��Y��
A�/�����Ox��! �wg��f>�_�H��F�P8$���M
7)�d<5/K������λ��7X��9��|'#�!vB��^.V��!_t؃�㌪��N��QW8���*G��.$S͆h��о�69�x��û��P�	���m�j5�)�����)!�~��q������I�&<�5�Wb���΃`�
���v�5
&q1��Z��ДR
 ���_�=\��aY��2�[�>�!7��lȑ�%��rl
�QI�÷����̚7��t�Qc��l\�����k�h��˲��zǮ�C9���a�й���XsYp��c�#ܽ�
�4婺a�ÿ>��"�`؍V���b �������_�շ��:ʻ�겛�(�B��F���#2D4���߯�Ú��&9*{��ֺ�X�v�4�l�n�ټE��q�N�A���DAF����EIEND�B`�PK�c�\��q�0�0images/banner_schraffur.gifnu�[���GIF89avP���������������������������������������������������������������!�,vP��'�di�h��l�p,�tm�x��|��pH,�Ȥr�l:�ШtJ�Z�جv��z��xL.��
�"-Z��m�>���[���u��x#|��klx���s���v#�"�������#�������s�����m�"����i���ÚĻƽ���m���ҷϻ���м������"�����#��������l��s���o$r��QP`�8�����!B�iJTH�!Ç3*X�1�J�� ����8$;�F���e�"z<�Q"��8y¹��NR=oݴ+��T?U�L�)QPDlRU����Ǭj�ʵ�V�WÞ���r����3i���V+n�9��^%W5.߻t�Vc�vp;�h��K�VU^w�#C����<ɗ'gޜ�/fˠ�2���Q�	ɰaĊ�_��}�uI�-I�鲎� �n)�"
���69��ƕ$=͕>g*SRS�&���S�Gu�<
�|&�]���
Llz�k��w�������}V��<Ǣ�e�\^�[��6�`�w_��1��aF�dk(��c�9s!gn"�|h�P/��bj��ڌ�c��AD#l���[ȝ�N�A�O!�r�0�H5��FsD�NR���S��$�Cm��vB�ٝ�gV�~k�7�Vg�W��p�塁~��������ci�ȧ�%H�g�6��y2J��yF�W��:Z�k$�#}�4�$At����ʪ�����6Ѻ����!�G•��'��2$�?���Q�N��W�:��L��0���I�|`ΕX8uy��`��f��k]�c��-x���^cɵ����[�T�d蟝�u�i�J��jH(��M��a�Di��E �ŊJ��s|ghϣ��{,0$Sf�ƠY<��x��gʙ�9pm��:�i��1��x�%�6�d�>���F��?�&Oגg�RGg5���z��J�W��ZO_*��]���I�vܛ����ֽu��^��l��n���}���3���da{����r��&S�i�O�pÜS�9���0����a!;�rğw���ߋ�Ȭw2겻l{��^{�/cL0��,:���;�G<�N����u�!!t�F6�=�Z���O͐�Hc���9Yk���Z��Uٶ�W{=��R���R���
\q����),����'/��s�\� �A��a���:�9�Eld����ٽ.b/�[H�ҥ0w�˝�d�:�=�v���Xػ�n��{!
i�C�Q�,���(��=�I���~��Mk\TI���2��9��_�r���ͯ~oT���7�퍁t�#��Z�kNx��/�دD��q���?�AC:Ѓc�$7v�I�В����8D��4�!(gHJ"�R�J��*7��.����b��YF��
x%.i9KY�p���%0��Kb�җ�<�ƨ��f�����4�(�gN��֤f4�69��l�#��5�s~����7v�1��� �iA쁚�g�*PKV���|�����tw��$
GiJ�:��
��C*Q[3�E�F/��bz��
�Gc��d
s��K�XE>gbs�X�4ej�kf�3ͦL�C?o��>�7��?z�q��Q�
�w�H��?+�~���PV;��5Lի\}�VfUD�����
��!��H\�\W7�R�5����'�J��Ү{�h;
ґ6���b
RD,���}�d;��X:���5���q/��{&����$�v�bh�������!N�n"ԝ�6~?
�u;$`
�kE}'\�Z��TŸ�M*������jU�*U�*���F�
ֱrL���*u�jV���
m	`)���m�uE�C�K<�f6�(��+������}�~M�XW�R����\���upK�`�V8��奄A
�bv�“M��)<b�bX��̍����,"͵0��Nsc��v�ƻ��t\$�v�@�m������=�֊l5!�Vɶ�m��3\~���u�t`�
���˕
?��\+ow�R�jv�
^�f�-�nY�܁8�w��������W��3���B�u�,-�	ؾY�4�=��6z���.�gFG:Œ�e%�aQ���'v�I���Zժ���A=��x�F��K=j#�x�2���]�[`)gWv��l�M�ޮ&6��m�\cc�ڹ�����md��GU�;n/�;�V�3ʽ�.���J�2��}n���.U+c������j���T7�ٺ\�4�+-�/��
���9��^��W�I��>3�����;
`���&O��W�j��(�5�5��`�%�eo�ؚGZ�3���k�X��|�Bw4�s�/]�=�y,�n���0��g�u����{l��u';������nl��Ŏ�����3����������γ��U��<�/q�C|���oh�/\��d�o	aX[Z�~4�=�>�7}�O�z�_}�H�zΥ.{�W��M�=���7=��79�q~{��~º�yח����;��>}�?���'�ol�o����>��_�ã��G�����G ��_x|g��v���!�����Vz�Fi��F���r��jF�t��{ħz�ƀ0Gu��{�Gj�w|Q���Gs����ǁ��ȁ h��'�؁�OWc8�u��0~SS}��q��<,�u�?�wo7HU�W����Wn��~�1UO����w�K�~��p��	�ׅ��O�p���^�z&�Y ���sn��u�����z�`s+�s�т~�skȇ�&���H���WW�����؇'���'�{���H��X����|؉��>�c�Vm���Ճ@����:~6��������w��h�T�SH���Sh��7f�؋�U�C8���Ì�Ve8q�،�w�|ƌ �Ņ��������a���������K
pz�{ڸ�Ȏ����|�X��x�����8|��������Ȉ�ؐ���� P�i�W7��8��ys����W)�&��	�ُ*�)��X�$Y����V�<Iv>����	p��$0��x�����Hي���M�[H��x��P(�X��[i�Y�~������Z	�eI�_I��7��Ȗg�lɍmY�nYrrɅ��s���t�ਆ�t�=������h����y�
`��is�y�ؘnH�������������)�Y��9����ə.ٙ�x�����ٙ�	)y�-ɒY��9�}�(����������Is+9��i������w�/����ȹ����D�ڹ�<��@����F	�Sy���C�G����)�:��dy��9��X�g9�N�������YI���:�z�j��)�����qxٖ}���Y��H�������ɡ���	�J�#J� j�����ɢ�I�.��2
��9�1J�y����8�����ɛ>��?Z�C*�H���L�Gʤ@�F��R:���NʝZ��C	�����)�_J�f����ɕYIl�����	�p:��#��~�ؖ���|ʕꗁ��:��c�$J����ږ�h��蠏���7z�-��*�����j��ꩡ
��J�ɢ�j�0I���	�S�OZ�T���
����������ګA��S��^:�dJ��Y��z��:��*��ɕn��}Z�Z�x��t��z��sɦ�OC�~�:��
�����ኮ���+���i�
JK#ʨ#Z��� 
��گ4*��9����
��9�����y�=J�/I	[�=ꫵ�k�����ʤCٱ���:�!��٥a
�hʞ�ɬ �0ۥ/���*�]��j��	�1;�3;���A��0�n�G	�GKG�/{�`�I����@�HW��GY�Zی_��[+�M��p�
��sy��j��z��ʘ�j�����n��g��y��z����w;������˯�[�����;�����������{����&�����������������[�G��˺���[�����[��J������뺼K����g��-K�7[�Ik�ŋ��{��۲�ɼ?�}ȋ�@IL��M��S����T����@˽@��˽@r��u�����K�답����L��[�ً��]۾��p���a;���r{�
|������
���������v;{�s#���(,��"|��;��������˹�{�2��3��1�ï��>̻9,�AL�Cl�D�:��I��F��A��O��S�T��W\�Z��\��^��`\�L�拾f\�hL�j��k|�櫿v����t�۴u�z,�{\�}��|�~,Ȁ��<�&��t��ZŽ��$ɉ�”ɕ<ɑ\�C\Ŝ�ɞ�ɠ|š�ğ,ʦLʣ��� ���G���������Dl˭L˻�ʴ���l��ʺ<˲�ʭL̹�˿�_��Ό��[�����+�m|�ٜ�l���w��v˾�<�ጽv��{̾�L��<��\��΅lɑ|�GI����ϖ�B<����8����9�Й|ʝ�ʥ���=�}��˷����Ƽ���Ѽ���ѸL�<�*��,]�)�̲<�!-��l�ܼ�8m�7=�-;������?��D]����|�}ܿ��M���L�R����Ѕ����Z��D|Љ��=�9֤<�-�h}�jM�l��i��0\�r����v]�xm�s}�zM�}��{�ׁ�ׂM���8
�e����c��C-��ٔ-�̽r��s��
����S
�u��r���̴~l�N
��L������՘�Г,�Ym������m���A̴n}��������ñL��ҫ��=� m�r�̾�����L���=����=��=�v�~���
�p��ޅ��[�؍}؎��i������͏-ٌ����r\�n|�n������Ǧ��w\��-����Q}�Gy�ȴM���
�^�(��'��6y�/���{�L;�\���M�˝㼻�U���8�㾝�B��<~����;��
����]��
�U>���}
�O^�W��]����]����(�����S��ON�[���s��u�ߓ��wN�|����}���>�޿.�
������x��=��n�.�����p������ δ ��]���$��FN�����3i�!^�I��@��0����F�K�ƞ�®ܯ�͝�Ѝ��N��=�R��b����^>����V��j���.�ؾ�޾����q>����N����>��M�g�����~�����؝���ڃ��	�����/����?�/�o�n����� ?�>�=�����о�)������2��H��'��In�9?�ڮ�=����'���~�����H���G��D��N/��^�M_�K�S��F�����M�����_�h�����rO����ڡ��z/�{��-?�����~8���;_�Z�����T�[����@���� ����/��K��������?��o����?����0���������p�����?��_������/�c��d����Oao��?�������ڏ��r�o_�pϘ����餝��������O�"_�����A@Q�X����蹺��€M�~S���x� ph"����<*�ϥ��ᐮX
G��^��.��Ղ�a��V���	i¡S&��Z�����������1��5.Rf1>�dbn�lz>�R�b�����v�����R44�ʒ��Ɩ�n�t�n^\���S\?4/c�><+_?h�ts?�c�w�{K����ü�<�����`�<88��'��<
�`r`�7�Q���(��`�(qcć�\T�%G�/!A�}�&�7hZ���e̙WlƁ)�(-8��ɏ"PDMʈ�?J�4]*�RQL�b��TQѪ�X�{*�'�cŒm�j�[���2 ��ܶ�΂jp�5tԾpֶo3��]P���9r���M���"G�႞�}��5�\�(
��3@�$6T�Rv��� {�n�!+�@�7q�:N��q8���}C��q3%��Į�4By���Ο�Ň�Y>�͠챜��iԤ��jE��>����{uU~�%��N��`Z2ؠ��UM]�P(�[r]�V���d�X#Y��}X�%V��b(��"e-�������g��g��VZj=���?2W$v
ig�tK��$tJ:	�IR��VBIJ�]��z_v�z*��g�	f�h�ɦ�k�i�v��}w���xj�'}��瞁����"
�2ʡ��>:!b3�H��$^Z)�1nj)��#=�ģm>�f�����j��^e��b9k��J�����j��j���;����Q&}W��,�-J b��,�b;(��f+���r��}j�W��� ���V[+J*)_"f��|]������)����������*��*<$�@B�pù�J�Ÿ�q�W���ł���v�L�7��ܭ��!��-�)���vKn���<+�j�]r�臐jj���۩Ӡ��)��M-���<�į"|�Y�=��\G�p�gk�q���k�۵�e��	��p%;2�Ϧ���6��7�|�L��8��2�+��?WH�-�
i��R~������0
�/�1"�-IWv5�^o�ϼ��]v��";٭�Ϊ��N��ho��-lo��Gi�Lhi,��1���ҧ��_q~Φ���x�.��8��?h��F�3�B�?����_��?M��h:�8riC���87���S�;�e�;�=01t�\LSA�Y�v�`5zG�	�����@�~�G$a� ���mǛNiH��c9��0�j��‹a�T"-�&�#�ur5=�
I����*:�z8�-�[$�^�^S�(�	��)����>1~�zqԃ���0�ю��c��G>���� �W�j�q~��#��=2����KZr2��$'
�Iv��DL
!�A�0��\�)[Y�W�0��t�,Y	�Y�Җ��]y��їC�I�`�0$=\�2�iLa��V4��h�jV�HԦ��kfq��b�(sʑ�ߋ#:���v�q�\|<�	�wƓ�~L�9�O4��htc	Y�B�s�sL�$�ЇB�}�D97QQ��raG�3��KNT���_E7zQ��'�h.i��]�4�0��Kk�Kd��Ŵ�u�Sd��(�?��̝B���R��á>U���)�:Lh~�]xjV�0ժu�FgW�I�k��0��ϴf/����Z�O���wݫ]��P���{���;*O7ڵ����BjXtFT��d#�H�>��"�@G��P���'�H5�с�V�7��?+S��t����kW�S�������Ԟ�SݭT��԰VU.���n��\�& �u*t�K�U�
3M�j�k]4���jw����խe]/Z����ѕ�	�j=�j�u����=�Y��"ֿ�\�?���ѱ
F��`��Ѳ��,J)la�b�¥�i={Z�r֤�]�hC\�2�-ݰ�qK[�Ű��mq
��u�5fe�}�
rx�k c�MU�wJd�& �@twh��^���]���x^/�����{�k^1���Y=oW㙀�z�pޢ:�|�޷��ݳ��,_>�3ЊMhA�W�W�����gu�Jx���0fQ*�KW����4�;�R�v��u�Y�S�չU��e��!���8�5��K�$�z�.,2o��\�����u���3OY����eck�kV��9�l/���c�.���o痿n�����ms�~V7���n@o����lG5KjN��Ӧ�w�E]j��;�.��b����^u�[�J���lx�)Hq�Z�⸔�kg�]���9�5���ؿN��K�k�z��0W��G��j��о���̀c���@����������F�Λ�th��F�z��̀zjt��:_�._�S}�^�ǎR��s�f�z�ێ����[Ǻ���o����{������{�����s��|�o�����|�Oq�C��<�?��g�� ,�y@��8�l�њ��/_��k�����9�u�d���Qf�������KW>Gu�|�?]�(��p~u�+��֟��߬}�^�oN���v�w��f<��ϟv�c�q�{��/v��[��7�׿n�U�	��`�ڛ�%��Y4`�9�nGY��A^�:H��u��i���� n^� BB�2�
rT�`���� ��`� �����!��a���Y�����E�ڞ�I�b�j�q���y��_zQ�M��a~!י�a��_�!ҡ�͡���a�a���"� b!�D V�">`6�F�.�*�N""6"� 	&b� %*���� &�����"� +� �b~���,�b,��)�`.�"�/R!
�/�b�M!�5��u�F��]3n�f�2N�4F�Н��� ¡��j�7�#��8�c nc:��:��!��6"<J�#�##�%�#?�#�*��@zb*�"�"A
dA*dB2�Cv /.dD6d
�Dڢ.�Bc0cGcH�0V�^#B#5��5R�I�dK��6���a��M��;��N�cN�$O"<��#��=eQJ�fM�"��R:�Q�cT�T^�AZ��A>b)N�F:$Wb�WVdX>�W�%Gf@*���}�Yj$�,�[jdZ��GڥG�H��H�d_�$K�I�d`�%5�_t�dOeb�b:fcB�O
�R��TZfUeSRfeb�?z ��e��J�UN�&6�V��Xvek�&Y��kv%�%ʥZZ$]2�m~\m�e^�&cpg�
_q��_
&a2ga:�`6�tB'b��u.&v>&crg��w�]R֣%�#g.�#6�h6ez�'U�cz
@V i�"@�g��ާ�')�'�	�"�g����-�k�₂%���
"��6hV`G^�]6 HZ@�u�]:`n(��6��h2&j�"㇦�[�$�Vgt٨K�R��(���>��	iKV�`Z@6�]�F�O6�vj���y�'zZ)��gy^�R)�z闂i��g|~�.��`��'j(iƧ���|�皢�h,:�*:�BhA�)i
�
���&B�2$������v�[fhD��(��ؤ�܈����nYj�Uj����^j��j�
��\��jtIj�������j��h��h��*��j���&��+�*�٪
k��+��*�Bk������j�j����ni�:"�z�n�
�ꢦ+����꺾k��k��+�Ϋ��+��+��k��k��j�
����,����Z���B�>�F��V�b��jl�f,�n��~��z�Ȃ,Ɋlɢ�ɪlǦ,˪*���V`��)��k��l͎��,�^����ެ���꫽"��*��2��:m�Bm�6m�.�-�,�b��&��j-��~m~�:,�z��:�ئ����z�ɺl܆������m��m�ޭ�����m��l�֬�
n���l�n�ک�*n�:��Ω�>-�R��Zn�.m�*[f(���b��*�F�֢n�Fl�Z��N��^hز��f��&��~��֮ھ��Nl�-�-��m���-���*o�&ﷂ��Z��6��F��J.�b�.�f�v��j���iю�r.���/����/i�o���n�|���\�/����
���n(����غ������ޮ�®��n�ھ.���-�.�$oȪ0
3�
����pK��+�N/�~�s/����o��0�p��i�&��.���� ��/��'��H1�o��w1[1)b�|n��Bq�������f��B�o�l@��E�w(�:0��3��n�n���Ү�2�	;�np��.$�p�[��R�&kp�~�\r���Jr
[)[��+��2*'�(;ot�2,�2-˲*Ӱ+�$ko�������20��xs1s3/�33334�z ���*f�n3�b3�6�7k3�J@'36�������k;��s�����۳�bq9<�3=����@߳=�30B��0/t,0�3C_�*�?�s�47��2��.!;l(��H�f���H�H�J?�I�4	w�*�rt��[�
G�H�N�t��r.�2!�r.��O���N�2SC�RK��SOuP[�.uTS�P?�T�iW�2X[5R�u/�4C�4�u4S󹞳$�9�5\�u]C�\��9332s^�\�u4[{�����n3?K�x�8��*6:;�cssb_vg3b��:K6@���v6h�3>�3F�s�6j�sA��B�4�Z4E�.J��E���vKC�L2@�vC�6���q�4K��o/wJ��I�is+wnOwr����X_�U5Q�uW��)�jR��RSuI����wO?5{3k$c�Xg�W��W�VuU�N���Z��3_õ�#s`�u�3`���x^�u]�[+�[C8`�ld�34�dc�d_�>/6���t89ws�c6cgv��/?��p�6��xj�8k����x�׸q�v��q+�C2C/wpKwN�o[7L�4�/�K3wu3y�/9�O��_����w�7N��{o�vg�~�y����_p~�wP�����w�y����/������5��5��e�5�빃:\C��;��+�;�x��3v�v��6�Wq������'��׸n�︎�sI��3��:��z��vr�v�N����n�x�Ϻ�K���W��4�gy����{�[��K���y�3��7��/��K;��r�[���eG��'����K�7o���;�#�c{�����K�9�����cq�4��;��x�w:c����{�[�������뻨��n��;+|�;��ӳܱ����W<@c9�����{@ƃ��c�w�_��'�J���o��;ʣ��;���|r��ʫ��;�_y\8�۵3����:�7s�K�c'scﹸ��9�8?3}\;��g3����8�:�ӓx���_}��3���5�wz�o@24���kK|�{vۋx��{��߸�=��go��w�붩#�q_9�<�z�@2����Ńrݟv��1�;,29�K�Ǐ4�|ȟ��>\���>�3wt%�v�|�z�{@{O>�[2�W9��4��r�o0��S��+7�O>R�~�K��߾�'8�/8�3x������u��uc;�>8�K}ٓx9�{������֯��:������7����?x�D
		�'��*��V
�ޛHo�DS�$?�g��|�`�94
Y@�M��ބ�ۀ7�
���8��Y��x�n���-����<�����wT�U�6�H'�(�ǘ9׈Ih'H9��(�99zY):�0����j�)��RKi;��
�zL)�˂�J��
Zh���bR�2�b�"���m��}���ҽ�3M�]r��M��CD%�>�tRo/��"�w0d��gO`�~T��+�É���&��1���7�$�X%"Ǝa�H�pG�{P1��L ?���Q5r�073
�9��,/B��94�&�f~�ZS�RTU���B��'�T���YsW���~}��k�OYe��K��i��a;G7\�oz���-0�t�֩�wP�:�\|0�c�X�)ֻ�ŏv�����A�<qf�N��_A
��ǗL����b��a�vy{%���<��T�$�B�W+׭Y�l�>ghu�؉�z=*���T�~j)���������l����
/������~w�������;�A&B
�Ï���0ف&XadB�a?0�s��
1�J͖Qn�-A�Ꜷ[K+�fp@�6�FG�X�=�$R��U"�tY��z����|G�WK�e\��9�ȔFNEzX~�$��y�U������#��t��9m��f�"����,XYf~�y'Awↀ&�a>�dh��j"��"�2�$iK&wi��n�[����o ��ݎ��wf&�Zfu�}�ޙ�����
��d��k��������f��.�l�Ϊ�h�y�*-��N{���R���r��u���j)��{n���.��kT�Ċy��d�o����o�o=Kp��l�
��0���/���
G���n�n�s�n� k,r�!�L�Ef�
p�����2ǜ�6ߌs�a|��S���=�s�F�Q�Jl��#3�2�N7-u�O_M5�Qk���^
6�GM��f���g��6�eS��YϽ5�S׍��z˝7߿�
x��v�n�}x�o�x�#޸�{s�w�_n��G4x�#�����8鏗���;�z䦷��뷩��䧾;�!;PK�c�\=[�
��images/roundcube_logo.pngnu�[����PNG


IHDR�7N��A�PLTE# FEF# # fff# # # # # # fff# fff# # ((*ffffff# ffffffffffff# ffffff# acc# fff# # # fffffffff# fff# # fff@OT^w�7��ffffff# ffffffffffff# # fff# # # # acc# fff# # # fff# acdffffff# # fff# fffffffffffffffffffff# fff# fff# fff# # fff# # # fffffffff# # fff# # # # ffffff# fff# # fff# # ���fff# # ���7�����7��fff���7��@MR7��7��@OT7��@OS@OT7�����7�����7��7�����������7��������7��h����@OT���@OT���7��������@OT���@OT@OT@OT������?NS@OT7��7��������@IL���@OT���@OT@OT���@OT���=n����-��7��@OT���@OT7��7�@OT���@OT������7��@OT# ���fff���6�=n�@IL���-�����>MS���1��������9IN������<LQ4�����������������BQVn�������8GMH�����������������jux]im@��P�V��������焌�{��JX]#  ;��~�������������ۤ�����Ap�;m�Q^b9CF�Z�8�tRNS�������	����u_!�81�ͳog'��&���ѐ�'���+)Ը_=��X-�ɚ�4
���~viPGD@<,�Ū��{eW0#��rLKA���d�yiG�o7�\TQ���Ʊ�H1���б���~|dU2&	��������λ����gfXO@7)�����ÿ������zuokia[UBT���
�IDATh��ֱ
�0���7v��EHKEJK��T\o82�ҩ��(
A�y�����;�[s֥R�N�)��ԜD�4�bl����Ɖ�{�Gu dV˛��FAr$X;�f�Vg���M�k:&B#��J� +!�k͆��:)�N"�9J�}��Ozu!0�3�)��Th��"^�}��p��IF�T1�_'!�Y��
�D["TYڲ;�l��&(�A��b��r��Y�j���c��tf'�A�~v"T)��%�K��y�:΄wa���!⥚��7n�37�7t�/�̮�G��.�<�woE�`���wm�+�(�B�^��3��R�b��,:�d&D�b���ҽC�B�N�?�ϖB�d�miK��X:��;[u��-�;t����wX��G�!+����t!��?�1A��F��b��n��LJA�U��mVv:E4ӵJ�'ڏ��9",�$�r$ы��T�"��Si�\�pKmM�Un<
N����z�x���@p�	�Y���,`
�	��)VL[N�T���C��~����R~Ր-�Mh�i�h���J��
ƫҘCZ��n���f}ZD����b �''�F2!�-.��`�U��J���x���2��E0��P�*��#"�&�B	�(%�%+���K�I�	�Z�lg��>D��h���$��(UV���_�R1�9Ze��#)%Y)�`!L�Z�A!O\g#���6��JyKE4| ��HsJI�,��
-@�u��[�֙�qJ�?�O�f�ǻ�r2���x,�^�7���1J�ɚ����.P#�PPJ��h�%�CXprD[��ॲ�Jה�����/���o��wɇ�"K�O
���/%~�K�.�.�,tuR�H�#SF(��Z&NiY#E,��^�$n��qJ���}?\�9L)e�1a*04��]S�AT�5�����R
�:M��yi#�n�ɮaI^LKr�IA�r"	6��@0$E)����
�z���ՠV�Xm������OJ?}��L��Jov.&���v�yfD�o�m#]�uH,�7�#Ĵ��lw� R���*T��Ç!Z��2�-;*�����H�,�%�=n��p�KE5Nb�q�y17c�yϿ��D"R	��삐�%B�*%AM����S%��1�{��)9ZR�r�#�81-��m3(�y����,
��*�X��6�!HT!�\l�U�#R��}��X��q�$G��ɇ�{s��K߮�c�$AK�M-�\:�JU2@1
�u�<�b@�,����H>ʨ%�^Ґhˋ/�7T&ѧk�D$r�Q�P����t���G@r��AE��1+�#�W�d��R�-Hp���k�0�ӒIL�(�w��f�v���S�9����O!��93��]Ò�$�ZC&���6��F�
�Y38�����+j��
WbY4u���+M����g��,������[Ї�/�v\�E$�P	�^~p_�s�#|E\@�����r�����9.{c쬮\^Zf@��G��-���ƣ-����$").D�
T
烹������S��Wik�'t��,�����tD�����ȴ��>p�����N�.S�� �����wo>��D����7��(_�ռ���Ws�d�TB/�f�;x���@n��ѥ�#B$�h�kC���)����+vJ9�$���DY"��AES�q�ӆ{�$ߴ���ZI�jm��MO�&:�������Ex�?Z�I��?���8/��8uˊ��i+��W�w�Z ݷ@:w��t��s��? ]�tU��Oy��:%�������E\�f�p3�bPaptd\��f����EݾAD�jm"(���P,� ���EA�p���o�^ޣ?���H��ѵ[��4n��{���[�t�ٟi���/Ȃ�+��{��^E^�9iX�}�Ɋ��2��֛X��P��&�ǁc�2�h�C���0-`��֘��`��#�
�`+c��ʃ��E��20�a��Ch�A�[����%�'lH��9����5!��F�@rr�(9!%��1�r�/�f��^�#X�&J%M�
	2�h��N��t��[��NWX��D99b�m��NlW
/�Y�b^�f��7sBb����ҍ��4QOq��L�Z�^�t�K��f�%��;]+Ĺ-;;�$Αz�.NM���1�Ӝ�tO�F=u�ҚI���f��f�D
xEj�X�Z'�L�t���,�d�*�&�i"�.~�77�@:���T�Ne$N�@2���Bu�N��$r���s4�
���J;���S籉�
�Sn�ҍ>"-���ă+e��E�^oM��v��V�&:�0q��珿F��ߑ@���a�&/ZG�=@�dCv�^�P�*��䦜x�ۆ���W����*��t����[�����ҥ�/�v�x�
�P�T������#ґʓd�su�H�����Mk'3�i�aIE���������t˝т��CH"^cM~��0���X-�7�I>ׇt�#h{��x=��3�
��S{��h7�H�dv�=��ΠkQ�V?���|D:�ɒ��Z`&34
����ԧK�㥰a�`	%f1�0j�@��VP�Ř����Ԣ�x���$�^�d0�a%"�pLc!��D^}��S1��H�0�������޽��?�������W�'�vl�F{�MIEND�B`�PK�c�\V|V|V
config.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 +-----------------------------------------------------------------------+
*/

if (!class_exists('rcmail_install', false) || !isset($RCI)) {
    die("Not allowed! Please open installer/index.php instead.");
}

// allow the current user to get to the next step
$_SESSION['allowinstaller'] = true;

if (!empty($_POST['submit'])) {
  $_SESSION['config'] = $RCI->create_config();

  if ($RCI->save_configfile($_SESSION['config'])) {
     echo '<p class="notice">The config file was saved successfully into'
        . ' <tt>'.RCMAIL_CONFIG_DIR.'</tt> directory of your Roundcube installation.';

     if ($RCI->legacy_config) {
        echo '<br/><br/>Afterwards, please <b>remove</b> the old configuration files'
            . ' <tt>main.inc.php</tt> and <tt>db.inc.php</tt> from the config directory.';
     }

     echo '</p>';
  }
  else {
    $save_button = '';
    if (($dir = sys_get_temp_dir()) && @is_writable($dir)) {
      echo '<iframe name="getconfig" style="display:none"></iframe>';
      echo '<form id="getconfig_form" action="index.php" method="get" target="getconfig" style="display:none">';
      echo '<input name="_getconfig" value="2" /></form>';

      $button_txt  = html::quote('Save in ' . $dir);
      $save_button = '&nbsp;<input type="button" onclick="document.getElementById(\'getconfig_form\').submit()" value="' . $button_txt . '" />';
    }

    echo '<p class="notice">Copy or download the following configuration and save it';
    echo ' as <tt><b>config.inc.php</b></tt> within the <tt>'.RCUBE_CONFIG_DIR.'</tt> directory of your Roundcube installation.<br/>';
    echo ' Make sure that there are no characters before the <tt>&lt;?php</tt> bracket when saving the file.';
    echo '&nbsp;<input type="button" onclick="location.href=\'index.php?_getconfig=1\'" value="Download" />';
    echo $save_button;

    if ($RCI->legacy_config) {
       echo '<br/><br/>Afterwards, please <b>remove</b> the old configuration files'
        . ' <tt>main.inc.php</tt> and <tt>db.inc.php</tt> from the config directory.';
    }

    echo '</p>';

    $textbox = new html_textarea(['rows' => 16, 'cols' => 60, 'class' => 'configfile']);
    echo $textbox->show(($_SESSION['config']));
  }

  echo '<p class="hint">Of course there are more options to configure.
    Have a look at the defaults.inc.php file or visit <a href="https://github.com/roundcube/roundcubemail/wiki/Configuration" target="_blank">Howto_Config</a> to find out.</p>';

  echo '<p><input type="button" onclick="location.href=\'./index.php?_step=3\'" value="CONTINUE" /></p>';

  // echo '<style type="text/css"> .configblock { display:none } </style>';
  echo "\n<hr style='margin-bottom:1.6em' />\n";
}

?>
<form action="index.php" method="post">
<input type="hidden" name="_step" value="2" />

<fieldset>
<legend>General configuration</legend>
<dl class="configblock">

<dt class="propname">product_name</dt>
<dd>
<?php

$input_prodname = new html_inputfield(['name' => '_product_name', 'size' => 30, 'id' => 'cfgprodname']);
echo $input_prodname->show($RCI->getprop('product_name'));

?>
<div>The name of your service (used to compose page titles)</div>
</dd>

<dt class="propname">support_url</dt>
<dd>
<?php

$input_support = new html_inputfield(['name' => '_support_url', 'size' => 50, 'id' => 'cfgsupporturl']);
echo $input_support->show($RCI->getprop('support_url'));

?>
<div>Provide a URL where a user can get support for this Roundcube installation.<br/>PLEASE DO NOT LINK TO THE ROUNDCUBE.NET WEBSITE HERE!</div>
<p class="hint">Enter an absolute URL (including http://) to a support page/form or a mailto: link.</p>
</dd>

<dt class="propname">temp_dir</dt>
<dd>
<?php

$input_tempdir = new html_inputfield(['name' => '_temp_dir', 'size' => 30, 'id' => 'cfgtempdir']);
echo $input_tempdir->show($RCI->getprop('temp_dir'));

?>
<div>Use this folder to store temp files (must be writeable for webserver)</div>
</dd>

<dt class="propname">des_key</dt>
<dd>
<?php

$input_deskey = new html_inputfield(['name' => '_des_key', 'size' => 30, 'id' => 'cfgdeskey']);
echo $input_deskey->show($RCI->getprop('des_key'));

?>
<div>This key is used to encrypt the users imap password before storing in the session record</div>
<p class="hint">It's a random generated string to ensure that every installation has its own key.</p>
</dd>

<dt class="propname">ip_check</dt>
<dd>
<?php

$check_ipcheck = new html_checkbox(['name' => '_ip_check', 'id' => 'cfgipcheck']);
echo $check_ipcheck->show(intval($RCI->getprop('ip_check')), array('value' => 1));

?>
<label for="cfgipcheck">Check client IP in session authorization</label><br />

<p class="hint">This increases security but can cause sudden logouts when someone uses a proxy with changing IPs.</p>
</dd>

<dt class="propname">enable_spellcheck</dt>
<dd>
<?php
$check_spell = new html_checkbox(['name' => '_enable_spellcheck', 'id' => 'cfgspellcheck']);
echo $check_spell->show(intval($RCI->getprop('enable_spellcheck')), ['value' => 1]);
?>

<label for="cfgspellcheck">Make use of the spell checker</label><br />
</dd>

<dt class="propname">spellcheck_engine</dt>
<dd>

<?php
$select_spell = new html_select(['name' => '_spellcheck_engine', 'id' => 'cfgspellcheckengine']);
if (extension_loaded('pspell')) {
    $select_spell->add('Pspell', 'pspell');
}
if (extension_loaded('enchant')) {
    $select_spell->add('Enchant', 'enchant');
}
$select_spell->add('Googie', 'googie');
$select_spell->add('ATD', 'atd');

echo $select_spell->show($RCI->is_post ? $_POST['_spellcheck_engine'] : 'pspell');
?>

<div>Which spell checker to use</div>
<p class="hint">Googie implies that the message content will be sent to external server to check the spelling.</p>
</dd>

<dt class="propname">identities_level</dt>
<dd>

<?php

$input_ilevel = new html_select(['name' => '_identities_level', 'id' => 'cfgidentitieslevel']);
$input_ilevel->add('many identities with possibility to edit all params', 0);
$input_ilevel->add('many identities with possibility to edit all params but not email address', 1);
$input_ilevel->add('one identity with possibility to edit all params', 2);
$input_ilevel->add('one identity with possibility to edit all params but not email address', 3);
$input_ilevel->add('one identity with possibility to edit only signature', 4);
echo $input_ilevel->show($RCI->getprop('identities_level'), 0);

?>

<div>Level of identities access</div>
<p class="hint">Defines what users can do with their identities.</p>
</dd>

</dl>
</fieldset>

<fieldset>
<legend>Logging & Debugging</legend>
<dl class="loggingblock">

<dt class="propname">log_driver</dt>
<dd>

<?php
$select_log_driver = new html_select(['name' => '_log_driver', 'id' => 'cfglogdriver']);
$select_log_driver->add(['file', 'syslog', 'stdout'], ['file', 'syslog', 'stdout']);
echo $select_log_driver->show($RCI->getprop('log_driver', 'file'));
?>

<div>How to do logging? 'file' - write to files in the log directory, 'syslog' - use the syslog facility, 'stdout' writes to the process' STDOUT file descriptor.</div>
</dd>

<dt class="propname">log_dir</dt>
<dd>
<?php

$input_logdir = new html_inputfield(['name' => '_log_dir', 'size' => 30, 'id' => 'cfglogdir']);
echo $input_logdir->show($RCI->getprop('log_dir'));

?>
<div>Use this folder to store log files (must be writeable for webserver). Note that this only applies if you are using the 'file' log_driver.</div>
</dd>

<dt class="propname">syslog_id</dt>
<dd>
<?php

$input_syslogid = new html_inputfield(['name' => '_syslog_id', 'size' => 30, 'id' => 'cfgsyslogid']);
echo $input_syslogid->show($RCI->getprop('syslog_id', 'roundcube'));

?>
<div>What ID to use when logging with syslog. Note that this only applies if you are using the 'syslog' log_driver.</div>
</dd>

<dt class="propname">syslog_facility</dt>
<dd>
<?php

$input_syslogfacility = new html_select(['name' => '_syslog_facility', 'id' => 'cfgsyslogfacility']);
$input_syslogfacility->add('user-level messages', LOG_USER);
if (defined('LOG_MAIL')) {
    $input_syslogfacility->add('mail subsystem', LOG_MAIL);
}
if (defined('LOG_LOCAL0')) {
    $input_syslogfacility->add('local level 0', LOG_LOCAL0);
    $input_syslogfacility->add('local level 1', LOG_LOCAL1);
    $input_syslogfacility->add('local level 2', LOG_LOCAL2);
    $input_syslogfacility->add('local level 3', LOG_LOCAL3);
    $input_syslogfacility->add('local level 4', LOG_LOCAL4);
    $input_syslogfacility->add('local level 5', LOG_LOCAL5);
    $input_syslogfacility->add('local level 6', LOG_LOCAL6);
    $input_syslogfacility->add('local level 7', LOG_LOCAL7);
}
echo $input_syslogfacility->show($RCI->getprop('syslog_facility'), LOG_USER);

?>
<div>What ID to use when logging with syslog.  Note that this only applies if you are using the 'syslog' log_driver.</div>
</dd>

</dl>
</fieldset>

<fieldset>
<legend>Database setup</legend>
<dl class="configblock" id="cgfblockdb">
<dt class="propname">db_dsnw</dt>
<dd>
<p>Database settings for read/write operations:</p>
<?php

$select_dbtype = new html_select(['name' => '_dbtype', 'id' => 'cfgdbtype']);
foreach ($RCI->supported_dbs as $database => $ext) {
    if (extension_loaded($ext)) {
        $select_dbtype->add($database, substr($ext, 4));
    }
}

$input_dbhost = new html_inputfield(['name' => '_dbhost', 'size' => 20, 'id' => 'cfgdbhos']);
$input_dbname = new html_inputfield(['name' => '_dbname', 'size' => 20, 'id' => 'cfgdbname']);
$input_dbuser = new html_inputfield(['name' => '_dbuser', 'size' => 20, 'id' => 'cfgdbuser']);
$input_dbpass = new html_inputfield(['name' => '_dbpass', 'size' => 20, 'id' => 'cfgdbpass']);

$dsnw = rcube_db::parse_dsn($RCI->getprop('db_dsnw'));

echo $select_dbtype->show($RCI->is_post ? $_POST['_dbtype'] : ($dsnw['phptype'] ?? ''));
echo '<label for="cfgdbtype">Database type</label><br />';
echo $input_dbhost->show($RCI->is_post ? $_POST['_dbhost'] : ($dsnw['hostspec'] ?? ''));
echo '<label for="cfgdbhost">Database server (omit for sqlite)</label><br />';
echo $input_dbname->show($RCI->is_post ? $_POST['_dbname'] : ($dsnw['database'] ?? ''));
echo '<label for="cfgdbname">Database name (use absolute path and filename for sqlite)</label><br />';
echo $input_dbuser->show($RCI->is_post ? $_POST['_dbuser'] : ($dsnw['username'] ?? ''));
echo '<label for="cfgdbuser">Database user name (needs write permissions) (omit for sqlite)</label><br />';
echo $input_dbpass->show($RCI->is_post ? $_POST['_dbpass'] : ($dsnw['password'] ?? ''));
echo '<label for="cfgdbpass">Database password (omit for sqlite)</label><br />';

?>
</dd>

<dt class="propname">db_prefix</dt>
<dd>
<?php

$input_prefix = new html_inputfield(['name' => '_db_prefix', 'size' => 20, 'id' => 'cfgdbprefix']);
echo $input_prefix->show($RCI->getprop('db_prefix'));

?>
<div>Optional prefix that will be added to database object names (tables and sequences).</div>
</dd>

</dl>
</fieldset>


<fieldset>
<legend>IMAP Settings</legend>
<dl class="configblock" id="cgfblockimap">
<dt class="propname">imap_host</dt>
<dd>
<div id="defaulthostlist">
<?php

$text_imaphost = new html_inputfield(['name' => '_imap_host[]', 'size' => 30]);
$default_hosts = $RCI->get_hostlist();

if (empty($default_hosts)) {
    $default_hosts = [''];
}

$i = 0;
foreach ($default_hosts as $host) {
    echo '<div id="defaulthostentry'.$i.'">' . $text_imaphost->show($host);
    if ($i++ > 0) {
        echo '<a href="#" onclick="removehostfield(this.parentNode);return false" class="removelink" title="Remove this entry">remove</a>';
    }
    echo '</div>';
}

?>
</div>
<div><a href="javascript:addhostfield()" class="addlink" title="Add another field">add</a></div>

<div>The IMAP host(s) chosen to perform the log-in</div>
<p class="hint">Leave blank to show a textbox at login. To use SSL/STARTTLS connection add ssl:// or tls:// prefix. It can also contain the port number, e.g. tls://imap.domain.tld:143.
</dd>

<dt class="propname">username_domain</dt>
<dd>
<?php

$text_userdomain = new html_inputfield(['name' => '_username_domain', 'size' => 30, 'id' => 'cfguserdomain']);
echo $text_userdomain->show($RCI->getprop('username_domain'));

?>
<div>Automatically add this domain to user names for login</div>

<p class="hint">Only for IMAP servers that require full e-mail addresses for login</p>
</dd>

<dt class="propname">auto_create_user</dt>
<dd>
<?php

$check_autocreate = new html_checkbox(['name' => '_auto_create_user', 'id' => 'cfgautocreate']);
echo $check_autocreate->show(intval($RCI->getprop('auto_create_user')), ['value' => 1]);

?>
<label for="cfgautocreate">Automatically create a new Roundcube user when log-in the first time</label><br />

<p class="hint">A user is authenticated by the IMAP server but it requires a local record to store settings
and contacts. With this option enabled a new user record will automatically be created once the IMAP login succeeds.</p>

<p class="hint">If this option is disabled, the login only succeeds if there's a matching user-record in the local Roundcube database
what means that you have to create those records manually or disable this option after the first login.</p>
</dd>

<dt class="propname">sent_mbox</dt>
<dd>
<?php

$text_sentmbox = new html_inputfield(['name' => '_sent_mbox', 'size' => 20, 'id' => 'cfgsentmbox']);
echo $text_sentmbox->show($RCI->getprop('sent_mbox'));

?>
<div>Store sent messages in this folder</div>

<p class="hint">Leave blank if sent messages should not be stored. Note: folder must include namespace prefix if any.</p>
</dd>

<dt class="propname">trash_mbox</dt>
<dd>
<?php

$text_trashmbox = new html_inputfield(['name' => '_trash_mbox', 'size' => 20, 'id' => 'cfgtrashmbox']);
echo $text_trashmbox->show($RCI->getprop('trash_mbox'));

?>
<div>Move messages to this folder when deleting them</div>

<p class="hint">Leave blank if they should be deleted directly. Note: folder must include namespace prefix if any.</p>
</dd>

<dt class="propname">drafts_mbox</dt>
<dd>
<?php

$text_draftsmbox = new html_inputfield(['name' => '_drafts_mbox', 'size' => 20, 'id' => 'cfgdraftsmbox']);
echo $text_draftsmbox->show($RCI->getprop('drafts_mbox'));

?>
<div>Store draft messages in this folder</div>

<p class="hint">Leave blank if they should not be stored. Note: folder must include namespace prefix if any.</p>
</dd>

<dt class="propname">junk_mbox</dt>
<dd>
<?php

$text_junkmbox = new html_inputfield(['name' => '_junk_mbox', 'size' => 20, 'id' => 'cfgjunkmbox']);
echo $text_junkmbox->show($RCI->getprop('junk_mbox'));

?>
<div>Store spam messages in this folder</div>

<p class="hint">Note: folder must include namespace prefix if any.</p>
</dd>

</dd>
</dl>
</fieldset>

<fieldset>
<legend>SMTP Settings</legend>
<dl class="configblock" id="cgfblocksmtp">
<dt class="propname">smtp_host</dt>
<dd>
<?php

$text_smtphost = new html_inputfield(['name' => '_smtp_host', 'size' => 30, 'id' => 'cfgsmtphost']);
echo $text_smtphost->show($RCI->getprop('smtp_host', 'localhost:587'));

?>
<div>Use this host for sending mails</div>
<p class="hint">To use SSL/STARTTLS connection add ssl:// or tls:// prefix. It can also contain the port number, e.g. tls://smtp.domain.tld:587.</p>
</dd>

<dt class="propname">smtp_user/smtp_pass</dt>
<dd>
<?php

$text_smtpuser = new html_inputfield(['name' => '_smtp_user', 'size' => 20, 'id' => 'cfgsmtpuser']);
$text_smtppass = new html_inputfield(['name' => '_smtp_pass', 'size' => 20, 'id' => 'cfgsmtppass']);
echo $text_smtpuser->show($RCI->getprop('smtp_user'));
echo $text_smtppass->show($RCI->getprop('smtp_pass'));

?>
<div>SMTP username and password (if required)</div>
<p>
<?php

$check_smtpuser = new html_checkbox(['name' => '_smtp_user_u', 'id' => 'cfgsmtpuseru']);
echo $check_smtpuser->show($RCI->getprop('smtp_user') == '%u' || !empty($_POST['_smtp_user_u']) ? 1 : 0, ['value' => 1]);

?>
<label for="cfgsmtpuseru">Use the current IMAP username and password for SMTP authentication</label>
</p>
</dd>

<dt class="propname">smtp_log</dt>
<dd>
<?php

$check_smtplog = new html_checkbox(['name' => '_smtp_log', 'id' => 'cfgsmtplog']);
echo $check_smtplog->show(intval($RCI->getprop('smtp_log')), ['value' => 1]);

?>
<label for="cfgsmtplog">Log sent messages in <tt>{log_dir}/sendmail</tt> or to syslog.</label><br />
</dd>

</dl>
</fieldset>


<fieldset>
<legend>Display settings &amp; user prefs</legend>
<dl class="configblock" id="cgfblockdisplay">

<dt class="propname">language <span class="userconf">*</span></dt>
<dd>
<?php

$input_locale = new html_inputfield(['name' => '_language', 'size' => 6, 'id' => 'cfglocale']);
echo $input_locale->show($RCI->getprop('language'));

?>
<div>The default locale setting. This also defines the language of the login screen.<br/>Leave it empty to auto-detect the user agent language.</div>
<p class="hint">Enter a <a href="http://www.faqs.org/rfcs/rfc1766">RFC1766</a> formatted language name. Examples: en_US, de_DE, de_CH, fr_FR, pt_BR</p>
</dd>

<dt class="propname">skin <span class="userconf">*</span></dt>
<dd>
<?php

$input_skin = new html_select(['name' => '_skin', 'id' => 'cfgskin']);
$skins = $RCI->list_skins();
$input_skin->add($skins, $skins);
echo $input_skin->show($RCI->getprop('skin'));

?>
<div>Name of interface skin (folder in /skins)</div>
</dd>

<dt class="propname">mail_pagesize <span class="userconf">*</span></dt>
<dd>
<?php

$pagesize = $RCI->getprop('mail_pagesize');
if (!$pagesize) {
    $pagesize = $RCI->getprop('pagesize');
}
$input_pagesize = new html_inputfield(['name' => '_mail_pagesize', 'size' => 6, 'id' => 'cfgmailpagesize']);
echo $input_pagesize->show($pagesize);

?>
<div>Show up to X items in the mail messages list view.</div>
</dd>

<dt class="propname">addressbook_pagesize <span class="userconf">*</span></dt>
<dd>
<?php

$pagesize = $RCI->getprop('addressbook_pagesize');
if (!$pagesize) {
    $pagesize = $RCI->getprop('pagesize');
}
$input_pagesize = new html_inputfield(['name' => '_addressbook_pagesize', 'size' => 6, 'id' => 'cfgabookpagesize']);
echo $input_pagesize->show($pagesize);

?>
<div>Show up to X items in the contacts list view.</div>
</dd>

<dt class="propname">prefer_html <span class="userconf">*</span></dt>
<dd>
<?php

$check_htmlview = new html_checkbox(['name' => '_prefer_html', 'id' => 'cfghtmlview', 'value' => 1]);
echo $check_htmlview->show(intval($RCI->getprop('prefer_html')));

?>
<label for="cfghtmlview">Prefer displaying HTML messages</label><br />
</dd>

<dt class="propname">htmleditor <span class="userconf">*</span></dt>
<dd>
<label for="cfghtmlcompose">Compose HTML formatted messages</label>
<?php

$select_htmlcomp = new html_select(['name' => '_htmleditor', 'id' => 'cfghtmlcompose']);
$select_htmlcomp->add('never', 0);
$select_htmlcomp->add('always', 1);
$select_htmlcomp->add('on reply to HTML message only', 2);
echo $select_htmlcomp->show(intval($RCI->getprop('htmleditor')));

?>
</dd>

<dt class="propname">draft_autosave <span class="userconf">*</span></dt>
<dd>
<label for="cfgautosave">Save compose message every</label>
<?php

$select_autosave = new html_select(['name' => '_draft_autosave', 'id' => 'cfgautosave']);
$select_autosave->add('never', 0);
foreach ([1, 3, 5, 10] as $i => $min) {
    $select_autosave->add("$min min", $min * 60);
}

echo $select_autosave->show(intval($RCI->getprop('draft_autosave')));

?>
</dd>

<dt class="propname">mdn_requests <span class="userconf">*</span></dt>
<dd>
<?php

$mdn_opts = [
    0 => 'ask the user',
    1 => 'send automatically',
    3 => 'send receipt to user contacts, otherwise ask the user',
    4 => 'send receipt to user contacts, otherwise ignore',
    2 => 'ignore',
];

$select_mdnreq = new html_select(['name' => '_mdn_requests', 'id' => 'cfgmdnreq']);
$select_mdnreq->add(array_values($mdn_opts), array_keys($mdn_opts));
echo $select_mdnreq->show(intval($RCI->getprop('mdn_requests')));

?>
<div>Behavior if a received message requests a message delivery notification (read receipt)</div>
</dd>

<dt class="propname">mime_param_folding <span class="userconf">*</span></dt>
<dd>
<?php

$select_param_folding = new html_select(['name' => '_mime_param_folding', 'id' => 'cfgmimeparamfolding']);
$select_param_folding->add('Full RFC 2231 (Roundcube, Thunderbird)', '0'); 
$select_param_folding->add('RFC 2047/2231 (MS Outlook, OE)', '1');
$select_param_folding->add('Full RFC 2047 (deprecated)', '2');

echo $select_param_folding->show(strval($RCI->getprop('mime_param_folding')));

?>
<div>How to encode attachment long/non-ascii names</div>
</dd>

</dl>

<p class="hint"><span class="userconf">*</span>&nbsp; These settings are defaults for the user preferences</p>
</fieldset>

<fieldset>
<legend>Plugins</legend>
<dl class="configblock" id="cgfblockdisplay">

<?php
$plugins = $RCI->list_plugins();
foreach ($plugins as $p) {
    $p_check = new html_checkbox(['name' => '_plugins_'.$p['name'], 'id' => 'cfgplugin_'.$p['name'], 'value' => $p['name']]);
    echo '<dt class="propname"><label>';
    echo $p_check->show($p['enabled'] ? $p['name'] : 0);
    echo '&nbsp;' . $p['name'] . '</label></dt><dd>';
    echo '<label for="cfgplugin_'.$p['name'].'" class="hint">' . $p['desc'] . '</label><br/></dd>';
}

?>
</dl>

<p class="hint">Please consider checking dependencies of enabled plugins</p>
</fieldset>

<?php

echo '<p><input type="submit" name="submit" value="' . ($RCI->configured ? 'UPDATE' : 'CREATE') . ' CONFIG" ' . ($RCI->failures ? 'disabled' : '') . ' /></p>';

?>
</form>
PK�c�\�R�|�|	error_lognu�[���[30-Mar-2026 11:57:21 UTC] PHP Warning:  require_once(/home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3/Result.php): Failed to open stream: No such file or directory in /home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3.php on line 35
[30-Mar-2026 11:57:21 UTC] PHP Fatal error:  Uncaught Error: Failed opening required '/home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3/Result.php' (include_path='/home/lnzliplg/public_html/roundcube/vendor/pear/pear_exception:/home/lnzliplg/public_html/roundcube/vendor/pear/console_getopt:/home/lnzliplg/public_html/roundcube/vendor/pear/pear-core-minimal/src:/home/lnzliplg/public_html/roundcube/vendor/pear/net_ldap2:/home/lnzliplg/public_html/roundcube/vendor/pear/auth_sasl:/home/lnzliplg/public_html/roundcube/vendor/pear/console_commandline:/home/lnzliplg/public_html/roundcube/vendor/pear/crypt_gpg:/home/lnzliplg/public_html/roundcube/vendor/pear/mail_mime:/home/lnzliplg/public_html/roundcube/vendor/pear/net_socket:/home/lnzliplg/public_html/roundcube/vendor/pear/net_smtp:/home/lnzliplg/public_html/roundcube/program/lib:.:/opt/alt/php81/usr/share/pear:/opt/alt/php81/usr/share/php:/usr/share/pear:/usr/share/php') in /home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3.php:35
Stack trace:
#0 /home/lnzliplg/public_html/roundcube/vendor/composer/ClassLoader.php(576): include()
#1 /home/lnzliplg/public_html/roundcube/vendor/composer/ClassLoader.php(427): Composer\Autoload\{closure}()
#2 [internal function]: Composer\Autoload\ClassLoader->loadClass()
#3 /home/lnzliplg/public_html/roundcube/installer/check.php(203): class_exists()
#4 /home/lnzliplg/public_html/roundcube/installer/index.php(163): include('/home/lnzliplg/...')
#5 {main}
  thrown in /home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3.php on line 35
[03-Apr-2026 23:53:36 UTC] PHP Warning:  require_once(/home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3/Result.php): Failed to open stream: No such file or directory in /home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3.php on line 35
[03-Apr-2026 23:53:36 UTC] PHP Fatal error:  Uncaught Error: Failed opening required '/home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3/Result.php' (include_path='/home/lnzliplg/public_html/roundcube/vendor/pear/pear_exception:/home/lnzliplg/public_html/roundcube/vendor/pear/console_getopt:/home/lnzliplg/public_html/roundcube/vendor/pear/pear-core-minimal/src:/home/lnzliplg/public_html/roundcube/vendor/pear/net_ldap2:/home/lnzliplg/public_html/roundcube/vendor/pear/auth_sasl:/home/lnzliplg/public_html/roundcube/vendor/pear/console_commandline:/home/lnzliplg/public_html/roundcube/vendor/pear/crypt_gpg:/home/lnzliplg/public_html/roundcube/vendor/pear/mail_mime:/home/lnzliplg/public_html/roundcube/vendor/pear/net_socket:/home/lnzliplg/public_html/roundcube/vendor/pear/net_smtp:/home/lnzliplg/public_html/roundcube/program/lib:.:/opt/alt/php81/usr/share/pear:/opt/alt/php81/usr/share/php:/usr/share/pear:/usr/share/php') in /home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3.php:35
Stack trace:
#0 /home/lnzliplg/public_html/roundcube/vendor/composer/ClassLoader.php(576): include()
#1 /home/lnzliplg/public_html/roundcube/vendor/composer/ClassLoader.php(427): Composer\Autoload\{closure}()
#2 [internal function]: Composer\Autoload\ClassLoader->loadClass()
#3 /home/lnzliplg/public_html/roundcube/installer/check.php(203): class_exists()
#4 /home/lnzliplg/public_html/roundcube/installer/index.php(163): include('/home/lnzliplg/...')
#5 {main}
  thrown in /home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3.php on line 35
[03-Apr-2026 23:53:37 UTC] PHP Warning:  require_once(/home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3/Result.php): Failed to open stream: No such file or directory in /home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3.php on line 35
[03-Apr-2026 23:53:37 UTC] PHP Fatal error:  Uncaught Error: Failed opening required '/home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3/Result.php' (include_path='/home/lnzliplg/public_html/roundcube/vendor/pear/pear_exception:/home/lnzliplg/public_html/roundcube/vendor/pear/console_getopt:/home/lnzliplg/public_html/roundcube/vendor/pear/pear-core-minimal/src:/home/lnzliplg/public_html/roundcube/vendor/pear/net_ldap2:/home/lnzliplg/public_html/roundcube/vendor/pear/auth_sasl:/home/lnzliplg/public_html/roundcube/vendor/pear/console_commandline:/home/lnzliplg/public_html/roundcube/vendor/pear/crypt_gpg:/home/lnzliplg/public_html/roundcube/vendor/pear/mail_mime:/home/lnzliplg/public_html/roundcube/vendor/pear/net_socket:/home/lnzliplg/public_html/roundcube/vendor/pear/net_smtp:/home/lnzliplg/public_html/roundcube/program/lib:.:/opt/alt/php81/usr/share/pear:/opt/alt/php81/usr/share/php:/usr/share/pear:/usr/share/php') in /home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3.php:35
Stack trace:
#0 /home/lnzliplg/public_html/roundcube/vendor/composer/ClassLoader.php(576): include()
#1 /home/lnzliplg/public_html/roundcube/vendor/composer/ClassLoader.php(427): Composer\Autoload\{closure}()
#2 [internal function]: Composer\Autoload\ClassLoader->loadClass()
#3 /home/lnzliplg/public_html/roundcube/installer/check.php(203): class_exists()
#4 /home/lnzliplg/public_html/roundcube/installer/index.php(163): include('/home/lnzliplg/...')
#5 {main}
  thrown in /home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3.php on line 35
[03-Apr-2026 23:54:01 UTC] PHP Warning:  require_once(/home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3/Result.php): Failed to open stream: No such file or directory in /home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3.php on line 35
[03-Apr-2026 23:54:01 UTC] PHP Fatal error:  Uncaught Error: Failed opening required '/home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3/Result.php' (include_path='/home/lnzliplg/public_html/roundcube/vendor/pear/pear_exception:/home/lnzliplg/public_html/roundcube/vendor/pear/console_getopt:/home/lnzliplg/public_html/roundcube/vendor/pear/pear-core-minimal/src:/home/lnzliplg/public_html/roundcube/vendor/pear/net_ldap2:/home/lnzliplg/public_html/roundcube/vendor/pear/auth_sasl:/home/lnzliplg/public_html/roundcube/vendor/pear/console_commandline:/home/lnzliplg/public_html/roundcube/vendor/pear/crypt_gpg:/home/lnzliplg/public_html/roundcube/vendor/pear/mail_mime:/home/lnzliplg/public_html/roundcube/vendor/pear/net_socket:/home/lnzliplg/public_html/roundcube/vendor/pear/net_smtp:/home/lnzliplg/public_html/roundcube/program/lib:.:/opt/alt/php81/usr/share/pear:/opt/alt/php81/usr/share/php:/usr/share/pear:/usr/share/php') in /home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3.php:35
Stack trace:
#0 /home/lnzliplg/public_html/roundcube/vendor/composer/ClassLoader.php(576): include()
#1 /home/lnzliplg/public_html/roundcube/vendor/composer/ClassLoader.php(427): Composer\Autoload\{closure}()
#2 [internal function]: Composer\Autoload\ClassLoader->loadClass()
#3 /home/lnzliplg/public_html/roundcube/installer/check.php(203): class_exists()
#4 /home/lnzliplg/public_html/roundcube/installer/index.php(163): include('/home/lnzliplg/...')
#5 {main}
  thrown in /home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3.php on line 35
[03-Apr-2026 23:54:03 UTC] PHP Warning:  require_once(/home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3/Result.php): Failed to open stream: No such file or directory in /home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3.php on line 35
[03-Apr-2026 23:54:03 UTC] PHP Fatal error:  Uncaught Error: Failed opening required '/home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3/Result.php' (include_path='/home/lnzliplg/public_html/roundcube/vendor/pear/pear_exception:/home/lnzliplg/public_html/roundcube/vendor/pear/console_getopt:/home/lnzliplg/public_html/roundcube/vendor/pear/pear-core-minimal/src:/home/lnzliplg/public_html/roundcube/vendor/pear/net_ldap2:/home/lnzliplg/public_html/roundcube/vendor/pear/auth_sasl:/home/lnzliplg/public_html/roundcube/vendor/pear/console_commandline:/home/lnzliplg/public_html/roundcube/vendor/pear/crypt_gpg:/home/lnzliplg/public_html/roundcube/vendor/pear/mail_mime:/home/lnzliplg/public_html/roundcube/vendor/pear/net_socket:/home/lnzliplg/public_html/roundcube/vendor/pear/net_smtp:/home/lnzliplg/public_html/roundcube/program/lib:.:/opt/alt/php81/usr/share/pear:/opt/alt/php81/usr/share/php:/usr/share/pear:/usr/share/php') in /home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3.php:35
Stack trace:
#0 /home/lnzliplg/public_html/roundcube/vendor/composer/ClassLoader.php(576): include()
#1 /home/lnzliplg/public_html/roundcube/vendor/composer/ClassLoader.php(427): Composer\Autoload\{closure}()
#2 [internal function]: Composer\Autoload\ClassLoader->loadClass()
#3 /home/lnzliplg/public_html/roundcube/installer/check.php(203): class_exists()
#4 /home/lnzliplg/public_html/roundcube/installer/index.php(163): include('/home/lnzliplg/...')
#5 {main}
  thrown in /home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3.php on line 35
[03-Apr-2026 23:57:18 UTC] PHP Warning:  require_once(/home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3/Result.php): Failed to open stream: No such file or directory in /home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3.php on line 35
[03-Apr-2026 23:57:18 UTC] PHP Fatal error:  Uncaught Error: Failed opening required '/home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3/Result.php' (include_path='/home/lnzliplg/public_html/roundcube/vendor/pear/pear_exception:/home/lnzliplg/public_html/roundcube/vendor/pear/console_getopt:/home/lnzliplg/public_html/roundcube/vendor/pear/pear-core-minimal/src:/home/lnzliplg/public_html/roundcube/vendor/pear/net_ldap2:/home/lnzliplg/public_html/roundcube/vendor/pear/auth_sasl:/home/lnzliplg/public_html/roundcube/vendor/pear/console_commandline:/home/lnzliplg/public_html/roundcube/vendor/pear/crypt_gpg:/home/lnzliplg/public_html/roundcube/vendor/pear/mail_mime:/home/lnzliplg/public_html/roundcube/vendor/pear/net_socket:/home/lnzliplg/public_html/roundcube/vendor/pear/net_smtp:/home/lnzliplg/public_html/roundcube/program/lib:.:/opt/alt/php81/usr/share/pear:/opt/alt/php81/usr/share/php:/usr/share/pear:/usr/share/php') in /home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3.php:35
Stack trace:
#0 /home/lnzliplg/public_html/roundcube/vendor/composer/ClassLoader.php(576): include()
#1 /home/lnzliplg/public_html/roundcube/vendor/composer/ClassLoader.php(427): Composer\Autoload\{closure}()
#2 [internal function]: Composer\Autoload\ClassLoader->loadClass()
#3 /home/lnzliplg/public_html/roundcube/installer/check.php(203): class_exists()
#4 /home/lnzliplg/public_html/roundcube/installer/index.php(163): include('/home/lnzliplg/...')
#5 {main}
  thrown in /home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3.php on line 35
[03-Apr-2026 23:57:20 UTC] PHP Warning:  require_once(/home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3/Result.php): Failed to open stream: No such file or directory in /home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3.php on line 35
[03-Apr-2026 23:57:20 UTC] PHP Fatal error:  Uncaught Error: Failed opening required '/home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3/Result.php' (include_path='/home/lnzliplg/public_html/roundcube/vendor/pear/pear_exception:/home/lnzliplg/public_html/roundcube/vendor/pear/console_getopt:/home/lnzliplg/public_html/roundcube/vendor/pear/pear-core-minimal/src:/home/lnzliplg/public_html/roundcube/vendor/pear/net_ldap2:/home/lnzliplg/public_html/roundcube/vendor/pear/auth_sasl:/home/lnzliplg/public_html/roundcube/vendor/pear/console_commandline:/home/lnzliplg/public_html/roundcube/vendor/pear/crypt_gpg:/home/lnzliplg/public_html/roundcube/vendor/pear/mail_mime:/home/lnzliplg/public_html/roundcube/vendor/pear/net_socket:/home/lnzliplg/public_html/roundcube/vendor/pear/net_smtp:/home/lnzliplg/public_html/roundcube/program/lib:.:/opt/alt/php81/usr/share/pear:/opt/alt/php81/usr/share/php:/usr/share/pear:/usr/share/php') in /home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3.php:35
Stack trace:
#0 /home/lnzliplg/public_html/roundcube/vendor/composer/ClassLoader.php(576): include()
#1 /home/lnzliplg/public_html/roundcube/vendor/composer/ClassLoader.php(427): Composer\Autoload\{closure}()
#2 [internal function]: Composer\Autoload\ClassLoader->loadClass()
#3 /home/lnzliplg/public_html/roundcube/installer/check.php(203): class_exists()
#4 /home/lnzliplg/public_html/roundcube/installer/index.php(163): include('/home/lnzliplg/...')
#5 {main}
  thrown in /home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3.php on line 35
[04-Apr-2026 00:45:39 UTC] PHP Warning:  require_once(/home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3/Result.php): Failed to open stream: No such file or directory in /home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3.php on line 35
[04-Apr-2026 00:45:39 UTC] PHP Fatal error:  Uncaught Error: Failed opening required '/home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3/Result.php' (include_path='/home/lnzliplg/public_html/roundcube/vendor/pear/pear_exception:/home/lnzliplg/public_html/roundcube/vendor/pear/console_getopt:/home/lnzliplg/public_html/roundcube/vendor/pear/pear-core-minimal/src:/home/lnzliplg/public_html/roundcube/vendor/pear/net_ldap2:/home/lnzliplg/public_html/roundcube/vendor/pear/auth_sasl:/home/lnzliplg/public_html/roundcube/vendor/pear/console_commandline:/home/lnzliplg/public_html/roundcube/vendor/pear/crypt_gpg:/home/lnzliplg/public_html/roundcube/vendor/pear/mail_mime:/home/lnzliplg/public_html/roundcube/vendor/pear/net_socket:/home/lnzliplg/public_html/roundcube/vendor/pear/net_smtp:/home/lnzliplg/public_html/roundcube/program/lib:.:/opt/alt/php81/usr/share/pear:/opt/alt/php81/usr/share/php:/usr/share/pear:/usr/share/php') in /home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3.php:35
Stack trace:
#0 /home/lnzliplg/public_html/roundcube/vendor/composer/ClassLoader.php(576): include()
#1 /home/lnzliplg/public_html/roundcube/vendor/composer/ClassLoader.php(427): Composer\Autoload\{closure}()
#2 [internal function]: Composer\Autoload\ClassLoader->loadClass()
#3 /home/lnzliplg/public_html/roundcube/installer/check.php(203): class_exists()
#4 /home/lnzliplg/public_html/roundcube/installer/index.php(163): include('/home/lnzliplg/...')
#5 {main}
  thrown in /home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3.php on line 35
[04-Apr-2026 01:42:15 UTC] PHP Warning:  require_once(/home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3/Result.php): Failed to open stream: No such file or directory in /home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3.php on line 35
[04-Apr-2026 01:42:15 UTC] PHP Fatal error:  Uncaught Error: Failed opening required '/home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3/Result.php' (include_path='/home/lnzliplg/public_html/roundcube/vendor/pear/pear_exception:/home/lnzliplg/public_html/roundcube/vendor/pear/console_getopt:/home/lnzliplg/public_html/roundcube/vendor/pear/pear-core-minimal/src:/home/lnzliplg/public_html/roundcube/vendor/pear/net_ldap2:/home/lnzliplg/public_html/roundcube/vendor/pear/auth_sasl:/home/lnzliplg/public_html/roundcube/vendor/pear/console_commandline:/home/lnzliplg/public_html/roundcube/vendor/pear/crypt_gpg:/home/lnzliplg/public_html/roundcube/vendor/pear/mail_mime:/home/lnzliplg/public_html/roundcube/vendor/pear/net_socket:/home/lnzliplg/public_html/roundcube/vendor/pear/net_smtp:/home/lnzliplg/public_html/roundcube/program/lib:.:/opt/alt/php81/usr/share/pear:/opt/alt/php81/usr/share/php:/usr/share/pear:/usr/share/php') in /home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3.php:35
Stack trace:
#0 /home/lnzliplg/public_html/roundcube/vendor/composer/ClassLoader.php(576): include()
#1 /home/lnzliplg/public_html/roundcube/vendor/composer/ClassLoader.php(427): Composer\Autoload\{closure}()
#2 [internal function]: Composer\Autoload\ClassLoader->loadClass()
#3 /home/lnzliplg/public_html/roundcube/installer/check.php(203): class_exists()
#4 /home/lnzliplg/public_html/roundcube/installer/index.php(163): include('/home/lnzliplg/...')
#5 {main}
  thrown in /home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3.php on line 35
[06-Apr-2026 11:59:52 UTC] PHP Warning:  require_once(/home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3/Result.php): Failed to open stream: No such file or directory in /home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3.php on line 35
[06-Apr-2026 11:59:52 UTC] PHP Fatal error:  Uncaught Error: Failed opening required '/home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3/Result.php' (include_path='/home/lnzliplg/public_html/roundcube/vendor/pear/pear_exception:/home/lnzliplg/public_html/roundcube/vendor/pear/console_getopt:/home/lnzliplg/public_html/roundcube/vendor/pear/pear-core-minimal/src:/home/lnzliplg/public_html/roundcube/vendor/pear/net_ldap2:/home/lnzliplg/public_html/roundcube/vendor/pear/auth_sasl:/home/lnzliplg/public_html/roundcube/vendor/pear/console_commandline:/home/lnzliplg/public_html/roundcube/vendor/pear/crypt_gpg:/home/lnzliplg/public_html/roundcube/vendor/pear/mail_mime:/home/lnzliplg/public_html/roundcube/vendor/pear/net_socket:/home/lnzliplg/public_html/roundcube/vendor/pear/net_smtp:/home/lnzliplg/public_html/roundcube/program/lib:.:/opt/alt/php81/usr/share/pear:/opt/alt/php81/usr/share/php:/usr/share/pear:/usr/share/php') in /home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3.php:35
Stack trace:
#0 /home/lnzliplg/public_html/roundcube/vendor/composer/ClassLoader.php(576): include()
#1 /home/lnzliplg/public_html/roundcube/vendor/composer/ClassLoader.php(427): Composer\Autoload\{closure}()
#2 [internal function]: Composer\Autoload\ClassLoader->loadClass()
#3 /home/lnzliplg/public_html/roundcube/installer/check.php(203): class_exists()
#4 /home/lnzliplg/public_html/roundcube/installer/index.php(163): include('/home/lnzliplg/...')
#5 {main}
  thrown in /home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3.php on line 35
[13-Apr-2026 12:01:39 UTC] PHP Warning:  require_once(/home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3/Result.php): Failed to open stream: No such file or directory in /home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3.php on line 35
[13-Apr-2026 12:01:39 UTC] PHP Fatal error:  Uncaught Error: Failed opening required '/home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3/Result.php' (include_path='/home/lnzliplg/public_html/roundcube/vendor/pear/pear_exception:/home/lnzliplg/public_html/roundcube/vendor/pear/console_getopt:/home/lnzliplg/public_html/roundcube/vendor/pear/pear-core-minimal/src:/home/lnzliplg/public_html/roundcube/vendor/pear/net_ldap2:/home/lnzliplg/public_html/roundcube/vendor/pear/auth_sasl:/home/lnzliplg/public_html/roundcube/vendor/pear/console_commandline:/home/lnzliplg/public_html/roundcube/vendor/pear/crypt_gpg:/home/lnzliplg/public_html/roundcube/vendor/pear/mail_mime:/home/lnzliplg/public_html/roundcube/vendor/pear/net_socket:/home/lnzliplg/public_html/roundcube/vendor/pear/net_smtp:/home/lnzliplg/public_html/roundcube/program/lib:.:/opt/alt/php81/usr/share/pear:/opt/alt/php81/usr/share/php:/usr/share/pear:/usr/share/php') in /home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3.php:35
Stack trace:
#0 /home/lnzliplg/public_html/roundcube/vendor/composer/ClassLoader.php(576): include()
#1 /home/lnzliplg/public_html/roundcube/vendor/composer/ClassLoader.php(427): Composer\Autoload\{closure}()
#2 [internal function]: Composer\Autoload\ClassLoader->loadClass()
#3 /home/lnzliplg/public_html/roundcube/installer/check.php(203): class_exists()
#4 /home/lnzliplg/public_html/roundcube/installer/index.php(163): include('/home/lnzliplg/...')
#5 {main}
  thrown in /home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3.php on line 35
[13-Apr-2026 17:44:32 UTC] PHP Warning:  require_once(/home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3/Result.php): Failed to open stream: No such file or directory in /home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3.php on line 35
[13-Apr-2026 17:44:32 UTC] PHP Fatal error:  Uncaught Error: Failed opening required '/home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3/Result.php' (include_path='/home/lnzliplg/public_html/roundcube/vendor/pear/pear_exception:/home/lnzliplg/public_html/roundcube/vendor/pear/console_getopt:/home/lnzliplg/public_html/roundcube/vendor/pear/pear-core-minimal/src:/home/lnzliplg/public_html/roundcube/vendor/pear/net_ldap2:/home/lnzliplg/public_html/roundcube/vendor/pear/auth_sasl:/home/lnzliplg/public_html/roundcube/vendor/pear/console_commandline:/home/lnzliplg/public_html/roundcube/vendor/pear/crypt_gpg:/home/lnzliplg/public_html/roundcube/vendor/pear/mail_mime:/home/lnzliplg/public_html/roundcube/vendor/pear/net_socket:/home/lnzliplg/public_html/roundcube/vendor/pear/net_smtp:/home/lnzliplg/public_html/roundcube/program/lib:.:/opt/alt/php81/usr/share/pear:/opt/alt/php81/usr/share/php:/usr/share/pear:/usr/share/php') in /home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3.php:35
Stack trace:
#0 /home/lnzliplg/public_html/roundcube/vendor/composer/ClassLoader.php(576): include()
#1 /home/lnzliplg/public_html/roundcube/vendor/composer/ClassLoader.php(427): Composer\Autoload\{closure}()
#2 [internal function]: Composer\Autoload\ClassLoader->loadClass()
#3 /home/lnzliplg/public_html/roundcube/installer/check.php(203): class_exists()
#4 /home/lnzliplg/public_html/roundcube/installer/index.php(163): include('/home/lnzliplg/...')
#5 {main}
  thrown in /home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3.php on line 35
[13-Apr-2026 17:46:11 UTC] PHP Warning:  require_once(/home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3/Result.php): Failed to open stream: No such file or directory in /home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3.php on line 35
[13-Apr-2026 17:46:11 UTC] PHP Fatal error:  Uncaught Error: Failed opening required '/home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3/Result.php' (include_path='/home/lnzliplg/public_html/roundcube/vendor/pear/pear_exception:/home/lnzliplg/public_html/roundcube/vendor/pear/console_getopt:/home/lnzliplg/public_html/roundcube/vendor/pear/pear-core-minimal/src:/home/lnzliplg/public_html/roundcube/vendor/pear/net_ldap2:/home/lnzliplg/public_html/roundcube/vendor/pear/auth_sasl:/home/lnzliplg/public_html/roundcube/vendor/pear/console_commandline:/home/lnzliplg/public_html/roundcube/vendor/pear/crypt_gpg:/home/lnzliplg/public_html/roundcube/vendor/pear/mail_mime:/home/lnzliplg/public_html/roundcube/vendor/pear/net_socket:/home/lnzliplg/public_html/roundcube/vendor/pear/net_smtp:/home/lnzliplg/public_html/roundcube/program/lib:.:/opt/alt/php81/usr/share/pear:/opt/alt/php81/usr/share/php:/usr/share/pear:/usr/share/php') in /home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3.php:35
Stack trace:
#0 /home/lnzliplg/public_html/roundcube/vendor/composer/ClassLoader.php(576): include()
#1 /home/lnzliplg/public_html/roundcube/vendor/composer/ClassLoader.php(427): Composer\Autoload\{closure}()
#2 [internal function]: Composer\Autoload\ClassLoader->loadClass()
#3 /home/lnzliplg/public_html/roundcube/installer/check.php(203): class_exists()
#4 /home/lnzliplg/public_html/roundcube/installer/index.php(163): include('/home/lnzliplg/...')
#5 {main}
  thrown in /home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3.php on line 35
[15-Apr-2026 00:04:40 UTC] PHP Warning:  require_once(/home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3/Result.php): Failed to open stream: No such file or directory in /home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3.php on line 35
[15-Apr-2026 00:04:40 UTC] PHP Fatal error:  Uncaught Error: Failed opening required '/home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3/Result.php' (include_path='/home/lnzliplg/public_html/roundcube/vendor/pear/pear_exception:/home/lnzliplg/public_html/roundcube/vendor/pear/console_getopt:/home/lnzliplg/public_html/roundcube/vendor/pear/pear-core-minimal/src:/home/lnzliplg/public_html/roundcube/vendor/pear/net_ldap2:/home/lnzliplg/public_html/roundcube/vendor/pear/auth_sasl:/home/lnzliplg/public_html/roundcube/vendor/pear/console_commandline:/home/lnzliplg/public_html/roundcube/vendor/pear/crypt_gpg:/home/lnzliplg/public_html/roundcube/vendor/pear/mail_mime:/home/lnzliplg/public_html/roundcube/vendor/pear/net_socket:/home/lnzliplg/public_html/roundcube/vendor/pear/net_smtp:/home/lnzliplg/public_html/roundcube/program/lib:.:/opt/alt/php81/usr/share/pear:/opt/alt/php81/usr/share/php:/usr/share/pear:/usr/share/php') in /home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3.php:35
Stack trace:
#0 /home/lnzliplg/public_html/roundcube/vendor/composer/ClassLoader.php(576): include()
#1 /home/lnzliplg/public_html/roundcube/vendor/composer/ClassLoader.php(427): Composer\Autoload\{closure}()
#2 [internal function]: Composer\Autoload\ClassLoader->loadClass()
#3 /home/lnzliplg/public_html/roundcube/installer/check.php(203): class_exists()
#4 /home/lnzliplg/public_html/roundcube/installer/index.php(163): include('/home/lnzliplg/...')
#5 {main}
  thrown in /home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3.php on line 35
[20-Apr-2026 11:56:32 UTC] PHP Warning:  require_once(/home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3/Result.php): Failed to open stream: No such file or directory in /home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3.php on line 35
[20-Apr-2026 11:56:32 UTC] PHP Fatal error:  Uncaught Error: Failed opening required '/home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3/Result.php' (include_path='/home/lnzliplg/public_html/roundcube/vendor/pear/pear_exception:/home/lnzliplg/public_html/roundcube/vendor/pear/console_getopt:/home/lnzliplg/public_html/roundcube/vendor/pear/pear-core-minimal/src:/home/lnzliplg/public_html/roundcube/vendor/pear/net_ldap2:/home/lnzliplg/public_html/roundcube/vendor/pear/auth_sasl:/home/lnzliplg/public_html/roundcube/vendor/pear/console_commandline:/home/lnzliplg/public_html/roundcube/vendor/pear/crypt_gpg:/home/lnzliplg/public_html/roundcube/vendor/pear/mail_mime:/home/lnzliplg/public_html/roundcube/vendor/pear/net_socket:/home/lnzliplg/public_html/roundcube/vendor/pear/net_smtp:/home/lnzliplg/public_html/roundcube/program/lib:.:/opt/alt/php81/usr/share/pear:/opt/alt/php81/usr/share/php:/usr/share/pear:/usr/share/php') in /home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3.php:35
Stack trace:
#0 /home/lnzliplg/public_html/roundcube/vendor/composer/ClassLoader.php(576): include()
#1 /home/lnzliplg/public_html/roundcube/vendor/composer/ClassLoader.php(427): Composer\Autoload\{closure}()
#2 [internal function]: Composer\Autoload\ClassLoader->loadClass()
#3 /home/lnzliplg/public_html/roundcube/installer/check.php(203): class_exists()
#4 /home/lnzliplg/public_html/roundcube/installer/index.php(163): include('/home/lnzliplg/...')
#5 {main}
  thrown in /home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3.php on line 35
[24-Apr-2026 10:12:53 UTC] PHP Warning:  require_once(/home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3/Result.php): Failed to open stream: No such file or directory in /home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3.php on line 35
[24-Apr-2026 10:12:53 UTC] PHP Fatal error:  Uncaught Error: Failed opening required '/home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3/Result.php' (include_path='/home/lnzliplg/public_html/roundcube/vendor/pear/pear_exception:/home/lnzliplg/public_html/roundcube/vendor/pear/console_getopt:/home/lnzliplg/public_html/roundcube/vendor/pear/pear-core-minimal/src:/home/lnzliplg/public_html/roundcube/vendor/pear/net_ldap2:/home/lnzliplg/public_html/roundcube/vendor/pear/auth_sasl:/home/lnzliplg/public_html/roundcube/vendor/pear/console_commandline:/home/lnzliplg/public_html/roundcube/vendor/pear/crypt_gpg:/home/lnzliplg/public_html/roundcube/vendor/pear/mail_mime:/home/lnzliplg/public_html/roundcube/vendor/pear/net_socket:/home/lnzliplg/public_html/roundcube/vendor/pear/net_smtp:/home/lnzliplg/public_html/roundcube/program/lib:.:/opt/alt/php81/usr/share/pear:/opt/alt/php81/usr/share/php:/usr/share/pear:/usr/share/php') in /home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3.php:35
Stack trace:
#0 /home/lnzliplg/public_html/roundcube/vendor/composer/ClassLoader.php(576): include()
#1 /home/lnzliplg/public_html/roundcube/vendor/composer/ClassLoader.php(427): Composer\Autoload\{closure}()
#2 [internal function]: Composer\Autoload\ClassLoader->loadClass()
#3 /home/lnzliplg/public_html/roundcube/installer/check.php(203): class_exists()
#4 /home/lnzliplg/public_html/roundcube/installer/index.php(163): include('/home/lnzliplg/...')
#5 {main}
  thrown in /home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3.php on line 35
[24-Apr-2026 10:45:09 UTC] PHP Warning:  require_once(/home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3/Result.php): Failed to open stream: No such file or directory in /home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3.php on line 35
[24-Apr-2026 10:45:09 UTC] PHP Fatal error:  Uncaught Error: Failed opening required '/home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3/Result.php' (include_path='/home/lnzliplg/public_html/roundcube/vendor/pear/pear_exception:/home/lnzliplg/public_html/roundcube/vendor/pear/console_getopt:/home/lnzliplg/public_html/roundcube/vendor/pear/pear-core-minimal/src:/home/lnzliplg/public_html/roundcube/vendor/pear/net_ldap2:/home/lnzliplg/public_html/roundcube/vendor/pear/auth_sasl:/home/lnzliplg/public_html/roundcube/vendor/pear/console_commandline:/home/lnzliplg/public_html/roundcube/vendor/pear/crypt_gpg:/home/lnzliplg/public_html/roundcube/vendor/pear/mail_mime:/home/lnzliplg/public_html/roundcube/vendor/pear/net_socket:/home/lnzliplg/public_html/roundcube/vendor/pear/net_smtp:/home/lnzliplg/public_html/roundcube/program/lib:.:/opt/alt/php81/usr/share/pear:/opt/alt/php81/usr/share/php:/usr/share/pear:/usr/share/php') in /home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3.php:35
Stack trace:
#0 /home/lnzliplg/public_html/roundcube/vendor/composer/ClassLoader.php(576): include()
#1 /home/lnzliplg/public_html/roundcube/vendor/composer/ClassLoader.php(427): Composer\Autoload\{closure}()
#2 [internal function]: Composer\Autoload\ClassLoader->loadClass()
#3 /home/lnzliplg/public_html/roundcube/installer/check.php(203): class_exists()
#4 /home/lnzliplg/public_html/roundcube/installer/index.php(163): include('/home/lnzliplg/...')
#5 {main}
  thrown in /home/lnzliplg/public_html/roundcube/vendor/kolab/net_ldap3/lib/Net/LDAP3.php on line 35
PK�c�\酏JTT	index.phpnu�[���<?php

/**
 +-------------------------------------------------------------------------+
 | Roundcube Webmail setup tool                                            |
 | Version 1.6.7                                                         |
 |                                                                         |
 | Copyright (C) The Roundcube Dev Team                                    |
 |                                                                         |
 | This program is free software: you can redistribute it and/or modify    |
 | it under the terms of the GNU General Public License (with exceptions   |
 | for skins & plugins) as published by the Free Software Foundation,      |
 | either version 3 of the License, or (at your option) any later version. |
 |                                                                         |
 | This file forms part of the Roundcube Webmail Software for which the    |
 | following exception is added: Plugins and Skins which merely make       |
 | function calls to the Roundcube Webmail Software, and for that purpose  |
 | include it by reference shall not be considered modifications of        |
 | the software.                                                           |
 |                                                                         |
 | If you wish to use this file in another project or create a modified    |
 | version that will not be part of the Roundcube Webmail Software, you    |
 | may remove the exception above and use this source code under the       |
 | original version of the license.                                        |
 |                                                                         |
 | This program is distributed in the hope that it will be useful,         |
 | but WITHOUT ANY WARRANTY; without even the implied warranty of          |
 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the            |
 | GNU General Public License for more details.                            |
 |                                                                         |
 | You should have received a copy of the GNU General Public License       |
 | along with this program.  If not, see http://www.gnu.org/licenses/.     |
 |                                                                         |
 +-------------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                          |
 +-------------------------------------------------------------------------+
*/

ini_set('display_errors', 1);

define('INSTALL_PATH', realpath(__DIR__ . '/../').'/');

require INSTALL_PATH . 'program/include/iniset.php';

if (function_exists('session_start')) {
    session_start();
}

$RCI = rcmail_install::get_instance();
$RCI->load_config();

if (isset($_GET['_getconfig'])) {
    $filename = 'config.inc.php';
    if (!empty($_SESSION['config']) && $_GET['_getconfig'] == 2) {
        $path = sys_get_temp_dir() . DIRECTORY_SEPARATOR . $filename;
        @unlink($path);
        file_put_contents($path, $_SESSION['config']);
        exit;
    }

    if (!empty($_SESSION['config'])) {
        header('Content-type: text/plain');
        header('Content-Disposition: attachment; filename="'.$filename.'"');
        echo $_SESSION['config'];
        exit;
    }

    header('HTTP/1.0 404 Not found');
    die("The requested configuration was not found. Please run the installer from the beginning.");
}

if (
    $RCI->configured
    && !empty($_GET['_mergeconfig'])
    && ($RCI->getprop('enable_installer') || !empty($_SESSION['allowinstaller']))
) {
    $filename = 'config.inc.php';

    header('Content-type: text/plain');
    header('Content-Disposition: attachment; filename="'.$filename.'"');

    $RCI->merge_config();
    echo $RCI->create_config();
    exit;
}

// go to 'check env' step if we have a local configuration
if ($RCI->configured && empty($_REQUEST['_step'])) {
    header("Location: ./?_step=1");
    exit;
}

?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>Roundcube Webmail Installer</title>
<meta name="Robots" content="noindex,nofollow" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="stylesheet" type="text/css" href="styles.css" />
<script type="text/javascript" src="client.js"></script>
</head>

<body>

<div id="banner">
  <div class="banner-bg"></div>
  <div class="banner-logo"><a href="http://roundcube.net"><img src="images/roundcube_logo.png" width="210" height="55" border="0" alt="Roundcube - open source webmail software" /></a></div>
</div>

<div id="topnav">
  <a href="https://github.com/roundcube/roundcubemail/wiki/Installation">How-to Wiki</a>
</div>

<div id="content">

<?php

// exit if installation is complete
if ($RCI->configured && !$RCI->getprop('enable_installer') && empty($_SESSION['allowinstaller'])) {
    // header("HTTP/1.0 404 Not Found");
    if ($RCI->configured && $RCI->legacy_config) {
        echo '<h2 class="error">Your configuration needs to be migrated!</h2>';
        echo '<p>We changed the configuration files structure and your installation needs to be updated accordingly.</p>';
        echo '<p>Please run the <tt>bin/update.sh</tt> script from the command line or set <p>&nbsp; <tt>$rcube_config[\'enable_installer\'] = true;</tt></p>';
        echo ' in your RCUBE_CONFIG_DIR/main.inc.php to let the installer help you migrating it.</p>';
    }
    else {
        echo '<h2 class="error">The installer is disabled!</h2>';
        echo '<p>To enable it again, set <tt>$config[\'enable_installer\'] = true;</tt> in RCUBE_CONFIG_DIR/config.inc.php</p>';
    }

    echo '</div></body></html>';
    exit;
}

?>

<h1>Roundcube Webmail Installer</h1>

<ol id="progress">
<?php
$include_steps = [
    1 => './check.php',
    2 => './config.php',
    3 => './test.php',
];

if (!in_array($RCI->step, array_keys($include_steps))) {
    $RCI->step = 1;
}

foreach (['Check environment', 'Create config', 'Test config'] as $i => $item) {
    $j = $i + 1;
    $link = ($RCI->step >= $j || $RCI->configured) ? '<a href="./index.php?_step='.$j.'">' . rcube::Q($item) . '</a>' : rcube::Q($item);
    printf('<li class="step%d%s">%s</li>', $j+1, $RCI->step > $j ? ' passed' : ($RCI->step == $j ? ' current' : ''), $link);
}
?>
</ol>

<?php

include $include_steps[$RCI->step];

?>
</div>

<div id="footer">
  Installer by the Roundcube Dev Team. Copyright &copy; 2008-2021 – Published under the GNU Public License;&nbsp;
  Icons by <a href="http://famfamfam.com">famfamfam</a>
</div>
</body>
</html>
PK�c�\�L$$	check.phpnu�[���<?php

/**
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 +-----------------------------------------------------------------------+
*/

if (!class_exists('rcmail_install', false) || !isset($RCI)) {
    die("Not allowed! Please open installer/index.php instead.");
}

$required_php_exts = [
    'PCRE'      => 'pcre',
    'DOM'       => 'dom',
    'Session'   => 'session',
    'XML'       => 'xml',
    'Intl'      => 'intl',
    'JSON'      => 'json',
    'PDO'       => 'PDO',
    'Multibyte' => 'mbstring',
    'OpenSSL'   => 'openssl',
    'Filter'    => 'filter',
    'Ctype'     => 'ctype',
];

$optional_php_exts = [
    'cURL'      => 'curl',
    'FileInfo'  => 'fileinfo',
    'Exif'      => 'exif',
    'Iconv'     => 'iconv',
    'LDAP'      => 'ldap',
    'GD'        => 'gd',
    'Imagick'   => 'imagick',
    'XMLWriter' => 'xmlwriter',
    'Zip'       => 'zip',
];

$required_libs = [
    'PEAR'      => 'pear.php.net',
    'Auth_SASL' => 'pear.php.net',
    'Net_SMTP'  => 'pear.php.net',
    'Mail_mime' => 'pear.php.net',
    'GuzzleHttp\Client' => 'github.com/guzzle/guzzle',
];

$optional_libs = [
    'Net_LDAP3' => 'git.kolab.org',
];

$ini_checks = [
    'file_uploads'            => 1,
    'session.auto_start'      => 0,
    'mbstring.func_overload'  => 0,
    'suhosin.session.encrypt' => 0,
];

$optional_checks = [
    'date.timezone' => '-VALID-',
];

$source_urls = [
    'cURL'      => 'https://www.php.net/manual/en/book.curl.php',
    'Sockets'   => 'https://www.php.net/manual/en/book.sockets.php',
    'Session'   => 'https://www.php.net/manual/en/book.session.php',
    'PCRE'      => 'https://www.php.net/manual/en/book.pcre.php',
    'FileInfo'  => 'https://www.php.net/manual/en/book.fileinfo.php',
    'Multibyte' => 'https://www.php.net/manual/en/book.mbstring.php',
    'OpenSSL'   => 'https://www.php.net/manual/en/book.openssl.php',
    'JSON'      => 'https://www.php.net/manual/en/book.json.php',
    'DOM'       => 'https://www.php.net/manual/en/book.dom.php',
    'Iconv'     => 'https://www.php.net/manual/en/book.iconv.php',
    'Intl'      => 'https://www.php.net/manual/en/book.intl.php',
    'Exif'      => 'https://www.php.net/manual/en/book.exif.php',
    'oci8'      => 'https://www.php.net/manual/en/book.oci8.php',
    'PDO'       => 'https://www.php.net/manual/en/book.pdo.php',
    'LDAP'      => 'https://www.php.net/manual/en/book.ldap.php',
    'GD'        => 'https://www.php.net/manual/en/book.image.php',
    'Imagick'   => 'https://www.php.net/manual/en/book.imagick.php',
    'XML'       => 'https://www.php.net/manual/en/book.xml.php',
    'XMLWriter' => 'https://www.php.net/manual/en/book.xmlwriter.php',
    'Zip'       => 'https://www.php.net/manual/en/book.zip.php',
    'Filter'    => 'https://www.php.net/manual/en/book.filter.php',
    'Ctype'     => 'https://www.php.net/manual/en/book.ctype.php',
    'pdo_mysql'   => 'https://www.php.net/manual/en/ref.pdo-mysql.php',
    'pdo_pgsql'   => 'https://www.php.net/manual/en/ref.pdo-pgsql.php',
    'pdo_sqlite'  => 'https://www.php.net/manual/en/ref.pdo-sqlite.php',
    'pdo_sqlite2' => 'https://www.php.net/manual/en/ref.pdo-sqlite.php',
    'pdo_sqlsrv'  => 'https://www.php.net/manual/en/ref.pdo-sqlsrv.php',
    'pdo_dblib'   => 'https://www.php.net/manual/en/ref.pdo-dblib.php',
    'PEAR'      => 'https://pear.php.net',
    'Net_SMTP'  => 'https://pear.php.net/package/Net_SMTP',
    'Mail_mime' => 'https://pear.php.net/package/Mail_mime',
    'Net_LDAP3' => 'https://git.kolab.org/diffusion/PNL',
];

?>
<form action="index.php" method="get">

<?php
echo '<input type="hidden" name="_step" value="' . ($RCI->configured ? 3 : 2) . '" />';
?>

<h3>Checking PHP version</h3>
<?php

define('MIN_PHP_VERSION', '7.3.0');
if (version_compare(PHP_VERSION, MIN_PHP_VERSION, '>=')) {
    $RCI->pass('Version', 'PHP ' . PHP_VERSION . ' detected');
}
else {
    $RCI->fail('Version', 'PHP Version ' . MIN_PHP_VERSION . ' or greater is required ' . PHP_VERSION . ' detected');
}
?>

<h3>Checking PHP extensions</h3>
<p class="hint">The following modules/extensions are <em>required</em> to run Roundcube:</p>
<?php

// get extensions location
$ext_dir = ini_get('extension_dir');

$prefix = PHP_SHLIB_SUFFIX === 'dll' ? 'php_' : '';
foreach ($required_php_exts as $name => $ext) {
    if (extension_loaded($ext)) {
        $RCI->pass($name);
    }
    else {
        $_ext = $ext_dir . '/' . $prefix . $ext . '.' . PHP_SHLIB_SUFFIX;
        $msg = @is_readable($_ext) ? 'Could be loaded. Please add in php.ini' : '';
        $RCI->fail($name, $msg, $source_urls[$name]);
    }
    echo '<br />';
}

?>

<p class="hint">The next couple of extensions are <em>optional</em> and recommended to get the best performance:</p>
<?php

foreach ($optional_php_exts as $name => $ext) {
    if (extension_loaded($ext)) {
        $RCI->pass($name);
    }
    else {
        $_ext = $ext_dir . '/' . $prefix . $ext . '.' . PHP_SHLIB_SUFFIX;
        $msg = @is_readable($_ext) ? 'Could be loaded. Please add in php.ini' : '';
        $RCI->na($name, $msg, $source_urls[$name]);
    }
    echo '<br />';
}

?>

<h3>Checking available databases</h3>
<p class="hint">Check which of the supported extensions are installed. At least one of them is required.</p>

<?php

$prefix = PHP_SHLIB_SUFFIX === 'dll' ? 'php_' : '';
foreach ($RCI->supported_dbs as $database => $ext) {
    if (extension_loaded($ext)) {
        $RCI->pass($database);
        $found_db_driver = true;
    }
    else {
        $_ext = $ext_dir . '/' . $prefix . $ext . '.' . PHP_SHLIB_SUFFIX;
        $msg = @is_readable($_ext) ? 'Could be loaded. Please add in php.ini' : '';
        $RCI->na($database, $msg, $source_urls[$ext]);
    }
    echo '<br />';
}
if (empty($found_db_driver)) {
  $RCI->failures++;
}

?>

<h3>Check for required 3rd party libs</h3>
<p class="hint">This also checks if the include path is set correctly.</p>

<?php

foreach ($required_libs as $classname => $vendor) {
    if (class_exists($classname)) {
        $RCI->pass($classname);
    }
    else {
        $RCI->fail($classname, "Failed to load class $classname from $vendor", $source_urls[$classname]);
    }
    echo "<br />";
}

foreach ($optional_libs as $classname => $vendor) {
    if (class_exists($classname)) {
        $RCI->pass($classname);
    }
    else {
        $RCI->na($classname, "Recommended to install $classname from $vendor", $source_urls[$classname]);
    }
    echo "<br />";
}

?>

<h3>Checking php.ini/.htaccess settings</h3>
<p class="hint">The following settings are <em>required</em> to run Roundcube:</p>

<?php

foreach ($ini_checks as $var => $val) {
    $status = ini_get($var);
    if ($val === '-NOTEMPTY-') {
        if (empty($status)) {
            $RCI->fail($var, "empty value detected");
        }
        else {
            $RCI->pass($var);
        }
    }
    else if (filter_var($status, FILTER_VALIDATE_BOOLEAN) == $val) {
        $RCI->pass($var);
    }
    else {
      $RCI->fail($var, "is '$status', should be '$val'");
    }
    echo '<br />';
}
?>

<p class="hint">The following settings are <em>optional</em> and recommended:</p>

<?php

foreach ($optional_checks as $var => $val) {
    $status = ini_get($var);
    if ($val === '-NOTEMPTY-') {
        if (empty($status)) {
            $RCI->optfail($var, "Could be set");
        }
        else {
            $RCI->pass($var);
        }
        echo '<br />';
        continue;
    }
    if ($val === '-VALID-') {
        if ($var == 'date.timezone') {
            try {
                $tz = new DateTimeZone($status);
                $RCI->pass($var);
            }
            catch (Exception $e) {
                $RCI->optfail($var, empty($status) ? "not set" : "invalid value detected: $status");
            }
        }
        else {
            $RCI->pass($var);
        }
    }
    else if (filter_var($status, FILTER_VALIDATE_BOOLEAN) == $val) {
        $RCI->pass($var);
    }
    else {
      $RCI->optfail($var, "is '$status', could be '$val'");
    }
    echo '<br />';
}
?>

<?php

if ($RCI->failures) {
    echo '<p class="warning">Sorry but your webserver does not meet the requirements for Roundcube!<br />
            Please install the missing modules or fix the php.ini settings according to the above check results.<br />
            Hint: only checks showing <span class="fail">NOT OK</span> need to be fixed.</p>';
}
echo '<p><br /><input type="submit" value="NEXT" ' . ($RCI->failures ? 'disabled' : '') . ' /></p>';

?>

</form>
PK�c�\vm(Z


styles.cssnu�[���body {
	background: white;
	font-family: "Lucida Grande", Verdana, Arial, Helvetica, sans-serif;
	font-size: small;
	color: black;
	margin: 0;
}

#banner {
	position: relative;
	height: 58px;
	margin: 0 0 1em 0;
	padding: 10px 20px;
	background: url('images/banner_gradient.gif') top left repeat-x #d8edfd;
	overflow: hidden;
}

#banner .banner-bg {
	position: absolute;
	top: 0;
	right: 0;
	width: 630px;
	height: 78px;
	background: url('images/banner_schraffur.gif') top right no-repeat;
	z-index: 0;
}

#banner .banner-logo {
	position: absolute;
	top: 10px;
	left: 20px;
	z-index: 4;
}

#banner .banner-logo a {
	border: 0;
}

#topnav {
	position: absolute;
	top: 3.6em;
	right: 20px;
}

#topnav a {
	color: #666;
}

#content {
	margin: 2em 20px;
}

#footer {
  margin: 2em 20px 1em 20px;
  padding-top: 0.6em;
  font-size: smaller;
  text-align: center;
  border-top: 1px dotted #999;
}

#progress {
  margin-bottom: 2em;
  border: 1px solid #aaa;
  background-color: #f9f9f9;
}

#progress:after {
  content: ".";
  display: block;
  height: 0;
  font-size: 0;
  clear: both;
  visibility: hidden;
}

#progress li {
  float: left;
  color: #999;
  padding: 1em 5em 1em 0.2em;
}

#progress li a {
  color: #999;
  text-decoration: none;
}

#progress li a:hover {
  text-decoration: underline;
}

#progress li.current {
  color: #000;
  font-weight: bold;
}

#progress li.passed,
#progress li.passed a,
#progress li.current a {
  color: #333;
}

fieldset {
  margin-bottom: 1.5em;
  border: 1px solid #aaa;
  background-color: #f9f9f9;
}

fieldset p.hint {
  margin-top: 0.5em;
}

legend {
  font-size: 1.1em;
  font-weight: bold;
}

textarea.configfile {
  background-color: #f9f9f9;
  font-family: monospace;
  font-size: 9pt;
  width: 100%;
  height: 30em;
}

.propname {
  font-family: monospace;
  font-size: 9pt;
  margin-top: 1em;
  margin-bottom: 0.6em;
}

dd div {
  margin-top: 0.3em;
}

dd label {
  padding-left: 0.5em;
}

th {
  text-align: left;
}

td > label {
    min-width: 6em;
    display: inline-block;
}

ul li {
  margin: 0.3em 0 0.4em -1em;
}

ul li ul li {
  margin-bottom: 0.2em;
}

h3 {
  font-size: 1.1em;
  margin-top: 1.5em;
  margin-bottom: 0.6em;
}

h4 {
  margin-bottom: 0.2em;
}

a.blocktoggle {
  color: #666;
  text-decoration: none;
}

a.addlink {
  color: #999;
  font-size: 0.9em;
  padding: 1px 0 1px 20px;
  background: url('images/add.png') top left no-repeat;
  text-decoration: none;
}

a.removelink {
  color: #999;
  font-size: 0.9em;
  padding: 1px 0 1px 24px;
  background: url('images/delete.png') 4px 0 no-repeat;
  text-decoration: none;
}

.hint {
  color: #666;
  font-size: 0.95em;
}

.success {
  color: #006400;
  font-weight: bold !important;
}

.fail {
  color: #ff0000 !important;
  font-weight: bold !important;
}

.na {
  color: #f60;
  font-weight: bold;
}

.indent {
  padding-left: 0.8em;
}

.notice {
  padding: 1em;
  background-color: #f7fdcb;
  border: 2px solid #c2d071;
}

.suggestion {
  padding: 0.6em;
  background-color: #ebebeb;
  border: 1px solid #999;
}

p.warning,
div.warning {
  padding: 1em;
  background-color: #ef9398;
  border: 2px solid #dc5757;
}

h3.warning {
  color: #c00;
  background: url('images/error.png') top left no-repeat;
  padding-left: 24px;
}

.userconf {
  color: #00c;
  font-family: "Lucida Grande", Verdana, Arial, Helvetica, sans-serif;
}
PK�c�\s�Z�m>m>test.phpnu�[���<?php
/*
 +-----------------------------------------------------------------------+
 | This file is part of the Roundcube Webmail client                     |
 |                                                                       |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 +-----------------------------------------------------------------------+
*/

if (!class_exists('rcmail_install', false) || !isset($RCI)) {
    die("Not allowed! Please open installer/index.php instead.");
}

?>

<h3>Check config file</h3>
<?php

if ($read_config = is_readable(RCUBE_CONFIG_DIR . 'defaults.inc.php')) {
    $config = $RCI->load_config_file(RCUBE_CONFIG_DIR . 'defaults.inc.php');
    if (!empty($config)) {
        $RCI->pass('defaults.inc.php');
    }
    else {
        $RCI->fail('defaults.inc.php', 'Syntax error');
    }
}
else {
    $RCI->fail('defaults.inc.php', 'Unable to read default config file?');
}

echo '<br />';

if ($read_config = is_readable(RCUBE_CONFIG_DIR . 'config.inc.php')) {
    $config = $RCI->load_config_file(RCUBE_CONFIG_DIR . 'config.inc.php');
    if (!empty($config)) {
        $RCI->pass('config.inc.php');
    }
    else {
        $RCI->fail('config.inc.php', 'Syntax error');
    }
}
else {
    $RCI->fail('config.inc.php', 'Unable to read file. Did you create the config file?');
}

echo '<br />';

if ($RCI->configured && ($messages = $RCI->check_config())) {
    if (!empty($messages['replaced'])) {
        echo '<h3 class="warning">Replaced config options</h3>';
        echo '<p class="hint">The following config options have been replaced or renamed. ';
        echo 'Please update them accordingly in your config files.</p>';

        echo '<ul class="configwarnings">';
        foreach ($messages['replaced'] as $msg) {
            echo html::tag('li', null, html::span('propname', $msg['prop']) .
                ' was replaced by ' . html::span('propname', $msg['replacement']));
        }
        echo '</ul>';
    }

    if (!empty($messages['obsolete'])) {
        echo '<h3>Obsolete config options</h3>';
        echo '<p class="hint">You still have some obsolete or inexistent properties set. This isn\'t a problem but should be noticed.</p>';

        echo '<ul class="configwarnings">';
        foreach ($messages['obsolete'] as $msg) {
            echo html::tag('li', null, html::span('propname', $msg['prop'])
                . (!empty($msg['explain']) ? ':&nbsp;' . $msg['explain'] : ''));
        }
        echo '</ul>';
    }

    echo '<p class="suggestion">OK, lazy people can download the updated config file here: ';
    echo html::a(['href' => './?_mergeconfig=1'], 'config.inc.php') . ' &nbsp;';
    echo "</p>";

    if (!empty($messages['dependencies'])) {
        echo '<h3 class="warning">Dependency check failed</h3>';
        echo '<p class="hint">Some of your configuration settings require other options to be configured or additional PHP modules to be installed</p>';

        echo '<ul class="configwarnings">';
        foreach ($messages['dependencies'] as $msg) {
            echo html::tag('li', null, html::span('propname', $msg['prop']) . ': ' . $msg['explain']);
        }
        echo '</ul>';
    }
}

?>

<h3>Check if directories are writable</h3>
<p>Roundcube may need to write/save files into these directories</p>
<?php

$dirs[] = !empty($RCI->config['temp_dir']) ? $RCI->config['temp_dir'] : 'temp';
if ($RCI->config['log_driver'] != 'syslog') {
    $dirs[] = $RCI->config['log_dir'] ? $RCI->config['log_dir'] : 'logs';
}

foreach ($dirs as $dir) {
    $dirpath = rcube_utils::is_absolute_path($dir) ? $dir : INSTALL_PATH . $dir;
    if (is_writable(realpath($dirpath))) {
        $RCI->pass($dir);
        $pass = true;
    }
    else {
        $RCI->fail($dir, 'not writeable for the webserver');
    }
    echo '<br />';
}

if (empty($pass)) {
    echo '<p class="hint">Use <tt>chmod</tt> or <tt>chown</tt> to grant write privileges to the webserver</p>';
}

?>

<h3>Check DB config</h3>
<?php

$db_working = false;
if ($RCI->configured) {
    if (!empty($RCI->config['db_dsnw'])) {
        $DB = rcube_db::factory($RCI->config['db_dsnw'], '', false);
        $DB->set_debug((bool)$RCI->config['sql_debug']);
        $DB->db_connect('w');

        if (!($db_error_msg = $DB->is_error())) {
            $RCI->pass('DSN (write)');
            echo '<br />';
            $db_working = true;
        }
        else {
            $RCI->fail('DSN (write)', $db_error_msg);
            echo '<p class="hint">Make sure that the configured database exists and that the user has write privileges<br />';
            echo 'DSN: ' . rcube::Q($RCI->config['db_dsnw']) . '</p>';
        }
    }
    else {
        $RCI->fail('DSN (write)', 'not set');
    }
}
else {
    $RCI->fail('DSN (write)', 'Could not read config file');
}

// initialize db with schema found in /SQL/*
if ($db_working && !empty($_POST['initdb'])) {
    if (!$RCI->init_db($DB)) {
        $db_working = false;
        echo '<p class="warning">Please try to initialize the database manually as described in the INSTALL guide.
            Make sure that the configured database exists and that the user as write privileges</p>';
    }
}
else if ($db_working && !empty($_POST['updatedb'])) {
    if (!$RCI->update_db($_POST['version'])) {
        echo '<p class="warning">Database schema update failed.</p>';
    }
}

// test database
if ($db_working) {
    $db_read = $DB->query("SELECT count(*) FROM " . $DB->quote_identifier($RCI->config['db_prefix'] . 'users'));
    if ($DB->is_error()) {
        $RCI->fail('DB Schema', "Database not initialized");
        echo '<form action="index.php?_step=3" method="post">'
            . '<p><input type="submit" name="initdb" value="Initialize database" /></p>'
            . '</form>';

        $db_working = false;
    }
    else if ($err = $RCI->db_schema_check($DB, $update = !empty($_POST['updatedb']))) {
        $RCI->fail('DB Schema', "Database schema differs");
        echo '<ul style="margin:0"><li>' . join("</li>\n<li>", $err) . "</li></ul>";

        $select = $RCI->versions_select(['name' => 'version']);
        $select->add('0.9 or newer', '');

        echo '<form action="index.php?_step=3" method="post">'
            . '<p class="suggestion">You should run the update queries to get the schema fixed.'
            . '<br/><br/>Version to update from: ' . $select->show('')
            . '&nbsp;<input type="submit" name="updatedb" value="Update" /></p>'
            . '</form>';

        $db_working = false;
    }
    else {
        $RCI->pass('DB Schema');
        echo '<br />';
    }
}

// more database tests
if ($db_working) {
    // Using transactions to workaround SQLite bug (#7064)
    if ($DB->db_provider == 'sqlite') {
        $DB->startTransaction();
    }

    // write test
    $insert_id = md5(uniqid());
    $db_write = $DB->query("INSERT INTO " . $DB->quote_identifier($RCI->config['db_prefix'] . 'session')
        . " (`sess_id`, `changed`, `ip`, `vars`) VALUES (?, ".$DB->now().", '127.0.0.1', 'foo')", $insert_id);

    if ($db_write) {
        $RCI->pass('DB Write');
        $DB->query("DELETE FROM " . $DB->quote_identifier($RCI->config['db_prefix'] . 'session')
            . " WHERE `sess_id` = ?", $insert_id);
    }
    else {
        $RCI->fail('DB Write', $RCI->get_error());
    }
    echo '<br />';

    // Transaction end
    if ($DB->db_provider == 'sqlite') {
        $DB->rollbackTransaction();
    }

    // check timezone settings
    $tz_db = 'SELECT ' . $DB->unixtimestamp($DB->now()) . ' AS tz_db';
    $tz_db = $DB->query($tz_db);
    $tz_db = $DB->fetch_assoc($tz_db);
    $tz_db = (int) $tz_db['tz_db'];
    $tz_local = (int) time();
    $tz_diff  = $tz_local - $tz_db;

    // sometimes db and web servers are on separate hosts, so allow a 30 minutes delta
    if (abs($tz_diff) > 1800) {
        $RCI->fail('DB Time', "Database time differs {$tz_diff}s from PHP time");
    }
    else {
        $RCI->pass('DB Time');
    }
}

?>

<h3>Test filetype detection</h3>

<?php

if ($errors = $RCI->check_mime_detection()) {
    $RCI->fail('Fileinfo/mime_content_type configuration');
    if (!empty($RCI->config['mime_magic'])) {
        echo '<p class="hint">Try setting the <tt>mime_magic</tt> config option to <tt>null</tt>.</p>';
    }
    else {
        echo '<p class="hint">Check the <a href="http://www.php.net/manual/en/function.finfo-open.php">Fileinfo functions</a> of your PHP installation.<br/>';
        echo 'The path to the magic.mime file can be set using the <tt>mime_magic</tt> config option in Roundcube.</p>';
    }
}
else {
    $RCI->pass('Fileinfo/mime_content_type configuration');
    echo "<br/>";
}


if ($errors = $RCI->check_mime_extensions()) {
    $RCI->fail('Mimetype to file extension mapping');
    echo '<p class="hint">Please set a valid path to your webserver\'s mime.types file to the <tt>mime_types</tt> config option.<br/>';
    echo 'If you can\'t find such a file, download it from <a href="http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types">svn.apache.org</a>.</p>';
}
else {
    $RCI->pass('Mimetype to file extension mapping');
    echo "<br/>";
}

$smtp_hosts = $RCI->get_hostlist('smtp_host');
if (!empty($smtp_hosts)) {
    $smtp_host_field = new html_select(['name' => '_smtp_host', 'id' => 'smtp_host']);
    $smtp_host_field->add($smtp_hosts, $smtp_hosts);
}
else {
    $smtp_host_field = new html_inputfield(['name' => '_smtp_host', 'id' => 'smtp_host']);
}

$user = $RCI->getprop('smtp_user', '(none)');
$pass = $RCI->getprop('smtp_pass', '(none)');

if ($user == '%u') {
    $user_field = new html_inputfield(['name' => '_smtp_user', 'id' => 'smtp_user']);
    $user = $user_field->show(isset($_POST['_smtp_user']) ? $_POST['_smtp_user'] : '');
}
else {
    $user = html::quote($user);
}
if ($pass == '%p') {
    $pass_field = new html_passwordfield(['name' => '_smtp_pass', 'id' => 'smtp_pass']);
    $pass = $pass_field->show();
}
else {
    $pass = html::quote($pass);
}

?>

<form action="index.php?_step=3" method="post">

<h3>Test SMTP config</h3>

<p>
<table>
<tbody>
  <tr>
    <td><label for="smtp_host">Host</label></td>
    <td><?php echo $smtp_host_field->show(isset($_POST['_smtp_host']) ? $_POST['_smtp_host'] : ''); ?></td>
  </tr>
  <tr>
    <td><label for="smtp_user">Username</label></td>
    <td><?php echo $user; ?></td>
  </tr>
  <tr>
    <td><label for="smtp_pass">Password</label></td>
    <td><?php echo $pass; ?></td>
  </tr>
</tbody>
</table>
</p>

<?php

$from_field = new html_inputfield(['name' => '_from', 'id' => 'sendmailfrom']);
$to_field   = new html_inputfield(['name' => '_to', 'id' => 'sendmailto']);

if (isset($_POST['sendmail'])) {

    echo '<p>Trying to send email...<br />';

    $smtp_host = trim($_POST['_smtp_host']);

    $from = rcube_utils::idn_to_ascii(trim($_POST['_from']));
    $to   = rcube_utils::idn_to_ascii(trim($_POST['_to']));

    if (
        preg_match('/^' . $RCI->email_pattern . '$/i', $from)
        && preg_match('/^' . $RCI->email_pattern . '$/i', $to)
    ) {
        $headers = [
            'From'    => $from,
            'To'      => $to,
            'Subject' => 'Test message from Roundcube',
        ];

        $body = 'This is a test to confirm that Roundcube can send email.';

        // send mail using configured SMTP server
        $CONFIG = $RCI->config;

        if (!empty($_POST['_smtp_user'])) {
            $CONFIG['smtp_user'] = $_POST['_smtp_user'];
        }
        if (!empty($_POST['_smtp_pass'])) {
            $CONFIG['smtp_pass'] = $_POST['_smtp_pass'];
        }

        $mail_object  = new Mail_mime();
        $send_headers = $mail_object->headers($headers);
        $head         = $mail_object->txtHeaders($send_headers);

        $SMTP = new rcube_smtp();
        $SMTP->connect($smtp_host, null, $CONFIG['smtp_user'], $CONFIG['smtp_pass']);

        $status        = $SMTP->send_mail($headers['From'], $headers['To'], $head, $body);
        $smtp_response = $SMTP->get_response();

        if ($status) {
            $RCI->pass('SMTP send');
        }
        else {
            $RCI->fail('SMTP send', join('; ', $smtp_response));
        }
    }
    else {
        $RCI->fail('SMTP send', 'Invalid sender or recipient');
    }

    echo '</p>';
}

?>

<table>
<tbody>
  <tr>
    <td><label for="sendmailfrom">Sender</label></td>
    <td><?php echo $from_field->show(isset($_POST['_from']) ? $_POST['_from'] : ''); ?></td>
  </tr>
  <tr>
    <td><label for="sendmailto">Recipient</label></td>
    <td><?php echo $to_field->show(isset($_POST['_to']) ? $_POST['_to'] : ''); ?></td>
  </tr>
</tbody>
</table>

<p><input type="submit" name="sendmail" value="Send test mail" /></p>

</form>

<form action="index.php?_step=3" method="post">

<h3>Test IMAP config</h3>

<?php

$default_hosts = $RCI->get_hostlist();
if (!empty($default_hosts)) {
    $host_field = new html_select(['name' => '_host', 'id' => 'imaphost']);
    $host_field->add($default_hosts, $default_hosts);
}
else {
    $host_field = new html_inputfield(['name' => '_host', 'id' => 'imaphost']);
}

$user_field = new html_inputfield(['name' => '_user', 'id' => 'imapuser']);
$pass_field = new html_passwordfield(['name' => '_pass', 'id' => 'imappass']);

?>

<table>
<tbody>
  <tr>
    <td><label for="imaphost">Host</label></td>
    <td><?php echo $host_field->show(isset($_POST['_host']) ? $_POST['_host'] : ''); ?></td>
  </tr>
  <tr>
    <td><label for="imapuser">Username</label></td>
    <td><?php echo $user_field->show(isset($_POST['_user']) ? $_POST['_user'] : ''); ?></td>
  </tr>
  <tr>
    <td><label for="imappass">Password</label></td>
    <td><?php echo $pass_field->show(); ?></td>
  </tr>
</tbody>
</table>

<?php

if (isset($_POST['imaptest']) && !empty($_POST['_host']) && !empty($_POST['_user'])) {

    echo '<p>Connecting to ' . rcube::Q($_POST['_host']) . '...<br />';

    $imap_host = trim($_POST['_host']);
    $imap_port = 143;
    $imap_ssl  = false;

    $a_host = parse_url($imap_host);
    if ($a_host['host']) {
        $imap_host = $a_host['host'];
        $imap_ssl  = (isset($a_host['scheme']) && in_array($a_host['scheme'], ['ssl','imaps','tls'])) ? $a_host['scheme'] : null;
        $imap_port = $a_host['port'] ?? ($imap_ssl && $imap_ssl != 'tls' ? 993 : 143);
    }

    $imap_host = rcube_utils::idn_to_ascii($imap_host);
    $imap_user = rcube_utils::idn_to_ascii($_POST['_user']);

    $imap = new rcube_imap;
    $imap->set_options([
        'auth_type'      => $RCI->getprop('imap_auth_type'),
        'debug'          => $RCI->getprop('imap_debug'),
        'socket_options' => $RCI->getprop('imap_conn_options'),
    ]);

    if ($imap->connect($imap_host, $imap_user, $_POST['_pass'], $imap_port, $imap_ssl)) {
        $RCI->pass('IMAP connect', 'SORT capability: ' . ($imap->get_capability('SORT') ? 'yes' : 'no'));
        $imap->close();
    }
    else {
        $RCI->fail('IMAP connect', $RCI->get_error());
    }
}

?>

<p><input type="submit" name="imaptest" value="Check login" /></p>

</form>

<hr />

<p class="warning">

After completing the installation and the final tests please <b>remove</b> the whole
installer folder from the document root of the webserver or make sure that
<tt>enable_installer</tt> option in <tt>config.inc.php</tt> is disabled.<br />
<br />

These files may expose sensitive configuration data like server passwords and encryption keys
to the public. Make sure you cannot access this installer from your browser.

</p>
PK�c�\��Irr	client.jsnu�[���/*
 +-----------------------------------------------------------------------+
 | Roundcube installer client function                                   |
 |                                                                       |
 | This file is part of the Roundcube Webmail client                     |
 | Copyright (C) The Roundcube Dev Team                                  |
 |                                                                       |
 | Licensed under the GNU General Public License version 3 or            |
 | any later version with exceptions for skins & plugins.                |
 | See the README file for a full license statement.                     |
 +-----------------------------------------------------------------------+
 | Author: Thomas Bruederli <roundcube@gmail.com>                        |
 +-----------------------------------------------------------------------+
*/

function toggleblock(id, link)
{
  var block = document.getElementById(id);

  return false;
}


function addhostfield()
{
  var container = document.getElementById('defaulthostlist');
  var row = document.createElement('div');
  var input = document.createElement('input');
  var link = document.createElement('a');

  input.name = '_imap_host[]';
  input.size = '30';
  link.href = '#';
  link.onclick = function() { removehostfield(this.parentNode); return false };
  link.className = 'removelink';
  link.innerHTML = 'remove';

  row.appendChild(input);
  row.appendChild(link);
  container.appendChild(row);
}


function removehostfield(row)
{
  var container = document.getElementById('defaulthostlist');
  container.removeChild(row);
}
PK�c�\��/55images/error.pngnu�[���PK�c�\q�����uimages/banner_gradient.gifnu�[���PK�c�\�<)9}}�images/delete.pngnu�[���PK�c�\.���wimages/add.pngnu�[���PK�c�\��q�0�0B
images/banner_schraffur.gifnu�[���PK�c�\=[�
��3;images/roundcube_logo.pngnu�[���PK�c�\V|V|V
CJconfig.phpnu�[���PK�c�\�R�|�|	��error_lognu�[���PK�c�\酏JTT	,index.phpnu�[���PK�c�\�L$$	�8check.phpnu�[���PK�c�\vm(Z


�\styles.cssnu�[���PK�c�\s�Z�m>m>Fjtest.phpnu�[���PK�c�\��Irr	�client.jsnu�[���PK

���