From: Vincent Zanotti Date: Fri, 27 Jun 2008 21:16:19 +0000 (+0200) Subject: Merge commit 'origin/master' into hruid. X-Git-Tag: xorg/0.10.0~86^2~64 X-Git-Url: http://git.polytechnique.org/?a=commitdiff_plain;h=b8971a3ed64f3ba69becf1cd8f3b32ee2292026d;p=platal.git Merge commit 'origin/master' into hruid. Branch hruid is now broken -- will be repaired shortly. Conflicts: classes/session.php classes/xnetsession.php include/user.func.inc.php include/xorg/session.inc.php modules/profile.php Signed-off-by: Vincent Zanotti --- b8971a3ed64f3ba69becf1cd8f3b32ee2292026d diff --cc include/user.func.inc.php index 438630c,1f8a698..6e4edae --- a/include/user.func.inc.php +++ b/include/user.func.inc.php @@@ -97,61 -96,35 +96,61 @@@ function _silent_user_callback($login return; } +// Returns an unique identifier corresponding to the @p data. This piece of data +// can be a numerical id, an hruid, an email alias (any), or a redirection +// email address. If @p get_forlife is set to true, the user's forlife is +// returned, otherwise the user's hruid is returned. +// When no user is found, calls @p callback, and eventually returns false. function get_user_login($data, $get_forlife = false, $callback = '_default_user_callback') { - global $globals, $page; + global $globals; + // In order to reduce the code size & complexity, we define once for all the + // field to be returned. By convention if will be "u.hruid" for the hruid + // (thus implying the auth_user_md5 will be aliased on u), and "a.alias" for + // the forlife (thus implying the forlife aliases table will be aliased on a). + $field = ($get_forlife ? "CONCAT(a.alias, '@" . $globals->mail->domain . "')" : "u.hruid"); + + // If $data is an integer, fetches directly the result. if (is_numeric($data)) { - $res = XDB::query("SELECT alias FROM aliases WHERE type='a_vie' AND id={?}", $data); + $res = XDB::query("SELECT $field + FROM auth_user_md5 AS u + LEFT JOIN aliases AS a ON (a.id = u.user_id AND type = 'a_vie') + WHERE u.user_id = {?}", $data); if ($res->numRows()) { return $res->fetchOneCell(); - } else { - call_user_func($callback, $data); - return false; } + + call_user_func($callback, $data); + return false; } - $data = trim(strtolower($data)); + // Checks whether $data is a valid hruid or not. + $res = XDB::query("SELECT $field + FROM auth_user_md5 AS u + LEFT JOIN aliases AS a ON (a.id = u.user_id AND a.type = 'a_vie') + WHERE u.hruid = {?}", $data); + if ($res->numRows()) { + return $res->fetchOneCell(); + } + // From now, $data can only by an email alias, or an email redirection. + // If it doesn't look like a valid address, appends the plat/al's main domain. + $data = trim(strtolower($data)); if (strstr($data, '@')===false) { - $data = $data.'@'.$globals->mail->domain; + $data = $data . '@' . $globals->mail->domain; } + // Checks if $data is a valid alias on the main domains. list($mbox, $fqdn) = explode('@', $data); if ($fqdn == $globals->mail->domain || $fqdn == $globals->mail->domain2) { - - $res = XDB::query("SELECT a.alias - FROM aliases AS a - INNER JOIN aliases AS b ON (a.id = b.id AND b.type IN ('alias', 'a_vie') AND b.alias={?}) - WHERE a.type = 'a_vie'", $mbox); + $res = XDB::query("SELECT $field + FROM auth_user_md5 AS u + INNER JOIN aliases AS a ON (a.id = u.user_id AND a.type = 'a_vie') + INNER JOIN aliases AS b ON (b.id = u.user_id AND b.type IN ('alias', 'a_vie')) + WHERE b.alias = {?}", $mbox); if ($res->numRows()) { - return $get_forlife ? $res->fetchOneCell() : $mbox; + return $res->fetchOneCell(); } if (preg_match('/^(.*)\.([0-9]{4})$/u', $mbox, $matches)) { @@@ -173,52 -144,37 +172,52 @@@ $res = XDB::query("SELECT redirect FROM virtual_redirect INNER JOIN virtual USING(vid) - WHERE alias={?}", $mbox.'@'.$globals->mail->alias_dom); + WHERE alias = {?}", $mbox . '@' . $globals->mail->alias_dom); if ($redir = $res->fetchOneCell()) { - list($alias) = explode('@', $redir); - } else { - call_user_func($callback, $data); - $alias = false; - } - return $alias; - } else { - - $res = XDB::query("SELECT alias - FROM aliases AS a - INNER JOIN emails AS e ON e.uid=a.id - WHERE e.email={?} AND a.type='a_vie'", $data); - switch ($i = $res->numRows()) { - case 0: - call_user_func($callback, $data); - return false; + list($alias, $alias_fqdn) = explode('@', $redir); + if ($get_forlife) { + // It might happen that the "secondary" forlife alias (the one + // based on the secondary domaine name) is used as a target; we + // then need to canonicalize it to the main domain. + if ($alias_fqdn == $globals->mail->domain2) { + return $alias . "@" . $globals->mail->domain; + } + return $redir; + } - case 1: + // We now have a valid alias, which has to be translated to an hruid. + $res = XDB::query("SELECT u.hruid + FROM auth_user_md5 AS u + LEFT JOIN aliases AS a ON (a.id = u.user_id AND a.type IN ('alias', 'a_vie')) + WHERE a.alias = {?}", $alias); + if ($res->numRows()) { return $res->fetchOneCell(); + } + } - default: - if (S::has_perms()) { - $aliases = $res->fetchColumn(); - Platal::page()->trigError("Il y a $i utilisateurs avec cette adresse mail : ".join(', ', $aliases)); - } else { - $res->free(); - } + call_user_func($callback, $data); + return false; + + // Otherwise, we do suppose $data is an email redirection. + } else { + $res = XDB::query("SELECT $field + FROM auth_user_md5 AS u + LEFT JOIN aliases AS a ON (a.id = u.user_id AND a.type = 'a_vie') + LEFT JOIN emails AS e ON (e.uid = u.user_id) + WHERE e.email = {?}", $data); + if ($res->numRows() == 1) { + return $res->fetchOneCell(); + } else if ($res->numRows() > 0) { + if (S::has_perms()) { - $page->trigError("Il y a $user_count utilisateurs avec cette adresse mail : " . join(', ', $res->fetchColumn())); ++ Platal::page()->trigError("Il y a $user_count utilisateurs avec cette adresse mail : " . join(', ', $res->fetchColumn())); + } else { + $res->free(); + } + } else { + call_user_func($callback, $data); } + + return false; } return false; diff --cc modules/googleapps.php index 61fd0d6,d7871d6..ae15cd5 --- a/modules/googleapps.php +++ b/modules/googleapps.php @@@ -42,9 -42,9 +42,9 @@@ class GoogleAppsModule extends PLModul require_once("googleapps.inc.php"); $page->changeTpl('googleapps/index.tpl'); $page->addJsLink('motdepasse.js'); - $page->assign('xorg_title', 'Polytechnique.org - Compte Google Apps'); + $page->setTitle('Polytechnique.org - Compte Google Apps'); - $account = new GoogleAppsAccount(S::v('uid'), S::v('forlife')); + $account = new GoogleAppsAccount(S::user()); // Fills up the 'is Google Apps redirection active' variable. $page->assign('redirect_active', false); diff --cc modules/profile.php index 7c99b38,72a6ea0..e30eb8a --- a/modules/profile.php +++ b/modules/profile.php @@@ -213,7 -218,7 +214,7 @@@ class ProfileModule extends PLModul } if (S::logged()) { - $_SESSION['log']->log('view_profile', $login->login()); - S::logger()->log('view_profile', $login); ++ S::logger()->log('view_profile', $login->login()); } $title = $user['prenom'] . ' ' . ( empty($user['nom_usage']) ? $user['nom'] : $user['nom_usage'] );