diff --git a/.github/workflows/php.yml b/.github/workflows/php.yml
new file mode 100644
index 00000000..82bf6ee9
--- /dev/null
+++ b/.github/workflows/php.yml
@@ -0,0 +1,27 @@
+name: CI PHPUnit
+
+on:
+ push:
+ branches: [ master ]
+ pull_request:
+ branches: [ master ]
+
+jobs:
+ run:
+ name: test on Ubunut version ${{ matrix.operating-system }} with PHP of ${{ matrix.php-versions}}
+ runs-on: ${{ matrix.operating-system }}
+ strategy:
+ matrix:
+ operating-system: ['ubuntu-18.04', 'ubuntu20.04']
+ php-versions: ['5.3', '5.4', '5.5', '5.6', '7.0', '7.1', '7.2', '7.3', '7.4', '8.0', '8.1' ]
+
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v2
+
+ - name: Setup PHP
+ uses: shivammathur/setup-php@v2
+ with:
+ php-version: ${{ matrix.php-versions }}
+
+
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 00000000..e9150297
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,5 @@
+################################################################################
+# This .gitignore file was automatically created by Microsoft(R) Visual Studio.
+################################################################################
+
+/.vs
diff --git a/.travis.yml b/.travis.yml
index 9e6aba82..f58376b1 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,21 +1,110 @@
language: php
-dist: trusty
+os:
+ - linux
-php:
- - '5.4'
- - '5.5'
- - '5.6'
- - '7.0'
- - '7.1'
- - '7.2'
- - '7.4'
+dist: focal
-before_install:
- # If PHP >= 7.0, force use of PHPUnit 5.7
- - if php -r "exit( (int)! version_compare( '$TRAVIS_PHP_VERSION', '7.0', '>=' ) );"; then mkdir -p ~/bin && wget -O ~/bin/phpunit https://phar.phpunit.de/phpunit-5.7.phar && chmod +x ~/bin/phpunit; fi
+jobs:
-script: phpunit tests
+ include:
+# - dist: focal
+# php: '5.4'
+# - dist: focal
+# php: '5.5'
+# - dist: focal
+# php: '5.6'
+# - dist: focal
+# php: '7.0'
+# - dist: focal
+# php: '7.1'
+# - dist: focal
+# php: '7.2'
+# - dist: focal
+# php: '7.3'
+ - dist: focal
+ php: '7.4'
+ - dist: focal
+ php: '8.0'
-notifications:
- irc: "irc.freenode.org#ltb-project"
+# - dist: bionic
+# php: '5.4'
+# - dist: bionic
+# php: '5.5'
+# - dist: bionic
+# php: '5.6'
+# - dist: bionic
+# php: '7.0'
+ - dist: bionic
+ php: '7.1'
+ - dist: bionic
+ php: '7.2'
+ - dist: bionic
+ php: '7.3'
+ - dist: bionic
+ php: '7.4'
+ - dist: bionic
+ php: '8.0'
+
+# - dist: xenial
+# php: '5.4'
+# - dist: xenial
+# php: '5.5'
+ - dist: xenial
+ php: '5.6'
+ - dist: xenial
+ php: '7.0'
+ - dist: xenial
+ php: '7.1'
+ - dist: xenial
+ php: '7.2'
+ - dist: xenial
+ php: '7.3'
+ - dist: xenial
+ php: '7.4'
+ - dist: xenial
+ php: '8.0'
+
+ - dist: trusty
+ php: '5.4'
+ - dist: trusty
+ php: '5.5'
+ - dist: trusty
+ php: '5.6'
+ - dist: trusty
+ php: '7.0'
+ - dist: trusty
+ php: '7.1'
+ - dist: trusty
+ php: '7.2'
+ - dist: trusty
+ php: '7.3'
+ - dist: trusty
+ php: '7.4'
+ - dist: trusty
+ php: '8.0'
+
+ - dist: precise
+ php: '5.4'
+ - dist: precise
+ php: '5.5'
+ - dist: precise
+ php: '5.6'
+ - dist: precise
+ php: '7.0'
+ - dist: precise
+ php: '7.1'
+ - dist: precise
+ php: '7.2'
+ - dist: precise
+ php: '7.3'
+# - dist: precise
+# php: '7.4'
+# - dist: precise
+# php: '8.0'
+
+script:
+ phpunit tests
+
+#notifications:
+# irc: "irc.freenode.org#ltb-project"
diff --git a/conf/config.inc.php b/conf/config.inc.php
index fd283c2d..5134e357 100644
--- a/conf/config.inc.php
+++ b/conf/config.inc.php
@@ -33,6 +33,20 @@
# false: log only errors and do not display them (use this in production)
$debug = false;
+# Active Directory mode
+# true: use unicodePwd as password field
+# false: LDAPv3 standard behavior
+$ad_mode = false;
+# Force account unlock when password is changed
+$ad_options['force_unlock'] = false;
+# Force user change password at next login
+$ad_options['force_pwd_change'] = false;
+# Allow user with expired password to change password
+$ad_options['change_expired_password'] = false;
+# Set AD attribute for username on emails using sendtoken
+# example: $email_field = "displayName" or $email_field = "CN"
+$email_field = "displayName"
+
# LDAP
$ldap_url = "ldap://localhost";
$ldap_starttls = false;
@@ -43,21 +57,15 @@
$ldap_base = "dc=example,dc=com";
$ldap_login_attribute = "uid";
$ldap_fullname_attribute = "cn";
-$ldap_filter = "(&(objectClass=person)($ldap_login_attribute={login}))";
+# Check and Set options for ad_mode
+if ( !empty($ad_mode) ) {
+ $ldap_filter = "(&(objectClass=person)($ldap_login_attribute={login}))";
+} else {
+ $ldap_filter = "(&(objectClass=user)(sAMAccountName={login})(!(userAccountControl:1.2.840.113556.1.4.803:=2)))";
+}
$ldap_use_exop_passwd = false;
$ldap_use_ppolicy_control = false;
-# Active Directory mode
-# true: use unicodePwd as password field
-# false: LDAPv3 standard behavior
-$ad_mode = false;
-# Force account unlock when password is changed
-$ad_options['force_unlock'] = false;
-# Force user change password at next login
-$ad_options['force_pwd_change'] = false;
-# Allow user with expired password to change password
-$ad_options['change_expired_password'] = false;
-
# Samba mode
# true: update sambaNTpassword and sambaPwdLastSet attributes too
# false: just update the password
@@ -193,8 +201,14 @@
$multiple_answers_one_str = false;
# Answer attribute should be hidden to users!
-$answer_objectClass = "extensibleObject";
-$answer_attribute = "info";
+# Check and Set options for ad_mode
+if ( !empty($ad_mode) ) {
+ $answer_objectClass = "extensibleObject";
+ $answer_attribute = "info";
+} else {
+ $answer_objectClass = "user";
+ $answer_attribute = "comment";
+}
# Crypt answers inside the directory
$crypt_answers = true;
diff --git a/htdocs/sendtoken.php b/htdocs/sendtoken.php
index b7dac98d..89c4dc3a 100644
--- a/htdocs/sendtoken.php
+++ b/htdocs/sendtoken.php
@@ -133,14 +133,21 @@
}
}
} else {
- # Use first available mail adress in ldap
- if (count($mailValues) > 0) {
- $mailValue = $mailValues[0];
- if (strcasecmp($mail_attribute, "proxyAddresses") == 0) {
- $mailValue = str_ireplace("smtp:", "", $mailValue);
+ # Check if AD_Mode is not used
+ if ( !empty($ad_mode) ) {
+ # Use first available mail adress in ldap
+ if (count($mailValues) > 0) {
+ $mailValue = $mailValues[0];
+ if (strcasecmp($mail_attribute, "proxyAddresses") == 0) {
+ $mailValue = str_ireplace("smtp:", "", $mailValue);
+ }
+ $mail = $mailValue;
+ $match = true;
}
- $mail = $mailValue;
- $match = true;
+ } else {
+ # Retreive Username for AD
+ #Set Username Varible for E-Mail
+ $email_name = reset(ldap_get_values($ldap, $entry, $email_field));
}
}
}
@@ -219,7 +226,13 @@
error_log("Send reset URL " . ( $debug ? "$reset_url" : "HIDDEN"));
}
- $data = array( "login" => $login, "mail" => $mail, "url" => $reset_url ) ;
+ # Send $Username as "login" if in AD_Mode
+ if ( !empty($ad_mode) ) {
+ $data = array( "login" => $login, "mail" => $mail, "url" => $reset_url ) ;
+ } else {
+ $data = array( "login" => $email_name , "mail" => $mail, "url" => $reset_url ) ;
+ }
+
# Send message
if ( send_mail($mailer, $mail, $mail_from, $mail_from_name, $messages["resetsubject"], $messages["resetmessage"].$mail_signature, $data) ) {
diff --git a/lang/it.inc.php b/lang/it.inc.php
index 7ce0c8a3..b2a3ae3a 100644
--- a/lang/it.inc.php
+++ b/lang/it.inc.php
@@ -32,15 +32,18 @@
$messages['newpasswordrequired'] = "Nuova password obbligatoria";
$messages['confirmpasswordrequired'] = "Per favore conferma la nuova password";
$messages['passwordchanged'] = "La tua password e' stata cambiata";
+$messages['sshkeychanged'] = "La vostra chiave SSH è stata cambiata";
$messages['nomatch'] = "Password non corrispondenti";
$messages['badcredentials'] = "Login o password non corretti";
$messages['passworderror'] = "Password rifiutata dalla directory LDAP";
+$messages['sshkeyerror'] = "La chiave SSH è stata rifiutata dalla directory LDAP";
$messages['title'] = "Self service password";
$messages['login'] = "Login";
-$messages['oldpassword'] = "Vecchia password";
+$messages['oldpassword'] = "vecchia password";
$messages['newpassword'] = "Nuova password";
$messages['confirmpassword'] = "Conferma";
$messages['submit'] = "Invia";
+$messages['getuser'] = "Ottieni utente";
$messages['tooshort'] = "Password troppo corta";
$messages['toobig'] = "Password troppo lunga";
$messages['minlower'] = "La password non contiene abbastanza caratteri minuscoli";
@@ -63,18 +66,23 @@
$messages['password'] = "Password";
$messages['question'] = "Domanda";
$messages['answer'] = "Risposta";
-$messages['setquestionshelp'] = "Imposta o cambia la tua domanda/risposta per il reset della password. Potrai poi reimpostare la tua password qui.";
$messages['answerrequired'] = "Nessuna risposta inserita";
$messages['questionrequired'] = "Nessuna domanda selezionata";
$messages['passwordrequired'] = "Password obbligatoria";
+$messages['sshkeyrequired'] = "è richiesta la chiave SSH";
+$messages['invalidsshkey'] = "La chiave SSH inserita sembra non valida";
$messages['answermoderror'] = "La tua risposta non e' stata registrata";
$messages['answerchanged'] = "La tua risposta e' stata registrata";
$messages['answernomatch'] = "Risposta non corretta";
$messages['resetbyquestionshelp'] = "Scegli una domanda e rispondi per reimpostare la password. Per farlo devi aver registrato una risposta.";
+$messages['setquestionshelp'] = "Imposta o cambia la tua domanda/risposta per il reset della password. Potrai poi reimpostare la tua password qui.";
$messages['changehelp'] = "Immetti la tua vecchia password e scegline una nuova.";
$messages['changehelpreset'] = "Hai dimenticato la password?";
$messages['changehelpquestions'] = "Reimposta la tua password rispondendo alle domande";
$messages['changehelptoken'] = "Reimposta la tua password con una verifica via mail";
+$messages['changehelpsms'] = "Reimposta la tua password tramite SMS";
+$messages['changehelpsshkey'] = "Cambia la tua chiave SSH";
+$messages['changesshkeyhelp'] = "Inserisci la tua password e la nuova chiave SSH.";
$messages['resetmessage'] = "Buongiorno {login},\n\nClicca qui per reimpostare la tua password:\n{url}\n\nSe non sei stato tu a richiedere il reset, per piacere ignora questa email.";
$messages['resetsubject'] = "Reimposta la tua password";
$messages['sendtokenhelp'] = "Inserisci la tua login e il tuo indirizzo email per reimpostare la tua password. Quindi clicca sul link che riceverai via mail.";
@@ -87,55 +95,49 @@
$messages['tokenrequired'] = "Codice di verifica obbligatorio";
$messages['tokennotvalid'] = "Codice di verifica non valido";
$messages['resetbytokenhelp'] = "Il codice di verifica spedito via mail ti consente di reimpostare la password. Per avere un nuovo codice, clicca qui.";
+$messages['resetbysmshelp'] = "Il codice inviato via SMS ti permette di reimpostare la password. Per ricevere un nuovo codice, clicca qui.";
$messages['changemessage'] = "Buongiorno {login},\n\nLa tua password e' stata cambiata.\n\nSe non hai richiesto questa modifica, per favore contatta immediatamente il tuo amministratore di rete.";
$messages['changesubject'] = "La tua password e' stata cambiata";
+$messages['changesshkeymessage'] = "Ciao {login}, \n\nIl SSH Key è stato modificato. \n\nSe non sei l'autore questo cambiamento, contattare immediatamente l'amministratore.";
+$messages['changesshkeysubject'] = "La vostra chiave SSH è stata modificata";
$messages['badcaptcha'] = "Il codice captcha non e' corretto. Riprova.";
$messages['captcharequired'] = "The captcha is required.";
$messages['captcha'] = "Captcha";
$messages['notcomplex'] = "La tua password non e' abbastanza complessa";
$messages['policycomplex'] = "Numero minimo di tipi di carattere:";
+$messages['sms'] = "Numero dell'SMS";
$messages['smsresetmessage'] = "Il tuo codice per il reset della password e':";
-$messages['smscrypttokensrequired'] = "Non puoi utilizzare il reset via SMS senza crypt_tokens";
+$messages['sendsmshelp'] = "Inserisci la tua login per ricevere il codice di verifica per il reset della password. Inserisci poi il codice ricevuto via SMS.";
+$messages['smssent'] = "Un codice di conferma e' stato inviato via SMS";
$messages['smsnotsent'] = "Errore durante l'invio dell'SMS";
-$messages['sms'] = "Numero dell'SMS";
-$messages['smstoken'] = "Codice dell'SMS";
$messages['smsnonumber'] = "Numero di telefono non trovato";
-$messages['username'] = "Username";
-$messages['sendsmshelp'] = "Inserisci la tua login per ricevere il codice di verifica per il reset della password. Inserisci poi il codice ricevuto via SMS.";
-$messages['changehelpsms'] = "Reimposta la tua password tramite SMS";
$messages['userfullname'] = "Nome completo dell'utente";
-$messages['getuser'] = "Ottieni utente";
-$messages['resetbysmshelp'] = "Il codice inviato via SMS ti permette di reimpostare la password. Per ricevere un nuovo codice, clicca qui.";
-$messages['smssent'] = "Un codice di conferma e' stato inviato via SMS";
+$messages['username'] = "Username";
+$messages['smscrypttokensrequired'] = "Non puoi utilizzare il reset via SMS senza crypt_tokens";
$messages['smsuserfound'] = "Controlla che i dati siano corretti e premi 'Invia' per ricevere il codice via SMS";
+$messages['smstoken'] = "Codice dell'SMS";
+$messages['sshkey'] = "SSH Key";
$messages['nophpmbstring'] = "Devi installare PHP mbstring";
$messages['menuquestions'] = "Domande";
$messages['menutoken'] = "Mail";
$messages['menusms'] = "SMS";
+$messages['menusshkey'] = "Chiave SSH";
$messages['nophpxml'] = "Devi installare PHP XML per usare questo strumento";
$messages['tokenattempts'] = "Token non valido, riprova";
$messages['emptychangeform'] = "Cambia la tua password";
+$messages['emptysshkeychangeform'] = "Cambia la tua chiave SSH";
$messages['emptysendtokenform'] = "Email a password reset link";
$messages['emptyresetbyquestionsform'] = "Reimposta la tua password";
$messages['emptysetquestionsform'] = "Imposta la domanda per il reset della password";
$messages['emptysendsmsform'] = "Ottieni un codice di reset";
$messages['sameaslogin'] = "La nuova password è identica all'utente di login";
$messages['policydifflogin'] = "La nuova password non può essere uguale all'utente di login";
-$messages['changesshkeymessage'] = "Ciao {login}, \n\nIl SSH Key è stato modificato. \n\nSe non sei l'autore questo cambiamento, contattare immediatamente l'amministratore.";
-$messages['menusshkey'] = "Chiave SSH";
-$messages['changehelpsshkey'] = "Cambia la tua chiave SSH";
-$messages['sshkeychanged'] = "La vostra chiave SSH è stata cambiata";
-$messages['sshkeyrequired'] = "è richiesta la chiave SSH";
-$messages['changesshkeysubject'] = "La vostra chiave SSH è stata modificata";
-$messages['sshkey'] = "SSH Key";
-$messages['emptysshkeychangeform'] = "Cambia la tua chiave SSH";
-$messages['changesshkeyhelp'] = "Inserire la password e la nuova chiave SSH.";
-$messages['sshkeyerror'] = "La chiave SSH è stata rifiutata dalla directory LDAP";
$messages['pwned'] = "La password scelta non è sicura in quanto pubblicata da precedenti intrusioni informatiche internazionali e non può essere usata. Se la stai usando su altri servizi ti consigliamo di cambiarla";
$messages['policypwned'] = "La password non deve essere stata precedentemente pubblicata in intrusioni informatiche internazionali";
$messages['throttle'] = "Troppo veloce! Per favore ritenta fra poco (se sei un essere umano)";
$messages['policydiffminchars'] = "Numero minimo di nuovi caratteri unici:";
$messages['diffminchars'] = "La nuova password è troppo simile a quella vecchia";
+$messages['changesshkeyhelp'] = "Inserire la password e la nuova chiave SSH.";
$messages['specialatends'] = "La nuova password ha il suo unico carattere speciale all'inizio o alla fine";
$messages['policyspecialatends'] = "La nuova password non può aveere il suo unico carattere speciale all'inizio o alla fine";
$messages['checkdatabeforesubmit'] = "Per favore verifica le informazioni prima di inviare il modulo";
diff --git a/tests/CheckPasswordTest.php b/tests/CheckPasswordTest.php
index 5de3854e..56da0be6 100644
--- a/tests/CheckPasswordTest.php
+++ b/tests/CheckPasswordTest.php
@@ -2,7 +2,9 @@
require_once __DIR__ . '/../lib/vendor/defuse-crypto.phar';
-class CheckPasswordTest extends \PHPUnit_Framework_TestCase
+use PHPUnit\Framework\TestCase;
+
+class CheckPasswordTest extends TestCase
{
/**
* Test check_password_strength function
diff --git a/tests/CheckSshkeyTest.php b/tests/CheckSshkeyTest.php
index 796e4771..6ee990d9 100644
--- a/tests/CheckSshkeyTest.php
+++ b/tests/CheckSshkeyTest.php
@@ -1,6 +1,8 @@