r2669 - getUserIDByUsername(): new function
authorDenis Ovsienko <infrastation@yandex.ru>
Tue, 28 Apr 2009 12:40:41 +0000 (12:40 +0000)
committerDenis Ovsienko <infrastation@yandex.ru>
Tue, 28 Apr 2009 12:40:41 +0000 (12:40 +0000)
 - getUserInfo(): new function
 - getHashByID(): gone, replaced by getUserInfo()
 - getUsernameByID(): idem
 - removed useless globals
 - findAutoTagWarnings(): employ standard self-recursion pattern
 - require_valid_user is renamed to require_local_account
 - authenticate(): handle tags; speed up by loading necessary data only
 - authenticated_via_httpd(): phase out

inc/auth.php
inc/code.php
inc/database.php
inc/functions.php
inc/init.php
inc/interface.php
inc/ophandlers.php
inc/pagetitles.php
install.php
local/secret-sample.php
upgrade.php

index f23a972..3035624 100644 (file)
@@ -8,29 +8,22 @@ Authentication library for RackTables.
 // This function ensures that we don't continue without a legitimate
 // username and password (also make sure, that both are present, this
 // is especially useful for LDAP auth code to not deceive itself with
-// anonymous binding). It also initializes $remote_username and $accounts.
+// anonymous binding). It also initializes $remote_* and $*_tags vars.
 // Fatal errors are followed by exit (1) to aid in script debugging.
 function authenticate ()
 {
-       global $remote_username, $remote_displayname, $accounts, $user_auth_src, $require_valid_user, $script_mode;
-       if (!isset ($user_auth_src) or !isset ($require_valid_user))
+       global
+               $remote_username,
+               $remote_displayname,
+               $auto_tags,
+               $user_given_tags,
+               $user_auth_src,
+               $require_local_account;
+       if (!isset ($user_auth_src) or !isset ($require_local_account))
        {
-               showError ('secret.php misconfiguration: either user_auth_src or require_valid_user are missing', __FUNCTION__);
+               showError ('secret.php misconfiguration: either user_auth_src or require_local_account are missing', __FUNCTION__);
                exit (1);
        }
-       // This reindexing is necessary after switching to listCells(), which
-       // returns list indexed by id (while many other functions expect the
-       // user list to be indexed by username).
-       if (NULL === ($tmplist = listCells ('user')))
-       {
-               showError ('Failed to initialize access database.', __FUNCTION__);
-               exit (1);
-       }
-       $accounts = array();
-       foreach ($tmplist as $tmpval)
-               $accounts[$tmpval['user_name']] = $tmpval;
-       if (isset ($script_mode) and $script_mode === TRUE)
-               return;
        if (isset ($_REQUEST['logout']))
                dieWith401(); // Reset browser credentials cache.
        switch ($user_auth_src)
@@ -63,33 +56,33 @@ function authenticate ()
                        showError ('Invalid authentication source!', __FUNCTION__);
                        die;
        }
-       if ($require_valid_user and !isset ($accounts[$remote_username]))
-               dieWith401();
+       // Fallback value.
        $remote_displayname = $remote_username;
+       if (NULL !== ($remote_userid = getUserIDByUsername ($remote_username)))
+       {
+               $user_given_tags = loadEntityTags ('user', $remote_userid);
+               // Always set $remote_displayname, if a local account exists and has one.
+               // This can be overloaded from LDAP later though.
+               $userinfo = getUserInfo ($remote_userid);
+               if (!empty ($userinfo['user_realname']))
+                       $remote_displayname = $userinfo['user_realname'];
+       }
+       elseif ($require_local_account)
+               dieWith401();
+       $auto_tags = array_merge ($auto_tags, generateEntityAutoTags ('user', $remote_username));
        switch (TRUE)
        {
                // Just trust the server, because the password isn't known.
                case ('httpd' == $user_auth_src):
-                       if (authenticated_via_httpd ($remote_username))
-                               return;
-                       break;
+                       return;
                // When using LDAP, leave a mean to fix things. Admin user is always authenticated locally.
-               case ('database' == $user_auth_src or $accounts[$remote_username]['user_id'] == 1):
+               case ('database' == $user_auth_src or $remote_userid == 1):
                        if (authenticated_via_database ($remote_username, $_SERVER['PHP_AUTH_PW']))
-                       {
-                               if (!empty ($accounts[$remote_username]['user_realname']))
-                                       $remote_displayname = $accounts[$remote_username]['user_realname'];
                                return;
-                       }
                        break;
                case ('ldap' == $user_auth_src):
-                       // Call below also sets $remote_displayname.
                        if (authenticated_via_ldap ($remote_username, $_SERVER['PHP_AUTH_PW']))
-                       {
-                               if (!empty ($accounts[$remote_username]['user_realname']))
-                                       $remote_displayname = $accounts[$remote_username]['user_realname'];
                                return;
-                       }
                        break;
                default:
                        showError ('Invalid authentication source!', __FUNCTION__);
@@ -332,56 +325,16 @@ function queryLDAPServer ($username, $password)
 
 function authenticated_via_database ($username, $password)
 {
-       global $accounts;
-       if (!function_exists ('sha1'))
+       if (NULL === ($userid = getUserIDByUsername ($username))) // user not found
+               return FALSE;
+       if (NULL === ($userinfo = getUserInfo ($userid))) // user found, DB error
        {
-               showError ('Fatal error: PHP sha1() function is missing', __FUNCTION__);
+               showError ('Cannot load user data', __FUNCTION__);
                die();
        }
-       if (!isset ($accounts[$username]['user_password_hash']))
-               return FALSE;
-       if ($accounts[$username]['user_password_hash'] == sha1 ($password))
+       if ($userinfo['user_password_hash'] == sha1 ($password))
                return TRUE;
        return FALSE;
 }
 
-function authenticated_via_httpd ($username)
-{
-       // Reaching here means, that .htaccess authentication passed.
-       // Let's make sure, that user exists in the database, and give clearance.
-       global $accounts;
-       return isset ($accounts[$username]);
-}
-
-// This function returns password hash for given user ID.
-function getHashByID ($user_id = 0)
-{
-       if ($user_id <= 0)
-       {
-               showError ('Invalid user_id', __FUNCTION__);
-               return NULL;
-       }
-       global $accounts;
-       foreach ($accounts as $account)
-               if ($account['user_id'] == $user_id)
-                       return $account['user_password_hash'];
-       return NULL;
-}
-
-// Likewise.
-function getUsernameByID ($user_id = 0)
-{
-       if ($user_id <= 0)
-       {
-               showError ('Invalid user_id', __FUNCTION__);
-               return NULL;
-       }
-       global $accounts;
-       foreach ($accounts as $account)
-               if ($account['user_id'] == $user_id)
-                       return $account['user_name'];
-       showError ("User with ID '${user_id}' not found!");
-       return NULL;
-}
-
 ?>
index 5953d49..30fba1a 100644 (file)
@@ -1057,6 +1057,7 @@ function getRackCodeWarnings ()
 // Scan the given expression and return any issues found about its autotags.
 function findAutoTagWarnings ($expr)
 {
+       $self = __FUNCTION__;
        switch ($expr['type'])
        {
                case 'LEX_BOOLCONST':
@@ -1097,15 +1098,17 @@ function findAutoTagWarnings ($expr)
                                                'text' => "User account with ID '${recid}' does not exist."
                                        ));
                                case (mb_ereg_match ('^\$username_', $expr['load'])):
-                                       global $accounts;
                                        $recid = mb_ereg_replace ('^\$username_', '', $expr['load']);
-                                       if (isset ($accounts[$recid]))
+                                       global $require_local_account;
+                                       if (!$require_local_account)
+                                               return array();
+                                       if (NULL !== getUserIDByUsername ($recid))
                                                return array();
                                        return array (array
                                        (
                                                'header' => refRCLineno ($expr['lineno']),
                                                'class' => 'warning',
-                                               'text' => "User account with name '${recid}' does not exist."
+                                               'text' => "Local user account '${recid}' does not exist."
                                        ));
                                case (mb_ereg_match ('^\$page_[[:alpha:]]+$', $expr['load'])):
                                case (mb_ereg_match ('^\$tab_[[:alpha:]]+$', $expr['load'])):
@@ -1133,12 +1136,12 @@ function findAutoTagWarnings ($expr)
                                        ));
                        }
                case 'SYNT_NOTEXPR':
