Konfiguracja squirrelmail umożliwiająca użytkownikom zmianę hasła poprzez interfejs www.
1. Pobieramy i instalujemy plugin do zmiany hasła change_sqlpass:
root@server:/# cd /usr/share/squirrelmail/plugins/ root@server:/# wget http://squirrelmail.org/countdl.php?fileurl=http%3A%2F%2Fwww.squirrelmail.org%2Fplugins%2Fchange_sqlpass-3.3-1.2.tar.gz root@server:/# tar xvf change_sqlpass-3.3-1.2.tar.gz
2. Naprawiamy błąd md5crypt poprzez odpowiednią zmianę pliku function.php:
root@server:/# cd /usr/share/squirrelmail/plugins/change_sqlpass root@server:/# vim function.php
Odnajdujemy poniższe linie:
case strtolower(PASSWORD_ENCRYPTION_MD5CRYPT): return '"' . md5crypt($password, $salt) . '"';
i wstawiamy pomiędzy nie kod oznaczony na czarno:
case strtolower(PASSWORD_ENCRYPTION_MD5CRYPT):
include_once(SM_PATH . 'plugins/change_sqlpass/md5crypt.php');
return '"' . md5crypt($password, $salt) . '"';
3. Tworzymy nowy plik konfiguracyjny config.php i otwieramy go w dowolnym edytorze go:
root@server:/# touch config.php root@server:/# vim config.php
Do pliku wstawiamy poniższy kod:
<? global $csp_dsn, $password_update_queries, $lookup_password_query, $force_change_password_check_query, $password_encryption, $csp_salt_query, $csp_salt_static, $csp_secure_port, $csp_non_standard_http_port, $csp_delimiter, $csp_debug, $min_password_length, $max_password_length, $include_digit_in_password, $include_uppercase_letter_in_password, $include_lowercase_letter_in_password, $include_nonalphanumeric_in_password; $csp_dsn = 'mysql://mysqluser:mysqlpass@127.0.0.1/dbispconfig'; $Lookup_Password_Query = 'SELECT count(*) FROM mail_user WHERE email = "%1" AND crypt_password = %4'; $password_update_queries = array( 'UPDATE mail_user SET password = %4 WHERE email = "%1"', ); $force_change_password_check_query = ''; $password_encryption = 'MD5CRYPT'; $csp_salt_query = 'SELECT SUBSTRING(PASSWORD, 4, 8) FROM mail_user WHERE email = "%1"'; $csp_secure_port = 0; $csp_non_standard_http_port = 0; $min_password_length = 6; $max_password_length = 0; $include_digit_in_password = 0; $include_uppercase_letter_in_password = 0; $include_lowercase_letter_in_password = 0; $include_nonalphanumeric_in_password = 0; $csp_delimiter = '@'; $csp_debug = 0; ?>
Przed zapisaniem pliku zmieniamy mysqluser i mysqlpass na odpowiednie wartości. Najlepiej wstawić dane odczytane z pliku konfiguracyjnego ISPConfig 3 /usr/local/ispconfig/server/lib/config.inc.php ze zmiennych: $conf[‚db_user’] oraz $conf[‚db_password’].
4. Pobieramy i instalujemy dodatek compatibility:
root@server:/# cd /usr/share/squirrelmail/plugins/
root@server:/# wget http://www.squirrelmail.org/countdl.php?fileurl=http%3A%2F%2Fwww.squirrelmail.org%2Fplugins%2Fcompatibility-2.0.14-1.0.tar.gz
root@server:/# tar xvf ./compatibility-2.0.14-1.0.tar.gz
5. Sprawdzamy czy mamy zainstalowane wymagane biblioteki:
root@server:/# pear install DB
lub
root@server:/# apt-get install php-pear php-db
6. Usuwamy niepotrzebne pliki:
root@server:/# cd /usr/share/squirrelmail/plugins/
root@server:/# rm change_sqlpass-3.3-1.2.tar.gz
root@server:/# compatibility-2.0.14-1.0.tar.gz
7. Aktywujemy zainstalowany dodatek w konfiguracji squirrelmail:
root@server:/# squirrelmail-configur
Wybieramy: 8
Sprawdzamy jaka liczba jest na liście Available Plugins przy pozycji change_sqlpass wpisujemy ją i wciskamy Enter:
Na zakończenie konfiguracji wybieramy S (zapis) i Q (wyjście).
W tym momencie możemy sprawdzić czy z poziomu strony www użytkownicy mogą zmieniać hasło do poczty.
Może się zdarzyć, że po zmianie hasło, pomimo tego, że mamy zainstalowane wcześniej odpowiednie biblioteki wyświetla się komunikat: Could not find Pear DB library. MOżna temu zaradzić poprzez edycję pliku konfiguracyjnego squirrelamail:
root@server:/# vim /etc/squirrelmail/apache.conf
w pliku należ zakomentować poniższe 2 linie:
# php_value include_path . # php_admin_value open_basedir /usr/share/squirrelmail:/etc/squirrelmail:/var/lib/squirrelmail:/etc/hostname:/etc/mailname
Zamiast nich wstawiamy poniższy kod:
php_admin_value open_basedir /usr/share/squirrelmail::/etc/squirrelmail:/var/lib/squirrelmail:/etc/hostname:/etc/mailname:/usr/share/php
Po zapisaniu pliku restartujemy apacha:
root@server:/# service apache2 restart
Jeśli po pomyślnej zmianie hasła w squirrelmail przy wykorzystaniu pluginu change_sqlpass wyświetla się komunikat błedu:
This page request could not be verified and appears to have expired.
należy dokonać modyfikacji w pliku /usr/share/squirrelmail/plugins/change_sqlpass/functions.php. We fragmencie kodu jak poniżej należy zakomentować poniższą linię zaznaczoną na czarno:
sqgetGlobalVar('csp_was_already_encrypted_port', $csp_was_already_encrypted_port, SQ_SESSION);
sqgetGlobalVar('HTTP_HOST', $HTTP_HOST, SQ_SERVER);
if (empty($base_uri)) $base_uri = sqm_baseuri();
#$loc = $base_uri . 'src/options.php?optpage=xx&optmode=submit&csp_change_success=no';
następnie poniżej wklejamy kod:
sqgetGlobalVar('csp_was_already_encrypted_port', $csp_was_already_encrypted_port, SQ_SESSION);
sqgetGlobalVar('HTTP_HOST', $HTTP_HOST, SQ_SERVER);
if (empty($base_uri)) $base_uri = sqm_baseuri();
#$loc = $base_uri . 'src/options.php?optpage=xx&optmode=submit&csp_change_success=no';
$loc = $base_uri . 'src/options.php?optpage=xx&optmode=submit&csp_change_success=no&smtoken=' . sm_generate_security_token();
W kolejnym kroku przed linią <input type=”submit” … wstawiamy ukryty input:
<td align="right" colspan="2">
<input type="hidden" name="csp_submit_change" value="1">
<input type="hidden" name="smtoken" value="<?php echo sm_generate_security_token(); ?>">
<input type="submit" value="<?php echo _("Submit"); ?>">
Na zakończenie należy zakomentować linię zaznaczoną na czarno:
if (!empty($csp_was_force_mode))
$loc = $base_uri . 'src/right_main.php';
else
//$loc = $base_uri . 'src/options.php?optpage=xx&optmode=submit&csp_change_success=yes';
i poniżej jej wkleić dodatkowy kod:
if (!empty($csp_was_force_mode))
$loc = $base_uri . 'src/right_main.php';
else
//$loc = $base_uri . 'src/options.php?optpage=xx&optmode=submit&csp_change_success=yes';
$loc = $base_uri . 'src/options.php?optpage=xx&optmode=submit&csp_change_success=yes&smtoken=' . sm_generate_security_token();