diff --git a/DOCUMENTS/POSTFIX_CONF.txt b/DOCUMENTS/POSTFIX_CONF.txt index 1781ca7e..2bc1d43c 100644 --- a/DOCUMENTS/POSTFIX_CONF.txt +++ b/DOCUMENTS/POSTFIX_CONF.txt @@ -9,9 +9,14 @@ lookup tables. You can verify that with 'postconf -m' Its generally recommended to use proxy as well (which should also appear in postconf -m) Three main.cf variables are involved: -virtual_alias_maps = proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_maps.cf virtual_mailbox_domains = proxy:mysql:/etc/postfix/sql/mysql_virtual_domains_maps.cf -virtual_mailbox_maps = proxy:mysql:/etc/postfix/sql/mysql_virtual_mailbox_maps.cf +virtual_alias_maps = + proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_maps.cf, + proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_maps.cf, + proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_catchall_maps.cf +virtual_mailbox_maps = + proxy:mysql:/etc/postfix/sql/mysql_virtual_mailbox_maps.cf, + proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_mailbox_maps.cf Where you chose to store the .cf files doesn't really matter, but they will have database passwords stored in plain text so they should be readable only @@ -35,22 +40,35 @@ user = postfix password = password hosts = localhost dbname = postfix -query = SELECT goto FROM alias WHERE address='%s' AND active = '1' +query = SELECT goto FROM alias WHERE address='%s' AND active = '1' #expansion_limit = 100 +mysql_virtual_alias_domain_maps.cf: +user = postfix +password = password +hosts = localhost +dbname = postfix +query = SELECT goto FROM alias,alias_domain WHERE alias_domain.alias_domain = '%d' and alias.address = CONCAT('%u', '@', alias_domain.target_domain) AND alias.active = 1 + +mysql_virtual_alias_domain_catchall_maps.cf: +# handles catch-all settings of target-domain +user = postfix +password = password +hosts = localhost +dbname = postfix +query = SELECT goto FROM alias,alias_domain WHERE alias_domain.alias_domain = '%d' and alias.address = CONCAT('@', alias_domain.target_domain) AND alias.active = 1 mysql_virtual_domains_maps.cf: user = postfix password = password hosts = localhost dbname = postfix -query = SELECT domain FROM domain WHERE domain='%u' +query = SELECT domain FROM domain WHERE domain='%s' AND active = '1' #query = SELECT domain FROM domain WHERE domain='%s' #optional query to use when relaying for backup MX #query = SELECT domain FROM domain WHERE domain='%s' AND backupmx = '0' AND active = '1' #expansion_limit = 100 - mysql_virtual_mailbox_maps.cf: user = postfix password = password @@ -59,6 +77,13 @@ dbname = postfix query = SELECT CONCAT(domain,'/',maildir) FROM mailbox WHERE username='%s' AND active = '1' #expansion_limit = 100 +mysql_virtual_alias_domain_mailbox_maps.cf: +user = postfix +password = password +hosts = localhost +dbname = postfix +query = SELECT CONCAT(domain,'/',maildir) FROM mailbox,alias_domain WHERE alias_domain.alias_domain = '%d' and mailbox.username = CONCAT('%u', '@', alias_domain.target_domain) AND mailbox.active = 1 + ------------------------- More information - HowTo docs that use PostfixAdmin diff --git a/css/default.css b/css/default.css index bf306348..b9209a3e 100644 --- a/css/default.css +++ b/css/default.css @@ -110,6 +110,7 @@ table { position: absolute; width: auto; left: -999em; + background: #FFFFFF; border:2px solid white; border-top:none; } @@ -227,32 +228,32 @@ table { margin: 0 auto; } -#alias_table, #mailbox_table, #overview_table, #log_table, #admin_table { +#alias_domain_table, #alias_table, #mailbox_table, #overview_table, #log_table, #admin_table { width: 750px; margin: 0px auto; border: 1px solid #efefef; } -#alias_table .header, #mailbox_table .header, #overview_table .header, #log_table .header, #admin_table .header { +#alias_domain_table .header, #alias_table .header, #mailbox_table .header, #overview_table .header, #log_table .header, #admin_table .header { line-height: 20px; background: #efefef; color: black; } -#alias_table .hilightoff, #mailbox_table .hilightoff, #overview_table .hilightoff, #log_table .hilightoff, #admin_table .hilighoff { +#alias_domain_table .hilightoff, #alias_table .hilightoff, #mailbox_table .hilightoff, #overview_table .hilightoff, #log_table .hilightoff, #admin_table .hilighoff { background: white; } -#alias_table .hilighton, #mailbox_table .hilighton, #overview_table .hilighton, #log_table .hilighton, #admin_table .hilighton { +#alias_domain_table .hilighton, #alias_table .hilighton, #mailbox_table .hilighton, #overview_table .hilighton, #log_table .hilighton, #admin_table .hilighton { background: #D9FF43; /*#D6FF85;*/ /*#ffdddd;*/ } -#alias_table tr:hover, #mailbox_table tr:hover, #overview_table tr:hover, #log_table tr:hover, #admin_table tr:hover { +#alias_domain_table tr:hover, #alias_table tr:hover, #mailbox_table tr:hover, #overview_table tr:hover, #log_table tr:hover, #admin_table tr:hover { background: #D9FF43; /*#D6FF85;*/ /*#ffdddd;*/ } -#alias_table h3, #mailbox_table h3, #overview_table h3, #log_table h3, #admin_table h3 { +#alias_domain_table h3, #alias_table h3, #mailbox_table h3, #overview_table h3, #log_table h3, #admin_table h3 { background: silver; text-align: left; font-size: 12px; diff --git a/delete.php b/delete.php index ccb7b6d3..0f33e63e 100644 --- a/delete.php +++ b/delete.php @@ -70,6 +70,8 @@ elseif ($fTable == "domain") $result_alias = db_delete ($table_alias,$fWhere,$fDelete); $result_mailbox = db_delete ($table_mailbox,$fWhere,$fDelete); $result_log = db_delete ($table_log,$fWhere,$fDelete); + $result_alias_domain = db_delete ($table_alias_domain,'alias_domain',$fDelete); + $result_target_domain = db_delete ($table_alias_domain,'target_domain',$fDelete); if ($CONF['vacation'] == "YES") { $result_vacation = db_delete ($table_vacation,$fWhere,$fDelete); @@ -88,6 +90,28 @@ elseif ($fTable == "domain") } } # ($fTable == "domain") +elseif ($fTable == "alias_domain") +{ + if (!check_owner ($SESSID_USERNAME, $fDelete)) + { + $error = 1; + $tMessage = $PALANG['pDelete_domain_alias_error'] . "$fDelete!"; + } + + $result = db_delete ($table_alias_domain,'alias_domain',$fDelete); + if (!$result || !alias_domain_postdeletion($fDelete)) + { + $error = 1; + $tMessage = $PALANG['pAdminDelete_alias_domain_error']; + } + else + { + db_log ($SESSID_USERNAME, $fDelete, 'delete_alias_domain', $fDelete); + $url = "list-virtual.php?domain=" . urlencode($_REQUEST['domain']); + header ("Location: $url"); + } +} # ($fTable == "alias_domain") + elseif ($fTable == "alias" or $fTable == "mailbox") { diff --git a/edit-active.php b/edit-active.php index 8df48878..8a8feb45 100644 --- a/edit-active.php +++ b/edit-active.php @@ -34,6 +34,7 @@ $SESSID_USERNAME = authentication_get_username(); if ($_SERVER['REQUEST_METHOD'] == "GET") { + if (isset ($_GET['alias_domain'])) $fAliasDomain = escape_string ($_GET['alias_domain']); if (isset ($_GET['username'])) $fUsername = escape_string ($_GET['username']); if (isset ($_GET['alias'])) $fAlias = escape_string ($_GET['alias']); else $fAlias = escape_string ($_GET['username']); if (isset ($_GET['domain'])) $fDomain = escape_string ($_GET['domain']); @@ -47,6 +48,7 @@ if ($_SERVER['REQUEST_METHOD'] == "GET") else { $setSql=('pgsql'==$CONF['database_type']) ? 'active=NOT active' : 'active=1-active'; + $setSql.=', modified=NOW()'; if ($fUsername != '') { $result = db_query ("UPDATE $table_mailbox SET $setSql WHERE username='$fUsername' AND domain='$fDomain'"); @@ -73,6 +75,19 @@ if ($_SERVER['REQUEST_METHOD'] == "GET") db_log ($SESSID_USERNAME, $fDomain, 'edit_alias_state', $fAlias); } } + if ($fAliasDomain != '') + { + $result = db_query ("UPDATE $table_alias_domain SET $setSql WHERE alias_domain='$fDomain'"); + if ($result['rows'] != 1) + { + $error = 1; + $tMessage = $PALANG['pEdit_alias_domain_result_error']; + } + else + { + db_log ($SESSID_USERNAME, $fDomain, 'edit_alias_domain_state', $fDomain); + } + } } if ($error != 1) diff --git a/functions.inc.php b/functions.inc.php index 40173eae..2d3aaa18 100644 --- a/functions.inc.php +++ b/functions.inc.php @@ -1636,10 +1636,14 @@ function db_update ($table, $where, $values, $timestamp = array()) * Call: db_log (string username, string domain, string action, string data) * Possible actions are: * 'create_alias' + * 'create_alias_domain' + * 'create_mailbox' * 'delete_alias' + * 'delete_alias_domain' * 'delete_mailbox' * 'edit_alias' * 'edit_alias_state' + * 'edit_alias_domain_state' * 'edit_mailbox' * 'edit_mailbox_state' * 'edit_password' @@ -1650,7 +1654,7 @@ function db_log ($username,$domain,$action,$data) global $table_log; $REMOTE_ADDR = $_SERVER['REMOTE_ADDR']; - $action_list = array('create_alias', 'delete_alias', 'edit_alias', 'create_mailbox', 'delete_mailbox', 'edit_mailbox', 'edit_alias_state', 'edit_mailbox_state', 'edit_password'); + $action_list = array('create_alias', 'create_alias_domain', 'delete_alias', 'delete_alias_domain', 'edit_alias', 'create_mailbox', 'delete_mailbox', 'edit_mailbox', 'edit_alias_state', 'edit_alias_domain_state', 'edit_mailbox_state', 'edit_password'); if(!in_array($action, $action_list)) { die("Invalid log action : $action"); // could do with something better? @@ -1813,6 +1817,42 @@ function domain_postdeletion($domain) return TRUE; } +/* + Called after an alias_domain has been deleted in the DBMS. + Returns: boolean. + */ +function alias_domain_postdeletion($alias_domain) +{ + global $CONF; + $confpar='alias_domain_postdeletion_script'; + + if (!isset($CONF[$confpar]) || empty($CONF[$confpar])) + { + return true; + } + + if (empty($alias_domain)) + { + print '

Warning: empty alias_domain parameter.

'; + return false; + } + + $cmdarg1=escapeshellarg($alias_domain); + $command=$CONF[$confpar]." $cmdarg1"; + $retval=0; + $output=array(); + $firstline=''; + $firstline=exec($command,$output,$retval); + if (0!=$retval) + { + error_log("Running $command yielded return value=$retval, first line of output=$firstline"); + print '

WARNING: Problems running alias_domain postdeletion script!

'; + return FALSE; + } + + return TRUE; +} + /* Called by mailbox_postcreation() after a mailbox has been created. Immediately returns, unless configuration indicates @@ -2124,6 +2164,7 @@ function create_admin($fUsername, $fPassword, $fPassword2, $fDomains, $no_genera $table_admin = table_by_key ('admin'); $table_alias = table_by_key ('alias'); +$table_alias_domain = table_by_key ('alias_domain'); $table_domain = table_by_key ('domain'); $table_domain_admins = table_by_key ('domain_admins'); $table_log = table_by_key ('log'); diff --git a/languages/en.lang b/languages/en.lang index d0193c6c..90e8d887 100644 --- a/languages/en.lang +++ b/languages/en.lang @@ -31,6 +31,7 @@ $PALANG['pLogin_login_users'] = 'Users click here to login to the user section.' $PALANG['pMenu_main'] = 'Main'; $PALANG['pMenu_overview'] = 'Overview'; $PALANG['pMenu_create_alias'] = 'Add Alias'; +$PALANG['pMenu_create_alias_domain'] = 'Add Alias Domain'; $PALANG['pMenu_create_mailbox'] = 'Add Mailbox'; $PALANG['pMenu_fetchmail'] = 'Fetch Email'; $PALANG['pMenu_sendmail'] = 'Send Email'; @@ -53,16 +54,21 @@ $PALANG['pOverview_title'] = ':: Defined Domains'; $PALANG['pOverview_up_arrow'] = 'Go Top'; $PALANG['pOverview_right_arrow'] = 'Next Page'; $PALANG['pOverview_left_arrow'] = 'Previous Page'; -$PALANG['pOverview_alias_title'] = ':: Alias'; +$PALANG['pOverview_alias_domain_title'] = ':: Domain Aliases'; +$PALANG['pOverview_alias_title'] = ':: Aliases'; $PALANG['pOverview_mailbox_title'] = ':: Mailboxes'; $PALANG['pOverview_button'] = 'Go'; $PALANG['pOverview_welcome'] = 'Overview for '; +$PALANG['pOverview_alias_domain_aliases'] = 'Alias Domains'; +$PALANG['pOverview_alias_domain_target'] = '%s is an Alias Domain for:'; $PALANG['pOverview_alias_alias_count'] = 'Aliases'; $PALANG['pOverview_alias_mailbox_count'] = 'Mailboxes'; $PALANG['pOverview_alias_address'] = 'From'; $PALANG['pOverview_alias_goto'] = 'To'; $PALANG['pOverview_alias_modified'] = 'Last Modified'; +$PALANG['pOverview_alias_domain_modified'] = 'Last Modified'; $PALANG['pOverview_alias_active'] = 'Active'; +$PALANG['pOverview_alias_domain_active'] = 'Active'; $PALANG['pOverview_alias_edit'] = 'Alias'; $PALANG['and_x_more'] = '[and %s more...]'; $PALANG['pOverview_mailbox_username'] = 'Email'; @@ -76,6 +82,7 @@ $PALANG['pOverview_vacation_option'] = 'Set Vacation'; $PALANG['pOverview_get_domain'] = 'Domain'; $PALANG['pOverview_get_aliases'] = 'Aliases'; +$PALANG['pOverview_get_alias_domains'] = 'Domain Aliases'; $PALANG['pOverview_get_mailboxes'] = 'Mailboxes'; $PALANG['pOverview_get_quota'] = 'Mailbox Quota (MB)'; $PALANG['pOverview_get_modified'] = 'Last Modified'; @@ -84,8 +91,21 @@ $PALANG['pDelete_delete_error'] = 'Unable to delete the $PALANG['pDelete_delete_success'] = '%s deleted.'; $PALANG['pDelete_postdelete_error'] = 'Unable to remove mailbox '; $PALANG['pDelete_domain_error'] = 'This domain is not yours '; +$PALANG['pDelete_domain_alias_error'] = 'This domain is not yours '; $PALANG['pDelete_alias_error'] = 'Unable to delete alias '; +$PALANG['pCreate_alias_domain_welcome'] = 'Mirror addresses of one of your domains to another.'; +$PALANG['pCreate_alias_domain_alias'] = 'Alias Domain'; +$PALANG['pCreate_alias_domain_alias_text'] = 'The domain that mails come in for.'; +$PALANG['pCreate_alias_domain_target'] = 'Target Domain'; +$PALANG['pCreate_alias_domain_target_text'] = 'The domain where mails should go to.'; +$PALANG['pCreate_alias_domain_active'] = 'Active'; +$PALANG['pCreate_alias_domain_button'] = 'Add Alias Domain'; +$PALANG['pCreate_alias_domain_error1'] = 'You are not allowed to create the chosen configuration.'; +$PALANG['pCreate_alias_domain_error2'] = 'The chosen configuration is invalid, please choose a different one!'; +$PALANG['pCreate_alias_domain_error3'] = 'Database insert failed.'; +$PALANG['pCreate_alias_domain_success'] = 'The domain alias has been added to the alias domain table!'; + $PALANG['pCreate_alias_welcome'] = 'Create a new alias for your domain.'; $PALANG['pCreate_alias_address'] = 'Alias'; $PALANG['pCreate_alias_address_text_error1'] = '
The ALIAS is not valid!'; @@ -98,7 +118,7 @@ $PALANG['pCreate_alias_goto_text'] = 'Where the mail needs to be sent to.'; $PALANG['pCreate_alias_goto_text_error'] = 'Where the email needs to go.
The TO is not valid!'; $PALANG['pCreate_alias_result_error'] = 'Unable to add the alias to the alias table!'; $PALANG['pCreate_alias_result_success'] = 'The alias has been added to the alias table!'; -$PALANG['pCreate_alias_catchall_text'] = 'To create a catch-all use an "*" as alias.
For domain to domain forwarding use "*@domain.tld" as to.'; +$PALANG['pCreate_alias_catchall_text'] = 'To create a catch-all use an "*" as alias.'; # XXX don't propagate usage of *@target-domain.com for domain-aliasing any longer $PALANG['pEdit_alias_welcome'] = 'Edit an alias for your domain.
One entry per line.'; $PALANG['pEdit_alias_address'] = 'Alias'; @@ -108,6 +128,7 @@ $PALANG['pEdit_alias_active'] = 'Active'; $PALANG['pEdit_alias_goto_text_error1'] = 'You didn\'t enter anything at To'; $PALANG['pEdit_alias_goto_text_error2'] = 'The email address that you have entered is not valid: '; $PALANG['pEdit_alias_domain_error'] = 'This domain is not yours: '; +$PALANG['pEdit_alias_domain_result_error'] = 'Unable to modify the alias domain!'; $PALANG['pEdit_alias_forward_and_store'] = 'Deliver to the local mailbox.'; $PALANG['pEdit_alias_forward_only'] = 'Forward to given email addresses only.'; $PALANG['pEdit_alias_button'] = 'Edit Alias'; @@ -180,9 +201,12 @@ $PALANG['pViewlog_action_delete_mailbox'] = 'delete mailbox'; $PALANG['pViewlog_action_edit_mailbox'] = 'edit mailbox'; $PALANG['pViewlog_action_edit_mailbox_state'] = 'edit mailbox active'; $PALANG['pViewlog_action_create_alias'] = 'create alias'; +$PALANG['pViewlog_action_create_alias_domain'] = 'create alias domain'; $PALANG['pViewlog_action_delete_alias'] = 'delete alias'; +$PALANG['pViewlog_action_delete_alias_domain'] = 'delete alias domain'; $PALANG['pViewlog_action_edit_alias'] = 'edit alias'; $PALANG['pViewlog_action_edit_alias_state'] = 'edit alias active'; +$PALANG['pViewlog_action_edit_alias_domain_state'] = 'edit alias domain active'; $PALANG['pViewlog_action_edit_password'] = 'change password'; $PALANG['pViewlog_button'] = 'Go'; @@ -260,6 +284,7 @@ $PALANG['pAdminCreate_domain_result_error'] = 'Unable to $PALANG['pAdminCreate_domain_result_success'] = 'Domain has been added!'; $PALANG['pAdminDelete_domain_error'] = 'Unable to remove domain!'; +$PALANG['pAdminDelete_alias_domain_error'] = 'Unable to remove domain alias!'; $PALANG['pAdminEdit_domain_welcome'] = 'Edit a domain'; $PALANG['pAdminEdit_domain_domain'] = 'Domain'; diff --git a/list-virtual.php b/list-virtual.php index e51361da..ac83dc2b 100644 --- a/list-virtual.php +++ b/list-virtual.php @@ -72,12 +72,54 @@ if (!check_owner(authentication_get_username(), $fDomain)) { exit(0); } + +# Alias-Domains +# first try to get a list of other domains pointing +# to this currently chosen one (aka. alias domains) +$query = "SELECT $table_alias_domain.alias_domain,$table_alias_domain.target_domain,$table_alias_domain.modified,$table_alias_domain.active FROM $table_alias_domain WHERE target_domain='$fDomain' ORDER BY $table_alias_domain.alias_domain LIMIT $fDisplay, $page_size"; +if ('pgsql'==$CONF['database_type']) +{ + $query = "SELECT alias_domain,target_domain,extract(epoch from modified) as modified,active FROM $table_alias_domain WHERE target_domain='$fDomain' ORDER BY alias_domain LIMIT $page_size OFFSET $fDisplay"; +} +$result = db_query ($query); +if ($result['rows'] > 0) +{ + while ($row = db_array ($result['result'])) + { + if ('pgsql'==$CONF['database_type']) + { + $row['modified']=gmstrftime('%c %Z',$row['modified']); + $row['active']=('t'==$row['active']) ? 1 : 0; + } + $tAliasDomains[] = $row; + } +} +# now let's see if the current domain itself is an alias for another domain +$query = "SELECT $table_alias_domain.alias_domain,$table_alias_domain.target_domain,$table_alias_domain.modified,$table_alias_domain.active FROM $table_alias_domain WHERE alias_domain='$fDomain'"; +if ('pgsql'==$CONF['database_type']) +{ + $query = "SELECT alias_domain,target_domain,extract(epoch from modified) as modified,active FROM $table_alias_domain WHERE alias_domain='$fDomain'"; +} +$result = db_query ($query); +if ($result['rows'] > 0) +{ + if($row = db_array ($result['result'])) + { + if ('pgsql'==$CONF['database_type']) + { + $row['modified']=gmstrftime('%c %Z',$row['modified']); + $row['active']=('t'==$row['active']) ? 1 : 0; + } + $tTargetDomain = $row; + } +} + + $query = "SELECT $table_alias.address,$table_alias.goto,$table_alias.modified,$table_alias.active FROM $table_alias LEFT JOIN $table_mailbox ON $table_alias.address=$table_mailbox.username WHERE $table_alias.domain='$fDomain' AND $table_mailbox.maildir IS NULL ORDER BY $table_alias.address LIMIT $fDisplay, $page_size"; if ('pgsql'==$CONF['database_type']) { $query = "SELECT address,goto,extract(epoch from modified) as modified,active FROM $table_alias WHERE domain='$fDomain' AND NOT EXISTS(SELECT 1 FROM $table_mailbox WHERE username=$table_alias.address) ORDER BY address LIMIT $page_size OFFSET $fDisplay"; } - $result = db_query ($query); if ($result['rows'] > 0) { diff --git a/templates/create-alias-domain.php b/templates/create-alias-domain.php new file mode 100644 index 00000000..81c4c425 --- /dev/null +++ b/templates/create-alias-domain.php @@ -0,0 +1,49 @@ + +
+
+ + + + + + + + + + + + + + + + + + + + + + + +

+ +
+ +
/> 
'; } print $tMessage; if ($error) { print ''; } ?>
+
+
diff --git a/templates/list-virtual.php b/templates/list-virtual.php index 5cd0b127..dbbffed8 100644 --- a/templates/list-virtual.php +++ b/templates/list-virtual.php @@ -1,7 +1,7 @@
-
-
\n"; + +if ((sizeof ($tAliasDomains) > 0) || is_array ($tTargetDomain)) +{ + print "\n"; + print " \n"; + print " "; + print " "; + if(sizeof ($tAliasDomains) > 0) + { + print " \n"; + print " \n"; + print " \n"; + print " \n"; + print " \n"; + print " \n"; + for ($i = 0; $i < sizeof ($tAliasDomains); $i++) + { + print " \n"; + print " \n"; + print " \n"; + $active = ($tAliasDomains[$i]['active'] == 1) ? $PALANG['YES'] : $PALANG['NO']; + print " \n"; + print " \n"; + print " \n"; + } + } + + if(is_array($tTargetDomain)) + { + print " \n"; + print " \n"; + print " \n"; + print " \n"; + print " \n"; + print " \n"; + print " \n"; + print " \n"; + print " \n"; + $active = ($tTargetDomain['active'] == 1) ? $PALANG['YES'] : $PALANG['NO']; + print " \n"; + print " \n"; + print " \n"; + + } + print "

" . $PALANG['pOverview_alias_domain_title'] . "

" . sprintf($PALANG['pOverview_alias_domain_aliases'], $fDomain) . "" . $PALANG['pOverview_alias_domain_modified'] . "" . $PALANG['pOverview_alias_domain_active'] . " 
" . $tAliasDomains[$i]['alias_domain'] . "" . $tAliasDomains[$i]['modified'] . "" . $active . "" . $PALANG['del'] . "
" . sprintf($PALANG['pOverview_alias_domain_target'], $fDomain) . "" . $PALANG['pOverview_alias_domain_modified'] . "" . $PALANG['pOverview_alias_domain_active'] . " 
" . $tTargetDomain['target_domain'] . "" . $tTargetDomain['modified'] . "" . $active . "" . $PALANG['del'] . "
\n"; + if (!is_array($tTargetDomain)) + { + print "

" . $PALANG['pMenu_create_alias_domain'] . "\n"; + } +} + if (sizeof ($tAlias) > 0) { print "\n"; diff --git a/upgrade.php b/upgrade.php index dc10056b..b482dcca 100644 --- a/upgrade.php +++ b/upgrade.php @@ -534,6 +534,52 @@ function upgrade_4_pgsql() { $result = db_query_parsed("CREATE INDEX alias_address_active ON alias(address,active)"); } +/** + * MySQL only alias_domain table + */ +function upgrade_300_mysql() { + $table_alias_domain = table_by_key('alias_domain'); + // i just duplicate stuff from DATABASE_*.TXT over here? + if( $CONF['database_type'] == 'pgsql' ) { + // check if table already exists, if so, don't recreate it + $sql_table_exists = + "SELECT relname ". + " FROM pg_class ". + " WHERE relname = '$table_alias_domain'"; + $res = db_query( $sql_table_exists ); + if( $res['rows'] == 0 ) { + $sql_table_create = + "CREATE TABLE $table_alias_domain ( ". + " alias_domain character varying(255) NOT NULL REFERENCES domain(domain) ON DELETE CASCADE, ". + " target_domain character varying(255) NOT NULL REFERENCES domain(domain) ON DELETE CASCADE, ". + " created timestamp with time zone default now(), ". + " modified timestamp with time zone default now(), ". + " active boolean NOT NULL default true, ". + " Constraint \"alias_domain_pkey\" Primary Key (\"alias_domain\") ". + ")"; + db_query( $sql_table_create ); + $sql_table_index = + "CREATE INDEX alias_domain_active ON $table_alias_domain(alias_domain,active)"; + db_query( $sql_table_index ); + $sql_table_comment = + "COMMENT ON TABLE $table_alias_domain IS 'Postfix Admin - Domain Aliases'"; + db_query( $sql_table_comment ); + } + } else { // database-type mysql assumed + $sql_table_create = + "CREATE TABLE IF NOT EXISTS `$table_alias_domain` ( ". + " `alias_domain` varchar(255) NOT NULL default '', ". + " `target_domain` varchar(255) NOT NULL default '', ". + " `created` datetime NOT NULL default '0000-00-00 00:00:00', ". + " `modified` datetime NOT NULL default '0000-00-00 00:00:00', ". + " `active` tinyint(1) NOT NULL default '1', ". + " PRIMARY KEY (`alias_domain`), ". + " KEY `active` (`active`), ". + " KEY `target_domain` (`target_domain`) ". + ") TYPE=MyISAM COMMENT='Postfix Admin - Domain Aliases'"; + db_query( $sql_table_create ); + } +} $result = db_query_parsed("ALTER TABLE $table_domain_admins ALTER COLUMN username DROP DEFAULT"); $result = db_query_parsed("ALTER TABLE $table_domain_admins ALTER COLUMN domain DROP DEFAULT"); @@ -864,3 +910,46 @@ function upgrade_344_pgsql() { } } +/** + * Support alias_domain table + */ +function upgrade_362_mysql() { + # Table structure for table alias_domain + # + $table_alias_domain = table_by_key('alias_domain'); + db_query_parsed(" + CREATE TABLE IF NOT EXISTS $table_alias_domain ( + `alias_domain` varchar(255) NOT NULL default '', + `target_domain` varchar(255) NOT NULL default '', + `created` datetime NOT NULL default '0000-00-00 00:00:00', + `modified` datetime NOT NULL default '0000-00-00 00:00:00', + `active` tinyint(1) NOT NULL default '1', + PRIMARY KEY (`alias_domain`), + KEY `active` (`active`), + KEY `target_domain` (`target_domain`) +) TYPE=MyISAM COMMENT='Postfix Admin - Domain Aliases'"); + + +} + +/** + * Support alias_domain table + */ +function upgrade_362_pgsql() { + # Table structure for table alias_domain + $table_alias_domain = table_by_key('alias_domain'); + $table_domain = table_by_key('domain'); + if(_pgsql_object_exists($table_alias_domain)) { + return; + } + db_query_parsed( + "CREATE TABLE $table_alias_domain ( + alias_domain character varying(255) NOT NULL REFERENCES $table_domain(domain) ON DELETE CASCADE, + target_domain character varying(255) NOT NULL REFERENCES $table_domain(domain) ON DELETE CASCADE, + created timestamp with time zone default now(), + modified timestamp with time zone default now(), + active boolean NOT NULL default true, + PRIMARY KEY(alias_domain))"); + db_query_parsed("CREATE INDEX alias_domain_active ON $table_alias_domain(alias_domain,active)"); + db_query_parsed("COMMENT ON TABLE $table_alias_domain IS 'Postfix Admin - Domain Aliases'"); +}