Develop and Download Open Source Software

Browse Subversion Repository

Contents of /trunc/include/auth.php

Parent Directory Parent Directory | Revision Log Revision Log


Revision 11 - (show annotations) (download) (as text)
Sat Jan 22 01:18:20 2011 UTC (13 years, 3 months ago) by inoue-h
File MIME type: application/x-httpd-php
File size: 7905 byte(s)
dumpファイルのダウンロード、認証の内部処理、ヘッダ・フッタ書き出しを関数化

1 <?php
2
3 // ******************************************************
4 // Software name : WebSVN Administrator用 認証関数
5 //
6 // Copyright (C) INOUE Hirokazu, All Rights Reserved
7 // http://oasis.halfmoon.jp/
8 //
9 // version 1.0 (2010/02/21)
10 // version 1.1 (2011/01/16)
11 // version 1.2 (2011/01/22)
12 //
13 // GNU GPL Free Software
14 //
15 // このプログラムはフリーソフトウェアです。あなたはこれを、フリーソフトウェア財
16 // 団によって発行された GNU 一般公衆利用許諾契約書(バージョン2か、希望によっては
17 // それ以降のバージョンのうちどれか)の定める条件の下で再頒布または改変することが
18 // できます。
19 //
20 // このプログラムは有用であることを願って頒布されますが、*全くの無保証* です。
21 // 商業可能性の保証や特定の目的への適合性は、言外に示されたものも含め全く存在し
22 // ません。詳しくはGNU 一般公衆利用許諾契約書をご覧ください。
23 //
24 // あなたはこのプログラムと共に、GNU 一般公衆利用許諾契約書の複製物を一部受け取
25 // ったはずです。もし受け取っていなければ、フリーソフトウェア財団まで請求してく
26 // ださい(宛先は the Free Software Foundation, Inc., 59 Temple Place, Suite 330
27 // , Boston, MA 02111-1307 USA)。
28 //
29 // http://www.opensource.jp/gpl/gpl.ja.html
30 // ******************************************************
31
32 // 認証用データファイル
33 $strAuthDataFile = 'data/auth.dat';
34
35
36 // 認証メイン関数
37 // 認証されていない場合、ユーザ・パスワード入力ボックスを表示
38 // ユーザ・パスワードが送られてきた場合は、認証を行う
39 // 既に認証されている場合は、何もしない
40 //
41 // 認証状態はセッションに格納される(認証ログオフは、LogoffAuth 関数)
42 //
43 // 認証されている場合 1 を返す
44 // 認証されていない場合 0 を返す
45 function CheckAuth($strReloadPage, $flag_check_only)
46 {
47 if(!isset($_SESSION)){ session_start(); }
48 $strAuthUser = ''; // 認証されたユーザ名
49
50 if (isset($_SESSION['svnadmin-user']))
51 {
52 // 既にログオンしてている場合
53 return(1); // 認証成功
54 }
55 elseif(isset($flag_check_only) && $flag_check_only == 1){
56 // ログオンしていない場合で、結果のみ返す場合
57 return(0);
58 }
59 elseif(!isset($_POST['user']) || !isset($_POST['password'])){
60 // 新規入力画面を表示する
61
62 print("<form method=\"post\" action=\"./$strReloadPage\" name=\"form2\">\n");
63 print("\t<table border=\"0\" cellpadding=\"2\" cellspacing=\"0\" align=\"center\">\n");
64 print("\t<tr><td colspan=\"2\"><strong>ログオン送信データ</strong></td></tr>");
65 print("\t<tr><td>ユーザ</td><td><input name=\"user\" size=\"40\" /></td></tr>\n");
66 print("\t<tr><td>パスワード</td><td><input name=\"password\" type=\"password\" size=\"40\" /></td></tr>\n");
67 print("\t<tr><td colspan=\"2\"><input type=\"submit\" value=\"ログオンする\" /></td></tr>\n");
68 print("\t</table>\n");
69 print("</form>\n");
70
71 return(0); // 認証失敗
72 }
73 else {
74 // DBを参照して、認証チェックを行う
75 $strAuthUser = CheckUser($_POST['user'], $_POST['password']);
76 if($strAuthUser != '') {
77 // 認証OK
78 $_SESSION['svnadmin-user'] = $strAuthUser;
79 return(1); // 認証成功
80 }
81 }
82
83 // 認証失敗
84 return(0);
85
86 }
87
88
89 // 認証状態をログオフする
90 function LogoffAuth()
91 {
92 if(!isset($_SESSION)){ session_start(); }
93 $_SESSION = array(); // セッション変数を全てクリア
94 session_destroy(); // セッションファイルを削除
95
96 }
97
98
99 function ChangePassword($strReloadPage, $strLogPage)
100 {
101 if(!isset($_SESSION)){ session_start(); }
102
103 if (isset($_SESSION['svnadmin-user']))
104 {
105 // 既にログオンしてている場合
106 if(isset($_POST['newuser']) && isset($_POST['password1']) && isset($_POST['password2'])){
107 // パスワードの変更
108 if($_POST['password1'] === $_POST['password2']){
109 // 禁止文字、文字列長さのチェック
110 if(!preg_match("/^[A-Za-z0-9\-]+$/", $_POST['newuser']) || !preg_match("/^[A-Za-z0-9\-]+$/", $_POST['password1']) ||
111 strlen($_POST['newuser']) > 20 || strlen($_POST['password1']) > 20){
112 return('Error : ユーザ名とパスワードは20文字以内、A-Z,a-z,0-9の文字しか許容されません');
113 }
114 else{
115 // ユーザ名・パスワードの変更
116 if(ChangeAuthFile($_POST['newuser'], $_POST['password1']) > 0){
117 return('ユーザ名とパスワードを変更しました');
118 }
119 else{
120 return('Error : 認証ファイル '.$strAuthDataFile.' に書き込めません');
121 }
122 }
123 }
124 return('Error : パスワードが一致しません');
125 }
126 // パスワード変更画面を表示する
127
128 print("<form method=\"post\" action=\"./$strReloadPage?mode=chgpasswd\" name=\"form2\">\n");
129 print("\t<table border=\"0\" cellpadding=\"2\" cellspacing=\"0\" align=\"center\">\n");
130 print("\t<tr><td colspan=\"2\"><strong>ユーザ名とパスワードの変更</strong></td></tr>");
131 print("\t<tr><td>新ユーザ</td><td><input name=\"newuser\" size=\"40\" /></td></tr>\n");
132 print("\t<tr><td>新パスワード</td><td><input name=\"password1\" type=\"password\" size=\"40\" /></td></tr>\n");
133 print("\t<tr><td>もう一度新パスワードを入力</td><td><input name=\"password2\" type=\"password\"size=\"40\" /></td></tr>\n");
134 print("\t<tr><td colspan=\"2\"><input type=\"submit\" value=\"変更する\" /></td></tr>\n");
135 print("\t</table>\n");
136 print("</form>\n");
137
138 return('');
139 }
140
141 // 認証失敗
142 return('エラー:ログオンしていませんので、パスワードの変更は出来ません');
143
144 }
145
146 // 認証用データファイルが存在するか確認し、存在しなければ新規作成する
147 function CheckAuthDataFile(){
148 global $strAuthDataFile;
149 if(file_exists($strAuthDataFile)){ return(1); } // 認証ファイルが存在する
150
151 // 新しい認証ファイルを作成する
152 $fh = fopen($strAuthDataFile, 'w');
153 if($fh){
154 fwrite($fh, "# user, password\n");
155 fwrite($fh, "test,".md5('password')."\n");
156 fclose($fh);
157 }
158 else{
159 return(-1); // 認証ファイルが作成できない
160 }
161
162 return(0); // 認証ファイルを新規作成した
163 }
164
165 // ユーザ名、パスワードをチェック
166 function CheckUser($strNewUser, $strNewPassword)
167 {
168 global $strAuthDataFile;
169 $strUser = '';
170 $strPassword = '';
171
172 // 禁止文字、文字列長さのチェック
173 if(!preg_match("/^[A-Za-z0-9\-]+$/", $strNewUser) || !preg_match("/^[A-Za-z0-9\-]+$/", $strNewPassword) ||
174 strlen($strNewUser) > 20 || strlen($strNewPassword) > 20){
175 return('');
176 }
177
178 $flag_ok = 0;
179
180 $fh = fopen($strAuthDataFile, 'r');
181 if($fh){
182 while (!feof($fh)){
183 $line = fgets($fh);
184 if(strlen($line)<=0 || $line[0] == '#'){ continue; }
185 # コンマで切り分ける
186 $arr = split(',', $line);
187 if(count($arr)<2){ continue; }
188 # 文字列の前後に空白,改行,TAB があれば取り除く
189 $strUser = trim($arr[0]);
190 $strPassword = trim($arr[1]);
191 # アカウント確認されれば終了
192 if($strUser === $strNewUser && $strPassword === md5($strNewPassword)){
193 $flag_ok = 1;
194 break;
195 }
196 }
197 fclose($fh);
198 }
199 else{
200 print("<p>Error : Authorization data file read error.</p>\n");
201 }
202
203
204 if($flag_ok == 0){ return(''); }
205
206 // 認証成功(ユーザ名を返す)
207 return($strUser);
208 }
209
210
211 // 認証ファイルに新ユーザ名、パスワードをセットする
212 function ChangeAuthFile($strNewUser, $strNewPassword)
213 {
214 global $strAuthDataFile;
215 $fh = fopen($strAuthDataFile, 'w');
216 if($fh){
217 fwrite($fh, "# user, password\n");
218 fwrite($fh, $strNewUser.",".md5($strNewPassword)."\n");
219 fclose($fh);
220 return(1); // 成功
221 }
222 else{
223 return(-1); // 失敗
224 }
225
226 }
227
228
229 ?>
230

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26