Browse Source

Initial Import in SourceForge

git-svn-id: https://svn.code.sf.net/p/postfixadmin/code/tags/postfixadmin-2.0.2@1 a1433add-5e2c-0410-b055-b7f2511e0802
postfixadmin-2.0.2
Mischa Peters 19 years ago
commit
9a9936f0da
  1. 124
      CHANGELOG.TXT
  2. 133
      DATABASE.TXT
  3. 77
      INSTALL.TXT
  4. 50
      LICENSE.TXT
  5. 102
      TABLE_CHANGES.TXT
  6. 84
      UPGRADE.TXT
  7. 512
      VIRTUAL_VACATION/FILTER_README
  8. 138
      VIRTUAL_VACATION/INSTALL.TXT
  9. 17
      VIRTUAL_VACATION/mail-filter
  10. 107
      VIRTUAL_VACATION/vacation.pl
  11. 8
      admin/.htaccess
  12. 1
      admin/.htpasswd
  13. 81
      admin/backup.php
  14. 99
      admin/create-admin.php
  15. 113
      admin/create-alias.php
  16. 94
      admin/create-domain.php
  17. 177
      admin/create-mailbox.php
  18. 121
      admin/delete.php
  19. 115
      admin/edit-admin.php
  20. 98
      admin/edit-alias.php
  21. 72
      admin/edit-domain.php
  22. 115
      admin/edit-mailbox.php
  23. 3
      admin/index.php
  24. 41
      admin/list-admin.php
  25. 64
      admin/list-domain.php
  26. 105
      admin/list-virtual.php
  27. 63
      admin/viewlog.php
  28. 83
      config.inc.php.sample
  29. 123
      create-alias.php
  30. 188
      create-mailbox.php
  31. 82
      delete.php
  32. 110
      edit-alias.php
  33. 128
      edit-mailbox.php
  34. 523
      functions.inc.php
  35. 17
      index.php
  36. 286
      languages/de.lang
  37. 284
      languages/en.lang
  38. 284
      languages/es.lang
  39. 69
      login.php
  40. 25
      logout.php
  41. 36
      main.php
  42. 113
      overview.php
  43. 87
      password.php
  44. BIN
      postfixadmin.png
  45. 67
      sendmail.php
  46. 184
      stylesheet.css
  47. 71
      templates/admin_create-admin.tpl
  48. 91
      templates/admin_create-domain.tpl
  49. 115
      templates/admin_create-mailbox.tpl
  50. 84
      templates/admin_edit-admin.tpl
  51. 86
      templates/admin_edit-domain.tpl
  52. 32
      templates/admin_list-admin.tpl
  53. 57
      templates/admin_list-domain.tpl
  54. 85
      templates/admin_list-virtual.tpl
  55. 62
      templates/admin_menu.tpl
  56. 57
      templates/create-alias.tpl
  57. 116
      templates/create-mailbox.tpl
  58. 2
      templates/delete.tpl
  59. 49
      templates/edit-alias.tpl
  60. 90
      templates/edit-mailbox.tpl
  61. 12
      templates/footer.tpl
  62. 19
      templates/header.tpl
  63. 69
      templates/login.tpl
  64. 66
      templates/main.tpl
  65. 50
      templates/menu.tpl
  66. 44
      templates/overview-get.tpl
  67. 85
      templates/overview.tpl
  68. 62
      templates/password.tpl
  69. 66
      templates/sendmail.tpl
  70. 50
      templates/users_edit-alias.tpl
  71. 62
      templates/users_login.tpl
  72. 39
      templates/users_main.tpl
  73. 37
      templates/users_menu.tpl
  74. 62
      templates/users_password.tpl
  75. 17
      templates/users_vacation-get.tpl
  76. 42
      templates/users_vacation.tpl
  77. 62
      templates/vcp.tpl
  78. 53
      templates/viewlog.tpl
  79. 98
      users/edit-alias.php
  80. 17
      users/index.php
  81. 69
      users/login.php
  82. 25
      users/logout.php
  83. 36
      users/main.php
  84. 90
      users/password.php
  85. 89
      users/vacation.php
  86. 65
      variables.inc.php
  87. 79
      viewlog.php

124
CHANGELOG.TXT

@ -0,0 +1,124 @@
#############################
# Postfix Admin Release 2.x #
#############################
#
# 2004 (c) High5!
# Created by: Mischa Peters <mischa at high5 dot net>
#
Version 2.0.2 -- 2004/01/06
----------------------------
- Fixed: The body was not included using sendmail.php.
- Fixed: Undefined variables.
- Fixed: Minor HTML cleanup.
- Added: German language. (Thanx Tobias)
- Added: Spanish language. (Thanx Alvaro)
Version 2.0.1 -- 2004/01/04
----------------------------
- Fixed: The language variable caused a problem on some systems.
Version 2.0.0 -- 2004/01/03
----------------------------
- Added: The ability for one domain admin to maintain multiple domains.
- Added: Domain to domain forwarding.
- Added: Mailboxes can now be activated or deactivated.
- Added: Configurable welcome message for new mailboxes.
- Added: Optional sending of welcome message.
- Added: Create alias "To" defaults to current domain.
- Added: Logging of admin / user actions.
- Added: Limit for aliases and/or mailboxes per domain.
- Added: Disable aliases and/or mailboxes per domain.
- Added: Max quota per mailbox per domain.
- Added: Multi-Language support.
- Added: Statistics overview for all domains.
- Added: User .forwarding for mailbox users.
- Added: Logo for Postfix Admin (Thanx Andrew).
- Added: Extra MySQL debugging capabilities.
- Added: Clear text password support.
- Added: PHP crypt() support.
- Changed: Separated logic and SQL from content.
- Changed: config.inc.php doesn't point to example.com anymore.
- Changed: Virtual Vacation no longer requires procmail.
- Changed: Complete re-write.
Version 1.5.4 -- 2003/06/16
----------------------------
- Added: Option for "Back to".
- Added: Option for Vacation module.
- Added: Table declaration for the use of Quota in the INSTALL.TXT.
This requires an additional local delivery agent.
Quotas are not supported by Postfix!
- Changed: The word "View" to "List".
Version 1.5.3 -- 2003/06/06
----------------------------
- Fixed: Even more minor bugs in regards to declaration of variables.
(Thanx Aquilante and Kyle_m)
Version 1.5.2 -- 2003/06/05
----------------------------
- Fixed: Minor bugs in regards to declaration of variables.
Version 1.5.1 -- 2003/06/04
----------------------------
- Added: Optional mailbox per domain directory structure. (Thanx Jim)
- Added: Option to completely control the stored aliases. (Thanx Alex)
- Change: config.inc.php is renamed to config.inc.php.sample. (Thanx Alex)
- Fixed: $PHP_SELF in config.inc.php and my_lib.php. (Thanx Jim)
Version 1.5.0 -- 2003/05/28
----------------------------
- Added: Support for "Back to Main Site"
- Added: config.inc.php as the main configuration file.
- Added: Drop down box for domain selection when adding a new admin.
- Added: Resend of test email to newly created mailbox.
- Added: Mailbox and Aliases count for domainview.
- Added: Change description of domain without deleting the complete
domain.
- Added: Change name of mailbox user without deleting the mailbox.
- Added: Expire headers for unnecessary reloads. (Thanx Alex)
- Removed: Completely removed the site_lib.php.
- Removed: my_lib.php from the admin directory.
- Removed: Symlink to index.php.
- Fix: Code clean up.
- Fix: Minor bugs and cosmetic fixes.
- Fix: Modified check_string() to check numbers and returns false if not
matched. (Thanx btaber)
- Fix: Correct session handling in login.php (Thanx Yen-Wei Liu)
- Fix: Correct deletion of RFC822 email addresses. (Thanx Yen-Wei Liu)
Version 1.4.0 -- 2003/04/07
----------------------------
- Added: When deleting a domain, all aliases and mailboxes for that domain
are also deleted from the database.
- Added: Add standard aliases for every domain that is created.
These aliases can point to the main "local" administrator.
The aliases are configured in the config.php in the admin directory.
- Change: The layout of my_lib.php and site_lib.php have been changed.
- Change: Modifying an alias is now done with TEXTAREA for more
flexibility.
- Fix: Minor bugs and cosmetic fixes.
Version 1.3.8a -- 2003/03/31
----------------------------
- Fix: After deletion of a domain it would not return to the correct page.
Version 1.3.8 -- 2003/03/25
----------------------------
- Added: Admin password change. No longer needed to delete and re-enter
the admin user for a specific domain.
Version 1.3.7 -- 2002/12/24
----------------------------
- Initial public release of Postfix Admin.

133
DATABASE.TXT

@ -0,0 +1,133 @@
#############################
# Postfix Admin Release 2.x #
#############################
#
# 2004 (c) High5!
# Created by: Mischa Peters <mischa at high5 dot net>
#
# This is the complete database structure for Postfix Admin.
# If you are installing from scratch you can use this file otherwise you
# need to use the upgrader that comes with Postfix Admin.
#
# There are 2 entries for a database user in the file.
# One you can use for Postfix and one for Postfix Admin.
#
# You can create the database from the shell with:
#
# mysql -u root [-p] < DATABASE.TXT
#
# Postfix / MySQL
#
USE mysql;
# Postfix user & password
INSERT INTO user (Host, User, Password) VALUES ('localhost','postfix',password('postfix'));
INSERT INTO db (Host, Db, User, Select_priv) VALUES ('localhost','postfix','postfix','Y');
# Postfix Admin user & password
INSERT INTO user (Host, User, Password) VALUES ('localhost','postfixadmin',password('postfixadmin'));
INSERT INTO db (Host, Db, User, Select_priv, Insert_priv, Update_priv, Delete_priv) VALUES ('localhost', 'postfix', 'postfixadmin', 'Y', 'Y', 'Y', 'Y');
FLUSH PRIVILEGES;
GRANT USAGE ON postfix.* TO postfix@localhost;
GRANT SELECT, INSERT, DELETE, UPDATE ON postfix.* TO postfix@localhost;
GRANT USAGE ON postfix.* TO postfixadmin@localhost;
GRANT SELECT, INSERT, DELETE, UPDATE ON postfix.* TO postfixadmin@localhost;
CREATE DATABASE postfix;
USE postfix;
#
# Table structure for table admin
#
CREATE TABLE admin (
username varchar(255) NOT NULL default '',
password 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(4) NOT NULL default '1',
PRIMARY KEY (username),
KEY username (username)
) TYPE=MyISAM COMMENT='Postfix Admin - Virtual Admins';
#
# Table structure for table alias
#
CREATE TABLE alias (
address varchar(255) NOT NULL default '',
goto text NOT NULL,
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(4) NOT NULL default '1',
PRIMARY KEY (address),
KEY address (address)
) TYPE=MyISAM COMMENT='Postfix Admin - Virtual Aliases';
#
# Table structure for table domain
#
CREATE TABLE domain (
domain varchar(255) NOT NULL default '',
description varchar(255) NOT NULL default '',
aliases int(10) NOT NULL default '-1',
mailboxes int(10) NOT NULL default '-1',
maxquota int(10) NOT NULL default '-1',
created datetime NOT NULL default '0000-00-00 00:00:00',
modified datetime NOT NULL default '0000-00-00 00:00:00',
active tinyint(4) NOT NULL default '1',
PRIMARY KEY (domain),
KEY domain (domain)
) TYPE=MyISAM COMMENT='Postfix Admin - Virtual Domains';
#
# Table structure for table domain_admins
#
CREATE TABLE domain_admins (
username varchar(255) NOT NULL default '',
domain varchar(255) NOT NULL default '',
created datetime NOT NULL default '0000-00-00 00:00:00',
active tinyint(4) NOT NULL default '1',
KEY username (username)
) TYPE=MyISAM COMMENT='Postfix Admin - Domain Admins';
#
# Table structure for table log
#
CREATE TABLE log (
timestamp datetime NOT NULL default '0000-00-00 00:00:00',
username varchar(255) NOT NULL default '',
domain varchar(255) NOT NULL default '',
action varchar(255) NOT NULL default '',
data varchar(255) NOT NULL default '',
KEY timestamp (timestamp)
) TYPE=MyISAM COMMENT='Postfix Admin - Log';
#
# Table structure for table mailbox
#
CREATE TABLE mailbox (
username varchar(255) NOT NULL default '',
password varchar(255) NOT NULL default '',
name varchar(255) NOT NULL default '',
maildir varchar(255) NOT NULL default '',
quota int(10) NOT NULL default '-1',
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(4) NOT NULL default '1',
PRIMARY KEY (username),
KEY username (username)
) TYPE=MyISAM COMMENT='Postfix Admin - Virtual Mailboxes';
#
# Table structure for table vacation
#
CREATE TABLE vacation (
email varchar(255) NOT NULL default '',
subject varchar(255) NOT NULL default '',
body text NOT NULL,
cache text NOT NULL,
domain varchar(255) NOT NULL default '',
created datetime NOT NULL default '0000-00-00 00:00:00',
active tinyint(4) NOT NULL default '1',
PRIMARY KEY (email),
KEY email (email)
) TYPE=MyISAM COMMENT='Postfix Admin - Virtual Vacation';

77
INSTALL.TXT

@ -0,0 +1,77 @@
#############################
# Postfix Admin Release 2.x #
#############################
#
# 2004 (c) High5!
# Created by: Mischa Peters <mischa at high5 dot net>
#
REQUIRED!!
----------
- You are using Postfix 2.0 or higher.
- You are using Apache 1.3.27 or higher.
- You are using PHP 4.1 or higher.
- You are using MySQL 3.23.55 or higher.
READ THIS FIRST!
----------------
When this is an upgrade from Postfix Admin 1.5.4 please read UPGRADE.TXT!!
If you used the table structure from the Howto please read the UPGRADE.TXT!!
1. Unarchive new Postfix Admin
------------------------------
Make sure that you are in your WWW directory and then unarchive the
Postfix Admin archive (whatever the filename is):
$ tar -zxvf postfixadmin-2.0.0.tgz
2. Change permissions
----------------------
Since the database password is stored in the config.inc.php it's a good idea
to have Postfix Admin set to the permission of the webserver. In this
example, we assume that user "www" and group "www" are the web server as is
often the case with Apache.
$ cd /usr/local/www
$ chown -R www:www postfixadmin-2.0.0
This is also a good idea for the file permissions.
$ cd /usr/local/www/postfixadmin-2.0.0
$ chmod 640 *.php *.css
$ cd /usr/local/www/postfixadmin-2.0.0/admin/
$ chmod 640 *.php *.css
$ cd /usr/local/www/postfixadmin-2.0.0/users/
$ chmod 640 *.php *.css
$ cd /usr/local/www/postfixadmin-2.0.0/templates/
$ chmod 640 *.php *.css
Additionally, if "chown user:group" doesn't work, you can use "chown user"
and "chgrp group" instead. See the man pages for these commands for more
information.
3. Create the MySQL Tables
--------------------------
In DATABASE.TXT you can find the table structure that you need in order to
configure Postfix Admin and Postfix in general to work with Virtual Domains
and Users
4. Configure
------------
Check the config.inc.php file. There you can specify settings that are
relevant to your setup.
The default password for the admin part of Postfix Admin is admin/admin.
This is specified in the .htpasswd file in the admin directory. Make sure
that the location of the .htpasswd file matches your path.
5. Done
-------
This is all that is needed. Fire up your browser and go to the site that you
specified to host Postfix Admin.

50
LICENSE.TXT

@ -0,0 +1,50 @@
License for Postfix Admin:
The contents of this file are subject to the Mozilla Public License
Version 1.1 (the "License"); you may not use this file except in
compliance with the License. You may obtain a copy of the License at
http://www.mozilla.org/MPL/
Software distributed under the License is distributed on an "AS IS"
basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
License for the specific language governing rights and limitations
under the License.
The Original Code is Postfix Admin.
The Initial Developer of the Original Code is Mischa Peters <mischa@high5.net>.
Portions created by Mischa Peters are Copyright (c) 2002, 2003, 2004.
All Rights Reserved.
Contributor(s):
This project includes work by Mischa Peters and others that is:
Copyright (c) 2002,2003,2004 Mischa Peters
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
Neither the names of the copyright holders nor the names of the XLW
Group and its contributors may be used to endorse or promote products
derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

102
TABLE_CHANGES.TXT

@ -0,0 +1,102 @@
#############################
# Postfix Admin Release 2.x #
#############################
#
# 2004 (c) High5!
# Created by: Mischa Peters <mischa at high5 dot net>
#
# mysql -u root [-p] < TABLE_CHANGES.TXT
#
# Table structure for table domain_admins
#
USE postfix;
CREATE TABLE IF NOT EXISTS domain_admins (
username varchar(255) NOT NULL default '',
domain varchar(255) NOT NULL default '',
created datetime NOT NULL default '0000-00-00 00:00:00',
active tinyint(4) NOT NULL default '1',
KEY username (username)
) TYPE=MyISAM COMMENT='Postfix Admin - Domain Admins';
#
# Table structure for table log
#
CREATE TABLE IF NOT EXISTS log (
timestamp datetime NOT NULL default '0000-00-00 00:00:00',
username varchar(255) NOT NULL default '',
domain varchar(255) NOT NULL default '',
action varchar(255) NOT NULL default '',
data varchar(255) NOT NULL default '',
KEY timestamp (timestamp)
) TYPE=MyISAM COMMENT='Postfix Admin - Log';
#
# Table structure for table vacation
#
CREATE TABLE IF NOT EXISTS vacation (
email varchar(255) NOT NULL default '',
subject varchar(255) NOT NULL default '',
body text NOT NULL,
cache text NOT NULL,
domain varchar(255) NOT NULL default '',
created datetime NOT NULL default '0000-00-00 00:00:00',
active tinyint(4) NOT NULL default '1',
PRIMARY KEY (email),
KEY email (email)
) TYPE=MyISAM COMMENT='Postfix Admin - Virtual Vacation';
#
# Modify table structure for table admin
#
ALTER TABLE admin CHANGE create_date created DATETIME DEFAULT '0000-00-00 00:00:00' NOT NULL;
ALTER TABLE admin CHANGE change_date modified DATETIME DEFAULT '0000-00-00 00:00:00' NOT NULL;
ALTER TABLE admin ADD INDEX (username);
#
# Modify table structure for table alias
#
ALTER TABLE alias CHANGE create_date created DATETIME DEFAULT '0000-00-00 00:00:00' NOT NULL;
ALTER TABLE alias CHANGE change_date modified DATETIME DEFAULT '0000-00-00 00:00:00' NOT NULL;
ALTER TABLE alias ADD INDEX (address);
#
# Modify table structure for table domain
#
ALTER TABLE domain CHANGE create_date created DATETIME DEFAULT '0000-00-00 00:00:00' NOT NULL;
ALTER TABLE domain CHANGE change_date modified DATETIME DEFAULT '0000-00-00 00:00:00' NOT NULL;
ALTER TABLE domain ADD aliases INT(10) DEFAULT '-1' NOT NULL AFTER description;
ALTER TABLE domain ADD mailboxes INT(10) DEFAULT '-1' NOT NULL AFTER aliases;
ALTER TABLE domain ADD maxquota INT(10) DEFAULT '-1' NOT NULL AFTER mailboxes;
ALTER TABLE domain ADD INDEX (domain);
#
# Modify table structure for table mailbox
#
ALTER TABLE mailbox CHANGE create_date created DATETIME DEFAULT '0000-00-00 00:00:00' NOT NULL;
ALTER TABLE mailbox CHANGE change_date modified DATETIME DEFAULT '0000-00-00 00:00:00' NOT NULL;
ALTER TABLE mailbox ADD quota INT(10) DEFAULT '-1' NOT NULL AFTER maildir;
ALTER TABLE mailbox ADD INDEX (username);
#
# Modify table structure for table vacation
#
ALTER TABLE vacation ADD domain VARCHAR(255) DEFAULT '' NOT NULL AFTER cache;
ALTER TABLE vacation ADD created DATETIME DEFAULT '0000-00-00 00:00:00' NOT NULL AFTER domain;
ALTER TABLE vacation ADD active TINYINT(4) DEFAULT '' NOT NULL AFTER created;
ALTER TABLE vacation DROP PRIMARY KEY, ADD PRIMARY KEY(email);
#
# Dumping data for table domain_admins
#
INSERT INTO domain_admins (username,domain,created) SELECT admin.username,admin.domain,domain.created FROM admin LEFT JOIN domain ON domain.domain=admin.domain;
#
# Modify data for table vacation
#
UPDATE vacation SET domain=SUBSTRING_INDEX(email, '@', -1) WHERE email=email;
#
# Modify table structure for table domain
#
ALTER TABLE admin DROP domain;

84
UPGRADE.TXT

@ -0,0 +1,84 @@
#############################
# Postfix Admin Release 2.x #
#############################
#
# 2004 (c) High5!
# Created by: Mischa Peters <mischa at high5 dot net>
#
REQUIRED!!
----------
- You are using Postfix 2.0 or higher.
- You are using Apache 1.3.27 or higher.
- You are using PHP 4.1 or higher.
- You are using MySQL 3.23.55 or higher.
READ THIS FIRST!
----------------
It's recommened that you install Postfix Admin in a new folder and not
on-top of the old install!!
Make sure you backup your database before you run the TABLE_CHANGES.TXT on
your database.
1. Backup the Database
----------------------
When you install from a previous version make sure you backup your database
first. There are a lot of changes in the database structure since Postfix Admin
1.5.4.
$ mysqldump -a -u root -p > /tmp/postfixadmin-backup.sql
2. Unarchive new Postfix Admin
------------------------------
Make sure that you are in your WWW directory and then unarchive the
Postfix Admin archive (whatever the filename is):
$ tar -zxvf postfixadmin-2.0.0.tgz
3. Change permissions
----------------------
Since the database password is stored in the config.inc.php it's a good idea
to have Postfix Admin set to the permission of the webserver. In this
example, we assume that user "www" and group "www" are the web server as is
often the case with Apache.
$ cd /usr/local/www
$ chown -R www:www postfixadmin-2.0.0
This is also a good idea for the file permissions.
$ cd /usr/local/www/postfixadmin-2.0.0
$ chmod 640 *.php *.css
$ cd /usr/local/www/postfixadmin-2.0.0/admin/
$ chmod 640 *.php *.css
$ cd /usr/local/www/postfixadmin-2.0.0/users/
$ chmod 640 *.php *.css
$ cd /usr/local/www/postfixadmin-2.0.0/templates/
$ chmod 640 *.php *.css
Additionally, if "chown user:group" doesn't work, you can use "chown user"
and "chgrp group" instead. See the man pages for these commands for more
information.
4. Modify the MySQL Tables
--------------------------
In TABLE_CHANGES.TXT you can find the table structure that you need in order
to configure Postfix Admin 2.0.0 and Postfix in general to work with Virtual
Domains and Users
5. Configure
------------
Check the config.inc.php file. There you can specify settings that are
relevant to your setup.
6. Done
-------
This is all that is needed. Fire up your browser and go to the site that you
specified to host Postfix Admin.

512
VIRTUAL_VACATION/FILTER_README

