Web морда для смены пароля.

И всё прочее, что касается HTML
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
FBIAgent
проходил мимо
Сообщения: 7
Зарегистрирован: 2008-02-13 10:21:08

Web морда для смены пароля.

Непрочитанное сообщение FBIAgent » 2010-01-14 11:57:16

Помогите скриптом на пхп (или перл) для смены пароля в виндовом AD, чтобы пользователь мог зайти на страницу и сам поменять пароль.
Или ткните носом, где можно взять готовый. :oops: А то в нете все платные. :evil:

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
ProFTP
подполковник
Сообщения: 3388
Зарегистрирован: 2008-04-13 1:50:04
Откуда: %&й
Контактная информация:

Re: Web морда для смены пароля.

Непрочитанное сообщение ProFTP » 2010-01-16 12:32:20

я вот нашел это, может оно http://search.cpan.org/~prefect/Win32-A ... 04/User.pm

поищи тут к perl http://search.cpan.org/search?m=all&q=A ... ctory&s=11 может как-то через ldap можно?
Pеrl FAQ
perl -e 'print join"",map $$_[rand@$_],([0..9,'a'..'z','A'..'Z'])x30'
ИзображениеИзображение

FBIAgent
проходил мимо
Сообщения: 7
Зарегистрирован: 2008-02-13 10:21:08

Re: Web морда для смены пароля.

Непрочитанное сообщение FBIAgent » 2010-01-18 9:58:21

ProFTP, спасибо за ответ, но за выходные путем проб и ошибок и великого и могучего... конечно же интернета ;-) удалось написать вот такой рабочий скрипт:

Код: Выделить всё

<html>
<body>
<form method="POST">
<table>
<tr><td>Enter your login: </td><td><input type="text" name="login"></td></tr>
<tr><td>Enter your old password: </td><td><input type="password" name="oldpass"></td></tr>
<tr><td>Enter your new password: </td><td><input type="password" name="newpass1"></td></tr>
<tr><td>Retype your new password: </td><td><input type="password" name="newpass2"></td></tr>
</table>
<input type="submit" value="OK!" name="submitMe">
</form>
<?php
if(isset($_POST['submitMe']))
{
$username=$_POST['login'];
$oldpassword=$_POST['oldpass'];
$newpassword=$_POST['newpass1'];
$newpassword2=$_POST['newpass2'];
     print"Hello, $username!\n";


ldap_set_option(NULL, LDAP_OPT_DEBUG_LEVEL, 7); 
      $ldapconn = ldap_connect('ldaps://my.domain.com/',636); 
      ldap_set_option($ldapconn, LDAP_OPT_PROTOCOL_VERSION, 3); 
      ldap_set_option($ldapconn, LDAP_OPT_REFERRALS, 0);  
      $ldapuser="domain\admuser"; 
      $ldappwd="admpwd"; 
       
      // search for user 
      ldap_bind($ldapconn, $ldapuser, $ldappwd); 
       
      $res_id = ldap_search( $ldapconn, "DC=my,DC=domain,DC=com", "sAMAccountName=$username"); 
      if ($res_id) { 
        $entry_id = ldap_first_entry($ldapconn, $res_id); 
        if($entry_id){ 
          $user_dn = ldap_get_dn($ldapconn, $entry_id); 
          if ($user_dn) { 
            $ldapbind = ldap_bind($ldapconn, $user_dn, $oldpassword); 
            // check if the old password allows a successfull login 
            if($ldapbind) { 
              if(strcmp($newpassword, $newpassword2)==0){  
                 
                // create the unicode password 
                $newpassword = "\"" . $newpassword . "\""; 
                $newPass = mb_convert_encoding($newpassword, "UTF-16LE"); 
                 
                //rebind as admin to change the password 
                ldap_bind($ldapconn, $ldapuser, $ldappwd); 
                 
                $pwdarr = array('unicodePwd' => $newPass);
                print "<p class='error'>$user_dn</p>\n";
                if(ldap_modify ($ldapconn, $user_dn, $pwdarr)) {  
                  print "<p class='success'>Change password succeded.</p>\n";  
                } else {  
                  print "<p class='error'>Change password failed.</p>\n"; 
                } 
              }else{ 
                print "<p class='error'>New password must be entered the same way twice.</p>\n"; 
              } 
            }else{ 
              print "<p class='error'>Wrong user name or password.</p>\n"; 
            } 
          } else { 
              print "<p class='error'>Couldn't load user data.</p>\n"; 
          } 
        } else { 
            print "<p class='error'>Couldn't find user data.</p>\n"; 
        } 
      } else { 
          print "<p class='error'>Username was not found.</p>\n"; 
      } 
      if(ldap_error($ldapconn)!="Success"){ 
        print "<p class='error'>LDAP Error:<br />\n"; 
        var_dump(ldap_error($ldapconn)); 
        print "</p>\n"; 
      } 
      @ldap_close($ldapconn);
}
?>
</body>
</html>
Ругайте, правьте, советуйте, дополняйте. Приму любую критику. :smile: