Verzeichnisstruktur phpBB-3.0.0


Veröffentlicht
12.12.2007

So funktioniert es


Auf das letzte Element klicken. Dies geht jeweils ein Schritt zurück

Auf das Icon klicken, dies öffnet das Verzeichnis. Nochmal klicken schließt das Verzeichnis.
Auf den Verzeichnisnamen klicken, dies zeigt nur das Verzeichnis mit Inhalt an

(Beispiel Datei-Icons)

Auf das Icon klicken um den Quellcode anzuzeigen

auth_apache.php

Zuletzt modifiziert: 09.10.2024, 12:51 - Dateigröße: 5.16 KiB


001  <?php
002  /**
003  * Apache auth plug-in for phpBB3
004  *
005  * Authentication plug-ins is largely down to Sergey Kanareykin, our thanks to him.
006  *
007  * @package login
008  * @version $Id$
009  * @copyright (c) 2005 phpBB Group
010  * @license http://opensource.org/licenses/gpl-license.php GNU Public License
011  *
012  */
013   
014  /**
015  * @ignore
016  */
017  if (!defined('IN_PHPBB'))
018  {
019      exit;
020  }
021   
022  /**
023  * Checks whether the user is identified to apache
024  * Only allow changing authentication to apache if the user is identified
025  * Called in acp_board while setting authentication plugins
026  *
027  * @return boolean|string false if the user is identified and else an error message
028  */
029  function init_apache()
030  {
031      global $user;
032   
033      if (!isset($_SERVER['PHP_AUTH_USER']) || $user->data['username'] !== $_SERVER['PHP_AUTH_USER'])
034      {
035          return $user->lang['APACHE_SETUP_BEFORE_USE'];
036      }
037      return false;
038  }
039   
040  /**
041  * Login function
042  */
043  function login_apache(&$username, &$password)
044  {
045      global $db;
046   
047      // do not allow empty password
048      if (!$password)
049      {
050          return array(
051              'status'    => LOGIN_BREAK,
052              'error_msg'    => 'NO_PASSWORD_SUPPLIED',
053          );
054      }
055   
056      if (!isset($_SERVER['PHP_AUTH_USER']))
057      {
058          return array(
059              'status'        => LOGIN_ERROR_EXTERNAL_AUTH,
060              'error_msg'        => 'LOGIN_ERROR_EXTERNAL_AUTH_APACHE',
061              'user_row'        => array('user_id' => ANONYMOUS),
062          );
063      }
064   
065      $php_auth_user = $_SERVER['PHP_AUTH_USER'];
066      $php_auth_pw = $_SERVER['PHP_AUTH_PW'];
067   
068      if (!empty($php_auth_user) && !empty($php_auth_pw))
069      {
070          if ($php_auth_user !== $username)
071          {
072              return array(
073                  'status'    => LOGIN_ERROR_USERNAME,
074                  'error_msg'    => 'LOGIN_ERROR_USERNAME',
075                  'user_row'    => array('user_id' => ANONYMOUS),
076              );
077          }
078   
079          $sql = 'SELECT user_id, username, user_password, user_passchg, user_email, user_type
080              FROM ' . USERS_TABLE . "
081              WHERE username = '" . $db->sql_escape($php_auth_user) . "'";
082          $result = $db->sql_query($sql);
083          $row = $db->sql_fetchrow($result);
084          $db->sql_freeresult($result);
085   
086          if ($row)
087          {
088              // User inactive...
089              if ($row['user_type'] == USER_INACTIVE || $row['user_type'] == USER_IGNORE)
090              {
091                  return array(
092                      'status'        => LOGIN_ERROR_ACTIVE,
093                      'error_msg'        => 'ACTIVE_ERROR',
094                      'user_row'        => $row,
095                  );
096              }
097      
098              // Successful login...
099              return array(
100                  'status'        => LOGIN_SUCCESS,
101                  'error_msg'        => false,
102                  'user_row'        => $row,
103              );
104          }
105   
106          // this is the user's first login so create an empty profile
107          return array(
108              'status'        => LOGIN_SUCCESS_CREATE_PROFILE,
109              'error_msg'        => false,
110              'user_row'        => user_row_apache($php_auth_user, $php_auth_pw),
111          );
112      }
113   
114      // Not logged into apache
115      return array(
116          'status'        => LOGIN_ERROR_EXTERNAL_AUTH,
117          'error_msg'        => 'LOGIN_ERROR_EXTERNAL_AUTH_APACHE',
118          'user_row'        => array('user_id' => ANONYMOUS),
119      );
120  }
121   
122  /**
123  * Autologin function
124  *
125  * @return array containing the user row or empty if no auto login should take place
126  */
127  function autologin_apache()
128  {
129      global $db;
130   
131      if (!isset($_SERVER['PHP_AUTH_USER']))
132      {
133          return array();
134      }
135   
136      $php_auth_user = $_SERVER['PHP_AUTH_USER'];
137      $php_auth_pw = $_SERVER['PHP_AUTH_PW'];
138   
139      if (!empty($php_auth_user) && !empty($php_auth_pw))
140      {
141          set_var($php_auth_user, $php_auth_user, 'string');
142          set_var($php_auth_pw, $php_auth_pw, 'string');
143   
144          $sql = 'SELECT *
145              FROM ' . USERS_TABLE . "
146              WHERE username = '" . $db->sql_escape($php_auth_user) . "'";
147          $result = $db->sql_query($sql);
148          $row = $db->sql_fetchrow($result);
149          $db->sql_freeresult($result);
150   
151          if ($row)
152          {
153              return ($row['user_type'] == USER_INACTIVE || $row['user_type'] == USER_IGNORE) ? array() : $row;
154          }
155   
156          if (!function_exists('user_add'))
157          {
158              global $phpbb_root_path, $phpEx;
159   
160              include($phpbb_root_path . 'includes/functions_user.' . $phpEx);
161          }
162   
163          // create the user if he does not exist yet
164          user_add(user_row_apache($php_auth_user, $php_auth_pw));
165   
166          $sql = 'SELECT *
167              FROM ' . USERS_TABLE . "
168              WHERE username_clean = '" . $db->sql_escape(utf8_clean_string($php_auth_user)) . "'";
169          $result = $db->sql_query($sql);
170          $row = $db->sql_fetchrow($result);
171          $db->sql_freeresult($result);
172   
173          if ($row)
174          {
175              return $row;
176          }
177      }
178   
179      return array();
180  }
181   
182  /**
183  * This function generates an array which can be passed to the user_add function in order to create a user
184  */
185  function user_row_apache($username, $password)
186  {
187      global $db, $config, $user;
188      // first retrieve default group id
189      $sql = 'SELECT group_id
190          FROM ' . GROUPS_TABLE . "
191          WHERE group_name = '" . $db->sql_escape('REGISTERED') . "'
192              AND group_type = " . GROUP_SPECIAL;
193      $result = $db->sql_query($sql);
194      $row = $db->sql_fetchrow($result);
195      $db->sql_freeresult($result);
196   
197      if (!$row)
198      {
199          trigger_error('NO_GROUP');
200      }
201   
202      // generate user account data
203      return array(
204          'username'        => $username,
205          'user_password'    => phpbb_hash($password),
206          'user_email'    => '',
207          'group_id'        => (int) $row['group_id'],
208          'user_type'        => USER_NORMAL,
209          'user_ip'        => $user->ip,
210      );
211  }
212   
213  /**
214  * The session validation function checks whether the user is still logged in
215  *
216  * @return boolean true if the given user is authenticated or false if the session should be closed
217  */
218  function validate_session_apache(&$user)
219  {
220      if (!isset($_SERVER['PHP_AUTH_USER']))
221      {
222          return false;
223      }
224   
225      $php_auth_user = '';
226      set_var($php_auth_user, $_SERVER['PHP_AUTH_USER'], 'string');
227   
228      return ($php_auth_user === $user['username']) ? true : false;
229  }
230   
231  ?>