inital merge of lenix's patch for domain aliasing; I think list-virtual.php needs some attention, but I've run out of time right now; upgrade.php has been updated to create the tables correctly (tested on pgsql and mysql); functionality or php scripts not tested yet

git-svn-id: https://svn.code.sf.net/p/postfixadmin/code/trunk@363 a1433add-5e2c-0410-b055-b7f2511e0802
postfixadmin-2.3
David Goodwin 18 years ago
parent 68a8af7671
commit 370e8fef6c

@ -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

@ -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;

@ -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'] . "<b>$fDelete</b>!</span>";
}
$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")
{

@ -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)

@ -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 '<p>Warning: empty alias_domain parameter.</p>';
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 '<p>WARNING: Problems running alias_domain postdeletion script!</p>';
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');

@ -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'] = '<span class="error_msg">Unable to delete the
$PALANG['pDelete_delete_success'] = '%s deleted.';
$PALANG['pDelete_postdelete_error'] = '<span class="error_msg">Unable to remove mailbox ';
$PALANG['pDelete_domain_error'] = '<span class="error_msg">This domain is not yours ';
$PALANG['pDelete_domain_alias_error'] = '<span class="error_msg">This domain is not yours ';
$PALANG['pDelete_alias_error'] = '<span class="error_msg">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'] = '<br /><span class="error_msg">The ALIAS is not valid!</span>';
@ -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.<br /><span class="error_msg">The TO is not valid!</span>';
$PALANG['pCreate_alias_result_error'] = '<span class="error_msg">Unable to add the alias to the alias table!</span>';
$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.<br />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.<br />One entry per line.';
$PALANG['pEdit_alias_address'] = 'Alias';
@ -108,6 +128,7 @@ $PALANG['pEdit_alias_active'] = 'Active';
$PALANG['pEdit_alias_goto_text_error1'] = '<span class="error_msg">You didn\'t enter anything at To</span>';
$PALANG['pEdit_alias_goto_text_error2'] = '<span class="error_msg">The email address that you have entered is not valid: ';
$PALANG['pEdit_alias_domain_error'] = '<span class="error_msg">This domain is not yours: ';
$PALANG['pEdit_alias_domain_result_error'] = '<span class="error_msg">Unable to modify the alias domain!</span>';
$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'] = '<span class="error_msg">Unable to
$PALANG['pAdminCreate_domain_result_success'] = 'Domain has been added!';
$PALANG['pAdminDelete_domain_error'] = '<span class="error_msg">Unable to remove domain!</span>';
$PALANG['pAdminDelete_alias_domain_error'] = '<span class="error_msg">Unable to remove domain alias!</span>';
$PALANG['pAdminEdit_domain_welcome'] = 'Edit a domain';
$PALANG['pAdminEdit_domain_domain'] = 'Domain';

