aboutsummaryrefslogtreecommitdiffstats
path: root/phpBB/includes/session.php
diff options
context:
space:
mode:
Diffstat (limited to 'phpBB/includes/session.php')
-rw-r--r--phpBB/includes/session.php362
1 files changed, 1 insertions, 361 deletions
diff --git a/phpBB/includes/session.php b/phpBB/includes/session.php
index 0094b4e107..b3315ec4bc 100644
--- a/phpBB/includes/session.php
+++ b/phpBB/includes/session.php
@@ -1094,364 +1094,4 @@ class user extends session
}
}
-
-class auth
-{
- var $founder = false;
- var $acl = array();
- var $option = array();
- var $acl_options = array();
-
- function acl(&$userdata)
- {
- global $db, $cache;
-
- if (!($this->acl_options = $cache->get('acl_options')))
- {
- $sql = 'SELECT auth_option, is_global, is_local
- FROM ' . ACL_OPTIONS_TABLE . '
- ORDER BY auth_option_id';
- $result = $db->sql_query($sql);
-
- $global = $local = 0;
- while ($row = $db->sql_fetchrow($result))
- {
- if (!empty($row['is_global']))
- {
- $this->acl_options['global'][$row['auth_option']] = $global++;
- }
- if (!empty($row['is_local']))
- {
- $this->acl_options['local'][$row['auth_option']] = $local++;
- }
- }
- $db->sql_freeresult($result);
-
- $cache->put('acl_options', $this->acl_options);
- $this->acl_clear_prefetch();
- $this->acl_cache($userdata);
- }
- else if (!trim($userdata['user_permissions']))
- {
- $this->acl_cache($userdata);
- }
-
- foreach (explode("\n", $userdata['user_permissions']) as $f => $seq)
- {
- if ($seq)
- {
- $i = 0;
- while ($subseq = substr($seq, $i, 6))
- {
- if (!isset($this->acl[$f]))
- {
- $this->acl[$f] = '';
- }
- $this->acl[$f] .= str_pad(base_convert($subseq, 36, 2), 31, 0, STR_PAD_LEFT);
- $i += 6;
- }
- }
- }
- return;
- }
-
- // Look up an option
- function acl_get($opt, $f = 0)
- {
- static $cache;
-
- if (!isset($cache[$f][$opt]))
- {
- $cache[$f][$opt] = false;
- if (isset($this->acl_options['global'][$opt]))
- {
- if (isset($this->acl[0]))
- {
- $cache[$f][$opt] = $this->acl[0]{$this->acl_options['global'][$opt]};
- }
- }
- if (isset($this->acl_options['local'][$opt]))
- {
- if (isset($this->acl[$f]))
- {
- $cache[$f][$opt] |= $this->acl[$f]{$this->acl_options['local'][$opt]};
- }
- }
- }
-
- // Needs to change ... check founder status when updating cache?
- return $cache[$f][$opt];
- }
-
- function acl_getf($opt)
- {
- static $cache;
-
- if (isset($this->acl_options['local'][$opt]))
- {
- foreach ($this->acl as $f => $bitstring)
- {
- if (!isset($cache[$f][$opt]))
- {
- $cache[$f][$opt] = false;
-
- $cache[$f][$opt] = $bitstring{$this->acl_options['local'][$opt]};
- if (isset($this->acl_options['global'][$opt]))
- {
- $cache[$f][$opt] |= $this->acl[0]{$this->acl_options['global'][$opt]};
- }
- }
- }
- }
-
- return $cache;
- }
-
- function acl_gets()
- {
- $args = func_get_args();
- $f = array_pop($args);
-
- if (!is_numeric($f))
- {
- $args[] = $f;
- $f = 0;
- }
-
- // alternate syntax: acl_gets(array('m_', 'a_'), $forum_id)
- if (is_array($args[0]))
- {
- $args = $args[0];
- }
-
- $acl = 0;
- foreach ($args as $opt)
- {
- $acl |= $this->acl_get($opt, $f);
- }
-
- return $acl;
- }
-
- function acl_get_list($user_id = false, $opts = false, $forum_id = false)
- {
- $hold_ary = $this->acl_raw_data($user_id, $opts, $forum_id);
-
- $auth_ary = array();
- foreach ($hold_ary as $user_id => $forum_ary)
- {
- foreach ($forum_ary as $forum_id => $auth_option_ary)
- {
- foreach ($auth_option_ary as $auth_option => $auth_setting)
- {
- if ($auth_setting == ACL_YES)
- {
- $auth_ary[$forum_id][$auth_option][] = $user_id;
- }
- }
- }
- }
-
- return $auth_ary;
- }
-
- // Cache data
- function acl_cache(&$userdata)
- {
- global $db;
-
- $hold_ary = $this->acl_raw_data($userdata['user_id'], false, false);
- $hold_ary = $hold_ary[$userdata['user_id']];
-
- // If this user is founder we're going to force fill the admin options ...
- if ($userdata['user_type'] == USER_FOUNDER)
- {
- foreach ($this->acl_options['global'] as $opt => $id)
- {
- if (strpos($opt, 'a_') !== false)
- {
- $hold_ary[0][$opt] = 1;
- }
- }
- }
-
- $hold_str = '';
- if (is_array($hold_ary))
- {
- ksort($hold_ary);
-
- $last_f = 0;
- foreach ($hold_ary as $f => $auth_ary)
- {
- $ary_key = (!$f) ? 'global' : 'local';
-
- $bitstring = array();
- foreach ($this->acl_options[$ary_key] as $opt => $id)
- {
- if (!empty($auth_ary[$opt]))
- {
- $bitstring[$id] = 1;
-
- $option_key = substr($opt, 0, strpos($opt, '_') + 1);
- if (empty($holding[$this->acl_options[$ary_key][$option_key]]))
- {
- $bitstring[$this->acl_options[$ary_key][$option_key]] = 1;
- }
- }
- else
- {
- $bitstring[$id] = 0;
- }
- }
-
- $bitstring = implode('', $bitstring);
-
- $hold_str .= str_repeat("\n", $f - $last_f);
-
- for ($i = 0; $i < strlen($bitstring); $i += 31)
- {
- $hold_str .= str_pad(base_convert(str_pad(substr($bitstring, $i, 31), 31, 0, STR_PAD_RIGHT), 2, 36), 6, 0, STR_PAD_LEFT);
- }
-
- $last_f = $f;
- }
- unset($bitstring);
-
- $userdata['user_permissions'] = rtrim($hold_str);
-
- $sql = 'UPDATE ' . USERS_TABLE . "
- SET user_permissions = '" . $db->sql_escape($userdata['user_permissions']) . "'
- WHERE user_id = " . $userdata['user_id'];
- $db->sql_query($sql);
- }
- unset($hold_ary);
-
- return;
- }
-
- function acl_raw_data($user_id = false, $opts = false, $forum_id = false)
- {
- global $db;
-
- $sql_user = ($user_id !== false) ? ((!is_array($user_id)) ? "user_id = $user_id" : 'user_id IN (' . implode(', ', $user_id) . ')') : '';
- $sql_forum = ($forum_id !== false) ? ((!is_array($forum_id)) ? "AND a.forum_id = $forum_id" : 'AND a.forum_id IN (' . implode(', ', $forum_id) . ')') : '';
- $sql_opts = ($opts !== false) ? ((!is_array($opts)) ? "AND ao.auth_option = '$opts'" : 'AND ao.auth_option IN (' . implode(', ', preg_replace('#^[\s]*?(.*?)[\s]*?$#e', "\"'\" . \$db->sql_escape('\\1') . \"'\"", $opts)) . ')') : '';
-
- $hold_ary = array();
- // First grab user settings ... each user has only one setting for each
- // option ... so we shouldn't need any ACL_NO checks ... he says ...
- $sql = 'SELECT ao.auth_option, a.user_id, a.forum_id, a.auth_setting
- FROM ' . ACL_OPTIONS_TABLE . ' ao, ' . ACL_USERS_TABLE . ' a
- WHERE ao.auth_option_id = a.auth_option_id
- ' . (($sql_user) ? 'AND a.' . $sql_user : '') . "
- $sql_forum
- $sql_opts
- ORDER BY a.forum_id, ao.auth_option";
- $result = $db->sql_query($sql);
-
- while ($row = $db->sql_fetchrow($result))
- {
- $hold_ary[$row['user_id']][$row['forum_id']][$row['auth_option']] = $row['auth_setting'];
- }
- $db->sql_freeresult($result);
-
- // Now grab group settings ... ACL_NO overrides ACL_YES so act appropriatley
- $sql = 'SELECT ug.user_id, ao.auth_option, a.forum_id, a.auth_setting
- FROM ' . USER_GROUP_TABLE . ' ug, ' . ACL_OPTIONS_TABLE . ' ao, ' . ACL_GROUPS_TABLE . ' a
- WHERE ao.auth_option_id = a.auth_option_id
- AND a.group_id = ug.group_id
- ' . (($sql_user) ? 'AND ug.' . $sql_user : '') . "
- $sql_forum
- $sql_opts
- ORDER BY a.forum_id, ao.auth_option";
- $result = $db->sql_query($sql);
-
- while ($row = $db->sql_fetchrow($result))
- {
- if (!isset($hold_ary[$row['user_id']][$row['forum_id']][$row['auth_option']]) || (isset($hold_ary[$row['user_id']][$row['forum_id']][$row['auth_option']]) && $hold_ary[$row['user_id']][$row['forum_id']][$row['auth_option']] != ACL_NO))
- {
- $hold_ary[$row['user_id']][$row['forum_id']][$row['auth_option']] = $row['auth_setting'];
- }
- }
- $db->sql_freeresult($result);
-
- return $hold_ary;
- }
-
- function acl_group_raw_data($group_id = false, $opts = false, $forum_id = false)
- {
- global $db;
-
- $sql_group = ($group_id !== false) ? ((!is_array($group_id)) ? "group_id = $group_id" : 'group_id IN (' . implode(', ', $group_id) . ')') : '';
- $sql_forum = ($forum_id !== false) ? ((!is_array($forum_id)) ? "AND a.forum_id = $forum_id" : 'AND a.forum_id IN (' . implode(', ', $forum_id) . ')') : '';
- $sql_opts = ($opts !== false) ? ((!is_array($opts)) ? "AND ao.auth_option = '$opts'" : 'AND ao.auth_option IN (' . implode(', ', preg_replace('#^[\s]*?(.*?)[\s]*?$#e', "\"'\" . \$db->sql_escape('\\1') . \"'\"", $opts)) . ')') : '';
-
- $hold_ary = array();
-
- // Grab group settings ... ACL_NO overrides ACL_YES so act appropriatley
- $sql = 'SELECT a.group_id, ao.auth_option, a.forum_id, a.auth_setting
- FROM ' . ACL_OPTIONS_TABLE . ' ao, ' . ACL_GROUPS_TABLE . ' a
- WHERE ao.auth_option_id = a.auth_option_id
- ' . (($sql_group) ? 'AND a.' . $sql_group : '') . "
- $sql_forum
- $sql_opts
- ORDER BY a.forum_id, ao.auth_option";
- $result = $db->sql_query($sql);
-
- while ($row = $db->sql_fetchrow($result))
- {
- $hold_ary[$row['group_id']][$row['forum_id']][$row['auth_option']] = $row['auth_setting'];
- }
- $db->sql_freeresult($result);
-
- return $hold_ary;
- }
-
- // Clear one or all users cached permission settings
- function acl_clear_prefetch($user_id = false)
- {
- global $db;
-
- $where_sql = ($user_id !== false) ? ' WHERE user_id ' . ((is_array($user_id)) ? ' IN (' . implode(', ', array_map('intval', $user_id)) . ')' : " = $user_id") : '';
-
- $sql = 'UPDATE ' . USERS_TABLE . "
- SET user_permissions = ''
- $where_sql";
- $db->sql_query($sql);
-
- return;
- }
-
- // @todo replace this with a new system
- // Authentication plug-ins is largely down to Sergey Kanareykin, our thanks to him.
- function login($username, $password, $autologin = false, $viewonline = 1, $admin = 0)
- {
- global $config, $db, $user, $phpbb_root_path, $phpEx;
-
- $method = trim($config['auth_method']);
-
- if (file_exists($phpbb_root_path . 'includes/auth/auth_' . $method . '.' . $phpEx))
- {
- include_once($phpbb_root_path . 'includes/auth/auth_' . $method . '.' . $phpEx);
-
- $method = 'login_' . $method;
- if (function_exists($method))
- {
- $login = $method($username, $password);
-
- // If login returned anything other than an array there was an error
- if (!is_array($login))
- {
- // TODO: Login Attempt++
- return $login;
- }
-
- return $user->session_create($login['user_id'], $admin, $autologin, $viewonline);
- }
- }
-
- trigger_error('Authentication method not found', E_USER_ERROR);
- }
-}
-
-?>
+?> \ No newline at end of file