Настраиваю WEB-интерфейс для запросов по ldap. Не понимаю как настроить Срок действия пароля. Получил максимальный срок жизни maxPwdAge и когда сменили пароль pwdlastset(в формате юникс-времени), подскажите как получить это? Код (PHP): <?php Error_Reporting(E_ALL & ~E_NOTICE); function getUserAccountControlAttributes($inputCode) { $userAccountControlFlags = array( 16777216 => "TRUSTED_TO_AUTH_FOR_DELEGATION", 8388608 => "PASSWORD_EXPIRED", 4194304 => "DONT_REQ_PREAUTH", 2097152 => "USE_DES_KEY_ONLY", 1048576 => "NOT_DELEGATED", 524288 => "TRUSTED_FOR_DELEGATION", 262144 => "SMARTCARD_REQUIRED", 262656 => "Enabled, Smartcard Required", 262658 => "Disabled, Smartcard Required", 131072 => "MNS_LOGON_ACCOUNT", 65536 => "DONT_EXPIRE_PASSWORD", 8192 => "SERVER_TRUST_ACCOUNT", 4096 => "WORKSTATION_TRUST_ACCOUNT", 2048 => "INTERDOMAIN_TRUST_ACCOUNT", 546 => "Disabled, Password Not Required", 544 => "Enabled, Password Not Required", 514 => "Disabled Account", 512 => "Enabled NORMAL_ACCOUNT", 256 => "TEMP_DUPLICATE_ACCOUNT", 128 => "ENCRYPTED_TEXT_PWD_ALLOWED", 64 => "PASSWD_CANT_CHANGE", 32 => "PASSWD_NOTREQD", 16 => "LOCKOUT", 8 => "HOMEDIR_REQUIRED", 2 => "ACCOUNTDISABLE", 1 => "SCRIPT"); $attributes = NULL; while($inputCode > 0) { foreach($userAccountControlFlags as $flag => $flagName) { $temp = $inputCode-$flag; if($temp>0) { $attributes[$userAccountControlFlags[$flag]] = $flag; $inputCode = $temp; } if($temp==0) { if(isset($userAccountControlFlags[$inputCode])) { $attributes[$userAccountControlFlags[$inputCode]] = $inputCode; } $inputCode = $temp; } } } return $attributes; } //обработка времени function adConvert ($ad) { $seconds_ad = $ad / (10000000); //86400 -- seconds in 1 day $unix = ((1970-1601) * 365 - 3 + round((1970-1601)/4) ) * 86400; $timestamp = $seconds_ad - $unix; $normalDate = date("d-m-Y H:i:s", $timestamp); return $normalDate; } //Convert YMD LDAP timestamps function convertLdapTimeStamp($timestamp){ //PHP script to convert a timestamp returned from an LDAP query into a Unix timestamp // The date as returned by LDAP in format yyyymmddhhmmsst $date = $timestamp; // Get the individual date segments by splitting up the LDAP date $year = substr($date,0,4); $month = substr($date,4,2); $day = substr($date,6,2); $hour = substr($date,8,2); $minute = substr($date,10,2); $second = substr($date,12,2); // Make the Unix timestamp from the individual parts $timestamp = mktime($hour, $minute, $second, $month, $day, $year); // Output the finished timestamp return $day."/".$month."/".$year." ".$hour.":".$minute.":".$second; } switch ($_REQUEST['action']) { //Поиск по имени пользователя case 'sample3': echo "Поиск пользователя фильтр, <b>".$_REQUEST['usernameLog']."</b>!<br>"; $ldap_host = "int.mechel.corp"; //адрес домена $domain = "int.mechel.corp"; //базовое имя домена $filter ='(&(objectCategory=person)(objectClass=user)(cn='.$_REQUEST["usernameLog"].'*))'; //ищет по фамилиям + имя +отчество (вводить все параметры не обязательно) //$filter ='(&(objectCategory=person)(objectClass=user)(samaccountname='.$_REQUEST["usernameLog"].'*))'; //ищет по фамилиям + имя +отчество (вводить все параметры не обязательно) $ldap_user = 'mechel\GilmullinRR'; //логин для подключения $ldap_pass = "RR6767ok"; //пароль для подключения $connect = ldap_connect($ldap_host, $ldap_port) or exit(">>Невозможно подключиться к LDAP серверу $ldap_host<<"); //подключение удачное/нет //Обработка Имени домена (переводит из обычного вида в доменный вид (DC)) $dc = explode(".", $domain); $base_dn = ""; foreach($dc as $_dc) $base_dn .= "dc=".$_dc.","; $base_dn = substr($base_dn, 0, -1); //убирает запятую последнюю "dc=int,dc=mechel,dc=corp," //обработчики ldap_set_option($connect, LDAP_OPT_PROTOCOL_VERSION, 3); ldap_set_option($connect, LDAP_OPT_REFERRALS, 0); ldap_get_option($connect,LDAP_OPT_ERROR_STRING,$error); echo $error; $justthese = array("samaccountname","CN", "Department", "telephoneNumber", "Title","lockouttime","whenchanged","whencreated","lockout","nsaccountlock","badpasswordtime","company","pwdlastset","badpwdcount","accountexpires","objectsid","memberof","lastlogontimestamp","logoncount", "UserAccountControl"); $bind = ldap_bind($connect, $ldap_user, $ldap_pass) or exit(">>Невозможно подключиться к LDAP серверу $ldap_host<<"); //подключение удачное/нет $search = ldap_search($connect, $base_dn, $filter, $justthese) or exit(">>Unable to search ldap server<<"); ////чтение удачное/нет $search1 = ldap_read($connect, $base_dn, 'objectclass=*'); $info = ldap_get_entries($connect, $search); $infoLR = ldap_get_entries($connect, $search1); echo "Записей возвращено в количестве ".$info["count"]." шт.<p>"; for ($i=0; $i<$info["count"]; $i++) { echo '<table border="1" >'; echo '<tr><th scope="row" colspan="2" scope="col"><b><center>Дополнительная информация</center></b></th></tr>'; echo '<tr><th scope="col">'.$info[$i]["samaccountname"][0].'</th><th scope="col">'.$info[$i]["cn"][0].'</th></tr>'; echo "</table>"; echo "<br>"; echo "<br>"; echo "<br>"; //Обработка времени переменные $lastlogontimestamp = $info[$i]['lastlogontimestamp'][0]; $whencreated=$info[$i]["whencreated"][0]; $whenchanged=$info[$i]["whenchanged"][0]; $pwdlastset =$info[$i]["pwdlastset"][0]; $badpasswordtime=$info[$i]["badpasswordtime"][0]; $lockouttime=$info[$i]["lockouttime"][0]; $Time_lastlogontimestamp=adConvert($lastlogontimestamp); $Time_whencreated=convertLdapTimeStamp($whencreated); $Time_whenchanged=convertLdapTimeStamp($whenchanged); $Time_pwdlastset =adConvert($pwdlastset); $Time_badpasswordtime=adConvert($badpasswordtime); //$Time_lockouttime=adConvert($lockouttime); //Обработка кодов useraccountcontrol $accountStatus = $info[$i]["useraccountcontrol"][0]; if($accountStatus == 514) $accountStatus = "выключен"; elseif($accountStatus == 512) $accountStatus =" включен "; else $accountStatus = "не изв."; $accstatus = $info[$i]["useraccountcontrol"][0]; $lockout = $info[$i]["lockouttime"][0]; if($lockout == 0) $lockout = "не заблокирован"; elseif($lockout == 512) $lockout =" заблокирован "; else $lockout = "не изв."; // $controlOption["useraccountcontrol"][0] = 512 + 2; // $mod = ldap_modify($ds, $dn, $controlOption); //To unlock: // $acctEntry["lockouttime"][0] = '1'; // $mod = ldap_modify($ds, $dn, $acctEntry); //To lock: // $acctEntry["lockouttime"][0] = '0'; // $mod = ldap_modify($ds, $dn, $acctEntry); //To enable: // $acctEntry["useraccountcontrol"][0] = '512'; // $mod = ldap_modify($ds, $dn, $acctEntry); //To disable: // $acctEntry["useraccountcontrol"][0] = '514'; // $mod = ldap_modify($ds, $dn, $acctEntry); /* //Вычисляет когда последний раз сменили пароль и сколько дней макс живет пароль в домене echo "PWD LAST".$info["count"]." шт.<p>"; echo $info[0]["cn"][0]."<p>"; echo $info[0]['pwdlastset'][0]; echo "<br>"; $info = ldap_get_entries($connect, $search1); echo "MaxPWD".$info["count"]." шт.<p>"; echo $info[0]['maxpwdage'][0]; $maxpwdage = $info[0]['maxPwdAge'][0]; echo "<br>"; */ $howLong = int(($pwdLastSet[0]-$expNow )/10000000 )/86400; echo $howLong; echo '<table border="1">'; echo '<tr><th scope="row" colspan="2" scope="col"><b><center>Дополнительная информация</center></b></th></tr>'; echo '<tr><td align="center" width="200px">Должность</td><td>'.$info[$i]["title"][0].'</td></tr>'; echo '<tr><td align="center" width="200px">Телефон</td><td>'.$info[$i]["telephonenumber"][0].'</td></tr>'; echo '<tr><td align="center" width="200px">Цех</td><td>'.$info[$i]["department"][0].'</td></tr>'; echo '<tr><td align="center" width="200px">company</td><td>'.$info[$i]["company"][0].'</td></tr>'; echo '<tr><td align="center" width="200px">Последний Логон</td><td>'.$Time_lastlogontimestamp.'</td></tr>'; echo '<tr><td align="center" width="200px">Пароль сменен</td><td>'.$Time_pwdlastset.'</td></tr>'; echo '<tr><td align="center" width="200px">Когда изменен</td><td>'.$Time_whenchanged.'</td></tr>'; echo '<tr><td align="center" width="200px">Когда создан</td><td>'.$Time_whencreated.'</td></tr>'; echo '<tr><td align="center" width="200px">Когда ввели пароль неверно</td><td>'.$Time_badpasswordtime.'</td></tr>'; echo '<tr><td align="center" width="200px">Количество неправильно введенных паролей</td><td>'.$info[$i]["badpwdcount"][0].'</td></tr>'; echo '<tr><td align="center" width="200px">Путь в АД</td><td>'.$info[$i]["dn"].'</td></tr>'; echo '<tr><td align="center" width="200px">Статус Аккаунта</td><td>'.$accountStatus."(код ".$accstatus.")".'</td></tr>'; echo '<tr><td align="center" width="200px">lockouttime</td><td>'.$lockout.'</td></tr>'; echo '<tr><td align="center" width="200px">memberof</td><td>'.$info[0]["memberof"][0].'</td></tr>'; echo '<tr><td align="center" width="200px">Пароль истекает</td><td>'.$passwordIstekaet.'</td></tr>'; echo '<tr><td align="center" width="200px">maxpwdage</td><td>'.$infoLR[0]['maxpwdage'][0].'</td></tr>'; echo '<tr><td align="center" width="200px">pwdlastset</td><td>'.$info[0]['pwdlastset'][0].'</td></tr>'; echo "</table>"; echo "<br>"; } if ($i == 0) { echo "Не найдено совпадений"; } echo "Конец запроса"; ldap_close($connect); break; } ?> Подсказка от модератора: Любой код или текст конфигурации пишите между тегом [code=php] и [/code]. Используйте отступы в коде для форматирования текста. Это помогает быстрее понять вас, увеличивает шанс на получение ответа. Что выделять? Например: PHP, HTML, CSS, JavaScript, SQL, XML, .htaccess, ini, регулярные выражения, код шаблонизаторов, любая другая разметка, результаты array/object dump и т. д.