@ -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)
{

@ -0,0 +1,49 @@
<?php if( !defined('POSTFIXADMIN') ) die( "This file cannot be used standalone." ); ?>
<div id="edit_form">
<form name="alias_domain" method="post">
<table>
<tr>
<td colspan="3"><h3><?php print $PALANG['pCreate_alias_domain_welcome']; ?></h3></td>
</tr>
<tr>
<td><?php print $PALANG['pCreate_alias_domain_alias'] . ":"; ?></td>
<td>
<select class="flat" name="alias_domain">
<?php
foreach ($list_domains as $dom)
{
if (isset($list_aliases[$dom]) || in_array($dom,$list_aliases)) continue;
print "<option value=\"$dom\"".(($fAliasDomain == $dom) ? ' selected' : '').">$dom</option>\n";
}
?>
</select>
<td><?php print $PALANG['pCreate_alias_domain_alias_text']; ?></td>
</tr>
<tr>
<td><?php print $PALANG['pCreate_alias_domain_target'] . ":"; ?></td>
<td>
<select class="flat" name="target_domain">
<?php
foreach ($list_domains as $dom)
{
if (isset($list_aliases[$dom])) continue;
print "<option value=\"$dom\"".(($fTargetDomain == $dom) ? ' selected' : '').">$dom</option>\n";
}
?>
</select>
<td><?php print $PALANG['pCreate_alias_domain_target_text']; ?></td>
</tr>
<tr>
<td><?php print $PALANG['pCreate_alias_domain_active'] . ":"; ?></td>
<td><input class="flat" type="checkbox" name="active" value="1"<?php if ($fActive) { print ' checked'; } ?> /></td>
<td>&nbsp;</td>
</tr>
<tr>
<td colspan="3" class="standout"><?php if ($error) { print '<span class="error_msg">'; } print $tMessage; if ($error) { print '</span>'; } ?></td>
</tr>
<tr>
<td colspan="3" class="hlp_center"><input class="button" type="submit" name="submit" value="<?php print $PALANG['pCreate_alias_domain_button']; ?>" /></td>
</tr>
</table>
</form>
</div>

@ -1,7 +1,7 @@
<?php if( !defined('POSTFIXADMIN') ) die( "This file cannot be used standalone." ); ?>
<div id="overview">
<form name="overview" method="post">
<select name="fDomain" onChange="this.form.submit();">
<form name="overview" method="get">
<select name="domain" onChange="this.form.submit();">
<?php
$file = 'list-virtual.php';
@ -71,6 +71,57 @@ if ($tDisplay_next_show == 1)
}
print "</td></tr></table></div>\n";
if ((sizeof ($tAliasDomains) > 0) || is_array ($tTargetDomain))
{
print "<table id=\"alias_domain_table\">\n";
print " <tr>\n";
print " <td colspan=\"4\"><h3>" . $PALANG['pOverview_alias_domain_title'] . "</h3></td>";
print " </tr>";
if(sizeof ($tAliasDomains) > 0)
{
print " <tr class=\"header\">\n";
print " <td>" . sprintf($PALANG['pOverview_alias_domain_aliases'], $fDomain) . "</td>\n";
print " <td>" . $PALANG['pOverview_alias_domain_modified'] . "</td>\n";
print " <td>" . $PALANG['pOverview_alias_domain_active'] . "</td>\n";
print " <td>&nbsp;</td>\n";
print " </tr>\n";
for ($i = 0; $i < sizeof ($tAliasDomains); $i++)
{
print " <tr class=\"hilightoff\" onMouseOver=\"className='hilighton';\" onMouseOut=\"className='hilightoff';\">\n";
print " <td><a href=\"$file?domain=" . urlencode ($tAliasDomains[$i]['alias_domain']) . "&limit=" . $current_limit . "\">" . $tAliasDomains[$i]['alias_domain'] . "</a></td>\n";
print " <td>" . $tAliasDomains[$i]['modified'] . "</td>\n";
$active = ($tAliasDomains[$i]['active'] == 1) ? $PALANG['YES'] : $PALANG['NO'];
print " <td><a href=\"edit-active.php?alias_domain=true&domain=" . urlencode ($tAliasDomains[$i]['alias_domain']) . "&return=$file" . urlencode ( "?domain=" . $fDomain . "&limit=" . $current_limit) . "\">" . $active . "</a></td>\n";
print " <td><a href=\"delete.php?table=alias_domain&delete=" . urlencode ($tAliasDomains[$i]['alias_domain']) . "&domain=$fDomain" . "\"onclick=\"return confirm ('" . $PALANG['confirm'] . $PALANG['pOverview_get_alias_domains'] . ": ". $tAliasDomains[$i]['alias_domain'] . "')\">" . $PALANG['del'] . "</a></td>\n";
print " </tr>\n";
}
}
if(is_array($tTargetDomain))
{
print " <tr class=\"header\">\n";
print " <td>" . sprintf($PALANG['pOverview_alias_domain_target'], $fDomain) . "</td>\n";
print " <td>" . $PALANG['pOverview_alias_domain_modified'] . "</td>\n";
print " <td>" . $PALANG['pOverview_alias_domain_active'] . "</td>\n";
print " <td>&nbsp;</td>\n";
print " </tr>\n";
print " <tr class=\"hilightoff\" onMouseOver=\"className='hilighton';\" onMouseOut=\"className='hilightoff';\">\n";
print " <td><a href=\"$file?domain=" . urlencode ($tTargetDomain['target_domain']) . "&limit=" . $current_limit . "\">" . $tTargetDomain['target_domain'] . "</a></td>\n";
print " <td>" . $tTargetDomain['modified'] . "</td>\n";
$active = ($tTargetDomain['active'] == 1) ? $PALANG['YES'] : $PALANG['NO'];
print " <td><a href=\"edit-active.php?alias_domain=true&domain=" . urlencode ($fDomain) . "&return=$file" . urlencode ( "?domain=" . $fDomain . "&limit=" . $current_limit) . "\">" . $active . "</a></td>\n";
print " <td><a href=\"delete.php?table=alias_domain&delete=" . urlencode ($fDomain) . "&domain=" . urlencode ($fDomain) . "\" onclick=\"return confirm ('" . $PALANG['confirm'] . $PALANG['pOverview_get_alias_domains'] . ": " . htmlentities ($fDomain) . "')\">" . $PALANG['del'] . "</a></td>\n";
print " </tr>\n";
}
print "</table>\n";
if (!is_array($tTargetDomain))
{
print "<p><a href=\"create-alias-domain.php?target_domain=$fDomain\">" . $PALANG['pMenu_create_alias_domain'] . "</a>\n";
}
}
if (sizeof ($tAlias) > 0)
{
print "<table id=\"alias_table\">\n";

@ -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'");
}

Loading…
Cancel
Save