From 08ea197e941a86a6fce37b5e657d2b359bb7028d Mon Sep 17 00:00:00 2001
From: "Pierre Habouzit (MadCoder"
Date: Sun, 12 Dec 2004 19:28:12 +0000
Subject: [PATCH] refactor code. get_user_login takes an uid, any alias, or any
email address and gives one valid alias or false
git-archimport-id: opensource@polytechnique.org--2005/platal--mainline--0.9--patch-69
---
.../TESTS/{xorg_errors.inc.php => xorg_errors.php} | 0
htdocs/TESTS/xorg_user.php | 53 +++++++++++++++
htdocs/admin/utilisateurs.php | 71 +++++---------------
include/user.func.inc.php | 77 ++++++++++++++++++++++
templates/alias.tpl | 6 +-
5 files changed, 149 insertions(+), 58 deletions(-)
rename htdocs/TESTS/{xorg_errors.inc.php => xorg_errors.php} (100%)
create mode 100644 htdocs/TESTS/xorg_user.php
diff --git a/htdocs/TESTS/xorg_errors.inc.php b/htdocs/TESTS/xorg_errors.php
similarity index 100%
rename from htdocs/TESTS/xorg_errors.inc.php
rename to htdocs/TESTS/xorg_errors.php
diff --git a/htdocs/TESTS/xorg_user.php b/htdocs/TESTS/xorg_user.php
new file mode 100644
index 0000000..1470e65
--- /dev/null
+++ b/htdocs/TESTS/xorg_user.php
@@ -0,0 +1,53 @@
+UnitTestCase('XOrg Users Test');
+ }
+
+ function test_get_user_login() {
+ global $page;
+
+ $login = get_user_login(18742);
+ $this->assertIdentical($login, 'pierre.habouzit.2000');
+
+ $login = get_user_login(100000000);
+ $this->assertIdentical($login, false);
+
+
+ $login = get_user_login("madcoder@melix.org");
+ $this->assertIdentical($login, 'pierre.habouzit.2000');
+
+ $login = get_user_login("madcoder@melix.net");
+ $this->assertIdentical($login, 'pierre.habouzit.2000');
+
+
+ $login = get_user_login("madcoder@polytechnique.org");
+ $this->assertIdentical($login, 'madcoder');
+
+ $login = get_user_login("madcoder@m4x.org");
+ $this->assertIdentical($login, 'madcoder');
+
+
+ $login = get_user_login("pierre.habouzit.2000");
+ $this->assertIdentical($login, 'pierre.habouzit.2000');
+
+ $login = get_user_login("pierre.habouzit.2001");
+ $this->assertIdentical($login, false);
+
+
+ $login = get_user_login("madcoder@olympe.madism.org");
+ $this->assertIdentical($login, 'pierre.habouzit.2000');
+
+ unset($page);
+ }
+}
+
+$test = &new TestOfXOrgUsers();
+$test->run(new HtmlReporter());
+?>
diff --git a/htdocs/admin/utilisateurs.php b/htdocs/admin/utilisateurs.php
index 39c4e97..b192439 100644
--- a/htdocs/admin/utilisateurs.php
+++ b/htdocs/admin/utilisateurs.php
@@ -22,6 +22,7 @@
require_once("xorg.inc.php");
new_admin_page('admin/utilisateurs.tpl');
require_once("emails.inc.php");
+require_once("user.func.inc.php");
/*
* Already in SUID ?
@@ -31,23 +32,26 @@ if (isset($_SESSION['suid'])) {
$page->kill("déjà en SUID !!!");
}
+$login = isset($_REQUEST['login']) ? get_user_login($_REQUEST['login']) : false;
+
+
/*
* LOGS de l'utilisateur
*/
-if(isset($_REQUEST['logs_button'])) {
- header("Location: logger.php?loguser={$_REQUEST['login']}&year=".date('Y')."&month=".date('m'));
+if(isset($_REQUEST['logs_button']) && $login) {
+ header("Location: logger.php?loguser=$login&year=".date('Y')."&month=".date('m'));
}
/*
* SUID
*/
-if(isset($_REQUEST['suid_button']) and isset($_REQUEST['login']) and !isset($_SESSION['suid'])) {
- $log_data = $_REQUEST['login']." by ".$_SESSION['forlife'];
+if(isset($_REQUEST['suid_button']) and $login and !isset($_SESSION['suid'])) {
+ $log_data = "login by ".$_SESSION['forlife'];
$_SESSION['log']->log("suid_start",$log_data);
$_SESSION['suid'] = $_SESSION;
- $r=$globals->db->query("SELECT id FROM aliases WHERE alias='{$_REQUEST['login']}'");
+ $r=$globals->db->query("SELECT id FROM aliases WHERE alias='$login'");
if(list($uid) = mysql_fetch_row($r)) {
start_connexion($uid,true);
header("Location: ../");
@@ -60,57 +64,16 @@ if(isset($_REQUEST['suid_button']) and isset($_REQUEST['login']) and !isset($_SE
* LE RESTE
*/
-if (!empty($_REQUEST['login'])) {
- $needle = strtolower($_REQUEST['login']);
-
- if (strstr($needle, '@')!==false) {
- list($mbox, $fqdn) = split('@', $needle);
- if ($fqdn=='polytechnique.org' || $fqdn=='m4x.org') {
- $login = $mbox;
- } elseif ($fqdn =='melix.net' || $fqdn=='melix.org') {
- $res = $globals->db->query("SELECT redirect
- FROM virtual_redirect
- INNER JOIN virtual USING(vid)
- WHERE alias='$mbox@melix.net'");
- if (list($redir) = mysql_fetch_row($res)) {
- list($login) = split('@', $redir);
- } else {
- $page->trig("il n'y a pas d'utilisateur avec cet alias melix");
- }
- mysql_free_result($res);
- } else {
- $res = $globals->db->query("SELECT alias
- FROM aliases AS a
- INNER JOIN emails AS e ON e.uid=a.id
- WHERE e.email='$needle' AND a.type='a_vie'");
- if (($i=mysql_num_rows($res))!=1) {
- if ($i) {
- $aliases = Array();
- while (list($a) = mysql_fetch_row($res)) $aliases[] = $a;
- $page->trig("Il y a $i utilisateurs avec cette adresse mail : ".join(', ', $aliases));
- } else {
- $page->trig("il n'y a pas d'utilisateur avec cette adresse mail");
- }
- } else {
- list($login) = mysql_fetch_row($res);
- }
- mysql_free_result($res);
- }
+if ($login) {
+ $r=$globals->db->query("SELECT *
+ FROM auth_user_md5 AS u
+ INNER JOIN aliases AS a ON ( a.id = u.user_id AND a.alias='$login' AND type!='homonyme' )");
+ if ($tmp = mysql_fetch_assoc($r)) {
+ $mr =& $tmp;
} else {
- $login = $needle;
- }
-
- if (!empty($login)) {
- $r=$globals->db->query("SELECT *
- FROM auth_user_md5 AS u
- INNER JOIN aliases AS a ON ( a.id = u.user_id AND a.alias='$login' AND type!='homonyme' )");
- if ($tmp = mysql_fetch_assoc($r)) {
- $mr =& $tmp;
- } else {
- $page->trig("il n'y a pas d'utilisateur avec ce login (ou alors il a des homonymes)");
- }
- mysql_free_result($r);
+ $page->trig("il n'y a pas d'utilisateur avec ce login (ou alors il a des homonymes)");
}
+ mysql_free_result($r);
}
if (!empty($_REQUEST['user_id'])) {
diff --git a/include/user.func.inc.php b/include/user.func.inc.php
index e0879fc..aaea635 100644
--- a/include/user.func.inc.php
+++ b/include/user.func.inc.php
@@ -67,6 +67,83 @@ function user_clear_all_subs($user_id, $really_del=true)
}
// }}}
+// {{{ function get_user_login()
+function get_user_login($data) {
+ global $globals, $page;
+
+ if (preg_match(',^[0-9]*$,', $data)) {
+ $res = $globals->db->query("SELECT alias FROM aliases WHERE type='a_vie' AND id=$data");
+ if (!mysql_num_rows($res)) {
+ $alias = false;
+ } else {
+ list($alias) = mysql_fetch_row($res);
+ }
+ mysql_free_result($res);
+ return $alias;
+ }
+
+ $data = trim(strtolower($data));
+
+ if (strstr($data, '@')===false) {
+ $data = $data.'@'.$globals->mail->domain;
+ }
+
+ list($mbox, $fqdn) = split('@', $data);
+ if ($fqdn == $globals->mail->domain || $fqdn == $globals->mail->domain2) {
+
+ $res = $globals->db->query("SELECT COUNT(alias) FROM aliases WHERE alias='$mbox' AND type IN ('alias', 'a_vie')");
+ list($c) = mysql_fetch_row($res);
+ mysql_free_result($res);
+ if (!$c && $page) {
+ $page->trig("il n'y a pas d'utilisateur avec ce login");
+ }
+ return $c ? $mbox : false;
+
+ } elseif ($fqdn == $globals->mail->alias_dom || $fqdn == $globals->mail->alias_dom2) {
+
+ $res = $globals->db->query("SELECT redirect
+ FROM virtual_redirect
+ INNER JOIN virtual USING(vid)
+ WHERE alias='$mbox@{$globals->mail->alias_dom}'");
+ if (list($redir) = mysql_fetch_row($res)) {
+ list($alias) = split('@', $redir);
+ } else {
+ $page->trig("il n'y a pas d'utilisateur avec cet alias");
+ $alias = false;
+ }
+ mysql_free_result($res);
+ return $alias;
+
+ } else {
+
+ $res = $globals->db->query("SELECT alias
+ FROM aliases AS a
+ INNER JOIN emails AS e ON e.uid=a.id
+ WHERE e.email='$data' AND a.type='a_vie'");
+ switch ($i = mysql_num_rows($res)) {
+ case 0:
+ $page->trig("il n'y a pas d'utilisateur avec cette addresse mail");
+ $alias = false;
+ break;
+
+ case 1:
+ list($alias) = mysql_fetch_row($res);
+ break;
+
+ default:
+ $alias = false;
+ if (has_perms()) {
+ $aliases = Array();
+ while (list($a) = mysql_fetch_row($res)) $aliases[] = $a;
+ $page->trig("Il y a $i utilisateurs avec cette adresse mail : ".join(', ', $aliases));
+ }
+ }
+ mysql_free_result($res);
+ return $alias;
+ }
+}
+
+// }}}
// vim:set et sw=4 sts=4 sws=4 foldmethod=marker:
?>
diff --git a/templates/alias.tpl b/templates/alias.tpl
index e3fab2d..9d9893e 100644
--- a/templates/alias.tpl
+++ b/templates/alias.tpl
@@ -19,8 +19,8 @@
***************************************************************************}
+{dynamic}
{if $success}
- {dynamic}
a demande de création des alias {$success}@{#globals.mail.alias_dom#} et
{$success}@{#globals.mail.alias_dom2#} a bien été enregistrée. Après
@@ -29,7 +29,6 @@
Encore merci de nous faire confiance pour tes e-mails !
- {/dynamic}
{else}
Adresses e-mail personnalisées
@@ -45,7 +44,6 @@
sans doute à toutes tes questions
- {dynamic}
{if $actuel}
Note : tu as déjà l'alias {$actuel}, or tu ne peux avoir qu'un seul alias à la fois.
@@ -83,7 +81,7 @@
- {/dynamic}
{/if}
+{/dynamic}
{* vim:set et sw=2 sts=2 sws=2: *}
--
2.1.4