List of private/genpwd.cgi

このファイルは、実行が許可されています。
Wed Apr 17 07:17:33 2024

戻る

TEXTAREA で表示(カット&ペーストむき)

#!/usr/local/bin/perl5
#
# genpwd.cgi
#
# 1998/03/29 Ver.0.01
#
# (c) 1998 がま <gama@mvg.biglobe.ne.jp>
# 
#
$copyright  = 'genpwd.cgi Ver.0.01 Copyright 1998 gama';
# ---------------------------------------------------------------------
$ownname         = 'genpwd.cgi';
$back            = 'genpwd.htm';
{
    $ct = $ENV{"CONTENT_TYPE"};
    $cl = $ENV{"CONTENT_LENGTH"};
    # ---------------------------------------------------------------------
    $|=1;                               # バッファリングを止める
    # ---------------------------------------------------------------------
    read(STDIN, $in, $cl);
    ($user,$word1,$word2) = split('&',$in);
    $user   = &str_decode_from_form($user);
    $word1  = &str_decode_from_form($word1);
    $word2  = &str_decode_from_form($word2);
    if ($word1 ne $word2) {
        &err_html("最初に入力されたパスワードと再入力が一致しません。");
        exit;
    }
    if (length($word1) < 6) {
        &err_html("パスワードは6文字以上入力してください。");
        exit;
    }

    srand(time|$$);         # 乱数用のおまじない

    my($salt,$str);
    $str    =     'abcdefghijklmnopqrstuvwxyz'
                . 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
                . '0123456789./';
    $salt   = &randstr($str,2);
    $newpwd=crypt($word1, $salt);
    &result_html("$user:$newpwd");
    exit;
}
#######################################################################
# $str の文字から、長さ $len のランダムな文字列を作成する。
sub randstr {
        my($str,$len)   = @_;                    # サブルーチンの引数
        my($strlen)     = length($str);
        my($r);
        for (1..$len) {
            $r  .= substr($str,rand($strlen),1);
        }
        return $r;
}
#######################################################################
sub err_html {
    my($msg)=$_[0];

    print "Content-type: text/html\n\n";

    print <<END;
<HTML>
<HEAD><TITLE>Error</TITLE></HEAD>
<BODY TEXT="#000000" BGCOLOR="#FFFFFF">
<H4>エラーがありました</H4>
<HR>
<BR>
$msg
<BR>
<HR>
<CENTER>
<A HREF="$back">戻る</A>
</CENTER>
<HR>
</BODY>
</HTML>
END
}
#######################################################################
sub result_html {
    my($msg)=$_[0];

    print "Content-type: text/html\n\n";

    print <<END;
<HTML>
<HEAD><TITLE>暗号化されたパスワード</TITLE></HEAD>
<BODY TEXT="#000000" BGCOLOR="#FFFFFF">
<BR>
<CENTER>
<H4>暗号化されたパスワード</H4>
<HR>
<PRE>
<FORM>
<INPUT NAME="pass"   TYPE="TEXT" VALUE="$msg" SIZE=40 ><BR>
</FORM>
</PRE>
</CENTER>
<HR>
<CENTER>
<A HREF="$back">戻る</A>
</CENTER>
<HR>$copyright
</BODY>
</HTML>
END
}
#######################################################################
sub str_decode_from_form {
        my($str)=$_[0];                         # サブルーチンの引数を
        $str=~ s/^\w+=//;                       # = までを削除・・・
        $str=~ s/\+/ /g;                        # + を space へ
        $str=~ s/%(..)/pack("c",hex($1))/ge;    # decode
        $str=~ s/\r//g;                         # LF を削除
        return($str);
}

戻る