-                       return findAutoTagWarnings ($expr['load']);
+                       return $self ($expr['load']);
                case 'SYNT_BOOLOP':
                        return array_merge
                        (
-                               findAutoTagWarnings ($expr['left']),
-                               findAutoTagWarnings ($expr['right'])
+                               $self ($expr['left']),
+                               $self ($expr['right'])
                        );
                default:
                        return array (array
index 3b044e2..a5b87df 100644 (file)
@@ -3707,10 +3707,8 @@ function getFileLinks ($file_id = 0)
                        case 'user':
                                $page = 'user';
                                $id_name = 'user_id';
-                               global $accounts;
-                               foreach ($accounts as $account)
-                                       if ($account['user_id'] == $row['entity_id'])
-                                               $name = $account['user_name'];
+                               $userinfo = getUserInfo ($row['entity_id']);
+                               $name = $userinfo['user_name'];
                                break;
                }
 
@@ -3947,4 +3945,30 @@ function discardLDAPCache ()
        $dbxlink->exec ('TRUNCATE TABLE LDAPCache');
 }
 
+function getUserIDByUsername ($username)
+{
+       $query = "select user_id from UserAccount where user_name = '${username}'";
+       if (($result = useSelectBlade ($query, __FUNCTION__)) == NULL) 
+       {
+               showError ('SQL query failed', __FUNCTION__);
+               die;
+       }
+       if ($row = $result->fetch (PDO::FETCH_ASSOC))
+               return $row['user_id'];
+       return NULL;
+}
+
+function getUserInfo ($user_id)
+{
+       $query = "select 'user' as realm, user_id, user_name, user_password_hash, user_realname from UserAccount where user_id = ${user_id}";
+       if (($result = useSelectBlade ($query, __FUNCTION__)) == NULL)
+       {
+               showError ('SQL query failed', __FUNCTION__);
+               die;
+       }
+       if ($row = $result->fetch (PDO::FETCH_ASSOC))
+               return $row;
+       return NULL;
+}
+
 ?>
index bcd8160..3f8bb71 100644 (file)
@@ -1023,10 +1023,11 @@ function generateEntityAutoTags ($entity_realm = '', $bypass_value = '')
                        $ret[] = array ('tag' => '$any_rsp');
                        break;
                case 'user':
-                       global $accounts;
+                       // {$username_XXX} autotag is generated always, but {$userid_XXX}
+                       // appears only for accounts, which exist in local database.
                        $ret[] = array ('tag' => '$username_' . $bypass_value);
-                       if (isset ($accounts[$bypass_value]['user_id']))
-                               $ret[] = array ('tag' => '$userid_' . $accounts[$bypass_value]['user_id']);
+                       if (NULL !== ($userid = getUserIDByUsername ($bypass_value)))
+                               $ret[] = array ('tag' => '$userid_' . $userid);
                        break;
                case 'file':
                        $ret[] = array ('tag' => '$fileid_' . $bypass_value);
index 6b8580b..d33ab90 100644 (file)
@@ -144,14 +144,17 @@ sortTree ($tagtree, 'taginfoCmp');
 
 require_once 'inc/auth.php';
 $auto_tags = array();
-authenticate(); // sometimes this generates autotags, but never --- given tags
-// Authentication passed.
-// Note that we don't perform autorization here, so each 1st level page
-// has to do it in its way, e.g. by calling authorize() after fixContext().
+// Initial chain for the current user.
+$user_given_tags = array();
 
 if (!isset ($script_mode) or $script_mode !== TRUE)
+{
+       authenticate(); // this call always generates autotags and somethimes --- given tags
+       // Authentication passed.
+       // Note that we don't perform autorization here, so each 1st level page
+       // has to do it in its way, e.g. by calling authorize() after fixContext().
        session_start();
-
+}
 
 $pageno = (isset ($_REQUEST['page'])) ? $_REQUEST['page'] : 'index';
 // Special handling of tab number to substitute the "last" index where applicable.
