Thread: SF.net SVN: postfixadmin:[624] trunk/model/AliasHandler.php
Brought to you by:
christian_boltz,
gingerdog
From: <Gin...@us...> - 2009-04-11 20:44:49
|
Revision: 624 http://postfixadmin.svn.sourceforge.net/postfixadmin/?rev=624&view=rev Author: GingerDog Date: 2009-04-11 20:44:46 +0000 (Sat, 11 Apr 2009) Log Message: ----------- AliasHandler: fix undefined varaible (domain - line 157) Modified Paths: -------------- trunk/model/AliasHandler.php Modified: trunk/model/AliasHandler.php =================================================================== --- trunk/model/AliasHandler.php 2009-04-10 15:27:44 UTC (rev 623) +++ trunk/model/AliasHandler.php 2009-04-11 20:44:46 UTC (rev 624) @@ -97,6 +97,8 @@ $addresses = array_unique($addresses); $original = $this->get(true); + $tmp = preg_split('/@/', $username); + $domain = $tmp[1]; foreach($original as $address) { if($vacation_persist) { @@ -143,8 +145,6 @@ } if($this->hasAliasRecord() == false) { $true = db_get_boolean(True); - $tmp = preg_split('/@/', $username); - $domain = $tmp[1]; $sql = "INSERT INTO $table_alias (address, goto, domain, created, modified, active) VALUES ('$username', '$goto', '$domain', NOW(), NOW(), $true)"; } else { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <chr...@us...> - 2009-04-11 23:24:22
|
Revision: 626 http://postfixadmin.svn.sourceforge.net/postfixadmin/?rev=626&view=rev Author: christian_boltz Date: 2009-04-11 23:24:20 +0000 (Sat, 11 Apr 2009) Log Message: ----------- model/AliasHandler.php: - really ;-) fix undefined variable $username Modified Paths: -------------- trunk/model/AliasHandler.php Modified: trunk/model/AliasHandler.php =================================================================== --- trunk/model/AliasHandler.php 2009-04-11 20:45:38 UTC (rev 625) +++ trunk/model/AliasHandler.php 2009-04-11 23:24:20 UTC (rev 626) @@ -97,7 +97,7 @@ $addresses = array_unique($addresses); $original = $this->get(true); - $tmp = preg_split('/@/', $username); + $tmp = preg_split('/@/', $this->username); $domain = $tmp[1]; foreach($original as $address) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <chr...@us...> - 2010-12-26 19:48:16
|
Revision: 915 http://postfixadmin.svn.sourceforge.net/postfixadmin/?rev=915&view=rev Author: christian_boltz Date: 2010-12-26 19:48:10 +0000 (Sun, 26 Dec 2010) Log Message: ----------- AliasHandler.php proofreading results: various fixes and changes - pass $username through strtolower() - get(): error check first for better readability (avoids long if block) - get(): fixed a forgotten return behaviour change - get(): renamed $new_list to $filtered_list (self-explaining code) - update(): migrated to new return behaviour of get() - update(): use db_update etc. - some minor changes - added various TODO notes Modified Paths: -------------- trunk/model/AliasHandler.php Modified: trunk/model/AliasHandler.php =================================================================== --- trunk/model/AliasHandler.php 2010-12-26 19:37:27 UTC (rev 914) +++ trunk/model/AliasHandler.php 2010-12-26 19:48:10 UTC (rev 915) @@ -7,16 +7,22 @@ private $username = null; + +# TODO: implement a "delete" method. Pseudocode: +# - check if alias exists +# - check if mailbox exists - if yes, error out (never delete the alias of a mailbox!) +# - (if still here) delete alias + /** * @param string $username */ public function __construct($username) { - $this->username = $username; + $this->username = strtolower($username); } /** * @return array - list of email addresses the user's mail is forwarded to. - * (may be an empty list, especially if $CONF['alias_control'] is turned off... + * (may be an empty list, especially if $CONF['alias_control'] is turned off...) * @param boolean - by default we don't return special addresses (e.g. vacation and mailbox alias); pass in true here if you wish to. */ public function get($all=false) { @@ -25,41 +31,46 @@ $sql = "SELECT * FROM $table_alias WHERE address='$username'"; $result = db_query($sql); - if($result['rows'] == 1) { + if($result['rows'] != 1) { + return false; + } + +# TODO: whitespace fix: move ~20 lines below one step left $row = db_array ($result['result']); // At the moment Postfixadmin stores aliases in it's database in a comma seperated list; this may change one day. $list = explode(',', $row['goto']); if($all) { - return $list; + $this->return = $list; + return true; } - $new_list = array(); + $filtered_list = array(); /* if !$all, remove vacation & mailbox aliases */ foreach($list as $address) { if($address != '' ) { if($this->is_vacation_address($address) || $this->is_mailbox_alias($address)) { + # TODO: store "vacation_active" and "mailbox" status - should be readable public } else { - $new_list[] = $address; + $filtered_list[] = $address; } } } - $list = $new_list; - $this->return = $list; + $this->return = $filtered_list; return true; - } - return false; } /** * @param string $address * @param string $username * @return boolean true if the username is an alias for the mailbox AND we have alias_control turned off. + * TODO: comment for @return: does alias_control really matter here? */ public function is_mailbox_alias($address) { global $CONF; $username = $this->username; if($address == $username) { + # TODO: check (via SQL query) if there is really a mailbox with this address return true; } return false; @@ -72,7 +83,7 @@ public function is_vacation_address($address) { global $CONF; if($CONF['vacation'] == 'YES') { - if(stripos($address, '@' . $CONF['vacation_domain'])) { + if(stripos($address, '@' . $CONF['vacation_domain'])) { # TODO: check full vacation address user#domain.com@vacation_domain return true; } } @@ -84,24 +95,26 @@ * @param array $addresses - list of aliases to set for the user. * @param string flags - forward_and_store or remote_only or '' * @param boolean $vacation_persist - set to false to stop the vacation address persisting across updates - * Set the user's aliases to those provided. If $addresses ends up being empty the alias record is removed. + * Set the user's aliases to those provided. If $addresses ends up being empty the alias record is removed. # TODO: deleting that's buggy behaviour, error out instead */ public function update($addresses, $flags = '', $vacation_persist=true) { // find out if the user is on vacation or not; if they are, // then the vacation alias needs adding to the db (as we strip it out in the get method) // likewise with the alias_control address. + # TODO: move all validation from edit-alias/create-alias and users/edit-alias here + $valid_flags = array('', 'forward_and_store', 'remote_only'); if(!in_array($flags, $valid_flags)) { die("Invalid flag passed into update()... : $flag - valid options are :" . implode(',', $valid_flags)); } $addresses = array_unique($addresses); - $original = $this->get(true); - $tmp = preg_split('/@/', $this->username); - $domain = $tmp[1]; + list (/*NULL*/, $domain) = explode('@', $this->username); - foreach($original as $address) { + if ( ! $this->get(true) ) die("Alias not existing?"); # TODO: better error behaviour + + foreach($this->return as $address) { if($vacation_persist) { if($this->is_vacation_address($address)) { $addresses[] = $address; @@ -117,7 +130,7 @@ $new_list = array(); if($flags == 'remote_only') { - foreach($addresses as $address) { + foreach($addresses as $address) { # TODO: write a remove_from_array function, see http://tech.petegraham.co.uk/2007/03/22/php-remove-values-from-array/ // strip out our username... if it's in the list given. if($address != $this->username) { $new_list[] = $address; @@ -134,29 +147,40 @@ $new_list = array(); foreach($addresses as $address) { if($address != '') { - $new_list[] = $address; + $new_list[] = $address; # TODO use remove_from_array, see above } } $addresses = array_unique($new_list); - $username = escape_string($this->username); - $goto = escape_string(implode(',', $addresses)); - $table_alias = table_by_key('alias'); + $E_username = escape_string($this->username); + $goto = implode(',', $addresses); +# $table_alias = table_by_key('alias'); if(sizeof($addresses) == 0) { - $sql = "DELETE FROM $table_alias WHERE address = '$username'"; # TODO: should never happen - error_log("Alias set to empty / deleted: $username"); # TODO: more/better error handling - maybe just return false? + # $result = db_delete('alias', 'address', $this->username); # '"DELETE FROM $table_alias WHERE address = '$username'"; # TODO: should never happen and causes broken behaviour + error_log("Alias set to empty / Attemp to delete: " . $this->username); # TODO: more/better error handling - maybe just return false? } - if($this->hasAliasRecord() == false) { + if($this->hasAliasRecord() == false) { # TODO should never happen in update() - see also the comments on handling DELETE above $true = db_get_boolean(True); - $sql = "INSERT INTO $table_alias (address, goto, domain, created, modified, active) VALUES ('$username', '$goto', '$domain', NOW(), NOW(), '$true')"; + $alias_data = array( + 'address' => $this->username, + 'goto' => $goto, + 'domain' => $domain, + 'active' => db_get_boolean(True), + ); + $result = db_insert('alias', $alias_data); +# $sql = "INSERT INTO $table_alias (address, goto, domain, created, modified, active) VALUES ('$username', '$goto', '$domain', NOW(), NOW(), '$true')"; +# $result = db_query($sql); } else { - $sql = "UPDATE $table_alias SET goto = '$goto', modified = NOW() WHERE address = '$username'"; + $alias_data = array( + 'goto' => $goto, + ); + $result = db_update('alias', "address = '$E_username'", $alias_data); +# $sql = "UPDATE $table_alias SET goto = '$goto', modified = NOW() WHERE address = '$username'"; } - $result = db_query($sql); - if($result['rows'] != 1) { + if($result != 1) { return false; } - db_log($username, $domain, 'edit_alias', "$username -> $goto"); + db_log($this->username, $domain, 'edit_alias', "$E_username -> $goto"); return true; } @@ -166,8 +190,8 @@ * @return boolean true if local delivery is enabled */ public function hasStoreAndForward() { - $aliases = $this->get(true); - if(in_array($this->username, $aliases)) { + $result = $this->get(true); # TODO: error checking? + if(in_array($this->username, $this->return)) { return true; } return false; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <chr...@us...> - 2010-12-30 22:26:24
|
Revision: 924 http://postfixadmin.svn.sourceforge.net/postfixadmin/?rev=924&view=rev Author: christian_boltz Date: 2010-12-30 22:26:17 +0000 (Thu, 30 Dec 2010) Log Message: ----------- AliasHandler.php: - rewrote delete(): - error checks first (better readable than nested if blocks) - use db_delete - db_log() alias deletion - removed outdated comments - some whitespace fixes Modified Paths: -------------- trunk/model/AliasHandler.php Modified: trunk/model/AliasHandler.php =================================================================== --- trunk/model/AliasHandler.php 2010-12-30 20:32:26 UTC (rev 923) +++ trunk/model/AliasHandler.php 2010-12-30 22:26:17 UTC (rev 924) @@ -106,7 +106,7 @@ } $addresses = array_unique($addresses); - list (/*NULL*/, $domain) = explode('@', $this->username); + list (/*NULL*/, $domain) = explode('@', $this->username); if ( ! $this->get(true) ) die("Alias not existing?"); # TODO: better error behaviour @@ -149,7 +149,6 @@ $addresses = array_unique($new_list); $E_username = escape_string($this->username); $goto = implode(',', $addresses); -# $table_alias = table_by_key('alias'); if(sizeof($addresses) == 0) { # $result = db_delete('alias', 'address', $this->username); # '"DELETE FROM $table_alias WHERE address = '$username'"; # TODO: should never happen and causes broken behaviour error_log("Alias set to empty / Attemp to delete: " . $this->username); # TODO: more/better error handling - maybe just return false? @@ -163,15 +162,12 @@ 'active' => db_get_boolean(True), ); $result = db_insert('alias', $alias_data); -# $sql = "INSERT INTO $table_alias (address, goto, domain, created, modified, active) VALUES ('$username', '$goto', '$domain', NOW(), NOW(), '$true')"; -# $result = db_query($sql); } else { $alias_data = array( 'goto' => $goto, ); $result = db_update('alias', "address = '$E_username'", $alias_data); -# $sql = "UPDATE $table_alias SET goto = '$goto', modified = NOW() WHERE address = '$username'"; } if($result != 1) { return false; @@ -207,29 +203,29 @@ return false; } - # TODO: implement a "delete" method. Pseudocode: -# - check if alias exists -# - check if mailbox exists - if yes, error out (never delete the alias of a mailbox!) -# - (if still here) delete alias - -#HERE IT IS! /** * @param alias address * @return true on success false on failure */ public function delete($address){ - $E_address = escape_string($address); - $table_alias = table_by_key('alias'); - if( $this->get($address) && !is_mailbox_alias($address) ) { - sql = "DELETE FROM $table_alias" WHERE address = '$E_address'; - $result = db_query($sql); - if( $result['rows'] == 1 ) { - return true; +# TODO: use $this->username instead of $address function parameter? + if( ! $this->get($address) ) { + # TODO: error message "no such alias" + return false; } - return false; - } + + if (is_mailbox_alias($address) ) { + # TODO: error message "alias belongs to a mailbox and can't be deleted" + return false; + } + + $result = db_delete('alias', 'address', $address); + if( $result == 1 ) { + db_log ($SESSID_USERNAME, $fDomain, 'delete_alias', $fDelete); + return true; + } } - + /** * @return return value of previously called method */ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <va...@us...> - 2011-01-01 04:07:45
|
Revision: 932 http://postfixadmin.svn.sourceforge.net/postfixadmin/?rev=932&view=rev Author: valkum Date: 2011-01-01 04:07:39 +0000 (Sat, 01 Jan 2011) Log Message: ----------- Done is_mailbox_alias todo. Now it checks against the database. Modified Paths: -------------- trunk/model/AliasHandler.php Modified: trunk/model/AliasHandler.php =================================================================== --- trunk/model/AliasHandler.php 2010-12-31 20:13:53 UTC (rev 931) +++ trunk/model/AliasHandler.php 2011-01-01 04:07:39 UTC (rev 932) @@ -64,12 +64,23 @@ */ public function is_mailbox_alias($address) { global $CONF; + $table_mailbox = table_by_key('mailbox'); + + $sql = "SELECT * FROM $table_mailbox WHERE username='$address'"; + $result = db_query($sql); + if($result['rows'] != 1) { + return false; + } else { + return true; + } + /* $username = $this->username; if($address == $username) { # TODO: check (via SQL query) if there is really a mailbox with this address return true; } return false; + */ } /** This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <chr...@us...> - 2011-01-06 20:40:40
|
Revision: 939 http://postfixadmin.svn.sourceforge.net/postfixadmin/?rev=939&view=rev Author: christian_boltz Date: 2011-01-06 20:40:34 +0000 (Thu, 06 Jan 2011) Log Message: ----------- AliasHandler.php: fix false positives in is_mailbox_alias and various small fixes and cleanups - get(): whitespace fix - is_mailbox_alias(): avoid false positives if $address is a mailbox, - is_mailbox_alias(): remove disabled (commented) old code - update(): remove unused variable $true - delete(): removed superfluous parameter in $this->get() call - delete(): removed outdated FIXME note Modified Paths: -------------- trunk/model/AliasHandler.php Modified: trunk/model/AliasHandler.php =================================================================== --- trunk/model/AliasHandler.php 2011-01-06 20:23:11 UTC (rev 938) +++ trunk/model/AliasHandler.php 2011-01-06 20:40:34 UTC (rev 939) @@ -31,29 +31,28 @@ return false; } -# TODO: whitespace fix: move ~20 lines below one step left - $row = db_array ($result['result']); - // At the moment Postfixadmin stores aliases in it's database in a comma seperated list; this may change one day. - $list = explode(',', $row['goto']); - if($all) { - $this->return = $list; - return true; - } + $row = db_array ($result['result']); + // At the moment Postfixadmin stores aliases in it's database in a comma seperated list; this may change one day. + $list = explode(',', $row['goto']); + if($all) { + $this->return = $list; + return true; + } - $filtered_list = array(); - /* if !$all, remove vacation & mailbox aliases */ - foreach($list as $address) { - if($address != '' ) { - if($this->is_vacation_address($address) || $this->is_mailbox_alias($address)) { - # TODO: store "vacation_active" and "mailbox" status - should be readable public - } - else { - $filtered_list[] = $address; - } + $filtered_list = array(); + /* if !$all, remove vacation & mailbox aliases */ + foreach($list as $address) { + if($address != '' ) { + if($this->is_vacation_address($address) || $this->is_mailbox_alias($address)) { + # TODO: store "vacation_active" and "mailbox" status - should be readable public } + else { + $filtered_list[] = $address; + } } - $this->return = $filtered_list; - return true; + } + $this->return = $filtered_list; + return true; } /** @@ -64,8 +63,12 @@ */ public function is_mailbox_alias($address) { global $CONF; + + if($address != $this->username) { # avoid false positives if $address is a mailbox + return false; + } + $table_mailbox = table_by_key('mailbox'); - $sql = "SELECT * FROM $table_mailbox WHERE username='$address'"; $result = db_query($sql); if($result['rows'] != 1) { @@ -73,14 +76,6 @@ } else { return true; } - /* - $username = $this->username; - if($address == $username) { - # TODO: check (via SQL query) if there is really a mailbox with this address - return true; - } - return false; - */ } /** @@ -165,7 +160,6 @@ error_log("Alias set to empty / Attemp to delete: " . $this->username); # TODO: more/better error handling - maybe just return false? } if($this->hasAliasRecord() == false) { # TODO should never happen in update() - see also the comments on handling DELETE above - $true = db_get_boolean(True); $alias_data = array( 'address' => $this->username, 'goto' => $goto, @@ -173,8 +167,7 @@ 'active' => db_get_boolean(True), ); $result = db_insert('alias', $alias_data); - } - else { + } else { $alias_data = array( 'goto' => $goto, ); @@ -219,13 +212,12 @@ * @return true on success false on failure */ public function delete(){ - if( ! $this->get($this->username) ) { + if( ! $this->get() ) { $this->errormsg[] = 'An alias with that address does not exist.'; # TODO: make translatable return false; } - if ($this->is_mailbox_alias($this->username) ) { ### FIXME use different check, this one always returns true :-( - ### FIXME best solution might be to lookup the mailbox table (via UserHandler) + if ($this->is_mailbox_alias($this->username) ) { $this->errormsg[] = 'This alias belongs to a mailbox and can\'t be deleted.'; # TODO: make translatable return false; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <chr...@us...> - 2012-04-08 17:41:09
|
Revision: 1347 http://postfixadmin.svn.sourceforge.net/postfixadmin/?rev=1347&view=rev Author: christian_boltz Date: 2012-04-08 17:41:02 +0000 (Sun, 08 Apr 2012) Log Message: ----------- AliasHandler.php: - $struct: add is_mailbox (does the alias belong to a mailbox?) - $struct: add goto_mailbox (if the alias is a mailbox, does it point to the mailbox or is it forward-only?) - set goto_mailbox in read_from_db_postprocess() Modified Paths: -------------- trunk/model/AliasHandler.php Modified: trunk/model/AliasHandler.php =================================================================== --- trunk/model/AliasHandler.php 2012-04-08 16:38:26 UTC (rev 1346) +++ trunk/model/AliasHandler.php 2012-04-08 17:41:02 UTC (rev 1347) @@ -30,14 +30,24 @@ 'domain' => pacol( $this->new, 0, 0, 'enum', '' , '' , '', /*options*/ $this->allowed_domains ), 'goto' => pacol( 1, 1, 1, 'txtl', 'pEdit_alias_goto' , 'pEdit_alias_help' ), - 'on_vacation' => pacol( 1, 0, 1, 'bool', '' , '' , 0 , + 'is_mailbox' => pacol( 0, 0, 1, 'int', '' , '' , 0 , + # technically 'is_mailbox' is bool, but the automatic bool conversion breaks the query. Flagging it as int avoids this problem. + # Maybe having a vbool type (without the automatic conversion) would be cleaner - we'll see if we need it. + /*options*/ '', + /*not_in_db*/ 0, + /*dont_write_to_db*/ 1, + /*select*/ 'coalesce(__is_mailbox,0) as is_mailbox', + /*extrafrom*/ 'LEFT JOIN ( ' . + ' SELECT 1 as __is_mailbox, username as __mailbox_username ' . + ' FROM ' . table_by_key('mailbox') . + ' WHERE username IS NOT NULL ' . + ' ) AS __mailbox ON __mailbox_username = address' ), + 'goto_mailbox' => pacol( 1, 1, 1, 'bool', 'pEdit_alias_forward_and_store' , '' , 0, + /*options*/ '', + /*not_in_db*/ 1 ), + 'on_vacation' => pacol( 1, 0, 1, 'bool', 'pUsersMenu_vacation' , '' , 0 , /*options*/ '', /*not_in_db*/ 1 ), - -# target (forwardings) -# is_mailbox (alias belongs to mailbox) -# mailbox_target (is_mailbox and mailbox is (part of the) target -# vacation (active? 0/1) 'active' => pacol( 1, 1, 1, 'bool', 'pAdminEdit_domain_active' , '' , 1 ), 'created' => pacol( 0, 0, 1, 'ts', 'created' , '' ), 'modified' => pacol( 0, 0, 1, 'ts', 'pAdminList_domain_modified' , '' ), @@ -164,7 +174,18 @@ $vh = new VacationHandler($this->id); $vacation_alias = $vh->getVacationAlias(); # TODO: move getVacationAlias to functions.inc.php to avoid the need # for lots of VacationHandler instances (performance)? + + # Vacation enabled? list($db_result[$key]['on_vacation'], $db_result[$key]['goto']) = remove_from_array($db_result[$key]['goto'], $vacation_alias); + + # if it is a mailbox, does the alias point to the mailbox? + if ($db_result[$key]['is_mailbox']) { + # this intentionally does not catch mailbox targets with recipient delimiter. + # if it would, we would have to make goto_mailbox a text instead of a bool (which would annoy 99% of the users) + list($db_result[$key]['goto_mailbox'], $db_result[$key]['goto']) = remove_from_array($db_result[$key]['goto'], $key); + } else { # not a mailbox + $db_result[$key]['goto_mailbox'] = 0; + } } #print_r($db_result); exit; return $db_result; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <chr...@us...> - 2011-02-13 17:10:57
|
Revision: 956 http://postfixadmin.svn.sourceforge.net/postfixadmin/?rev=956&view=rev Author: christian_boltz Date: 2011-02-13 17:10:51 +0000 (Sun, 13 Feb 2011) Log Message: ----------- AliasHandler.php: - escape $address in is_mailbox_alias() Modified Paths: -------------- trunk/model/AliasHandler.php Modified: trunk/model/AliasHandler.php =================================================================== --- trunk/model/AliasHandler.php 2011-02-13 15:56:43 UTC (rev 955) +++ trunk/model/AliasHandler.php 2011-02-13 17:10:51 UTC (rev 956) @@ -69,7 +69,8 @@ } $table_mailbox = table_by_key('mailbox'); - $sql = "SELECT * FROM $table_mailbox WHERE username='$address'"; + $E_address = escape_string($address); + $sql = "SELECT * FROM $table_mailbox WHERE username='$E_address'"; $result = db_query($sql); if($result['rows'] != 1) { return false; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <chr...@us...> - 2012-01-10 00:07:15
|
Revision: 1316 http://postfixadmin.svn.sourceforge.net/postfixadmin/?rev=1316&view=rev Author: christian_boltz Date: 2012-01-10 00:07:09 +0000 (Tue, 10 Jan 2012) Log Message: ----------- AliasHandler.php: - override init() - change '*@domain' -> '@domain', then call parent::init() - validate_new_id(): allow catchall ('@domain'), check only domain in this case - create_allowed(): copy of check_alias() from functions.inc.php, with superfluous { ... } removed - remove forgotten debugging from mergeId() - _field_goto(): - allow '@domain' targets (domain-wide forward) - use an array to collect error messages - that avoids 'uninitialized' warnings and allows to easily change the join() glue if needed Overall status: - create-alias is now fully supported - handling of vacation and mailbox aliases is still on my TODO list, which means we still need edit-alias for now Modified Paths: -------------- trunk/model/AliasHandler.php Modified: trunk/model/AliasHandler.php =================================================================== --- trunk/model/AliasHandler.php 2012-01-02 23:48:23 UTC (rev 1315) +++ trunk/model/AliasHandler.php 2012-01-10 00:07:09 UTC (rev 1316) @@ -74,12 +74,58 @@ ); } - protected function validate_new_id() { - $valid = check_email($this->id); # TODO: check_email should return error message instead of using flash_error itsself - # TODO: handle catchall (input: *@domain, write to db: @domain (without *) - return $valid; - } + public function init($id) { + @list($local_part,$domain) = explode ('@', $id); # supress error message if $id doesn't contain '@' + + if ($local_part == '*') { # catchall - postfix expects '@domain', not '*@domain' + $id = '@' . $domain; + } + + return parent::init($id); + } + + protected function validate_new_id() { + if ($this->id == '') { + $this->errormsg[] = Lang::read('pCreate_alias_address_text_error1'); + return false; + } + + list($local_part,$domain) = explode ('@', $this->id); + + if(!$this->create_allowed($domain)) { + $this->errormsg[] = Lang::read('pCreate_alias_address_text_error3'); + return false; + } + + # TODO: already checked in set() - does it make sense to check it here also? Only advantage: it's an early check +# if (!in_array($domain, $this->allowed_domains)) { +# $this->errormsg[] = Lang::read('pCreate_alias_address_text_error1'); +# return false; +# } + + if ($local_part == '') { # catchall + $valid = true; + } else { + $valid = check_email($this->id); # TODO: check_email should return error message instead of using flash_error itsself + } + + return $valid; + } + + /** + * check number of existing aliases for this domain - is one more allowed? + */ + private function create_allowed($domain) { + $limit = get_domain_properties ($domain); + + if ($limit['aliases'] == 0) return true; # unlimited + if ($limit['aliases'] < 0) return false; # disabled + if ($limit['alias_count'] >= $limit['aliases']) return false; + return true; + } + + /** * merge localpart and domain to address * called by edit.php (if id_field is editable and hidden in editform) _before_ ->init @@ -90,7 +136,6 @@ return ""; } if ($values['localpart'] == '*') $values['localpart'] = ''; # catchall - error_log("merged to: " . $values['localpart'] . '@' . $values['domain']); return $values['localpart'] . '@' . $values['domain']; } else { return $values[$this->id_field]; @@ -130,14 +175,28 @@ $this->errormsg[$field] = 'empty goto'; # TODO: better error message return false; } - + + $errors = array(); + foreach ($val as $singlegoto) { - if (!check_email($singlegoto)) { - $this->errormsg[$field] .= "invalid: $singlegoto "; # TODO: better error message + if (substr($singlegoto, 0, 1) == '@') { # domain-wide forward - check only the domain part + # Note: alias domains are better, but we should keep this way supported for backward compatibility + # and because alias domains can't forward to external domains + list (/*NULL*/, $domain) = explode('@', $singlegoto); + if (!check_domain($domain)) { + $errors[] = "invalid: $singlegoto"; # TODO: better error message + } + } elseif (!check_email($singlegoto)) { + $errors[] = "invalid: $singlegoto"; # TODO: better error message } } - return false; + if (count($errors)) { + $this->errormsg[$field] = join(" ", $errors); + return false; + } else { + return true; + } } /********************************************************************************************************************************************************** This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <chr...@us...> - 2012-02-03 23:54:04
|
Revision: 1344 http://postfixadmin.svn.sourceforge.net/postfixadmin/?rev=1344&view=rev Author: christian_boltz Date: 2012-02-03 23:53:58 +0000 (Fri, 03 Feb 2012) Log Message: ----------- AliasHandler.php: - initStruct(): add 'on_vacation' - read_from_db_postprocess(): split off vacation alias from $goto and store vacation status in on_vacation (honors the vacation alias only, not the details from the vacation table) Modified Paths: -------------- trunk/model/AliasHandler.php Modified: trunk/model/AliasHandler.php =================================================================== --- trunk/model/AliasHandler.php 2012-02-03 23:43:45 UTC (rev 1343) +++ trunk/model/AliasHandler.php 2012-02-03 23:53:58 UTC (rev 1344) @@ -30,6 +30,10 @@ 'domain' => pacol( $this->new, 0, 0, 'enum', '' , '' , '', /*options*/ $this->allowed_domains ), 'goto' => pacol( 1, 1, 1, 'txtl', 'pEdit_alias_goto' , 'pEdit_alias_help' ), + 'on_vacation' => pacol( 1, 0, 1, 'bool', '' , '' , 0 , + /*options*/ '', + /*not_in_db*/ 1 ), + # target (forwardings) # is_mailbox (alias belongs to mailbox) # mailbox_target (is_mailbox and mailbox is (part of the) target @@ -153,10 +157,15 @@ $this->values['goto'] = join(',', $values['goto']); # TODO: add mailbox and vacation aliases } - protected function read_from_db_postprocess($db_result) { + protected function read_from_db_postprocess($db_result) { foreach ($db_result as $key => $value) { $db_result[$key]['goto'] = explode(',', $db_result[$key]['goto']); - } + + $vh = new VacationHandler($this->id); + $vacation_alias = $vh->getVacationAlias(); # TODO: move getVacationAlias to functions.inc.php to avoid the need + # for lots of VacationHandler instances (performance)? + list($db_result[$key]['on_vacation'], $db_result[$key]['goto']) = remove_from_array($db_result[$key]['goto'], $vacation_alias); + } #print_r($db_result); exit; return $db_result; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <chr...@us...> - 2012-04-08 21:18:02
|
Revision: 1349 http://postfixadmin.svn.sourceforge.net/postfixadmin/?rev=1349&view=rev Author: christian_boltz Date: 2012-04-08 21:17:56 +0000 (Sun, 08 Apr 2012) Log Message: ----------- AliasHandler: - add handling for $CONF[alias_control_admin] in init() Modified Paths: -------------- trunk/model/AliasHandler.php Modified: trunk/model/AliasHandler.php =================================================================== --- trunk/model/AliasHandler.php 2012-04-08 20:16:53 UTC (rev 1348) +++ trunk/model/AliasHandler.php 2012-04-08 21:17:56 UTC (rev 1349) @@ -109,6 +109,15 @@ $this->struct['goto_mailbox']['display_in_list'] = 0; } + if ( !$this->new && $this->return['is_mailbox'] && $this->admin_username != ''&& !authentication_has_role('global-admin') ) { + # domain admins are not allowed to change mailbox alias $CONF['alias_control_admin'] = NO + if (!boolconf('alias_control_admin')) { + # TODO: make translateable + $this->errormsg[] = "Domain administrators do not have the ability to edit user's aliases (check config.inc.php - alias_control_admin)"; + return false; + } + } + return $retval; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <chr...@us...> - 2012-04-08 21:25:31
|
Revision: 1351 http://postfixadmin.svn.sourceforge.net/postfixadmin/?rev=1351&view=rev Author: christian_boltz Date: 2012-04-08 21:25:25 +0000 (Sun, 08 Apr 2012) Log Message: ----------- AliasHandler: - if the alias points to the mailbox, don't display the "empty goto" error message Modified Paths: -------------- trunk/model/AliasHandler.php Modified: trunk/model/AliasHandler.php =================================================================== --- trunk/model/AliasHandler.php 2012-04-08 21:18:27 UTC (rev 1350) +++ trunk/model/AliasHandler.php 2012-04-08 21:25:25 UTC (rev 1351) @@ -207,6 +207,11 @@ } if ($values['goto_mailbox']) { $values['goto'][] = $this->id; + + # if the alias points to the mailbox, don't display the "empty goto" error message + if ($this->errormsg['goto'] == Lang::read('pEdit_alias_goto_text_error1') ) { + unset($this->errormsg['goto']); + } } } } @@ -249,8 +254,8 @@ protected function _field_goto($field, $val) { if (count($val) == 0) { - # TODO: empty is ok for mailboxes - mailbox alias is in a separate field - $this->errormsg[$field] = 'empty goto'; # TODO: better error message + # empty is ok for mailboxes - this is checked in setmore() which can clear the error message + $this->errormsg[$field] = Lang::read('pEdit_alias_goto_text_error1'); return false; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <chr...@us...> - 2013-02-04 22:33:48
|
Revision: 1424 http://sourceforge.net/p/postfixadmin/code/1424 Author: christian_boltz Date: 2013-02-04 22:33:45 +0000 (Mon, 04 Feb 2013) Log Message: ----------- AliasHandler.php: - add MailboxAliasConfig() and $called_by_MailboxHandler for special handling if called by MailboxHandler - create_allowed(): always allow creating an alias for a mailbox - remove _missing_on_vacation() and _missing_active() which returned the default from $this->struct. This is now done by default, see previous change in PFAHandler Modified Paths: -------------- trunk/model/AliasHandler.php Modified: trunk/model/AliasHandler.php =================================================================== --- trunk/model/AliasHandler.php 2013-02-04 21:38:59 UTC (rev 1423) +++ trunk/model/AliasHandler.php 2013-02-04 22:33:45 UTC (rev 1424) @@ -9,6 +9,8 @@ class AliasHandler extends PFAHandler { protected $domain_field = 'domain'; + + protected $called_by_MailboxHandler = false; /** * @@ -101,6 +103,12 @@ ); } + /** + * set a special flag if called by MailboxHandler + */ + public function MailboxAliasConfig() { + $this->called_by_MailboxHandler = true; + } /** * AliasHandler needs some special handling in init() and therefore overloads the function. @@ -168,6 +176,8 @@ * check number of existing aliases for this domain - is one more allowed? */ private function create_allowed($domain) { + if ($this->called_by_MailboxHandler) return true; # always allow creating an alias for a mailbox + $limit = get_domain_properties ($domain); if ($limit['aliases'] == 0) return true; # unlimited @@ -311,9 +321,6 @@ } } - protected function _missing_on_vacation($field) { return $this->set_default_value($field); } - protected function _missing_active ($field) { return $this->set_default_value($field); } - /** * on $this->new, set localpart based on address */ @@ -325,7 +332,7 @@ } /** - * on $this->new, set localpart based on address + * on $this->new, set domain based on address */ protected function _missing_domain ($field) { if (isset($this->RAWvalues['address'])) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <chr...@us...> - 2013-05-01 18:59:35
|
Revision: 1459 http://sourceforge.net/p/postfixadmin/code/1459 Author: christian_boltz Date: 2013-05-01 18:59:32 +0000 (Wed, 01 May 2013) Log Message: ----------- AliasHandler: - validate_new_id(): store errormessages in $this->errormsg[$this->id_field] instead of $this->errormsg[] Modified Paths: -------------- trunk/model/AliasHandler.php Modified: trunk/model/AliasHandler.php =================================================================== --- trunk/model/AliasHandler.php 2013-05-01 18:57:33 UTC (rev 1458) +++ trunk/model/AliasHandler.php 2013-05-01 18:59:32 UTC (rev 1459) @@ -138,14 +138,14 @@ protected function validate_new_id() { if ($this->id == '') { - $this->errormsg[] = Lang::read('pCreate_alias_address_text_error1'); + $this->errormsg[$this->id_field] = Lang::read('pCreate_alias_address_text_error1'); return false; } list($local_part,$domain) = explode ('@', $this->id); if(!$this->create_allowed($domain)) { - $this->errormsg[] = Lang::read('pCreate_alias_address_text_error3'); + $this->errormsg[$this->id_field] = Lang::read('pCreate_alias_address_text_error3'); return false; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <chr...@us...> - 2013-06-06 20:40:56
|
Revision: 1472 http://sourceforge.net/p/postfixadmin/code/1472 Author: christian_boltz Date: 2013-06-06 20:40:54 +0000 (Thu, 06 Jun 2013) Log Message: ----------- AliasHandler: - use Config::bool() instead of boolconf() Modified Paths: -------------- trunk/model/AliasHandler.php Modified: trunk/model/AliasHandler.php =================================================================== --- trunk/model/AliasHandler.php 2013-06-05 23:09:10 UTC (rev 1471) +++ trunk/model/AliasHandler.php 2013-06-06 20:40:54 UTC (rev 1472) @@ -126,7 +126,8 @@ if ( !$this->new && $this->return['is_mailbox'] && $this->admin_username != ''&& !authentication_has_role('global-admin') ) { # domain admins are not allowed to change mailbox alias $CONF['alias_control_admin'] = NO - if (!boolconf('alias_control_admin')) { + # TODO: apply the same restriction to superadmins? + if (!Config::bool('alias_control_admin')) { # TODO: make translateable $this->errormsg[] = "Domain administrators do not have the ability to edit user's aliases (check config.inc.php - alias_control_admin)"; return false; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <chr...@us...> - 2013-10-07 20:01:55
|
Revision: 1530 http://sourceforge.net/p/postfixadmin/code/1530 Author: christian_boltz Date: 2013-10-07 20:01:52 +0000 (Mon, 07 Oct 2013) Log Message: ----------- AliasHandler: - initStruct(): set default for 'goto' to empty array() This fixes a problem with the cli when --goto was not specified Modified Paths: -------------- trunk/model/AliasHandler.php Modified: trunk/model/AliasHandler.php =================================================================== --- trunk/model/AliasHandler.php 2013-10-07 18:42:59 UTC (rev 1529) +++ trunk/model/AliasHandler.php 2013-10-07 20:01:52 UTC (rev 1530) @@ -32,7 +32,7 @@ /*not_in_db*/ 1 ), 'domain' => pacol( $this->new, 0, 0, 'enum', '' , '' , '', /*options*/ $this->allowed_domains ), - 'goto' => pacol( 1, 1, 1, 'txtl', 'to' , 'pEdit_alias_help' ), + 'goto' => pacol( 1, 1, 1, 'txtl', 'to' , 'pEdit_alias_help' , array() ), 'is_mailbox' => pacol( 0, 0, 1, 'int', '' , '' , 0 , # technically 'is_mailbox' is bool, but the automatic bool conversion breaks the query. Flagging it as int avoids this problem. # Maybe having a vbool type (without the automatic conversion) would be cleaner - we'll see if we need it. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <chr...@us...> - 2013-11-13 00:40:11
|
Revision: 1574 http://sourceforge.net/p/postfixadmin/code/1574 Author: christian_boltz Date: 2013-11-13 00:40:08 +0000 (Wed, 13 Nov 2013) Log Message: ----------- AliasHandler: - if parent::init() fails, return false early to avoid warnings about undefined $this->result Modified Paths: -------------- trunk/model/AliasHandler.php Modified: trunk/model/AliasHandler.php =================================================================== --- trunk/model/AliasHandler.php 2013-11-12 21:37:08 UTC (rev 1573) +++ trunk/model/AliasHandler.php 2013-11-13 00:40:08 UTC (rev 1574) @@ -114,6 +114,8 @@ $retval = parent::init($id); + if (!$retval) return false; # parent::init() failed, no need to continue + # hide 'goto_mailbox' for non-mailbox aliases # parent::init called view() before, so we can rely on having $this->result filled # (only validate_new_id() is called from parent::init and could in theory change $this->result) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <chr...@us...> - 2014-05-27 21:27:22
|
Revision: 1675 http://sourceforge.net/p/postfixadmin/code/1675 Author: christian_boltz Date: 2014-05-27 21:27:20 +0000 (Tue, 27 May 2014) Log Message: ----------- AliasHandler: - setmore(): use old goto values if no new value is given. Fixes 'Making alias inactive cleans "goto" field' https://sourceforge.net/p/postfixadmin/bugs/316/ Modified Paths: -------------- trunk/model/AliasHandler.php Modified: trunk/model/AliasHandler.php =================================================================== --- trunk/model/AliasHandler.php 2014-05-18 22:30:21 UTC (rev 1674) +++ trunk/model/AliasHandler.php 2014-05-27 21:27:20 UTC (rev 1675) @@ -221,6 +221,10 @@ } else { $oldvalues = $old_ah->result(); + if (!isset($values['goto'])) { # no new value given? + $values['goto'] = $oldvalues['goto']; + } + if (!isset($values['on_vacation'])) { # no new value given? $values['on_vacation'] = $oldvalues['on_vacation']; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <chr...@us...> - 2014-06-06 19:11:17
|
Revision: 1678 http://sourceforge.net/p/postfixadmin/code/1678 Author: christian_boltz Date: 2014-06-06 19:11:05 +0000 (Fri, 06 Jun 2014) Log Message: ----------- AliasHandler: - fix query in getList(), which caused an empty list on some systems https://sourceforge.net/p/postfixadmin/bugs/313/ Fix by VERSATECH SRL, versatechsrl @SF Modified Paths: -------------- trunk/model/AliasHandler.php Modified: trunk/model/AliasHandler.php =================================================================== --- trunk/model/AliasHandler.php 2014-05-29 11:50:49 UTC (rev 1677) +++ trunk/model/AliasHandler.php 2014-06-06 19:11:05 UTC (rev 1678) @@ -283,7 +283,8 @@ public function getList($condition, $limit=-1, $offset=-1) { # only list aliases that do not belong to mailboxes - return parent::getList( "__is_mailbox IS NULL AND ( $condition )", $limit, $offset); + # TODO: breaks if $condition is an array + return parent::getList( "__mailbox_username IS NULL AND ( $condition )", $limit, $offset); } protected function _validate_goto($field, $val) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <chr...@us...> - 2014-10-22 15:12:16
|
Revision: 1700 http://sourceforge.net/p/postfixadmin/code/1700 Author: christian_boltz Date: 2014-10-22 15:12:08 +0000 (Wed, 22 Oct 2014) Log Message: ----------- AliasHandler: - initStruct(): use "SELECT COUNT(1)" instead of "SELECT 1" as workaround for a MariaDB problem (bug?) https://sourceforge.net/p/postfixadmin/bugs/325/ Modified Paths: -------------- trunk/model/AliasHandler.php Modified: trunk/model/AliasHandler.php =================================================================== --- trunk/model/AliasHandler.php 2014-10-20 21:23:54 UTC (rev 1699) +++ trunk/model/AliasHandler.php 2014-10-22 15:12:08 UTC (rev 1700) @@ -40,8 +40,9 @@ /*not_in_db*/ 0, /*dont_write_to_db*/ 1, /*select*/ 'coalesce(__is_mailbox,0) as is_mailbox', + # "COUNT(1)" instead of just "1" needed for MariaDB, see https://sourceforge.net/p/postfixadmin/bugs/325/ /*extrafrom*/ 'LEFT JOIN ( ' . - ' SELECT 1 as __is_mailbox, username as __mailbox_username ' . + ' SELECT COUNT(1) as __is_mailbox, username as __mailbox_username ' . ' FROM ' . table_by_key('mailbox') . ' WHERE username IS NOT NULL ' . ' ) AS __mailbox ON __mailbox_username = address' ), This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |