Si tuviésemos un encadenamiento de alias o redirecciones, el ahorro sería aún mayor. Por ejemplo:
account_3 es un alias de account_2, esta a su ves está redireccionada a account_1
Si account_1 ya tiene cargadas sus preferencias, al ser procesado un mail para cualquiera de las otras dos cuentas, estas preferencias no son tomadas en cuenta por SpamAssassin. Si agregamos la nueva preference ' alias_of ' a las cuentas account_2 y account_3, esta puede ser interpretada por un el procedure ' users_pref ' que le devolverá a SpamAssassin las preferencias de la cuenta en cuestión más las de la cuenta que le hayamos indicado.
username preference value
account_3 alias_of account_2
... ...
account_2 alias_of account_1
... ...
account_1 required_score 5.5
blaclist_from spam@spam.spam
... ...
En este caso hay un encadenamiento de 3 cuentas pero el número puede variar y el limite de recursión se puede establecer en user_scores_sql_custom_quer para evitar loops infinitos con cuentas que se definan como alias mutuamente.
local.cf
user_scores_sql_custom_query CALL spamassassin.users_pref(_USERNAME_ , _DOMAIN_ , 3)
Procedure users_pref
PROCEDURE `users_pref`(
IN `SPusername` varchar(128),
IN `SPdomain` varchar(68),
IN `SPdep` integer
)
BEGIN
IF (`SPdomain` <> 'noDomain' OR `SPdomain` is NULL ) THEN
SET max_sp_recursion_depth=`SPdep`;
create temporary table if not exists MyArray (
`prefid` integer,
`username` varchar(128),
`preference` varchar(64),
`value` varchar(128)
) engine = MEMORY;
END IF;
INSERT INTO MyArray (SELECT prefid, username, preference, value
FROM spamassassin.userpref
WHERE username = `SPusername`
OR (username = '@GLOBAL' AND `SPdomain` <> 'noDomain' )
OR username = CONCAT('@',`SPdomain`)
);
IF (EXISTS (SELECT value as `username`
FROM `spamassassin`.`userpref`
WHERE `username` = `SPusername`
and preference = 'alias_of')
AND `SPdep` > 0 )THEN
CALL spamassassin.users_pref((SELECT value as `username`
FROM `spamassassin`.`userpref`
WHERE `username` = `SPusername`
and preference = 'alias_of'),'noDomain',`SPdep`-1
);
ELSE
Select preference, value from MyArray
WHERE preference <> 'alias_of'
ORDER BY username DESC, prefid asc;
END IF ;
END $$
Tabla userpref
CREATE TABLE `spamassassin`.`userpref` (
`prefid` int(8) unsigned NOT NULL auto_increment,
`username` varchar(128) NOT NULL default '',
`preference` varchar(64) NOT NULL default '',
`value` varchar(128) default NULL,
`descript` varchar(128) default NULL,
`added` datetime NOT NULL default '2003-01-01 00:00:00',
`added_by` varchar(128) NOT NULL default '',
`modified` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
UNIQUE KEY `prefid` USING BTREE (`prefid`),
KEY `type` (`preference`),
KEY `added_by` (`added_by`),
KEY `preference` (`preference`),
KEY `username` (`username`)
) ENGINE=MyISAM AUTO_INCREMENT=1037 DEFAULT CHARSET=latin1 COMMENT='Spamassassin Preferences';
UsingSQL
http://wiki.apache.org/spamassassin/UsingSQL
WebUserPrefs by patrickbores
http://sourceforge.net/projects/webuserprefs/