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 @@