@ -0,0 +1,512 @@
Introduction
============
This is a very first implementation of Postfix content filtering.
A Postfix content filter receives unfiltered mail from Postfix and
does one of the following:
- re-injects the mail back into Postfix, perhaps after changing content
- rejects the mail (by sending a suitable status code back to
Postfix) so that it is returned to sender.
- sends the mail somewhere else
This document describes two approaches to content filtering: simple
and advanced. Both filter all the mail by default.
At the end are examples that show how to filter only mail from
users, about using different filters for different domains that
you provide MX service for, and about selective filtering on the
basis of message envelope and/or header/body patterns.
Simple content filtering example
================================
The first example is simple to set up. It uses a shell script that
receives unfiltered mail from the Postfix pipe delivery agent, and
that feeds filtered mail back into the Postfix sendmail command.
Only mail arriving via SMTP will be content filtered.
..................................
: Postfix :
Unfiltered mail----->smtpd \ /local---->Filtered mail
: -cleanup->queue- :
---->pickup / \smtp----->Filtered mail
^ : | :
| : \pipe-----+
| .................................. |
| |
| |
+-Postfix sendmail<----filter script<--+
Mail is filtered by a /some/where/filter program. This can be a
simple shell script like this:
#!/bin/sh
# Localize these.
INSPECT_DIR=/var/spool/filter
SENDMAIL="/usr/sbin/sendmail -i"
# Exit codes from <sysexits.h>
EX_TEMPFAIL=75
EX_UNAVAILABLE=69
# Clean up when done or when aborting.
trap "rm -f in.$$" 0 1 2 3 15
# Start processing.
cd $INSPECT_DIR || { echo $INSPECT_DIR does not exist; exit $EX_TEMPFAIL; }
cat >in.$$ || { echo Cannot save mail to file; exit $EX_TEMPFAIL; }
# filter <in.$$ || { echo Message content rejected; exit $EX_UNAVAILABLE; }
$SENDMAIL "$@" <in.$$
exit $?
The idea is to first capture the message to file and then run the
content through a third-party content filter program.
- If the mail cannot be captured to file, mail delivery is deferred
by terminating with exit status 75 (EX_TEMPFAIL). Postfix will
try again after some delay.
- If the content filter program finds a problem, the mail is bounced
by terminating with exit status 69 (EX_UNAVAILABLE). Postfix
will return the message to the sender as undeliverable.
- If the content is OK, it is given as input to the Postfix sendmail
command, and the exit status of the filter command is whatever
exit status the Postfix sendmail command produces. Postfix will
deliver the message as usual.
I suggest that you run this script by hand until you are satisfied
with the results. Run it with a real message (headers+body) as
input:
% /some/where/filter -f sender recipient... <message-file
Once you're satisfied with the content filtering script:
1 - Create a dedicated local user account called "filter". This
user handles all potentially dangerous mail content - that is
why it should be a separate account. Do not use "nobody", and
most certainly do not use "root" or "postfix". The user will
never log in, and can be given a "*" password and non-existent
shell and home directory.
2 - Create a directory /var/spool/filter that is accessible only
to the "filter" user. This is where the content filtering script
is supposed to store its temporary files.
3 - Define the content filter in the Postfix master file:
/etc/postfix/master.cf:
filter unix - n n - - pipe
flags=Rq user=filter argv=/somewhere/filter -f ${sender} -- ${recipient}
To turn on content filtering for mail arriving via SMTP only, append
"-o content_filter=filter:dummy" to the master.cf entry that defines
the Postfix SMTP server:
/etc/postfix/master.cf:
smtp inet ...stuff... smtpd
-o content_filter=filter:dummy
The content_filter configuration parameter accepts the same syntax
as the right-hand side in a Postfix transport table. Execute
"postfix reload" to complete the change.
To turn off content filtering, edit the master.cf file, remove the
"-o content_filter=filter:dummy" text from the entry that defines
the Postfix SMTP server, and execute another "postfix reload".
With the shell script as shown above you will lose a factor of four
in Postfix performance for transit mail that arrives and leaves
via SMTP. You will lose another factor in transit performance for
each additional temporary file that is created and deleted in the
process of content filtering. The performance impact is less for
mail that is submitted or delivered locally, because such deliveries
are already slower than SMTP transit mail.
Simple content filter limitations
=================================
The problem with content filters like the one above is that they
are not very robust. The reason is that the software does not talk
a well-defined protocol with Postfix. If the filter shell script
aborts because the shell runs into some memory allocation problem,
the script will not produce a nice exit status as defined in the
file /usr/include/sysexits.h. Instead of going to the deferred
queue, mail will bounce. The same lack of robustness can happen
when the content filtering software itself runs into a resource
problem.
Advanced content filtering example
===================================
The second example is more complex, but can give much better
performance, and is less likely to bounce mail when the machine
runs into a resource problem. This approach uses content filtering
software that can receive and deliver mail via SMTP.
Some Anti-virus software is built to receive and deliver mail via
SMTP and is ready to use as an advanced Postfix content filter.
For non-SMTP capable content filtering software, Bennett Todd's
SMTP proxy implements a nice PERL/SMTP content filtering framework.
See: http://bent.latency.net/smtpprox/
The example given here filters all mail, including mail that arrives
via SMTP and mail that is locally submitted via the Postfix sendmail
command.
You can expect to lose about a factor of two in Postfix performance
for transit mail that arrives and leaves via SMTP, provided that
the content filter creates no temporary files. Each temporary file
created by the content filter adds another factor to the performance
loss.
We will set up a content filtering program that receives SMTP mail
via localhost port 10025, and that submits SMTP mail back into
Postfix via localhost port 10026.
..................................
: Postfix :
----->smtpd \ /local---->
: -cleanup->queue- :
---->pickup / ^ | \smtp----->
: | v :
: smtpd smtp :
: 10026 | :
......................|...........
^ |
| v
....|............
: | 10025 :
: filter :
: :
.................
To enable content filtering in this manner, specify in main.cf a
new parameter:
/etc/postfix/main.cf:
content_filter = scan:localhost:10025
This causes Postfix to add one extra content filtering record to
each incoming mail message, with content scan:localhost:10025.
The content filtering records are added by the smtpd and pickup
servers.
When a queue file has content filtering information, the queue
manager will deliver the mail to the specified content filter
regardless of its final destination.
In this example, "scan" is an instance of the Postfix SMTP client
with slightly different configuration parameters. This is how
one would set up the service in the Postfix master.cf file:
/etc/postfix/master.cf:
scan unix - - n - 10 smtp
Instead of a limit of 10 concurrent processes, use whatever process
limit is feasible for your machine. Content inspection software
can gobble up a lot of system resources, so you don't want to have
too much of it running at the same time.
The content filter can be set up with the Postfix spawn service,
which is the Postfix equivalent of inetd. For example, to instantiate
up to 10 content filtering processes on demand:
/etc/postfix/master.cf:
localhost:10025 inet n n n - 10 spawn
user=filter argv=/some/where/filter localhost 10026
"filter" is a dedicated local user account. The user will never
log in, and can be given a "*" password and non-existent shell and
home directory. This user handles all potentially dangerous mail
content - that is why it should be a separate account.
In the above example, Postfix listens on port localhost:10025. If
you want to have your filter listening on port localhost:10025
instead of Postfix, then you must run your filter as a stand-alone
program.
Note: the localhost port 10025 SMTP server filter should announce
itself as "220 localhost...". Postfix aborts delivery when it
connects to an SMTP server that uses the same hostname as Postfix
("host <servername> greeted me with my own hostname"), because that
normally means you have a mail delivery loop problem.
The example here assumes that the /some/where/filter command is a
PERL script. PERL has modules that make talking SMTP easy. The
command-line specifies that mail should be sent back into Postfix
via localhost port 10026.
The simplest content filter just copies SMTP commands and data
between its inputs and outputs. If it has a problem, all it has to
do is to reply to an input of `.' with `550 content rejected', and
to disconnect without sending `.' on the connection that injects
mail back into Postfix.
The job of the content filter is to either bounce mail with a
suitable diagnostic, or to feed the mail back into Postfix through
a dedicated listener on port localhost 10026:
/etc/postfix/master.cf:
localhost:10026 inet n - n - 10 smtpd
-o content_filter=
-o local_recipient_maps=
-o relay_recipient_maps=
-o myhostname=localhost.domain.tld
-o smtpd_helo_restrictions=
-o smtpd_client_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o mynetworks=127.0.0.0/8
Warning for Postfix version 2 users: in this SMTP server after the
content filter, do not override main.cf settings for virtual_alias_maps
or virtual_alias_domains. That would cause mail to be rejected with
"User unknown".
This SMTP server has the same process limit as the "filter" master.cf
entry.
The "-o content_filter=" requests no content filtering for incoming
mail.
The "-o local_recipient_maps=" and "-o relay_recipient_maps=" avoid
unnecessary table lookups.
The "-o myhostname=localhost.domain.tld" avoids false alarms ("host
<servername> greeted me with my own hostname") if your content
filter is based on a proxy that simply relays SMTP commands.
The "-o smtpd_xxx_restrictions" and "-o mynetworks=127.0.0.0/8"
turn off UCE controls that would only waste time here.
Squeezing out more performance
==============================
Many refinements are possible, such as running a specially-configured
smtp delivery agent for feeding mail into the content filter, and
turning off address rewriting before content filtering.
As the example below shows, things quickly become very complex,
because a lot of main.cf like information gets listed in the
master.cf file. This makes the system hard to understand.
Even worse, details change as Postfix evolves and different
configuration parameters are implemented by different programs.
If you need to squeeze out more performance, it is probably simpler
to run multiple Postfix instances, one before and one after the
content filter. That way, each instance can have simple main.cf
and master.cf files, each instance can have its own mail queue,
and the system will be easier to understand.
As before, we will set up a content filtering program that receives
SMTP mail via localhost port 10025, and that submits SMTP mail back
into Postfix via localhost port 10026.
.......................................
: Postfix :
----->smtpd \ :
: -pre-cleanup-\ /local---->
---->pickup / -queue- :
: -cleanup-/ | \smtp----->
: bounces/ ^ v :
: and locally | v :
: forwarded smtpd scan :
: messages 10026 | :
...........................|...........
^ |
| v
....|.............
: | 10025 :
: filter :
: :
..................
To enable content filtering in this manner, specify in main.cf a
new parameter:
/etc/postfix/main.cf:
content_filter = scan:localhost:10025
/etc/postfix/master.cf:
#
# These are the usual input "smtpd" and local "pickup" servers already
# present in master.cf. We add an option to select a non-default
# cleanup service (defined further below).
#
smtp inet n - n - - smtpd
-o cleanup_service_name=pre-cleanup
pickup fifo n - n 60 1 pickup
-o cleanup_service_name=pre-cleanup
#
# ------------------------------------------------------------------
#
# This is the cleanup daemon that handles messages in front of
# the content filter. It does header_checks and body_checks (if
# any), but does no virtual alias or canonical address mapping,
# so that mail passes through your content filter with the original
# recipient addresses mostly intact.
#
# Virtual alias or canonical address mapping happens in the second
# cleanup phase after the content filter. This gives the content_filter
# access to *largely* unmodified addresses for maximum flexibility.
#
# Some sites may specifically want to perform canonical or virtual
# address mapping in front of the content_filter. In that case you
# still have to enable address rewriting in the after-filter cleanup
# instance, in order to correctly process forwarded mail or bounced
# mail.
#
pre-cleanup unix n - n - 0 cleanup
-o canonical_maps=
-o sender_canonical_maps=
-o recipient_canonical_maps=
-o masquerade_domains=
-o virtual_alias_maps=
#
# ------------------------------------------------------------------
#
# This is the delivery agent that injects mail into the content
# filter. It is tuned for low concurrency, because most content
# filters burn CPU and use lots of memory. The process limit of 10
# re-enforces the effect of $default_destination_concurrency_limit.
# Even without an explicit process limit, the concurrency is bounded
# because all messages heading into the content filter have the same
# destination.
#
scan unix - - n - 10 smtp
#
# ------------------------------------------------------------------
#
# This is the SMTP listener that receives filtered messages from
# the content filter. It *MUST* clear the content_filter
# parameter to avoid loops, and use a different hostname to avoid
# triggering the Postfix SMTP loop detection code.
#
# This "smtpd" uses the normal cleanup service which is also used
# for bounces and for internally forwarded mail.
#
# The parameters from mynetworks onward disable all access
# control other than insisting on connections from one of the IP
# addresses of the host. This is typically overkill, but can
# reduce resource usage, if the default restrictions use lots of
# tables.
#
localhost:10026 inet n - n - - smtpd
-o content_filter=
-o myhostname=localhost.domain.tld
-o local_recipient_maps=
-o relay_recipient_maps=
-o mynetworks=127.0.0.0/8
-o mynetworks_style=host
-o smtpd_restriction_classes=
-o smtpd_client_restrictions=
-o smtpd_helo_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
#
# Do not override main.cf settings here for virtual_alias_maps or
# virtual_mailbox_maps. This causes mail to be rejected with "User
# unknown in virtual (alias|mailbox) recipient table".
#
# ------------------------------------------------------------------
#
# This is the normal cleanup daemon for use after content filtering.
# No header or body checks, because those have already been taken
# care of by the pre-cleanup service before the content filter.
#
# The normal cleanup instance does all the virtual alias and canonical
# address mapping that was disabled in the pre-cleanup instance before
# the content filter. This rewriting must be done even when you didn't
# disable address rewriting in the pre-cleanup instance, in order to
# correctly process bounces and locally forwarded mail.
#
cleanup unix n - n - 0 cleanup
-o header_checks=
-o mime_header_checks=
-o nested_header_checks=
-o body_checks=
#
# ------------------------------------------------------------------
#
# The normal "smtp" delivery agent for contrast with "scan".
#
smtp unix - - n - - smtp
The above example causes Postfix to add one content filtering record
to each incoming mail message, with content scan:localhost:10025.
You can use the same syntax as in the right-hand side of a Postfix
transport table. The content filtering records are added by the
smtpd and pickup servers.
The "scan" transport is a dedicated instance of the "smtp" delivery
agent for injecting messages into the SMTP content filter. Using
a dedicated "smtp" transport allows one to tune it for the specific
task of delivering mail to a local content filter (low latency,
low concurrency, throughput dependent on predictably low latency).
See the previous example for setting up the content filter with
the Postfix spawn service; you can of course use any server that
can be run stand-alone outside the Postfix environment.
Filtering mail from outside users only
======================================
The easiest approach is to configure ONE Postfix instance with TWO
SMTP server addresses in master.cf:
- One SMTP server address for inside users only that never invokes
content filtering.
- One SMTP server address for outside users that always invokes
content filtering.
/etc/postfix.master.cf:
# SMTP service for internal users only, no content filtering.
1.2.3.4:smtp inet n - n - - smtpd
-o smtpd_client_restrictions=permit_mynetworks,reject
127.0.0.1:smtp inet n - n - - smtpd
-o smtpd_client_restrictions=permit_mynetworks,reject
# SMTP service for external users, with content filtering.
1.2.3.5:smtp inet n - n - - smtpd
-o content_filter=foo:bar
Getting really nasty
====================
The above filtering configurations are static. Mail that follows
a given path is either always filtered or it is never filtered. As
of Postfix 2.0 you can also turn on content filtering on the fly.
The Postfix UCE features allow you to specify a filtering action
on the fly:
FILTER foo:bar
You can do this in smtpd access maps as well as the cleanup server's
header/body_checks. This feature must be used with great care:
you must disable all the UCE features in the after-filter smtpd
and cleanup daemons or else you will have a content filtering loop.
Limitations:
- There can be only one content filter action per message.
- FILTER actions from smtpd access maps and header/body_checks take
precedence over filters specified with the main.cf content_filter
parameter.
- Only the last FILTER action from smtpd access maps or from
header/body_checks takes effect.
- The same content filter is applied to all the recipients of a
given message.

138
VIRTUAL_VACATION/INSTALL.TXT

@ -0,0 +1,138 @@
##################################################
# Virtual Vacation for Postfix Admin Release 2.x #
##################################################
#
# 2003 (c) High5!
# Created by: Mischa Peters <mischa at high5 dot net>
#
REQUIRED!
---------
You need to have the following installed to be able to use Virtual Vacation.
- Perl5
- Perl DBI
About Virtual Vacation
----------------------
Virual Vacation is today done with a local shell account that can receive
email. The email is then handled by a Perl script which sends the Vacation
message back to the sender.
Install Virtual Vacation
------------------------
1. Create a local account
-------------------------
Create a dedicated local user account called "vacation".
This user handles all potentially dangerous mail content - that is why it
should be a separate account.
Do not use "nobody", and most certainly do not use "root" or "postfix". The
user will never log in, and can be given a "*" password and non-existent
shell and home directory.
This should look like this:
#/etc/passwd
vacation:*:65501:65501::0:0:Virtual Vacation:/nonexistent:/sbin/nologin
2. Create a directory
---------------------
Create a directory, for example /var/spool/vacation, that is accessible
only to the "vacation" user. This is where the content filtering script is
supposed to store its temporary files.
3. Define the filter
--------------------
Define the content filter in the Postfix master file:
#/etc/postfix/master.cf:
filter unix - n n - - pipe
flags=Rq user=filter argv=/somewhere/filter -f ${sender} -- ${recipient}
To turn on content filtering for mail arriving via SMTP only, append
"-o content_filter=filter:dummy" to the master.cf entry that defines
the Postfix SMTP server:
#/etc/postfix/master.cf:
smtp inet ...stuff... smtpd
-o content_filter=filter:dummy
The content_filter configuration parameter accepts the same syntax as the
right-hand side in a Postfix transport table.
Execute "postfix reload" to complete the change.
For more information on filtering in Postfix read the FILTER_README.
4. Copy the files
-----------------
$ cp mail-filter <HOME>/mail-filter
$ cp vacation.pl <HOME>/vacation.pl
$ chown -R vacation:nogroup <HOME>
Which will then look something like:
-rwx------ 1 vacation nogroup 409 Dec 21 00:00 mail-filter*
-rwx------ 1 vacation nogroup 3356 Dec 21 00:00 vacation.pl*
5. Create the table
-------------------
To use Virtual Vacation with Postfix Admin you need to create an extra table
in the database that is used by Postfix Admin.
USE postfix;
#
# Table structure for table vacation
#
CREATE TABLE vacation (
email varchar(255) NOT NULL default '',
subject varchar(255) NOT NULL default '',
body text NOT NULL,
cache text NOT NULL,
domain varchar(255) NOT NULL default '',
created datetime NOT NULL default '0000-00-00 00:00:00',
active tinyint(4) NOT NULL default '1',
PRIMARY KEY (email),
KEY email (email)
) TYPE=MyISAM COMMENT='Postfix Admin - Virtual Vacation';
What do these files do?
-----------------------
mail-filter picks up every single email and pushes it towards the
vacation.pl
vacation.pl then checks the database to see wether a user is on holiday and
what message to send back. Make sure that vacation.pl is able to communicate
to your databse. In the first couple of lines you have to specify the
database, username and password for it.
NOTE: In mail-filter make sure that the path to the vacation usrer and
sendmail are correct!
In vacation.pl make sure that the path to sendmail is correct and that
database information is correct!
I'm in trouble!
---------------
When something is not working there are a couple of files that you can have
a look at. The most important one is your maillog (usually in /var/log/).
Vacation.pl also has some debugging and logging capabilties. Check the top
of vacation.pl.
Done!
-----
When this is all in place you need to have a look at the Postfix Admin
config.inc.php. Here you need to enable Virtual Vacation for the site.

17
VIRTUAL_VACATION/mail-filter

@ -0,0 +1,17 @@
#!/bin/sh
FILTER_DIR=/home/vacation
SENDMAIL="/usr/sbin/sendmail -i"
EX_TEMPFAIL=75
EX_UNAVAILABLE=69
trap "rm -rf in.$$" 0 1 2 3 15
cd $FILTER_DIR || { echo $FILTER_DIR does not exist; exit $EX_TEMPFAIL; }
cat > in.$$ || { echo Cannot save mail to file; exit $EX_TEMPFAIL; }
/home/vacation/vacation.pl < in.$$ || { echo Message content rejected; exit $EX_UNAVAILABLE; }
$SENDMAIL "$@" < in.$$
exit $?

107
VIRTUAL_VACATION/vacation.pl

@ -0,0 +1,107 @@
#!/usr/bin/perl -w
#
# Virtual Vacation
# Version 2.5
# 2003 (c) High5!
# Created by: Mischa Peters <mischa at high5 dot net>
#
use DBI;
$db_name = "postfix";
$db_user = "postfixadmin";
$db_pass = "postfixadmin";
$sendmail = "/usr/sbin/sendmail";
$logfile = ""; # specify a file name here for example: vacation.log
$debugfile = ""; # sepcify a file name here for example: vacation.debug
@input = <>;
for ($i = 0; $i <= $#input; $i++) {
if ($input[$i] =~ /^From: (.*)\n$/) { $from = lc($1); }
if ($input[$i] =~ /^To: (.*)\n$/) { $to = lc($1); }
if ($input[$i] =~ /^Cc: (.*)\n$/) { $cc = lc($1); }
if ($input[$i] =~ /^Subject: (.*)\n$/) { $subject = $1; }
}
$dbh = DBI->connect("DBI:mysql:$db_name", "$db_user", "$db_pass", { RaiseError => 1});
sub do_query {
my ($query) = @_;
my $sth = $dbh->prepare($query) or die "Can't prepare $query: $dbh->errstr\n";
$sth->execute or die "Can't execute the query: $sth->errstr";
$sth;
}
sub do_debug {
my ($to, $from, $subject, $row0, $row1) = @_;
open (DEBUG, ">> $debugfile") or die ("Unable to open debug file");
chop ($date = `date "+%Y/%m/%d %H:%M:%S"`);
print DEBUG "====== $date ======\n";
print DEBUG "$to - $from - $subject\n";
print DEBUG "Out of Office Subject: $row0\n";
print DEBUG "Out of Office Body:\n$row1\n\n";
close (DEBUG);
}
sub do_cache {
my ($to, $from, $cache) = @_;
$query = qq{SELECT cache FROM vacation WHERE email='$to' AND FIND_IN_SET('$from',cache)};
$sth = do_query ($query);
$rv = $sth->rows;
if ($rv == 0) {
$query = qq{UPDATE vacation SET cache=CONCAT(cache,',','$from') WHERE email='$to'};
$sth = do_query ($query);
}
return $rv;
}
sub do_mail {
my ($to, $from, $subject, $body) = @_;
open (MAIL, "| $sendmail -t -f $to") or die ("Unable to open sendmail");
print MAIL "From: $to\n";
print MAIL "To: $from\n";
print MAIL "Subject: $subject\n";
print MAIL "X-Loop: Postfix Vacation\n\n";
print MAIL "$body";
close (MAIL);
}
sub do_log {
my ($to, $from, $subject) = @_;
open (LOG, ">> $logfile") or die ("Unable to open log file");
chop ($date = `date "+%Y/%m/%d %H:%M:%S"`);
print LOG "$date: $to - $from - $subject\n";
close (LOG);
}
@strip_to_array = split(/,/, $to);
if (defined $cc) { @strip_cc_array = split(/,/, $cc); }
push (@strip_to_array, @strip_cc_array);
foreach $strip_element (@strip_to_array) {
if ($strip_element =~ /(\S*@\S*)/) { $strip_element = $1; }
if ($strip_element =~ /\<(.*)\>/) { $strip_element = $1; }
push (@search_array, $strip_element);
}
foreach $search_element (@search_array) {
$query = qq{SELECT email FROM vacation WHERE email='$search_element'};
$sth = do_query ($query);
$rv = $sth->rows;
if ($rv == 1) {
push (@found_array, $search_element);
}
}
foreach $found_element (@found_array) {
$query = qq{SELECT subject,body FROM vacation WHERE email='$found_element'};
$sth = do_query ($query);
$rv = $sth->rows;
if ($rv == 1) {
@row = $sth->fetchrow_array;
if ($debugfile) { do_debug ($found_element, $from, $subject, $row[0], $row[1]); }
if (do_cache ($found_element, $from, $row[2])) { next; }
do_mail ($found_element, $from, $row[0], $row[1]);
if ($logfile) { do_log ($found_element, $from, $subject); }
}
}
1;

8
admin/.htaccess

@ -0,0 +1,8 @@
AuthUserFile /usr/local/www/<domain.tld>/admin/.htpasswd
AuthGroupFile /dev/null
AuthName "Postfix Admin"
AuthType Basic
<limit GET POST>
require valid-user
</limit>

1
admin/.htpasswd

@ -0,0 +1 @@
admin:$apr1$5ip4S/..$cmAmYFlZa1gLHGwFFw2.G0

81
admin/backup.php

@ -0,0 +1,81 @@
<?php
//
// File: backup.php
//
// Template File: -none-
//
// Template Variables:
//
// -none-
//
// Form POST \ GET Variables:
//
// -none-
//
require ("../config.inc.php");
require ("../functions.inc.php");
include ("../languages/" . $CONF['language'] . ".lang");
if ($_SERVER['REQUEST_METHOD'] == "GET")
{
$path = "/tmp/";
$filename = "postfixadmin-" . date ("Ymd") . ".sql";
$backup = $path . $filename;
$header = "#\n# Postfix Admin $version\n# Date: " . date ("D M j G:i:s T Y") . "\n#\n";
if (!$fh = fopen ($backup, 'w'))
{
$tMessage = "<font color=\"red\">Cannot open file ($backup)</font>";
include ("../templates/header.tpl");
include ("../templates/admin_menu.tpl");
include ("../templates/delete.tpl");
include ("../templates/footer.tpl");
}
else
{
fwrite ($fh, $header);
$tables = array('admin','alias','domain','domain_admins','log','mailbox','vacation');
for ($i = 0 ; $i < sizeof ($tables) ; ++$i)
{
$result = db_query ("SHOW CREATE TABLE $tables[$i]");
if ($result['rows'] > 0)
{
while ($row = mysql_fetch_array ($result['result']))
{
fwrite ($fh, "$row[1]\n\n");
}
}
}
for ($i = 0 ; $i < sizeof ($tables) ; ++$i)
{
$result = db_query ("SELECT * FROM $tables[$i]");
if ($result['rows'] > 0)
{
while ($row = mysql_fetch_assoc ($result['result']))
{
foreach ($row as $key=>$val)
{
$fields[] = $key;
$values[] = $val;
}
fwrite ($fh, "INSERT INTO ". $tables[$i] . " (". implode (',',$fields) . ") VALUES ('" . implode ('\',\'',$values) . "')\n");
$fields = "";
$values = "";
}
}
}
}
header ("Content-Type: application/octet-stream");
header ("Content-Disposition: attachment; filename=\"$filename\"");
header ("Content-Transfer-Encoding: binary");
header ("Content-Length: " . filesize("$backup"));
header ("Content-Description: Postfix Admin");
$download_backup = fopen ("$backup", "r");
fpassthru ($download_backup);
}
?>

99
admin/create-admin.php

@ -0,0 +1,99 @@
<?php
//
// File: create-admin.php
//
// Template File: admin_create-admin.tpl
//
//
// Template Variables:
//
// tMessage
// tUsername
// tDomains
//
// Form POST \ GET Variables:
//
// fUsername
// fPassword
// fPassword2
// fDomains
//
require ("../variables.inc.php");
require ("../config.inc.php");
require ("../functions.inc.php");
include ("../languages/" . $CONF['language'] . ".lang");
$list_domains = list_domains ();
if ($_SERVER['REQUEST_METHOD'] == "GET")
{
$pAdminCreate_admin_username_text = $PALANG['pAdminCreate_admin_username_text'];
$tDomains[] = "";
include ("../templates/header.tpl");
include ("../templates/admin_menu.tpl");
include ("../templates/admin_create-admin.tpl");
include ("../templates/footer.tpl");
}
if ($_SERVER['REQUEST_METHOD'] == "POST")
{
$fUsername = $_POST['fUsername'];
$fPassword = $_POST['fPassword'];
$fPassword2 = $_POST['fPassword2'];
$fDomains = $_POST['fDomains'];
if (!check_email ($fUsername))
{
$error = 1;
$tUsername = $_POST['fUsername'];
$tDomains = $_POST['fDomains'];
$pAdminCreate_admin_username_text = $PALANG['pAdminCreate_admin_username_text_error1'];
}
if (empty ($fUsername) or admin_exist ($fUsername))
{
$error = 1;
$tUsername = $_POST['fUsername'];
$tDomains = $_POST['fDomains'];
$pAdminCreate_admin_username_text = $PALANG['pAdminCreate_admin_username_text_error2'];
}
if (empty ($fPassword) or ($fPassword != $fPassword2))
{
$error = 1;
$tUsername = $_POST['fUsername'];
$tDomains = $_POST['fDomains'];
$pAdminCreate_admin_username_text = $PALANG['pAdminCreate_admin_username_text'];
$pAdminCreate_admin_password_text = $PALANG['pAdminCreate_admin_password_text_error'];
}
if ($error != 1)
{
$password = md5crypt("$fPassword");
$result = db_query ("INSERT INTO admin (username,password,created,modified) VALUES ('$fUsername','$password',NOW(),NOW())");
if ($result['rows'] != 1)
{
$tMessage = $PALANG['pAdminCreate_admin_result_error'] . "<br />($fUsername)<br />";
}
else
{
if (sizeof ($fDomains) > 0)
{
for ($i = 0; $i < sizeof ($fDomains); $i++)
{
$domain = $fDomains[$i];
$result = db_query ("INSERT INTO domain_admins (username,domain,created) VALUES ('$fUsername','$domain',NOW())");
}
}
$tMessage = $PALANG['pAdminCreate_admin_result_succes'] . "<br />($fUsername)</br />";
}
}
include ("../templates/header.tpl");
include ("../templates/admin_menu.tpl");
include ("../templates/admin_create-admin.tpl");
include ("../templates/footer.tpl");
}
?>

113
admin/create-alias.php

@ -0,0 +1,113 @@
<?php
//
// File: create-alias.php
//
// Template File: create-alias.tpl
//
// Template Variables:
//
// tMessage
// tAddress
// tGoto
// tDomain
//
// Form POST \ GET Variables:
//
// fAddress
// fGoto
// fDomain
//
require ("../variables.inc.php");
require ("../config.inc.php");
require ("../functions.inc.php");
include ("../languages/" . $CONF['language'] . ".lang");
$list_domains = list_domains ();
if ($_SERVER['REQUEST_METHOD'] == "GET")
{
$pCreate_alias_goto_text = $PALANG['pCreate_alias_goto_text'];
include ("../templates/header.tpl");
include ("../templates/admin_menu.tpl");
include ("../templates/create-alias.tpl");
include ("../templates/footer.tpl");
}
if ($_SERVER['REQUEST_METHOD'] == "POST")
{
$pCreate_alias_goto_text = $PALANG['pCreate_alias_goto_text'];
$fAddress = $_POST['fAddress'] . "@" . $_POST['fDomain'];
$fGoto = $_POST['fGoto'];
$fDomain = $_POST['fDomain'];
if (!preg_match ('/@/',$fGoto))
{
$fGoto = $fGoto . "@" . $_POST['fDomain'];
}
if (!check_alias ($fDomain))
{
$error = 1;
$tAddress = $_POST['fAddress'];
$tGoto = $fGoto;
$tDomain = $fDomain;
$pCreate_alias_address_text = $PALANG['pCreate_alias_address_text_error3'];
}
if (empty ($fAddress) or !check_email ($fAddress))
{
$error = 1;
$tAddress = $_POST['fAddress'];
$tGoto = $fGoto;
$tDomain = $fDomain;
$pCreate_alias_address_text = $PALANG['pCreate_alias_address_text_error1'];
}
if (empty ($fGoto) or !check_email ($fGoto))
{
$error = 1;
$tAddress = $_POST['fAddress'];
$tGoto = $fGoto;
$tDomain = $fDomain;
$pCreate_alias_goto_text = $PALANG['pCreate_alias_goto_text_error'];
}
if ($_POST['fAddress'] == "*") $fAddress = "@" . $_POST['fDomain'];
$result = db_query ("SELECT * FROM alias WHERE address='$fAddress'");
if ($result['rows'] == 1)
{
$error = 1;
$tAddress = $_POST['fAddress'];
$tGoto = $fGoto;
$tDomain = $fDomain;
$pCreate_alias_address_text = $PALANG['pCreate_alias_address_text_error2'];
}
if ($error != 1)
{
if (preg_match ('/^\*@(.*)$/', $fGoto, $match)) $fGoto = "@" . $match[1];
$result = db_query ("INSERT INTO alias (address,goto,domain,created,modified) VALUES ('$fAddress','$fGoto','$fDomain',NOW(),NOW())");
if ($result['rows'] != 1)
{
$tDomain = $fDomain;
$tMessage = $PALANG['pCreate_alias_result_error'] . "<br />($fAddress -> $fGoto)<br />";
}
else
{
db_log ("site admin", $fDomain, "create alias", "$fAddress -> $fGoto");
$tDomain = $fDomain;
$tMessage = $PALANG['pCreate_alias_result_succes'] . "<br />($fAddress -> $fGoto)</br />";
}
}
include ("../templates/header.tpl");
include ("../templates/admin_menu.tpl");
include ("../templates/create-alias.tpl");
include ("../templates/footer.tpl");
}
?>

94
admin/create-domain.php

@ -0,0 +1,94 @@
<?php
//
// File: create-domain.php
//
// Template File: admin_create-domain.tpl
//
// Template Variables:
//
// tMessage
// tDomain
// tDescription
// tAliases
// tMailboxes
// tMaxquota
// tDefaultaliases
//
// Form POST \ GET Variables:
//
// fDomain
// fDescription
// fAliases
// fMailboxes
// fMaxquota
// fDefaultaliases
//
require ("../variables.inc.php");
require ("../config.inc.php");
require ("../functions.inc.php");
include ("../languages/" . $CONF['language'] . ".lang");
if ($_SERVER['REQUEST_METHOD'] == "GET")
{
$tAliases = $CONF['aliases'];
$tMailboxes = $CONF['mailboxes'];
$tMaxquota = $CONF['maxquota'];
include ("../templates/header.tpl");
include ("../templates/admin_menu.tpl");
include ("../templates/admin_create-domain.tpl");
include ("../templates/footer.tpl");
}
if ($_SERVER['REQUEST_METHOD'] == "POST")
{
$fDomain = $_POST['fDomain'];
$fDescription = $_POST['fDescription'];
$fAliases = $_POST['fAliases'];
$fMailboxes = $_POST['fMailboxes'];
if (isset ($_POST['fMaxquota'])) $fMaxquota = $_POST['fMaxquota'];
if (isset ($_POST['fDefaultaliases'])) $fDefaultaliases = $_POST['fDefaultaliases'];
if (empty ($fDomain) or domain_exist ($fDomain))
{
$error = 1;
$tDomain = $_POST['fDomain'];
$tDescription = $_POST['fDescription'];
$tAliases = $_POST['fAliases'];
$tMailboxes = $_POST['fMailboxes'];
$tMaxquota = $_POST['fMaxquota'];
$tDefaultaliases = $_POST['fDefaultaliases'];
$pAdminCreate_domain_domain_text = $PALANG['pAdminCreate_domain_domain_text_error'];
}
if ($error != 1)
{
$tAliases = $CONF['aliases'];
$tMailboxes = $CONF['mailboxes'];
$tMaxquota = $CONF['maxquota'];
$result = db_query ("INSERT INTO domain (domain,description,aliases,mailboxes,maxquota,created,modified) VALUES ('$fDomain','$fDescription','$fAliases','$fMailboxes','$fMaxquota',NOW(),NOW())");
if ($result['rows'] != 1)
{
$tMessage = $PALANG['pAdminCreate_domain_result_error'] . "<br />($fDomain)<br />";
}
else
{
if ($fDefaultaliases == "on")
{
foreach ($CONF['default_aliases'] as $address=>$goto)
{
$address = $address . "@" . $fDomain;
$result = db_query ("INSERT INTO alias (address,goto,domain,created,modified) VALUES ('$address','$goto','$fDomain',NOW(),NOW())");
}
}
$tMessage = $PALANG['pAdminCreate_domain_result_succes'] . "<br />($fDomain)</br />";
}
}
include ("../templates/header.tpl");
include ("../templates/admin_menu.tpl");
include ("../templates/admin_create-domain.tpl");
include ("../templates/footer.tpl");
}
?>

177
admin/create-mailbox.php

@ -0,0 +1,177 @@
<?php
//
// File: create-mailbox.php
//
// Template File: create-mailbox.tpl
//
// Template Variables:
//
// tMessage
// tUsername
// tName
// tQuota
// tDomain
//
// Form POST \ GET Variables:
//
// fUsername
// fPassword
// fPassword2
// fName
// fQuota
// fDomain
// fActive
// fMail
//
require ("../variables.inc.php");
require ("../config.inc.php");
require ("../functions.inc.php");
include ("../languages/" . $CONF['language'] . ".lang");
$list_domains = list_domains ();
if ($_SERVER['REQUEST_METHOD'] == "GET")
{
$tQuota = $CONF['maxquota'];
$pCreate_mailbox_password_text = $PALANG['pCreate_mailbox_password_text'];
$pCreate_mailbox_name_text = $PALANG['pCreate_mailbox_name_text'];
$pCreate_mailbox_quota_text = $PALANG['pCreate_mailbox_quota_text'];
include ("../templates/header.tpl");
include ("../templates/admin_menu.tpl");
include ("../templates/create-mailbox.tpl");
include ("../templates/footer.tpl");
}
if ($_SERVER['REQUEST_METHOD'] == "POST")
{
$pCreate_mailbox_password_text = $PALANG['pCreate_mailbox_password_text'];
$pCreate_mailbox_name_text = $PALANG['pCreate_mailbox_name_text'];
$pCreate_mailbox_quota_text = $PALANG['pCreate_mailbox_quota_text'];
$fUsername = $_POST['fUsername'] . "@" . $_POST['fDomain'];
$fPassword = $_POST['fPassword'];
$fPassword2 = $_POST['fPassword2'];
$fName = $_POST['fName'];
$fDomain = $_POST['fDomain'];
if (isset ( $_POST['fQuota'])) $fQuota = $_POST['fQuota'];
if (isset ( $_POST['fActive'])) $fActive = $_POST['fActive'];
if (isset ( $_POST['fMail'])) $fMail = $_POST['fMail'];
if (!check_mailbox ($fDomain))
{
$error = 1;
$tUsername = $_POST['fUsername'];
$tName = $fName;
$tQuota = $fQuota;
$tDomain = $fDomain;
$pCreate_mailbox_username_text = $PALANG['pCreate_mailbox_username_text_error3'];
}
if (empty ($fUsername) or !check_email ($fUsername))
{
$error = 1;
$tUsername = $_POST['fUsername'];
$tName = $fName;
$tQuota = $fQuota;
$tDomain = $fDomain;
$pCreate_mailbox_username_text = $PALANG['pCreate_mailbox_username_text_error1'];
}
if (empty ($fPassword) or ($fPassword != $fPassword2))
{
$error = 1;
$tUsername = $_POST['fUsername'];
$tName = $fName;
$tQuota = $fQuota;
$tDomain = $fDomain;
$pCreate_mailbox_password_text = $PALANG['pCreate_mailbox_password_text_error'];
}
if (!check_quota ($fQuota, $fDomain))
{
$error = 1;
$tUsername = $_POST['fUsername'];
$tName = $fName;
$tQuota = $fQuota;
$tDomain = $fDomain;
$pCreate_mailbox_quota_text = $PALANG['pCreate_mailbox_quota_text_error'];
}
$result = db_query ("SELECT * FROM alias WHERE address='$fUsername'");
if ($result['rows'] == 1)
{
$error = 1;
$tUsername = $_POST['fUsername'];
$tName = $fName;
$tQuota = $fQuota;
$tDomain = $fDomain;
$pCreate_mailbox_username_text = $PALANG['pCreate_mailbox_username_text_error2'];
}
if ($error != 1)
{
$password = pacrypt ($fPassword);
if ($CONF['domain_path'] == "YES")
{
if ($CONF['domain_in_mailbox'] == "YES")
{
$maildir = $fDomain . "/" . $fUsername . "/";
}
else
{
$maildir = $fDomain . "/" . $_POST['fUsername'] . "/";
}
}
else
{
$maildir = $fUsername . "/";
}
if (!empty ($fQuota)) $quota = $fQuota . "000000";
if ($fActive == "on") $fActive = 1;
$result = db_query ("INSERT INTO alias (address,goto,domain,created,modified,active) VALUES ('$fUsername','$fUsername','$fDomain',NOW(),NOW(),'$fActive')");
if ($result['rows'] != 1)
{
$tDomain = $fDomain;
$tMessage = $PALANG['pAlias_result_error'] . "<br />($fUsername -> $fUsername)</br />";
}
$result = db_query ("INSERT INTO mailbox (username,password,name,maildir,quota,domain,created,modified,active) VALUES ('$fUsername','$password','$fName','$maildir','$quota','$fDomain',NOW(),NOW(),'$fActive')");
if ($result['rows'] != 1)
{
$tDomain = $fDomain;
$tMessage .= $PALANG['pCreate_mailbox_result_error'] . "<br />($fUsername)<br />";
}
else
{
db_log ("site admin", $fDomain, "create mailbox", "$fUsername");
$tDomain = $fDomain;
$tMessage = $PALANG['pCreate_mailbox_result_succes'] . "<br />($fUsername)</br />";
$tQuota = $CONF['maxquota'];
if ($fMail == "on") {
if (!mail ($fUsername, $PALANG['pSendmail_subject_text'], $PALANG['pSendmail_body_text'], "From:" . "Site Admin"))
{
$tMessage .= "<br />" . $PALANG['pSendmail_result_error'] . "<br />";
}
else
{
$tMessage .= "<br />" . $PALANG['pSendmail_result_succes'] . "<br />";
}
}
}
}
include ("../templates/header.tpl");
include ("../templates/admin_menu.tpl");
include ("../templates/create-mailbox.tpl");
include ("../templates/footer.tpl");
}
?>

121
admin/delete.php

@ -0,0 +1,121 @@
<?php
//
// File: delete.php
//
// Template File: delete.tpl
//
// Template Variables:
//
// tMessage
//
// Form POST \ GET Variables:
//
// fTable
// fWhere
// fDelete
// fDomain
//
require ("../variables.inc.php");
require ("../config.inc.php");
require ("../functions.inc.php");
include ("../languages/" . $CONF['language'] . ".lang");
if ($_SERVER['REQUEST_METHOD'] == "GET")
{
if (isset ($_GET['table'])) $fTable = $_GET['table'];
if (isset ($_GET['where'])) $fWhere = $_GET['where'];
if (isset ($_GET['delete'])) $fDelete = $_GET['delete'];
if (isset ($_GET['domain'])) $fDomain = $_GET['domain'];
if (empty ($fTable))
{
$error = 1;
}
if ($fTable == "domain")
{
$result_domain = db_delete ("domain",$fWhere,$fDelete);
$result_domain_admins = db_delete ("domain_admins",$fWhere,$fDelete);
$result_alias = db_delete ("alias",$fWhere,$fDelete);
$result_mailbox = db_delete ("mailbox",$fWhere,$fDelete);
$result_log = db_delete ("log",$fWhere,$fDelete);
$result_vacation = db_delete ("vacation",$fWhere,$fDelete);
if (!($result_domain == 1) and ($result_domain_admins >= 0) and ($result_alias >= 0) and ($result_mailbox >= 0) and ($result_vacation >= 0))
{
$error = 1;
$tMessage = $PALANG['pAdminDelete_domain_error'];
}
else
{
$url = "list-domain.php";
}
}
if ($fTable == "admin")
{
$result_admin = db_delete ("admin",$fWhere,$fDelete);
$result_domain_admins = db_delete ("domain_admins",$fWhere,$fDelete);
if (!($result_admin == 1) and ($result_domain_admins >= 0))
{
$error = 1;
$tMessage = $PALANG['pAdminDelete_admin_error'];
}
else
{
$url = "list-admin.php";
}
}
if ($fTable == "alias" or $fTable == "mailbox")
{
$result = db_query ("DELETE FROM alias WHERE address='$fDelete' AND domain='$fDomain'");
if ($result['rows'] != 1)
{
$error = 1;
$tMessage = $PALANG['pDelete_delete_error'] . "<b>$fDelete</b> (alias)!</font>";
}
else
{
$url = "list-virtual.php?domain=$fDomain";
db_log ("site admin", $fDomain, "delete alias", $fDelete);
}
$result = db_query ("SELECT * FROM mailbox WHERE username='$fDelete' AND domain='$fDomain'");
if ($result['rows'] == 1)
{
$result = db_query ("DELETE FROM mailbox WHERE username='$fDelete' AND domain='$fDomain'");
if ($result['rows'] != 1)
{
$error = 1;
$tMessage = $PALANG['pDelete_delete_error'] . "<b>$fDelete</b> (mailbox)!</font>";
}
else
{
$url = "list-virtual.php?domain=$fDomain";
db_log ("site admin", $fDomain, "delete mailbox", $fDelete);
}
}
}
if ($error != 1)
{
header ("Location: $url");
exit;
}
include ("../templates/header.tpl");
include ("../templates/admin_menu.tpl");
include ("../templates/delete.tpl");
include ("../templates/footer.tpl");
}
if ($_SERVER['REQUEST_METHOD'] == "POST")
{
include ("../templates/header.tpl");
include ("../templates/menu.tpl");
include ("../templates/delete.tpl");
include ("../templates/footer.tpl");
}
?>

115
admin/edit-admin.php

@ -0,0 +1,115 @@
<?php
//
// File: edit-admin.php
//
// Template File: admin_edit-admin.tpl
//
// Template Variables:
//
// tDescription
// tAliases
// tMailboxes
// tMaxquota
// tActive
//
// Form POST \ GET Variables:
//
// fDescription
// fAliases
// fMailboxes
// fMaxquota
// fActive
//
require ("../variables.inc.php");
require ("../config.inc.php");
require ("../functions.inc.php");
include ("../languages/" . $CONF['language'] . ".lang");
if ($_SERVER['REQUEST_METHOD'] == "GET")
{
$username = $_GET['username'];
$list_domains = list_domains ();
$tDomains = list_domains_for_admin ($username);
$result = db_query ("SELECT * FROM admin WHERE username='$username'");
if ($result['rows'] == 1)
{
$row = mysql_fetch_array ($result['result']);
$tActive = $row['active'];
}
include ("../templates/header.tpl");
include ("../templates/admin_menu.tpl");
include ("../templates/admin_edit-admin.tpl");
include ("../templates/footer.tpl");
}
if ($_SERVER['REQUEST_METHOD'] == "POST")
{
$username = $_GET['username'];
$fPassword = $_POST['fPassword'];
$fPassword2 = $_POST['fPassword2'];
$fActive = $_POST['fActive'];
$fDomains = $_POST['fDomains'];
$list_domains = list_domains ();
if ($fPassword != $fPassword2)
{
$error = 1;
$tActive = $_POST['fActive'];
$tDomains = $_POST['fDomains'];
$pAdminEdit_admin_password_text = $PALANG['pAdminEdit_admin_password_text_error'];
}
if ($error != 1)
{
if (empty ($fPassword) and empty ($fPassword2))
{
if ($fActive == "on") $fActive = 1;
$result = db_query ("UPDATE admin SET modified=NOW(),active='$fActive' WHERE username='$username'");
}
else
{
$password = md5crypt ($fPassword);
if ($fActive == "on") $fActive = 1;
$result = db_query ("UPDATE admin SET password='$password',modified=NOW(),active='$fActive' WHERE username='$username'");
}
if (sizeof ($fDomains) > 0)
{
for ($i = 0; $i < sizeof ($fDomains); $i++)
{
$domain = $fDomains[$i];
$result_domains = db_query ("INSERT INTO domain_admins (username,domain,created) VALUES ('$username','$domain',NOW())");
}
}
if ($result['rows'] == 1)
{
if (sizeof ($fDomains) > 0)
{
$result = db_query ("DELETE FROM domain_admins WHERE username='$username'");
for ($i = 0; $i < sizeof ($fDomains); $i++)
{
$domain = $fDomains[$i];
$result = db_query ("INSERT INTO domain_admins (username,domain,created) VALUES ('$username','$domain',NOW())");
}
}
header ("Location: list-admin.php");
}
else
{
$tMessage = $PALANG['pAdminEdit_admin_result_error'];
}
}
include ("../templates/header.tpl");
include ("../templates/admin_menu.tpl");
include ("../templates/admin_edit-admin.tpl");
include ("../templates/footer.tpl");
}
?>

98
admin/edit-alias.php

@ -0,0 +1,98 @@
<?php
//
// File: edit-alias.php
//
// Template File: edit-alias.tpl
//
// Template Variables:
//
// tMessage
// tGoto
//
// Form POST \ GET Variables:
//
// fAddress
// fDomain
// fGoto
//
require ("../variables.inc.php");
require ("../config.inc.php");
require ("../functions.inc.php");
include ("../languages/" . $CONF['language'] . ".lang");
if ($_SERVER['REQUEST_METHOD'] == "GET")
{
$fAddress = $_GET['address'];
$fDomain = $_GET['domain'];
$result = db_query ("SELECT * FROM alias WHERE address='$fAddress' AND domain='$fDomain'");
if ($result['rows'] == 1)
{
$row = mysql_fetch_array ($result['result']);
$tGoto = $row['goto'];
}
else
{
$tMessage = $PALANG['pEdit_alias_address_error'];
}
include ("../templates/header.tpl");
include ("../templates/admin_menu.tpl");
include ("../templates/edit-alias.tpl");
include ("../templates/footer.tpl");
}
if ($_SERVER['REQUEST_METHOD'] == "POST")
{
$pEdit_alias_goto = $PALANG['pEdit_alias_goto'];
$fAddress = $_GET['address'];
$fDomain = $_GET['domain'];
$fGoto = $_POST['fGoto'];
if (empty ($fGoto))
{
$error = 1;
$tGoto = $fGoto;
$tMessage = $PALANG['pEdit_alias_goto_text_error1'];
}
$goto = preg_replace ('/\r\n/', ',', $fGoto);
$goto = preg_replace ('/[\s]+/i', '', $goto);
$goto = preg_replace ('/\,*$/', '', $goto);
$array = preg_split ('/,/', $goto);
for ($i = 0; $i < sizeof ($array); $i++) {
if (in_array ("$array[$i]", $CONF['default_aliases'])) continue;
if (empty ($array[$i])) continue;
if (!check_email ($array[$i]))
{
$error = 1;
$tGoto = $goto;
$tMessage = $PALANG['pEdit_alias_goto_text_error2'] . "$array[$i]</font>";
}
}
if ($error != 1)
{
$result = db_query ("UPDATE alias SET goto='$goto',modified=NOW() WHERE address='$fAddress' AND domain='$fDomain'");
if ($result['rows'] != 1)
{
$tMessage = $PALANG['pEdit_alias_result_error'];
}
else
{
db_log ("site admin", $fDomain, "edit alias", "$fAddress -> $goto");
header ("Location: list-virtual.php?domain=$fDomain");
exit;
}
}
include ("../templates/header.tpl");
include ("../templates/admin_menu.tpl");
include ("../templates/edit-alias.tpl");
include ("../templates/footer.tpl");
}
?>

72
admin/edit-domain.php

@ -0,0 +1,72 @@
<?php
//
// File: edit-domain.php
//
// Template File: admin_edit-domain.tpl
//
// Template Variables:
//
// tDescription
// tAliases
// tMailboxes
// tMaxquota
// tActive
//
// Form POST \ GET Variables:
//
// fDescription
// fAliases
// fMailboxes
// fMaxquota
// fActive
//
require ("../variables.inc.php");
require ("../config.inc.php");
require ("../functions.inc.php");
include ("../languages/" . $CONF['language'] . ".lang");
if ($_SERVER['REQUEST_METHOD'] == "GET")
{
$domain = $_GET['domain'];
$domain_properties = get_domain_properties ($domain);
$tDescription = $domain_properties['description'];
$tAliases = $domain_properties['aliases'];
$tMailboxes = $domain_properties['mailboxes'];
$tMaxquota = $domain_properties['maxquota'];
$tActive = $domain_properties['active'];
include ("../templates/header.tpl");
include ("../templates/admin_menu.tpl");
include ("../templates/admin_edit-domain.tpl");
include ("../templates/footer.tpl");
}
if ($_SERVER['REQUEST_METHOD'] == "POST")
{
$domain = $_GET['domain'];
$fDescription = $_POST['fDescription'];
$fAliases = $_POST['fAliases'];
$fMailboxes = $_POST['fMailboxes'];
$fMaxquota = $_POST['fMaxquota'];
$fActive = $_POST['fActive'];
if ($fActive == "on") $fActive = 1;
$result = db_query ("UPDATE domain SET description='$fDescription',aliases='$fAliases',mailboxes='$fMailboxes',maxquota='$fMaxquota',active='$fActive',modified=NOW() WHERE domain='$domain'");
if ($result['rows'] == 1)
{
header ("Location: list-domain.php");
}
else
{
$tMessage = $PALANG['pAdminEdit_domain_result_error'];
}
include ("../templates/header.tpl");
include ("../templates/admin_menu.tpl");
include ("../templates/admin_edit-domain.tpl");
include ("../templates/footer.tpl");
}
?>

115
admin/edit-mailbox.php

@ -0,0 +1,115 @@
<?php
//
// File: edit-mailbox.php
//
// Template File: edit-mailbox.tpl
//
// Template Variables:
//
// tMessage
// tName
// tQuota
//
// Form POST \ GET Variables:
//
// fUsername
// fDomain
// fPassword
// fPassword2
// fName
// fQuota
// fActive
//
require ("../variables.inc.php");
require ("../config.inc.php");
require ("../functions.inc.php");
include ("../languages/" . $CONF['language'] . ".lang");
if ($_SERVER['REQUEST_METHOD'] == "GET")
{
$fUsername = $_GET['username'];
$fDomain = $_GET['domain'];
$result = db_query ("SELECT * FROM mailbox WHERE username='$fUsername' AND domain='$fDomain'");
if ($result['rows'] == 1)
{
$row = mysql_fetch_array ($result['result']);
$tName = $row['name'];
$tQuota = substr ($row['quota'], 0, -6);
$tActive = $row['active'];
}
else
{
$tMessage = $PALANG['pEdit_mailbox_login_error'];
}
include ("../templates/header.tpl");
include ("../templates/admin_menu.tpl");
include ("../templates/edit-mailbox.tpl");
include ("../templates/footer.tpl");
}
if ($_SERVER['REQUEST_METHOD'] == "POST")
{
$pEdit_mailbox_password_text = $PALANG['pEdit_mailbox_password_text_error'];
$pEdit_mailbox_quota_text = $PALANG['pEdit_mailbox_quota_text'];
$fUsername = $_GET['username'];
$fDomain = $_GET['domain'];
$fPassword = $_POST['fPassword'];
$fPassword2 = $_POST['fPassword2'];
$fName = $_POST['fName'];
if (isset ($_POST['fQuota'])) $fQuota = $_POST['fQuota'];
if (isset ($_POST['fActive'])) $fActive = $_POST['fActive'];
if ($fPassword != $fPassword2)
{
$error = 1;
$tName = $fName;
$tQuota = $fQuota;
$pEdit_mailbox_password_text = $PALANG['pEdit_mailbox_password_text_error'];
}
if (!check_quota ($fQuota, $fDomain))
{
$error = 1;
$tName = $fName;
$tQuota = $fQuota;
$pEdit_mailbox_quota_text = $PALANG['pEdit_mailbox_quota_text_error'];
}
if ($error != 1)
{
if (!empty ($fQuota)) $quota = $fQuota . "000000";
if ($fActive == "on") $fActive = 1;
if (empty ($fPassword) and empty ($fPassword2))
{
$result = db_query ("UPDATE mailbox SET name='$fName',quota='$quota',modified=NOW(),active='$fActive' WHERE username='$fUsername' AND domain='$fDomain'");
}
else
{
$password = md5crypt ($fPassword);
$result = db_query ("UPDATE mailbox SET password='$password',name='$fName',quota='$quota',modified=NOW(),active='$fActive' WHERE username='$fUsername' AND domain='$fDomain'");
}
if ($result['rows'] != 1)
{
$tMessage = $PALANG['pEdit_mailbox_result_error'];
}
else
{
db_log ("site admin", $fDomain, "edit mailbox", $fUsername);
header ("Location: list-virtual.php?domain=$fDomain");
exit;
}
}
include ("../templates/header.tpl");
include ("../templates/admin_menu.tpl");
include ("../templates/edit-mailbox.tpl");
include ("../templates/footer.tpl");
}
?>

3
admin/index.php

@ -0,0 +1,3 @@
<?php
header ("Location: list-admin.php");
?>

41
admin/list-admin.php

@ -0,0 +1,41 @@
<?php
//
// File: list-admin.php
//
// Template File: list-admin.tpl
//
// Template Variables:
//
// -none-
//
// Form POST \ GET Variables:
//
// -none-
//
require ("../variables.inc.php");
require ("../config.inc.php");
require ("../functions.inc.php");
include ("../languages/" . $CONF['language'] . ".lang");
$list_admins = list_admins ();
for ($i = 0; $i < sizeof ($list_admins); $i++)
{
$admin_properties[$i] = get_admin_properties ($list_admins[$i]);
}
if ($_SERVER['REQUEST_METHOD'] == "GET")
{
include ("../templates/header.tpl");
include ("../templates/admin_menu.tpl");
include ("../templates/admin_list-admin.tpl");
include ("../templates/footer.tpl");
}
if ($_SERVER['REQUEST_METHOD'] == "POST")
{
include ("../templates/header.tpl");
include ("../templates/admin_menu.tpl");
include ("../templates/admin_list-admin.tpl");
include ("../templates/footer.tpl");
}
?>

64
admin/list-domain.php

@ -0,0 +1,64 @@
<?php
//
// File: list-domain.php
//
// Template File: admin_list-domain.tpl
//
// Template Variables:
//
// -none-
//
// Form POST \ GET Variables:
//
// fUsername
//
require ("../variables.inc.php");
require ("../config.inc.php");
require ("../functions.inc.php");
include ("../languages/" . $CONF['language'] . ".lang");
$list_admins = list_admins ();
if ($_SERVER['REQUEST_METHOD'] == "GET")
{
if (isset ($_GET['username']))
{
$fUsername = $_GET['username'];
$list_domains = list_domains_for_admin ($fUsername);
for ($i = 0; $i < sizeof ($list_domains); $i++)
{
$domain_properties[$i] = get_domain_properties ($list_domains[$i]);
}
}
else
{
$list_domains = list_domains ();
for ($i = 0; $i < sizeof ($list_domains); $i++)
{
$domain_properties[$i] = get_domain_properties ($list_domains[$i]);
}
}
include ("../templates/header.tpl");
include ("../templates/admin_menu.tpl");
include ("../templates/admin_list-domain.tpl");
include ("../templates/footer.tpl");
}
if ($_SERVER['REQUEST_METHOD'] == "POST")
{
$fUsername = $_POST['fUsername'];
$list_domains = list_domains_for_admin ($fUsername);
for ($i = 0; $i < sizeof ($list_domains); $i++)
{
$domain_properties[$i] = get_domain_properties ($list_domains[$i]);
}
include ("../templates/header.tpl");
include ("../templates/admin_menu.tpl");
include ("../templates/admin_list-domain.tpl");
include ("../templates/footer.tpl");
}
?>

105
admin/list-virtual.php

@ -0,0 +1,105 @@
<?php
//
// File: list-virtual.php
//
// Template File: admin_list-virtual.tpl
//
// Template Variables:
//
// tMessage
// tAlias
// tMailbox
//
// Form POST \ GET Variables:
//
// fDomain
//
require ("../variables.inc.php");
require ("../config.inc.php");
require ("../functions.inc.php");
include ("../languages/" . $CONF['language'] . ".lang");
$list_domains = list_domains ();
if ($_SERVER['REQUEST_METHOD'] == "GET")
{
if (isset ($_GET['domain'])) $fDomain = $_GET['domain'];
if (empty ($fDomain)) $fDomain = $list_domains[0];
$limit = get_domain_properties ($fDomain);
if (empty ($fDomain)) $fDomain = $list_domains[1];
if ($CONF['alias_control'] == "YES")
{
$query = "SELECT alias.address,alias.goto,alias.modified FROM alias WHERE alias.domain='$fDomain' ORDER BY alias.address";
}
else
{
$query = "SELECT alias.address,alias.goto,alias.modified FROM alias LEFT JOIN mailbox ON alias.address=mailbox.username WHERE alias.domain='$fDomain' AND mailbox.maildir IS NULL ORDER BY alias.address";
}
$result = db_query ("$query");
if ($result['rows'] > 0)
{
while ($row = mysql_fetch_array ($result['result']))
{
$tAlias[] = $row;
}
}
$result = db_query ("SELECT * FROM mailbox WHERE domain='$fDomain' ORDER BY username");
if ($result['rows'] > 0)
{
while ($row = mysql_fetch_array ($result['result']))
{
$tMailbox[] = $row;
}
}
include ("../templates/header.tpl");
include ("../templates/admin_menu.tpl");
include ("../templates/admin_list-virtual.tpl");
include ("../templates/footer.tpl");
}
if ($_SERVER['REQUEST_METHOD'] == "POST")
{
$fDomain = $_POST['fDomain'];
$limit = get_domain_properties ($fDomain);
if ($CONF['alias_control'] == "YES")
{
$query = "SELECT alias.address,alias.goto,alias.modified FROM alias WHERE alias.domain='$fDomain' ORDER BY alias.address";
}
else
{
$query = "SELECT alias.address,alias.goto,alias.modified FROM alias LEFT JOIN mailbox ON alias.address=mailbox.username WHERE alias.domain='$fDomain' AND mailbox.maildir IS NULL ORDER BY alias.address";
}
$result = db_query ("$query");
if ($result['rows'] > 0)
{
while ($row = mysql_fetch_array ($result['result']))
{
$tAlias[] = $row;
}
}
$result = db_query ("SELECT * FROM mailbox WHERE domain='$fDomain' ORDER BY username");
if ($result['rows'] > 0)
{
while ($row = mysql_fetch_array ($result['result']))
{
$tMailbox[] = $row;
}
}
include ("../templates/header.tpl");
include ("../templates/admin_menu.tpl");
include ("../templates/admin_list-virtual.tpl");
include ("../templates/footer.tpl");
}
?>

63
admin/viewlog.php

@ -0,0 +1,63 @@
<?php
//
// File: viewlog.php
//
// Template File: viewlog.tpl
//
// Template Variables:
//
// tMessage
// tLog
//
// Form POST \ GET Variables:
//
// fDomain
//
require ("../variables.inc.php");
require ("../config.inc.php");
require ("../functions.inc.php");
include ("../languages/" . $CONF['language'] . ".lang");
$list_domains = list_domains ();
if ($_SERVER['REQUEST_METHOD'] == "GET")
{
$fDomain = $list_domains[0];
if ($error != 1)
{
$result = db_query ("SELECT * FROM log WHERE domain='$fDomain' ORDER BY timestamp DESC LIMIT 10");
if ($result['rows'] > 0)
{
while ($row = mysql_fetch_array ($result['result']))
{
$tLog[] = $row;
}
}
}
include ("../templates/header.tpl");
include ("../templates/admin_menu.tpl");
include ("../templates/viewlog.tpl");
include ("../templates/footer.tpl");
}
if ($_SERVER['REQUEST_METHOD'] == "POST")
{
$fDomain = $_POST['fDomain'];
$result = db_query ("SELECT * FROM log WHERE domain='$fDomain' ORDER BY timestamp DESC LIMIT 10");
if ($result['rows'] > 0)
{
while ($row = mysql_fetch_array ($result['result']))
{
$tLog[] = $row;
}
}
include ("../templates/header.tpl");
include ("../templates/admin_menu.tpl");
include ("../templates/viewlog.tpl");
include ("../templates/footer.tpl");
}
?>

83
config.inc.php.sample

@ -0,0 +1,83 @@
<?php
//
// File: config.inc.php
//
if (ereg ("config.inc.php", $_SERVER['PHP_SELF']))
{
header ("Location: login.php");
exit;
}
// Language config
// Language files are located in './languages'.
$CONF['language'] = 'en';
// Database Config
// 'database_type' is for future reference.
$CONF['database_type'] = 'mysql';
$CONF['database_host'] = 'localhost';
$CONF['database_user'] = 'postfixadmin';
$CONF['database_password'] = 'postfixadmin';
$CONF['database_name'] = 'postfix';
// Encrypt
// In what way do you want the passwords to be crypted?
// md5crypt = internal postfix admin md5
// system = whatever you have set as your PHP system default
// cleartext = clear text passwords (ouch!)
$CONF['encrypt'] = 'md5crypt';
// Default Aliases
// The default aliases that need to be created for all domains.
$CONF['default_aliases'] = array (
'abuse' => 'abuse@domain.tld',
'hostmaster' => 'hostmaster@domain.tld',
'postmaster' => 'postmaster@domain.tld',
'webmaster' => 'webmaster@domain.tld'
);
// Mailboxes
// If you want to store the mailboxes per domain set this to 'YES'.
// Example: /usr/local/virtual/domain.tld/username@domain.tld
$CONF['domain_path'] = 'NO';
// If you don't want to have the domain in your mailbox set this to 'NO'.
// Example: /usr/local/virtual/domain.tld/username
$CONF['domain_in_mailbox'] = 'YES';
// Default Domain Values
// Specify your default values below. Quota in MB.
$CONF['aliases'] = '10';
$CONF['mailboxes'] = '10';
$CONF['maxquota'] = '10';
// Quota
// When you want to enforce quota for your mailbox users set this to 'YES'.
$CONF['quota'] = 'NO';
// Virtual Vacation
// If you want to use virtual vacation for you mailbox users set this to 'YES'.
// NOTE: Make sure that you install the vacation module. http://high5.net/postfixadmin/
$CONF['vacation'] = 'NO';
// Alias Control
// If you want to control your mailbox aliases as well set this to 'YES'.
$CONF['alias_control'] = 'NO';
// Logging
// If you don't want logging set this to 'NO';
$CONF['logging'] = 'YES';
// Header
// Some header configuration.
// If you don't want the Postfix Admin logo to appear set this to 'NO'.
$CONF['logo'] = 'YES';
$CONF['header_text'] = ':: Welcome to Postfix Admin ::';
// Footer
// Below information will be on all pages.
// If you don't want the footer information to appear set this to 'NO'.
$CONF['show_footer_text'] = 'YES';
$CONF['footer_text'] = 'Return to domain.tld';
$CONF['footer_link'] = 'http://domain.tld';
?>

123
create-alias.php

@ -0,0 +1,123 @@
<?php
//
// File: create-alias.php
//
// Template File: create-alias.tpl
//
// Template Variables:
//
// tMessage
// tAddress
// tGoto
// tDomain
//
// Form POST \ GET Variables:
//
// fAddress
// fGoto
// fDomain
//
require ("./variables.inc.php");
require ("./config.inc.php");
require ("./functions.inc.php");
include ("./languages/" . $CONF['language'] . ".lang");
$SESSID_USERNAME = check_session ();
$list_domains = list_domains_for_admin ($SESSID_USERNAME);
if ($_SERVER['REQUEST_METHOD'] == "GET")
{
$pCreate_alias_goto_text = $PALANG['pCreate_alias_goto_text'];
include ("./templates/header.tpl");
include ("./templates/menu.tpl");
include ("./templates/create-alias.tpl");
include ("./templates/footer.tpl");
}
if ($_SERVER['REQUEST_METHOD'] == "POST")
{
$pCreate_alias_goto_text = $PALANG['pCreate_alias_goto_text'];
$fAddress = $_POST['fAddress'] . "@" . $_POST['fDomain'];
$fGoto = $_POST['fGoto'];
$fDomain = $_POST['fDomain'];
if (!preg_match ('/@/',$fGoto))
{
$fGoto = $fGoto . "@" . $_POST['fDomain'];
}
if (!check_owner ($SESSID_USERNAME, $fDomain))
{
$error = 1;
$tAddress = $_POST['fAddress'];
$tGoto = $fGoto;
$tDomain = $fDomain;
$pCreate_alias_address_text = $PALANG['pCreate_alias_address_text_error1'];
}
if (!check_alias ($fDomain))
{
$error = 1;
$tAddress = $_POST['fAddress'];
$tGoto = $fGoto;
$tDomain = $fDomain;
$pCreate_alias_address_text = $PALANG['pCreate_alias_address_text_error3'];
}
if (empty ($fAddress) or !check_email ($fAddress))
{
$error = 1;
$tAddress = $_POST['fAddress'];
$tGoto = $fGoto;
$tDomain = $fDomain;
$pCreate_alias_address_text = $PALANG['pCreate_alias_address_text_error1'];
}
if (empty ($fGoto) or !check_email ($fGoto))
{
$error = 1;
$tAddress = $_POST['fAddress'];
$tGoto = $fGoto;
$tDomain = $fDomain;
$pCreate_alias_goto_text = $PALANG['pCreate_alias_goto_text_error'];
}
if ($_POST['fAddress'] == "*") $fAddress = "@" . $_POST['fDomain'];
$result = db_query ("SELECT * FROM alias WHERE address='$fAddress'");
if ($result['rows'] == 1)
{
$error = 1;
$tAddress = $_POST['fAddress'];
$tGoto = $fGoto;
$tDomain = $fDomain;
$pCreate_alias_address_text = $PALANG['pCreate_alias_address_text_error2'];
}
if ($error != 1)
{
if (preg_match ('/^\*@(.*)$/', $fGoto, $match)) $fGoto = "@" . $match[1];
$result = db_query ("INSERT INTO alias (address,goto,domain,created,modified) VALUES ('$fAddress','$fGoto','$fDomain',NOW(),NOW())");
if ($result['rows'] != 1)
{
$tDomain = $fDomain;
$tMessage = $PALANG['pCreate_alias_result_error'] . "<br />($fAddress -> $fGoto)<br />";
}
else
{
db_log ($SESSID_USERNAME, $fDomain, "create alias", "$fAddress -> $fGoto");
$tDomain = $fDomain;
$tMessage = $PALANG['pCreate_alias_result_succes'] . "<br />($fAddress -> $fGoto)</br />";
}
}
include ("./templates/header.tpl");
include ("./templates/menu.tpl");
include ("./templates/create-alias.tpl");
include ("./templates/footer.tpl");
}
?>

188
create-mailbox.php

@ -0,0 +1,188 @@
<?php
//
// File: create-mailbox.php
//
// Template File: create-mailbox.tpl
//
// Template Variables:
//
// tMessage
// tUsername
// tName
// tQuota
// tDomain
//
// Form POST \ GET Variables:
//
// fUsername
// fPassword
// fPassword2
// fName
// fQuota
// fDomain
// fActive
// fMail
//
require ("./variables.inc.php");
require ("./config.inc.php");
require ("./functions.inc.php");
include ("./languages/" . $CONF['language'] . ".lang");
$SESSID_USERNAME = check_session ();
$list_domains = list_domains_for_admin ($SESSID_USERNAME);
if ($_SERVER['REQUEST_METHOD'] == "GET")
{
$tQuota = $CONF['maxquota'];
$pCreate_mailbox_password_text = $PALANG['pCreate_mailbox_password_text'];
$pCreate_mailbox_name_text = $PALANG['pCreate_mailbox_name_text'];
$pCreate_mailbox_quota_text = $PALANG['pCreate_mailbox_quota_text'];
include ("./templates/header.tpl");
include ("./templates/menu.tpl");
include ("./templates/create-mailbox.tpl");
include ("./templates/footer.tpl");
}
if ($_SERVER['REQUEST_METHOD'] == "POST")
{
$pCreate_mailbox_password_text = $PALANG['pCreate_mailbox_password_text'];
$pCreate_mailbox_name_text = $PALANG['pCreate_mailbox_name_text'];
$pCreate_mailbox_quota_text = $PALANG['pCreate_mailbox_quota_text'];
$fUsername = $_POST['fUsername'] . "@" . $_POST['fDomain'];
$fPassword = $_POST['fPassword'];
$fPassword2 = $_POST['fPassword2'];
$fName = $_POST['fName'];
$fDomain = $_POST['fDomain'];
if (isset ( $_POST['fQuota'])) $fQuota = $_POST['fQuota'];
if (isset ( $_POST['fActive'])) $fActive = $_POST['fActive'];
if (isset ( $_POST['fMail'])) $fMail = $_POST['fMail'];
if (!check_owner ($SESSID_USERNAME, $fDomain))
{
$error = 1;
$tUsername = $_POST['fUsername'];
$tName = $fName;
$tQuota = $fQuota;
$tDomain = $fDomain;
$pCreate_mailbox_username_text = $PALANG['pCreate_mailbox_username_text_error1'];
}
if (!check_mailbox ($fDomain))
{
$error = 1;
$tUsername = $_POST['fUsername'];
$tName = $fName;
$tQuota = $fQuota;
$tDomain = $fDomain;
$pCreate_mailbox_username_text = $PALANG['pCreate_mailbox_username_text_error3'];
}
if (empty ($fUsername) or !check_email ($fUsername))
{
$error = 1;
$tUsername = $_POST['fUsername'];
$tName = $fName;
$tQuota = $fQuota;
$tDomain = $fDomain;
$pCreate_mailbox_username_text = $PALANG['pCreate_mailbox_username_text_error1'];
}
if (empty ($fPassword) or ($fPassword != $fPassword2))
{
$error = 1;
$tUsername = $_POST['fUsername'];
$tName = $fName;
$tQuota = $fQuota;
$tDomain = $fDomain;
$pCreate_mailbox_password_text = $PALANG['pCreate_mailbox_password_text_error'];
}
if (!check_quota ($fQuota, $fDomain))
{
$error = 1;
$tUsername = $_POST['fUsername'];
$tName = $fName;
$tQuota = $fQuota;
$tDomain = $fDomain;
$pCreate_mailbox_quota_text = $PALANG['pCreate_mailbox_quota_text_error'];
}
$result = db_query ("SELECT * FROM alias WHERE address='$fUsername'");
if ($result['rows'] == 1)
{
$error = 1;
$tUsername = $_POST['fUsername'];
$tName = $fName;
$tQuota = $fQuota;
$tDomain = $fDomain;
$pCreate_mailbox_username_text = $PALANG['pCreate_mailbox_username_text_error2'];
}
if ($error != 1)
{
$password = pacrypt ($fPassword);
if ($CONF['domain_path'] == "YES")
{
if ($CONF['domain_in_mailbox'] == "YES")
{
$maildir = $fDomain . "/" . $fUsername . "/";
}
else
{
$maildir = $fDomain . "/" . $_POST['fUsername'] . "/";
}
}
else
{
$maildir = $fUsername . "/";
}
if (!empty ($fQuota)) $quota = $fQuota . "000000";
if ($fActive == "on") $fActive = 1;
$result = db_query ("INSERT INTO alias (address,goto,domain,created,modified,active) VALUES ('$fUsername','$fUsername','$fDomain',NOW(),NOW(),'$fActive')");
if ($result['rows'] != 1)
{
$tDomain = $fDomain;
$tMessage = $PALANG['pAlias_result_error'] . "<br />($fUsername -> $fUsername)</br />";
}
$result = db_query ("INSERT INTO mailbox (username,password,name,maildir,quota,domain,created,modified,active) VALUES ('$fUsername','$password','$fName','$maildir','$quota','$fDomain',NOW(),NOW(),'$fActive')");
if ($result['rows'] != 1)
{
$tDomain = $fDomain;
$tMessage .= $PALANG['pCreate_mailbox_result_error'] . "<br />($fUsername)<br />";
}
else
{
db_log ($SESSID_USERNAME, $fDomain, "create mailbox", "$fUsername");
$tDomain = $fDomain;
$tMessage = $PALANG['pCreate_mailbox_result_succes'] . "<br />($fUsername)</br />";
$tQuota = $CONF['maxquota'];
if ($fMail == "on") {
if (!mail ($fUsername, $PALANG['pSendmail_subject_text'], $PALANG['pSendmail_body_text'], "From:" . $SESSID_USERNAME))
{
$tMessage .= "<br />" . $PALANG['pSendmail_result_error'] . "<br />";
}
else
{
$tMessage .= "<br />" . $PALANG['pSendmail_result_succes'] . "<br />";
}
}
}
}
include ("./templates/header.tpl");
include ("./templates/menu.tpl");
include ("./templates/create-mailbox.tpl");
include ("./templates/footer.tpl");
}
?>

82
delete.php

@ -0,0 +1,82 @@
<?php
//
// File: delete.php
//
// Template File: delete.tpl
//
// Template Variables:
//
// tMessage
//
// Form POST \ GET Variables:
//
// fDelete
// fDomain
//
require ("./variables.inc.php");
require ("./config.inc.php");
require ("./functions.inc.php");
include ("./languages/" . $CONF['language'] . ".lang");
$SESSID_USERNAME = check_session();
if ($_SERVER['REQUEST_METHOD'] == "GET")
{
if (isset ($_GET['delete'])) $fDelete = $_GET['delete'];
if (isset ($_GET['domain'])) $fDomain = $_GET['domain'];
if (!check_owner ($SESSID_USERNAME, $fDomain))
{
$error = 1;
$tMessage = $PALANG['pDelete_domain_error'] . "<b>$fDomain</b>!</font>";
}
else
{
$result = db_query ("DELETE FROM alias WHERE address='$fDelete' AND domain='$fDomain'");
if ($result['rows'] != 1)
{
$error = 1;
$tMessage = $PALANG['pDelete_delete_error'] . "<b>$fDelete</b> (alias)!</font>";
}
else
{
db_log ($SESSID_USERNAME, $fDomain, "delete alias", $fDelete);
}
$result = db_query ("SELECT * FROM mailbox WHERE username='$fDelete' AND domain='$fDomain'");
if ($result['rows'] == 1)
{
$result = db_query ("DELETE FROM mailbox WHERE username='$fDelete' AND domain='$fDomain'");
if ($result['rows'] != 1)
{
$error = 1;
$tMessage = $PALANG['pDelete_delete_error'] . "<b>$fDelete</b> (mailbox)!</font>";
}
else
{
db_log ($SESSID_USERNAME, $fDomain, "delete mailbox", $fDelete);
}
}
}
if ($error != 1)
{
header ("Location: overview.php?domain=$fDomain");
exit;
}
include ("./templates/header.tpl");
include ("./templates/menu.tpl");
include ("./templates/delete.tpl");
include ("./templates/footer.tpl");
}
if ($_SERVER['REQUEST_METHOD'] == "POST")
{
include ("./templates/header.tpl");
include ("./templates/menu.tpl");
include ("./templates/delete.tpl");
include ("./templates/footer.tpl");
}
?>

110
edit-alias.php

@ -0,0 +1,110 @@
<?php
//
// File: edit-alias.php
//
// Template File: edit-alias.tpl
//
// Template Variables:
//
// tMessage
// tGoto
//
// Form POST \ GET Variables:
//
// fAddress
// fDomain
// fGoto
//
require ("./variables.inc.php");
require ("./config.inc.php");
require ("./functions.inc.php");
include ("./languages/" . $CONF['language'] . ".lang");
$SESSID_USERNAME = check_session ();
if ($_SERVER['REQUEST_METHOD'] == "GET")
{
$fAddress = $_GET['address'];
$fDomain = $_GET['domain'];
if (check_owner ($SESSID_USERNAME, $fDomain))
{
$result = db_query ("SELECT * FROM alias WHERE address='$fAddress' AND domain='$fDomain'");
if ($result['rows'] == 1)
{
$row = mysql_fetch_array ($result['result']);
$tGoto = $row['goto'];
}
}
else
{
$tMessage = $PALANG['pEdit_alias_address_error'];
}
include ("./templates/header.tpl");
include ("./templates/menu.tpl");
include ("./templates/edit-alias.tpl");
include ("./templates/footer.tpl");
}
if ($_SERVER['REQUEST_METHOD'] == "POST")
{
$pEdit_alias_goto = $PALANG['pEdit_alias_goto'];
$fAddress = $_GET['address'];
$fDomain = $_GET['domain'];
$fGoto = $_POST['fGoto'];
if (!check_owner ($SESSID_USERNAME, $fDomain))
{
$error = 1;
$tGoto = $fGoto;
$tMessage = $PALANG['pEdit_alias_domain_error'] . "$fDomain</font>";
}
if (empty ($fGoto))
{
$error = 1;
$tGoto = $fGoto;
$tMessage = $PALANG['pEdit_alias_goto_text_error1'];
}
$goto = preg_replace ('/\r\n/', ',', $fGoto);
$goto = preg_replace ('/[\s]+/i', '', $goto);
$goto = preg_replace ('/\,*$/', '', $goto);
$array = preg_split ('/,/', $goto);
for ($i = 0; $i < sizeof ($array); $i++) {
if (in_array ("$array[$i]", $CONF['default_aliases'])) continue;
if (empty ($array[$i])) continue;
if (!check_email ($array[$i]))
{
$error = 1;
$tGoto = $goto;
$tMessage = $PALANG['pEdit_alias_goto_text_error2'] . "$array[$i]</font>";
}
}
if ($error != 1)
{
$result = db_query ("UPDATE alias SET goto='$goto',modified=NOW() WHERE address='$fAddress' AND domain='$fDomain'");
if ($result['rows'] != 1)
{
$tMessage = $PALANG['pEdit_alias_result_error'];
}
else
{
db_log ($SESSID_USERNAME, $fDomain, "edit alias", "$fAddress -> $goto");
header ("Location: overview.php?domain=$fDomain");
exit;
}
}
include ("./templates/header.tpl");
include ("./templates/menu.tpl");
include ("./templates/edit-alias.tpl");
include ("./templates/footer.tpl");
}
?>

128
edit-mailbox.php

@ -0,0 +1,128 @@
<?php
//
// File: edit-mailbox.php
//
// Template File: edit-mailbox.tpl
//
// Template Variables:
//
// tMessage
// tName
// tQuota
//
// Form POST \ GET Variables:
//
// fUsername
// fDomain
// fPassword
// fPassword2
// fName
// fQuota
// fActive
//
require ("./variables.inc.php");
require ("./config.inc.php");
require ("./functions.inc.php");
include ("./languages/" . $CONF['language'] . ".lang");
$SESSID_USERNAME = check_session ();
if ($_SERVER['REQUEST_METHOD'] == "GET")
{
$fUsername = $_GET['username'];
$fDomain = $_GET['domain'];
if (check_owner ($SESSID_USERNAME, $fDomain))
{
$result = db_query ("SELECT * FROM mailbox WHERE username='$fUsername' AND domain='$fDomain'");
if ($result['rows'] == 1)
{
$row = mysql_fetch_array ($result['result']);
$tName = $row['name'];
$tQuota = substr ($row['quota'], 0, -6);
$tActive = $row['active'];
}
}
else
{
$tMessage = $PALANG['pEdit_mailbox_login_error'];
}
include ("./templates/header.tpl");
include ("./templates/menu.tpl");
include ("./templates/edit-mailbox.tpl");
include ("./templates/footer.tpl");
}
if ($_SERVER['REQUEST_METHOD'] == "POST")
{
$pEdit_mailbox_password_text = $PALANG['pEdit_mailbox_password_text_error'];
$pEdit_mailbox_quota_text = $PALANG['pEdit_mailbox_quota_text'];
$fUsername = $_GET['username'];
$fDomain = $_GET['domain'];
$fPassword = $_POST['fPassword'];
$fPassword2 = $_POST['fPassword2'];
$fName = $_POST['fName'];
if (isset ($_POST['fQuota'])) $fQuota = $_POST['fQuota'];
if (isset ($_POST['fActive'])) $fActive = $_POST['fActive'];
if (!check_owner ($SESSID_USERNAME, $fDomain))
{
$error = 1;
$tName = $fName;
$tQuota = $fQuota;
$tMessage = $PALANG['pEdit_mailbox_domain_error'] . "$fDomain</font>";
}
if ($fPassword != $fPassword2)
{
$error = 1;
$tName = $fName;
$tQuota = $fQuota;
$pEdit_mailbox_password_text = $PALANG['pEdit_mailbox_password_text_error'];
}
if (!check_quota ($fQuota, $fDomain))
{
$error = 1;
$tName = $fName;
$tQuota = $fQuota;
$pEdit_mailbox_quota_text = $PALANG['pEdit_mailbox_quota_text_error'];
}
if ($error != 1)
{
if (!empty ($fQuota)) $quota = $fQuota . "000000";
if ($fActive == "on") $fActive = 1;
if (empty ($fPassword) and empty ($fPassword2))
{
$result = db_query ("UPDATE mailbox SET name='$fName',quota='$quota',modified=NOW(),active='$fActive' WHERE username='$fUsername' AND domain='$fDomain'");
}
else
{
$password = pacrypt ($fPassword);
$result = db_query ("UPDATE mailbox SET password='$password',name='$fName',quota='$quota',modified=NOW(),active='$fActive' WHERE username='$fUsername' AND domain='$fDomain'");
}
if ($result['rows'] != 1)
{
$tMessage = $PALANG['pEdit_mailbox_result_error'];
}
else
{
db_log ($SESSID_USERNAME, $fDomain, "edit mailbox", $fUsername);
header ("Location: overview.php?domain=$fDomain");
exit;
}
}
include ("./templates/header.tpl");
include ("./templates/menu.tpl");
include ("./templates/edit-mailbox.tpl");
include ("./templates/footer.tpl");
}
?>

523
functions.inc.php

@ -0,0 +1,523 @@
<?php
//
// File: functions.inc.php
//
if (ereg ("functions.inc.php", $_SERVER['PHP_SELF']))
{
header ("Location: login.php");
exit;
}
$version = "v2.0.2";
//
// check_session
// Action: Check if a session already exists, if not redirect to login.php
// Call: check_session ()
//
function check_session ()
{
session_start ();
if (!session_is_registered ("sessid"))
{
header ("Location: login.php");
exit;
}
$SESSID_USERNAME = $_SESSION['sessid']['username'];
return $SESSID_USERNAME;
}
function check_user_session ()
{
session_start ();
if (!session_is_registered ("userid"))
{
header ("Location: login.php");
exit;
}
$USERID_USERNAME = $_SESSION['userid']['username'];
return $USERID_USERNAME;
}
//
// check_string
// Action: checks if a string is valid and returns TRUE is this is the case.
// Call: check_string (string var)
//
function check_string ($var)
{
if (preg_match ('/^([A-Za-z0-9 ]+)+$/', $var))
{
return true;
}
else
{
return false;
}
}
//
// check_email
// Action: Checks if email is valid and returns TRUE if this is the case.
// Call: check_email (string email)
//
function check_email ($email)
{
return (preg_match ('/^[-!#$%&\'*+\\.\/0-9=?A-Z^_{|}~]+' . '@' . '([-0-9A-Z]+\.)+' . '([0-9A-Z]){2,4}$/i', trim($email)));
}
//
// get_domain_properties
// Action: Get all the properties of a domain.
// Call: get_domain_properties (string domain)
//
function get_domain_properties ($domain)
{
$list = "";
$result = db_query ("SELECT * FROM alias WHERE domain='$domain'");
$list['alias_count'] = $result['rows'];
$result = db_query ("SELECT * FROM mailbox WHERE domain='$domain'");
$list['mailbox_count'] = $result['rows'];
$list['alias_count'] = $list['alias_count'] - $list['mailbox_count'];
$result = db_query ("SELECT * FROM domain WHERE domain='$domain'");
$row = mysql_fetch_array ($result['result']);
$list['description'] = $row['description'];
$list['aliases'] = $row['aliases'];
$list['mailboxes'] = $row['mailboxes'];
$list['maxquota'] = $row['maxquota'];
$list['created'] = $row['created'];
$list['modified'] = $row['modified'];
$list['active'] = $row['active'];
return $list;
}
//
// check_alias
// Action: Checks if the domain is still able to create aliases.
// Call: check_alias (string domain)
//
function check_alias ($domain)
{
$limit = get_domain_properties ($domain);
if ($limit['aliases'] >= 0)
{
if ($limit['alias_count'] >= $limit['aliases'])
{
return false;
}
}
return true;
}
//
// check_mailbox
// Action: Checks if the domain is still able to create mailboxes.
// Call: ceck_mailbox (string domain)
//
function check_mailbox ($domain)
{
$limit = get_domain_properties ($domain);
if ($limit['mailboxes'] >= 0)
{
if ($limit['mailbox_count'] >= $limit['mailboxes'])
{
return false;
}
}
return true;
}
//
// check_quota
// Action: Checks if the user is creating a mailbox with the correct quota
// Call: check_quota (string domain)
//
function check_quota ($quota, $domain)
{
$limit = get_domain_properties ($domain);
if ($limit['maxquota'] >= 0)
{
if ($quota > $limit['maxquota'])
{
return false;
}
}
return true;
}
//
// check_owner
// Action: Checks if the admin is the owner of the domain.
// Call: check_owner (string admin, string domain)
//
function check_owner ($username, $domain)
{
$result = db_query ("SELECT * FROM domain_admins WHERE username='$username' AND domain='$domain' AND active='1'");
if ($result['rows'] != 1)
{
return false;
}
else
{
return true;
}
}
//
// list_domains_for_admin
// Action: Lists all the domains for an admin.
// Call: list_domains_for_admin (string admin)
//
function list_domains_for_admin ($username)
{
$list = "";
$result = db_query ("SELECT * FROM domain LEFT JOIN domain_admins ON domain.domain=domain_admins.domain WHERE domain_admins.username='$username' AND domain.active='1' ORDER BY domain_admins.domain");
if ($result['rows'] > 0)
{
$i = 0;
while ($row = mysql_fetch_array ($result['result']))
{
$list[$i] = $row['domain'];
$i++;
}
}
return $list;
}
//
// list_domains
// Action: List all available domains.
// Call: list_domains ()
//
function list_domains ()
{
$list = "";
$result = db_query ("SELECT * FROM domain ORDER BY domain");
if ($result['rows'] > 0)
{
$i = 0;
while ($row = mysql_fetch_array ($result['result']))
{
$list[$i] = $row['domain'];
$i++;
}
}
return $list;
}
//
// admin_exist
// Action: Checks if the admin already exists.
// Call: admin_exist (string admin)
//
// was check_admin
//
function admin_exist ($username)
{
$result = db_query ("SELECT * FROM admin WHERE username='$username'");
if ($result['rows'] != 1)
{
return false;
}
else
{
return true;
}
}
//
// domain_exist
// Action: Checks if the domain already exists.
// Call: domain_exist (string domain)
//
function domain_exist ($domain)
{
$result = db_query ("SELECT * FROM domain WHERE domain='$domain'");
if ($result['rows'] != 1)
{
return false;
}
else
{
return true;
}
}
//
// list_admins
// Action: Lists all the admins
// Call: list_admins ()
//
// was admin_list_admins
//
function list_admins ()
{
$list = "";
$result = db_query ("SELECT * FROM admin ORDER BY username");
if ($result['rows'] > 0)
{
$i = 0;
while ($row = mysql_fetch_array ($result['result']))
{
$list[$i] = $row['username'];
$i++;
}
}
return $list;
}
//
// get_admin_properties
// Action: Get all the admin properties.
// Call: get_admin_properties (string admin)
function get_admin_properties ($username)
{
$list = "";
$result = db_query ("SELECT * FROM domain_admins WHERE username='$username'");
$list['domain_count'] = $result['rows'];
$result = db_query ("SELECT * FROM admin WHERE username='$username'");
$row = mysql_fetch_array ($result['result']);
$list['created'] = $row['created'];
$list['modified'] = $row['modified'];
$list['active'] = $row['active'];
return $list;
}
//
// pacrypt
// Action: Encrypts password based on config settings
// Call: pacrypt (string cleartextpassword)
//
function pacrypt ($pw, $salt="")
{
global $CONF;
$password = "";
if ($CONF['encrypt'] == 'md5crypt')
{
$password = md5crypt ($pw, $salt);
}
if ($CONF['encrypt'] == 'system')
{
$password = crypt ($pw, $salt);
}
if ($CONF['encrypt'] == 'cleartext')
{
$password = $pw;
}
return $password;
}
////////////////////////////////////////////////////////////////////////////////
//
// md5crypt
// Action: Creates MD5 encrypted password
// Call: md5crypt (string cleartextpassword)
//
$MAGIC = "$1$";
$ITOA64 = "./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
function md5crypt ($pw, $salt="", $magic="")
{
global $MAGIC;
if ($magic == "") $magic = $MAGIC;
if ($salt == "") $salt = create_salt();
$slist = explode ("$", $salt);
if ($slist[0] == "1") $salt = $slist[1];
$salt = substr ($salt, 0, 8);
$ctx = $pw . $magic . $salt;
$final = hex2bin (md5 ($pw . $salt . $pw));
for ($i=strlen ($pw); $i>0; $i-=16) {
if ($i > 16)
$ctx .= substr ($final,0,16);
else
$ctx .= substr ($final,0,$i);
}
$i = strlen ($pw);
while ($i > 0) {
if ($i & 1) $ctx .= chr (0);
else $ctx .= $pw[0];
$i = $i >> 1;
}
$final = hex2bin (md5 ($ctx));
for ($i=0;$i<1000;$i++) {
$ctx1 = "";
if ($i & 1) $ctx1 .= $pw;
else $ctx1 .= substr ($final,0,16);
if ($i % 3) $ctx1 .= $salt;
if ($i % 7) $ctx1 .= $pw;
if ($i & 1) $ctx1 .= substr ($final,0,16);
else $ctx1 .= $pw;
$final = hex2bin (md5 ($ctx1));
}
$passwd = "";
$passwd .= to64 ( ( (ord ($final[0]) << 16) | (ord ($final[6]) << 8) | (ord ($final[12])) ), 4);
$passwd .= to64 ( ( (ord ($final[1]) << 16) | (ord ($final[7]) << 8) | (ord ($final[13])) ), 4);
$passwd .= to64 ( ( (ord ($final[2]) << 16) | (ord ($final[8]) << 8) | (ord ($final[14])) ), 4);
$passwd .= to64 ( ( (ord ($final[3]) << 16) | (ord ($final[9]) << 8) | (ord ($final[15])) ), 4);
$passwd .= to64 ( ( (ord ($final[4]) << 16) | (ord ($final[10]) << 8) | (ord ($final[5])) ), 4);
$passwd .= to64 ( ord ($final[11]), 2);
return "$magic$salt\$$passwd";
}
function create_salt ()
{
srand ((double)microtime ()*1000000);
$salt = substr (md5 (rand (0,9999999)), 0, 8);
return $salt;
}
function hex2bin ($str)
{
$len = strlen ($str);
$nstr = "";
for ($i=0;$i<$len;$i+=2) {
$num = sscanf (substr ($str,$i,2), "%x");
$nstr.=chr ($num[0]);
}
return $nstr;
}
function to64 ($v, $n)
{
global $ITOA64;
$ret = "";
while (($n - 1) >= 0) {
$n--;
$ret .= $ITOA64[$v & 0x3f];
$v = $v >> 6;
}
return $ret;
}
//
// db_connect
// Action: Makes a connection to the database if it doesn't exist
// Call: db_connect ()
//
function db_connect ()
{
global $CONF;
$link = @mysql_connect ($CONF['database_host'], $CONF['database_user'], $CONF['database_password']) or die ("<p />DEBUG INFORMATION:<br />Connect: " . mysql_error ());
$succes = @mysql_select_db ($CONF['database_name'], $link) or die ("<p />DEBUG INFORMATION:<br />MySQL Select Database: " . mysql_error ());
return $link;
}
//
// db_query
// Action: Sends a query to the database and returns query result and number of rows
// Call: db_query (string query)
//
function db_query ($query)
{
global $CONF;
$link = db_connect ();
$result = @mysql_query ($query, $link) or die ("<p />DEBUG INFORMATION:<br />Invalid query: " . mysql_error());
if (eregi ("^select", $query))
{
// if $query was a select statement check the number of rows with mysql_num_rows ().
$number_rows = mysql_num_rows ($result);
}
else
{
// if $query was something else, UPDATE, DELETE or INSERT check the number of rows with
// mysql_affected_rows ().
$number_rows = mysql_affected_rows ($link);
}
$return = array (
"result" => $result,
"rows" => $number_rows
);
return $return;
}
//
// db_delete
// Action: Deletes a row from a specified table
// Call db_delete (string table, string where, string delete)
//
function db_delete ($table,$where,$delete)
{
$result = db_query ("DELETE FROM $table WHERE $where='$delete'");
if ($result['rows'] >= 1)
{
return $result['rows'];
}
else
{
return true;
}
}
//
// db_log
// Action: Logs actions from admin
// Call: db_delete (string username, string domain, string action, string data)
//
function db_log ($username,$domain,$action,$data)
{
global $CONF;
if ($CONF['logging'] == 'YES')
{
$result = db_query ("INSERT INTO log (timestamp,username,domain,action,data) VALUES (NOW(),'$username','$domain','$action','$data')");
if ($result['rows'] != 1)
{
return false;
}
else
{
return true;
}
}
}
?>

17
index.php

@ -0,0 +1,17 @@
<?php
//
// File: index.php
//
// Template File: -none-
//
// Template Variables:
//
// -none-
//
// Form POST \ GET Variables:
//
// -none-
//
header ("Location: login.php");
exit;
?>

286
languages/de.lang

@ -0,0 +1,286 @@
<?php
//
// Language file German
//
$LANG['YES'] = 'JA';
$PALANG['NO'] = 'NEIN';
$PALANG['edit'] = 'editieren';
$PALANG['del'] = 'l&ouml;schen';
$PALANG['confirm'] = 'Sind Sie sicher dass Sie das l&ouml;schen wollen?';
$PALANG['confirm_domain'] = 'Wollen Sie wirklich alle Eintr&auml;ge dieser Domain l&ouml;schen? Dies kann NICHT r&uuml;ckg&auml;ngig gemacht werden!';
$PALANG['pLogin_welcome'] = 'Mail-Administratoren loggen sich bitte hier ein.';
$PALANG['pLogin_username'] = 'Login (eMail)';
$PALANG['pLogin_password'] = 'Passwort';
$PALANG['pLogin_button'] = 'Login';
$PALANG['pLogin_username_incorrect'] = 'Ihr Login-Name ist nicht korrekt. Bitte benutzen Sie die komplette eMail-Adresse';
$PALANG['pLogin_password_incorrect'] = 'Falsches Passwort!';
$PALANG['pLogin_login_users'] = 'eMail-Benutzer bitte hier einloggen.';
$PALANG['pMenu_overview'] = '&Uuml;berblick';
$PALANG['pMenu_create_alias'] = 'Alias hinzuf&uuml;gen';
$PALANG['pMenu_create_mailbox'] = 'Mailbox hinzuf&uuml;gen';
$PALANG['pMenu_sendmail'] = 'Email versenden';
$PALANG['pMenu_password'] = 'Passwort &auml;ndern';
$PALANG['pMenu_viewlog'] = 'Log ansehen';
$PALANG['pMenu_logout'] = 'Logout';
$PALANG['pMain_welcome'] = 'Willkommen zu Postfix Admin!';
$PALANG['pMain_overview'] = 'Listet Ihre Aliase und Mailboxen auf. Sie k&ouml;nnen sie hier editieren und l&ouml;schen.';
$PALANG['pMain_create_alias'] = 'Fügt einen neuen Alias f&uuml;r Ihre Domain hinzu.';
$PALANG['pMain_create_mailbox'] = 'Legt eine neue Mailbox f&uuml;r Ihre Domain an.';
$PALANG['pMain_sendmail'] = 'Versenden Sie eine Email.';
$PALANG['pMain_password'] = '&Auml;ndern Sie Ihr Admin-Passwort.';
$PALANG['pMain_viewlog'] = 'Lassen Sie sich das Log anzeigen.';
$PALANG['pMain_logout'] = 'Ausloggen aus dem System';
$PALANG['pOverview_button'] = 'Los';
$PALANG['pOverview_welcome'] = '&Uuml;berblick &uuml;ber ';
$PALANG['pOverview_alias_alias_count'] = 'Aliase';
$PALANG['pOverview_alias_mailbox_count'] = 'Mailboxen';
$PALANG['pOverview_alias_address'] = 'Von';
$PALANG['pOverview_alias_goto'] = 'An';
$PALANG['pOverview_alias_modified'] = 'Zuletzt ver&auml;ndert';
$PALANG['pOverview_mailbox_username'] = 'Email';
$PALANG['pOverview_mailbox_name'] = 'Name';
$PALANG['pOverview_mailbox_quota'] = 'Quota (MB)';
$PALANG['pOverview_mailbox_modified'] = 'Zuletzt ver&auml;ndert';
$PALANG['pOverview_mailbox_active'] = 'Aktiv';
$PALANG['pOverview_get_domain'] = 'Domain';
$PALANG['pOverview_get_aliases'] = 'Aliases';
$PALANG['pOverview_get_mailboxes'] = 'Mailboxes';
$PALANG['pOverview_get_quota'] = 'Mailbox Quota (MB)';
$PALANG['pOverview_get_modified'] = 'Zuletzt ver&auml;ndert';
$PALANG['pDelete_delete_error'] = '<font color="red">Eintrag konnte nicht gel&ouml;scht werden ';
$PALANG['pDelete_domain_error'] = '<font color="red">Diese Domain geh&ouml;rt nicht Ihnen ';
$PALANG['pCreate_alias_welcome'] = 'Neuen Alias f&uuml;r Ihre Domain anlegen';
$PALANG['pCreate_alias_address'] = 'Alias';
$PALANG['pCreate_alias_address_text_error1'] = '<br /><font color="red">Dieses ALIAS ist nicht erlaubt!</font>';
$PALANG['pCreate_alias_address_text_error2'] = '<br /><font color="red">Diese eMail-Adresse existiert bereits. Bitte w&auml;hlen Sie eine andere!</font>';
$PALANG['pCreate_alias_address_text_error3'] = '<br /><font color="red">Sie haben Ihr Limit f&uuml;r Aliase auf dieser Domain erreicht!</font>';
$PALANG['pCreate_alias_goto'] = 'An';
$PALANG['pCreate_alias_button'] = 'Alias hinzuf&uuml;gen';
$PALANG['pCreate_alias_goto_text'] = 'Wohin soll die eMail weitergeleitet werden?';
$PALANG['pCreate_alias_goto_text_error'] = 'Wohin die eMail weitergeleitet werden soll<br /><font color="red">Das An-Feld ist falsch!</font>';
$PALANG['pCreate_alias_result_error'] = '<font color="red">Unm&ouml;glich dieses Alias in die Alias-Tabelle einzutragen!</font>';
$PALANG['pCreate_alias_result_succes'] = 'Das Alias wurde in die Alias-Tabelle hinzugef&uuml;gt!';
$PALANG['pCreate_alias_catchall_text'] = 'Um alle Adressen abzudecken benutzen Sie einen "*" als Alias.<br />Um ganze Domains an andere Domains weiterzuleiten benutzen Sie "*@domain.tld" im "An"-Feld.';
$PALANG['pEdit_alias_welcome'] = '&Auml;ndern Sie einen Alias f&uuml;r Ihre Domain<br />EIN Eintrag pro Zeile!';
$PALANG['pEdit_alias_address'] = 'Alias';
$PALANG['pEdit_alias_address_error'] = '<font color="red">Auffinden des Alias schlug fehl!</font>';
$PALANG['pEdit_alias_goto'] = 'An';
$PALANG['pEdit_alias_goto_text_error1'] = '<font color="red">Sie haben im "To"-Feld nichts angegeben!</font>';
$PALANG['pEdit_alias_goto_text_error2'] = '<font color="red">Die angegebene eMail-Adresse ist nicht korrekt: ';
$PALANG['pEdit_alias_domain_error'] = '<font color="red">Diese Domain geh&ouml;rt nicht Ihnen: ';
$PALANG['pEdit_alias_button'] = 'Alias &auml;ndern';
$PALANG['pEdit_alias_result_error'] = '<font color="red">&Auml;ndern des Aliases nicht m&ouml;glich!</font>';
$PALANG['pCreate_mailbox_welcome'] = 'Legen Sie eine neue Mailbox f&uuml;r Ihre Domain an.';
$PALANG['pCreate_mailbox_username'] = 'Benutzername';
$PALANG['pCreate_mailbox_username_text_error1'] = '<br /><font color="red">Die EMAIL ist nicht korrekt!</font>';
$PALANG['pCreate_mailbox_username_text_error2'] = '<br /><font color="red">Diese Email-Adresse existiert bereits. Bitte w&auml;hlen Sie eine andere!</font>';
$PALANG['pCreate_mailbox_username_text_error3'] = '<br /><font color="red">Sie d&uuml;rfen leider nicht mehr Mailboxen f&uuml;r diese Domain anlegen!</font>';
$PALANG['pCreate_mailbox_password'] = 'Passwort';
$PALANG['pCreate_mailbox_password2'] = 'Passwort (nochmal)';
$PALANG['pCreate_mailbox_password_text'] = 'Passwort f&uuml;r POP3/IMAP';
$PALANG['pCreate_mailbox_password_text_error'] = 'Passwort f&uuml;r POP3/IMAP<br /><font color="red">Die beiden Passw&ouml;rter sind nicht identisch!<br />Oder ganz leer!</font>';
$PALANG['pCreate_mailbox_name'] = 'Name';
$PALANG['pCreate_mailbox_name_text'] = 'Voller Name';
$PALANG['pCreate_mailbox_quota'] = 'Quota';
$PALANG['pCreate_mailbox_quota_text'] = 'MB';
$PALANG['pCreate_mailbox_quota_text_error'] = 'MB<br /><font color="red">Das angegebene Quota ist zu hoch!</font>';
$PALANG['pCreate_mailbox_active'] = 'Aktiv';
$PALANG['pCreate_mailbox_mail'] = 'Mailbox anlegen';
$PALANG['pCreate_mailbox_button'] = 'Mailbox hinzuf&uuml;gen';
$PALANG['pCreate_mailbox_result_error'] = '<font color="red">Unm&ouml;glich die Mailbox in die Mailbox-Tabelle einzutragen!</font>';
$PALANG['pCreate_mailbox_result_succes'] = 'Die Mailbox wurde in die Mailbox-Tabelle eingetragen!';
$PALANG['pEdit_mailbox_welcome'] = '&Auml;ndern Sie ihre Mailbox hier.';
$PALANG['pEdit_mailbox_username'] = 'Benutzername';
$PALANG['pEdit_mailbox_username_error'] = '<font color="red">Unm&ouml;glich die Mailbox aufzufinden!</font>';
$PALANG['pEdit_mailbox_password'] = 'Neues Passwort';
$PALANG['pEdit_mailbox_password2'] = 'Neues Passwort (nochmal)';
$PALANG['pEdit_mailbox_password_text_error'] = '<font color="red">Die beiden Passw&ouml;rter sind nicht identisch!</font>';
$PALANG['pEdit_mailbox_name'] = 'Name';
$PALANG['pEdit_mailbox_quota'] = 'Quota';
$PALANG['pEdit_mailbox_quota_text'] = 'MB';
$PALANG['pEdit_mailbox_quota_text_error'] = 'MB<br /><font color="red">Das angegebene Quota ist zu hoch!</font>';
$PALANG['pEdit_mailbox_domain_error'] = '<font color="red">Diese Domain geh&ouml;rt nicht Ihnen: ';
$PALANG['pEdit_mailbox_button'] = 'Mailbox editieren';
$PALANG['pEdit_mailbox_result_error'] = '<font color="red">Unm&ouml;glich das Passwort zu &auml;ndern!</font>';
$PALANG['pPassword_welcome'] = '&Auml;ndern Sie Ihr Login-Passwort.';
$PALANG['pPassword_admin'] = 'Login';
$PALANG['pPassword_admin_text_error'] = '<font color="red">Das angegebene Login entspricht keiner Mailbox!</font>';
$PALANG['pPassword_password_current'] = 'Jetziges Password';
$PALANG['pPassword_password_current_text_error'] = '<font color="red">Sie haben Ihr derzeitiges Passwort nicht angegeben!</font>';
$PALANG['pPassword_password'] = 'Neues Passwort';
$PALANG['pPassword_password2'] = 'Neues Password (nochmal)';
$PALANG['pPassword_password_text_error'] = '<font color="red">Die beiden angegebenen Passw&ouml;rter sind nicht identische!<br />Oder leer!</font>';
$PALANG['pPassword_button'] = 'Passwort &auml;ndern';
$PALANG['pPassword_result_error'] = '<font color="red">Unm&ouml;glich das Passwort zu &auml;ndern!</font>';
$PALANG['pPassword_result_succes'] = 'Ihr Passwort wurde ge&auml;ndert!';
$PALANG['pViewlog_welcome'] = 'Zeigt die letzten 10 Aktionen f&uuml;r ';
$PALANG['pViewlog_timestamp'] = 'Zeitpunkt';
$PALANG['pViewlog_username'] = 'Admin';
$PALANG['pViewlog_domain'] = 'Domain';
$PALANG['pViewlog_action'] = 'Aktion';
$PALANG['pViewlog_data'] = 'Daten';
$PALANG['pViewlog_button'] = 'Los';
$PALANG['pViewlog_result_error'] = '<font color="red">Kann keine Eintr&auml;ge finden!</font>';
$PALANG['pSendmail_welcome'] = 'eMail versenden.';
$PALANG['pSendmail_admin'] = 'Von';
$PALANG['pSendmail_to'] = 'An';
$PALANG['pSendmail_to_text_error'] = '<font color="red">Das "An"-Feld ist leer bzw. ung&uuml;ltig!</font>';
$PALANG['pSendmail_subject'] = 'Betreff';
$PALANG['pSendmail_subject_text'] = 'Willkommen';
$PALANG['pSendmail_body'] = 'Text';
$PALANG['pSendmail_body_text'] = <<<EOM
Hallo,
Viel Spass mit Ihrem neuen Email-Account.
EOM;
$PALANG['pSendmail_button'] = 'Versende Nachricht';
$PALANG['pSendmail_result_error'] = '<font color="red">Kann Mailbox nicht anlegen!</font>';
$PALANG['pSendmail_result_succes'] = 'Mailbox wurde angelegt!';
$PALANG['pVcp_welcome'] = 'Mailbox-Passwort &auml;ndern';
$PALANG['pVcp_username'] = 'Email';
$PALANG['pVcp_username_text_error'] = '<font color="red">Die angegebene Email passt zu keiner Mailbox!</font>';
$PALANG['pVcp_password_current'] = 'Derzeitiges Passwort';
$PALANG['pVcp_password_current_text_error'] = '<font color="red">Sie haben ihr derzeitiges Passwort nicht angegeben!</font>';
$PALANG['pVcp_password'] = 'Neues Passwort';
$PALANG['pVcp_password2'] = 'Neues Passwort (nochmal)';
$PALANG['pVcp_password_text_error'] = '<font color="red">Die beiden Passw&ouml;rter sind nicht identisch<br />Oder sind leer</font>';
$PALANG['pVcp_button'] = 'Passwort &auml;ndern';
$PALANG['pVcp_result_error'] = '<font color="red">Kann das Passwort nicht &auml;ndern</font>';
$PALANG['pVcp_result_succes'] = 'Passwort wurde ge&auml;ndert!';
$PALANG['pAdminMenu_list_admin'] = 'Admin Liste';
$PALANG['pAdminMenu_list_domain'] = 'Domain Liste';
$PALANG['pAdminMenu_list_virtual'] = 'Virtual Liste';
$PALANG['pAdminMenu_viewlog'] = 'Log ansehen';
$PALANG['pAdminMenu_backup'] = 'Sicherung';
$PALANG['pAdminMenu_create_domain_admins'] = 'Domain Admins';
$PALANG['pAdminMenu_create_admin'] = 'Neuer Admin';
$PALANG['pAdminMenu_create_domain'] = 'Neue Domain';
$PALANG['pAdminMenu_create_alias'] = 'Alias hinzuf&uuml;gen';
$PALANG['pAdminMenu_create_mailbox'] = 'Mailbox hinzuf&uuml;gen';
$PALANG['pAdminList_admin_domain'] = 'Domain';
$PALANG['pAdminList_admin_username'] = 'Admin';
$PALANG['pAdminList_admin_count'] = 'Domains';
$PALANG['pAdminList_admin_modified'] = 'zuletzt ge&auml;ndert';
$PALANG['pAdminList_admin_active'] = 'Aktiv';
$PALANG['pAdminList_domain_domain'] = 'Domain';
$PALANG['pAdminList_domain_description'] = 'Beschreibung';
$PALANG['pAdminList_domain_aliases'] = 'Aliase';
$PALANG['pAdminList_domain_mailboxes'] = 'Mailboxen';
$PALANG['pAdminList_domain_maxquota'] = 'Max Quota (MB)';
$PALANG['pAdminList_domain_modified'] = 'zuletzt ge&auml;ndert';
$PALANG['pAdminList_domain_active'] = 'Aktiv';
$PALANG['pAdminList_virtual_button'] = 'Los';
$PALANG['pAdminList_virtual_welcome'] = '&Uuml;berblic f&uuml;r ';
$PALANG['pAdminList_virtual_alias_alias_count'] = 'Aliase';
$PALANG['pAdminList_virtual_alias_mailbox_count'] = 'Mailboxen';
$PALANG['pAdminList_virtual_alias_address'] = 'Von';
$PALANG['pAdminList_virtual_alias_goto'] = 'An';
$PALANG['pAdminList_virtual_alias_modified'] = 'zuletzt ge&auml;ndert';
$PALANG['pAdminList_virtual_mailbox_username'] = 'Email';
$PALANG['pAdminList_virtual_mailbox_name'] = 'Name';
$PALANG['pAdminList_virtual_mailbox_quota'] = 'Quota (MB)';
$PALANG['pAdminList_virtual_mailbox_modified'] = 'zuletzt ge&auml;ndert';
$PALANG['pAdminList_virtual_mailbox_active'] = 'Aktiv';
$PALANG['pAdminCreate_domain_welcome'] = 'Domain hinzuf&uuml;gen';
$PALANG['pAdminCreate_domain_domain'] = 'Domain';
$PALANG['pAdminCreate_domain_domain_text_error'] = '<font color="red">Diese Domain existiert bereits!</font>';
$PALANG['pAdminCreate_domain_description'] = 'Beschreibung';
$PALANG['pAdminCreate_domain_aliases'] = 'Aliase';
$PALANG['pAdminCreate_domain_aliases_text'] = '0 = ausschalten | -1 = kein Limit';
$PALANG['pAdminCreate_domain_mailboxes'] = 'Mailboxes';
$PALANG['pAdminCreate_domain_mailboxes_text'] = '0 = ausschalten | -1 = kein Limit';
$PALANG['pAdminCreate_domain_maxquota'] = 'Max Quota';
$PALANG['pAdminCreate_domain_maxquota_text'] = 'MB<br /> 0 = ausschalten | -1 = kein Limit';
$PALANG['pAdminCreate_domain_defaultaliases'] = 'Standard-Aliase hinzuf&uuml;gen';
$PALANG['pAdminCreate_domain_button'] = 'Domain hinzuf&uuml;gen';
$PALANG['pAdminCreate_domain_result_error'] = '<font color="red">Konnte Domain nicht anlegen!</font>';
$PALANG['pAdminCreate_domain_result_succes'] = 'Domain wurde angelegt!';
$PALANG['pAdminEdit_domain_welcome'] = 'Domain editieren';
$PALANG['pAdminEdit_domain_domain'] = 'Domain';
$PALANG['pAdminEdit_domain_description'] = 'Beschreibung';
$PALANG['pAdminEdit_domain_aliases'] = 'Aliase';
$PALANG['pAdminCreate_domain_aliases_text'] = '0 = ausschalten | -1 = kein Limit';
$PALANG['pAdminEdit_domain_mailboxes'] = 'Mailboxes';
$PALANG['pAdminCreate_domain_mailboxes_text'] = '0 = ausschalten | -1 = kein Limit';
$PALANG['pAdminEdit_domain_maxquota'] = 'Max Quota';
$PALANG['pAdminCreate_domain_maxquota_text'] = 'MB<br /> 0 = ausschalten | -1 = kein Limit';
$PALANG['pAdminEdit_domain_active'] = 'Aktiv';
$PALANG['pAdminEdit_domain_button'] = 'Domain editieren';
$PALANG['pAdminEdit_domain_result_error'] = '<font color="red">Konnte Domain nicht editieren!</font>';
$PALANG['pAdminCreate_admin_welcome'] = 'Neuen Domain-Admin hinzuf&uuml;gen';
$PALANG['pAdminCreate_admin_username'] = 'Admin';
$PALANG['pAdminCreate_admin_username_text'] = 'Email Adresse';
$PALANG['pAdminCreate_admin_username_text_error1'] = 'Email Adresse<br /><font color="red">Admin-Adresse ist keine echte Email-Adresse!</font>';
$PALANG['pAdminCreate_admin_username_text_error2'] = 'Email Adresse<br /><font color="red">Der Admin existiert bereits bzw. ist nicht korrekt</font>';
$PALANG['pAdminCreate_admin_password'] = 'Passwort';
$PALANG['pAdminCreate_admin_password2'] = 'Passwort (nochmal)';
$PALANG['pAdminCreate_admin_password_text_error'] = '<font color="red">Die angegebenen Passw&ouml;rter sind nicht identisch<br />Oder leer!</font>';
$PALANG['pAdminCreate_admin_button'] = 'Admin hinzuf&uuml;gen';
$PALANG['pAdminCreate_admin_result_error'] = '<font color="red">Konnte den Admin nicht anlegen!</font>';
$PALANG['pAdminCreate_admin_result_succes'] = 'Admin angelegt!';
$PALANG['pAdminCreate_admin_address'] = 'Domain';
$PALANG['pAdminEdit_admin_welcome'] = 'Domain Admin editieren';
$PALANG['pAdminEdit_admin_username'] = 'Admin';
$PALANG['pAdminEdit_admin_password'] = 'Passwort';
$PALANG['pAdminEdit_admin_password2'] = 'Passwort (nochmal)';
$PALANG['pAdminEdit_admin_password_text_error'] = '<font color="red">Die beiden Passw&ouml;rter sind nicht identisch<br />Oder leer!</font>';
$PALANG['pAdminEdit_admin_active'] = 'Aktiv';
$PALANG['pAdminEdit_admin_button'] = 'Admin editieren';
$PALANG['pAdminEdit_admin_result_error'] = '<font color="red">Konnte Admin nicht &auml;ndern</font>';
$PALANG['pAdminEdit_admin_result_succes'] = 'Admin ge&auml;ndert!';
$PALANG['pUsersLogin_welcome'] = 'Benutzer bitte hier einloggen, um Weiterleitungen bzw. das Passwort zu &auml;ndern.';
$PALANG['pUsersLogin_username'] = 'Login (email)';
$PALANG['pUsersLogin_password'] = 'Passwort';
$PALANG['pUsersLogin_button'] = 'Login';
$PALANG['pUsersLogin_username_incorrect'] = 'Falscher Login! Bitte benutzen Sie ihre Email-Adresse als Login';
$PALANG['pUsersLogin_password_incorrect'] = 'Falsches Passwort!';
$PALANG['pUsersMenu_vacation'] = 'Automatische Antwort';
$PALANG['pUsersMenu_edit_alias'] = 'Weiterleitung &auml;ndern';
$PALANG['pUsersMenu_password'] = 'Passwort &auml;ndern';
$PALANG['pUsersMain_welcome'] = '&Auml;ndern Sie Ihre Mailboxeinstellungen hier!';
$PALANG['pUsersMain_vacation'] = 'Geben Sie eine "Automatische Antwort" ein. Sinnvoll z.B. w&auml;hrend Sie im Urlaub sind';
$PALANG['pUsersMain_edit_alias'] = '&Auml;ndern Sie Ihre Weiterleitung.';
$PALANG['pUsersMain_password'] = '&Auml;ndern Sie Ihr Passwort.';
$PALANG['pUsersVacation_welcome'] = 'Automatische Antwort.';
$PALANG['pUsersVacation_welcome_text'] = 'Sie haben schon eine Automatische Antwort konfiguriert!';
$PALANG['pUsersVacation_subject'] = 'Betreff';
$PALANG['pUsersVacation_subject_text'] = 'Ich bin weg...';
$PALANG['pUsersVacation_body'] = 'Text';
$PALANG['pUsersVacation_body_text'] = <<<EOM
Ich bin vom <date> bis <date> nicht zu Hause / im Büro.
In dringenden Fällen setzen Sie sich bitte mit <contact person> in Verbindung.
Vielen Dank für Ihr Verständniss.
EOM;
$PALANG['pUsersVacation_button_away'] = 'Ich gehe weg';
$PALANG['pUsersVacation_button_back'] = 'Ich bin zur&uuml;ck';
$PALANG['pUsersVacation_result_error'] = '<font color="red">Konnte Ihre Automatische Antwort nicht einstellen!</font>';
$PALANG['pUsersVacation_result_succes'] = 'Ihre Automatische Antwort wurde gel&ouml;scht!';
?>

284
languages/en.lang

@ -0,0 +1,284 @@
<?php
//
// Language file English
//
$PALANG['YES'] = 'YES';
$PALANG['NO'] = 'NO';
$PALANG['edit'] = 'edit';
$PALANG['del'] = 'del';
$PALANG['confirm'] = 'Are you sure you want to delete this?';
$PALANG['confirm_domain'] = 'Do you really want to delete all records for this domain? This can not be undone!';
$PALANG['pLogin_welcome'] = 'Mail admins login here to administrate your domain.';
$PALANG['pLogin_username'] = 'Login (email)';
$PALANG['pLogin_password'] = 'Password';
$PALANG['pLogin_button'] = 'Login';
$PALANG['pLogin_username_incorrect'] = 'Your login is not correct. Make sure that you login with your email address!';
$PALANG['pLogin_password_incorrect'] = 'Your password is not correct!';
$PALANG['pLogin_login_users'] = 'Users click here to login to the user section.';
$PALANG['pMenu_overview'] = 'Overview';
$PALANG['pMenu_create_alias'] = 'Add Alias';
$PALANG['pMenu_create_mailbox'] = 'Add Mailbox';
$PALANG['pMenu_sendmail'] = 'Send Email';
$PALANG['pMenu_password'] = 'Password';
$PALANG['pMenu_viewlog'] = 'View Log';
$PALANG['pMenu_logout'] = 'Logout';
$PALANG['pMain_welcome'] = 'Welcome to Postfix Admin!';
$PALANG['pMain_overview'] = 'List your aliases and mailboxes. You can edit / delete them from here.';
$PALANG['pMain_create_alias'] = 'Create a new alias for your domain.';
$PALANG['pMain_create_mailbox'] = 'Create a new mailbox for your domain.';
$PALANG['pMain_sendmail'] = 'Send an email to one of your newly created mailboxes.';
$PALANG['pMain_password'] = 'Change the password for your admin account.';
$PALANG['pMain_viewlog'] = 'View the log files.';
$PALANG['pMain_logout'] = 'Logout from the system';
$PALANG['pOverview_button'] = 'Go';
$PALANG['pOverview_welcome'] = 'Overview 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_mailbox_username'] = 'Email';
$PALANG['pOverview_mailbox_name'] = 'Name';
$PALANG['pOverview_mailbox_quota'] = 'Quota (MB)';
$PALANG['pOverview_mailbox_modified'] = 'Last Modified';
$PALANG['pOverview_mailbox_active'] = 'Active';
$PALANG['pOverview_get_domain'] = 'Domain';
$PALANG['pOverview_get_aliases'] = 'Aliases';
$PALANG['pOverview_get_mailboxes'] = 'Mailboxes';
$PALANG['pOverview_get_quota'] = 'Mailbox Quota (MB)';
$PALANG['pOverview_get_modified'] = 'Last Modified';
$PALANG['pDelete_delete_error'] = '<font color="red">Unable to delete the entry ';
$PALANG['pDelete_domain_error'] = '<font color="red">This domain is not yours ';
$PALANG['pCreate_alias_welcome'] = 'Create a new alias for your domain.';
$PALANG['pCreate_alias_address'] = 'Alias';
$PALANG['pCreate_alias_address_text_error1'] = '<br /><font color="red">The ALIAS is not valid!</font>';
$PALANG['pCreate_alias_address_text_error2'] = '<br /><font color="red">This email address already exists, please choose a different one!</font>';
$PALANG['pCreate_alias_address_text_error3'] = '<br /><font color="red">You have reached your limit to create aliases!</font>';
$PALANG['pCreate_alias_goto'] = 'To';
$PALANG['pCreate_alias_button'] = 'Add Alias';
$PALANG['pCreate_alias_goto_text'] = 'Where the mail needs to be send to.';
$PALANG['pCreate_alias_goto_text_error'] = 'Where the email needs to go.<br /><font color="red">The TO is not valid!</font>';
$PALANG['pCreate_alias_result_error'] = '<font color="red">Unable to add the alias to the alias table!</font>';
$PALANG['pCreate_alias_result_succes'] = '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['pEdit_alias_welcome'] = 'Edit an alias for your domain.<br />One entry per line.';
$PALANG['pEdit_alias_address'] = 'Alias';
$PALANG['pEdit_alias_address_error'] = '<font color="red">Unable to locate alias!</font>';
$PALANG['pEdit_alias_goto'] = 'To';
$PALANG['pEdit_alias_goto_text_error1'] = '<font color="red">You didn\'t enter anything at To</font>';
$PALANG['pEdit_alias_goto_text_error2'] = '<font color="red">The email address that you have entered is not valid: ';
$PALANG['pEdit_alias_domain_error'] = '<font color="red">This domain is not yours: ';
$PALANG['pEdit_alias_button'] = 'Edit Alias';
$PALANG['pEdit_alias_result_error'] = '<font color="red">Unable to modify the alias!</font>';
$PALANG['pCreate_mailbox_welcome'] = 'Create a new local mailbox for your domain.';
$PALANG['pCreate_mailbox_username'] = 'Username';
$PALANG['pCreate_mailbox_username_text_error1'] = '<br /><font color="red">The EMAIL is not valid!</font>';
$PALANG['pCreate_mailbox_username_text_error2'] = '<br /><font color="red">This email address already exists, please choose a different one!</font>';
$PALANG['pCreate_mailbox_username_text_error3'] = '<br /><font color="red">You have reached your limit to create mailboxes!</font>';
$PALANG['pCreate_mailbox_password'] = 'Password';
$PALANG['pCreate_mailbox_password2'] = 'Password (again)';
$PALANG['pCreate_mailbox_password_text'] = 'Password for POP3/IMAP';
$PALANG['pCreate_mailbox_password_text_error'] = 'Password for POP3/IMAP<br /><font color="red">The passwords that you supplied don\'t match!<br />Or are empty!</font>';
$PALANG['pCreate_mailbox_name'] = 'Name';
$PALANG['pCreate_mailbox_name_text'] = 'Full name';
$PALANG['pCreate_mailbox_quota'] = 'Quota';
$PALANG['pCreate_mailbox_quota_text'] = 'MB';
$PALANG['pCreate_mailbox_quota_text_error'] = 'MB<br /><font color="red">The quota that you specified is to high!</font>';
$PALANG['pCreate_mailbox_active'] = 'Active';
$PALANG['pCreate_mailbox_mail'] = 'Create mailbox';
$PALANG['pCreate_mailbox_button'] = 'Add Mailbox';
$PALANG['pCreate_mailbox_result_error'] = '<font color="red">Unable to add the mailbox to the mailbox table!</font>';
$PALANG['pCreate_mailbox_result_succes'] = 'The mailbox has been added to the mailbox table!';
$PALANG['pEdit_mailbox_welcome'] = 'Edit a mailbox for your domain.';
$PALANG['pEdit_mailbox_username'] = 'Username';
$PALANG['pEdit_mailbox_username_error'] = '<font color="red">Unable to locate mailbox!</font>';
$PALANG['pEdit_mailbox_password'] = 'New Password';
$PALANG['pEdit_mailbox_password2'] = 'New Password (again)';
$PALANG['pEdit_mailbox_password_text_error'] = '<font color="red">The passwords that you supplied don\'t match!</font>';
$PALANG['pEdit_mailbox_name'] = 'Name';
$PALANG['pEdit_mailbox_quota'] = 'Quota';
$PALANG['pEdit_mailbox_quota_text'] = 'MB';
$PALANG['pEdit_mailbox_quota_text_error'] = 'MB<br /><font color="red">The quota that you specified is to high!</font>';
$PALANG['pEdit_mailbox_domain_error'] = '<font color="red">This domain is not yours: ';
$PALANG['pEdit_mailbox_button'] = 'Edit Mailbox';
$PALANG['pEdit_mailbox_result_error'] = '<font color="red">Unable to change the password!</font>';
$PALANG['pPassword_welcome'] = 'Change your login password.';
$PALANG['pPassword_admin'] = 'Login';
$PALANG['pPassword_admin_text_error'] = '<font color="red">The LOGIN that you supplied doesn\'t match a mailbox!</font>';
$PALANG['pPassword_password_current'] = 'Current Password';
$PALANG['pPassword_password_current_text_error'] = '<font color="red">You didn\'t supply your current password!</font>';
$PALANG['pPassword_password'] = 'New Password';
$PALANG['pPassword_password2'] = 'New Password (again)';
$PALANG['pPassword_password_text_error'] = '<font color="red">The passwords that you supplied don\'t match!<br />Or are empty!</font>';
$PALANG['pPassword_button'] = 'Change Password';
$PALANG['pPassword_result_error'] = '<font color="red">Unable to change your password!</font>';
$PALANG['pPassword_result_succes'] = 'Your password has been changed!';
$PALANG['pViewlog_welcome'] = 'View the last 10 actions for ';
$PALANG['pViewlog_timestamp'] = 'Timestamp';
$PALANG['pViewlog_username'] = 'Admin';
$PALANG['pViewlog_domain'] = 'Domain';
$PALANG['pViewlog_action'] = 'Action';
$PALANG['pViewlog_data'] = 'Data';
$PALANG['pViewlog_button'] = 'Go';
$PALANG['pViewlog_result_error'] = '<font color="red">Unable to find the logs!</font>';
$PALANG['pSendmail_welcome'] = 'Send an email.';
$PALANG['pSendmail_admin'] = 'From';
$PALANG['pSendmail_to'] = 'To';
$PALANG['pSendmail_to_text_error'] = '<font color="red">To is empty or is not a valid email address!</font>';
$PALANG['pSendmail_subject'] = 'Subject';
$PALANG['pSendmail_subject_text'] = 'Welcome';
$PALANG['pSendmail_body'] = 'Body';
$PALANG['pSendmail_body_text'] = <<<EOM
Hi,
Welcome to your new account.
EOM;
$PALANG['pSendmail_button'] = 'Send Message';
$PALANG['pSendmail_result_error'] = '<font color="red">Unable to create mailbox!</font>';
$PALANG['pSendmail_result_succes'] = 'The mailbox has been created!';
$PALANG['pVcp_welcome'] = 'Change your mailbox password.';
$PALANG['pVcp_username'] = 'Email';
$PALANG['pVcp_username_text_error'] = '<font color="red">The EMAIL that you supplied doesn\'t match a mailbox!</font>';
$PALANG['pVcp_password_current'] = 'Current Password';
$PALANG['pVcp_password_current_text_error'] = '<font color="red">You didn\'t supply your current password!</font>';
$PALANG['pVcp_password'] = 'New Password';
$PALANG['pVcp_password2'] = 'New Password (again)';
$PALANG['pVcp_password_text_error'] = '<font color="red">The passwords that you supplied don\'t match!<br />Or are empty!</font>';
$PALANG['pVcp_button'] = 'Change Password';
$PALANG['pVcp_result_error'] = '<font color="red">Unable to change your password!</font>';
$PALANG['pVcp_result_succes'] = 'Your password has been changed!';
$PALANG['pAdminMenu_list_admin'] = 'Admin List';
$PALANG['pAdminMenu_list_domain'] = 'Domain List';
$PALANG['pAdminMenu_list_virtual'] = 'Virtual List';
$PALANG['pAdminMenu_viewlog'] = 'View Log';
$PALANG['pAdminMenu_backup'] = 'Backup';
$PALANG['pAdminMenu_create_domain_admins'] = 'Domain Admins';
$PALANG['pAdminMenu_create_admin'] = 'New Admin';
$PALANG['pAdminMenu_create_domain'] = 'New Domain';
$PALANG['pAdminMenu_create_alias'] = 'Add Alias';
$PALANG['pAdminMenu_create_mailbox'] = 'Add Mailbox';
$PALANG['pAdminList_admin_domain'] = 'Domain';
$PALANG['pAdminList_admin_username'] = 'Admin';
$PALANG['pAdminList_admin_count'] = 'Domains';
$PALANG['pAdminList_admin_modified'] = 'Last Modified';
$PALANG['pAdminList_admin_active'] = 'Active';
$PALANG['pAdminList_domain_domain'] = 'Domain';
$PALANG['pAdminList_domain_description'] = 'Description';
$PALANG['pAdminList_domain_aliases'] = 'Aliases';
$PALANG['pAdminList_domain_mailboxes'] = 'Mailboxes';
$PALANG['pAdminList_domain_maxquota'] = 'Max Quota (MB)';
$PALANG['pAdminList_domain_modified'] = 'Last Modified';
$PALANG['pAdminList_domain_active'] = 'Active';
$PALANG['pAdminList_virtual_button'] = 'Go';
$PALANG['pAdminList_virtual_welcome'] = 'Overview for ';
$PALANG['pAdminList_virtual_alias_alias_count'] = 'Aliases';
$PALANG['pAdminList_virtual_alias_mailbox_count'] = 'Mailboxes';
$PALANG['pAdminList_virtual_alias_address'] = 'From';
$PALANG['pAdminList_virtual_alias_goto'] = 'To';
$PALANG['pAdminList_virtual_alias_modified'] = 'Last Modified';
$PALANG['pAdminList_virtual_mailbox_username'] = 'Email';
$PALANG['pAdminList_virtual_mailbox_name'] = 'Name';
$PALANG['pAdminList_virtual_mailbox_quota'] = 'Quota (MB)';
$PALANG['pAdminList_virtual_mailbox_modified'] = 'Last Modified';
$PALANG['pAdminList_virtual_mailbox_active'] = 'Active';
$PALANG['pAdminCreate_domain_welcome'] = 'Add a new domain';
$PALANG['pAdminCreate_domain_domain'] = 'Domain';
$PALANG['pAdminCreate_domain_domain_text_error'] = '<font color="red">The domain already exists!</font>';
$PALANG['pAdminCreate_domain_description'] = 'Description';
$PALANG['pAdminCreate_domain_aliases'] = 'Aliases';
$PALANG['pAdminCreate_domain_aliases_text'] = '0 = disable | -1 = unlimited';
$PALANG['pAdminCreate_domain_mailboxes'] = 'Mailboxes';
$PALANG['pAdminCreate_domain_mailboxes_text'] = '0 = disable | -1 = unlimited';
$PALANG['pAdminCreate_domain_maxquota'] = 'Max Quota';
$PALANG['pAdminCreate_domain_maxquota_text'] = 'MB<br /> 0 = disable | -1 = unlimited';
$PALANG['pAdminCreate_domain_defaultaliases'] = 'Add default mail aliases';
$PALANG['pAdminCreate_domain_button'] = 'Add Domain';
$PALANG['pAdminCreate_domain_result_error'] = '<font color="red">Unable to add domain!</font>';
$PALANG['pAdminCreate_domain_result_succes'] = 'Domain has been added!';
$PALANG['pAdminEdit_domain_welcome'] = 'Edit a domain';
$PALANG['pAdminEdit_domain_domain'] = 'Domain';
$PALANG['pAdminEdit_domain_description'] = 'Description';
$PALANG['pAdminEdit_domain_aliases'] = 'Aliases';
$PALANG['pAdminCreate_domain_aliases_text'] = '0 = disable | -1 = unlimited';
$PALANG['pAdminEdit_domain_mailboxes'] = 'Mailboxes';
$PALANG['pAdminCreate_domain_mailboxes_text'] = '0 = disable | -1 = unlimited';
$PALANG['pAdminEdit_domain_maxquota'] = 'Max Quota';
$PALANG['pAdminCreate_domain_maxquota_text'] = 'MB<br /> 0 = disable | -1 = unlimited';
$PALANG['pAdminEdit_domain_active'] = 'Active';
$PALANG['pAdminEdit_domain_button'] = 'Edit Domain';
$PALANG['pAdminEdit_domain_result_error'] = '<font color="red">Unable to modify domain!</font>';
$PALANG['pAdminCreate_admin_welcome'] = 'Add a new domain admin';
$PALANG['pAdminCreate_admin_username'] = 'Admin';
$PALANG['pAdminCreate_admin_username_text'] = 'Email address';
$PALANG['pAdminCreate_admin_username_text_error1'] = 'Email address<br /><font color="red">Admin is not a valid email address!</font>';
$PALANG['pAdminCreate_admin_username_text_error2'] = 'Email address<br /><font color="red">The admin already exists or is not valid</font>';
$PALANG['pAdminCreate_admin_password'] = 'Password';
$PALANG['pAdminCreate_admin_password2'] = 'Password (again)';
$PALANG['pAdminCreate_admin_password_text_error'] = '<font color="red">The passwords that you supplied don\'t match!<br />Or are empty!</font>';
$PALANG['pAdminCreate_admin_button'] = 'Add Admin';
$PALANG['pAdminCreate_admin_result_error'] = '<font color="red">Unable to add admin!</font>';
$PALANG['pAdminCreate_admin_result_succes'] = 'Admin has been added!';
$PALANG['pAdminCreate_admin_address'] = 'Domain';
$PALANG['pAdminEdit_admin_welcome'] = 'Edit a domain admin';
$PALANG['pAdminEdit_admin_username'] = 'Admin';
$PALANG['pAdminEdit_admin_password'] = 'Password';
$PALANG['pAdminEdit_admin_password2'] = 'Password (again)';
$PALANG['pAdminEdit_admin_password_text_error'] = '<font color="red">The passwords that you supplied don\'t match!<br />Or are empty!</font>';
$PALANG['pAdminEdit_admin_active'] = 'Active';
$PALANG['pAdminEdit_admin_button'] = 'Edit Admin';
$PALANG['pAdminEdit_admin_result_error'] = '<font color="red">Unable to modify admin!</font>';
$PALANG['pAdminEdit_admin_result_succes'] = 'Admin has been modified!';
$PALANG['pUsersLogin_welcome'] = 'Mailbox users login to change your password and aliases.';
$PALANG['pUsersLogin_username'] = 'Login (email)';
$PALANG['pUsersLogin_password'] = 'Password';
$PALANG['pUsersLogin_button'] = 'Login';
$PALANG['pUsersLogin_username_incorrect'] = 'Your login is not correct. Make sure that you login with your email address!';
$PALANG['pUsersLogin_password_incorrect'] = 'Your password is not correct!';
$PALANG['pUsersMenu_vacation'] = 'Auto Response';
$PALANG['pUsersMenu_edit_alias'] = 'Change your forward';
$PALANG['pUsersMenu_password'] = 'Change Password';
$PALANG['pUsersMain_welcome'] = 'Change your mailbox settings here!';
$PALANG['pUsersMain_vacation'] = 'Set an "out of office" message or auto responder for your mail.';
$PALANG['pUsersMain_edit_alias'] = 'Change your email forwarding.';
$PALANG['pUsersMain_password'] = 'Change your current password.';
$PALANG['pUsersVacation_welcome'] = 'Auto Response.';
$PALANG['pUsersVacation_welcome_text'] = 'You already have an auto response configured!';
$PALANG['pUsersVacation_subject'] = 'Subject';
$PALANG['pUsersVacation_subject_text'] = 'Out of Office';
$PALANG['pUsersVacation_body'] = 'Body';
$PALANG['pUsersVacation_body_text'] = <<<EOM
I will be away from <date> until <date>.
For urgent matters you can contact <contact person>.
EOM;
$PALANG['pUsersVacation_button_away'] = 'Going Away';
$PALANG['pUsersVacation_button_back'] = 'Coming Back';
$PALANG['pUsersVacation_result_error'] = '<font color="red">Unable to update your auto response settings!</font>';
$PALANG['pUsersVacation_result_succes'] = 'Your auto response has been removed!';
?>

284
languages/es.lang

@ -0,0 +1,284 @@
<?php
//
// Language file Spanish
//
$PALANG['YES'] = 'SI';
$PALANG['NO'] = 'NO';
$PALANG['edit'] = 'editar';
$PALANG['del'] = 'borrar';
$PALANG['confirm'] = '¿Está seguro de que desea borrarlo?';
$PALANG['confirm_domain'] = '¿Está seguro de que desea borrar todos los registros de este dominio? ¡Esto no puede ser deshecho!';
$PALANG['pLogin_welcome'] = 'Login de administrador para administración de dominios.';
$PALANG['pLogin_username'] = 'Usuario (e-mail)';
$PALANG['pLogin_password'] = 'Contraseña';
$PALANG['pLogin_button'] = 'Usuario';
$PALANG['pLogin_username_incorrect'] = 'El login no es correcto. Asegurese de que ha hecho login con su e-mail.';
$PALANG['pLogin_password_incorrect'] = '¡Su contraseña no es correcta!';
$PALANG['pLogin_login_users'] = 'Login para ir a la sección de usuarios.';
$PALANG['pMenu_overview'] = 'Resumen';
$PALANG['pMenu_create_alias'] = 'Añadir alias';
$PALANG['pMenu_create_mailbox'] = 'Añadir buzón';
$PALANG['pMenu_sendmail'] = 'Enviar e-mail';
$PALANG['pMenu_password'] = 'Contraseña';
$PALANG['pMenu_viewlog'] = 'Ver Logs';
$PALANG['pMenu_logout'] = 'Salir';
$PALANG['pMain_welcome'] = '¡Bienvenido a Postfix Admin!';
$PALANG['pMain_overview'] = 'Listado de sus alias y buzones. Puede editarlos / borrarlos desde aquí.';
$PALANG['pMain_create_alias'] = 'Creación de un nuevo alias para su dominio.';
$PALANG['pMain_create_mailbox'] = 'Creación de un nuevo buzón para su dominio.';
$PALANG['pMain_sendmail'] = 'Enviar un e­mail a uno de los buzones recientemente creados.';
$PALANG['pMain_password'] = 'Cambiar la contraseña para su cuenta de administración.';
$PALANG['pMain_viewlog'] = 'Ver Logs.';
$PALANG['pMain_logout'] = 'Salir.';
$PALANG['pOverview_button'] = 'Ir';
$PALANG['pOverview_welcome'] = 'Resumen de ';
$PALANG['pOverview_alias_alias_count'] = 'Alias';
$PALANG['pOverview_alias_mailbox_count'] = 'Buzones';
$PALANG['pOverview_alias_address'] = 'De';
$PALANG['pOverview_alias_goto'] = 'Destino';
$PALANG['pOverview_alias_modified'] = 'Última modificación';
$PALANG['pOverview_mailbox_username'] = 'E-mail';
$PALANG['pOverview_mailbox_name'] = 'Nombre';
$PALANG['pOverview_mailbox_quota'] = 'Cuota (MB)';
$PALANG['pOverview_mailbox_modified'] = 'Última modificación';
$PALANG['pOverview_mailbox_active'] = 'Activo';
$PALANG['pOverview_get_domain'] = 'Dominio';
$PALANG['pOverview_get_aliases'] = 'Alias';
$PALANG['pOverview_get_mailboxes'] = 'Buzones';
$PALANG['pOverview_get_quota'] = 'Cuota de buzón (MB)';
$PALANG['pOverview_get_modified'] = 'Última Modificación';
$PALANG['pDelete_delete_error'] = '<font color="red">Imposible borrar el registro ';
$PALANG['pDelete_domain_error'] = '<font color="red">Este dominio no le pertenece ';
$PALANG['pCreate_alias_welcome'] = 'Crear un nuevo alias para el dominio.';
$PALANG['pCreate_alias_address'] = 'Alias';
$PALANG['pCreate_alias_address_text_error1'] = '<br /><font color="red">¡El ALIAS no es válido!</font>';
$PALANG['pCreate_alias_address_text_error2'] = '<br /><font color="red">¡Esta dirección ya existe, elija otra diferente por favor!</font>';
$PALANG['pCreate_alias_address_text_error3'] = '<br /><font color="red">¡Ha llegado a su límite de creación de alias!</font>';
$PALANG['pCreate_alias_goto'] = 'Destino';
$PALANG['pCreate_alias_button'] = 'Añadir alias';
$PALANG['pCreate_alias_goto_text'] = 'A donde debe de ser enviado el e-mail.';
$PALANG['pCreate_alias_goto_text_error'] = 'A donde debe de ser enviado el e-mail.<br /><font color="red">¡El PARA no es válido!</font>';
$PALANG['pCreate_alias_result_error'] = '<font color="red">¡No es posible añadir el alias a la tabla de alias!</font>';
$PALANG['pCreate_alias_result_succes'] = '¡El alias ha sido añadido a la tabla de alias!';
$PALANG['pCreate_alias_catchall_text'] = 'Para crear un alias general use "*" como alias.<br />Para una redirección de dominio a dominio, use "*@domain.tld" como Destino.';
$PALANG['pEdit_alias_welcome'] = 'Edite un alias para su dominio.<br />Una entrada por línea.';
$PALANG['pEdit_alias_address'] = 'Alias';
$PALANG['pEdit_alias_address_error'] = '<font color="red">¡Imposible de localizar el alias!</font>';
$PALANG['pEdit_alias_goto'] = 'Destino';
$PALANG['pEdit_alias_goto_text_error1'] = '<font color="red">No ha introducido nada en el destino</font>';
$PALANG['pEdit_alias_goto_text_error2'] = '<font color="red">La dirección de e-mail introducida no es válida: ';
$PALANG['pEdit_alias_domain_error'] = '<font color="red">Este dominio no le pertenece: ';
$PALANG['pEdit_alias_button'] = 'Editar alias';
$PALANG['pEdit_alias_result_error'] = '<font color="red">¡Imposible modificar el alias!</font>';
$PALANG['pCreate_mailbox_welcome'] = 'Crear un nuevo buzón para su dominio.';
$PALANG['pCreate_mailbox_username'] = 'Usuario';
$PALANG['pCreate_mailbox_username_text_error1'] = '<br /><font color="red">¡El e-mail no es válido!</font>';
$PALANG['pCreate_mailbox_username_text_error2'] = '<br /><font color="red">¡Este e-mail ya existe, escoja uno diferente por favor!</font>';
$PALANG['pCreate_mailbox_username_text_error3'] = '<br /><font color="red">¡Ha llegado al límite de creación de buzones!</font>';
$PALANG['pCreate_mailbox_password'] = 'Contraseña';
$PALANG['pCreate_mailbox_password2'] = 'Contraseña (repetir)';
$PALANG['pCreate_mailbox_password_text'] = 'Contraseña para POP3/IMAP';
$PALANG['pCreate_mailbox_password_text_error'] = 'Contraseña para POP3/IMAP<br /><font color="red">¡Las contraseñas introducidas no coinciden<br />o están en blanco!</font>';
$PALANG['pCreate_mailbox_name'] = 'Nombre';
$PALANG['pCreate_mailbox_name_text'] = 'Nombre completo';
$PALANG['pCreate_mailbox_quota'] = 'Cuota';
$PALANG['pCreate_mailbox_quota_text'] = 'MB';
$PALANG['pCreate_mailbox_quota_text_error'] = 'MB<br /><font color="red">¡La cuota especificada es demasiado alta!</font>';
$PALANG['pCreate_mailbox_active'] = 'Activo';
$PALANG['pCreate_mailbox_mail'] = 'Crear buzón';
$PALANG['pCreate_mailbox_button'] = 'Añadir buzón';
$PALANG['pCreate_mailbox_result_error'] = '<font color="red">¡Imposible añadir un buzón a la tabla de buzones!</font>';
$PALANG['pCreate_mailbox_result_succes'] = '¡El buzón ha sido añadido a la tabla de buzones!';
$PALANG['pEdit_mailbox_welcome'] = 'Editar un buzón para su dominio.';
$PALANG['pEdit_mailbox_username'] = 'Usuario';
$PALANG['pEdit_mailbox_username_error'] = '<font color="red">¡Imposible localizar el buzón!</font>';
$PALANG['pEdit_mailbox_password'] = 'Nueva contraseña';
$PALANG['pEdit_mailbox_password2'] = 'Nueva contraseña (repetir)';
$PALANG['pEdit_mailbox_password_text_error'] = '<font color="red">¡Las contraseñas introducidas no coinciden!</font>';
$PALANG['pEdit_mailbox_name'] = 'Nombre';
$PALANG['pEdit_mailbox_quota'] = 'Cuota';
$PALANG['pEdit_mailbox_quota_text'] = 'MB';
$PALANG['pEdit_mailbox_quota_text_error'] = 'MB<br /><font color="red">¡La cuota especificada es demasiado alta!</font>';
$PALANG['pEdit_mailbox_domain_error'] = '<font color="red">Este dominio no le pertenece: ';
$PALANG['pEdit_mailbox_button'] = 'Editar buzón';
$PALANG['pEdit_mailbox_result_error'] = '<font color="red">¡Imposible cambiar la contraseña!</font>';
$PALANG['pPassword_welcome'] = 'Cambie su contraseña de login.';
$PALANG['pPassword_admin'] = 'Login';
$PALANG['pPassword_admin_text_error'] = '<font color="red">¡El LOGIN suministrado no coincide con ningún buzón!</font>';
$PALANG['pPassword_password_current'] = 'Contraseña actual';
$PALANG['pPassword_password_current_text_error'] = '<font color="red">¡No ha introducido la contraseña actual!</font>';
$PALANG['pPassword_password'] = 'Nueva contraseña';
$PALANG['pPassword_password2'] = 'Nueva contraseña (repetir)';
$PALANG['pPassword_password_text_error'] = '<font color="red">¡Las contraseñas introducidas no coinciden<br />o están en blanco!</font>';
$PALANG['pPassword_button'] = 'Cambiar contraseña';
$PALANG['pPassword_result_error'] = '<font color="red">¡Imposible cambiar la contraseña!</font>';
$PALANG['pPassword_result_succes'] = '¡Su contraseña ha sido cambiada!';
$PALANG['pViewlog_welcome'] = 'Ver las últimas 10 acciones para ';
$PALANG['pViewlog_timestamp'] = 'Fecha/Hora';
$PALANG['pViewlog_username'] = 'Administrador';
$PALANG['pViewlog_domain'] = 'Dominio';
$PALANG['pViewlog_action'] = 'Acción';
$PALANG['pViewlog_data'] = 'Datos';
$PALANG['pViewlog_button'] = 'Ir';
$PALANG['pViewlog_result_error'] = '<font color="red">¡Imposible encontrar los logs!</font>';
$PALANG['pSendmail_welcome'] = 'Enviar un e-mail.';
$PALANG['pSendmail_admin'] = 'De';
$PALANG['pSendmail_to'] = 'Destino';
$PALANG['pSendmail_to_text_error'] = '<font color="red">¡La dirección destino está vacía o es una dirección inválida!</font>';
$PALANG['pSendmail_subject'] = 'Asunto';
$PALANG['pSendmail_subject_text'] = 'Bienvenido';
$PALANG['pSendmail_body'] = 'Cuerpo';
$PALANG['pSendmail_body_text'] = <<<EOM
Hola,
Bienvenido a su nueva cuenta de correo.
EOM;
$PALANG['pSendmail_button'] = 'Enviar mensaje';
$PALANG['pSendmail_result_error'] = '<font color="red">¡Imposible crear el buzón!</font>';
$PALANG['pSendmail_result_succes'] = '¡El buzón ha sido creado!';
$PALANG['pVcp_welcome'] = 'Cambie la contraseña de su correo.';
$PALANG['pVcp_username'] = 'E-mail';
$PALANG['pVcp_username_text_error'] = '<font color="red">¡El e-mail introducido no coincide con ningún buzón!</font>';
$PALANG['pVcp_password_current'] = 'Contraseña actual';
$PALANG['pVcp_password_current_text_error'] = '<font color="red">¡No ha introducido la contraseña actual!</font>';
$PALANG['pVcp_password'] = 'Nueva contraseña';
$PALANG['pVcp_password2'] = 'Nueva contraseña (repetir)';
$PALANG['pVcp_password_text_error'] = '<font color="red">¡Las contraseñas introducidas no coinciden<br />o están en blanco!</font>';
$PALANG['pVcp_button'] = 'Cambiar la contraseña';
$PALANG['pVcp_result_error'] = '<font color="red">¡Imposible cambiar la contraseña!</font>';
$PALANG['pVcp_result_succes'] = '¡Su contraseña ha sido cambiada!';
$PALANG['pAdminMenu_list_admin'] = 'Lista de administradores';
$PALANG['pAdminMenu_list_domain'] = 'Lista de dominios';
$PALANG['pAdminMenu_list_virtual'] = 'Lista de direcciones virtuales';
$PALANG['pAdminMenu_viewlog'] = 'Ver Logs';
$PALANG['pAdminMenu_backup'] = 'Backup';
$PALANG['pAdminMenu_create_domain_admins'] = 'Administradores de dominio';
$PALANG['pAdminMenu_create_admin'] = 'Nuevo administrador';
$PALANG['pAdminMenu_create_domain'] = 'Nuevo dominio';
$PALANG['pAdminMenu_create_alias'] = 'Añadir alias';
$PALANG['pAdminMenu_create_mailbox'] = 'Añadir buzón';
$PALANG['pAdminList_admin_domain'] = 'Dominio';
$PALANG['pAdminList_admin_username'] = 'Administrador';
$PALANG['pAdminList_admin_count'] = 'Dominios';
$PALANG['pAdminList_admin_modified'] = 'Última Modificación';
$PALANG['pAdminList_admin_active'] = 'Activo';
$PALANG['pAdminList_domain_domain'] = 'Dominio';
$PALANG['pAdminList_domain_description'] = 'Descripción';
$PALANG['pAdminList_domain_aliases'] = 'Alias';
$PALANG['pAdminList_domain_mailboxes'] = 'Buzones';
$PALANG['pAdminList_domain_maxquota'] = 'Cuota Máxima (MB)';
$PALANG['pAdminList_domain_modified'] = 'Última Modificación';
$PALANG['pAdminList_domain_active'] = 'Activo';
$PALANG['pAdminList_virtual_button'] = 'Ir';
$PALANG['pAdminList_virtual_welcome'] = 'Resumen de ';
$PALANG['pAdminList_virtual_alias_alias_count'] = 'Alias';
$PALANG['pAdminList_virtual_alias_mailbox_count'] = 'Buzones';
$PALANG['pAdminList_virtual_alias_address'] = 'De';
$PALANG['pAdminList_virtual_alias_goto'] = 'Destino';
$PALANG['pAdminList_virtual_alias_modified'] = 'Última Modificación';
$PALANG['pAdminList_virtual_mailbox_username'] = 'E-mail';
$PALANG['pAdminList_virtual_mailbox_name'] = 'Nombre';
$PALANG['pAdminList_virtual_mailbox_quota'] = 'Cuota (MB)';
$PALANG['pAdminList_virtual_mailbox_modified'] = 'Última Modificación';
$PALANG['pAdminList_virtual_mailbox_active'] = 'Activo';
$PALANG['pAdminCreate_domain_welcome'] = 'Añadir nuevo dominio';
$PALANG['pAdminCreate_domain_domain'] = 'Dominio';
$PALANG['pAdminCreate_domain_domain_text_error'] = '<font color="red">¡El dominio ya existe!</font>';
$PALANG['pAdminCreate_domain_description'] = 'Descripción';
$PALANG['pAdminCreate_domain_aliases'] = 'Alias';
$PALANG['pAdminCreate_domain_aliases_text'] = '0 = deshabilitar | -1 = ilimitado';
$PALANG['pAdminCreate_domain_mailboxes'] = 'Buzones';
$PALANG['pAdminCreate_domain_mailboxes_text'] = '0 = deshabilitar | -1 = ilimitado';
$PALANG['pAdminCreate_domain_maxquota'] = 'Cuota máxima';
$PALANG['pAdminCreate_domain_maxquota_text'] = 'MB<br /> 0 = deshabilitar | -1 = ilimitado';
$PALANG['pAdminCreate_domain_defaultaliases'] = 'Añadir alias por defecto';
$PALANG['pAdminCreate_domain_button'] = 'Añadir dominio';
$PALANG['pAdminCreate_domain_result_error'] = '<font color="red">¡Imposible añadir el dominio!</font>';
$PALANG['pAdminCreate_domain_result_succes'] = '¡El dominio ha sido añadido!';
$PALANG['pAdminEdit_domain_welcome'] = 'Editar un dominio';
$PALANG['pAdminEdit_domain_domain'] = 'Dominio';
$PALANG['pAdminEdit_domain_description'] = 'Descripción';
$PALANG['pAdminEdit_domain_aliases'] = 'Alias';
$PALANG['pAdminCreate_domain_aliases_text'] = '0 = deshabilitar | -1 = ilimitado';
$PALANG['pAdminEdit_domain_mailboxes'] = 'Buzones';
$PALANG['pAdminCreate_domain_mailboxes_text'] = '0 = deshabilitar | -1 = ilimitado';
$PALANG['pAdminEdit_domain_maxquota'] = 'Cuota máxima';
$PALANG['pAdminCreate_domain_maxquota_text'] = 'MB<br /> 0 = deshabilitar | -1 = ilimitado';
$PALANG['pAdminEdit_domain_active'] = 'Activo';
$PALANG['pAdminEdit_domain_button'] = 'Editar dominio';
$PALANG['pAdminEdit_domain_result_error'] = '<font color="red">¡Imposible modificar el dominio!</font>';
$PALANG['pAdminCreate_admin_welcome'] = 'Añadir un nuevo administrador de dominio';
$PALANG['pAdminCreate_admin_username'] = 'Administrador';
$PALANG['pAdminCreate_admin_username_text'] = 'E-mail';
$PALANG['pAdminCreate_admin_username_text_error1'] = 'E-mail<br /><font color="red">Administrador no es un e-mail válido!</font>';
$PALANG['pAdminCreate_admin_username_text_error2'] = 'E-mail<br /><font color="red">El administrador ya existe o no es válido!</font>';
$PALANG['pAdminCreate_admin_password'] = 'Contraseña';
$PALANG['pAdminCreate_admin_password2'] = 'Contraseña (repetir)';
$PALANG['pAdminCreate_admin_password_text_error'] = '<font color="red">¡Las contraseñas introducidas no coinciden<br />o están en blanco!</font>';
$PALANG['pAdminCreate_admin_button'] = 'Añadir administrador';
$PALANG['pAdminCreate_admin_result_error'] = '<font color="red">¡Imposible añadir el administrador!</font>';
$PALANG['pAdminCreate_admin_result_succes'] = '¡El administrador ha sido añadido!';
$PALANG['pAdminCreate_admin_address'] = 'Dominio';
$PALANG['pAdminEdit_admin_welcome'] = 'Editar un administrador de dominio';
$PALANG['pAdminEdit_admin_username'] = 'Administrador';
$PALANG['pAdminEdit_admin_password'] = 'Contraseña';
$PALANG['pAdminEdit_admin_password2'] = 'Contraseña (repetir)';
$PALANG['pAdminEdit_admin_password_text_error'] = '<font color="red">¡Las contraseñas introducidas no coinciden<br />o están en blanco!</font>';
$PALANG['pAdminEdit_admin_active'] = 'Activo';
$PALANG['pAdminEdit_admin_button'] = 'Editar administrador';
$PALANG['pAdminEdit_admin_result_error'] = '<font color="red">¡Imposible modificar el administrador!</font>';
$PALANG['pAdminEdit_admin_result_succes'] = '¡El administrador ha sido modificado!';
$PALANG['pUsersLogin_welcome'] = 'Login de usuarios para cambiar la contraseña y alias.';
$PALANG['pUsersLogin_username'] = 'Login (e-mail)';
$PALANG['pUsersLogin_password'] = 'Contraseña';
$PALANG['pUsersLogin_button'] = 'Login';
$PALANG['pUsersLogin_username_incorrect'] = 'Su login no es correcto. ¡Asegúrese de haber introducido su dirección de e-mail como login!';
$PALANG['pUsersLogin_password_incorrect'] = '¡Su contraseña no es correcta!';
$PALANG['pUsersMenu_vacation'] = 'Respuesta automática';
$PALANG['pUsersMenu_edit_alias'] = 'Cambiar la redirección';
$PALANG['pUsersMenu_password'] = 'Cambiar la contraseña';
$PALANG['pUsersMain_welcome'] = '¡Cambie la configuración de su buzón aquí!';
$PALANG['pUsersMain_vacation'] = 'Configure un mensaje de "fuera del trabajo" o una respuesta automática para su correo.';
$PALANG['pUsersMain_edit_alias'] = 'Cambie su redirección de correo.';
$PALANG['pUsersMain_password'] = 'Cambie su contraseña.';
$PALANG['pUsersVacation_welcome'] = 'Respuesta automática.';
$PALANG['pUsersVacation_welcome_text'] = '¡Ya dispone de una respuesta automática configurada!';
$PALANG['pUsersVacation_subject'] = 'Asunto';
$PALANG['pUsersVacation_subject_text'] = 'Fuera del trabajo';
$PALANG['pUsersVacation_body'] = 'Cuerpo';
$PALANG['pUsersVacation_body_text'] = <<<EOM
Estaré fuera desde <date> hasta <date>.
Para asuntos urgentes, puede contactar conmigo en <contact person>.
EOM;
$PALANG['pUsersVacation_button_away'] = 'Ausente';
$PALANG['pUsersVacation_button_back'] = 'De vuelta';
$PALANG['pUsersVacation_result_error'] = '<font color="red">¡Imposible actualizar la configuración de su respuesta automática!</font>';
$PALANG['pUsersVacation_result_succes'] = '¡Su respuesta automática ha sido borrada!';
?>

69
login.php

@ -0,0 +1,69 @@
<?php
//
// File: login.php
//
// Template File: login.tpl
//
// Template Variables:
//
// tMessage
// tUsername
//
// Form POST \ GET Variables:
//
// fUsername
// fPassword
//
require ("./variables.inc.php");
require ("./config.inc.php");
require ("./functions.inc.php");
include ("./languages/" . $CONF['language'] . ".lang");
if ($_SERVER['REQUEST_METHOD'] == "GET")
{
include ("./templates/header.tpl");
include ("./templates/login.tpl");
include ("./templates/footer.tpl");
}
if ($_SERVER['REQUEST_METHOD'] == "POST")
{
$fUsername = $_POST['fUsername'];
$fPassword = $_POST['fPassword'];
$result = db_query ("SELECT password FROM admin WHERE username='$fUsername'");
if ($result['rows'] == 1)
{
$row = mysql_fetch_array ($result['result']);
$salt = preg_split ('/\$/', $row['password']);
$password = md5crypt ($fPassword, $salt[2]);
$result = db_query ("SELECT * FROM admin WHERE username='$fUsername' AND password='$password'");
if ($result['rows'] != 1)
{
$error = 1;
$tMessage = $PALANG['pLogin_password_incorrect'];
$tUsername = $fUsername;
}
}
else
{
$error = 1;
$tMessage = $PALANG['pLogin_username_incorrect'];
}
if ($error != 1)
{
session_start();
session_register("sessid");
$_SESSION['sessid']['username'] = $fUsername;
header("Location: main.php");
exit;
}
include ("./templates/header.tpl");
include ("./templates/login.tpl");
include ("./templates/footer.tpl");
}
?>

25
logout.php

@ -0,0 +1,25 @@
<?php
//
// File: logout.php
//
// Template File: -none-
//
// Template Variables:
//
// -none-
//
// Form POST \ GET Variables:
//
// -none-
//
require ("./config.inc.php");
require ("./functions.inc.php");
$SESSID_USERNAME = check_session ();
session_unset ();
session_destroy ();
header ("Location: login.php");
exit;
?>

36
main.php

@ -0,0 +1,36 @@
<?php
//
// File: main.php
//
// Template File: main.tpl
//
// Template Variables:
//
// -none-
//
// Form POST \ GET Variables:
//
// -none-
//
require ("./config.inc.php");
require ("./functions.inc.php");
include ("./languages/" . $CONF['language'] . ".lang");
$SESSID_USERNAME = check_session ();
if ($_SERVER["REQUEST_METHOD"] == "GET")
{
include ("./templates/header.tpl");
include ("./templates/menu.tpl");
include ("./templates/main.tpl");
include ("./templates/footer.tpl");
}
if ($_SERVER["REQUEST_METHOD"] == "POST")
{
include ("./templates/header.tpl");
include ("./templates/menu.tpl");
include ("./templates/main.tpl");
include ("./templates/footer.tpl");
}
?>

113
overview.php

@ -0,0 +1,113 @@
<?php
//
// File: overview.php
//
// Template File: overview.tpl
//
// Template Variables:
//
// tAlias
// tMailbox
//
// Form POST \ GET Variables:
//
// fDomain
//
require ("./variables.inc.php");
require ("./config.inc.php");
require ("./functions.inc.php");
include ("./languages/" . $CONF['language'] . ".lang");
$SESSID_USERNAME = check_session();
$list_domains = list_domains_for_admin ($SESSID_USERNAME);
if ($_SERVER['REQUEST_METHOD'] == "GET")
{
if (isset ($_GET['domain'])) $fDomain = $_GET['domain'];
if (check_owner ($SESSID_USERNAME, $fDomain))
{
$limit = get_domain_properties ($fDomain);
if ($CONF['alias_control'] == "YES")
{
$query = "SELECT alias.address,alias.goto,alias.modified FROM alias WHERE alias.domain='$fDomain' ORDER BY alias.address";
}
else
{
$query = "SELECT alias.address,alias.goto,alias.modified FROM alias LEFT JOIN mailbox ON alias.address=mailbox.username WHERE alias.domain='$fDomain' AND mailbox.maildir IS NULL ORDER BY alias.address";
}
$result = db_query ("$query");
if ($result['rows'] > 0)
{
while ($row = mysql_fetch_array ($result['result']))
{
$tAlias[] = $row;
}
}
$result = db_query ("SELECT * FROM mailbox WHERE domain='$fDomain' ORDER BY username");
if ($result['rows'] > 0)
{
while ($row = mysql_fetch_array ($result['result']))
{
$tMailbox[] = $row;
}
}
$template = "overview.tpl";
}
else
{
$template = "overview-get.tpl";
}
include ("./templates/header.tpl");
include ("./templates/menu.tpl");
include ("./templates/$template");
include ("./templates/footer.tpl");
}
if ($_SERVER['REQUEST_METHOD'] == "POST")
{
if (check_owner ($SESSID_USERNAME, $_POST['fDomain']))
{
$fDomain = $_POST['fDomain'];
$limit = get_domain_properties ($fDomain);
if ($CONF['alias_control'] == "YES")
{
$query = "SELECT alias.address,alias.goto,alias.modified FROM alias WHERE alias.domain='$fDomain' ORDER BY alias.address";
}
else
{
$query = "SELECT alias.address,alias.goto,alias.modified FROM alias LEFT JOIN mailbox ON alias.address=mailbox.username WHERE alias.domain='$fDomain' AND mailbox.maildir IS NULL ORDER BY alias.address";
}
$result = db_query ("$query");
if ($result['rows'] > 0)
{
while ($row = mysql_fetch_array ($result['result']))
{
$tAlias[] = $row;
}
}
$result = db_query ("SELECT * FROM mailbox WHERE domain='$fDomain' ORDER BY username");
if ($result['rows'] > 0)
{
while ($row = mysql_fetch_array ($result['result']))
{
$tMailbox[] = $row;
}
}
}
include ("./templates/header.tpl");
include ("./templates/menu.tpl");
include ("./templates/overview.tpl");
include ("./templates/footer.tpl");
}
?>

87
password.php

@ -0,0 +1,87 @@
<?php
//
// File: password.php
//
// Template File: password.tpl
//
// Template Variables:
//
// tMessage
//
// Form POST \ GET Variables:
//
// fPassword_current
// fPassword
// fPassword2
//
require ("./variables.inc.php");
require ("./config.inc.php");
require ("./functions.inc.php");
include ("./languages/" . $CONF['language'] . ".lang");
$SESSID_USERNAME = check_session ();
if ($_SERVER['REQUEST_METHOD'] == "GET")
{
include ("./templates/header.tpl");
include ("./templates/menu.tpl");
include ("./templates/password.tpl");
include ("./templates/footer.tpl");
}
if ($_SERVER['REQUEST_METHOD'] == "POST")
{
$pPassword_password_text = $PALANG['pPassword_password_text'];
$fPassword_current = $_POST['fPassword_current'];
$fPassword = $_POST['fPassword'];
$fPassword2 = $_POST['fPassword2'];
$username = $SESSID_USERNAME;
$result = db_query ("SELECT * FROM admin WHERE username='$username'");
if ($result['rows'] == 1)
{
$row = mysql_fetch_array ($result['result']);
$salt = preg_split ('/\$/', $row['password']);
$checked_password = pacrypt ($fPassword_current, $salt[2]);
$result = db_query ("SELECT * FROM admin WHERE username='$username' AND password='$checked_password'");
if ($result['rows'] != 1)
{
$error = 1;
$pPassword_password_current_text = $PALANG['pPassword_password_current_text_error'];
}
}
else
{
$error = 1;
$pPassword_email_text = $PALANG['pPassword_email_text_error'];
}
if (empty ($fPassword) or ($fPassword != $fPassword2))
{
$error = 1;
$pPassword_password_text = $PALANG['pPassword_password_text_error'];
}
if ($error != 1)
{
$password = pacrypt ($fPassword);
$result = db_query ("UPDATE admin SET password='$password',modified=NOW() WHERE username='$username'");
if ($result['rows'] == 1)
{
$tMessage = $PALANG['pPassword_result_succes'];
}
else
{
$tMessage = $PALANG['pPassword_result_error'];
}
}
include ("./templates/header.tpl");
include ("./templates/menu.tpl");
include ("./templates/password.tpl");
include ("./templates/footer.tpl");
}
?>

BIN
postfixadmin.png

After

Width: 231  |  Height: 50  |  Size: 5.9 KiB

67
sendmail.php

@ -0,0 +1,67 @@
<?php
//
// File: sendmail.php
//
// Template File: sendmail.tpl
//
// Template Variables:
//
// tMessage
// tFrom
// tSubject
// tBody
//
// Form POST \ GET Variables:
//
// fTo
// fSubject
// fBody
//
require ("./variables.inc.php");
require ("./config.inc.php");
require ("./functions.inc.php");
include ("./languages/" . $CONF['language'] . ".lang");
$SESSID_USERNAME = check_session ();
if ($_SERVER['REQUEST_METHOD'] == "GET")
{
include ("./templates/header.tpl");
include ("./templates/menu.tpl");
include ("./templates/sendmail.tpl");
include ("./templates/footer.tpl");
}
if ($_SERVER['REQUEST_METHOD'] == "POST")
{
$fTo = $_POST['fTo'];
$fSubject = $_POST['fSubject'];
$fBody = $_POST['fBody'];
if (empty ($fTo) or !check_email ($fTo))
{
$error = 1;
$tTo = $fTo;
$tSubject = $fSubject;
$tBody = $fBody;
$tMessage = $PALANG['pSendmail_to_text_error'];
}
if ($error != 1)
{
if (!mail ($fTo, $fSubject, $fBody, "From: $SESSID_USERNAME"))
{
$tMessage = $PALANG['pSendmail_result_error'];
}
else
{
$tMessage = $PALANG['pSendmail_result_succes'];
}
}
include ("./templates/header.tpl");
include ("./templates/menu.tpl");
include ("./templates/sendmail.tpl");
include ("./templates/footer.tpl");
}
?>

184
stylesheet.css

@ -0,0 +1,184 @@
body {
background: white;
color: black;
font-family: Verdana;
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 13px;
margin: 8px;
padding: 0px;
text-align: center;
}
h1 {
font-family: Verdana;
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 18px;
font-weight: bold;
margin-bottom: 0px;
margin-top: 20px;
}
a {
color: blue;
font-family: Verdana;
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 11px;
text-decoration: none;
}
a:visited {
color: blue;
font-family: Verdana;
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 11px;
text-decoration: none;
}
hr {
line-heigt: 1px;
margin-top: 10px;
margin-bottom: 10px;
width: auto;
text-align: center;
}
hr.footer {
margin-top: 10px;
margin-bottom: 0px;
width: 640px;
}
p {
font-family: Verdana;
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 13px;
margin-top: 13px;
text-align: center;
}
p.footer {
font-family: Verdana;
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 11px;
margin-bottom: 0px;
margin-top: 5px;
text-align: center;
}
p.error {
color: red;
font-family: Verdana;
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 13px;
text-align: center;
}
table {
font-family: Verdana;
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 11px;
width: 640px;
text-align: left;
margin-top: 0px;
margin-bottom: 0px;
padding-top: 0px;
}
table.auto {
font-family: Verdana;
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 11px;
width: auto;
text-align: left;
margin-top: 0px;
margin-bottom: 0px;
padding-top: 0px;
}
table.form {
font-size: 11px;
padding-left: 0px;
padding-right: 0px;
text-align: left;
width: auto;
}
td {
font-family: Verdana;
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 11px;
padding-left: 5px;
padding-right: 5px;
}
tr.header {
font-family: Verdana;
font-family: Verdana, Arial, Helvetica, sans-serif;
font-weight: bold;
padding-left: 11px;
padding-right: 11px;
}
td.center {
text-align: center;
}
td.header {
font-family: Verdana;
font-family: Verdana, Arial, Helvetica, sans-serif;
font-weight: bold;
padding-left: 11px;
padding-right: 11px;
text-align: center;
}
td.highlight {
font-family: Verdana;
font-family: Verdana, Arial, Helvetica, sans-serif;
background: rgb(169,194,162);
padding-left: 5px;
padding-right: 5px;
}
td.menu {
text-align: center;
background: #dfdfdf;
border-top: 1px solid #999;
border-right: 1px solid #999;
border-left: 1px solid #999;
border-bottom: 1px solid #999;
border-radius: 2px;
-moz-border-radius: 2px;
padding-bottom: 5px;
padding-top: 5px;
}
td.right {
text-align: center;
padding-left: 0px;
padding-right: 0px;
margin-left: 0px;
margin-right: 0px;
}
input {
font-family: Verdana;
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 11px;
float: none;
clear: none;
}
input.button {
font-family: Verdana;
font-family: Verdana, Arial, Helvetica, sans-serif;
background: rgb(232,236,176)
}
textarea {
font-family: Verdana;
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 11px;
}

71
templates/admin_create-admin.tpl

@ -0,0 +1,71 @@
<center>
<?php print $tMessage; ?>
<table class="form">
<tr>
<td align="center" colspan="3">
<?php print $PALANG['pAdminCreate_admin_welcome'] . "\n"; ?>
<br />
<br />
</td>
</tr>
<tr>
<td>
<form name="alias" method="post">
<?php print $PALANG['pAdminCreate_admin_username'] . ":\n"; ?>
</td>
<td>
<input type="text" name="fUsername" value="<?php print $tUsername; ?>" />
</td>
<td>
<?php print $pAdminCreate_admin_username_text . "\n"; ?>
</td>
</tr>
<tr>
<td>
<?php print $PALANG['pAdminCreate_admin_password'] . ":\n"; ?>
</td>
<td>
<input type="password" name="fPassword" />
</td>
<td>
<?php print $pAdminCreate_admin_password_text . "\n"; ?>
</td>
</tr>
<tr>
<td>
<?php print $PALANG['pAdminCreate_admin_password2'] . ":\n"; ?>
</td>
<td>
<input type="password" name="fPassword2" />
</td>
<td>
&nbsp;
</td>
</tr>
<tr>
<td colspan=3 align=center>
<select name="fDomains[]" size="10" multiple="multiple">
<?php
for ($i = 0; $i < sizeof ($list_domains); $i++)
{
if (in_array ($list_domains[$i], $tDomains))
{
print "<option value=\"" . $list_domains[$i] . "\" selected=\"selected\">" . $list_domains[$i] . "</option>\n";
}
else
{
print "<option value=\"" . $list_domains[$i] . "\">" . $list_domains[$i] . "</option>\n";
}
}
?>
</select>
</td>
</tr>
<tr>
<td align="center" colspan="3">
<input type="submit" name="submit" value="<?php print $PALANG['pAdminCreate_admin_button']; ?>" />
</form>
</td>
</tr>
</table>
<p />

91
templates/admin_create-domain.tpl

@ -0,0 +1,91 @@
<center>
<?php print $tMessage; ?>
<table class="form">
<tr>
<td align="center" colspan="3">
<?php print $PALANG['pAdminCreate_domain_welcome'] . "\n"; ?>
<br />
<br />
</td>
</tr>
<tr>
<td>
<form name="create_domain" method="post">
<?php print $PALANG['pAdminCreate_domain_domain'] . ":\n"; ?>
</td>
<td>
<input type="text" name="fDomain" value="<?php print $tDomain; ?>" />
</td>
<td>
<?php print $pAdminCreate_domain_domain_text . "\n"; ?>
</td>
</tr>
<tr>
<td>
<?php print $PALANG['pAdminCreate_domain_description'] . ":\n"; ?>
</td>
<td>
<input type="text" name="fDescription" value="<?php print $tDescription; ?>" />
</td>
<td>
&nbsp;
</td>
</tr>
<tr>
<td>
<?php print $PALANG['pAdminCreate_domain_aliases'] . ":\n"; ?>
</td>
<td>
<input type="text" name="fAliases" value="<?php print $tAliases; ?>" />
</td>
<td>
<?php print $PALANG['pAdminCreate_domain_aliases_text'] . "\n"; ?>
</td>
</tr>
<tr>
<td>
<?php print $PALANG['pAdminCreate_domain_mailboxes'] . ":\n"; ?>
</td>
<td>
<input type="text" name="fMailboxes" value="<?php print $tMailboxes; ?>" />
</td>
<td>
<?php print $PALANG['pAdminCreate_domain_mailboxes_text'] . "\n"; ?>
</td>
</tr>
<?php
if ($CONF['quota'] == 'YES')
{
print " <tr>\n";
print " <td>\n";
print " " . $PALANG['pAdminCreate_domain_maxquota'] . ":\n";
print " </td>\n";
print " <td>\n";
print " <input type=\"text\" name=\"fMaxquota\" value=\"$tMaxquota\" />\n";
print " </td>\n";
print " <td>\n";
print " " . $PALANG['pAdminCreate_domain_maxquota_text'] . "\n";
print " </td>\n";
print " </tr>\n";
}
?>
<tr>
<td>
<?php print $PALANG['pAdminCreate_domain_defaultaliases'] . ":\n"; ?>
</td>
<td>
<?php $checked = (!empty ($tDefaultaliases)) ? 'checked' : ''; ?>
<input type="checkbox" name="fDefaultaliases" <?php print $checked; ?> />
</td>
<td>
<?php print $pAdminCreate_domain_defaultaliases_text . "\n"; ?>
</td>
</tr>
<tr>
<td align="center" colspan="3">
<input type="submit" name="submit" value="<?php print $PALANG['pAdminCreate_domain_button']; ?>" />
</form>
</td>
</tr>
</table>
<p />

115
templates/admin_create-mailbox.tpl

@ -0,0 +1,115 @@
<center>
<?php print $tMessage; ?>
<table class="form">
<tr>
<td align="center" colspan="3">
<?php print $PALANG['pCreate_mailbox_welcome'] . "\n"; ?>
<br />
<br />
</td>
</tr>
<tr>
<td>
<form name="mailbox" method="post">
<?php print $PALANG['pCreate_mailbox_username'] . ":\n"; ?>
</td>
<td>
<input type="text" name="fUsername" value="<?php print $tUsername; ?>" />
</td>
<td>
<select name="fDomain">
<?php
for ($i = 0; $i < sizeof ($list_domains); $i++)
{
if ($tDomain == $list_domains[$i])
{
print " <option value=\"$list_domains[$i]\" selected>$list_domains[$i]</option>\n";
}
else
{
print " <option value=\"$list_domains[$i]\">$list_domains[$i]</option>\n";
}
}
?>
</select>
<?php print $pCreate_mailbox_username_text . "\n"; ?>
</td>
</tr>
<tr>
<td>
<?php print $PALANG['pCreate_mailbox_password'] . ":\n"; ?>
</td>
<td>
<input type="password" name="fPassword" />
</td>
<td>
<?php print $pCreate_mailbox_password_text . "\n"; ?>
</td>
</tr>
<tr>
<td>
<?php print $PALANG['pCreate_mailbox_password2'] . ":\n"; ?>
</td>
<td>
<input type="password" name="fPassword2" />
</td>
<td>
&nbsp;
</td>
</tr>
<tr>
<td>
<?php print $PALANG['pCreate_mailbox_name'] . ":\n"; ?>
</td>
<td>
<input type="text" name="fName" value="<?php print $tName; ?>" />
</td>
<td>
<?php print $pCreate_mailbox_name_text . "\n"; ?>
</td>
</tr>
<?php
if ($CONF['quota'] == 'YES')
{
print " <tr>\n";
print " <td>\n";
print " " . $PALANG['pCreate_mailbox_quota'] . ":\n";
print " </td>\n";
print " <td>\n";
print " <input type=\"text\" name=\"fQuota\" value=\"$tQuota\" />\n";
print " </td>\n";
print " <td>\n";
print " $pCreate_mailbox_quota_text\n";
print " </td>\n";
print " </tr>\n";
}
?>
<tr>
<td>
<?php print $PALANG['pCreate_mailbox_active'] . ":\n"; ?>
</td>
<td>
<input type="checkbox" name="fActive" checked />
</td>
<td>
&nbsp;
</td>
</tr>
<tr>
<td>
<?php print $PALANG['pCreate_mailbox_mail'] . ":\n"; ?>
</td>
<td>
<input type="checkbox" name="fMail" checked />
</td>
<td>
&nbsp;
</td>
</tr>
<tr>
<td align="center" colspan="3">
<input type="submit" name="submit" value="<?php print $PALANG['pCreate_mailbox_button']; ?>" />
</form>
</td>
</tr>
</table>

84
templates/admin_edit-admin.tpl

@ -0,0 +1,84 @@
<center>
<?php print $tMessage; ?>
<table class="form">
<tr>
<td align="center" colspan="3">
<?php print $PALANG['pAdminEdit_admin_welcome'] . "\n"; ?>
<br />
<br />
</td>
</tr>
<tr>
<td>
<form name="alias" method="post">
<?php print $PALANG['pAdminEdit_admin_username'] . ":\n"; ?>
</td>
<td>
<?php print $username . "\n"; ?>
</td>
<td>
&nbsp;
</td>
</tr>
<tr>
<td>
<?php print $PALANG['pAdminEdit_admin_password'] . ":\n"; ?>
</td>
<td>
<input type="password" name="fPassword" />
</td>
<td>
<?php print $pAdminEdit_admin_password_text . "\n"; ?>
</td>
</tr>
<tr>
<td>
<?php print $PALANG['pAdminEdit_admin_password2'] . ":\n"; ?>
</td>
<td>
<input type="password" name="fPassword2" />
</td>
<td>
&nbsp;
</td>
</tr>
<tr>
<td>
<?php print $PALANG['pAdminEdit_admin_active'] . ":\n"; ?>
</td>
<td>
<?php $checked = (!empty ($tActive)) ? 'checked' : ''; ?>
<input type="checkbox" name="fActive" <?php print $checked; ?> />
</td>
<td>
&nbsp;
</td>
</tr>
<tr>
<td colspan=3 align=center>
<select name="fDomains[]" size="10" multiple="multiple">
<?php
for ($i = 0; $i < sizeof ($list_domains); $i++)
{
if (in_array ($list_domains[$i], $tDomains))
{
print "<option value=\"" . $list_domains[$i] . "\" selected=\"selected\">" . $list_domains[$i] . "</option>\n";
}
else
{
print "<option value=\"" . $list_domains[$i] . "\">" . $list_domains[$i] . "</option>\n";
}
}
?>
</select>
</td>
</tr>
<tr>
<td align="center" colspan="3">
<input type="submit" name="submit" value="<?php print $PALANG['pAdminEdit_admin_button']; ?>" />
</form>
</td>
</tr>
</table>
<p />

86
templates/admin_edit-domain.tpl

@ -0,0 +1,86 @@
<center>
<?php print $tMessage; ?>
<table class="form">
<tr>
<td align="center" colspan="3">
<?php print $PALANG['pAdminEdit_domain_welcome'] . "\n"; ?>
<br />
<br />
</td>
</tr>
<tr>
<td>
<form name="alias" method="post">
<?php print $PALANG['pAdminEdit_domain_domain'] . ":\n"; ?>
</td>
<td>
<?php print $domain . "\n"; ?>
</td>
<td>
&nbsp;
</td>
</tr>
<tr>
<td>
<?php print $PALANG['pAdminEdit_domain_description'] . ":\n"; ?>
</td>
<td>
<input type="text" name="fDescription" value="<?php print $tDescription; ?>" />
</td>
<td>
&nbsp;
</td>
</tr>
<tr>
<td>
<?php print $PALANG['pAdminEdit_domain_aliases'] . ":\n"; ?>
</td>
<td>
<input type="text" name="fAliases" value="<?php print $tAliases; ?>" />
</td>
<td>
<?php print $PALANG['pAdminCreate_domain_aliases_text'] . "\n"; ?>
</td>
</tr>
<tr>
<td>
<?php print $PALANG['pAdminEdit_domain_mailboxes'] . ":\n"; ?>
</td>
<td>
<input type="text" name="fMailboxes" value="<?php print $tMailboxes; ?>" />
</td>
<td>
<?php print $PALANG['pAdminCreate_domain_mailboxes_text'] . "\n"; ?>
</td>
</tr>
<tr>
<td>
<?php print $PALANG['pAdminEdit_domain_maxquota'] . ":\n"; ?>
</td>
<td>
<input type="text" name="fMaxquota" value="<?php print $tMaxquota; ?>" />
</td>
<td>
<?php print $PALANG['pAdminCreate_domain_maxquota_text'] . "\n"; ?>
</td>
</tr>
<tr>
<td>
<?php print $PALANG['pAdminEdit_domain_active'] . ":\n"; ?>
</td>
<td>
<?php $checked = (!empty ($tActive)) ? 'checked' : ''; ?>
<input type="checkbox" name="fActive" <?php print $checked; ?> />
</td>
<td>
&nbsp;
</td>
</tr>
<tr>
<td align="center" colspan="3">
<input type="submit" name="submit" value="<?php print $PALANG['pAdminEdit_domain_button']; ?>" />
</form>
</td>
</tr>
</table>
<p />

32
templates/admin_list-admin.tpl

@ -0,0 +1,32 @@
<center>
<?php
if (sizeof ($list_admins) > 0)
{
print "<center>\n";
print "<table border=\"1\">\n";
print " <tr class=\"header\">\n";
print " <td>" . $PALANG['pAdminList_admin_username'] . "</td>\n";
print " <td>" . $PALANG['pAdminList_admin_count'] . "</td>\n";
print " <td>" . $PALANG['pAdminList_admin_modified'] . "</td>\n";
print " <td>" . $PALANG['pAdminList_admin_active'] . "</td>\n";
print " <td colspan=\"2\">&nbsp;</td>\n";
print " </tr>\n";
for ($i = 0; $i < sizeof ($list_admins); $i++)
{
print " <tr onMouseOver=\"this.bgColor = '#dfdfdf'\" onMouseOut =\"this.bgColor = '#ffffff'\" bgcolor=\"#ffffff\">";
print " <td><a href=\"list-domain.php?username=" . $list_admins[$i] . "\">" . $list_admins[$i] . "</a></td>";
print " <td>" . $admin_properties[$i]['domain_count'] . "</td>";
print " <td>" . $admin_properties[$i]['modified'] . "</td>";
$active = ($admin_properties[$i]['active'] == 1) ? $PALANG['YES'] : $PALANG['NO'];
print " <td>" . $active . "</td>";
print " <td><a href=\"edit-admin.php?username=" . $list_admins[$i] . "\">" . $PALANG['edit'] . "</a></td>";
print " <td><a href=\"delete.php?table=admin&where=username&delete=" . $list_admins[$i] . "\" onclick=\"return confirm ('" . $PALANG['confirm'] . "')\">" . $PALANG['del'] . "</a></td>";
print " </tr>\n";
}
print "</table>\n";
print "</center>\n";
print "<p />\n";
}
?>

57
templates/admin_list-domain.tpl

@ -0,0 +1,57 @@
<center>
<form name="overview" method="post">
<select name="fUsername">
<?php
for ($i = 0; $i < sizeof ($list_admins); $i++)
{
if ($fUsername == $list_admins[$i])
{
print "<option value=\"" . $list_admins[$i] . "\" selected>" . $list_admins[$i] . "</option>\n";
}
else
{
print "<option value=\"" . $list_admins[$i] . "\">" . $list_admins[$i] . "</option>\n";
}
}
?>
</select>
<input type="submit" name="submit" value="<?php print $PALANG['pOverview_button']; ?>" />
</form>
<p />
<?php
if (sizeof ($list_domains) > 0)
{
print "<center>\n";
print "<table class=\"auto\" border=\"1\">\n";
print " <tr class=\"header\">\n";
print " <td>" . $PALANG['pAdminList_domain_domain'] . "</td>\n";
print " <td>" . $PALANG['pAdminList_domain_description'] . "</td>\n";
print " <td>" . $PALANG['pAdminList_domain_aliases'] . "</td>\n";
print " <td>" . $PALANG['pAdminList_domain_mailboxes'] . "</td>\n";
if ($CONF['quota'] == 'YES') print " <td>" . $PALANG['pAdminList_domain_maxquota'] . "</td>\n";
print " <td>" . $PALANG['pAdminList_domain_modified'] . "</td>\n";
print " <td>" . $PALANG['pAdminList_domain_active'] . "</td>\n";
print " <td colspan=\"2\">&nbsp;</td>\n";
print " </tr>\n";
for ($i = 0; $i < sizeof ($list_domains); $i++)
{
print "<tr onMouseOver=\"this.bgColor = '#dfdfdf'\" onMouseOut =\"this.bgColor = '#ffffff'\" bgcolor=\"#ffffff\">";
print "<td><a href=\"list-virtual.php?domain=" . $list_domains[$i] . "\">" . $list_domains[$i] . "</a></td>";
print "<td>" . $domain_properties[$i]['description'] . "</td>";
print "<td>" . $domain_properties[$i]['alias_count'] . " / " . $domain_properties[$i]['aliases'] . "</td>";
print "<td>" . $domain_properties[$i]['mailbox_count'] . " / " . $domain_properties[$i]['mailboxes'] . "</td>";
if ($CONF['quota'] == 'YES') print "<td>" . $domain_properties[$i]['maxquota'] . "</td>";
print "<td>" . $domain_properties[$i]['modified'] . "</td>";
$active = ($domain_properties[$i]['active'] == 1) ? $PALANG['YES'] : $PALANG['NO'];
print "<td>" . $active . "</td>";
print "<td><a href=\"edit-domain.php?domain=" . $list_domains[$i] . "\">" . $PALANG['edit'] . "</a></td>";
print "<td><a href=\"delete.php?table=domain&where=domain&delete=" . $list_domains[$i] . "\" onclick=\"return confirm ('" . $PALANG['confirm_domain'] . "')\">" . $PALANG['del'] . "</a></td>";
print "</tr>\n";
}
print "</table>\n";
print "</center>\n";
print "<p />\n";
}
?>

85
templates/admin_list-virtual.tpl

@ -0,0 +1,85 @@
<center>
<form name="overview" method="post">
<select name="fDomain">
<?php
for ($i = 0; $i < sizeof ($list_domains); $i++)
{
if ($fDomain == $list_domains[$i])
{
print "<option value=\"$list_domains[$i]\" selected>$list_domains[$i]</option>\n";
}
else
{
print "<option value=\"$list_domains[$i]\">$list_domains[$i]</option>\n";
}
}
?>
</select>
<input type="submit" name="submit" value="<?php print $PALANG['pAdminList_virtual_button']; ?>" />
</form>
<p />
<?php
print "<b>". $PALANG['pAdminList_virtual_welcome'] . $fDomain . "</b><br />\n";
print $PALANG['pAdminList_virtual_alias_alias_count'] . ": " . $limit['alias_count'] . " / " . $limit['aliases'] . " &nbsp; ";
print $PALANG['pAdminList_virtual_alias_mailbox_count'] . ": " . $limit['mailbox_count'] . " / " . $limit['mailboxes'] . "<br />\n";
print "<p />\n";
if (sizeof ($tAlias) > 0)
{
print "<center>\n";
print "<table border=\"1\">\n";
print " <tr class=\"header\">\n";
print " <td>" . $PALANG['pAdminList_virtual_alias_address'] . "</td>\n";
print " <td>" . $PALANG['pAdminList_virtual_alias_goto'] . "</td>\n";
print " <td>" . $PALANG['pAdminList_virtual_alias_modified'] . "</td>\n";
print " <td colspan=\"2\">&nbsp;</td>\n";
print " </tr>\n";
for ($i = 0; $i < sizeof ($tAlias); $i++)
{
print " <tr onMouseOver=\"this.bgColor='#dfdfdf'\" onMouseOut =\"this.bgColor ='#ffffff'\" bgcolor=\"#ffffff\">\n";
print " <td>" . $tAlias[$i]['address'] . "</td>\n";
print " <td>" . ereg_replace (",", "<br>", $tAlias[$i]['goto']) . "</td>\n";
print " <td>" . $tAlias[$i]['modified'] . "</td>\n";
print " <td><a href=\"edit-alias.php?address=" . urlencode ($tAlias[$i]['address']) . "&domain=$fDomain" . "\">" . $PALANG['edit'] . "</a></td>\n";
print " <td><a href=\"delete.php?table=alias" . "&delete=" . urlencode ($tAlias[$i]['address']) . "&domain=$fDomain" . "\"onclick=\"return confirm ('" . $PALANG['confirm'] . "')\">" . $PALANG['del'] . "</a></td>\n";
print " </tr>\n";
}
print "</table>\n";
print "</center>\n";
print "<p />\n";
}
if (sizeof ($tMailbox) > 0)
{
print "<center>\n";
print "<table border=\"1\">\n";
print " <tr class=\"header\">\n";
print " <td>" . $PALANG['pAdminList_virtual_mailbox_username'] . "</td>\n";
print " <td>" . $PALANG['pAdminList_virtual_mailbox_name'] . "</td>\n";
if ($CONF['quota'] == 'YES') print " <td>" . $PALANG['pAdminList_virtual_mailbox_quota'] . "</td>\n";
print " <td>" . $PALANG['pAdminList_virtual_mailbox_modified'] . "</td>\n";
print " <td>" . $PALANG['pAdminList_virtual_mailbox_active'] . "</td>\n";
print " <td colspan=\"2\">&nbsp;</td>\n";
print " </tr>\n";
for ($i = 0; $i < sizeof ($tMailbox); $i++)
{
print " <tr onMouseOver=\"this.bgColor='#dfdfdf'\" onMouseOut =\"this.bgColor='#ffffff'\" bgcolor=\"#ffffff\">\n";
print " <td>" . $tMailbox[$i]['username'] . "</td>\n";
print " <td>" . $tMailbox[$i]['name'] . "</td>\n";
if ($CONF['quota'] == 'YES') print " <td>" . substr ($tMailbox[$i]['quota'], 0, -6) . "</td>\n";
print " <td>" . $tMailbox[$i]['modified'] . "</td>\n";
$active = ($tMailbox[$i]['active'] == 1) ? $PALANG['YES'] : $PALANG['NO'];
print " <td>" . $active . "</td>\n";
print " <td><a href=\"edit-mailbox.php?username=" . urlencode ($tMailbox[$i]['username']) . "&domain=$fDomain" . "\">" . $PALANG['edit'] . "</a></td>\n";
print " <td><a href=\"delete.php?table=mailbox" . "&delete=" . urlencode ($tMailbox[$i]['username']) . "&domain=$fDomain" . "\"onclick=\"return confirm ('" . $PALANG['confirm'] . "')\">" . $PALANG['del'] . "</a></td>\n";
print " </tr>\n";
}
print "</table>\n";
print "</center>\n";
print "<p />\n";
}
?>

62
templates/admin_menu.tpl

@ -0,0 +1,62 @@
<table class="auto">
<tr>
<td width="8">
&nbsp;
</td>
<td class="menu">
<a target=_top href="list-admin.php"><?php print $PALANG['pAdminMenu_list_admin']; ?></a>
</td>
<td width="8">
&nbsp;
</td>
<td class="menu">
<a target=_top href="list-domain.php"><?php print $PALANG['pAdminMenu_list_domain']; ?></a>
</td>
<td width="8">
&nbsp;
</td>
<td class="menu">
<a target=_top href="list-virtual.php"><?php print $PALANG['pAdminMenu_list_virtual']; ?></a>
</td>
<td width="8">
&nbsp;
</td>
<td class="menu">
<a target=_top href="viewlog.php"><?php print $PALANG['pAdminMenu_viewlog']; ?></a>
</td>
<td width="8">
&nbsp;
</td>
<td class="menu">
<a target=_top href="backup.php"><?php print $PALANG['pAdminMenu_backup']; ?></a>
</td>
<td width="8">
&nbsp;
</td>
<td class="menu">
<a target=_top href="create-domain.php"><?php print $PALANG['pAdminMenu_create_domain']; ?></a>
</td>
<td width="8">
&nbsp;
</td>
<td class="menu">
<a target=_top href="create-admin.php"><?php print $PALANG['pAdminMenu_create_admin']; ?></a>
</td>
<td width="8">
&nbsp;
</td>
<td class="menu">
<a target=_top href="create-alias.php"><?php print $PALANG['pAdminMenu_create_alias']; ?></a>
</td>
<td width="8">
&nbsp;
</td>
<td class="menu">
<a target=_top href="create-mailbox.php"><?php print $PALANG['pAdminMenu_create_mailbox']; ?></a>
</td>
<td width="8">
&nbsp;
</td>
</tr>
</table>
<hr />

57
templates/create-alias.tpl

@ -0,0 +1,57 @@
<center>
<?php print $tMessage; ?>
<table class="form">
<tr>
<td align="center" colspan="3">
<?php print $PALANG['pCreate_alias_welcome'] . "\n"; ?>
<br />
<br />
</td>
</tr>
<tr>
<td>
<form name="alias" method="post">
<?php print $PALANG['pCreate_alias_address'] . ":\n"; ?>
</td>
<td>
<input type="text" name="fAddress" value="<?php print $tAddress; ?>" />
</td>
<td>
<select name="fDomain">
<?php
for ($i = 0; $i < sizeof ($list_domains); $i++)
{
if ($tDomain == $list_domains[$i])
{
print " <option value=\"$list_domains[$i]\" selected>$list_domains[$i]</option>\n";
}
else
{
print " <option value=\"$list_domains[$i]\">$list_domains[$i]</option>\n";
}
}
?>
</select>
<?php print $pCreate_alias_address_text . "\n"; ?>
</td>
</tr>
<tr>
<td>
<?php print $PALANG['pCreate_alias_goto'] . ":\n"; ?>
</td>
<td>
<input type="text" name="fGoto" value="<?php print $tGoto; ?>" />
</td>
<td>
<?php print $pCreate_alias_goto_text . "\n"; ?>
</td>
</tr>
<tr>
<td align="center" colspan="3">
<input type="submit" name="submit" value="<?php print $PALANG['pCreate_alias_button']; ?>" />
</form>
</td>
</tr>
</table>
<p />
<?php print $PALANG['pCreate_alias_catchall_text'] . "\n"; ?>

116
templates/create-mailbox.tpl

@ -0,0 +1,116 @@
<center>
<?php print $tMessage; ?>
<table class="form">
<tr>
<td align="center" colspan="3">
<?php print $PALANG['pCreate_mailbox_welcome'] . "\n"; ?>
<br />
<br />
</td>
</tr>
<tr>
<td>
<form name="mailbox" method="post">
<?php print $PALANG['pCreate_mailbox_username'] . ":\n"; ?>
</td>
<td>
<input type="text" name="fUsername" value="<?php print $tUsername; ?>" />
</td>
<td>
<select name="fDomain">
<?php
for ($i = 0; $i < sizeof ($list_domains); $i++)
{
if ($tDomain == $list_domains[$i])
{
print " <option value=\"$list_domains[$i]\" selected>$list_domains[$i]</option>\n";
}
else
{
print " <option value=\"$list_domains[$i]\">$list_domains[$i]</option>\n";
}
}
?>
</select>
<?php print $pCreate_mailbox_username_text . "\n"; ?>
</td>
</tr>
<tr>
<td>
<?php print $PALANG['pCreate_mailbox_password'] . ":\n"; ?>
</td>
<td>
<input type="password" name="fPassword" />
</td>
<td>
<?php print $pCreate_mailbox_password_text . "\n"; ?>
</td>
</tr>
<tr>
<td>
<?php print $PALANG['pCreate_mailbox_password2'] . ":\n"; ?>
</td>
<td>
<input type="password" name="fPassword2" />
</td>
<td>
&nbsp;
</td>
</tr>
<tr>
<td>
<?php print $PALANG['pCreate_mailbox_name'] . ":\n"; ?>
</td>
<td>
<input type="text" name="fName" value="<?php print $tName; ?>" />
</td>
<td>
<?php print $pCreate_mailbox_name_text . "\n"; ?>
</td>
</tr>
<tr>
<?php
if ($CONF['quota'] == 'YES')
{
print " <tr>\n";
print " <td>\n";
print " " . $PALANG['pCreate_mailbox_quota'] . ":\n";
print " </td>\n";
print " <td>\n";
print " <input type=\"text\" name=\"fQuota\" value=\"$tQuota\" />\n";
print " </td>\n";
print " <td>\n";
print " $pCreate_mailbox_quota_text\n";
print " </td>\n";
print " </tr>\n";
}
?>
<tr>
<td>
<?php print $PALANG['pCreate_mailbox_active'] . ":\n"; ?>
</td>
<td>
<input type="checkbox" name="fActive" checked />
</td>
<td>
&nbsp;
</td>
</tr>
<tr>
<td>
<?php print $PALANG['pCreate_mailbox_mail'] . ":\n"; ?>
</td>
<td>
<input type="checkbox" name="fMail" checked />
</td>
<td>
&nbsp;
</td>
</tr>
<tr>
<td align="center" colspan="3">
<input type="submit" name="submit" value="<?php print $PALANG['pCreate_mailbox_button']; ?>" />
</form>
</td>
</tr>
</table>

2
templates/delete.tpl

@ -0,0 +1,2 @@
<center>
<?php print $tMessage; ?>

49
templates/edit-alias.tpl

@ -0,0 +1,49 @@
<center>
<?php print $tMessage; ?>
<table class="form">
<tr>
<td align="center" colspan="3">
<?php print $PALANG['pEdit_alias_welcome'] . "\n"; ?>
<br />
<br />
</td>
</tr>
<tr>
<td>
<form name="mailbox" method="post">
<?php print $PALANG['pEdit_alias_address'] . ":\n"; ?>
</td>
<td>
<?php print $fAddress; ?>
</td>
<td>
&nbsp;
</td>
</tr>
<tr>
<td>
<?php print $PALANG['pEdit_alias_goto'] . ":\n"; ?>
</td>
<td>
<textarea rows="24" cols="80" name="fGoto">
<?php
$array = preg_split ('/,/', $tGoto);
for ($i = 0 ; $i < sizeof ($array) ; $i++)
{
if (empty ($array[$i])) continue;
print "$array[$i]\n";
}
?>
</textarea>
</td>
<td>
&nbsp;
</td>
</tr>
<tr>
<td align="center" colspan="3">
<input type="submit" name="submit" value="<?php print $PALANG['pEdit_alias_button']; ?>" />
</form>
</td>
</tr>
</table>

90
templates/edit-mailbox.tpl

@ -0,0 +1,90 @@
<center>
<?php print $tMessage; ?>
<table class="form">
<tr>
<td align="center" colspan="3">
<?php print $PALANG['pEdit_mailbox_welcome'] . "\n"; ?>
<br />
<br />
</td>
</tr>
<tr>
<td>
<form name="mailbox" method="post">
<?php print $PALANG['pEdit_mailbox_username'] . ":\n"; ?>
</td>
<td>
<?php print $fUsername . "\n"; ?>
</td>
<td>
<?php print $pEdit_mailbox_username_text . "\n"; ?>
</td>
</tr>
<tr>
<td>
<?php print $PALANG['pEdit_mailbox_password'] . ":\n"; ?>
</td>
<td>
<input type="password" name="fPassword" />
</td>
<td>
<?php print $pEdit_mailbox_password_text . "\n"; ?>
</td>
</tr>
<tr>
<td>
<?php print $PALANG['pEdit_mailbox_password2'] . ":\n"; ?>
</td>
<td>
<input type="password" name="fPassword2" />
</td>
<td>
&nbsp;
</td>
</tr>
<tr>
<td>
<?php print $PALANG['pEdit_mailbox_name'] . ":\n"; ?>
</td>
<td>
<input type="text" name="fName" value="<?php print $tName; ?>" />
</td>
<td>
&nbsp;
</td>
</tr>
<?php
if ($CONF['quota'] == 'YES')
{
print " <tr>\n";
print " <td>\n";
print " " . $PALANG['pEdit_mailbox_quota'] . ":\n";
print " </td>\n";
print " <td>\n";
print " <input type=\"text\" name=\"fQuota\" value=\"$tQuota\" />\n";
print " </td>\n";
print " <td>\n";
print " $pEdit_mailbox_quota_text\n";
print " </td>\n";
print " </tr>\n";
}
?>
<tr>
<td>
<?php print $PALANG['pCreate_mailbox_active'] . ":\n"; ?>
</td>
<td>
<?php $checked = (!empty ($tActive)) ? 'checked' : ''; ?>
<input type="checkbox" name="fActive" <?php print $checked; ?> />
</td>
<td>
&nbsp;
</td>
</tr>
<tr>
<td align="center" colspan="3">
<input type="submit" name="submit" value="<?php print $PALANG['pEdit_mailbox_button']; ?>" />
</form>
</td>
</tr>
</table>

12
templates/footer.tpl

@ -0,0 +1,12 @@
<p class="footer">
<a target="_blank" href="http://high5.net/"><font color="black">Postfix Admin <?php print $version; ?></font></a><br />
<?php
if (($CONF['show_footer_text'] == "YES") and ($CONF['footer_link']))
{
print "<p />\n";
print "<a href=\"" . $CONF['footer_link'] . "\">" . $CONF['footer_text'] . "</a>\n";
}
?>
</center>
</body>
</html>

19
templates/header.tpl

@ -0,0 +1,19 @@
<?php
@header ("Expires: Sun, 16 Mar 2003 05:00:00 GMT");
@header ("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
@header ("Cache-Control: no-store, no-cache, must-revalidate");
@header ("Cache-Control: post-check=0, pre-check=0", false);
@header ("Pragma: no-cache");
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<?php
if (file_exists (realpath ("./stylesheet.css"))) print "<link rel=\"stylesheet\" href=\"stylesheet.css\">\n";
if (file_exists (realpath ("../stylesheet.css"))) print "<link rel=\"stylesheet\" href=\"../stylesheet.css\">\n";
?>
<title>Postfix Admin</title>
</head>
<body>
<center>

69
templates/login.tpl

@ -0,0 +1,69 @@
<?php
if ($CONF['logo'] == "YES")
{
print "<img src=\"postfixadmin.png\" />\n";
}
else
{
print "<h1>" . $CONF['header_text'] . "</h1>\n";
}
?>
<p />
<center>
<font color="red"><?php print $tMessage; ?></font>
<table width="10%" border="0" cellspacing="0" cellpadding="0" height="100">
<tr bgcolor="#999999">
<td colspan="3" height="1">
</td>
</tr>
<tr>
<td bgcolor="#999999">
</td>
<td bgcolor="#eeeeee" valign="top">
<table border="0" cellspacing="0" cellpadding="6">
<tr>
<td colspan="2" align="center">
<br />
<b><?php print $PALANG['pLogin_welcome']; ?></b><br />
<br />
</td>
</tr>
<td align="right">
<form name="login" method="post">
<?php print $PALANG['pLogin_username'] . ":\n"; ?>
</td>
<td align="left">
<input type="text" name="fUsername" value="<?php print $tUsername; ?>" /><br />
</td>
</tr>
<tr>
<td align="right">
<?php print $PALANG['pLogin_password'] . ":\n"; ?>
</td>
<td align="left">
<input type="password" name="fPassword" /><br />
</td>
</tr>
<tr>
<td align="center" colspan="2">
<input type="submit" name="submit" value="<?php print $PALANG['pLogin_button']; ?>" />
</form>
</td>
</tr>
<tr>
<td align="left" colspan="2">
<p />
<a href="users/"><?php print $PALANG['pLogin_login_users']; ?></a>
<p />
</td>
</tr>
</table>
</td>
<td bgcolor="#999999">
</td>
</tr>
<tr bgcolor="#999999">
<td colspan="3" height="1">
</td>
</tr>
</table>

66
templates/main.tpl

@ -0,0 +1,66 @@
<center>
<table class="auto" border="0">
<tr>
<td colspan="2" nowrap>
<?php print $PALANG['pMain_welcome'] . "\n"; ?>
<p />
</td>
</tr>
<tr>
<td nowrap>
<a target="_top" href="overview.php"><?php print $PALANG['pMenu_overview']; ?></a>
</td>
<td>
<?php print $PALANG['pMain_overview'] . "\n"; ?>
</td>
</tr>
<tr>
<td nowrap>
<a target="_top" href="create-alias.php"><?php print $PALANG['pMenu_create_alias']; ?></a>
</td>
<td>
<?php print $PALANG['pMain_create_alias'] . "\n"; ?>
</td>
</tr>
<tr>
<td nowrap>
<a target="_top" href="create-mailbox.php"><?php print $PALANG['pMenu_create_mailbox']; ?></a>
</td>
<td>
<?php print $PALANG['pMain_create_mailbox'] . "\n"; ?>
</td>
</tr>
<tr>
<td nowrap>
<a target="_top" href="sendmail.php"><?php print $PALANG['pMenu_sendmail']; ?></a>
</td>
<td>
<?php print $PALANG['pMain_sendmail'] . "\n"; ?>
</td>
</tr>
<tr>
<td nowrap>
<a target="_top" href="password.php"><?php print $PALANG['pMenu_password']; ?></a>
</td>
<td>
<?php print $PALANG['pMain_password'] . "\n"; ?>
</td>
</tr>
<tr>
<td nowrap>
<a target="_top" href="viewlog.php"><?php print $PALANG['pMenu_viewlog']; ?></a>
</td>
<td>
<?php print $PALANG['pMain_viewlog'] . "\n"; ?>
</td>
</tr>
<tr>
<td nowrap>
<a target="_top" href="logout.php"><?php print $PALANG['pMenu_logout']; ?></a>
</td>
<td>
<?php print $PALANG['pMain_logout'] . "\n"; ?>
</td>
</tr>
</table>
<hr />

50
templates/menu.tpl

@ -0,0 +1,50 @@
<table class="auto">
<tr>
<td width="8">
&nbsp;
</td>
<td class="menu">
<a target="_top" href="overview.php"><?php print $PALANG['pMenu_overview']; ?></a>
</td>
<td width="8">
&nbsp;
</td>
<td class="menu">
<a target="_top" href="create-alias.php"><?php print $PALANG['pMenu_create_alias']; ?></a>
</td>
<td width="8">
&nbsp;
</td>
<td class="menu">
<a target="_top" href="create-mailbox.php"><?php print $PALANG['pMenu_create_mailbox']; ?></a>
</td>
<td width="8">
&nbsp;
</td>
<td class="menu">
<a target="_top" href="sendmail.php"><?php print $PALANG['pMenu_sendmail']; ?></a>
</td>
<td width="8">
&nbsp;
</td>
<td class="menu">
<a target="_top" href="password.php"><?php print $PALANG['pMenu_password']; ?></a>
</td>
<td width="8">
&nbsp;
</td>
<td class="menu">
<a target="_top" href="viewlog.php"><?php print $PALANG['pMenu_viewlog']; ?></a>
</td>
<td width="8">
&nbsp;
</td>
<td class="menu">
<a target="_top" href="logout.php"><?php print $PALANG['pMenu_logout']; ?></a>
</td>
<td width="8">
&nbsp;
</td>
</tr>
</table>
<hr />

44
templates/overview-get.tpl

@ -0,0 +1,44 @@
<center>
<form name="overview" method="post">
<select name="fDomain">
<?php
for ($i = 0; $i < sizeof ($list_domains); $i++)
{
if ($fDomain == $list_domains[$i])
{
print "<option value=\"$list_domains[$i]\" selected>$list_domains[$i]</option>\n";
}
else
{
print "<option value=\"$list_domains[$i]\">$list_domains[$i]</option>\n";
}
}
?>
</select>
<input type="submit" name="submit" value="<?php print $PALANG['pOverview_button']; ?>" />
</form>
<p />
<?php
print "<center>\n";
print "<table border=\"1\">\n";
print " <tr class=\"header\">\n";
print " <td>" . $PALANG['pOverview_get_domain'] . "</td>\n";
print " <td>" . $PALANG['pOverview_get_aliases'] . "</td>\n";
print " <td>" . $PALANG['pOverview_get_mailboxes'] . "</td>\n";
if ($CONF['quota'] == 'YES') print " <td>" . $PALANG['pOverview_get_quota'] . "</td>\n";
print " </tr>\n";
for ($i = 0; $i < sizeof ($list_domains); $i++)
{
$limit = get_domain_properties ($list_domains[$i]);
print " <tr onMouseOver=\"this.bgColor='#dfdfdf'\" onMouseOut =\"this.bgColor ='#ffffff'\" bgcolor=\"#ffffff\">\n";
print " <td><a href=\"overview.php?domain=" . $list_domains[$i] . "\">" . $list_domains[$i] . "</a></td>\n";
print " <td>" . $limit['alias_count'] . " / " . $limit['aliases'] . "</td>\n";
print " <td>" . $limit['mailbox_count'] . " / " . $limit['mailboxes'] . "</td>\n";
if ($CONF['quota'] == 'YES') print " <td>" . $limit['maxquota'] . "</td>\n";
print " </tr>\n";
}
print "</table>\n";
print "<p />\n";
?>

85
templates/overview.tpl

@ -0,0 +1,85 @@
<center>
<form name="overview" method="post">
<select name="fDomain">
<?php
for ($i = 0; $i < sizeof ($list_domains); $i++)
{
if ($fDomain == $list_domains[$i])
{
print "<option value=\"$list_domains[$i]\" selected>$list_domains[$i]</option>\n";
}
else
{
print "<option value=\"$list_domains[$i]\">$list_domains[$i]</option>\n";
}
}
?>
</select>
<input type="submit" name="submit" value="<?php print $PALANG['pOverview_button']; ?>" />
</form>
<p />
<?php
print "<b>". $PALANG['pOverview_welcome'] . $fDomain . "</b><br />\n";
print $PALANG['pOverview_alias_alias_count'] . ": " . $limit['alias_count'] . " / " . $limit['aliases'] . " &nbsp; ";
print $PALANG['pOverview_alias_mailbox_count'] . ": " . $limit['mailbox_count'] . " / " . $limit['mailboxes'] . "<br />\n";
print "<p />\n";
if (sizeof ($tAlias) > 0)
{
print "<center>\n";
print "<table border=\"1\">\n";
print " <tr class=\"header\">\n";
print " <td>" . $PALANG['pOverview_alias_address'] . "</td>\n";
print " <td>" . $PALANG['pOverview_alias_goto'] . "</td>\n";
print " <td>" . $PALANG['pOverview_alias_modified'] . "</td>\n";
print " <td colspan=\"2\">&nbsp;</td>\n";
print " </tr>\n";
for ($i = 0; $i < sizeof ($tAlias); $i++)
{
print " <tr onMouseOver=\"this.bgColor='#dfdfdf'\" onMouseOut =\"this.bgColor ='#ffffff'\" bgcolor=\"#ffffff\">\n";
print " <td>" . $tAlias[$i]['address'] . "</td>\n";
print " <td>" . ereg_replace (",", "<br>", $tAlias[$i]['goto']) . "</td>\n";
print " <td>" . $tAlias[$i]['modified'] . "</td>\n";
print " <td><a href=\"edit-alias.php?address=" . urlencode ($tAlias[$i]['address']) . "&domain=$fDomain" . "\">" . $PALANG['edit'] . "</a></td>\n";
print " <td><a href=\"delete.php?delete=" . urlencode ($tAlias[$i]['address']) . "&domain=$fDomain" . "\"onclick=\"return confirm ('" . $PALANG['confirm'] . "')\">" . $PALANG['del'] . "</a></td>\n";
print " </tr>\n";
}
print "</table>\n";
print "</center>\n";
print "<p />\n";
}
if (sizeof ($tMailbox) > 0)
{
print "<center>\n";
print "<table border=\"1\">\n";
print " <tr class=\"header\">\n";
print " <td>" . $PALANG['pOverview_mailbox_username'] . "</td>\n";
print " <td>" . $PALANG['pOverview_mailbox_name'] . "</td>\n";
if ($CONF['quota'] == 'YES') print " <td>" . $PALANG['pOverview_mailbox_quota'] . "</td>\n";
print " <td>" . $PALANG['pOverview_mailbox_modified'] . "</td>\n";
print " <td>" . $PALANG['pOverview_mailbox_active'] . "</td>\n";
print " <td colspan=\"2\">&nbsp;</td>\n";
print " </tr>\n";
for ($i = 0; $i < sizeof ($tMailbox); $i++)
{
print " <tr onMouseOver=\"this.bgColor='#dfdfdf'\" onMouseOut =\"this.bgColor='#ffffff'\" bgcolor=\"#ffffff\">\n";
print " <td>" . $tMailbox[$i]['username'] . "</td>\n";
print " <td>" . $tMailbox[$i]['name'] . "</td>\n";
if ($CONF['quota'] == 'YES') print " <td>" . substr ($tMailbox[$i]['quota'], 0, -6) . "</td>\n";
print " <td>" . $tMailbox[$i]['modified'] . "</td>\n";
$active = ($tMailbox[$i]['active'] == 1) ? $PALANG['YES'] : $PALANG['NO'];
print " <td>" . $active . "</td>\n";
print " <td><a href=\"edit-mailbox.php?username=" . urlencode ($tMailbox[$i]['username']) . "&domain=$fDomain" . "\">" . $PALANG['edit'] . "</a></td>\n";
print " <td><a href=\"delete.php?delete=" . urlencode ($tMailbox[$i]['username']) . "&domain=$fDomain" . "\"onclick=\"return confirm ('" . $PALANG['confirm'] . "')\">" . $PALANG['del'] . "</a></td>\n";
print " </tr>\n";
}
print "</table>\n";
print "</center>\n";
print "<p />\n";
}
?>

62
templates/password.tpl

@ -0,0 +1,62 @@
<center>
<?php print $tMessage; ?>
<table class="form">
<tr>
<td align="center" colspan="3">
<?php print $PALANG['pPassword_welcome'] . "\n"; ?>
<br />
<br />
</td>
</tr>
<tr>
<td>
<form name="mailbox" method="post">
<?php print $PALANG['pPassword_admin'] . ":\n"; ?>
</td>
<td>
<?php print $SESSID_USERNAME . "\n";?>
</td>
<td>
<?php print $pPassword_admin_text . "\n"; ?>
</td>
</tr>
<tr>
<td>
<?php print $PALANG['pPassword_password_current'] . ":\n"; ?>
</td>
<td>
<input type="password" name="fPassword_current" />
</td>
<td>
<?php print $pPassword_password_current_text . "\n"; ?>
</td>
</tr>
<tr>
<td>
<?php print $PALANG['pPassword_password'] . ":\n"; ?>
</td>
<td>
<input type="password" name="fPassword" />
</td>
<td>
<?php print $pPassword_password_text . "\n"; ?>
</td>
</tr>
<tr>
<td>
<?php print $PALANG['pPassword_password2'] . ":\n"; ?>
</td>
<td>
<input type="password" name="fPassword2" />
</td>
<td>
&nbsp;
</td>
</tr>
<tr>
<td align="center" colspan="3">
<input type="submit" name="submit" value="<?php print $PALANG['pPassword_button']; ?>" />
</form>
</td>
</tr>
</table>

66
templates/sendmail.tpl

@ -0,0 +1,66 @@
<center>
<?php print $tMessage; ?>
<table class="form">
<tr>
<td align="center" colspan="3">
<?php print $PALANG['pSendmail_welcome'] . "\n"; ?>
<br />
<br />
</td>
</tr>
<tr>
<td>
<form name="mailbox" method="post">
<?php print $PALANG['pSendmail_admin'] . ":\n"; ?>
</td>
<td>
<?php print $SESSID_USERNAME . "\n"; ?>
</td>
<td>
&nbsp;
</td>
</tr>
<tr>
<td>
<?php print $PALANG['pSendmail_to'] . ":\n"; ?>
</td>
<td>
<input type="text" name="fTo" />
</td>
<td>
&nbsp;
</td>
</tr>
<tr>
<td>
<?php print $PALANG['pSendmail_subject'] . ":\n"; ?>
</td>
<td>
<input type="text" name="fSubject" value="<?php print $PALANG['pSendmail_subject_text']; ?>" />
</td>
<td>
&nbsp;
</td>
</tr>
<tr>
<td>
<?php print $PALANG['pSendmail_body'] . ":\n"; ?>
</td>
<td>
<textarea rows="20" cols="80" name="fBody">
<?php print $PALANG['pSendmail_body_text'] . "\n"; ?>
</textarea>
</td>
<td>
&nbsp;
</td>
</tr>
<tr>
<td align="center" colspan="3">
<input type="submit" name="submit" value="<?php print $PALANG['pSendmail_button']; ?>" />
</form>
</td>
</tr>
</table>

50
templates/users_edit-alias.tpl

@ -0,0 +1,50 @@
<center>
<?php print $tMessage; ?>
<table class="form">
<tr>
<td align="center" colspan="3">
<?php print $PALANG['pEdit_alias_welcome'] . "\n"; ?>
<br />
<br />
</td>
</tr>
<tr>
<td>
<form name="mailbox" method="post">
<?php print $PALANG['pEdit_alias_address'] . ":\n"; ?>
</td>
<td>
<?php print $USERID_USERNAME . "\n"; ?>
</td>
<td>
&nbsp;
</td>
</tr>
<tr>
<td>
<?php print $PALANG['pEdit_alias_goto'] . ":\n"; ?>
</td>
<td>
<textarea rows="4" cols="23" name="fGoto">
<?php
$array = preg_split ('/,/', $tGoto);
for ($i = 0 ; $i < sizeof ($array) ; $i++)
{
if (empty ($array[$i])) continue;
if ($array[$i] == $USERID_USERNAME) continue;
print "$array[$i]\n";
}
?>
</textarea>
</td>
<td>
&nbsp;
</td>
</tr>
<tr>
<td align="center" colspan="3">
<input type="submit" name="submit" value="<?php print $PALANG['pEdit_alias_button']; ?>" />
</form>
</td>
</tr>
</table>

62
templates/users_login.tpl

@ -0,0 +1,62 @@
<?php
if ($CONF['logo'] == "YES")
{
print "<img src=\"../postfixadmin.png\" />\n";
}
else
{
print "<h1>" . $CONF['header_text'] . "</h1>\n";
}
?>
<p />
<center>
<font color="red"><?php print $tMessage; ?></font>
<table width="10%" border="0" cellspacing="0" cellpadding="0" height="100">
<tr bgcolor="#999999">
<td colspan="3" height="1">
</td>
</tr>
<tr>
<td bgcolor="#999999">
</td>
<td bgcolor="#eeeeee" valign="top">
<table border="0" cellspacing="0" cellpadding="6">
<tr>
<td colspan="2" align="center">
<br />
<b><?php print $PALANG['pUsersLogin_welcome']; ?></b><br />
<br />
</td>
</tr>
<td align="right">
<form name="login" method="post">
<?php print $PALANG['pUsersLogin_username'] . ":\n"; ?>
</td>
<td align="left">
<input type="text" name="fUsername" value="<?php print $tUsername; ?>" /><br />
</td>
</tr>
<tr>
<td align="right">
<?php print $PALANG['pUsersLogin_password'] . ":\n"; ?>
</td>
<td align="left">
<input type="password" name="fPassword" /><br />
</td>
</tr>
<tr>
<td align="center" colspan="2">
<input type="submit" name="submit" value="<?php print $PALANG['pUsersLogin_button']; ?>" />
</form>
</td>
</tr>
</table>
</td>
<td bgcolor="#999999">
</td>
</tr>
<tr bgcolor="#999999">
<td colspan="3" height="1">
</td>
</tr>
</table>

39
templates/users_main.tpl

@ -0,0 +1,39 @@
<center>
<table class="auto" border="0">
<tr>
<td colspan="2" nowrap>
<?php print $PALANG['pUsersMain_welcome'] . "\n"; ?>
<p />
</td>
</tr>
<?php
if ($CONF['vacation'] == 'YES')
{
print "<tr>\n";
print " <td nowrap>\n";
print " <a target=\"_top\" href=\"vacation.php\">" . $PALANG['pUsersMenu_vacation'] . "</a>\n";
print " </td>\n";
print " <td>\n";
print " " . $PALANG['pUsersMain_vacation'] . "\n";
print " </td>\n";
print "</tr>\n";
}
?>
<tr>
<td nowrap>
<a target="_top" href="edit-alias.php"><?php print $PALANG['pUsersMenu_edit_alias']; ?></a>
</td>
<td>
<?php print $PALANG['pUsersMain_edit_alias'] . "\n"; ?>
</td>
</tr>
<tr>
<td nowrap>
<a target="_top" href="password.php"><?php print $PALANG['pUsersMenu_password']; ?></a>
</td>
<td>
<?php print $PALANG['pUsersMain_password'] . "\n"; ?>
</td>
</tr>
</table>
<hr />

37
templates/users_menu.tpl

@ -0,0 +1,37 @@
<table class="auto">
<tr>
<?php
if ($CONF['vacation'] == "YES")
{
print " <td width=\"8\">\n";
print " &nbsp;\n";
print " </td>\n";
print " <td class=\"menu\">\n";
print " <a target=\"_top\" href=\"vacation.php\">" . $PALANG['pUsersMenu_vacation'] . "</a>\n";
print " </td>\n";
}
?>
<td width="8">
&nbsp;
</td>
<td class="menu">
<a target="_top" href="edit-alias.php"><?php print $PALANG['pUsersMenu_edit_alias']; ?></a>
</td>
<td width="8">
&nbsp;
</td>
<td class="menu">
<a target="_top" href="password.php"><?php print $PALANG['pUsersMenu_password']; ?></a>
</td>
<td width="8">
&nbsp;
</td>
<td class="menu">
<a target="_top" href="logout.php"><?php print $PALANG['pMenu_logout']; ?></a>
</td>
<td width="8">
&nbsp;
</td>
</tr>
</table>
<hr />

62
templates/users_password.tpl

@ -0,0 +1,62 @@
<center>
<?php print $tMessage; ?>
<table class="form">
<tr>
<td align="center" colspan="3">
<?php print $PALANG['pPassword_welcome'] . "\n"; ?>
<br />
<br />
</td>
</tr>
<tr>
<td>
<form name="mailbox" method="post">
<?php print $PALANG['pPassword_admin'] . ":\n"; ?>
</td>
<td>
<?php print $USERID_USERNAME . "\n"; ?>
</td>
<td>
<?php print $pPassword_admin_text . "\n"; ?>
</td>
</tr>
<tr>
<td>
<?php print $PALANG['pPassword_password_current'] . ":\n"; ?>
</td>
<td>
<input type="password" name="fPassword_current" />
</td>
<td>
<?php print $pPassword_password_current_text . "\n"; ?>
</td>
</tr>
<tr>
<td>
<?php print $PALANG['pPassword_password'] . ":\n"; ?>
</td>
<td>
<input type="password" name="fPassword" />
</td>
<td>
<?php print $pPassword_password_text . "\n"; ?>
</td>
</tr>
<tr>
<td>
<?php print $PALANG['pPassword_password2'] . ":\n"; ?>
</td>
<td>
<input type="password" name="fPassword2" />
</td>
<td>
&nbsp;
</td>
</tr>
<tr>
<td align="center" colspan="3">
<input type="submit" name="submit" value="<?php print $PALANG['pPassword_button']; ?>" />
</form>
</td>
</tr>
</table>

17
templates/users_vacation-get.tpl

@ -0,0 +1,17 @@
<center>
<?php print $tMessage; ?>
<table class="form">
<tr>
<td align="center">
<br />
<br />
</td>
</tr>
<tr>
<td align="center">
<form name="vacation" method="post">
<input type="submit" name="fBack" value="<?php print $PALANG['pUsersVacation_button_back']; ?>" />
</form>
</td>
</tr>
</table>

42
templates/users_vacation.tpl

@ -0,0 +1,42 @@
<center>
<?php print $tMessage; ?>
<table class="form">
<tr>
<td align="center" colspan="3">
<?php print $PALANG['pUsersVacation_welcome'] . "\n"; ?>
<br />
<br />
</td>
</tr>
<tr>
<td>
<form name="vacation" method="post">
<?php print $PALANG['pUsersVacation_subject'] . ":\n"; ?>
</td>
<td>
<input type="text" name="fSubject" value="<?php print $PALANG['pUsersVacation_subject_text']; ?>" />
</td>
<td>
&nbsp;
</td>
</tr>
<tr>
<td>
<?php print $PALANG['pUsersVacation_body'] . ":\n"; ?>
</td>
<td>
<textarea rows="10" cols="80" name="fBody">
<?php print $PALANG['pUsersVacation_body_text'] . "\n"; ?>
</textarea>
</td>
<td>
&nbsp;
</td>
</tr>
<tr>
<td align="center" colspan="3">
<input type="submit" name="fAway" value="<?php print $PALANG['pUsersVacation_button_away']; ?>" />
</form>
</td>
</tr>
</table>

62
templates/vcp.tpl

@ -0,0 +1,62 @@
<center>
<?php print $tMessage; ?>
<table class="form">
<tr>
<td align="center" colspan="3">
<?php print $PALANG['pVcp_welcome'] . "\n"; ?>
<br />
<br />
</td>
</tr>
<tr>
<td>
<form name="mailbox" method="post">
<?php print $PALANG['pVcp_username'] . ":\n"; ?>
</td>
<td>
<input type="text" name="fUsername" value="<?php print $tUsername; ?>" />
</td>
<td>
<?php print $pVcp_username_text . "\n"; ?>
</td>
</tr>
<tr>
<td>
<?php print $PALANG['pVcp_password_current'] . ":\n"; ?>
</td>
<td>
<input type="password" name="fPassword_current" />
</td>
<td>
<?php print $pVcp_password_current_text . "\n"; ?>
</td>
</tr>
<tr>
<td>
<?php print $PALANG['pVcp_password'] . ":\n"; ?>
</td>
<td>
<input type="password" name="fPassword" />
</td>
<td>
<?php print $pVcp_password_text . "\n"; ?>
</td>
</tr>
<tr>
<td>
<?php print $PALANG['pVcp_password2'] . ":\n"; ?>
</td>
<td>
<input type="password" name="fPassword2" />
</td>
<td>
&nbsp;
</td>
</tr>
<tr>
<td align="center" colspan="3">
<input type="submit" name="submit" value="<?php print $PALANG['pVcp_button']; ?>" />
</form>
</td>
</tr>
</table>

53
templates/viewlog.tpl

@ -0,0 +1,53 @@
<center>
<form name="overview" method="post">
<select name="fDomain">
<?php
for ($i = 0; $i < sizeof ($list_domains); $i++)
{
if ($fDomain == $list_domains[$i])
{
print "<option value=\"$list_domains[$i]\" selected>$list_domains[$i]</option>\n";
}
else
{
print "<option value=\"$list_domains[$i]\">$list_domains[$i]</option>\n";
}
}
?>
</select>
<input type="submit" name="submit" value="<?php print $PALANG['pViewlog_button']; ?>" />
</form>
<p />
<?php
print "<b>". $PALANG['pViewlog_welcome'] . $fDomain . "</b><br />\n";
print "<p />\n";
if (sizeof ($tLog) > 0)
{
print "<center>\n";
print "<table class=\"auto\" border=\"1\">\n";
print " <tr class=\"header\">\n";
print " <td>" . $PALANG['pViewlog_timestamp'] . "</td>\n";
print " <td>" . $PALANG['pViewlog_username'] . "</td>\n";
print " <td>" . $PALANG['pViewlog_domain'] . "</td>\n";
print " <td>" . $PALANG['pViewlog_action'] . "</td>\n";
print " <td>" . $PALANG['pViewlog_data'] . "</td>\n";
print " </tr>\n";
for ($i = 0; $i < sizeof ($tLog); $i++)
{
print " <tr onMouseOver=\"this.bgColor='#dfdfdf'\" onMouseOut =\"this.bgColor ='#ffffff'\" bgcolor=\"#ffffff\">\n";
print " <td>" . $tLog[$i]['timestamp'] . "</td>\n";
print " <td>" . $tLog[$i]['username'] . "</td>\n";
print " <td>" . $tLog[$i]['domain'] . "</td>\n";
print " <td>" . $tLog[$i]['action'] . "</td>\n";
print " <td>" . $tLog[$i]['data'] . "</td>\n";
print " </tr>\n";
}
print "</table>\n";
print "</center>\n";
print "<p />\n";
}
?>

98
users/edit-alias.php

@ -0,0 +1,98 @@
<?php
//
// File: edit-alias.php
//
// Template File: users_edit-alias.tpl
//
// Template Variables:
//
// tMessage
// tGoto
//
// Form POST \ GET Variables:
//
// fAddress
// fDomain
// fGoto
//
require ("../variables.inc.php");
require ("../config.inc.php");
require ("../functions.inc.php");
include ("../languages/" . $CONF['language'] . ".lang");
$USERID_USERNAME = check_user_session ();
$tmp = preg_split ('/@/', $USERID_USERNAME);
$USERID_DOMAIN = $tmp[1];
if ($_SERVER['REQUEST_METHOD'] == "GET")
{
$result = db_query ("SELECT * FROM alias WHERE address='$USERID_USERNAME'");
if ($result['rows'] == 1)
{
$row = mysql_fetch_array ($result['result']);
$tGoto = $row['goto'];
}
else
{
$tMessage = $PALANG['pEdit_alias_address_error'];
}
include ("../templates/header.tpl");
include ("../templates/users_menu.tpl");
include ("../templates/users_edit-alias.tpl");
include ("../templates/footer.tpl");
}
if ($_SERVER['REQUEST_METHOD'] == "POST")
{
$pEdit_alias_goto = $PALANG['pEdit_alias_goto'];
$fGoto = $_POST['fGoto'];
$goto = preg_replace ('/\r\n/', ',', $fGoto);
$goto = preg_replace ('/[\s]+/i', '', $goto);
$goto = preg_replace ('/\,*$/', '', $goto);
$array = preg_split ('/,/', $goto);
for ($i = 0; $i < sizeof ($array); $i++) {
if (in_array ("$array[$i]", $CONF['default_aliases'])) continue;
if (empty ($array[$i])) continue;
if (!check_email ($array[$i]))
{
$error = 1;
$tGoto = $goto;
$tMessage = $PALANG['pEdit_alias_goto_text_error2'] . "$array[$i]</font>";
}
}
if ($error != 1)
{
if (empty ($fGoto))
{
$goto = $USERID_USERNAME;
}
else
{
$goto = $USERID_USERNAME . "," . $goto;
}
$result = db_query ("UPDATE alias SET goto='$goto',modified=NOW() WHERE address='$USERID_USERNAME'");
if ($result['rows'] != 1)
{
$tMessage = $PALANG['pEdit_alias_result_error'];
}
else
{
db_log ($USERID_USERNAME, $USERID_DOMAIN, "edit alias", "$USERID_USERNAME -> $goto");
header ("Location: main.php");
exit;
}
}
include ("../templates/header.tpl");
include ("../templates/users_menu.tpl");
include ("../templates/users_edit-alias.tpl");
include ("../templates/footer.tpl");
}
?>

17
users/index.php

@ -0,0 +1,17 @@
<?php
//
// File: index.php
//
// Template File: -none-
//
// Template Variables:
//
// -none-
//
// Form POST \ GET Variables:
//
// -none-
//
header ("Location: login.php");
exit;
?>

69
users/login.php

@ -0,0 +1,69 @@
<?php
//
// File: login.php
//
// Template File: login.tpl
//
// Template Variables:
//
// tMessage
// tUsername
//
// Form POST \ GET Variables:
//
// fUsername
// fPassword
//
require ("../variables.inc.php");
require ("../config.inc.php");
require ("../functions.inc.php");
include ("../languages/" . $CONF['language'] . ".lang");
if ($_SERVER['REQUEST_METHOD'] == "GET")
{
include ("../templates/header.tpl");
include ("../templates/users_login.tpl");
include ("../templates/footer.tpl");
}
if ($_SERVER['REQUEST_METHOD'] == "POST")
{
$fUsername = $_POST['fUsername'];
$fPassword = $_POST['fPassword'];
$result = db_query ("SELECT password FROM mailbox WHERE username='$fUsername'");
if ($result['rows'] == 1)
{
$row = mysql_fetch_array ($result['result']);
$salt = preg_split ('/\$/', $row['password']);
$password = pacrypt ($fPassword, $salt[2]);
$result = db_query ("SELECT * FROM mailbox WHERE username='$fUsername' AND password='$password'");
if ($result['rows'] != 1)
{
$error = 1;
$tMessage = $PALANG['pLogin_password_incorrect'];
$tUsername = $fUsername;
}
}
else
{
$error = 1;
$tMessage = $PALANG['pLogin_username_incorrect'];
}
if ($error != 1)
{
session_start();
session_register("userid");
$_SESSION['userid']['username'] = $fUsername;
header("Location: main.php");
exit;
}
include ("../templates/header.tpl");
include ("../templates/users_login.tpl");
include ("../templates/footer.tpl");
}
?>

25
users/logout.php

@ -0,0 +1,25 @@
<?php
//
// File: logout.php
//
// Template File: -none-
//
// Template Variables:
//
// -none-
//
// Form POST \ GET Variables:
//
// -none-
//
require ("../config.inc.php");
require ("../functions.inc.php");
$USERID_USERNAME = check_user_session ();
session_unset ();
session_destroy ();
header ("Location: login.php");
exit;
?>

36
users/main.php

@ -0,0 +1,36 @@
<?php
//
// File: main.php
//
// Template File: main.tpl
//
// Template Variables:
//
// -none-
//
// Form POST \ GET Variables:
//
// -none-
//
require ("../config.inc.php");
require ("../functions.inc.php");
include ("../languages/" . $CONF['language'] . ".lang");
$USERID_USERNAME = check_user_session ();
if ($_SERVER["REQUEST_METHOD"] == "GET")
{
include ("../templates/header.tpl");
include ("../templates/users_menu.tpl");
include ("../templates/users_main.tpl");
include ("../templates/footer.tpl");
}
if ($_SERVER["REQUEST_METHOD"] == "POST")
{
include ("../templates/header.tpl");
include ("../templates/users_menu.tpl");
include ("../templates/users_main.tpl");
include ("../templates/footer.tpl");
}
?>

90
users/password.php

@ -0,0 +1,90 @@
<?php
//
// File: password.php
//
// Template File: users_password.tpl
//
// Template Variables:
//
// tMessage
//
// Form POST \ GET Variables:
//
// fPassword_current
// fPassword
// fPassword2
//
require ("../variables.inc.php");
require ("../config.inc.php");
require ("../functions.inc.php");
include ("../languages/" . $CONF['language'] . ".lang");
$USERID_USERNAME = check_user_session ();
$tmp = preg_split ('/@/', $USERID_USERNAME);
$USERID_DOMAIN = $tmp[1];
if ($_SERVER['REQUEST_METHOD'] == "GET")
{
include ("../templates/header.tpl");
include ("../templates/users_menu.tpl");
include ("../templates/users_password.tpl");
include ("../templates/footer.tpl");
}
if ($_SERVER['REQUEST_METHOD'] == "POST")
{
$pPassword_password_text = $PALANG['pPassword_password_text'];
$fPassword_current = $_POST['fPassword_current'];
$fPassword = $_POST['fPassword'];
$fPassword2 = $_POST['fPassword2'];
$username = $USERID_USERNAME;
$result = db_query ("SELECT * FROM mailbox WHERE username='$username'");
if ($result['rows'] == 1)
{
$row = mysql_fetch_array ($result['result']);
$salt = preg_split ('/\$/', $row['password']);
$checked_password = pacrypt ($fPassword_current, $salt[2]);
$result = db_query ("SELECT * FROM mailbox WHERE username='$username' AND password='$checked_password'");
if ($result['rows'] != 1)
{
$error = 1;
$pPassword_password_current_text = $PALANG['pPassword_password_current_text_error'];
}
}
else
{
$error = 1;
$pPassword_email_text = $PALANG['pPassword_email_text_error'];
}
if (empty ($fPassword) or ($fPassword != $fPassword2))
{
$error = 1;
$pPassword_password_text = $PALANG['pPassword_password_text_error'];
}
if ($error != 1)
{
$password = pacrypt ($fPassword);
$result = db_query ("UPDATE mailbox SET password='$password',modified=NOW() WHERE username='$username'");
if ($result['rows'] == 1)
{
$tMessage = $PALANG['pPassword_result_succes'];
db_log ($USERID_USERNAME, $USERID_DOMAIN, "change password", "$USERID_USERNAME");
}
else
{
$tMessage = $PALANG['pPassword_result_error'];
}
}
include ("../templates/header.tpl");
include ("../templates/users_menu.tpl");
include ("../templates/users_password.tpl");
include ("../templates/footer.tpl");
}
?>

89
users/vacation.php

@ -0,0 +1,89 @@
<?php
//
// File: vacation.php
//
// Template File: users_vacation.tpl
//
// Template Variables:
//
// tMessage
// tSubject
// tBody
//
// Form POST \ GET Variables:
//
// fSubject
// fBody
//
require ("../variables.inc.php");
require ("../config.inc.php");
require ("../functions.inc.php");
include ("../languages/" . $CONF['language'] . ".lang");
$USERID_USERNAME = check_user_session ();
$tmp = preg_split ('/@/', $USERID_USERNAME);
$USERID_DOMAIN = $tmp[1];
if ($_SERVER['REQUEST_METHOD'] == "GET")
{
$result = db_query("SELECT * FROM vacation WHERE email='$USERID_USERNAME'");
if ($result['rows'] == 1)
{
$row = mysql_fetch_array($result['result']);
$tMessage = $PALANG['pUsersVacation_welcome_text'];
$template = "users_vacation-get.tpl";
}
else
{
$template = "users_vacation.tpl";
}
include ("../templates/header.tpl");
include ("../templates/users_menu.tpl");
include ("../templates/$template");
include ("../templates/footer.tpl");
}
if ($_SERVER['REQUEST_METHOD'] == "POST")
{
$fSubject = $_POST['fSubject'];
$fBody = $_POST['fBody'];
$fAway = $_POST['fAway'];
$fBack = $_POST['fBack'];
if (!empty ($fBack))
{
$result = db_query ("DELETE FROM vacation WHERE email='$USERID_USERNAME'");
if ($result['rows'] != 1)
{
$error = 1;
$tMessage = $PALANG['pUsersVacation_result_error'];
}
else
{
$tMessage = $PALANG['pUsersVacation_result_succes'];
}
}
if (!empty ($fAway))
{
$result = db_query ("INSERT INTO vacation (email,subject,body,domain,created) VALUES ('$USERID_USERNAME','$fSubject','$fBody','$USERID_DOMAIN',NOW())");
if ($result['rows'] != 1)
{
$error = 1;
$tMessage = $PALANG['pUsersVacation_result_error'];
}
else
{
header ("Location: main.php");
exit;
}
}
include ("../templates/header.tpl");
include ("../templates/users_menu.tpl");
include ("../templates/users_vacation.tpl");
include ("../templates/footer.tpl");
}
?>

65
variables.inc.php

@ -0,0 +1,65 @@
<?php
$error = "";
$quota = "";
$fActive = "";
$fAddress = "";
$fAliases = "";
$fDefaultaliases = "";
$fDelete = "";
$fDescription = "";
$fDomain = "";
$fDomains = "";
$fGoto = "";
$fMail = "";
$fMailboxes = "";
$fMaxquota = "";
$fName = "";
$fPassword = "";
$fPassword2 = "";
$fQuota = "";
$fTable = "";
$fUsername = "";
$fWhere = "";
$tActive = "";
$tActive = "";
$tAddress = "";
$tAlias = "";
$tAliases = "";
$tBody = "";
$tDefaultaliases = "";
$tDescription = "";
$tDomain = "";
$tDomains = "";
$tFrom = "";
$tGoto = "";
$tLog = "";
$tMailbox = "";
$tMailboxes = "";
$tMaxquota = "";
$tMessage = "";
$tName = "";
$tQuota = "";
$tSubject = "";
$tUsername = "";
$pAdminCreate_admin_password_text = "";
$pAdminCreate_admin_username_text = "";
$pAdminCreate_domain_defaultaliases_text = "";
$pAdminCreate_domain_domain_text = "";
$pAdminEdit_admin_password_text = "";
$pCreate_alias_address_text = "";
$pCreate_alias_goto_text = "";
$pCreate_mailbox_name_text = "";
$pCreate_mailbox_password_text = "";
$pCreate_mailbox_quota_text = "";
$pCreate_mailbox_username_text = "";
$pEdit_mailbox_password_text = "";
$pEdit_mailbox_quota_text = "";
$pEdit_mailbox_username_text = "";
$pPassword_admin_text = "";
$pPassword_password_current_text = "";
$pPassword_password_text = "";
$pVcp_password_current_text = "";
$pVcp_password_text = "";
$pVcp_username_text = "";
?>

79
viewlog.php

@ -0,0 +1,79 @@
<?php
//
// File: viewlog.php
//
// Template File: viewlog.tpl
//
// Template Variables:
//
// tMessage
// tLog
//
// Form POST \ GET Variables:
//
// fDomain
//
require ("./variables.inc.php");
require ("./config.inc.php");
require ("./functions.inc.php");
include ("./languages/" . $CONF['language'] . ".lang");
$SESSID_USERNAME = check_session();
$list_domains = list_domains_for_admin ($SESSID_USERNAME);
if ($_SERVER['REQUEST_METHOD'] == "GET")
{
$fDomain = $list_domains[0];
if (!check_owner ($SESSID_USERNAME, $fDomain))
{
$error = 1;
$tMessage = $PALANG['pViewlog_error'];
}
if ($error != 1)
{
$result = db_query ("SELECT * FROM log WHERE domain='$fDomain' ORDER BY timestamp DESC LIMIT 10");
if ($result['rows'] > 0)
{
while ($row = mysql_fetch_array ($result['result']))
{
$tLog[] = $row;
}
}
}
include ("./templates/header.tpl");
include ("./templates/menu.tpl");
include ("./templates/viewlog.tpl");
include ("./templates/footer.tpl");
}
if ($_SERVER['REQUEST_METHOD'] == "POST")
{
$fDomain = $_POST['fDomain'];
if (!check_owner ($SESSID_USERNAME, $fDomain))
{
$error = 1;
$tMessage = $PALANG['pViewlog_error'];
}
if ($error != 1)
{
$result = db_query ("SELECT * FROM log WHERE domain='$fDomain' ORDER BY timestamp DESC LIMIT 10");
if ($result['rows'] > 0)
{
while ($row = mysql_fetch_array ($result['result']))
{
$tLog[] = $row;
}
}
}
include ("./templates/header.tpl");
include ("./templates/menu.tpl");
include ("./templates/viewlog.tpl");
include ("./templates/footer.tpl");
}
?>
Loading…
Cancel
Save