From f51c9ed2abe5c68211bb3736be5f70b1fe2c9ec0 Mon Sep 17 00:00:00 2001 From: M.Gergo Date: Fri, 8 Mar 2019 21:20:34 +0100 Subject: további rendrakás --- mayor-orig/www/include/backend/ads/auth/login.php | 358 ---------------------- 1 file changed, 358 deletions(-) delete mode 100644 mayor-orig/www/include/backend/ads/auth/login.php (limited to 'mayor-orig/www/include/backend/ads/auth') diff --git a/mayor-orig/www/include/backend/ads/auth/login.php b/mayor-orig/www/include/backend/ads/auth/login.php deleted file mode 100644 index 59cbf3e5..00000000 --- a/mayor-orig/www/include/backend/ads/auth/login.php +++ /dev/null @@ -1,358 +0,0 @@ - 1 ) { - // Több ilyen uid is van - $_SESSION['alert'][] = "message:multi_uid"; - if ($closeLDAP) ldap_close($ds); - return false; - } - } - $pwdlastset = $userinfo[0]['pwdlastset'][0]; - $userAccountControl = $userinfo[0]['useraccountcontrol'][0]; - - $status = array(); - - $status['pwdLastSet'] = $pwdlastset; - $status['pwdLastSetDt'] = date('Y-m-d H:i:s',msFileTime2unixTimestamp($pwdlastset)); - $status['accountExpires'] = $userinfo[0]['accountexpires'][0]; - $status['accountNeverExpires'] = (ADS_ACCOUNTEXPIRES_NEVER==$userinfo[0]['accountexpires'][0]) || ($userinfo[0]['accountexpires'][0] == 0); - if (!$status['accountNeverExpires']) { - $status['accountExpiresDt'] = date('Y-m-d H:i:s',msFileTime2unixTimestamp($userinfo[0]['accountexpires'][0])); - $status['accountExpiresTimestamp'] = msFileTime2unixTimestamp($userinfo[0]['accountexpires'][0]); - } - $status['accountDisabled'] = (bool)($userAccountControl & ADS_UF_ACCOUNTDISABLE); - $status['noPasswordRequired'] = (bool)($userAccountControl & ADS_UF_PASSWD_NOTREQD); - $status['cannotChangePassword'] = (bool)($userAccountControl & ADS_UF_PASSWD_CANT_CHANGE); - $status['normalAccount'] = (bool)($userAccountControl & ADS_UF_NORMAL_ACCOUNT); - $status['passwordNeverExpire'] = (bool)($userAccountControl & ADS_UF_DONT_EXPIRE_PASSWD); - $status['passwordExpired'] = (bool)($userAccountControl & ADS_UF_PASSWORD_EXPIRED); // Ez mintha nem működne... - $status['mustChangePassword'] = ($pwdlastset === '0' && $status['passwordNeverExpire']); - - // A jelszó lejárati dátum az AD-ben két értékből számítható ki: - // - A felhasználó saját pwdLastSet atribútuma: ez tárolja a jelszó utolsó módosításának időpontját - // - A tartomány maxPwdAge atribútuma: milyen hosszú ideig lehet érvényes a jelszó a tartományban - // - // A Microsoft persze saját kiindulási időpontot és lépési egységet használ az idő tárolására. - // Ez a függvény konvertálja ezt az értéket Unix időbélyeggé - - // Kérdezzük le a tartomány maxPwdAge attribútumát! - $sr = ldap_read($ds, $AUTH[$toPolicy]['adsBaseDn'], 'objectclass=domain', array('maxPwdAge')); - if (!$sr) { - $_SESSION['alert'][] = "message:ldap_search_failure:getAccountStatus (ads backend)"; - if ($closeLDAP) ldap_close($ds); - return false; - } - $info = ldap_get_entries($ds, $sr); - $maxpwdage = $info[0]['maxpwdage'][0]; - - // Lásd MSDN: http://msdn.microsoft.com/en-us/library/ms974598.aspx - // - // pwdLastSet tartalmazza az 1601 (UTC) január 1 óta eltelt 100 nanoszekundumos időintervallumok számát - // 64 bit-es integer típusú értékként - // - // Ettől az időponttól a Unix időszámítás kezdetéig eltelt másodpercek száma 11644473600. - // - // maxPwdAge szintén large integer, ami a jelszóváltoztatás és a jelszó lejárat közötti 100 nanoszekundumos időintervallumok számát tárolja - - $status['maxPwdAgeInDays'] = bcdiv(bcsub(0,$maxpwdage),'36000000000')/24; - - // Ezt az étéket át kell váltanunk másodpercekre, de ez egy negatív mennyiség! - // - // Ha a maxPwdAge alsó 32 bites része 0, akkor a jelszavak nem járnak le - // - // Sajnos ezek a számok túl nagyok a PHP integer típusához, ezért kell a BCMath függvényeit használnunk - - $status['passwordsDoNotExpireInDomain'] = (bcmod($maxpwdage, 4294967296) === '0'); - - // Adjuk össze a pwdlastset és maxpwdage értékeket (pontosabban az utóbbi negatív értéket - // vonjuk ki az előbbiből), így megkapjuk a jelszó lejáratának időpontját a Microsoft féle - // egységekben. - $pwdexpire = bcsub($pwdlastset, $maxpwdage); - - // Konvertáljuk az MS féle időt unix időre - $status['expiryTimestamp'] = bcsub(bcdiv($pwdexpire, '10000000'), '11644473600'); - $status['expiryDate'] = date('Y-m-d H:i:s', bcsub(bcdiv($pwdexpire, '10000000'), '11644473600')); - - if ($closeLDAP) ldap_close($ds); - - $status['userAccount'] = $userAccount; - $status['usetAccountControl'] = $userAccountControl; - $status['shadowLastChange'] = $userinfo[0]['shadowlastchange'][0]; - $status['shadowWarning'] = $userinfo[0]['shadowwarning'][0]; - $status['shadowInactive'] = $userinfo[0]['shadowinactive'][0]; - return array_merge($status); - - - } - - function adsUserAuthentication($userAccount, $userPassword, &$accountInformation, $toPolicy) { - - global $AUTH; - - if ($toPolicy == '') { - if ($accountInformation['policy'] != '') $toPolicy = $accountInformation['policy']; -// elseif ($_REQUEST['toPolicy'] != '') $toPolicy = $_REQUEST['toPolicy']; - else $toPolicy = _POLICY; - } - - // Kapcsolódás a szerverhez - $ds = ldap_connect($AUTH[$toPolicy]['adsHostname']); - if (!$ds) { - $_SESSION['alert'][] = 'alert:ldap_connect_failure'; - return _AUTH_FAILURE; - } - - // Csatlakozás a szerverhez - $r = @ldap_bind($ds,$AUTH[$toPolicy]['adsUser'],$AUTH[$toPolicy]['adsPw']); - if (!$r) { - $_SESSION['alert'][] = 'message:ldap_bind_failure'; - return _AUTH_FAILURE; - } - - // Van-e adott azonosítójú felhasználó? - $filter="(&(sAMAccountName=$userAccount)(objectClass=".$AUTH[$toPolicy]['adsUserObjectClass']."))"; - $justthese = array("sn","cn",$AUTH[$toPolicy]['adsStudyIdAttr'],"shadowexpire","shadowwarning","shadowinactive","shadowlastchange","shadowmax","pwdlastset","accountexpires","useraccountcontrol"); - $sr = ldap_search($ds, $AUTH[$toPolicy]['adsBaseDn'], $filter, $justthese); - if (!$sr) { - $_SESSION['alert'][] = "message:ldap_search_failure"; - ldap_close($ds); - return _AUTH_FAILURE; - } - $info = ldap_get_entries($ds,$sr); - if ( $info['count'] === 0 || is_null($info)) { // http://bugs.php.net/50185 ha nincs megfelelő elem, akkor - hibásan - null-al tér vissza! (~ PHP 5.2.10) - // Nincs ilyen userAccount (uid) - $_SESSION['alert'][] = "message:no_account:$userAccount"; - ldap_close($ds); - return _AUTH_FAILURE_1; - } - - if ( $info['count'] > 1 ) { - // Több ilyen uid is van - $_SESSION['alert'][] = "message:multi_uid"; - ldap_close($ds); - return _AUTH_FAILURE_2; - } - - if ($info['count']==1) { // Van - egy - ilyen felhasználó - - $status = getAccountStatus($userAccount, $toPolicy, $info, $ds); - // Lejárt-e - // A lejárat ideje a shadowExpire és shadowLastChange+shadowMax kötül a kisebbik - // Esetünkben - if ($info[0]['pwdlastset'][0] != '') { // A pwdLastSet és shadowLastChange közül a kisebbiket használjuk - $info[0]['shadowlastchange'][0] = msFileTime2unixDays($info[0]['pwdlastset'][0]); - } - - // A globális beállítással kikényszeríthető a nagyobb warning időszak - $shadowWarning = ($status['shadowWarning']<$AUTH[$toPolicy]['shadowWarning']) ? $AUTH[$toPolicy]['shadowWarning'] : $status['shadowWarning']; - - - $disabled = ( // Ha az jelszavak lejárhatnak a domain-ben és a user jellszava is lejárhat és le is járt... - !$status['passwordNeverExpire'] - && !$status['passwordsDoNotExpireInDomain'] - && $status['expiryTimestamp'] < time() - ) || ( // vagy az account lejárhat és le is járt - !$status['accountNeverExpires'] - && $status['accountExpiresTimestamp'] -- cgit v1.2.3