OSDN Git Service

Expire risk: unset $_GET, $_POST, $_COOKIE
[pukiwiki/pukiwiki.git] / auth.php
1 <?php
2 /////////////////////////////////////////////////
3 // PukiWiki - Yet another WikiWikiWeb clone.
4 //
5 // $Id: auth.php,v 1.3 2003/12/02 09:31:18 arino Exp $
6 //
7
8 // ÊÔ½¸ÉÔ²Äǽ¤Ê¥Ú¡¼¥¸¤òÊÔ½¸¤·¤è¤¦¤È¤·¤¿¤È¤­
9 function check_editable($page,$auth_flag=TRUE,$exit_flag=TRUE)
10 {
11         global $script,$_title_cannotedit,$_msg_unfreeze;
12         
13         if (edit_auth($page,$auth_flag,$exit_flag) and is_editable($page))
14         {
15                 return TRUE;
16         }
17         if (!$exit_flag)
18         {
19                 return FALSE;
20         }
21         $body = $title = str_replace('$1',htmlspecialchars(strip_bracket($page)),$_title_cannotedit);
22         if (is_freeze($page))
23         {
24                 $body .= "(<a href=\"$script?cmd=unfreeze&amp;page=".
25                         rawurlencode($page)."\">$_msg_unfreeze</a>)";
26         }
27         
28         $page = str_replace('$1',make_search($page),$_title_cannotedit);
29         
30         catbody($title,$page,$body);
31         exit;
32 }
33
34 // ±ÜÍ÷ÉÔ²Äǽ¤Ê¥Ú¡¼¥¸¤ò±ÜÍ÷¤·¤è¤¦¤È¤·¤¿¤È¤­ (¡©)
35 function check_readable($page,$auth_flag=TRUE,$exit_flag=TRUE)
36 {
37         return read_auth($page,$auth_flag,$exit_flag);
38 }
39
40 // ÊÔ½¸Ç§¾Ú
41 function edit_auth($page,$auth_flag=TRUE,$exit_flag=TRUE)
42 {
43         global $edit_auth,$edit_auth_pages,$_title_cannotedit;
44         
45         // ÊÔ½¸Ç§¾Ú¥Õ¥é¥°¤ò¥Á¥§¥Ã¥¯
46         return $edit_auth ?
47                 basic_auth($page,$auth_flag,$exit_flag,$edit_auth_pages,$_title_cannotedit) : TRUE;
48 }
49
50 // ±ÜÍ÷ǧ¾Ú
51 function read_auth($page,$auth_flag=TRUE,$exit_flag=TRUE)
52 {
53         global $read_auth,$read_auth_pages,$_title_cannotread;
54         
55         // ±ÜÍ÷ǧ¾Ú¥Õ¥é¥°¤ò¥Á¥§¥Ã¥¯
56         return $read_auth ?
57                 basic_auth($page,$auth_flag,$exit_flag,$read_auth_pages,$_title_cannotread) : TRUE;
58 }
59
60 // Basicǧ¾Ú
61 function basic_auth($page,$auth_flag,$exit_flag,$auth_pages,$title_cannot)
62 {
63         global $auth_users,$auth_method_type;
64         global $_msg_auth;
65         
66         // Ç§¾ÚÍ×ÈÝȽÃÇÂоÝʸ»úÎó¤ò¼èÆÀ¤¹¤ë
67         $target_str = '';
68         // ¥Ú¡¼¥¸Ì¾¤Ç¥Á¥§¥Ã¥¯¤¹¤ë¾ì¹ç
69         if ($auth_method_type == 'pagename')
70         {
71                 $target_str = $page;
72         }
73         // ¥Ú¡¼¥¸Æâ¤Îʸ»úÎó¤Ç¥Á¥§¥Ã¥¯¤¹¤ë¾ì¹ç
74         else if ($auth_method_type == 'contents')
75         {
76                 $target_str = join('',get_source($page));
77         }
78         // ¹çÃפ·¤¿¥Ñ¥¿¡¼¥ó¤ÇÄêµÁ¤µ¤ì¤¿¥æ¡¼¥¶¤Î¥ê¥¹¥È
79         $user_list = array();
80         foreach($auth_pages as $key=>$val)
81         {
82                 if (preg_match($key,$target_str))
83                 {
84                         $user_list = array_merge($user_list,explode(',',$val));
85                 }
86         }
87         if (count($user_list) == 0)
88         {
89                 // À©¸Â¤Ê¤·
90                 return TRUE;
91         }
92         // PHP_AUTH* ÊÑ¿ô¤¬Ì¤ÄêµÁ¤Î¾ì¹ç
93         if (!isset($_SERVER['PHP_AUTH_USER'])
94                 and !isset($_SERVER ['PHP_AUTH_PW'])
95                 and isset($_SERVER['HTTP_AUTHORIZATION'])
96                 and preg_match('/^Basic (.*)$/', $_SERVER['HTTP_AUTHORIZATION'],$matches))
97         {
98                 // HTTP_AUTHORIZATION ÊÑ¿ô¤ò»ÈÍѤ·¤¿ Basic Ç§¾Ú
99                 list($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']) = explode(':', base64_decode($matches[1]));
100         }
101         // ¥æ¡¼¥¶¥ê¥¹¥È¤Ë´Þ¤Þ¤ì¤ë¤¤¤º¤ì¤«¤Î¥æ¡¼¥¶¤Èǧ¾Ú¤µ¤ì¤ì¤ÐOK
102         if (!isset($_SERVER['PHP_AUTH_USER'])
103                 or !in_array($_SERVER['PHP_AUTH_USER'],$user_list)
104                 or !array_key_exists($_SERVER['PHP_AUTH_USER'],$auth_users)
105                 or $auth_users[$_SERVER['PHP_AUTH_USER']] != $_SERVER['PHP_AUTH_PW'])
106         {
107                 if ($auth_flag)
108                 {
109                         header('WWW-Authenticate: Basic realm="'.$_msg_auth.'"');
110                         header('HTTP/1.0 401 Unauthorized');
111                 }
112                 if ($exit_flag)
113                 {
114                         $body = $title = str_replace('$1',htmlspecialchars(strip_bracket($page)),$title_cannot);
115                         $page = str_replace('$1',make_search($page),$title_cannot);
116                         catbody($title,$page,$body);
117                         exit;
118                 }
119                 return FALSE;
120         }
121         return TRUE;
122 }
123 ?>