Verzeichnisstruktur phpBB-3.1.0


Veröffentlicht
27.10.2014

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

apache.php

Zuletzt modifiziert: 09.10.2024, 12:54 - Dateigröße: 7.07 KiB


001  <?php
002  /**
003  *
004  * This file is part of the phpBB Forum Software package.
005  *
006  * @copyright (c) phpBB Limited <https://www.phpbb.com>
007  * @license GNU General Public License, version 2 (GPL-2.0)
008  *
009  * For full copyright and license information, please see
010  * the docs/CREDITS.txt file.
011  *
012  */
013   
014  namespace phpbb\auth\provider;
015   
016  /**
017  * Apache authentication provider for phpBB3
018  */
019  class apache extends \phpbb\auth\provider\base
020  {
021      /**
022      * phpBB passwords manager
023      *
024      * @var \phpbb\passwords\manager
025      */
026      protected $passwords_manager;
027   
028      /**
029       * Apache Authentication Constructor
030       *
031       * @param    \phpbb\db\driver\driver_interface     $db        Database object
032       * @param    \phpbb\config\config         $config        Config object
033       * @param    \phpbb\passwords\manager    $passwords_manager        Passwords Manager object
034       * @param    \phpbb\request\request         $request        Request object
035       * @param    \phpbb\user             $user        User object
036       * @param    string                 $phpbb_root_path        Relative path to phpBB root
037       * @param    string                 $php_ext        PHP file extension
038       */
039      public function __construct(\phpbb\db\driver\driver_interface $db, \phpbb\config\config $config, \phpbb\passwords\manager $passwords_manager, \phpbb\request\request $request, \phpbb\user $user, $phpbb_root_path, $php_ext)
040      {
041          $this->db = $db;
042          $this->config = $config;
043          $this->passwords_manager = $passwords_manager;
044          $this->request = $request;
045          $this->user = $user;
046          $this->phpbb_root_path = $phpbb_root_path;
047          $this->php_ext = $php_ext;
048      }
049   
050      /**
051       * {@inheritdoc}
052       */
053      public function init()
054      {
055          if (!$this->request->is_set('PHP_AUTH_USER', \phpbb\request\request_interface::SERVER) || $this->user->data['username'] !== htmlspecialchars_decode($this->request->server('PHP_AUTH_USER')))
056          {
057              return $this->user->lang['APACHE_SETUP_BEFORE_USE'];
058          }
059          return false;
060      }
061   
062      /**
063       * {@inheritdoc}
064       */
065      public function login($username, $password)
066      {
067          // do not allow empty password
068          if (!$password)
069          {
070              return array(
071                  'status'    => LOGIN_ERROR_PASSWORD,
072                  'error_msg'    => 'NO_PASSWORD_SUPPLIED',
073                  'user_row'    => array('user_id' => ANONYMOUS),
074              );
075          }
076   
077          if (!$username)
078          {
079              return array(
080                  'status'    => LOGIN_ERROR_USERNAME,
081                  'error_msg'    => 'LOGIN_ERROR_USERNAME',
082                  'user_row'    => array('user_id' => ANONYMOUS),
083              );
084          }
085   
086          if (!$this->request->is_set('PHP_AUTH_USER', \phpbb\request\request_interface::SERVER))
087          {
088              return array(
089                  'status'        => LOGIN_ERROR_EXTERNAL_AUTH,
090                  'error_msg'        => 'LOGIN_ERROR_EXTERNAL_AUTH_APACHE',
091                  'user_row'        => array('user_id' => ANONYMOUS),
092              );
093          }
094   
095          $php_auth_user = htmlspecialchars_decode($this->request->server('PHP_AUTH_USER'));
096          $php_auth_pw = htmlspecialchars_decode($this->request->server('PHP_AUTH_PW'));
097   
098          if (!empty($php_auth_user) && !empty($php_auth_pw))
099          {
100              if ($php_auth_user !== $username)
101              {
102                  return array(
103                      'status'    => LOGIN_ERROR_USERNAME,
104                      'error_msg'    => 'LOGIN_ERROR_USERNAME',
105                      'user_row'    => array('user_id' => ANONYMOUS),
106                  );
107              }
108   
109              $sql = 'SELECT user_id, username, user_password, user_passchg, user_email, user_type
110                  FROM ' . USERS_TABLE . "
111                  WHERE username = '" . $this->db->sql_escape($php_auth_user) . "'";
112              $result = $this->db->sql_query($sql);
113              $row = $this->db->sql_fetchrow($result);
114              $this->db->sql_freeresult($result);
115   
116              if ($row)
117              {
118                  // User inactive...
119                  if ($row['user_type'] == USER_INACTIVE || $row['user_type'] == USER_IGNORE)
120                  {
121                      return array(
122                          'status'        => LOGIN_ERROR_ACTIVE,
123                          'error_msg'        => 'ACTIVE_ERROR',
124                          'user_row'        => $row,
125                      );
126                  }
127   
128                  // Successful login...
129                  return array(
130                      'status'        => LOGIN_SUCCESS,
131                      'error_msg'        => false,
132                      'user_row'        => $row,
133                  );
134              }
135   
136              // this is the user's first login so create an empty profile
137              return array(
138                  'status'        => LOGIN_SUCCESS_CREATE_PROFILE,
139                  'error_msg'        => false,
140                  'user_row'        => user_row_apache($php_auth_user, $php_auth_pw),
141              );
142          }
143   
144          // Not logged into apache
145          return array(
146              'status'        => LOGIN_ERROR_EXTERNAL_AUTH,
147              'error_msg'        => 'LOGIN_ERROR_EXTERNAL_AUTH_APACHE',
148              'user_row'        => array('user_id' => ANONYMOUS),
149          );
150      }
151   
152      /**
153       * {@inheritdoc}
154       */
155      public function autologin()
156      {
157          if (!$this->request->is_set('PHP_AUTH_USER', \phpbb\request\request_interface::SERVER))
158          {
159              return array();
160          }
161   
162          $php_auth_user = htmlspecialchars_decode($this->request->server('PHP_AUTH_USER'));
163          $php_auth_pw = htmlspecialchars_decode($this->request->server('PHP_AUTH_PW'));
164   
165          if (!empty($php_auth_user) && !empty($php_auth_pw))
166          {
167              set_var($php_auth_user, $php_auth_user, 'string', true);
168              set_var($php_auth_pw, $php_auth_pw, 'string', true);
169   
170              $sql = 'SELECT *
171                  FROM ' . USERS_TABLE . "
172                  WHERE username = '" . $this->db->sql_escape($php_auth_user) . "'";
173              $result = $this->db->sql_query($sql);
174              $row = $this->db->sql_fetchrow($result);
175              $this->db->sql_freeresult($result);
176   
177              if ($row)
178              {
179                  return ($row['user_type'] == USER_INACTIVE || $row['user_type'] == USER_IGNORE) ? array() : $row;
180              }
181   
182              if (!function_exists('user_add'))
183              {
184                  include($this->phpbb_root_path . 'includes/functions_user.' . $this->php_ext);
185              }
186   
187              // create the user if he does not exist yet
188              user_add(user_row_apache($php_auth_user, $php_auth_pw));
189   
190              $sql = 'SELECT *
191                  FROM ' . USERS_TABLE . "
192                  WHERE username_clean = '" . $this->db->sql_escape(utf8_clean_string($php_auth_user)) . "'";
193              $result = $this->db->sql_query($sql);
194              $row = $this->db->sql_fetchrow($result);
195              $this->db->sql_freeresult($result);
196   
197              if ($row)
198              {
199                  return $row;
200              }
201          }
202   
203          return array();
204      }
205   
206      /**
207       * This function generates an array which can be passed to the user_add
208       * function in order to create a user
209       *
210       * @param     string    $username     The username of the new user.
211       * @param     string    $password     The password of the new user.
212       * @return     array                 Contains data that can be passed directly to
213       *                                the user_add function.
214       */
215      private function user_row($username, $password)
216      {
217          // first retrieve default group id
218          $sql = 'SELECT group_id
219              FROM ' . GROUPS_TABLE . "
220              WHERE group_name = '" . $this->db->sql_escape('REGISTERED') . "'
221                  AND group_type = " . GROUP_SPECIAL;
222          $result = $this->db->sql_query($sql);
223          $row = $this->db->sql_fetchrow($result);
224          $this->db->sql_freeresult($result);
225   
226          if (!$row)
227          {
228              trigger_error('NO_GROUP');
229          }
230   
231          // generate user account data
232          return array(
233              'username'        => $username,
234              'user_password'    => $this->passwords_manager->hash($password),
235              'user_email'    => '',
236              'group_id'        => (int) $row['group_id'],
237              'user_type'        => USER_NORMAL,
238              'user_ip'        => $this->user->ip,
239              'user_new'        => ($this->config['new_member_post_limit']) ? 1 : 0,
240          );
241      }
242   
243      /**
244       * {@inheritdoc}
245       */
246      public function validate_session($user)
247      {
248          // Check if PHP_AUTH_USER is set and handle this case
249          if ($this->request->is_set('PHP_AUTH_USER', \phpbb\request\request_interface::SERVER))
250          {
251              $php_auth_user = $this->request->server('PHP_AUTH_USER');
252   
253              return ($php_auth_user === $user['username']) ? true : false;
254          }
255   
256          // PHP_AUTH_USER is not set. A valid session is now determined by the user type (anonymous/bot or not)
257          if ($user['user_type'] == USER_IGNORE)
258          {
259              return true;
260          }
261   
262          return false;
263      }
264  }
265