@@ -195,13 +198,5 @@ $expl_tags = array();
 $impl_tags = array();
 // Initial chain for the current target.
 $target_given_tags = array();
-// Initial chain for the current user.
-$user_given_tags = array();
-if (!isset ($script_mode) or $script_mode !== TRUE)
-{
-       $auto_tags = array_merge ($auto_tags, generateEntityAutoTags ('user', $remote_username));
-       if (isset ($accounts[$remote_username]))
-               $user_given_tags = loadEntityTags ('user', $accounts[$remote_username]['user_id']);
-}
 
 ?>
index 4dea156..0335ad9 100644 (file)
@@ -224,7 +224,6 @@ $rtwidth = array
 // Main menu.
 function renderIndex ()
 {
-       global $root;
 ?>
 <table border=0 cellpadding=0 cellspacing=0 width='100%'>
        <tr>
@@ -331,7 +330,6 @@ function renderRackspaceRowEditor ()
                printImageHREF ('create', 'Add new row', TRUE, 101);
                echo "</td></tr></form>";
        }
-       global $pageno, $tabno;
        showMessageOrError();
        startPortlet ('Rows');
        echo "<table border=0 cellspacing=0 cellpadding=5 align=center class=widetable>\n";
@@ -452,7 +450,6 @@ function renderRack ($rack_id = 0, $hl_obj_id = 0)
                showError ('getRackData() failed', __FUNCTION__);
                return;
        }
-       global $pageno, $tabno;
        markAllSpans ($rackData);
        if ($hl_obj_id > 0)
                highlightObject ($rackData, $hl_obj_id);
@@ -758,7 +755,6 @@ function renderGridForm ($rack_id = 0, $filter, $header, $submit, $state1, $stat
                return;
        }
        showMessageOrError();
-       global $pageno, $tabno;
        $filter ($rackData);
        markupObjectProblems ($rackData);
 
@@ -1142,7 +1138,6 @@ function renderPortsForObject ($object_id = 0)
                printImageHREF ('add', 'add a port', TRUE, 104);
                echo "</td></tr></form>";
        }
-       global $pageno, $tabno;
        if ($object_id <= 0)
        {
                showError ('Invalid object_id', __FUNCTION__);
@@ -1257,7 +1252,7 @@ function renderIPv4ForObject ($object_id = 0)
                printImageHREF ('add', 'allocate', TRUE, 103);
                echo "</td></tr></form>";
        }
