[PHP-users 12495] Re: パスワード変更プログラム
 
 長田真治
  
 php-users@php.gr.jp
 
 2003年1月10日 11:11:10 +0900
 
 
 
長田です。
> シャドウ化されたパスワードは、この関数で生成できました。
> RedHat7.2上で動作することを確認しています。
>> Function make_shadow_password($password)
> {
> $salt = substr(md5(microtime()), 0, 9);
> return crypt($password, "1ドル$" . $salt);
> }
自己レスです。
上記の関数は、OS のユーザ用のパスワード暗号化関数でした。
htpasswd の場合は、以下のような関数を使えばよいと思います。
直接 exec() 関数を使用するので、ブラウザから入力されて、
シェルに渡される変数については、値のチェックを十分に行う
必要があります。
<?php
 define("HTPASSWDFILE", "/home/webmaster/auth/htshadow");
 define("HTPASSWD", "/usr/bin/htpasswd");
 // htpasswdファイルを更新する。
 function htpasswd($username, $password, $htpasswdfile=HTPASSWDFILE) {
 exec(HTPASSWD . " -b " . $htpasswdfile . " " . $username . " " .
$password, $array, $return_var);
 return $return_var;
 }
 // パスワードをhtpasswdファイルで使える形に暗号化する。
 function get_encrypt_password($password) {
 exec(HTPASSWD . " -nb " . $password, $array, $return_var);
 return $return_var;
 }
 // htpasswdファイルのユーザとパスワードの情報を連想配列にして返す。
 function parse_htpasswd_file($htpasswdfile=HTPASSWDFILE){
 $array=file($htpasswdfile);
 $hash=array();
 while(list(, $val)=each($array)) {
 list($username, $password)=explode(":", $val);
 $temp_array=array($username => $password);
 $hash=array_merge($hash, $temp_array);
 }
 return $hash;
 }
 // htpasswdファイル上にユーザのエントリがあるかどうかを調べる。
 function user_exists($username) {
 if(array_key_exists($username, parse_htpasswd_file())) {
 return true;
 } else {
 return false;
 }
 }
?>
--
長田真治
株式会社グッデイ
mailto:nagata@nospam.good-day.co.jp