[PHP-users 12495] Re: パスワード変更プログラム
長田真治
php-users@php.gr.jp
Fri, 10 Jan 2003 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