-       global $pageno, $tabno, $aat;
+       global $aat;
        if ($object_id <= 0)
        {
                showError ('Invalid object_id', __FUNCTION__);
@@ -1453,7 +1448,7 @@ function printLog ($log)
                                100 => array ('code' => 'error', 'format' => '%s'),
                                101 => array ('code' => 'error', 'format' => 'Port name cannot be empty'),
                                102 => array ('code' => 'error', 'format' => "Error creating user account '%s'"),
-                               103 => array ('code' => 'error', 'format' => 'getHashByID() failed'),
+                               103 => array ('code' => 'error', 'format' => 'User not found!'),
                                104 => array ('code' => 'error', 'format' => "Error updating user account '%s'"),
 // ...
 // ...
@@ -1671,11 +1666,8 @@ function renderRackSpaceForObject ($object_id = 0)
        unset ($rackData);
 
        // This is the time for rendering.
-       global $pageno, $tabno;
-
        showMessageOrError();
 
-
        // Main layout starts.
        echo "<table border=0 class=objectview cellspacing=0 cellpadding=0><tr>";
 
@@ -1881,7 +1873,7 @@ function renderObjectSpace ()
 
 function renderObjectGroup ()
 {
-       global $pageno, $tabno, $nextorder, $taglist, $tagtree;
+       global $pageno, $nextorder, $taglist, $tagtree;
        showMessageOrError();
        assertUIntArg ('group_id', __FUNCTION__, TRUE);
        $group_id = $_REQUEST['group_id'];
@@ -2272,7 +2264,6 @@ function renderIPv4SLB ()
 
 function renderIPv4SpaceEditor ()
 {
-       global $pageno, $tabno;
        showMessageOrError();
 
        // IPv4 validator
@@ -2763,7 +2754,7 @@ function renderIPv4AddressAllocations ($dottedquad)
                printImageHREF ('add', 'allocate', TRUE, 103);
                echo "</td></form></tr>";
        }
-       global $pageno, $tabno, $aat;
+       global $aat;
 
        $address = getIPv4Address ($dottedquad);
 
@@ -2800,7 +2791,6 @@ function renderIPv4AddressAllocations ($dottedquad)
 
 function renderNATv4ForObject ($object_id = 0)
 {
-       global $root;
        function printNewItemTR ($alloclist)
        {
                printOpFormIntro ('addNATv4Rule');
@@ -2828,7 +2818,6 @@ function renderNATv4ForObject ($object_id = 0)
                printImageHREF ('add', 'Add new NAT rule', TRUE, 6);
                echo "</td></tr></form>";
        }
-       global $pageno, $tabno;
        
        $info = getObjectInfo ($object_id);
        $forwards = getNATv4ForObject ($object_id);
@@ -3344,8 +3333,8 @@ function renderUserListEditor ()
                printImageHREF ('create', 'Add new account', TRUE, 103);
                echo "</td></tr></form>";
        }
-       global $root, $pageno, $tabno, $accounts;
-       startPortlet ('User accounts');
+       $accounts = listCells ('user');
+       startPortlet ('User accounts (' . count ($accounts) . ')');
        showMessageOrError();
        echo "<table cellspacing=0 cellpadding=5 align=center class=widetable>\n";
        echo "<tr><th>Username</th><th>Real name</th><th>Password</th><th>&nbsp;</th></tr>\n";
@@ -3378,7 +3367,7 @@ function renderPortMapEditor ()
 
 function renderPortMap ($editable = FALSE)
 {
-       global $nextorder, $pageno, $tabno;
+       global $nextorder;
        showMessageOrError();
        startPortlet ("Port compatibility map");
        $ptlist = getPortTypes();
@@ -3506,7 +3495,7 @@ function renderChapter ($tgt_chapter_no)
 
 function renderChapterEditor ($tgt_chapter_no)
 {
-       global $pageno, $tabno, $nextorder;
+       global $nextorder;
        function printNewItemTR ()
        {
                printOpFormIntro ('add');
@@ -3578,7 +3567,6 @@ function renderChaptersEditor ()
                printImageHREF ('create', 'Add new', TRUE, 101);
                echo '</td></tr></form>';
        }
-       global $pageno, $tabno;
        showMessageOrError();
        $dict = getDict();
        foreach (array_keys ($dict) as $chapter_no)
@@ -3669,7 +3657,6 @@ function renderEditAttributesForm ()
                printImageHREF ('add', 'Create attribute', TRUE, 102);
                echo '</td></tr></form>';
        }
-       global $pageno, $tabno;
        $attrMap = getAttrMap();
        showMessageOrError();
        startPortlet ('Optional attributes');
@@ -3724,7 +3711,6 @@ function renderEditAttrMapForm ()
                echo '</td></tr>';
                echo '</form>';
        }
-       global $pageno, $tabno;
        $attrMap = getAttrMap();
        showMessageOrError();
        startPortlet ('Attribute map');
@@ -4256,7 +4242,7 @@ function renderProgressBar ($percentage = 0, $theme = '')
 
 function renderRSPoolServerForm ($pool_id = 0)
 {
-       global $pageno, $tabno, $nextorder;
+       global $nextorder;
        if ($pool_id <= 0)
        {
                showError ('Invalid pool_id', __FUNCTION__);
@@ -4335,7 +4321,7 @@ function renderRSPoolServerForm ($pool_id = 0)
 
 function renderRSPoolLBForm ($pool_id = 0)
 {
-       global $pageno, $tabno, $nextorder;
+       global $nextorder;
        showMessageOrError();
 
        $poolInfo = getRSPoolInfo ($pool_id);
@@ -4387,7 +4373,7 @@ function renderRSPoolLBForm ($pool_id = 0)
 
 function renderVServiceLBForm ($vs_id = 0)
 {
-       global $pageno, $tabno, $nextorder;
+       global $nextorder;
        showMessageOrError();
        $vsinfo = getVServiceInfo ($vs_id);
 
@@ -4517,7 +4503,7 @@ function renderRSPool ($pool_id = 0)
 
 function renderVSList ()
 {
-       global $pageno, $nextorder;
+       global $nextorder;
        $tagfilter = getTagFilter();
        $vslist = getVSList ($tagfilter, getTFMode());
        echo "<table border=0 class=objectview>\n";
@@ -4545,7 +4531,7 @@ function renderVSList ()
 
 function renderVSListEditForm ()
 {
-       global $pageno, $tabno, $nextorder;
+       global $nextorder;
        showMessageOrError();
        $protocols = array ('TCP' => 'TCP', 'UDP' => 'UDP');
 
@@ -4649,7 +4635,7 @@ function renderRSPoolList ()
 
 function editRSPools ()
 {
-       global $pageno, $tabno, $nextorder;
+       global $nextorder;
        showMessageOrError();
 
        startPortlet ('Add new');
@@ -4945,7 +4931,7 @@ function renderTagRowForCloud ($taginfo, $realm, $level = 0)
 function renderTagRowForEditor ($taginfo, $level = 0)
 {
        $self = __FUNCTION__;
-       global $pageno, $tabno, $taglist;
+       global $taglist;
        if (!count ($taginfo['kids']))
                $level++; // Idem
        echo "<tr><td align=left style='padding-left: " . ($level * 16) . "px;'>";
@@ -5249,7 +5235,7 @@ function renderTagRollerForRow ($row_id)
 
 function renderObjectSLB ($object_id)
 {
-       global $pageno, $tabno, $nextorder;
+       global $nextorder;
        showMessageOrError();
        $vs_list = $rsplist = array();
        foreach (getVSList() as $vsid => $vsinfo)
@@ -5420,13 +5406,13 @@ ENDJAVASCRIPT;
 
 function renderUser ($user_id)
 {
-       global $accounts, $target_given_tags;
-       $username = getUsernameByID ($user_id);
+       global $target_given_tags;
+       $userinfo = getUserInfo ($user_id);
 
        startPortlet ('summary');
        echo '<table border=0 align=center>';
-       echo "<tr><th class=tdright>Account name:</th><td class=tdleft>${username}</td></tr>";
-       echo '<tr><th class=tdright>Real name:</th><td class=tdleft>' . $accounts[$username]['user_realname'] . '</td></tr>';
+       echo "<tr><th class=tdright>Account name:</th><td class=tdleft>${userinfo['user_name']}</td></tr>";
+       echo '<tr><th class=tdright>Real name:</th><td class=tdleft>' . $userinfo['user_realname'] . '</td></tr>';
        // Using printTagTRs() is inappropriate here, because autotags will be filled with current user's
        // data, not the viewed one. Another special reason is that the displayed user's given tags are in
        // the "target" chain.
@@ -5442,7 +5428,7 @@ function renderUser ($user_id)
                echo "<tr><th width='50%' class=tagchain>Given implicit tags:</th><td class=tagchain>";
                echo serializeTags ($target_shadow, $baseurl) . "</td></tr>\n";
        }
-       $target_auto_tags = generateEntityAutoTags ('user', $username);
+       $target_auto_tags = generateEntityAutoTags ('user', $userinfo['user_name']);
        if (getConfigVar ('SHOW_AUTOMATIC_TAGS') == 'yes' and count ($target_auto_tags))
        {
                echo "<tr><th width='50%' class=tagchain>Automatic tags:</th><td class=tagchain>";
@@ -5506,10 +5492,10 @@ function renderAccessDenied ()
 
 function renderMyAccount ()
 {
-       global $remote_username, $accounts;
+       global $remote_username, $remote_displayname;
        echo "<table border=0 class=objectview cellspacing=0 cellpadding=0 width='50%'>";
        echo "<tr><td colspan=2 align=center><h1>${remote_username}</h1></td></tr>\n";
-       echo "<tr><td colspan=2 align=center><h2>" . $accounts[$remote_username]['user_realname'] . "</h2></td></tr>\n";
+       echo "<tr><td colspan=2 align=center><h2>${remote_displayname}</h2></td></tr>\n";
        echo "</table>";
 }
 
@@ -5560,18 +5546,16 @@ function renderFile ($file_id = 0)
        {
                startPortlet ('Links (' . count ($links) . ')');
                echo "<table cellspacing=0 cellpadding='5' align='center' class='widetable'>\n";
-               global $accounts;
                foreach ($links as $link)
                {
                        echo '<tr><td class=tdleft>';
                        switch ($link['entity_type'])
                        {
                                case 'user':
-                                       $username = getUsernameByID ($link['entity_id']);
-                                       if (NULL === $username or !isset ($accounts[$username]))
+                                       if (NULL === ($userinfo = getUserInfo ($link['entity_id'])))
                                                echo "Internal error: user id ${link['entity_id']} not found";
                                        else
-                                               renderCell ($accounts[$username]);
+                                               renderCell ($userinfo);
                                        break;
                                case 'ipv4net':
                                        renderIPv4NetCell (getIPv4NetworkInfo ($link['entity_id']));
@@ -5613,7 +5597,6 @@ function renderFileReuploader ()
 
 function renderFileProperties ($file_id = 0)
 {
-       global $root;
        $file = getFileInfo ($file_id);
        if ($file === NULL)
        {
@@ -5642,7 +5625,7 @@ function renderFileBrowser ()
 // Like renderFileBrowser(), but with the option to delete files
 function renderFileManager ()
 {
-       global $pageno, $tabno, $nextorder, $root;
+       global $nextorder;
        showMessageOrError();
 
        // Used for uploading a parentless file
@@ -5694,7 +5677,6 @@ function renderFileManager ()
 
 function renderFilesPortlet ($entity_type = NULL, $entity_id = 0)
 {
-       global $root;
        if ($entity_type == NULL || $entity_id <= 0)
        {
                showError ('Invalid entity info', __FUNCTION__);
@@ -5815,7 +5797,6 @@ function niftyString ($string, $maxlen = 30)
 // Iterate over what findRouters() returned and output some text suitable for a TD element.
 function printRoutersTD ($rlist)
 {
-       global $root;
        $rtrclass = 'tdleft';
        foreach ($rlist as $rtr)
        {
index ae470eb..8511205 100644 (file)
@@ -472,11 +472,10 @@ function updateUser ()
        assertStringArg ('password', __FUNCTION__);
        $username = $_REQUEST['username'];
        $new_password = $_REQUEST['password'];
-       $old_hash = getHashByID ($_REQUEST['user_id']);
-       if ($old_hash == NULL)
+       if (NULL == ($userinfo = getUserInfo ($_REQUEST['user_id'])))
                return buildRedirectURL (__FUNCTION__, 'ERR1');
        // Update user password only if provided password is not the same as current password hash.
-       if ($new_password != $old_hash)
+       if ($new_password != $userinfo['user_password_hash'])
                $new_password = sha1 ($new_password);
        $result = commitUpdateUserAccount ($_REQUEST['user_id'], $username, $_REQUEST['realname'], $new_password);
        if ($result == TRUE)
@@ -1367,17 +1366,19 @@ function rollTags ()
 
 function changeMyPassword ()
 {
-       global $accounts, $remote_username, $user_auth_src;
+       global $remote_username, $user_auth_src;
        if ($user_auth_src != 'database')
                return buildRedirectURL (__FUNCTION__, 'ERR1');
        assertStringArg ('oldpassword', __FUNCTION__);
        assertStringArg ('newpassword1', __FUNCTION__);
        assertStringArg ('newpassword2', __FUNCTION__);
-       if ($accounts[$remote_username]['user_password_hash'] != sha1 ($_REQUEST['oldpassword']))
+       $remote_userid = getUserIDByUsername ($remote_username);
+       $userinfo = getUserInfo ($remote_userid);
+       if ($userinfo['user_password_hash'] != sha1 ($_REQUEST['oldpassword']))
                return buildRedirectURL (__FUNCTION__, 'ERR2');
        if ($_REQUEST['newpassword1'] != $_REQUEST['newpassword2'])
                return buildRedirectURL (__FUNCTION__, 'ERR3');
-       if (commitUpdateUserAccount ($accounts[$remote_username]['user_id'], $accounts[$remote_username]['user_name'], $accounts[$remote_username]['user_realname'], sha1 ($_REQUEST['newpassword1'])))
+       if (commitUpdateUserAccount ($remote_userid, $userinfo['user_name'], $userinfo['user_realname'], sha1 ($_REQUEST['newpassword1'])))
                return buildRedirectURL (__FUNCTION__, 'OK');
        else
                return buildRedirectURL (__FUNCTION__, 'ERR4');
index ac0c7ae..882bb74 100644 (file)
@@ -186,10 +186,10 @@ function dynamic_title_objgroup ()
 
 function dynamic_title_user ()
 {
-       global $accounts;
+       $userinfo = getUserInfo ($_REQUEST['user_id']);
        return array
        (
-               'name' => "Local user '" . $accounts[getUsernameByID ($_REQUEST['user_id'])]['user_name'] . "'",
+               'name' => "Local user '" . $userinfo['user_name'] . "'",
                'params' => array ('user_id' => $_REQUEST['user_id'])
        );
 }
index b6e55fc..d856f7f 100644 (file)
@@ -238,7 +238,7 @@ function init_config ()
        fwrite ($conf, "\$db_password = '" . $_REQUEST['mysql_password'] . "';\n\n");
        fwrite ($conf, "// More info http://racktables.org/trac/wiki/RackTablesUserAuthentication\n");
        fwrite ($conf, "\$user_auth_src = 'database';\n");
-       fwrite ($conf, "\$require_valid_user = TRUE;\n\n");
+       fwrite ($conf, "\$require_local_account = TRUE;\n\n");
        fwrite ($conf, "// This is only necessary for 'ldap' authentication source\n");
        fwrite ($conf, "\$ldap_server = 'some.server';\n");
        fwrite ($conf, "\$ldap_domain = 'some.domain';\n\n");
index 1605228..d5c7708 100644 (file)
@@ -11,7 +11,7 @@ $db_password = 'password';
 
 // More info: http://racktables.org/trac/wiki/RackTablesUserAuthentication
 $user_auth_src = 'database';
-$require_valid_user = TRUE;
+$require_local_account = TRUE;
 
 // This is only necessary for 'ldap' authentication source
 $LDAP_options = array
index 65e28ed..5fea4ce 100644 (file)
@@ -4,14 +4,14 @@ $relnotes = array
 (
        '0.17.0' => "This release requires changes to the configuration file. " .
                "Move inc/secret.php to local/secret.php and add the following to the file:<br><br>" .
-               "\$user_auth_src = 'database';<br>\$require_valid_user = TRUE;<br><br>" .
+               "\$user_auth_src = 'database';<br>\$require_local_account = TRUE;<br><br>" .
                "(and adjust to your needs, if necessary)<br>" .
                "Another change is the addition of support for file uploads.  Files are stored<br>" .
                "in the database.  There are several settings in php.ini which you may need to modify:<br>" .
                "<ul><li>file_uploads        - needs to be On</li>" .
                "<li>upload_max_filesize - max size for uploaded files</li>" .
                "<li>post_max_size       - max size of all form data submitted via POST (including files)</li></ul><br>" .
-               "User accounts used to have 'enabled' flag, which allowed individual blocking and<br>" .
+               "Local user accounts used to have 'enabled' flag, which allowed individual blocking and<br>" .
                "unblocking of each. This flag was dropped in favor of existing mean of access<br>" .
                "setup (RackCode). An unconditional denying rule is automatically added into RackCode<br>" .
                "for such blocked account, so the effective security policy remains the same.<br>",