From: Stéphane Jacob Date: Sun, 27 Feb 2011 13:14:08 +0000 (+0100) Subject: Adapts bin scripts to new mail chain. X-Git-Tag: xorg/1.1.0~103 X-Git-Url: http://git.polytechnique.org/?a=commitdiff_plain;h=337a6acfd36f49749150b67aed97595cd291ad38;p=platal.git Adapts bin scripts to new mail chain. Signed-off-by: Stéphane Jacob --- diff --git a/bin/cron/checkdb.php b/bin/cron/checkdb.php index 999bf9c..120420b 100755 --- a/bin/cron/checkdb.php +++ b/bin/cron/checkdb.php @@ -105,42 +105,45 @@ if (PEAR::isError($opts)) { } /* Checks rewriting on deleted aliases. */ -check("SELECT a.alias, e.email, e.rewrite AS broken - FROM aliases AS a - INNER JOIN emails AS e ON (a.uid = e.uid AND rewrite != '') - LEFT JOIN aliases AS b ON (b.uid = a.uid AND rewrite LIKE CONCAT(b.alias, '@%') AND b.type != 'homonyme') - WHERE a.type = 'a_vie' AND b.type IS NULL", +check("SELECT s1.email, r.redirect, r.rewrite AS broken + FROM email_redirect_account AS r + INNER JOIN email_source_account AS s1 ON (r.uid = s1.uid AND s1.type = 'forlife') + LEFT JOIN email_source_account AS s2 ON (r.uid = s2.uid AND r.rewrite LIKE CONCAT(s2.email, '@%')) + WHERE r.rewrite != '' AND s2.uid IS NULL", "Personnes qui ont des rewrite sur un alias perdu."); /* Lists unsound emails that remain unprocessed by the administrators. */ -check("SELECT a1.alias, a2.alias, e1.email, e2.flags - FROM emails AS e1 - INNER JOIN emails AS e2 ON (e1.email = e2.email AND e1.uid != e2.uid AND - (e1.uid < e2.uid OR NOT FIND_IN_SET('active', e2.flags))) - INNER JOIN email_watch AS w ON (w.email = e1.email AND w.state = 'pending') - INNER JOIN aliases AS a1 ON (a1.uid = e1.uid AND a1.type = 'a_vie') - INNER JOIN aliases AS a2 ON (a2.uid = e2.uid AND a2.type = 'a_vie') - WHERE FIND_IN_SET('active', e1.flags) - ORDER BY a1.alias", +check("SELECT s1.email, s2.email, w.email + FROM email_watch AS w + INNER JOIN email_redirect_account AS r1 ON (w.email = r1.redirect) + LEFT JOIN email_redirect_account AS r2 ON (w.email = r2.redirect AND r1.uid != r2.uid) + INNER JOIN email_source_account AS s1 ON (s1.uid = r1.uid AND s1.type = 'forlife') + LEFT JOIN email_source_account AS s2 ON (s2.uid = r2.uid AND s2.type = 'forlife') + WHERE w.state = 'pending' + GROUP BY w.email + ORDER BY w.email", "Donne la liste des emails douteux actuellement non traites par les administrateurs."); /* Lists dangerous and unsound emails. */ -info("SELECT a1.alias, a2.alias, e1.email, e2.flags, w.state - FROM emails AS e1 - INNER JOIN emails AS e2 ON (e1.email = e2.email AND e1.uid != e2.uid AND - (e1.uid < e2.uid OR NOT FIND_IN_SET('active', e2.flags))) - INNER JOIN email_watch AS w ON (w.email = e1.email AND w.state != 'safe') - INNER JOIN aliases AS a1 ON (a1.uid = e1.uid AND a1.type = 'a_vie') - INNER JOIN aliases AS a2 ON (a2.uid = e2.uid AND a2.type = 'a_vie') - WHERE FIND_IN_SET('active', e1.flags) - ORDER BY a1.alias", +info("SELECT s1.email, s2.email, w.email, w.state + FROM email_watch AS w + INNER JOIN email_redirect_account AS r1 ON (w.email = r1.redirect) + LEFT JOIN email_redirect_account AS r2 ON (w.email = r2.redirect AND r1.uid != r2.uid) + INNER JOIN email_source_account AS s1 ON (s1.uid = r1.uid AND s1.type = 'forlife') + LEFT JOIN email_source_account AS s2 ON (s2.uid = r2.uid AND s2.type = 'forlife') + WHERE w.state != 'safe' + GROUP BY w.email + ORDER BY w.email", "Donne la liste des emails dangereux ou douteux."); /* Lists homonyms who have an alias equals to their loginbis for more than a month. */ -check("SELECT a.alias AS username, b.alias AS loginbis, b.expire - FROM aliases AS a - INNER JOIN aliases AS b ON (a.uid=b.uid AND b.type != 'homonyme' and b.expire < NOW()) - WHERE a.type = 'a_vie'", +check("SELECT e.email AS homonym, f.email AS forlife, e.expire + FROM email_source_account AS e + INNER JOIN homonyms_list AS l ON (e.uid = l.uid) + INNER JOIN homonyms_list AS h ON (l.hrmid = h.hrmid) + INNER JOIN email_source_account AS f ON (h.uid = f.uid AND f.type = 'forlife') + WHERE e.expire < NOW() + ORDER BY homonym, forlife", "Donne la liste des homonymes qui ont un alias égal à leur loginbis depuis plus d'un mois, il est temps de supprimer leur alias."); // Counts empty profile fields that should never be empty. diff --git a/bin/cron/emails.check.php b/bin/cron/emails.check.php index 846ef2d..8bab8ab 100755 --- a/bin/cron/emails.check.php +++ b/bin/cron/emails.check.php @@ -47,17 +47,15 @@ if (PEAR::isError($opts)) { /* * Check duplicated addresses */ -$it = Xdb::iterRow("SELECT al1.alias, al2.alias, e1.email - FROM emails AS e1 - INNER JOIN emails AS e2 ON (e1.email = e2.email AND e1.uid != e2.uid - AND (e1.uid < e2.uid OR NOT FIND_IN_SET('active', e2.flags))) - INNER JOIN aliases AS al1 ON (al1.uid = e1.uid AND al1.type = 'a_vie') - INNER JOIN aliases AS al2 ON (al2.uid = e2.uid AND al2.type = 'a_vie') - INNER JOIN accounts AS a1 ON (al1.uid = a1.uid) - INNER JOIN accounts AS a2 ON (al2.uid = a2.uid) - LEFT JOIN email_watch AS w ON (e1.email = w.email) - WHERE FIND_IN_SET('active', e1.flags) AND w.email IS NULL - ORDER BY al1.alias"); +$it = Xdb::iterRow("SELECT s1.email, s2.email, r1.redirect + FROM email_redirect_account AS r1 + INNER JOIN email_redirect_account AS r2 ON (r1.redirect = r2.redirect AND r1.uid != r2.uid) + INNER JOIN email_source_account AS s1 ON (s1.uid = r1.uid AND s1.type = 'forlife') + INNER JOIN email_source_account AS s2 ON (s2.uid = r2.uid AND s2.type = 'forlife') + LEFT JOIN email_watch AS w ON (r1.redirect = w.email) + WHERE w.email IS NULL + GROUP BY r1.redirect + ORDER BY r1.redirect, s1.email"); $insert = array(); $conflits = array(); @@ -84,29 +82,28 @@ if (count($conflits) > 0) { * Check dead emails */ if ($panne_level > 0) { - $res = Xdb::query("SELECT e.email, a.hruid - FROM emails AS e - INNER JOIN accounts AS a ON (a.uid = e.uid) - WHERE e.panne_level = {?} AND e.flags = 'active' - ORDER BY a.hruid", - $panne_level); + $res = XDB::fetchAllAssoc("SELECT r.redirect, a.hruid + FROM email_redirect_account AS r + INNER JOIN accounts AS a ON (a.uid = r.uid) + WHERE r.broken_level = {?} AND r.flags != 'broken' + ORDER BY a.hruid", + $panne_level); - if ($res->numRows()) { - $result = $res->fetchAllAssoc(); + if ($res) { echo "Nouvelles adresses en panne detectees :\n"; - foreach ($result as $assoc) { - echo '* ' . $assoc['email'] . ' pour ' . $assoc['hruid'] . "\n"; + foreach ($res as $assoc) { + echo '* ' . $assoc['redirect'] . ' pour ' . $assoc['hruid'] . "\n"; } echo "\n\n"; - Xdb::execute("UPDATE emails - SET flags = 'panne' - WHERE panne_level = 3 AND flags = 'active'"); + Xdb::execute("UPDATE email_redirect_account + SET flags = 'broken' + WHERE broken_level = 3"); } - Xdb::execute('UPDATE emails - SET panne_level = {?} - WHERE panne_level > {?}', + Xdb::execute('UPDATE email_redirect_account + SET broken_level = {?} + WHERE broken_level > {?}', $panne_level, $panne_level); } @@ -115,19 +112,18 @@ if ($panne_level > 0) { * inactive redirection. */ if ($opt_verbose) { - $res = XDB::query("SELECT a.hruid, ei.email - FROM accounts AS a - LEFT JOIN emails AS ea ON (ea.uid = a.uid AND ea.flags = 'active') - INNER JOIN emails AS ei ON (ei.uid = a.uid AND ei.flags = '') - INNER JOIN email_options AS eo ON (eo.uid = a.uid) - WHERE NOT FIND_IN_SET('googleapps', eo.storage) AND ea.email IS NULL - GROUP BY a.uid"); + $res = XDB::fetchAllAssoc("SELECT a.hruid, r2.redirect + FROM accounts AS a + LEFT JOIN email_redirect_account AS r1 ON (a.uid = r1.uid AND r1.flags = 'active') + INNER JOIN email_redirect_account AS r2 ON (a.uid = r2.uid AND r2.flags = 'inactive' + AND r2.type != 'imap' AND r2.type != 'homonym') + WHERE r1.uid IS NULL + GROUP BY a.uid"); - if ($res->numRows()) { - $result = $res->fetchAllAssoc(); + if ($res) { echo "Camarades n'ayant plus d'adresses actives, mais ayant une adresse inactive :\n"; - foreach ($result as $user) { - echo '* ' . $user['email'] . ' pour ' . $user['hruid'] . "\n"; + foreach ($res as $user) { + echo '* ' . $user['redirect'] . ' pour ' . $user['hruid'] . "\n"; } } echo "\n"; diff --git a/bin/cron/google_apps.php b/bin/cron/google_apps.php index 66138b8..9b6f78d 100755 --- a/bin/cron/google_apps.php +++ b/bin/cron/google_apps.php @@ -32,10 +32,10 @@ if (!$globals->mailstorage->googleapps_domain) { /* Updates the l_userid parameter for newer user accounts. */ $res = XDB::iterator( - "SELECT g.g_account_name, a.uid + "SELECT g.g_account_name, s.uid FROM gapps_accounts AS g - LEFT JOIN aliases as a ON (a.alias = g.g_account_name AND a.type = 'a_vie') - WHERE (g.l_userid IS NULL OR g.l_userid <= 0) AND a.uid IS NOT NULL"); + LEFT JOIN email_source_account AS s ON (s.email = g.g_account_name AND s.type = 'forlife') + WHERE (g.l_userid IS NULL OR g.l_userid <= 0) AND s.uid IS NOT NULL"); while ($account = $res->next()) { XDB::execute( "UPDATE gapps_accounts @@ -48,8 +48,8 @@ while ($account = $res->next()) { $res = XDB::iterator( "SELECT g.g_account_name FROM gapps_accounts AS g - LEFT JOIN aliases as a ON (a.alias = g.g_account_name AND a.type = 'a_vie') - WHERE (g.l_userid IS NULL OR g.l_userid <= 0) AND a.uid IS NULL"); + LEFT JOIN email_source_account AS s ON (s.email = g.g_account_name AND s.type = 'forlife') + WHERE (g.l_userid IS NULL OR g.l_userid <= 0) AND s.uid IS NULL"); while ($account = $res->next()) { if (!preg_match("/^admin-/", $account['g_account_name'])) { printf("Warning: GApps account '%s' has no local uid.\n", $account['g_account_name']); @@ -58,10 +58,10 @@ while ($account = $res->next()) { /* Updates the l_userid parameter for newer nicknames. */ $res = XDB::iterator( - "SELECT g.g_account_name, a.uid + "SELECT g.g_account_name, s.uid FROM gapps_nicknames AS g - LEFT JOIN aliases AS a ON (a.alias = g.g_account_name AND a.type = 'a_vie') - WHERE (g.l_userid IS NULL or g.l_userid <= 0) AND a.uid IS NOT NULL + LEFT JOIN email_source_account AS s ON (s.email = g.g_account_name AND s.type = 'forlife') + WHERE (g.l_userid IS NULL or g.l_userid <= 0) AND s.uid IS NOT NULL GROUP BY g_account_name"); while ($nickname = $res->next()) { XDB::execute( @@ -75,8 +75,8 @@ while ($nickname = $res->next()) { $res = XDB::iterator( "SELECT g.g_account_name FROM gapps_nicknames AS g - LEFT JOIN aliases as a ON (a.alias = g.g_account_name AND a.type = 'a_vie') - WHERE (g.l_userid IS NULL OR g.l_userid <= 0) AND a.uid IS NULL"); + LEFT JOIN email_source_account AS s ON (s.email = g.g_account_name AND s.type = 'forlife') + WHERE (g.l_userid IS NULL OR g.l_userid <= 0) AND s.uid IS NULL"); while ($nickname = $res->next()) { if (!preg_match("/^admin-/", $nickname['g_account_name'])) { printf("Warning: Nickname '%s' has no local uid.\n", $nickname['g_account_name']); @@ -86,11 +86,11 @@ while ($nickname = $res->next()) { /* Checks that all nicknames have been synchronized to GoogleApps. Creates the missing ones. */ $res = XDB::iterator( - "SELECT g.l_userid AS id, f.alias AS username, a.alias AS nickname + "SELECT g.l_userid AS id, s1.email AS username, s2.email AS nickname FROM gapps_accounts AS g - INNER JOIN aliases AS f ON (f.uid = g.l_userid AND f.type = 'a_vie') - INNER JOIN aliases AS a ON (a.uid = g.l_userid AND a.type = 'alias') - LEFT JOIN gapps_nicknames AS n ON (n.l_userid = g.l_userid AND n.g_nickname = a.alias) + INNER JOIN email_source_account AS s1 ON (s1.uid = g.l_userid AND s1.type = 'forlife') + INNER JOIN email_source_account AS s2 ON (s2.uid = g.l_userid AND s2.type = 'alias') + LEFT JOIN gapps_nicknames AS n ON (n.l_userid = g.l_userid AND n.g_nickname = s2.email) WHERE g.g_status = 'active' AND n.g_nickname IS NULL AND g.l_userid IS NOT NULL"); while ($nickname = $res->next()) { // Checks that the requested nickname doesn't look like a regular forlife; @@ -111,8 +111,8 @@ while ($nickname = $res->next()) { $res = XDB::iterator( "SELECT g.l_userid AS id, g.g_nickname AS nickname FROM gapps_nicknames AS g - LEFT JOIN aliases AS a ON (a.uid = g.l_userid AND a.type = 'alias' AND a.alias = g.g_nickname) - WHERE g.l_userid IS NOT NULL AND a.alias IS NULL"); + LEFT JOIN email_source_account AS s ON (s.uid = g.l_userid AND s.type = 'forlife' AND s.email = g.g_nickname) + WHERE g.l_userid IS NOT NULL AND s.email IS NULL"); while ($nickname = $res->next()) { XDB::execute( "INSERT INTO gapps_queue diff --git a/bin/cron/homonyms.php b/bin/cron/homonyms.php index 567fbd8..068d3b2 100755 --- a/bin/cron/homonyms.php +++ b/bin/cron/homonyms.php @@ -26,20 +26,19 @@ */ require 'connect.db.inc.php'; -$resRobot = XDB::iterator("SELECT uid, alias, expire - FROM aliases - WHERE (expire = NOW() + INTERVAL 7 DAY OR expire <= NOW()) - AND type = 'alias'"); +$resRobot = XDB::iterator("SELECT uid, email, expire + FROM email_source_account + WHERE (expire = NOW() + INTERVAL 7 DAY OR expire <= NOW())"); while ($old = $resRobot->next()) { $res = XDB::query('SELECT a.hruid - FROM homonyms AS h - INNER JOIN accounts AS a ON (h.uid = a.uid) - WHERE homonyme_id = {?}', - $old['id']); + FROM homonyms_list AS h + INNER JOIN accounts AS a ON (h.uid = a.uid) + WHERE hrmid = {?}', + 'h.' . $old['email'] . '.polytechnique.org'); $hruids = $res->fetchColumn(); - $homonym = User::getSilent($old['id']); - $req = new HomonymeReq($homonym, $old['alias'], $hruids, $old['expire'] > date("Y-m-d")); + $homonym = User::getSilent($old['uid']); + $req = new HomonymeReq($homonym, $old['email'], $hruids, $old['expire'] > date("Y-m-d")); $req->submit(); } diff --git a/bin/cron/profile_modification.php b/bin/cron/profile_modification.php index ec240cb..7101c42 100755 --- a/bin/cron/profile_modification.php +++ b/bin/cron/profile_modification.php @@ -24,13 +24,13 @@ require_once 'connect.db.inc.php'; require_once 'plmailer.php'; global $globals; -$res = XDB::iterator('SELECT p.hrpid, pm.pid, a.full_name, pm.field, pm.oldText, pm.newText, p.sex, pd.yourself, al.alias +$res = XDB::iterator('SELECT p.hrpid, pm.pid, a.full_name, pm.field, pm.oldText, pm.newText, p.sex, pd.yourself, s.email FROM profile_modifications AS pm INNER JOIN accounts AS a ON (pm.uid = a.uid) INNER JOIN profiles AS p ON (pm.pid = p.pid) INNER JOIN profile_display AS pd ON (pm.pid = pd.pid) INNER JOIN account_profiles AS ap ON (pm.pid = ap.pid AND FIND_IN_SET(\'owner\', ap.perms)) - INNER JOIN aliases AS al ON (ap.uid = al.uid AND FIND_IN_SET(\'bestalias\', al.flags)) + INNER JOIN email_source_account AS s ON (a.uid = s.uid AND FIND_IN_SET(\'bestalias\', s.flags)) WHERE pm.type = \'third_party\' AND pm.field != \'deathdate\' ORDER BY pm.pid, pm.field, pm.timestamp'); @@ -41,7 +41,7 @@ if ($res->total() > 0) { $pid = $values['pid']; $sex = ($values['sex'] == 'female') ? 1 : 0; $yourself = $values['yourself']; - $alias = $values['alias']; + $alias = $values['email']; $hrpid = $values['hrpid']; $modifications = array(); $modifications[] = array( diff --git a/bin/cron/registrations.php b/bin/cron/registrations.php index bf20e87..91cb1ac 100755 --- a/bin/cron/registrations.php +++ b/bin/cron/registrations.php @@ -5,11 +5,11 @@ require 'connect.db.inc.php'; $message = ''; -$res = XDB::iterRow("SELECT a.registration_date, a.hruid, e.email - FROM accounts AS a - INNER JOIN account_profiles AS ap ON (ap.uid = a.uid AND FIND_IN_SET('owner', ap.perms)) - INNER JOIN profile_display AS pd ON (ap.pid = pd.pid) - LEFT JOIN emails AS e ON (a.uid = e.uid AND NOT FIND_IN_SET('filter', e.flags)) +$res = XDB::iterRow("SELECT a.registration_date, a.hruid, s.email + FROM accounts AS a + INNER JOIN account_profiles AS ap ON (ap.uid = a.uid AND FIND_IN_SET('owner', ap.perms)) + INNER JOIN profile_display AS pd ON (ap.pid = pd.pid) + LEFT JOIN email_source_account AS s ON (a.uid = s.uid) WHERE a.registration_date > {?} GROUP BY a.hruid ORDER BY pd.promo", diff --git a/bin/lists.rpc.py b/bin/lists.rpc.py index e006547..43814aa 100755 --- a/bin/lists.rpc.py +++ b/bin/lists.rpc.py @@ -127,12 +127,12 @@ class BasicAuthXMLRPCRequestHandler(SimpleXMLRPCRequestHandler): self.end_headers() def getUser(self, uid, md5, vhost): - res = mysql_fetchone ("""SELECT a.full_name, IF(aa.alias IS NULL, a.email, CONCAT(aa.alias, '@%s')), + res = mysql_fetchone ("""SELECT a.full_name, IF(s.email IS NULL, a.email, CONCAT(s.email, '@%s')), IF (a.is_admin, 'admin', IF(FIND_IN_SET('lists', at.perms) OR FIND_IN_SET('lists', a.user_perms), 'lists', NULL)) FROM accounts AS a INNER JOIN account_types AS at ON (at.type = a.type) - LEFT JOIN aliases AS aa ON (a.uid = aa.uid AND aa.type = 'a_vie') + LEFT JOIN email_source_account AS s ON (s.uid = a.uid AND s.type = 'forlife') WHERE a.uid = '%s' AND a.password = '%s' AND a.state = 'active' LIMIT 1""" \ % (PLATAL_DOMAIN, uid, md5)) @@ -202,9 +202,8 @@ def to_forlife(email): if ( fqdn == PLATAL_DOMAIN ) or ( fqdn == PLATAL_DOMAIN2 ): res = mysql_fetchone("""SELECT CONCAT(f.alias, '@%s'), a.full_name FROM accounts AS a - INNER JOIN aliases AS f ON (f.uid = a.uid AND f.type = 'a_vie') - INNER JOIN aliases AS aa ON (aa.uid = a.uid AND aa.alias = '%s' - AND a.type != 'homonyme') + INNER JOIN email_source_account AS s1 ON (a.uid = s1.uid AND s1.type = 'forlife') + INNER JOIN email_source_account AS s2 ON (a.uid = s2.uid AND s2.email = '%s') WHERE a.state = 'active' LIMIT 1""" \ % (PLATAL_DOMAIN, mbox)) diff --git a/include/emails.inc.php b/include/emails.inc.php index 35621e2..ccd3890 100644 --- a/include/emails.inc.php +++ b/include/emails.inc.php @@ -158,7 +158,7 @@ function mark_broken_email($email, $admin = false) WHERE redirect = {?}', $email); } elseif ($admin) { XDB::execute('UPDATE email_redirect_account - SET last = CURDATE(), broken_level = IF(broken_level > 1, 3, 2) + SET last = CURDATE(), broken_level = broken_level + 1 WHERE redirect = {?} AND DATE_ADD(last, INTERVAL 14 DAY) < CURDATE()', $email); } else {