Compare commits
6 Commits
master
...
postfixadm
| Author | SHA1 | Date |
|---|---|---|
|
|
29f588ae9f | 15 years ago |
|
|
5e169b9544 | 17 years ago |
|
|
74dfe63b9f | 17 years ago |
|
|
07b82d2ead | 17 years ago |
|
|
316884b6e8 | 17 years ago |
|
|
187e4d9a0b | 17 years ago |
@ -1,34 +0,0 @@
|
|||||||
name: GitHubBuild
|
|
||||||
|
|
||||||
on: [push]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build:
|
|
||||||
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v1
|
|
||||||
|
|
||||||
- name: Validate composer.json and composer.lock
|
|
||||||
run: composer validate
|
|
||||||
|
|
||||||
- name: setup templates_c
|
|
||||||
run: mkdir templates_c || true
|
|
||||||
|
|
||||||
- name: touch config.local.php
|
|
||||||
run: touch config.local.php && php -v
|
|
||||||
|
|
||||||
- name: Install dependencies
|
|
||||||
run: composer install --prefer-dist --no-progress --no-suggest
|
|
||||||
|
|
||||||
- name: Build/test
|
|
||||||
run: composer build
|
|
||||||
|
|
||||||
- name: setup coveralls
|
|
||||||
run: mkdir -p build/logs || true
|
|
||||||
|
|
||||||
- name: Coveralls
|
|
||||||
run: vendor/bin/coveralls ./clover.xml || true
|
|
||||||
env:
|
|
||||||
COVERALLS_REPO_TOKEN: ${{ secrets.COVERALLS_REPO_TOKEN }}
|
|
||||||
@ -1,7 +0,0 @@
|
|||||||
/config.local.php
|
|
||||||
/templates_c/*.tpl.php
|
|
||||||
/templates_c/*menu.conf.php
|
|
||||||
/vendor/
|
|
||||||
/.php_cs.cache
|
|
||||||
/.idea
|
|
||||||
/composer.lock
|
|
||||||
@ -1,23 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
$finder = PhpCsFixer\Finder::create()
|
|
||||||
->exclude('lib')
|
|
||||||
->exclude('vendor')
|
|
||||||
->exclude('templates')
|
|
||||||
->exclude('templates_c')
|
|
||||||
->exclude('debian')
|
|
||||||
->files()->notName('config.inc.php')->notName('config.local.php')
|
|
||||||
->in(__DIR__);
|
|
||||||
|
|
||||||
return PhpCsFixer\Config::create()
|
|
||||||
->setFinder($finder)
|
|
||||||
->setRules(array(
|
|
||||||
'@PSR2' => true,
|
|
||||||
'braces' => array(
|
|
||||||
'position_after_functions_and_oop_constructs' => 'same',
|
|
||||||
),
|
|
||||||
'method_argument_space' => false, # don't break formatting in initStruct()
|
|
||||||
'no_spaces_inside_parenthesis' => false, # don't break formatting in initStruct()
|
|
||||||
));
|
|
||||||
|
|
||||||
/* vim: set expandtab softtabstop=4 tabstop=4 shiftwidth=4 ft=php: */
|
|
||||||
@ -1,32 +0,0 @@
|
|||||||
language: php
|
|
||||||
php:
|
|
||||||
- 7.2
|
|
||||||
- 7.3
|
|
||||||
- 7.4
|
|
||||||
|
|
||||||
services:
|
|
||||||
- mysql
|
|
||||||
- postgresql
|
|
||||||
|
|
||||||
cache:
|
|
||||||
directories:
|
|
||||||
- $HOME/.composer/cache
|
|
||||||
- $HOME/vendor
|
|
||||||
|
|
||||||
before_install:
|
|
||||||
- mysql -e 'CREATE DATABASE postfixadmin;'
|
|
||||||
- psql -c 'create database postfixadmin;' -U postgres
|
|
||||||
|
|
||||||
|
|
||||||
before_script:
|
|
||||||
- travis_retry composer install --no-interaction --prefer-source --dev
|
|
||||||
- mkdir -p build/logs
|
|
||||||
|
|
||||||
script:
|
|
||||||
- composer build
|
|
||||||
- DATABASE=sqlite vendor/bin/phpunit tests/
|
|
||||||
- DATABASE=mysql vendor/bin/phpunit --coverage-clover=build/logs/clover.xml tests/
|
|
||||||
- DATABASE=postgresql vendor/bin/phpunit tests/
|
|
||||||
|
|
||||||
after_success:
|
|
||||||
- travis_retry php vendor/bin/php-coveralls
|
|
||||||
@ -1,8 +0,0 @@
|
|||||||
|
|
||||||
Version 0.1 -- 26/10/2009
|
|
||||||
---------------------------
|
|
||||||
|
|
||||||
* Public Release.
|
|
||||||
* Postcreation, Postdeletion and Postedit hooks.
|
|
||||||
|
|
||||||
|
|
||||||
@ -1,7 +0,0 @@
|
|||||||
|
|
||||||
Configuración
|
|
||||||
-------------
|
|
||||||
|
|
||||||
- Edita el fichero cyrus.conf y modifica las variables $cyrus_*. El usuario debe tener permisos sobre todas las cuentas.
|
|
||||||
- Edita los ficheros cyrus-*.pl y cambia la ruta de cyrus.conf (linea require '/path/to/cyrus.conf';)
|
|
||||||
|
|
||||||
@ -1,7 +0,0 @@
|
|||||||
|
|
||||||
Configuration
|
|
||||||
-------------
|
|
||||||
|
|
||||||
- Edit cyrus.conf and set $cyrus_* variables correctly. User must have permission over all accounts.
|
|
||||||
- Edit cyrus-*.pl and change path to cyrus.conf (require '/path/to/cyrus.conf'; line)
|
|
||||||
|
|
||||||
@ -1,36 +0,0 @@
|
|||||||
#!/usr/bin/perl
|
|
||||||
|
|
||||||
# Cyrus Mailbox creation
|
|
||||||
#
|
|
||||||
# Iñaki Rodriguez (irodriguez@virtualminds.es / irodriguez@ackstorm.es)
|
|
||||||
#
|
|
||||||
# LICENSE
|
|
||||||
# This source file is subject to the GPL license that is bundled with
|
|
||||||
# this package in the file LICENSE.TXT.
|
|
||||||
#
|
|
||||||
# (26/10/2009)
|
|
||||||
|
|
||||||
use Cyrus::IMAP::Admin;
|
|
||||||
require '/etc/mail/postfixadmin/cyrus.conf';
|
|
||||||
use strict;
|
|
||||||
use vars qw($cyrus_user $cyrus_password $cyrus_host);
|
|
||||||
|
|
||||||
my %opts;
|
|
||||||
|
|
||||||
my $mailbox = mailbox_name($ARGV[0]);
|
|
||||||
|
|
||||||
my $client = Cyrus::IMAP::Admin->new($cyrus_host);
|
|
||||||
die_on_error($client);
|
|
||||||
|
|
||||||
$opts{-user} = $cyrus_user;
|
|
||||||
$opts{-password} = $cyrus_password;
|
|
||||||
|
|
||||||
$client->authenticate(%opts);
|
|
||||||
die_on_error($client);
|
|
||||||
|
|
||||||
$client->create($mailbox);
|
|
||||||
die_on_error($client);
|
|
||||||
|
|
||||||
$client->setquota($mailbox,'STORAGE',scalar $ARGV[3]) if ($ARGV[3] > 0);
|
|
||||||
die_on_error($client);
|
|
||||||
|
|
||||||
@ -1,36 +0,0 @@
|
|||||||
#!/usr/bin/perl
|
|
||||||
|
|
||||||
# Cyrus Mailbox deletion
|
|
||||||
#
|
|
||||||
# Iñaki Rodriguez (irodriguez@virtualminds.es / irodriguez@ackstorm.es)
|
|
||||||
#
|
|
||||||
# LICENSE
|
|
||||||
# This source file is subject to the GPL license that is bundled with
|
|
||||||
# this package in the file LICENSE.TXT.
|
|
||||||
#
|
|
||||||
# (26/10/2009)
|
|
||||||
|
|
||||||
use Cyrus::IMAP::Admin;
|
|
||||||
require '/etc/mail/postfixadmin/cyrus.conf';
|
|
||||||
use strict;
|
|
||||||
use vars qw($cyrus_user $cyrus_password $cyrus_host);
|
|
||||||
|
|
||||||
my %opts;
|
|
||||||
|
|
||||||
my $mailbox = mailbox_name($ARGV[0]);
|
|
||||||
|
|
||||||
my $client = Cyrus::IMAP::Admin->new($cyrus_host);
|
|
||||||
die_on_error($client);
|
|
||||||
|
|
||||||
$opts{-user} = $cyrus_user;
|
|
||||||
$opts{-password} = $cyrus_password;
|
|
||||||
|
|
||||||
$client->authenticate(%opts);
|
|
||||||
die_on_error($client);
|
|
||||||
|
|
||||||
$client->setacl($mailbox,$cyrus_user => 'all');
|
|
||||||
die_on_error($client);
|
|
||||||
|
|
||||||
$client->deletemailbox($mailbox);
|
|
||||||
die_on_error($client);
|
|
||||||
|
|
||||||
@ -1,33 +0,0 @@
|
|||||||
#!/usr/bin/perl
|
|
||||||
|
|
||||||
# Cyrus Mailbox edition
|
|
||||||
#
|
|
||||||
# Iñaki Rodriguez (irodriguez@virtualminds.es / irodriguez@ackstorm.es)
|
|
||||||
#
|
|
||||||
# LICENSE
|
|
||||||
# This source file is subject to the GPL license that is bundled with
|
|
||||||
# this package in the file LICENSE.TXT.
|
|
||||||
#
|
|
||||||
# (26/10/2009)
|
|
||||||
|
|
||||||
use Cyrus::IMAP::Admin;
|
|
||||||
require '/etc/mail/postfixadmin/cyrus.conf';
|
|
||||||
use strict;
|
|
||||||
use vars qw($cyrus_user $cyrus_password $cyrus_host);
|
|
||||||
|
|
||||||
my %opts;
|
|
||||||
|
|
||||||
my $mailbox = mailbox_name($ARGV[0]);
|
|
||||||
|
|
||||||
my $client = Cyrus::IMAP::Admin->new($cyrus_host);
|
|
||||||
die_on_error($client);
|
|
||||||
|
|
||||||
$opts{-user} = $cyrus_user;
|
|
||||||
$opts{-password} = $cyrus_password;
|
|
||||||
|
|
||||||
$client->authenticate(%opts);
|
|
||||||
die_on_error($client);
|
|
||||||
|
|
||||||
$client->setquota($mailbox,'STORAGE',scalar $ARGV[3]) if ($ARGV[3] > 0);
|
|
||||||
die_on_error($client);
|
|
||||||
|
|
||||||
@ -1,31 +0,0 @@
|
|||||||
#!/usr/bin/perl
|
|
||||||
|
|
||||||
# Config
|
|
||||||
|
|
||||||
$cyrus_user = 'cyrus';
|
|
||||||
$cyrus_password = 'cyruspass';
|
|
||||||
$cyrus_host = 'localhost';
|
|
||||||
|
|
||||||
# unixhierarchysep => 1 (yes) / 0 (no)
|
|
||||||
$unixhierarchysep = 1;
|
|
||||||
|
|
||||||
# Common routines
|
|
||||||
|
|
||||||
sub mailbox_name {
|
|
||||||
my $mailbox = shift;
|
|
||||||
|
|
||||||
if($unixhierarchysep) {
|
|
||||||
$mailbox = 'user/'.$ARGV[0];
|
|
||||||
} else {
|
|
||||||
$mailbox = 'user.'.$ARGV[0];
|
|
||||||
}
|
|
||||||
|
|
||||||
return $mailbox;
|
|
||||||
}
|
|
||||||
|
|
||||||
sub die_on_error {
|
|
||||||
my $cyradm = shift;
|
|
||||||
if($cyradm->error) { die $cyradm->error; }
|
|
||||||
}
|
|
||||||
1;
|
|
||||||
|
|
||||||
@ -1,77 +0,0 @@
|
|||||||
#!/usr/bin/perl
|
|
||||||
|
|
||||||
|
|
||||||
use strict;
|
|
||||||
use warnings;
|
|
||||||
use Getopt::Long;
|
|
||||||
|
|
||||||
|
|
||||||
$ENV{'PATH'} = "/sbin:/bin:/usr/sbin:/usr/bin";
|
|
||||||
|
|
||||||
my ($domain);
|
|
||||||
my $list = 0;
|
|
||||||
|
|
||||||
(help()) if (!$ARGV[0]);
|
|
||||||
GetOptions ('l' => \$list, 'd=s' => \$domain) or (help());
|
|
||||||
|
|
||||||
|
|
||||||
(list_queue()) if ($list == 1);
|
|
||||||
|
|
||||||
(delete_queue()) if ($domain);
|
|
||||||
|
|
||||||
|
|
||||||
sub delete_queue {
|
|
||||||
my $ids = `postqueue -p`;
|
|
||||||
my @ids = split /\n/, $ids;
|
|
||||||
|
|
||||||
for my $id (@ids) {
|
|
||||||
next if $id =~ /^[\s\(-]/;
|
|
||||||
chomp $id;
|
|
||||||
next unless $id;
|
|
||||||
$id =~ s/(.*?)\**\s.*/$1/;
|
|
||||||
#print "$id\n";
|
|
||||||
my $match = `postcat -q $id | grep '$domain'`;
|
|
||||||
next unless $match;
|
|
||||||
#print "Deleting ID: $id\n";
|
|
||||||
my $saida = `postsuper -d $id`;
|
|
||||||
print $saida;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
sub list_queue {
|
|
||||||
my %hash_mail = ();
|
|
||||||
my @queue = `postqueue -p`;
|
|
||||||
my($queue,$key,$total);
|
|
||||||
|
|
||||||
|
|
||||||
foreach $queue(@queue) {
|
|
||||||
chomp $queue;
|
|
||||||
if ( $queue =~ /^\s+.*\@(.*)/ ) {
|
|
||||||
$hash_mail{$1}++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
print"\nTOTAL\tTO\n";
|
|
||||||
print"-----
|
|
||||||
----------------------------------------------------------------\n";
|
|
||||||
foreach $key (reverse sort { $hash_mail{$a} <=> $hash_mail{$b}} keys
|
|
||||||
%hash_mail) {
|
|
||||||
$total += $hash_mail{$key};
|
|
||||||
print"$hash_mail{$key} - $key\n";
|
|
||||||
}
|
|
||||||
print"\n$total -> TOTAL QUEUE\n";
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
sub help {
|
|
||||||
print "Usage $0 -l To list a row of E-mail
|
|
||||||
Usage $0 -d domain.com To delete the mensgens the Domain\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -1,231 +0,0 @@
|
|||||||
#!/usr/bin/env python
|
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
# Script takes a CSV list of users and does a 'bulk' insertion into mysql.
|
|
||||||
#
|
|
||||||
# Copyright (C) 2009 Simone Piccardi
|
|
||||||
#
|
|
||||||
# This program is free software; you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU General Public License as published by
|
|
||||||
# the Free Software Foundation; either version 2 of the License, or (at
|
|
||||||
# your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful, but
|
|
||||||
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
# General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program; if not, write to the Free Software
|
|
||||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
||||||
#
|
|
||||||
|
|
||||||
import csv
|
|
||||||
import getopt
|
|
||||||
import sys
|
|
||||||
import re
|
|
||||||
import time
|
|
||||||
import random, string
|
|
||||||
from datetime import datetime
|
|
||||||
from crypt import crypt
|
|
||||||
try:
|
|
||||||
import MySQLdb
|
|
||||||
except ImportError ,e:
|
|
||||||
print 'Cannot import the needed MySQLdb module, you must install it'
|
|
||||||
print 'on Debian systems just use the command'
|
|
||||||
print ' apt-get install python-mysqldb'
|
|
||||||
|
|
||||||
def usage():
|
|
||||||
print "Usage: inspostadmusers.py [options] users.csv"
|
|
||||||
print " -h print this help"
|
|
||||||
print " -t test run, do not insert, just print"
|
|
||||||
print " -u DB user"
|
|
||||||
print " -p DB password"
|
|
||||||
print " -D DB name"
|
|
||||||
print " -H DB host"
|
|
||||||
print " -q Quota in Mb (0 => no limit)"
|
|
||||||
print " -n char in seed"
|
|
||||||
print " -d debug info on"
|
|
||||||
print " -A create default alias for each domain"
|
|
||||||
print
|
|
||||||
print "the users.csv file must contains the user list with a line"
|
|
||||||
print "for each user, first line should be a title line with at least"
|
|
||||||
print "the following column names: "
|
|
||||||
print " * user - user part of the email (like user in user@domain.com)"
|
|
||||||
print " * password - cleartext password"
|
|
||||||
print " * domain - domain name (like 'domain.com')"
|
|
||||||
print " * name - full user name ('Name Surname')"
|
|
||||||
print
|
|
||||||
print "the 'name' column is optional, other columns will be ignored"
|
|
||||||
print
|
|
||||||
print "Known restrictions:"
|
|
||||||
print "* this script only works with MySQL"
|
|
||||||
print "* mailbox paths are hardcoded to domain/username/"
|
|
||||||
|
|
||||||
|
|
||||||
# option parsing
|
|
||||||
try:
|
|
||||||
opts, args = getopt.getopt(sys.argv[1:], 'u:p:d:D:H:htdA')
|
|
||||||
optval={}
|
|
||||||
for opt, val in opts:
|
|
||||||
if opt == "-h":
|
|
||||||
usage()
|
|
||||||
sys.exit(0)
|
|
||||||
else:
|
|
||||||
optval[opt]=val
|
|
||||||
except getopt.GetoptError:
|
|
||||||
usage()
|
|
||||||
sys.exit(2)
|
|
||||||
|
|
||||||
#
|
|
||||||
# Setup DB connection
|
|
||||||
#
|
|
||||||
MYSQLDB="postfixadmin"
|
|
||||||
MYSQLUSER="postfixadmin"
|
|
||||||
MYSQLPASSWORD=""
|
|
||||||
MYSQLHOST="localhost"
|
|
||||||
|
|
||||||
# settings by command line options
|
|
||||||
if optval.has_key('-u'):
|
|
||||||
MYSQLUSER = optval['-u']
|
|
||||||
if optval.has_key('-p'):
|
|
||||||
MYSQLPASSWORD = optval['-p']
|
|
||||||
if optval.has_key('-D'):
|
|
||||||
MYSQLDB = optval['-D']
|
|
||||||
if optval.has_key('-H'):
|
|
||||||
MYSQLHOST = optval['-H']
|
|
||||||
|
|
||||||
if optval.has_key('-q'):
|
|
||||||
quota = optval['-q']
|
|
||||||
else:
|
|
||||||
quota = 0
|
|
||||||
|
|
||||||
if optval.has_key('-n'):
|
|
||||||
seed_len = optval['-n']
|
|
||||||
else:
|
|
||||||
seed_len = 8
|
|
||||||
|
|
||||||
# check arguments, only the user list file must be present
|
|
||||||
if len(args) !=1:
|
|
||||||
print 'Need just one argument'
|
|
||||||
usage()
|
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
# MySQL connection (skipped in test run)
|
|
||||||
if optval.has_key('-t'):
|
|
||||||
print "Test Run"
|
|
||||||
else:
|
|
||||||
try:
|
|
||||||
connection = MySQLdb.connect(host=MYSQLHOST, user=MYSQLUSER,
|
|
||||||
db=MYSQLDB, passwd=MYSQLPASSWORD)
|
|
||||||
except MySQLdb.MySQLError, e:
|
|
||||||
print "Database connection error"
|
|
||||||
print e
|
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
cursor = connection.cursor()
|
|
||||||
|
|
||||||
#
|
|
||||||
# Main body
|
|
||||||
#
|
|
||||||
NOW = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
|
||||||
|
|
||||||
# read and convert CSV data
|
|
||||||
lista = csv.DictReader(open(args[0]))
|
|
||||||
|
|
||||||
def gen_seed(seed_len, chars):
|
|
||||||
return '$1$'+''.join([random.choice(chars) for _ in xrange(seed_len)])+'$'
|
|
||||||
|
|
||||||
def insert_record(cursor,table,record):
|
|
||||||
columns = record.keys()
|
|
||||||
query = "INSERT INTO " + table + "(" + ','.join(columns) + ") VALUES (" + ','.join(len(columns)*['%s']) + ")"
|
|
||||||
try:
|
|
||||||
cursor.execute(query, record.values())
|
|
||||||
return 0
|
|
||||||
except MySQLdb.MySQLError, e:
|
|
||||||
print "Database insertion error"
|
|
||||||
print e
|
|
||||||
print "Record was:"
|
|
||||||
print record.values()
|
|
||||||
print "Query was:"
|
|
||||||
print query
|
|
||||||
|
|
||||||
# defining default values for tables (mailbox, alias and domain)
|
|
||||||
mailbox = {
|
|
||||||
'created': NOW,
|
|
||||||
'modified': NOW,
|
|
||||||
'active': 1,
|
|
||||||
'quota': quota
|
|
||||||
}
|
|
||||||
aliases = {
|
|
||||||
'created': NOW,
|
|
||||||
'modified': NOW,
|
|
||||||
'active': 1
|
|
||||||
}
|
|
||||||
domain = {
|
|
||||||
'description': "",
|
|
||||||
'aliases': 0,
|
|
||||||
'mailboxes': 0,
|
|
||||||
'quota': 0,
|
|
||||||
'transport': 'virtual',
|
|
||||||
'backupmx': 0,
|
|
||||||
'created': NOW,
|
|
||||||
'modified': NOW,
|
|
||||||
'active': 1
|
|
||||||
}
|
|
||||||
|
|
||||||
# list of default alias
|
|
||||||
def_alias = ['abuse','hostmaster','postmaster','webmaster']
|
|
||||||
|
|
||||||
domain_list = {}
|
|
||||||
chars = string.letters + string.digits
|
|
||||||
|
|
||||||
# loop over the CSV
|
|
||||||
for row in lista:
|
|
||||||
# create domain if it does not exists
|
|
||||||
if domain_list.has_key(row["domain"]):
|
|
||||||
if optval.has_key('-d'):
|
|
||||||
print "Domain " + row["domain"] + "already exixts"
|
|
||||||
else:
|
|
||||||
domain_list[row["domain"]] = 1
|
|
||||||
domain['domain'] = row["domain"]
|
|
||||||
if optval.has_key('-t'):
|
|
||||||
print "Inserting domain"
|
|
||||||
print domain
|
|
||||||
else:
|
|
||||||
insert_record(cursor,'domain',domain)
|
|
||||||
if optval.has_key('-A'):
|
|
||||||
for i in def_alias:
|
|
||||||
aliases['address']= i+'@'+row["domain"]
|
|
||||||
aliases['goto']= aliases['address']
|
|
||||||
aliases['domain'] = row["domain"]
|
|
||||||
if optval.has_key('-t'):
|
|
||||||
print "Inserting alias"
|
|
||||||
print aliases
|
|
||||||
else:
|
|
||||||
insert_record(cursor,'alias',aliases)
|
|
||||||
|
|
||||||
# build query data for mailbox table
|
|
||||||
mailbox['username']=row["user"]+'@'+row["domain"]
|
|
||||||
encpass=crypt(row["password"], gen_seed(seed_len,chars))
|
|
||||||
mailbox['password'] = encpass
|
|
||||||
mailbox['name'] = row["name"]
|
|
||||||
mailbox['maildir'] = row["domain"]+'/'+row["user"]+'/'
|
|
||||||
mailbox['local_part'] =row["user"]
|
|
||||||
mailbox['domain'] = row["domain"]
|
|
||||||
|
|
||||||
# build query data for alias table
|
|
||||||
aliases['address']= mailbox['username']
|
|
||||||
aliases['goto']= mailbox['username']
|
|
||||||
aliases['domain'] = row["domain"]
|
|
||||||
|
|
||||||
# inserting data for mailbox (and relate alias)
|
|
||||||
if optval.has_key('-t'):
|
|
||||||
print "Inserting mailbox"
|
|
||||||
print mailbox
|
|
||||||
print aliases
|
|
||||||
else:
|
|
||||||
insert_record(cursor,'mailbox',mailbox)
|
|
||||||
insert_record(cursor,'alias',aliases)
|
|
||||||
|
|
||||||
|
|
||||||
sys.exit(0)
|
|
||||||
Binary file not shown.
@ -1,38 +0,0 @@
|
|||||||
Installing the postfixadmin Plugin
|
|
||||||
======================================
|
|
||||||
|
|
||||||
Requirements:
|
|
||||||
=============
|
|
||||||
|
|
||||||
- PHP 5.[234].* with php5-xmlrpc installed (if available; it should be available by default anyway)
|
|
||||||
- http access to a local/remote postfixadmin interface
|
|
||||||
- Zend Framework (1.12.x) - needs adding to the include path within common.php,
|
|
||||||
or installing in a system include path directory (e.g. /usr/share/php)
|
|
||||||
(e.g. from within the directory containing this file ...
|
|
||||||
wget https://packages.zendframework.com/releases/ZendFramework-1.12.3/ZendFramework-1.12.3-minimal.tar.gz
|
|
||||||
tar -zxf ZendFramework-1.12.3-minimal.tar.gz
|
|
||||||
mv ZendFramework-1.12.3-minimal/library/Zend . )
|
|
||||||
NOTE: This plugin is _not compatible_ with Zend Framework version 2.x.
|
|
||||||
|
|
||||||
Installation :
|
|
||||||
==============
|
|
||||||
|
|
||||||
- Copy this code into the Squirrelmail plugins directory - your life will be easiest if it's in a directory called 'postfixadmin'
|
|
||||||
- Install Zend Framework (see above under Requirements for example)
|
|
||||||
- Edit config.php and specify the remote URL for the Postfixadmin XmlRpc service.
|
|
||||||
- Edit common.php and (if you need to) change the include path(s) so they are correct.
|
|
||||||
- Edit the remote Postfixadmin's XmlRpc service config file and ensure 'xmlrpc_enabled' is set to boolean true.
|
|
||||||
- Enable the plugin through 'squirrelmail-configure' or 'config/conf.pl'.
|
|
||||||
Choose option 8 and move the plugin from the "Available Plugins"
|
|
||||||
category to the "Installed Plugins" category. Save and exit.
|
|
||||||
|
|
||||||
Security :
|
|
||||||
==========
|
|
||||||
|
|
||||||
- The XmlRpc client needs to get the user's mailbox password before it will be able to connect to the
|
|
||||||
XmlRpc server (postfixadmin). The plugin prompts the user for their mailbox password, and caches it in their session
|
|
||||||
($_SESSION['password']). This password is then sent once on every page load to the remote XmlRpc server.
|
|
||||||
|
|
||||||
- You should consider doing any of the following :
|
|
||||||
- Using https if the server and client are on seperate servers. This will probably require a signed certificate etc, and may require changes to the Zend_XmlRpc_Client's HttpClient.
|
|
||||||
- Using something like stunnel to encrypt traffic between server(s).
|
|
||||||
@ -1,40 +0,0 @@
|
|||||||
|
|
||||||
2007/03/29 :
|
|
||||||
Before I (David Goodwin) customised this plugin, it contained the following within all
|
|
||||||
files as a header.
|
|
||||||
|
|
||||||
/****************************************************************************************
|
|
||||||
|
|
||||||
Author ......... Florian Kimmerl
|
|
||||||
Contact ........ info@spacekoeln.de
|
|
||||||
Home Site ...... http://www.spacekoeln.de/
|
|
||||||
Program ........ postfixadmin
|
|
||||||
Purpose ........ Allows you to change your postfixadmin settings within squirrelmail
|
|
||||||
|
|
||||||
*************************************************************************************
|
|
||||||
|
|
||||||
The Original Code is Postfix Admin.
|
|
||||||
The Initial Developer of the Original Code is Mischa Peters .
|
|
||||||
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.
|
|
||||||
|
|
||||||
****************************************************************************************/
|
|
||||||
|
|
||||||
|
|
||||||
Contacting the author provided no success, so I took over maintainership.
|
|
||||||
|
|
||||||
Please note:
|
|
||||||
|
|
||||||
1) Changes made by myself (David Goodwin) will be licensed under the GPL
|
|
||||||
2) PostfixAdmin has itself been relicensed under the GPL; however this took place _after_
|
|
||||||
this plugin was written.
|
|
||||||
3) Squirrelmail itself is released under http://squirrelmail.org/wiki/SquirrelMailGPL (GPL)
|
|
||||||
|
|
||||||
|
|
||||||
The GNU public license can be found online at :
|
|
||||||
|
|
||||||
http://www.gnu.org/licenses/gpl.txt
|
|
||||||
@ -1,31 +0,0 @@
|
|||||||
# Squirrelmail Plugin Postfixadmin
|
|
||||||
|
|
||||||
The Postfixadmin SquirrelMail plugin let users change their virtual alias,
|
|
||||||
vacation status/message and password
|
|
||||||
|
|
||||||
Your users can therefore use this plugin within Squirrelmail to :
|
|
||||||
|
|
||||||
* Turn vacation on/off
|
|
||||||
* Change their email password
|
|
||||||
* Setup forwarding rules
|
|
||||||
|
|
||||||
|
|
||||||
Note, this plugin does not require access to the Postfixadmin database. It communicates with Postfixadmin using the XMLRPC protocol.
|
|
||||||
|
|
||||||
## Notes
|
|
||||||
|
|
||||||
* We now depend upon the Zend Framework (preferably v1.9.x at the time of writing) (Download from http://framework.zend.com/download/latest - the minimal one should be sufficient)
|
|
||||||
* Traffic to the XmlRpc interface needs encrypting (e.g. https) - this is something _you_ need to do
|
|
||||||
* When trying to use the plugin, the user will be prompted to enter their mailbox password - this is necessary to authenticate with the remote XmlRpc? interface
|
|
||||||
|
|
||||||
|
|
||||||
## REQUIREMENTS
|
|
||||||
|
|
||||||
* SquirrelMail 1.4x
|
|
||||||
* PostfixAdmin version 3 or higher.
|
|
||||||
* PHP 5.4+ with XMLRPC support
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -1,51 +0,0 @@
|
|||||||
<?php
|
|
||||||
// vim:ts=4:sw=4:et
|
|
||||||
ini_set('include_path', get_include_path() . ':' . dirname(__FILE__));
|
|
||||||
|
|
||||||
@include_once('Zend/Version.php');
|
|
||||||
if (!class_exists('Zend_Version', false)) {
|
|
||||||
die("Zend Framework not found. Please check the INSTALL File.");
|
|
||||||
}
|
|
||||||
chdir("..");
|
|
||||||
|
|
||||||
|
|
||||||
if (!defined('SM_PATH')) {
|
|
||||||
define('SM_PATH', '../');
|
|
||||||
}
|
|
||||||
|
|
||||||
$config_file = dirname(__FILE__ ) . '/config.php';
|
|
||||||
$validate_file = dirname(__FILE__) . '/../include/validate.php';
|
|
||||||
|
|
||||||
if (!file_exists($config_file)) {
|
|
||||||
die("$config_file is missing");
|
|
||||||
}
|
|
||||||
|
|
||||||
include_once($config_file);
|
|
||||||
include_once(dirname(__FILE__) . '/functions.inc.php');
|
|
||||||
|
|
||||||
if (file_exists($validate_file)) {
|
|
||||||
include_once($validate_file);
|
|
||||||
} else {
|
|
||||||
$validate_file = SM_PATH . '/src/validate.php';
|
|
||||||
if (file_exists($validate_file)) {
|
|
||||||
include_once($validate_file);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
include_once(SM_PATH . 'functions/page_header.php');
|
|
||||||
include_once(SM_PATH . 'functions/display_messages.php');
|
|
||||||
include_once(SM_PATH . 'functions/imap.php');
|
|
||||||
include_if_exists(SM_PATH . 'functions/array.php');
|
|
||||||
if (file_exists(SM_PATH . 'src/load_prefs.php')) {
|
|
||||||
include_once(SM_PATH . 'src/load_prefs.php');
|
|
||||||
} else {
|
|
||||||
include_if_exists(SM_PATH . 'include/load_prefs.php');
|
|
||||||
}
|
|
||||||
// overwrite squirrelmail's content type to utf8...
|
|
||||||
header("Content-Type: text/html; charset=utf8");
|
|
||||||
|
|
||||||
|
|
||||||
//global $VACCONFMESSAGE;
|
|
||||||
bindtextdomain('postfixadmin', dirname(__FILE__) . '/postfixadmin/locale');
|
|
||||||
textdomain('postfixadmin');
|
|
||||||
@ -1,22 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
$CONF = array();
|
|
||||||
$CONF['xmlrpc_url'] = 'http://postfixadmin.local/postfixadmin/xmlrpc.php';
|
|
||||||
|
|
||||||
// Virtual Vacation
|
|
||||||
// If you use virtual vacation for you mailbox users set this to 'true'.
|
|
||||||
// NOTE: Make sure that you install the vacation module!!
|
|
||||||
|
|
||||||
//$AllowVacation = true; // true or false
|
|
||||||
global $AllowVacation;
|
|
||||||
$AllowVacation = true;
|
|
||||||
|
|
||||||
// Change Password
|
|
||||||
// Enables user to change the POP3/IMAP Password.
|
|
||||||
//$AllowChangePass = true; // true or false
|
|
||||||
global $AllowChangePass;
|
|
||||||
$AllowChangePass = true;
|
|
||||||
|
|
||||||
// Minimum password length - set to Zero to not care, otherwise the number of
|
|
||||||
// characters a password must be longer than.
|
|
||||||
$CONF['min_password_length'] = 5;
|
|
||||||
@ -1,20 +0,0 @@
|
|||||||
Squirrelmail PostfixAdmin Plugin for Debian
|
|
||||||
===========================================
|
|
||||||
|
|
||||||
After installing the package, you will need to :
|
|
||||||
|
|
||||||
1) Edit the config.inc.php file to point to the PostfixAdmin server.
|
|
||||||
|
|
||||||
2) Ensure the xmlrpc interface is available and enabled on the Postfixadmin server
|
|
||||||
|
|
||||||
3) Run the squirrelmail-configure script.
|
|
||||||
|
|
||||||
Where to get help
|
|
||||||
=================
|
|
||||||
|
|
||||||
See http://squirrelmail-postfixadmin.palepurple.co.uk
|
|
||||||
|
|
||||||
Try also : david [at] pale purple dot co dot uk
|
|
||||||
|
|
||||||
Or #postfixadmin on irc.freenode.net might be a good bet.
|
|
||||||
|
|
||||||
@ -1,27 +0,0 @@
|
|||||||
squirrelmail-postfixadmin (2.3.0) stable; urgency=low
|
|
||||||
|
|
||||||
* Using XMLRPC backend (no SQL here)
|
|
||||||
|
|
||||||
-- David Goodwin <david.goodwin@palepurple.co.uk> Mon, 01 Feb 2010 09:56:00 +0000
|
|
||||||
|
|
||||||
squirrelmail-postfixadmin (2.2.0) stable; urgency=low
|
|
||||||
|
|
||||||
* Changed DB backend to use prepared statements
|
|
||||||
* Changed vacation handling to match that of Postfixadmin (vacation.active
|
|
||||||
etc)
|
|
||||||
* Changed vacation page to support UTF8
|
|
||||||
|
|
||||||
-- David Goodwin <david.goodwin@palepurple.co.uk> Wed, 20 Aug 2008 15:25:00 +0000
|
|
||||||
|
|
||||||
squirrelmail-postfixadmin (2.1.1-1) stable; urgency=low
|
|
||||||
|
|
||||||
* Add NL language support
|
|
||||||
* Better db error logging (e.g. if wrong mdb2 driver specified etc)
|
|
||||||
|
|
||||||
-- David Goodwin <david.goodwin@palepurple.co.uk> Wed, 12 Dec 2007 16:00:00 +0000
|
|
||||||
|
|
||||||
squirrelmail-postfixadmin (2.1.0-1) stable; urgency=low
|
|
||||||
|
|
||||||
* Initial release.
|
|
||||||
|
|
||||||
-- David Goodwin <david.goodwin@palepurple.co.uk> Thu, 8 Nov 2007 20:00:00 +0000
|
|
||||||
@ -1 +0,0 @@
|
|||||||
/etc/squirrelmail/plugins/postfixadmin-config.php
|
|
||||||
@ -1,19 +0,0 @@
|
|||||||
Source: squirrelmail-postfixadmin
|
|
||||||
Section: mail
|
|
||||||
Priority: optional
|
|
||||||
Maintainer: David Goodwin <david.goodwin@palepurple.co.uk>
|
|
||||||
Standards-Version: 3.6.1
|
|
||||||
|
|
||||||
Package: squirrelmail-postfixadmin
|
|
||||||
Architecture: all
|
|
||||||
Depends: squirrelmail, php-pear
|
|
||||||
Suggests: postfixadmin
|
|
||||||
Description: Plugin for Squirrelmail to integrate with Postfixadmin
|
|
||||||
Postfixadmin is a web based interface for managing mail domains
|
|
||||||
and users. This package integrates Squirrelmail with it.
|
|
||||||
Users can change their password, forwarding and vacation settings
|
|
||||||
from within Squirrelmail when this package is installed, and
|
|
||||||
enabled through the ./squirrelmail-configure command.
|
|
||||||
.
|
|
||||||
For further information see
|
|
||||||
http://squirrelmail-postfixadmin.palepurple.co.uk
|
|
||||||
@ -1,11 +0,0 @@
|
|||||||
This package was debianized by David Goodwin <david@palepurple.co.uk>
|
|
||||||
2007/11/08
|
|
||||||
|
|
||||||
It was downloaded from: http://squirremail-postfixadmin.palepurple.co.uk
|
|
||||||
|
|
||||||
Upstream Author(s): n/a
|
|
||||||
|
|
||||||
Copyright:
|
|
||||||
Copyright (C) 2007+ by David Goodwin <david@palepurple.co.uk>
|
|
||||||
|
|
||||||
License: GPL v2+
|
|
||||||
@ -1,4 +0,0 @@
|
|||||||
LICENSE.txt
|
|
||||||
README
|
|
||||||
INSTALL
|
|
||||||
debian/README.Debian
|
|
||||||
@ -1 +0,0 @@
|
|||||||
squirrelmail-postfixadmin_2.2.0_all.deb mail optional
|
|
||||||
@ -1,3 +0,0 @@
|
|||||||
usr/share/squirrelmail/plugins/postfixadmin
|
|
||||||
usr/share/doc/squirrelmail-postfixadmin
|
|
||||||
etc/squirrelmail/plugins
|
|
||||||
@ -1,5 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
echo "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
|
||||||
echo "WARNING: You need to read /usr/share/doc/squirrelmail-postfixadmin/README.Debian!"
|
|
||||||
echo "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
|
||||||
@ -1,56 +0,0 @@
|
|||||||
#!/usr/bin/make -f
|
|
||||||
# debian/rules makefile for squirrelmail
|
|
||||||
|
|
||||||
# Uncomment this to turn on verbose mode.
|
|
||||||
#export DH_VERBOSE=1
|
|
||||||
|
|
||||||
build: build-stamp
|
|
||||||
build-stamp:
|
|
||||||
dh_testdir
|
|
||||||
|
|
||||||
clean:
|
|
||||||
dh_testdir
|
|
||||||
dh_testroot
|
|
||||||
dh_clean
|
|
||||||
|
|
||||||
install: build
|
|
||||||
$(checkdir)
|
|
||||||
dh_testdir
|
|
||||||
dh_testroot
|
|
||||||
dh_clean -k
|
|
||||||
dh_installdirs
|
|
||||||
dh_install
|
|
||||||
mkdir -p debian/tmp/usr/share/squirrelmail/plugins/postfixadmin
|
|
||||||
cp -a *.php version debian/tmp/usr/share/squirrelmail/plugins/postfixadmin
|
|
||||||
cp -a locale debian/tmp/usr/share/squirrelmail/plugins/postfixadmin
|
|
||||||
cp -a po debian/tmp/usr/share/squirrelmail/plugins/postfixadmin
|
|
||||||
mkdir -p debian/tmp/etc/squirrelmail/plugins/
|
|
||||||
cp -a *.sample debian/tmp/etc/squirrelmail/plugins/postfixadmin-config.php
|
|
||||||
mkdir -p debian/tmp/DEBIAN
|
|
||||||
cp debian/postinst debian/tmp/DEBIAN/postinst
|
|
||||||
chmod 555 debian/tmp/DEBIAN/postinst
|
|
||||||
ln -s /etc/squirrelmail/plugins/postfixadmin-config.php debian/tmp/usr/share/squirrelmail/plugins/postfixadmin/config.php
|
|
||||||
find debian/tmp -name .svn | xargs -r rm -r
|
|
||||||
|
|
||||||
# Build architecture-independent files here.
|
|
||||||
binary-indep: build install
|
|
||||||
dh_testdir
|
|
||||||
dh_testroot
|
|
||||||
dh_installdebconf
|
|
||||||
dh_installdocs -X.svn
|
|
||||||
dh_installexamples
|
|
||||||
dh_installman
|
|
||||||
dh_installcron
|
|
||||||
dh_link
|
|
||||||
dh_compress
|
|
||||||
dh_fixperms -X/var
|
|
||||||
dh_installdeb
|
|
||||||
dh_gencontrol
|
|
||||||
dh_md5sums
|
|
||||||
dh_builddeb
|
|
||||||
|
|
||||||
# Build architecture-dependent files here.
|
|
||||||
binary-arch:
|
|
||||||
|
|
||||||
binary: binary-indep binary-arch
|
|
||||||
.PHONY: build clean binary-indep binary-arch binary install
|
|
||||||
@ -1,96 +0,0 @@
|
|||||||
<?php
|
|
||||||
/**
|
|
||||||
* Postfixadmin (http://postfixadmin.sf.net) integration with Squirrelmail.
|
|
||||||
* See http://squirrelmail-postfixadmin.palepurple.co.uk
|
|
||||||
* @author David Goodwin and many others
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
function do_header() {
|
|
||||||
global $color;
|
|
||||||
displayPageHeader($color, 'None');
|
|
||||||
}
|
|
||||||
|
|
||||||
function do_footer() {
|
|
||||||
echo "</body></html>";
|
|
||||||
}
|
|
||||||
|
|
||||||
function _display_password_form() {
|
|
||||||
bindtextdomain('postfixadmin', SM_PATH . 'plugins/postfixadmin/locale');
|
|
||||||
textdomain('postfixadmin');
|
|
||||||
do_header('Postfixadmin Squirrelmail - Login');
|
|
||||||
echo _('The PostfixAdmin plugin needs your current mailbox password');
|
|
||||||
echo "<form action='' method='post'>";
|
|
||||||
echo _('Password for');
|
|
||||||
echo " " . $_SESSION['username'] . " :";
|
|
||||||
echo "<input type='password' name='password' value=''>";
|
|
||||||
echo "<input type='submit' value='" . _('Submit') . "'></form>";
|
|
||||||
do_footer();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This returns a Zend_XmlRpc_Client instance - unless we can't log you in...
|
|
||||||
*/
|
|
||||||
function get_xmlrpc() {
|
|
||||||
global $CONF;
|
|
||||||
require_once('Zend/XmlRpc/Client.php');
|
|
||||||
$client = new Zend_XmlRpc_Client($CONF['xmlrpc_url']);
|
|
||||||
$http_client = $client->getHttpClient();
|
|
||||||
$http_client->setCookieJar();
|
|
||||||
|
|
||||||
$login_object = $client->getProxy('login');
|
|
||||||
|
|
||||||
if (empty($_SESSION['password'])) {
|
|
||||||
if (empty($_POST['password'])) {
|
|
||||||
_display_password_form();
|
|
||||||
exit(0);
|
|
||||||
} else {
|
|
||||||
try {
|
|
||||||
$success = $login_object->login($_SESSION['username'], $_POST['password']);
|
|
||||||
} catch (Exception $e) {
|
|
||||||
//var_dump($client->getHttpClient()->getLastResponse()->getBody());
|
|
||||||
error_log("Failed to login to xmlrpc instance - " . $e->getMessage());
|
|
||||||
die('Failed to login to xmlrpc instance');
|
|
||||||
}
|
|
||||||
if ($success) {
|
|
||||||
$_SESSION['password'] = $_POST['password'];
|
|
||||||
// reload the current page as a GET request.
|
|
||||||
header("Location: {$_SERVER['REQUEST_URI']}");
|
|
||||||
exit(0);
|
|
||||||
} else {
|
|
||||||
_display_password_form();
|
|
||||||
exit(0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
$success = $login_object->login($_SESSION['username'], $_SESSION['password']);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!$success) {
|
|
||||||
unset($_SESSION['password']);
|
|
||||||
die("Invalid details cached... refresh this page and re-enter your mailbox password");
|
|
||||||
}
|
|
||||||
return $client;
|
|
||||||
}
|
|
||||||
|
|
||||||
function include_if_exists($filename) {
|
|
||||||
if (file_exists($filename)) {
|
|
||||||
include_once($filename);
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
global $optmode;
|
|
||||||
$optmode = 'display';
|
|
||||||
|
|
||||||
//
|
|
||||||
// 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 = filter_var($email, FILTER_VALIDATE_EMAIL);
|
|
||||||
if ($return === false) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
@ -1,25 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
/****************************************************************************************
|
|
||||||
|
|
||||||
Author ......... Florian Kimmerl
|
|
||||||
Contact ........ info@spacekoeln.de
|
|
||||||
Home Site ...... http://www.spacekoeln.de/
|
|
||||||
Program ........ postfixadmin
|
|
||||||
Version ........ 0.3-1.4
|
|
||||||
Purpose ........ Allows you to change your postfixadmin settings within squirrelmail
|
|
||||||
|
|
||||||
/**
|
|
||||||
* index.php
|
|
||||||
*
|
|
||||||
* Copyright (c) 1999-2003 The SquirrelMail Project Team
|
|
||||||
* Licensed under the GNU GPL. For full terms see the file COPYING.
|
|
||||||
*
|
|
||||||
* This file simply takes any attempt to view source files and sends those
|
|
||||||
* people to the login screen. At this point no attempt is made to see if
|
|
||||||
* the person is logged or not.
|
|
||||||
*
|
|
||||||
*
|
|
||||||
****************************************************************************************/
|
|
||||||
|
|
||||||
header("Location: ../../index.php");
|
|
||||||
@ -1,6 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
for f in $(find . -name postfixadmin.po)
|
|
||||||
do
|
|
||||||
msgfmt -o $(dirname $f)/postfixadmin.mo $f
|
|
||||||
done
|
|
||||||
Binary file not shown.
@ -1,132 +0,0 @@
|
|||||||
# SOME DESCRIPTIVE TITLE.
|
|
||||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
|
||||||
# This file is distributed under the same license as the PACKAGE package.
|
|
||||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
|
||||||
#
|
|
||||||
msgid ""
|
|
||||||
msgstr ""
|
|
||||||
"Project-Id-Version: PACKAGE VERSION\n"
|
|
||||||
"POT-Creation-Date: 2004-01-29 17:35+0100\n"
|
|
||||||
"PO-Revision-Date: 2007-07-20 20:46+0100\n"
|
|
||||||
"Last-Translator: Michael Heca <michael.heca@gmail.com>\n"
|
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
|
||||||
"MIME-Version: 1.0\n"
|
|
||||||
"Content-Type: text/plain; charset=iso-8859-2\n"
|
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
|
||||||
|
|
||||||
#: setup.php
|
|
||||||
msgid "Forwarding"
|
|
||||||
msgstr "Pøesmìrování"
|
|
||||||
|
|
||||||
msgid "Here you can create and edit E-Mail forwards."
|
|
||||||
msgstr "Zde mù¾ete vytvoøit a nastavit pøesmìrování"
|
|
||||||
|
|
||||||
msgid "Set an OUT OF OFFICE message or auto responder for your mail."
|
|
||||||
msgstr "Zde mù¾ete nastavit automatickou odpovìd, pokud nebudete k zasti¾ení."
|
|
||||||
|
|
||||||
msgid "Change your mailbox password."
|
|
||||||
msgstr "Zmìnít heslo k Va¹emu e-mailovému úètu"
|
|
||||||
|
|
||||||
#: postfixadmin_changepass.php
|
|
||||||
msgid "Alias"
|
|
||||||
msgstr "Úèet"
|
|
||||||
|
|
||||||
msgid "Change Password"
|
|
||||||
msgstr "Zmìnit heslo"
|
|
||||||
|
|
||||||
msgid "Change your login password"
|
|
||||||
msgstr "Zmìnít heslo k Va¹emu e-mailovému úètu"
|
|
||||||
|
|
||||||
#: postfixadmin_forward.php
|
|
||||||
msgid "Edit Alias"
|
|
||||||
msgstr "Editace adresy pro pøesmìrování"
|
|
||||||
|
|
||||||
msgid "Edit an alias* for your domain.<br />One entry per line."
|
|
||||||
msgstr "Editace pøesmìrování pro Vá¹ úèet. <br/> Ka¾dá adresa na novém øádku."
|
|
||||||
|
|
||||||
msgid "The email address that you have entered is not valid:"
|
|
||||||
msgstr "Zadaná e-mailová adresa je chybná:"
|
|
||||||
|
|
||||||
msgid "Unable to locate alias!"
|
|
||||||
msgstr "Neni mo¾né nalézt úèet!"
|
|
||||||
|
|
||||||
msgid "Unable to modify the alias!"
|
|
||||||
msgstr "Není mo¾né zmìnit úèet!"
|
|
||||||
|
|
||||||
msgid "*Additional forward-aliase always recieve messages BBC!"
|
|
||||||
msgstr "Dal¹í aliasy dostanou e-mail jako BBC!"
|
|
||||||
|
|
||||||
msgid "Alias successfully changend!"
|
|
||||||
msgstr "Pøesmìrování bylo zmìnìno!"
|
|
||||||
|
|
||||||
msgid "To remove an alias, simply delete it's line from the text box."
|
|
||||||
msgstr "Pro odstranení pøesmìrování sma¾te v¹echny øádky v textovém boxu."
|
|
||||||
|
|
||||||
#: postfixadmin_vacation.php
|
|
||||||
msgid "Auto Response"
|
|
||||||
msgstr "Automatická odpovìï"
|
|
||||||
|
|
||||||
msgid "Going Away"
|
|
||||||
msgstr "Jsem mimo"
|
|
||||||
|
|
||||||
msgid "Coming Back"
|
|
||||||
msgstr "Jsem zpìt"
|
|
||||||
|
|
||||||
msgid "Options"
|
|
||||||
msgstr "Nastavení"
|
|
||||||
|
|
||||||
msgid "Out of Office"
|
|
||||||
msgstr "Mimo kanceláø"
|
|
||||||
|
|
||||||
msgid "Subject"
|
|
||||||
msgstr "Pøedmìt"
|
|
||||||
|
|
||||||
msgid "Body"
|
|
||||||
msgstr "Tìlo mailu"
|
|
||||||
|
|
||||||
msgid "Your auto response has been removed!"
|
|
||||||
msgstr "Va¹e automatická odpovìï byla odstranìna!"
|
|
||||||
|
|
||||||
msgid "Your auto response has been set!"
|
|
||||||
msgstr "Va¹e automatická odpovìï byla nastavena!"
|
|
||||||
|
|
||||||
msgid "You already have an auto response configured!"
|
|
||||||
msgstr "U¾ máte nastavenu automatickou odpovìï!"
|
|
||||||
|
|
||||||
#: postfixadmin_changepass.php:81
|
|
||||||
#: postfixadmin_changepass.php:87
|
|
||||||
msgid "The passwords that you supplied don't match!<br />Or are empty!"
|
|
||||||
msgstr "Zadaná hesla nejsou stejná a nebo jsou prázdná!"
|
|
||||||
|
|
||||||
#: postfixadmin_forward.php:70
|
|
||||||
#: postfixadmin_forward.php:152
|
|
||||||
msgid "To"
|
|
||||||
msgstr "Komu"
|
|
||||||
|
|
||||||
#: postfixadmin_changepass.php:101
|
|
||||||
msgid "Unable to change your password!"
|
|
||||||
msgstr "Není mo¾né zmìnit heslo!"
|
|
||||||
|
|
||||||
#: postfixadmin_changepass.php:75
|
|
||||||
msgid "You didn't supply your current password!"
|
|
||||||
msgstr "Stávající heslo neodpovídá!"
|
|
||||||
|
|
||||||
#: postfixadmin_changepass.php:96
|
|
||||||
msgid "Your password has been changed!"
|
|
||||||
msgstr "Va¹e heslo bylo zmìnìno!"
|
|
||||||
|
|
||||||
msgid "Password current"
|
|
||||||
msgstr "Stávající heslo"
|
|
||||||
|
|
||||||
msgid "Password new"
|
|
||||||
msgstr "Nové heslo"
|
|
||||||
|
|
||||||
msgid "Password new again"
|
|
||||||
msgstr "Nové heslo znovu"
|
|
||||||
|
|
||||||
msgid "Please sign out and log back again with your new password!"
|
|
||||||
msgstr "Prosím odhla¹te se a pøihla¹te se s novým heslem!"
|
|
||||||
|
|
||||||
msgid "I will be away from <date> until <date>. For urgent matters you can contact <contact person>."
|
|
||||||
msgstr "Nebudy k zasti¾ení od <date> do <date>. Pro naléhané po¾adavky prosím kontaktujte <contact person>."
|
|
||||||
|
|
||||||
Binary file not shown.
@ -1,127 +0,0 @@
|
|||||||
# Danish translation for Squirrelmail Plugin Postfixadmin.
|
|
||||||
# Copyright (C) 2004 Florian Kimmerl, 2007 David Goodwin
|
|
||||||
# This file is distributed under the same license as the Squirrelmail Plugin Postfixadmin package.
|
|
||||||
# Jesper R. Meyer <jrm@upthere.dk>, 2007.
|
|
||||||
#
|
|
||||||
#, fuzzy
|
|
||||||
msgid ""
|
|
||||||
msgstr ""
|
|
||||||
"Project-Id-Version: 0.4.3\n"
|
|
||||||
"POT-Creation-Date: 2004-01-29 17:35+0100\n"
|
|
||||||
"PO-Revision-Date: 2007-11-09 16:07+0100\n"
|
|
||||||
"Last-Translator: JESPER MEYER <jrm@upthere.dk>\n"
|
|
||||||
"Language-Team: DANISH <LL@li.org>\n"
|
|
||||||
"MIME-Version: 1.0\n"
|
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
|
||||||
|
|
||||||
#: setup.php
|
|
||||||
msgid "Forwarding"
|
|
||||||
msgstr "Videresending"
|
|
||||||
|
|
||||||
msgid "Here you can create and edit E-Mail forwards."
|
|
||||||
msgstr "Her kan du oprette og ændre email-videresendinger."
|
|
||||||
|
|
||||||
msgid "Set an OUT OF OFFICE message or auto responder for your mail."
|
|
||||||
msgstr "Tilføj en 'ikke tilstede' besked eller et autosvar til din emailadresse."
|
|
||||||
|
|
||||||
msgid "Change your mailbox password."
|
|
||||||
msgstr "Ændre adgangskoden til din postboks"
|
|
||||||
|
|
||||||
#: postfixadmin_changepass.php
|
|
||||||
msgid "Alias"
|
|
||||||
msgstr "Alias"
|
|
||||||
|
|
||||||
msgid "Change Password"
|
|
||||||
msgstr "Ændre adgangskode"
|
|
||||||
|
|
||||||
msgid "Change your login password"
|
|
||||||
msgstr "Ændre din login-adgangskode"
|
|
||||||
|
|
||||||
#: postfixadmin_forward.php
|
|
||||||
msgid "Edit Alias"
|
|
||||||
msgstr "Rediger alias"
|
|
||||||
|
|
||||||
msgid "Edit an alias* for your domain.<br />One entry per line."
|
|
||||||
msgstr "Rediger et alias* for dit domæne.<br />En modtager pr. linje."
|
|
||||||
|
|
||||||
msgid "The email address that you have entered is not valid:"
|
|
||||||
msgstr "Emailadressen du angav er ugyldig"
|
|
||||||
|
|
||||||
msgid "Unable to locate alias!"
|
|
||||||
msgstr "Aliaset eksistere ikke!"
|
|
||||||
|
|
||||||
msgid "Unable to modify the alias!"
|
|
||||||
msgstr "Kunne ikke ændre aliaset!"
|
|
||||||
|
|
||||||
msgid "*Additional forward-aliase always recieve messages BBC!"
|
|
||||||
msgstr "*Eksta vidersendingsalias modtager altid meddelelser BCC!"
|
|
||||||
|
|
||||||
msgid "Alias successfully changend!"
|
|
||||||
msgstr "Alias ændret!"
|
|
||||||
|
|
||||||
#: postfixadmin_vacation.php
|
|
||||||
msgid "Auto Response"
|
|
||||||
msgstr "Autosvar"
|
|
||||||
|
|
||||||
msgid "Going Away"
|
|
||||||
msgstr "Tager afsted"
|
|
||||||
|
|
||||||
msgid "Coming Back"
|
|
||||||
msgstr "Kommer tilbage"
|
|
||||||
|
|
||||||
msgid "Options"
|
|
||||||
msgstr "Indstillinger"
|
|
||||||
|
|
||||||
msgid "Out of Office"
|
|
||||||
msgstr "Ikke tilstede"
|
|
||||||
|
|
||||||
msgid "Subject"
|
|
||||||
msgstr "Emne"
|
|
||||||
|
|
||||||
msgid "Body"
|
|
||||||
msgstr "Meddelelse"
|
|
||||||
|
|
||||||
msgid "Your auto response has been removed!"
|
|
||||||
msgstr "Autosvar er fjernet!"
|
|
||||||
|
|
||||||
msgid "Your auto response has been set!"
|
|
||||||
msgstr "Autosvar er aktiveret!"
|
|
||||||
|
|
||||||
msgid "You already have an auto response configured!"
|
|
||||||
msgstr "Du har allerede et autosvar indstillet!"
|
|
||||||
|
|
||||||
#: postfixadmin_changepass.php:81 postfixadmin_changepass.php:87
|
|
||||||
msgid "The passwords that you supplied don't match!<br />Or are empty!"
|
|
||||||
msgstr "Adgangskoderne er ikke ens!<br />Eller er tomme!"
|
|
||||||
|
|
||||||
#: postfixadmin_forward.php:70 postfixadmin_forward.php:152
|
|
||||||
msgid "To"
|
|
||||||
msgstr "Til"
|
|
||||||
|
|
||||||
#: postfixadmin_changepass.php:101
|
|
||||||
msgid "Unable to change your password!"
|
|
||||||
msgstr "Kan ikke ændre adgangskoden!"
|
|
||||||
|
|
||||||
#: postfixadmin_changepass.php:75
|
|
||||||
msgid "You didn't supply your current password!"
|
|
||||||
msgstr "Du glemte at skrive din nuværende adgangskode!"
|
|
||||||
|
|
||||||
#: postfixadmin_changepass.php:96
|
|
||||||
msgid "Your password has been changed!"
|
|
||||||
msgstr "Din adgangskode er ændret!"
|
|
||||||
|
|
||||||
msgid "Password current"
|
|
||||||
msgstr "Nuværende adgangskode"
|
|
||||||
|
|
||||||
msgid "Password new"
|
|
||||||
msgstr "Ny adgangskode"
|
|
||||||
|
|
||||||
msgid "Password new again"
|
|
||||||
msgstr "Ny adgangskode (igen)"
|
|
||||||
|
|
||||||
msgid "Please sign out and log back again with your new password!"
|
|
||||||
msgstr "Log af og log ind igen med din nye adgangskode!"
|
|
||||||
|
|
||||||
msgid "I will be away from <date> until <date>. For urgent matters you can contact <contact person>."
|
|
||||||
msgstr "Jeg er ikke tilstede i perioden <dato> til <dato>. I nødstilfælde kan <kontaktperson> kontaktes."
|
|
||||||
Binary file not shown.
@ -1,127 +0,0 @@
|
|||||||
# postfixadmin - Plugin for Squirrelmail.
|
|
||||||
# Copyright (C) 2004 FLORIAN KIMMERL
|
|
||||||
# This file is distributed under the same license as the PACKAGE package.
|
|
||||||
# Florian Kimmerl <info@spacekoeln.de>, 2004.
|
|
||||||
#
|
|
||||||
#, fuzzy
|
|
||||||
msgid ""
|
|
||||||
msgstr ""
|
|
||||||
"Project-Id-Version: 0.3-1.4\n"
|
|
||||||
"POT-Creation-Date: 2004-01-28 16:32+0100\n"
|
|
||||||
"PO-Revision-Date: 2004-01-28 16:32+0100\n"
|
|
||||||
"Last-Translator: FLORIAN KIMMERL <info@spacekoeln.de>\n"
|
|
||||||
"Language-Team: GERMAN <LL@li.org>\n"
|
|
||||||
"MIME-Version: 1.0\n"
|
|
||||||
"Content-Type: text/plain; charset=ISO-8859-1\n"
|
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
|
||||||
|
|
||||||
#: setup.php
|
|
||||||
msgid "Forwarding"
|
|
||||||
msgstr "Weiterleitungen"
|
|
||||||
|
|
||||||
msgid "Here you can create and edit E-Mail forwards."
|
|
||||||
msgstr "Hier können Sie E-Mail-Weiterleitungen erstellen und bearbeiten."
|
|
||||||
|
|
||||||
msgid "Set an OUT OF OFFICE message or auto responder for your mail."
|
|
||||||
msgstr "Hier können Sie den Abwesenheits-Assistenten konfigurieren."
|
|
||||||
|
|
||||||
msgid "Change your mailbox password."
|
|
||||||
msgstr "Hier können Sie Passwort ändern. Nach der Änderung müssen Sie sich neu anmelden!"
|
|
||||||
|
|
||||||
#: postfixadmin_changepass.php
|
|
||||||
msgid "Alias"
|
|
||||||
msgstr "E-Mail"
|
|
||||||
|
|
||||||
msgid "Change Password"
|
|
||||||
msgstr "Passwort ändern"
|
|
||||||
|
|
||||||
msgid "Change your login password"
|
|
||||||
msgstr "Ändern Sie Ihr Zugangspasswort für POP3/IMAP"
|
|
||||||
|
|
||||||
#: postfixadmin_forward.php
|
|
||||||
msgid "Edit Alias"
|
|
||||||
msgstr "E-Mail Weiterleitungen bearbeiten"
|
|
||||||
|
|
||||||
msgid "Edit an alias* for your domain.<br />One entry per line."
|
|
||||||
msgstr "Bearbeiten Sie hier Ihre E-Mail Weiterleitungen*.<br />Ein Eintrag pro Zeile."
|
|
||||||
|
|
||||||
msgid "The email address that you have entered is not valid:"
|
|
||||||
msgstr "Die angegebene E-Mail-Adresse ist ungültig:"
|
|
||||||
|
|
||||||
msgid "Unable to locate alias!"
|
|
||||||
msgstr "Ihre Weiterleitungen können nicht angefordert werden! Versuchen Sie es später erneut."
|
|
||||||
|
|
||||||
msgid "Unable to modify the alias!"
|
|
||||||
msgstr "Ihre Weiterleitungen können nicht modifiziert werden! Versuchen Sie es später erneut."
|
|
||||||
|
|
||||||
msgid "*Additional forward-aliase always recieve messages BBC!"
|
|
||||||
msgstr "*Zusätzliche Weiterleitungen erhalten alle Nachrichten als Kopie (BCC)!"
|
|
||||||
|
|
||||||
msgid "Alias successfully changend!"
|
|
||||||
msgstr "Weiterleitungen wurden erfolgreich geändert!"
|
|
||||||
|
|
||||||
#: postfixadmin_vacation.php
|
|
||||||
msgid "Auto Response"
|
|
||||||
msgstr "Abwesenheits-Assistent"
|
|
||||||
|
|
||||||
msgid "Going Away"
|
|
||||||
msgstr "Ich bin weg"
|
|
||||||
|
|
||||||
msgid "Coming Back"
|
|
||||||
msgstr "Ich bin zurück"
|
|
||||||
|
|
||||||
msgid "Options"
|
|
||||||
msgstr "Optionen"
|
|
||||||
|
|
||||||
msgid "Out of Office"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
msgid "Subject"
|
|
||||||
msgstr "Betreff"
|
|
||||||
|
|
||||||
msgid "Body"
|
|
||||||
msgstr "Nachrichtentext"
|
|
||||||
|
|
||||||
msgid "Your auto response has been removed!"
|
|
||||||
msgstr "Iher Abwesenheits-Nachricht wurde deaktiviert!"
|
|
||||||
|
|
||||||
msgid "Your auto response has been set!"
|
|
||||||
msgstr "Ihre Abwesenheits-Nachricht wurde aktiviert!"
|
|
||||||
|
|
||||||
msgid "You already have an auto response configured!"
|
|
||||||
msgstr "Ihre Abwesenheits-Nachricht ist bereits aktiviert!"
|
|
||||||
|
|
||||||
msgid "back"
|
|
||||||
msgstr "zurück"
|
|
||||||
|
|
||||||
#: postfixadmin_changepass.php:81 postfixadmin_changepass.php:87
|
|
||||||
msgid "The passwords that you supplied don't match!<br />Or are empty!"
|
|
||||||
msgstr "Die beiden neuen Passwörter stimmen nicht überein!<br />Oder die Felder wurden nicht ausgefüllt!"
|
|
||||||
|
|
||||||
#: postfixadmin_forward.php:70 postfixadmin_forward.php:152
|
|
||||||
msgid "To"
|
|
||||||
msgstr "An"
|
|
||||||
|
|
||||||
#: postfixadmin_changepass.php:101
|
|
||||||
msgid "Unable to change your password!"
|
|
||||||
msgstr "Ihr Passwort kann nicht geändert werden!"
|
|
||||||
|
|
||||||
#: postfixadmin_changepass.php:75
|
|
||||||
msgid "You didn't supply your current password!"
|
|
||||||
msgstr "Ihr aktuelles Passwort wurde nicht angegeben oder ist falsch!"
|
|
||||||
|
|
||||||
#: postfixadmin_changepass.php:96
|
|
||||||
msgid "Your password has been changed!"
|
|
||||||
msgstr "Ihr Passwort wurde ergolgreich geändert!"
|
|
||||||
|
|
||||||
msgid "Password current"
|
|
||||||
msgstr "Passwort aktuell"
|
|
||||||
|
|
||||||
msgid "Password new"
|
|
||||||
msgstr "Passwort neu"
|
|
||||||
|
|
||||||
msgid "Password new again"
|
|
||||||
msgstr "Passwort neu nochmal"
|
|
||||||
|
|
||||||
msgid "Please sign out and log back again with your new password!"
|
|
||||||
msgstr "Bitte melden Sie sich hier ab und loggen sich mit Ihrem neuen Passwort erneut ein! "
|
|
||||||
Binary file not shown.
@ -1,135 +0,0 @@
|
|||||||
# postfixadmin - Plugin for Squirrelmail.
|
|
||||||
# Copyright (C) 2004 FLORIAN KIMMERL
|
|
||||||
# This file is distributed under the same license as the PACKAGE package.
|
|
||||||
# Florian Kimmerl <info@spacekoeln.de>, 2004.
|
|
||||||
#
|
|
||||||
#, fuzzy
|
|
||||||
msgid ""
|
|
||||||
msgstr ""
|
|
||||||
"Project-Id-Version: 0.3-1.4\n"
|
|
||||||
"POT-Creation-Date: 2004-01-28 16:32+0100\n"
|
|
||||||
"PO-Revision-Date: 2004-01-28 16:32+0100\n"
|
|
||||||
"Last-Translator: FLORIAN KIMMERL <info@spacekoeln.de>\n"
|
|
||||||
"Language-Team: HUNGARIAN <LL@li.org>\n"
|
|
||||||
"MIME-Version: 1.0\n"
|
|
||||||
"Content-Type: text/plain; charset=ISO-8859-2\n"
|
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
|
||||||
|
|
||||||
#: setup.php
|
|
||||||
msgid "Forwarding"
|
|
||||||
msgstr "Levéltovábbítás"
|
|
||||||
|
|
||||||
msgid "Here you can create and edit E-Mail forwards."
|
|
||||||
msgstr "Itt tudod létrehozni és szerkeszteni az E-mail továbbításokat."
|
|
||||||
|
|
||||||
msgid "Set an OUT OF OFFICE message or auto responder for your mail."
|
|
||||||
msgstr "Itt lehet beállítani az automatikus válasz levél szövegét, ha az ember távol van."
|
|
||||||
|
|
||||||
msgid "Change your mailbox password."
|
|
||||||
msgstr "Itt tudod megváltoztatni a belépéshez szükséges jelszót."
|
|
||||||
|
|
||||||
#: postfixadmin_changepass.php
|
|
||||||
msgid "Alias"
|
|
||||||
msgstr "E-mail"
|
|
||||||
|
|
||||||
msgid "Change Password"
|
|
||||||
msgstr "Jelszó megváltoztatása"
|
|
||||||
|
|
||||||
msgid "Change your login password"
|
|
||||||
msgstr "Bejelentkezési jelszó megváltoztatása"
|
|
||||||
|
|
||||||
#: postfixadmin_forward.php
|
|
||||||
msgid "Edit Forward"
|
|
||||||
msgstr "Levéltovábbítás szerkesztése"
|
|
||||||
|
|
||||||
msgid "Edit Alias"
|
|
||||||
msgstr "Levéltovábbítás szerkesztése"
|
|
||||||
|
|
||||||
msgid "The email address that you have entered is not valid:"
|
|
||||||
msgstr "Az E-mail cím amit beírtál hibás:"
|
|
||||||
|
|
||||||
msgid "Unable to locate alias!"
|
|
||||||
msgstr "Hiba az e-mail címmel."
|
|
||||||
|
|
||||||
msgid "Unable to modify the alias!"
|
|
||||||
msgstr "A módosítás sikertelen!"
|
|
||||||
|
|
||||||
msgid "Alias successfully changed!"
|
|
||||||
msgstr "A módosítás sikeres!"
|
|
||||||
|
|
||||||
#: postfixadmin_vacation.php
|
|
||||||
msgid "Auto Response"
|
|
||||||
msgstr "Automatikus válasz"
|
|
||||||
|
|
||||||
msgid "Going Away"
|
|
||||||
msgstr "Házonkívül vagyok"
|
|
||||||
|
|
||||||
msgid "Coming Back"
|
|
||||||
msgstr "Visszajöttem"
|
|
||||||
|
|
||||||
msgid "Options"
|
|
||||||
msgstr "Opciók"
|
|
||||||
|
|
||||||
msgid "Out of Office"
|
|
||||||
msgstr "Házonkívül"
|
|
||||||
|
|
||||||
msgid "Subject"
|
|
||||||
msgstr "Tárgy"
|
|
||||||
|
|
||||||
msgid "Body"
|
|
||||||
msgstr "Levéltörzs"
|
|
||||||
|
|
||||||
msgid "Your auto response has been removed!"
|
|
||||||
msgstr "Az automatikus válasz törölve lett!"
|
|
||||||
|
|
||||||
msgid "Your auto response has been set!"
|
|
||||||
msgstr "Az automatikus válasz be lett állítva!"
|
|
||||||
|
|
||||||
msgid "You already have an auto response configured!"
|
|
||||||
msgstr "Már létezik egy automatikus válasz!"
|
|
||||||
|
|
||||||
#: postfixadmin_changepass.php:81 postfixadmin_changepass.php:87
|
|
||||||
msgid "The passwords that you supplied don't match!<br />Or are empty!"
|
|
||||||
msgstr "A jelszavak nem egyeznek!<br />Vagy üresen hagytad a mezõket!"
|
|
||||||
|
|
||||||
#: postfixadmin_changepass.php:101
|
|
||||||
msgid "Unable to change your password!"
|
|
||||||
msgstr "A jelszó megváltoztatása sikertelen!"
|
|
||||||
|
|
||||||
#: postfixadmin_changepass.php:75
|
|
||||||
msgid "You didn't supply your current password!"
|
|
||||||
msgstr "Az aktuális jelszó nem megfelelõ!"
|
|
||||||
|
|
||||||
#: postfixadmin_changepass.php:96
|
|
||||||
msgid "Your password has been changed!"
|
|
||||||
msgstr "A jelszó változtatása sikeres volt!"
|
|
||||||
|
|
||||||
msgid "Password current"
|
|
||||||
msgstr "Aktuális jelszó"
|
|
||||||
|
|
||||||
msgid "Password new"
|
|
||||||
msgstr "Új jelszó"
|
|
||||||
|
|
||||||
msgid "Password new again"
|
|
||||||
msgstr "Új jelszó mégegyszer"
|
|
||||||
|
|
||||||
msgid "Please sign out and log back again with your new password!"
|
|
||||||
msgstr "Kérjük, jelentkezzen ki, majd újra be az új jelszavával!"
|
|
||||||
|
|
||||||
msgid "I will be away from <date> until <date>. For urgent matters you can contact <contact person>."
|
|
||||||
msgstr "Házonkívül leszek <date> és <date> között. Sürgõs esetben értesítendõ: <contact person>."
|
|
||||||
|
|
||||||
msgid "One copy always goes to"
|
|
||||||
msgstr "Egy másolat mindig ide"
|
|
||||||
|
|
||||||
msgid "Another copy also goes to"
|
|
||||||
msgstr "További másolatok ide"
|
|
||||||
|
|
||||||
msgid "Enter an email address (or addresses) where you would like an additional copy of messages addressed to you sent.<br> Enter only one address per line."
|
|
||||||
msgstr "Sorolja fel azokat az e-mail címeket, amelyekre az Önhöz érkezõ leveleket továbbítani szeretné.<br>Soronként csak egy címet adjon meg!"
|
|
||||||
|
|
||||||
msgid "A copy of each message will go to both your mailbox and the forwarded address(es)."
|
|
||||||
msgstr "Minden Önnek címzett levél meg fog érkezni a saját postafiókjába és a továbbított e-mail címekre is."
|
|
||||||
|
|
||||||
msgid "To remove a Forward, simply delete its line from the text box."
|
|
||||||
msgstr "Ahhoz, hogy töröljön egy továbbítást, ki kell törölnie az adott sort a felsorolásból."
|
|
||||||
@ -1,129 +0,0 @@
|
|||||||
# SOME DESCRIPTIVE TITLE.
|
|
||||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
|
||||||
# This file is distributed under the same license as the PACKAGE package.
|
|
||||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
|
||||||
#
|
|
||||||
msgid ""
|
|
||||||
msgstr ""
|
|
||||||
"Project-Id-Version: PACKAGE VERSION\n"
|
|
||||||
"POT-Creation-Date: 2004-01-29 17:35+0100\n"
|
|
||||||
"PO-Revision-Date: 2010-02-19 11:30+0100\n"
|
|
||||||
"Last-Translator: valentina <ruggiolona@tiscali.it>\n"
|
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
|
||||||
"MIME-Version: 1.0\n"
|
|
||||||
"Content-Type: text/plain; charset=utf-8\n"
|
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
|
||||||
|
|
||||||
#: setup.php
|
|
||||||
msgid "Forwarding"
|
|
||||||
msgstr "Inoltro E-MAIL"
|
|
||||||
|
|
||||||
msgid "Here you can create and edit E-Mail forwards."
|
|
||||||
msgstr "Qui puoi creare e modificare l'inoltro dell' E-MAIL."
|
|
||||||
|
|
||||||
msgid "Set an OUT OF OFFICE message or auto responder for your mail."
|
|
||||||
msgstr "Imposta un messaggio OUT OF OFFICE / ASSENTE o un risponditore automatico per la tua mail."
|
|
||||||
|
|
||||||
msgid "Change your mailbox password."
|
|
||||||
msgstr "Modifica la tua password di accesso alla mail"
|
|
||||||
|
|
||||||
#: postfixadmin_changepass.php
|
|
||||||
msgid "Alias"
|
|
||||||
msgstr "Alias"
|
|
||||||
|
|
||||||
msgid "Change Password"
|
|
||||||
msgstr "Modifica password"
|
|
||||||
|
|
||||||
msgid "Change your login password"
|
|
||||||
msgstr "Modifica la tua password di accesso"
|
|
||||||
|
|
||||||
#: postfixadmin_forward.php
|
|
||||||
msgid "Edit Alias"
|
|
||||||
msgstr "Modifica Alias"
|
|
||||||
|
|
||||||
msgid "Edit an alias* for your domain.<br />One entry per line."
|
|
||||||
msgstr "Modifica un Alias per il tuo dominio.<br />Un record per linea."
|
|
||||||
|
|
||||||
msgid "The email address that you have entered is not valid:"
|
|
||||||
msgstr "L'indirizzo email che hai inserito non è corretto:"
|
|
||||||
|
|
||||||
msgid "Unable to locate alias!"
|
|
||||||
msgstr "Impossibile trovare l'alias!"
|
|
||||||
|
|
||||||
msgid "Unable to modify the alias!"
|
|
||||||
msgstr "Impossibile modificare l'alias!"
|
|
||||||
|
|
||||||
msgid "*Additional forward-aliase always recieve messages BBC!"
|
|
||||||
msgstr "* L'inoltro ad un alias aggiuntivo comporta l'invio del messaggio in BCC!"
|
|
||||||
|
|
||||||
msgid "Alias successfully changend!"
|
|
||||||
msgstr "Alias modificato correttamente!"
|
|
||||||
|
|
||||||
#: postfixadmin_vacation.php
|
|
||||||
msgid "Auto Response"
|
|
||||||
msgstr "Risponditore automatico"
|
|
||||||
|
|
||||||
msgid "Going Away"
|
|
||||||
msgstr "Going Away"
|
|
||||||
|
|
||||||
msgid "Coming Back"
|
|
||||||
msgstr "Coming Back"
|
|
||||||
|
|
||||||
msgid "Options"
|
|
||||||
msgstr "Opzioni"
|
|
||||||
|
|
||||||
msgid "Out of Office"
|
|
||||||
msgstr "Out of Office/Assente"
|
|
||||||
|
|
||||||
msgid "Subject"
|
|
||||||
msgstr "Oggetto"
|
|
||||||
|
|
||||||
msgid "Body"
|
|
||||||
msgstr "Messaggio"
|
|
||||||
|
|
||||||
msgid "Your auto response has been removed!"
|
|
||||||
msgstr "Il risponditore automatico è stato disattivato!"
|
|
||||||
|
|
||||||
msgid "Your auto response has been set!"
|
|
||||||
msgstr "Il risponditore automatico è stato configurato!"
|
|
||||||
|
|
||||||
msgid "You already have an auto response configured!"
|
|
||||||
msgstr "Hai gia configurato il risponditore automatico !"
|
|
||||||
|
|
||||||
#: postfixadmin_changepass.php:81
|
|
||||||
#: postfixadmin_changepass.php:87
|
|
||||||
msgid "The passwords that you supplied don't match!<br />Or are empty!"
|
|
||||||
msgstr "Le password inserite non coincidono!<br />O i campi sono vuoti!"
|
|
||||||
|
|
||||||
#: postfixadmin_forward.php:70
|
|
||||||
#: postfixadmin_forward.php:152
|
|
||||||
msgid "To"
|
|
||||||
msgstr "A"
|
|
||||||
|
|
||||||
#: postfixadmin_changepass.php:101
|
|
||||||
msgid "Unable to change your password!"
|
|
||||||
msgstr "Impossibile modificare la password"
|
|
||||||
|
|
||||||
#: postfixadmin_changepass.php:75
|
|
||||||
msgid "You didn't supply your current password!"
|
|
||||||
msgstr "Non hai indicato la password attuale!"
|
|
||||||
|
|
||||||
#: postfixadmin_changepass.php:96
|
|
||||||
msgid "Your password has been changed!"
|
|
||||||
msgstr "La tua password è stata modificata!"
|
|
||||||
|
|
||||||
msgid "Password current"
|
|
||||||
msgstr "Password attuale"
|
|
||||||
|
|
||||||
msgid "Password new"
|
|
||||||
msgstr "Nuova password"
|
|
||||||
|
|
||||||
msgid "Password new again"
|
|
||||||
msgstr "Insierisci nuovamente la nuova password"
|
|
||||||
|
|
||||||
msgid "Please sign out and log back again with your new password!"
|
|
||||||
msgstr "Per favore fai log out e riaccedi alla tua mail con la nuova password!"
|
|
||||||
|
|
||||||
msgid "I will be away from <date> until <date>. For urgent matters you can contact <contact person>."
|
|
||||||
msgstr "Mi dispiace sarò assente dal <date> al <date>. Per richieste urgenti vi prego di contattare <nome e indirizzo email>. I will be away from <date> until <date>. For urgent matters you can contact <contact person>."
|
|
||||||
|
|
||||||
Binary file not shown.
@ -1,131 +0,0 @@
|
|||||||
# SOME DESCRIPTIVE TITLE.
|
|
||||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
|
||||||
# This file is distributed under the same license as the PACKAGE package.
|
|
||||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
|
||||||
#
|
|
||||||
#, fuzzy
|
|
||||||
msgid ""
|
|
||||||
msgstr ""
|
|
||||||
"Project-Id-Version: postfixadmin-squirrelmail 2.1.0\n"
|
|
||||||
"POT-Creation-Date: 2007-11-16 17:35+0100\n"
|
|
||||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
|
||||||
"Last-Translator: Johan <johan@double-l.nl>\n"
|
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
|
||||||
"MIME-Version: 1.0\n"
|
|
||||||
"Content-Type: text/plain; charset=iso-8859-2\n"
|
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
|
||||||
|
|
||||||
#: setup.php
|
|
||||||
msgid "Forwarding"
|
|
||||||
msgstr "Doorsturen"
|
|
||||||
|
|
||||||
msgid "Here you can create and edit E-Mail forwards."
|
|
||||||
msgstr "Hier kunt u uw doorstuur adres bewerken"
|
|
||||||
|
|
||||||
msgid "Set an OUT OF OFFICE message or auto responder for your mail."
|
|
||||||
msgstr "Configureer hier uw automatisch beantwoorden"
|
|
||||||
|
|
||||||
msgid "Change your mailbox password."
|
|
||||||
msgstr "Verander uw wachtwoord"
|
|
||||||
|
|
||||||
#: postfixadmin_changepass.php
|
|
||||||
msgid "Alias"
|
|
||||||
msgstr "Alias"
|
|
||||||
|
|
||||||
msgid "Change Password"
|
|
||||||
msgstr "Verander wachtwoord"
|
|
||||||
|
|
||||||
msgid "Change your login password"
|
|
||||||
msgstr "Verander uw login wachtwoord"
|
|
||||||
|
|
||||||
#: postfixadmin_forward.php
|
|
||||||
msgid "Edit Forwards"
|
|
||||||
msgstr "Bewerk aliassen"
|
|
||||||
|
|
||||||
msgid "Edit an alias* for your email address.<br />One entry per line."
|
|
||||||
msgstr "Bewerk uw alias(sen) voor uw emailadres.<br />1 alias per regel."
|
|
||||||
|
|
||||||
msgid "The email address that you have entered is not valid:"
|
|
||||||
msgstr "Het ingevoerde adres is geen geldig adres"
|
|
||||||
|
|
||||||
msgid "Unable to locate alias!"
|
|
||||||
msgstr "Niet in staat opgeven alias te vinden!"
|
|
||||||
|
|
||||||
msgid "Unable to modify the alias!"
|
|
||||||
msgstr "Niet in staat de alias aan te passen"
|
|
||||||
|
|
||||||
msgid "*Additional forward-aliases always receive messages BBC!"
|
|
||||||
msgstr "Aliassen ontvangen altijd per BCC! "
|
|
||||||
|
|
||||||
msgid "To remove an alias, simply delete its line from the text box."
|
|
||||||
msgstr "Verwijder de regel om de alias(sen) te verwijderen."
|
|
||||||
|
|
||||||
msgid "Alias successfully changed!"
|
|
||||||
msgstr "Alias succesvol aangepast"
|
|
||||||
|
|
||||||
#: postfixadmin_vacation.php
|
|
||||||
msgid "Auto Response"
|
|
||||||
msgstr "Automatisch beantwoorden"
|
|
||||||
|
|
||||||
msgid "Going Away"
|
|
||||||
msgstr "Ik ben weg, schakel Out of Office IN"
|
|
||||||
|
|
||||||
msgid "Coming Back"
|
|
||||||
msgstr "Ik ben terug, schakel Out of Office UIT"
|
|
||||||
|
|
||||||
msgid "Options"
|
|
||||||
msgstr "Opties"
|
|
||||||
|
|
||||||
msgid "Out of Office"
|
|
||||||
msgstr "Out of office"
|
|
||||||
|
|
||||||
msgid "Subject"
|
|
||||||
msgstr "Onderwerp"
|
|
||||||
|
|
||||||
msgid "Body"
|
|
||||||
msgstr "Tekst"
|
|
||||||
|
|
||||||
msgid "Your auto response has been removed!"
|
|
||||||
msgstr "Uw automatisch beantwoorden is verwijderd!"
|
|
||||||
|
|
||||||
msgid "Your auto response has been set!"
|
|
||||||
msgstr "Uw automatisch beantwoorden is geactiveerd!"
|
|
||||||
|
|
||||||
msgid "You already have an auto response configured!"
|
|
||||||
msgstr "Automatisch beantwoorden is al geconfigureerd!"
|
|
||||||
|
|
||||||
#: postfixadmin_changepass.php:81 postfixadmin_changepass.php:87
|
|
||||||
msgid "The passwords that you supplied don't match!<br />Or are empty!"
|
|
||||||
msgstr "De wachtwoorden komen niet overeen!<br />Of er is geen wachtwoord opgegeven!"
|
|
||||||
|
|
||||||
#: postfixadmin_forward.php:70 postfixadmin_forward.php:152
|
|
||||||
msgid "To"
|
|
||||||
msgstr "Aan"
|
|
||||||
|
|
||||||
#: postfixadmin_changepass.php:101
|
|
||||||
msgid "Unable to change your password!"
|
|
||||||
msgstr "Niet in staat uw wachtwoord te wijzigen!"
|
|
||||||
|
|
||||||
#: postfixadmin_changepass.php:75
|
|
||||||
msgid "You didn't supply your current password!"
|
|
||||||
msgstr "U moet uw huidige wachtwoord opgeven!"
|
|
||||||
|
|
||||||
#: postfixadmin_changepass.php:96
|
|
||||||
msgid "Your password has been changed!"
|
|
||||||
msgstr "Uw wachtwoord is gewijzigd!"
|
|
||||||
|
|
||||||
msgid "Password current"
|
|
||||||
msgstr "Huidig wachtwoord"
|
|
||||||
|
|
||||||
msgid "Password new"
|
|
||||||
msgstr "Nieuw wachtwoord"
|
|
||||||
|
|
||||||
msgid "Password new again"
|
|
||||||
msgstr "Nieuw wachtwoord nogmaals"
|
|
||||||
|
|
||||||
msgid "Please sign out and log back again with your new password!"
|
|
||||||
msgstr "Log uit en opnieuw in met het nieuwe wachtwoord"
|
|
||||||
|
|
||||||
msgid "I will be away from <date> until <date>. For urgent matters you can contact <contact person>."
|
|
||||||
msgstr "Ik ben niet aanwezig van <datum> tot <datum>. Voor dringende zaken kunt u contact opnemen met <Contact persoon>."
|
|
||||||
|
|
||||||
Binary file not shown.
@ -1,132 +0,0 @@
|
|||||||
# SOME DESCRIPTIVE TITLE.
|
|
||||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
|
||||||
# This file is distributed under the same license as the PACKAGE package.
|
|
||||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
|
||||||
#
|
|
||||||
msgid ""
|
|
||||||
msgstr ""
|
|
||||||
"Project-Id-Version: PACKAGE VERSION\n"
|
|
||||||
"POT-Creation-Date: 2004-01-29 17:35+0100\n"
|
|
||||||
"PO-Revision-Date: 2007-07-20 20:46+0100\n"
|
|
||||||
"Last-Translator: Krzysztof Laska <krzysiek@dip.pl>\n"
|
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
|
||||||
"MIME-Version: 1.0\n"
|
|
||||||
"Content-Type: text/plain; charset=iso-8859-2\n"
|
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
|
||||||
|
|
||||||
#: setup.php
|
|
||||||
msgid "Forwarding"
|
|
||||||
msgstr "Przekazywanie"
|
|
||||||
|
|
||||||
msgid "Here you can create and edit E-Mail forwards."
|
|
||||||
msgstr "Tutaj mo¿esz ustawiæ i edytowaæ opcje przekazywania wiadomo¶ci"
|
|
||||||
|
|
||||||
msgid "Set an OUT OF OFFICE message or auto responder for your mail."
|
|
||||||
msgstr "Ustaw wiadomo¶æ wysy³an± nadawcom podczas Twojej nieobecno¶ci (Vacation)"
|
|
||||||
|
|
||||||
msgid "Change your mailbox password."
|
|
||||||
msgstr "Zmieñ has³o do swojego konta pocztowego"
|
|
||||||
|
|
||||||
#: postfixadmin_changepass.php
|
|
||||||
msgid "Alias"
|
|
||||||
msgstr "Konto"
|
|
||||||
|
|
||||||
msgid "Change Password"
|
|
||||||
msgstr "Zmieñ has³o"
|
|
||||||
|
|
||||||
msgid "Change your login password"
|
|
||||||
msgstr "Zmieñ has³o do swojego konta pocztowego"
|
|
||||||
|
|
||||||
#: postfixadmin_forward.php
|
|
||||||
msgid "Edit Alias"
|
|
||||||
msgstr "Edytuj adresy do przekazywania"
|
|
||||||
|
|
||||||
msgid "Edit an alias* for your domain.<br />One entry per line."
|
|
||||||
msgstr "Edytuj forward* dla swojego konta. <br/> Ka¿dy adres w nowym wierszu."
|
|
||||||
|
|
||||||
msgid "The email address that you have entered is not valid:"
|
|
||||||
msgstr "Adres e-mail jaki poda³e¶ jest niepoprawny:"
|
|
||||||
|
|
||||||
msgid "Unable to locate alias!"
|
|
||||||
msgstr "Nie mo¿na zlokalizowaæ aliasu!"
|
|
||||||
|
|
||||||
msgid "Unable to modify the alias!"
|
|
||||||
msgstr "Nie mo¿na zmodyfikowaæ aliasu!"
|
|
||||||
|
|
||||||
msgid "*Additional forward-aliase always recieve messages BBC!"
|
|
||||||
msgstr "*Wszystkie dodatkowe adresy zawsze odbieraj± wiadomo¶ci przesy³ane jako BCC! Ca³a poczta jest przekazywana i nie jest przechowywana na koncie podstawowym!"
|
|
||||||
|
|
||||||
msgid "Alias successfully changend!"
|
|
||||||
msgstr "Zmiana zachowana!"
|
|
||||||
|
|
||||||
msgid "To remove an alias, simply delete it's line from the text box."
|
|
||||||
msgstr "¯eby wy³±czyæ forward na dane konto po prostu usuñ liniê z adresem na który nie chcesz ju¿ przekazywaæ poczty."
|
|
||||||
|
|
||||||
#: postfixadmin_vacation.php
|
|
||||||
msgid "Auto Response"
|
|
||||||
msgstr "Autoodpowied¼"
|
|
||||||
|
|
||||||
msgid "Going Away"
|
|
||||||
msgstr "W³±cz autoodpowied¼"
|
|
||||||
|
|
||||||
msgid "Coming Back"
|
|
||||||
msgstr "Wy³±cz autoodpowied¼"
|
|
||||||
|
|
||||||
msgid "Options"
|
|
||||||
msgstr "Opcje"
|
|
||||||
|
|
||||||
msgid "Out of Office"
|
|
||||||
msgstr "Autoodpowied¼"
|
|
||||||
|
|
||||||
msgid "Subject"
|
|
||||||
msgstr "Temat"
|
|
||||||
|
|
||||||
msgid "Body"
|
|
||||||
msgstr "Tre¶æ"
|
|
||||||
|
|
||||||
msgid "Your auto response has been removed!"
|
|
||||||
msgstr "Twoja autoodpowied¼ zosta³a wy³±czona!"
|
|
||||||
|
|
||||||
msgid "Your auto response has been set!"
|
|
||||||
msgstr "Twoja autoodpowied¼ zosta³a w³±czona!"
|
|
||||||
|
|
||||||
msgid "You already have an auto response configured!"
|
|
||||||
msgstr "Masz ju¿ skonfigurowan± autoodpowied¼!"
|
|
||||||
|
|
||||||
#: postfixadmin_changepass.php:81
|
|
||||||
#: postfixadmin_changepass.php:87
|
|
||||||
msgid "The passwords that you supplied don't match!<br />Or are empty!"
|
|
||||||
msgstr "Has³a które poda³e¶ nie pasuj± lub s± puste!"
|
|
||||||
|
|
||||||
#: postfixadmin_forward.php:70
|
|
||||||
#: postfixadmin_forward.php:152
|
|
||||||
msgid "To"
|
|
||||||
msgstr "Do"
|
|
||||||
|
|
||||||
#: postfixadmin_changepass.php:101
|
|
||||||
msgid "Unable to change your password!"
|
|
||||||
msgstr "Nie mo¿na zmieniæ has³a!"
|
|
||||||
|
|
||||||
#: postfixadmin_changepass.php:75
|
|
||||||
msgid "You didn't supply your current password!"
|
|
||||||
msgstr "Nie poda³e¶ aktualnego has³a!"
|
|
||||||
|
|
||||||
#: postfixadmin_changepass.php:96
|
|
||||||
msgid "Your password has been changed!"
|
|
||||||
msgstr "Twoje has³o zosta³o zmienione!"
|
|
||||||
|
|
||||||
msgid "Password current"
|
|
||||||
msgstr "Bie¿±ce has³o"
|
|
||||||
|
|
||||||
msgid "Password new"
|
|
||||||
msgstr "Nowe has³o"
|
|
||||||
|
|
||||||
msgid "Password new again"
|
|
||||||
msgstr "Powtórz nowe has³o"
|
|
||||||
|
|
||||||
msgid "Please sign out and log back again with your new password!"
|
|
||||||
msgstr "Wyloguj siê i zaloguj z nowym has³em!"
|
|
||||||
|
|
||||||
msgid "I will be away from <date> until <date>. For urgent matters you can contact <contact person>."
|
|
||||||
msgstr "Nie bêdê odbieraæ poczty pomiêdzy <data> a <data>. W sprawach pilnych proszê kontaktowaæ siê z <osoba kontaktowa>"
|
|
||||||
|
|
||||||
Binary file not shown.
@ -1,127 +0,0 @@
|
|||||||
# SOME DESCRIPTIVE TITLE.
|
|
||||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
|
||||||
# This file is distributed under the same license as the PACKAGE package.
|
|
||||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
|
||||||
#
|
|
||||||
#, fuzzy
|
|
||||||
msgid ""
|
|
||||||
msgstr ""
|
|
||||||
"Project-Id-Version: PACKAGE VERSION\n"
|
|
||||||
"POT-Creation-Date: 2004-01-29 17:35+0100\n"
|
|
||||||
"PO-Revision-Date: 2008-10-16 20:30+3\n"
|
|
||||||
"Last-Translator: Julio Covolato <julio@psi.com.br>\n"
|
|
||||||
"Language-Team: BRAZILIAN PORTUGUESE <LL@li.org>\n"
|
|
||||||
"MIME-Version: 1.0\n"
|
|
||||||
"Content-Type: text/plain; charset=utf-8\n"
|
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
|
||||||
|
|
||||||
#: setup.php
|
|
||||||
msgid "Forwarding"
|
|
||||||
msgstr "Encaminhar"
|
|
||||||
|
|
||||||
msgid "Here you can create and edit E-Mail forwards."
|
|
||||||
msgstr "Aqui Você pode criar e editar alias."
|
|
||||||
|
|
||||||
msgid "Set an OUT OF OFFICE message or auto responder for your mail."
|
|
||||||
msgstr "Configurar mensagem de férias para seu email."
|
|
||||||
|
|
||||||
msgid "Change your mailbox password."
|
|
||||||
msgstr "Troque a senha de seu email."
|
|
||||||
|
|
||||||
#: postfixadmin_changepass.php
|
|
||||||
msgid "Alias"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
msgid "Change Password"
|
|
||||||
msgstr "Mudar Senha"
|
|
||||||
|
|
||||||
msgid "Change your login password"
|
|
||||||
msgstr "Mude sua senha de login"
|
|
||||||
|
|
||||||
#: postfixadmin_forward.php
|
|
||||||
msgid "Edit Alias"
|
|
||||||
msgstr "Editar Alias"
|
|
||||||
|
|
||||||
msgid "Edit an alias* for your domain.<br />One entry per line."
|
|
||||||
msgstr "Editar um alias* para seu domínio.<br /> Uma entrada por linha."
|
|
||||||
|
|
||||||
msgid "The email address that you have entered is not valid:"
|
|
||||||
msgstr "Este endereço de email informado não é válido:"
|
|
||||||
|
|
||||||
msgid "Unable to locate alias!"
|
|
||||||
msgstr "Alias não encontrado!"
|
|
||||||
|
|
||||||
msgid "Unable to modify the alias!"
|
|
||||||
msgstr "Impossível modificar o alias!"
|
|
||||||
|
|
||||||
msgid "*Additional forward-aliase always recieve messages BBC!"
|
|
||||||
msgstr "*Alias adicionais sempre recebem mensagens em BCC"
|
|
||||||
|
|
||||||
msgid "Alias successfully changend!"
|
|
||||||
msgstr "Alias alterado com sucesso!"
|
|
||||||
|
|
||||||
#: postfixadmin_vacation.php
|
|
||||||
msgid "Auto Response"
|
|
||||||
msgstr "Auto resposta"
|
|
||||||
|
|
||||||
msgid "Going Away"
|
|
||||||
msgstr "Ativar"
|
|
||||||
|
|
||||||
msgid "Coming Back"
|
|
||||||
msgstr "Desativar"
|
|
||||||
|
|
||||||
msgid "Options"
|
|
||||||
msgstr "Opções"
|
|
||||||
|
|
||||||
msgid "Out of Office"
|
|
||||||
msgstr "Fora do escritório"
|
|
||||||
|
|
||||||
msgid "Subject"
|
|
||||||
msgstr "Assunto"
|
|
||||||
|
|
||||||
msgid "Body"
|
|
||||||
msgstr "Mensagem"
|
|
||||||
|
|
||||||
msgid "Your auto response has been removed!"
|
|
||||||
msgstr "Sua auto resporta foi removida!"
|
|
||||||
|
|
||||||
msgid "Your auto response has been set!"
|
|
||||||
msgstr "Sua auto resposta foi ativada!"
|
|
||||||
|
|
||||||
msgid "You already have an auto response configured!"
|
|
||||||
msgstr "Você ainda tem uma auto resposta ativa"
|
|
||||||
|
|
||||||
#: postfixadmin_changepass.php:81 postfixadmin_changepass.php:87
|
|
||||||
msgid "The passwords that you supplied don't match!<br />Or are empty!"
|
|
||||||
msgstr "A senha digitada não confere!<br />Ou está vazia"
|
|
||||||
|
|
||||||
#: postfixadmin_forward.php:70 postfixadmin_forward.php:152
|
|
||||||
msgid "To"
|
|
||||||
msgstr "Para"
|
|
||||||
|
|
||||||
#: postfixadmin_changepass.php:101
|
|
||||||
msgid "Unable to change your password!"
|
|
||||||
msgstr "Impossível alterar a sua senha!"
|
|
||||||
|
|
||||||
#: postfixadmin_changepass.php:75
|
|
||||||
msgid "You didn't supply your current password!"
|
|
||||||
msgstr "Você não forneceu a sua senha atual!"
|
|
||||||
|
|
||||||
#: postfixadmin_changepass.php:96
|
|
||||||
msgid "Your password has been changed!"
|
|
||||||
msgstr "Sua senha foi alterada com sucesso!"
|
|
||||||
|
|
||||||
msgid "Password current"
|
|
||||||
msgstr "senha atual"
|
|
||||||
|
|
||||||
msgid "Password new"
|
|
||||||
msgstr "Nova senha"
|
|
||||||
|
|
||||||
msgid "Password new again"
|
|
||||||
msgstr "Confirme a nova senha"
|
|
||||||
|
|
||||||
msgid "Please sign out and log back again with your new password!"
|
|
||||||
msgstr "Por favor, saia e entre novamente no webmail com a nova senha"
|
|
||||||
|
|
||||||
msgid "I will be away from <date> until <date>. For urgent matters you can contact <contact person>."
|
|
||||||
msgstr "Estarei fora do escritório entre os dias <data> e <data> do mês de <mês>.<br /> Qualquer mensagem urgente, favor enviar para o email <email>."
|
|
||||||
@ -1,127 +0,0 @@
|
|||||||
# SOME DESCRIPTIVE TITLE.
|
|
||||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
|
||||||
# This file is distributed under the same license as the PACKAGE package.
|
|
||||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
|
||||||
#
|
|
||||||
#, fuzzy
|
|
||||||
msgid ""
|
|
||||||
msgstr ""
|
|
||||||
"Project-Id-Version: PACKAGE VERSION\n"
|
|
||||||
"POT-Creation-Date: 2004-01-29 17:35+0100\n"
|
|
||||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
|
||||||
"MIME-Version: 1.0\n"
|
|
||||||
"Content-Type: text/plain; charset=CHARSET\n"
|
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
|
||||||
|
|
||||||
#: setup.php
|
|
||||||
msgid "Forwarding"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
msgid "Here you can create and edit E-Mail forwards."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
msgid "Set an OUT OF OFFICE message or auto responder for your mail."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
msgid "Change your mailbox password."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: postfixadmin_changepass.php
|
|
||||||
msgid "Alias"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
msgid "Change Password"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
msgid "Change your login password"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: postfixadmin_forward.php
|
|
||||||
msgid "Edit Alias"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
msgid "Edit an alias* for your domain.<br />One entry per line."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
msgid "The email address that you have entered is not valid:"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
msgid "Unable to locate alias!"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
msgid "Unable to modify the alias!"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
msgid "*Additional forward-aliase always recieve messages BBC!"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
msgid "Alias successfully changend!"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: postfixadmin_vacation.php
|
|
||||||
msgid "Auto Response"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
msgid "Going Away"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
msgid "Coming Back"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
msgid "Options"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
msgid "Out of Office"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
msgid "Subject"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
msgid "Body"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
msgid "Your auto response has been removed!"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
msgid "Your auto response has been set!"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
msgid "You already have an auto response configured!"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: postfixadmin_changepass.php:81 postfixadmin_changepass.php:87
|
|
||||||
msgid "The passwords that you supplied don't match!<br />Or are empty!"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: postfixadmin_forward.php:70 postfixadmin_forward.php:152
|
|
||||||
msgid "To"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: postfixadmin_changepass.php:101
|
|
||||||
msgid "Unable to change your password!"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: postfixadmin_changepass.php:75
|
|
||||||
msgid "You didn't supply your current password!"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: postfixadmin_changepass.php:96
|
|
||||||
msgid "Your password has been changed!"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
msgid "Password current"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
msgid "Password new"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
msgid "Password new again"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
msgid "Please sign out and log back again with your new password!"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
msgid "I will be away from <date> until <date>. For urgent matters you can contact <contact person>."
|
|
||||||
msgstr ""
|
|
||||||
@ -1,125 +0,0 @@
|
|||||||
<?php
|
|
||||||
require_once(dirname(__FILE__) . '/common.php');
|
|
||||||
|
|
||||||
$xmlrpc = get_xmlrpc();
|
|
||||||
$user = $xmlrpc->getProxy('user');
|
|
||||||
|
|
||||||
global $username;
|
|
||||||
|
|
||||||
do_header();
|
|
||||||
|
|
||||||
$USERID_USERNAME = $username;
|
|
||||||
$tmp = preg_split('/@/', $USERID_USERNAME);
|
|
||||||
$USERID_DOMAIN = $tmp[1];
|
|
||||||
|
|
||||||
|
|
||||||
$stMessage = '';
|
|
||||||
$tMessage = '';
|
|
||||||
$pPassword_admin_text = '';
|
|
||||||
$pPassword_password_current_text = '';
|
|
||||||
$pPassword_password_text = '';
|
|
||||||
$error = 0;
|
|
||||||
|
|
||||||
if ($_SERVER['REQUEST_METHOD'] == "POST") {
|
|
||||||
//$pPassword_password_text = _("pPassword_password_text");
|
|
||||||
$fPassword_current = $_POST['fPassword_current'];
|
|
||||||
$fPassword = $_POST['fPassword'];
|
|
||||||
$fPassword2 = $_POST['fPassword2'];
|
|
||||||
$username = $USERID_USERNAME;
|
|
||||||
|
|
||||||
if (!$user->login($_SESSION['username'], $_POST['fPassword_current'])) {
|
|
||||||
$error = 1;
|
|
||||||
bindtextdomain('postfixadmin', SM_PATH . 'plugins/postfixadmin/locale');
|
|
||||||
textdomain('postfixadmin');
|
|
||||||
$pPassword_password_current_text = _("You didn't supply your current password!");
|
|
||||||
bindtextdomain('squirrelmail', SM_PATH . 'locale');
|
|
||||||
textdomain('squirrelmail');
|
|
||||||
}
|
|
||||||
$min_length = 0;
|
|
||||||
if (isset($CONF['min_password_length'])) {
|
|
||||||
$min_length = $CONF['min_password_length'];
|
|
||||||
}
|
|
||||||
if (empty($fPassword) or ($fPassword != $fPassword2) or ($min_length > 0 && strlen($fPassword) < $min_length)) {
|
|
||||||
$error = 1;
|
|
||||||
bindtextdomain('postfixadmin', SM_PATH . 'plugins/postfixadmin/locale');
|
|
||||||
textdomain('postfixadmin');
|
|
||||||
if (empty($fPassword)) {
|
|
||||||
$pPassword_password_text .= _("The passwords that you supplied are empty!");
|
|
||||||
}
|
|
||||||
if ($fPassword != $fPassword2) {
|
|
||||||
$pPassword_password_text .= _("The passwords that you supplied don't match!");
|
|
||||||
}
|
|
||||||
if ($min_length > 0 && strlen($fPassword) < $min_length) {
|
|
||||||
$pPassword_password_text .= _("The password you supplied is too short!");
|
|
||||||
}
|
|
||||||
bindtextdomain('squirrelmail', SM_PATH . 'locale');
|
|
||||||
textdomain('squirrelmail');
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($error != 1) {
|
|
||||||
$success = $user->changePassword($fPassword_current, $fPassword);
|
|
||||||
|
|
||||||
if ($success) {
|
|
||||||
bindtextdomain('postfixadmin', SM_PATH . 'plugins/postfixadmin/locale');
|
|
||||||
textdomain('postfixadmin');
|
|
||||||
$tMessage = _("Your password has been changed!");
|
|
||||||
$stMessage = _("Please sign out and log back again with your new password!");
|
|
||||||
bindtextdomain('squirrelmail', SM_PATH . 'locale');
|
|
||||||
textdomain('squirrelmail');
|
|
||||||
} else {
|
|
||||||
bindtextdomain('postfixadmin', SM_PATH . 'plugins/postfixadmin/locale');
|
|
||||||
textdomain('postfixadmin');
|
|
||||||
$tMessage = _("Unable to change your password!");
|
|
||||||
bindtextdomain('squirrelmail', SM_PATH . 'locale');
|
|
||||||
textdomain('squirrelmail');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
bindtextdomain('postfixadmin', SM_PATH . 'plugins/postfixadmin/locale');
|
|
||||||
textdomain('postfixadmin');
|
|
||||||
echo "<table bgcolor=\"$color[0]\" align=\"center\" width=\"95%\" cellpadding=\"1\" cellspacing=\"0\" border=\"0\">
|
|
||||||
<tr>
|
|
||||||
<td align=\"center\"><b>". _("Options") ." - ". _("Change Password")." </b>
|
|
||||||
<table align=\"center\" width=\"100%\" cellpadding=\"5\" cellspacing=\"0\" border=\"0\">
|
|
||||||
<tr><td bgcolor=\"$color[4]\" align=\"center\"><br>
|
|
||||||
<table align=\"center\" width=\"95%\" cellpadding=\"4\" cellspacing=\"0\" border=\"0\"><tr>
|
|
||||||
<td bgcolor=\"$color[3]\" align=\"center\"><b>" ._("Change your login password") ."\n
|
|
||||||
</b></td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td bgcolor=\"$color[0]\" align=\"center\"><form name=\"mailbox\" method=\"post\">
|
|
||||||
<b>$tMessage<b><font color=red><br>
|
|
||||||
<a href=\"../../src/signout.php\" target=\"_top\">$stMessage</a>
|
|
||||||
".$pPassword_admin_text."\n
|
|
||||||
".$pPassword_password_current_text."\n
|
|
||||||
".$pPassword_password_text."\n
|
|
||||||
</b><table width=\"95%\" border=\"0\" cellspacing=\"0\" cellpadding=\"2\">
|
|
||||||
<tr>
|
|
||||||
<td width=\"37%\"><b>". _("Alias") . ":\n</td>
|
|
||||||
<td width=\"63%\">{$_SESSION['username']}</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td><b>". _("Password current"). ":\n</td>
|
|
||||||
<td><input type=\"password\" name=\"fPassword_current\" size=\"30\" /></td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td><b>". _("Password new"). ":\n</td>
|
|
||||||
<td><input type=\"password\" name=\"fPassword\" size=\"30\" /></td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td><b>". _("Password new again"). ":\n</td>
|
|
||||||
<td><input type=\"password\" name=\"fPassword2\" size=\"30\" /></td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td> </td>
|
|
||||||
<td><input type=\"submit\" name=\"submit\" value=\"" ._("Change Password") . "\" /></td>
|
|
||||||
<td> </td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
<TT></TT></FORM></td>
|
|
||||||
</tr><tr><td bgcolor=\"$color[4]\" align=\"left\"> </td>
|
|
||||||
</tr></table><BR>
|
|
||||||
</td>
|
|
||||||
</tr></table></td></tr></table>";
|
|
||||||
bindtextdomain('squirrelmail', SM_PATH . 'locale');
|
|
||||||
textdomain('squirrelmail');
|
|
||||||
@ -1,159 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
require_once(dirname(__FILE__) . '/common.php');
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
$USERID_USERNAME = $username;
|
|
||||||
$tmp = preg_split('/@/', $USERID_USERNAME);
|
|
||||||
$USERID_LOCALPART = $tmp[0];
|
|
||||||
$USERID_DOMAIN = $tmp[1];
|
|
||||||
|
|
||||||
$xmlrpc = get_xmlrpc();
|
|
||||||
$alias = $xmlrpc->getProxy('alias');
|
|
||||||
do_header();
|
|
||||||
// Normal page request (GET)
|
|
||||||
if ($_SERVER['REQUEST_METHOD'] == "GET") {
|
|
||||||
$row = $alias->get();
|
|
||||||
if ($row === false) {
|
|
||||||
bindtextdomain('postfixadmin', SM_PATH . 'plugins/postfixadmin/locale');
|
|
||||||
textdomain('postfixadmin');
|
|
||||||
$tMessage = _("Unable to locate alias!");
|
|
||||||
bindtextdomain('squirrelmail', SM_PATH . 'locale');
|
|
||||||
textdomain('squirrelmail');
|
|
||||||
exit(0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($_SERVER['REQUEST_METHOD'] == "POST") {
|
|
||||||
$pEdit_alias_goto = _("To");
|
|
||||||
|
|
||||||
$fGoto = $_POST['fGoto'];
|
|
||||||
|
|
||||||
// reform string into a list...
|
|
||||||
$goto = preg_replace('/\r\n/', ',', $fGoto);
|
|
||||||
$goto = preg_replace('/[\s]+/i', '', $goto);
|
|
||||||
$goto = preg_replace('/\,*$/', '', $goto);
|
|
||||||
$array = preg_split('/,/', $goto);
|
|
||||||
$error = 0;
|
|
||||||
// check that we have valid addresses in the list
|
|
||||||
|
|
||||||
foreach ($array as $key => $email_address) {
|
|
||||||
if (empty($email_address)) {
|
|
||||||
unset($array[$key]);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if (check_email($email_address) != "") {
|
|
||||||
$error = 1;
|
|
||||||
$tGoto = $goto;
|
|
||||||
bindtextdomain('postfixadmin', SM_PATH . 'plugins/postfixadmin/locale');
|
|
||||||
textdomain('postfixadmin');
|
|
||||||
$tMessage = _("The email address that you have entered is not valid:") . " $email_address</font>";
|
|
||||||
bindtextdomain('squirrelmail', SM_PATH . 'locale');
|
|
||||||
textdomain('squirrelmail');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if ($error != 1) {
|
|
||||||
$flag = 'forward_and_store'; // goto = $USERID_USERNAME;
|
|
||||||
$success = $alias->update($array, $flag);
|
|
||||||
if (!$success) {
|
|
||||||
bindtextdomain('postfixadmin', SM_PATH . 'plugins/postfixadmin/locale');
|
|
||||||
textdomain('postfixadmin');
|
|
||||||
$tMessage = _("Unable to modify the alias!");
|
|
||||||
bindtextdomain('squirrelmail', SM_PATH . 'locale');
|
|
||||||
textdomain('squirrelmail');
|
|
||||||
} else {
|
|
||||||
bindtextdomain('postfixadmin', SM_PATH . 'plugins/postfixadmin/locale');
|
|
||||||
textdomain('postfixadmin');
|
|
||||||
echo "<p align=center><b>". _("Alias successfully changed!"). "\n</b></p>";
|
|
||||||
bindtextdomain('squirrelmail', SM_PATH . 'locale');
|
|
||||||
textdomain('squirrelmail');
|
|
||||||
echo "<p align=center><a href=\"javascript:history.go(-1)\">". _("Click here to go back") ."</a></p>";
|
|
||||||
exit;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
bindtextdomain('postfixadmin', SM_PATH . 'plugins/postfixadmin/locale');
|
|
||||||
textdomain('postfixadmin');
|
|
||||||
|
|
||||||
if (!isset($tMessage)) {
|
|
||||||
$tMessage = '';
|
|
||||||
}
|
|
||||||
echo "<table bgcolor=\"$color[0]\" align=\"center\" width=\"95%\" cellpadding=\"1\" cellspacing=\"0\" border=\"0\">
|
|
||||||
<tr>
|
|
||||||
<td align=\"center\" bgcolor=\"$color[0]\" colspan=\"2\">
|
|
||||||
<b>". _("Options") ." - ". _("Edit Alias"). " </b>
|
|
||||||
<table align=\"center\" width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\">
|
|
||||||
<tr>
|
|
||||||
<td bgcolor=\"$color[4]\" align=\"center\">
|
|
||||||
<table align=\"center\" width=\"100%\">
|
|
||||||
<tr>
|
|
||||||
<td align=\"left\">". _("Edit an alias* for your email address.<br />One entry per line."). " </td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td align=\"left\">". _("*Additional forward-aliases always receive messages BCC!"). "\n
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td align=\"left\">" . _("To remove an alias, simply delete its line from the text box.") . "</td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
<table align=\"center\" width\"95%\" cellpadding=\"5\" cellspacing=\"1\">
|
|
||||||
<form name=\"mailbox\" method=\"post\">
|
|
||||||
<tr>
|
|
||||||
<td bgcolor=\"$color[3]\" align=\"center\"><b>". _("Edit Forwards"). "</b>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td bgcolor=\"$color[5]\" align=\"center\">$tMessage
|
|
||||||
<table cellpadding=\"5\" cellspacing=\"1\">
|
|
||||||
<tr>
|
|
||||||
<th align=\"left\">". _("Alias"). ":\n
|
|
||||||
</th>
|
|
||||||
<td align=\"left\">" . $_SESSION['username'] . "</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th> </th>
|
|
||||||
<td> </td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th align=\"left\" valign=\"top\">". _("To"). ":\n</th>
|
|
||||||
<td>
|
|
||||||
<textarea rows=\"8\" cols=\"50\" name=\"fGoto\">";
|
|
||||||
bindtextdomain('squirrelmail', SM_PATH . 'locale');
|
|
||||||
textdomain('squirrelmail');
|
|
||||||
$aliases = $alias->get();
|
|
||||||
foreach ($aliases as $address) {
|
|
||||||
if ($address == "" || $address == null) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
print "$address\n";
|
|
||||||
}
|
|
||||||
bindtextdomain('postfixadmin', SM_PATH . 'plugins/postfixadmin/locale');
|
|
||||||
textdomain('postfixadmin');
|
|
||||||
echo "
|
|
||||||
</textarea>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th> </th>
|
|
||||||
<td> </td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th> </th>
|
|
||||||
<td align=\"left\"colspan=\"2\">
|
|
||||||
<input type=\"submit\" name=\"submit\" value=\"" . _("Edit Alias") . "\">
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
</form>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
</td></tr>
|
|
||||||
</table>
|
|
||||||
";
|
|
||||||
bindtextdomain('squirrelmail', SM_PATH . 'locale');
|
|
||||||
textdomain('squirrelmail');
|
|
||||||
@ -1,141 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
require_once(dirname(__FILE__) . '/common.php');
|
|
||||||
|
|
||||||
$xmlrpc = get_xmlrpc();
|
|
||||||
$vacation = $xmlrpc->getProxy('vacation');
|
|
||||||
|
|
||||||
$VACCONFTXT = _("I will be away from <date> until <date>. For urgent matters you can contact <contact person>.");
|
|
||||||
bindtextdomain('squirrelmail', SM_PATH . 'locale');
|
|
||||||
textdomain('squirrelmail');
|
|
||||||
$VACCONF = <<<EOM
|
|
||||||
$VACCONFTXT
|
|
||||||
EOM;
|
|
||||||
|
|
||||||
do_header();
|
|
||||||
|
|
||||||
$USERID_USERNAME = $username;
|
|
||||||
$tmp = preg_split('/@/', $USERID_USERNAME);
|
|
||||||
$USERID_DOMAIN = $tmp[1];
|
|
||||||
|
|
||||||
if ($_SERVER['REQUEST_METHOD'] == "GET") {
|
|
||||||
$details = $vacation->getDetails();
|
|
||||||
if ($vacation->checkVacation()) {
|
|
||||||
bindtextdomain('postfixadmin', SM_PATH . 'plugins/postfixadmin/locale');
|
|
||||||
textdomain('postfixadmin');
|
|
||||||
$tMessage = _("You already have an auto response configured!");
|
|
||||||
bindtextdomain('squirrelmail', SM_PATH . 'locale');
|
|
||||||
textdomain('squirrelmail');
|
|
||||||
bindtextdomain('postfixadmin', SM_PATH . 'plugins/postfixadmin/locale');
|
|
||||||
textdomain('postfixadmin');
|
|
||||||
echo "<table bgcolor=\"#b8cbdc\" align=\"center\" width=\"95%\" cellpadding=\"1\" cellspacing=\"0\" border=\"0\"><tr>
|
|
||||||
<td align=\"center\"><b>". _("Options") ." - ". _("Auto Response") ."</b>
|
|
||||||
<table align=\"center\" width=\"100%\" cellpadding=\"5\" cellspacing=\"0\" border=\"0\">
|
|
||||||
<tr><td bgcolor=\"$color[4]\" align=\"center\"><br>
|
|
||||||
<table align=\"center\" width=\"70%\" cellpadding=\"4\" cellspacing=\"0\" border=\"0\"><tr>
|
|
||||||
<td bgcolor=\"$color[3]\" align=\"center\"><b>". _("Auto Response") ."\n
|
|
||||||
</b></td></tr><tr>
|
|
||||||
<td bgcolor=\"$color[0]\" align=\"center\"><form name=\"vacation\" method=\"post\">
|
|
||||||
<table width=\"95%\" border=\"0\" cellspacing=\"0\" cellpadding=\"2\">
|
|
||||||
<tr>
|
|
||||||
<td><center>$tMessage<p></center></td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td> <div align=\"center\">
|
|
||||||
<input type=\"submit\" name=\"fBack\" value=\"" . _("Coming Back"). "\" />
|
|
||||||
</div></td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
<TT></TT></FORM>
|
|
||||||
</td>
|
|
||||||
</tr><tr><td bgcolor=\"$color[4]\" align=\"left\"> </td>
|
|
||||||
</tr></table><BR></td></tr></table></td></tr></table>";
|
|
||||||
bindtextdomain('squirrelmail', SM_PATH . 'locale');
|
|
||||||
textdomain('squirrelmail');
|
|
||||||
} else {
|
|
||||||
$tSubject = "Out of Office";
|
|
||||||
$tSubject = $details['subject'];
|
|
||||||
$VACCONF = $details['body'];
|
|
||||||
|
|
||||||
$tMessage = '';
|
|
||||||
bindtextdomain('postfixadmin', SM_PATH . 'plugins/postfixadmin/locale');
|
|
||||||
textdomain('postfixadmin');
|
|
||||||
echo "<table bgcolor=\"$color[0]\" align=\"center\" width=\"95%\" cellpadding=\"1\" cellspacing=\"0\" border=\"0\">
|
|
||||||
<tr>
|
|
||||||
<td align=\"center\"><b>". _("Options") ." - ". _("Auto Response") ." </b>
|
|
||||||
<table align=\"center\" width=\"100%\" cellpadding=\"5\" cellspacing=\"0\" border=\"0\">
|
|
||||||
<tr><td bgcolor=\"$color[4]\" align=\"center\"><br>
|
|
||||||
<table align=\"center\" width=\"70%\" cellpadding=\"4\" cellspacing=\"0\" border=\"0\"><tr>
|
|
||||||
<td bgcolor=\"$color[3]\" align=\"center\"><b>" . _("Auto Response") ."\n
|
|
||||||
</b></td></tr><tr>
|
|
||||||
<td bgcolor=\"$color[0]\" align=\"center\"><form name=\"vacation\" method=\"post\">$tMessage
|
|
||||||
<table width=\"95%\" border=\"0\" cellspacing=\"0\" cellpadding=\"2\"><tr>
|
|
||||||
<td width=\"23%\">". _("Subject") .":\n</td>
|
|
||||||
<td width=\"2%\"> </td>
|
|
||||||
<td width=\"69%\"><input type=\"text\" name=\"fSubject\" value=\"" . $tSubject . "\" /></td>
|
|
||||||
<td width=\"2%\"> </td>
|
|
||||||
<td width=\"4%\"> </td>
|
|
||||||
</tr><tr>
|
|
||||||
<td>". _("Body") .":\n</td>
|
|
||||||
<td> </td>
|
|
||||||
<td><textarea rows=\"10\" cols=\"80\" name=\"fBody\">$VACCONF\n
|
|
||||||
</textarea></td><td> </td><td> </td></tr><tr><td> </td><td> </td>
|
|
||||||
<td><input type=\"submit\" name=\"fAway\" value=\"" . _("Going Away") . "\" /></td>
|
|
||||||
<td> </td><td> </td></tr>
|
|
||||||
</table><TT></TT></FORM></td>
|
|
||||||
</tr><tr><td bgcolor=\"$color[4]\" align=\"left\"> </td>
|
|
||||||
</tr></table><BR></td></tr></table></td></tr></table>";
|
|
||||||
bindtextdomain('squirrelmail', SM_PATH . 'locale');
|
|
||||||
textdomain('squirrelmail');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($_SERVER['REQUEST_METHOD'] == "POST") {
|
|
||||||
$fBack = null;
|
|
||||||
$fAway = null;
|
|
||||||
foreach (array('fBack', 'fAway', 'fSubject', 'fBody') as $key) {
|
|
||||||
$$key = null;
|
|
||||||
if (isset($_POST[$key])) {
|
|
||||||
$$key = $_POST[$key];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!empty($fBack)) {
|
|
||||||
$success = $vacation->remove();
|
|
||||||
|
|
||||||
if (!$success) {
|
|
||||||
bindtextdomain('postfixadmin', SM_PATH . 'plugins/postfixadmin/locale');
|
|
||||||
textdomain('postfixadmin');
|
|
||||||
$tMessage = _("Unable to update your auto response settings!");
|
|
||||||
echo "<p>This may signify an error; please contact support (1)</p>";
|
|
||||||
bindtextdomain('squirrelmail', SM_PATH . 'locale');
|
|
||||||
textdomain('squirrelmail');
|
|
||||||
} else {
|
|
||||||
bindtextdomain('postfixadmin', SM_PATH . 'plugins/postfixadmin/locale');
|
|
||||||
textdomain('postfixadmin');
|
|
||||||
echo "<p align=center><b>". _("Your auto response has been removed!") ."</b></p>";
|
|
||||||
bindtextdomain('squirrelmail', SM_PATH . 'locale');
|
|
||||||
textdomain('squirrelmail');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!empty($fAway)) {
|
|
||||||
// add record into vacation
|
|
||||||
$success = $vacation->setAway($fSubject, $fBody);
|
|
||||||
|
|
||||||
if (!$success) {
|
|
||||||
$error = 1;
|
|
||||||
bindtextdomain('postfixadmin', SM_PATH . 'plugins/postfixadmin/locale');
|
|
||||||
textdomain('postfixadmin');
|
|
||||||
$tMessage = _("Unable to update your auto response settings!");
|
|
||||||
bindtextdomain('squirrelmail', SM_PATH . 'locale');
|
|
||||||
textdomain('squirrelmail');
|
|
||||||
} else {
|
|
||||||
bindtextdomain('postfixadmin', SM_PATH . 'plugins/postfixadmin/locale');
|
|
||||||
textdomain('postfixadmin');
|
|
||||||
echo "<p align=center><b>". _("Your auto response has been set!") ."</b></p>";
|
|
||||||
bindtextdomain('squirrelmail', SM_PATH . 'locale');
|
|
||||||
textdomain('squirrelmail');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,62 +0,0 @@
|
|||||||
<?php
|
|
||||||
// vim:ts=4:sw=4:et
|
|
||||||
if (!defined('SM_PATH')) {
|
|
||||||
die("Invalid internal state (don't access file directly)");
|
|
||||||
}
|
|
||||||
include_once(SM_PATH . 'functions/i18n.php');
|
|
||||||
|
|
||||||
function squirrelmail_plugin_init_postfixadmin() {
|
|
||||||
include(dirname(__FILE__) . '/config.php');
|
|
||||||
global $squirrelmail_plugin_hooks;
|
|
||||||
|
|
||||||
$squirrelmail_plugin_hooks['optpage_register_block']['postfixadmin'] = 'postfixadmin_optpage_register_block';
|
|
||||||
}
|
|
||||||
|
|
||||||
function postfixadmin_version() {
|
|
||||||
return '2.3.0';
|
|
||||||
}
|
|
||||||
|
|
||||||
function postfixadmin_optpage_register_block() {
|
|
||||||
// Gets added to the user's OPTIONS page.
|
|
||||||
global $optpage_blocks;
|
|
||||||
global $AllowVacation;
|
|
||||||
global $AllowChangePass;
|
|
||||||
|
|
||||||
// if ( !soupNazi() ) {
|
|
||||||
|
|
||||||
bindtextdomain('postfixadmin', SM_PATH . 'plugins/postfixadmin/locale');
|
|
||||||
textdomain('postfixadmin');
|
|
||||||
$optpage_blocks[] = array(
|
|
||||||
'name' => _("Forwarding"),
|
|
||||||
'url' => '../plugins/postfixadmin/postfixadmin_forward.php',
|
|
||||||
'desc' => _("Here you can create and edit E-Mail forwards."),
|
|
||||||
'js' => false
|
|
||||||
);
|
|
||||||
bindtextdomain('squirrelmail', SM_PATH . 'locale');
|
|
||||||
textdomain('squirrelmail');
|
|
||||||
|
|
||||||
bindtextdomain('postfixadmin', SM_PATH . 'plugins/postfixadmin/locale');
|
|
||||||
textdomain('postfixadmin');
|
|
||||||
if ($AllowVacation) {
|
|
||||||
$optpage_blocks[] = array(
|
|
||||||
'name' => _("Auto Response"),
|
|
||||||
'url' => '../plugins/postfixadmin/postfixadmin_vacation.php',
|
|
||||||
'desc' => _("Set an OUT OF OFFICE message or auto responder for your mail."),
|
|
||||||
'js' => false
|
|
||||||
);
|
|
||||||
bindtextdomain('squirrelmail', SM_PATH . 'locale');
|
|
||||||
textdomain('squirrelmail');
|
|
||||||
}
|
|
||||||
bindtextdomain('postfixadmin', SM_PATH . 'plugins/postfixadmin/locale');
|
|
||||||
textdomain('postfixadmin');
|
|
||||||
if ($AllowChangePass) {
|
|
||||||
$optpage_blocks[] = array(
|
|
||||||
'name' => _("Change Password"),
|
|
||||||
'url' => '../plugins/postfixadmin/postfixadmin_changepass.php',
|
|
||||||
'desc' => _("Change your mailbox password."),
|
|
||||||
'js' => false
|
|
||||||
);
|
|
||||||
bindtextdomain('squirrelmail', SM_PATH . 'locale');
|
|
||||||
textdomain('squirrelmail');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,2 +0,0 @@
|
|||||||
postfixadmin
|
|
||||||
2.3.0
|
|
||||||
@ -1,193 +1,185 @@
|
|||||||
<?php
|
<?php
|
||||||
/*
|
|
||||||
Virtual Mail Delete
|
|
||||||
by George Vieira <george at citadelcomputer dot com dot au>
|
|
||||||
|
|
||||||
You can run this from your crontab with something like
|
|
||||||
|
|
||||||
0 4 * * * * vmail php -q virtualmaildel.php >/dev/null
|
|
||||||
|
|
||||||
Changes:
|
|
||||||
2017.08.31 updated to use PHP mysqli extension.
|
|
||||||
2018.02.23 removing Sieve filters if exists.
|
|
||||||
Tadas Ustinavičius <tadas at ring dot lt> ( https://github.com/postfixadmin/postfixadmin/pull/70 )
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
$CONF = [];
|
|
||||||
|
|
||||||
// Either, uncomment this (and change to work)
|
|
||||||
//require_once('/path/to/postfixadmin/config.inc.php');
|
|
||||||
|
|
||||||
// OR uncomment this.
|
|
||||||
/*
|
|
||||||
$CONF = [
|
|
||||||
'database_host' => 'localhost',
|
|
||||||
'database_user' => 'someone',
|
|
||||||
'database_password' => 'something',
|
|
||||||
'database_name' => 'mydb'
|
|
||||||
];
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
$MAKE_CHANGES = false; // change to true when you're happy this isn't going to trash your server.
|
|
||||||
|
|
||||||
if (empty($CONF)) {
|
|
||||||
die("\nPlease configure me\n\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Where's the homedir accounts stored. (GET THIS RIGHT OTHERWISE IT THINK NONE EXIST AND DELETES ALL)
|
|
||||||
$homedir = '/home/virtual';
|
|
||||||
|
|
||||||
if (! is_dir($homedir)) {
|
|
||||||
die("Cannot find home directory for virtual mailboxes in $homedir\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Recursive Delete Function
|
|
||||||
//
|
//
|
||||||
function deldir($dir) {
|
// Virtual Mail Delete
|
||||||
$current_dir = opendir($dir);
|
// by George Vieira <george at citadelcomputer dot com dot au>
|
||||||
while ($entryname = readdir($current_dir)) {
|
//
|
||||||
if (is_dir("$dir/$entryname") and ($entryname != "." and $entryname!="..")) {
|
// You can run this from your crontab with something like
|
||||||
deldir("{$dir}/{$entryname}");
|
//
|
||||||
} elseif ($entryname != "." and $entryname!="..") {
|
// 0 4 * * * * vmail php -q virtualmaildel.php >/dev/null
|
||||||
unlink("{$dir}/{$entryname}");
|
|
||||||
}
|
//
|
||||||
}
|
// Setup location of postfixadmin config files. Needed to login to mysql
|
||||||
closedir($current_dir);
|
//
|
||||||
@rmdir($dir);
|
$conf = '/home/httpd/mail/admin/config.inc.php';
|
||||||
}
|
|
||||||
|
//
|
||||||
|
// Where's the homedir accounts stored. (GET THIS RIGHT OTHERWISE IT THINK NONE EXIST AND DELETES ALL)
|
||||||
|
//
|
||||||
|
$homedir = '/home/virtual';
|
||||||
|
|
||||||
|
//
|
||||||
|
// Make sure everything is everything before continuing
|
||||||
|
//
|
||||||
|
if ( ! file_exists( $conf ) )
|
||||||
|
die( "Cannot find config file $conf\n" );
|
||||||
|
|
||||||
|
if ( ! is_dir( $homedir ) )
|
||||||
|
die( "Cannot find home directory for virtual mailboxes in $homedir\n" );
|
||||||
|
|
||||||
|
//
|
||||||
|
// Load mysql authentication from postfixadmin
|
||||||
|
//
|
||||||
|
include( $conf );
|
||||||
|
|
||||||
|
//
|
||||||
|
// Recursive Delete Function
|
||||||
|
//
|
||||||
|
function deldir($dir)
|
||||||
|
{
|
||||||
|
$current_dir = opendir($dir);
|
||||||
|
while($entryname = readdir($current_dir))
|
||||||
|
{
|
||||||
|
if(is_dir("$dir/$entryname") and ($entryname != "." and $entryname!=".."))
|
||||||
|
{
|
||||||
|
deldir("${dir}/${entryname}");
|
||||||
|
}
|
||||||
|
elseif($entryname != "." and $entryname!="..")
|
||||||
|
{
|
||||||
|
unlink("${dir}/${entryname}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
closedir($current_dir);
|
||||||
|
@rmdir(${dir});
|
||||||
|
}
|
||||||
|
|
||||||
// --- Main Start ---
|
// --- Main Start ---
|
||||||
|
|
||||||
$dir = [];
|
//
|
||||||
|
// Get list of directories
|
||||||
//
|
//
|
||||||
// Get list of directories
|
$fr = opendir( $homedir );
|
||||||
//
|
while ( ($domain = readdir($fr)) !== false)
|
||||||
$fr = opendir($homedir);
|
{
|
||||||
|
//
|
||||||
// TODO: Would glob($homedir . '/**/*/new') be somewhat quicker/shorter/less effort?
|
// Check if it's a dir
|
||||||
|
//
|
||||||
while (($domain = readdir($fr)) !== false) {
|
if ( $domain != "." and $domain != ".." and filetype($homedir .'/'. $domain) == "dir" )
|
||||||
//
|
{
|
||||||
// Check if it's a dir
|
//
|
||||||
//
|
// Open the (assumed) DOMAIN directory
|
||||||
if ($domain == "." || $domain == ".." || filetype($homedir .'/'. $domain) != "dir") {
|
//
|
||||||
continue;
|
$ff = opendir( $homedir .'/'. $domain );
|
||||||
}
|
while ( ($user = readdir($ff)) !== false)
|
||||||
//
|
{
|
||||||
// Open the (assumed) DOMAIN directory
|
//
|
||||||
//
|
// Check for directories assuming it's a user account
|
||||||
$ff = opendir($homedir .'/'. $domain);
|
//
|
||||||
while (($user = readdir($ff)) !== false) {
|
if ( $user!="." and $user!=".." and filetype($homedir .'/'. $domain .'/'. $user) == "dir" )
|
||||||
//
|
{
|
||||||
// Check for directories assuming it's a user account
|
//
|
||||||
//
|
// if the dir 'new' exists inside then it's an account
|
||||||
if ($user == "." || $user == ".." || filetype($homedir .'/'. $domain .'/'. $user) != "dir") {
|
//
|
||||||
continue;
|
if ( file_exists($homedir .'/'. $domain .'/'. $user .'/'. "new") )
|
||||||
}
|
{
|
||||||
|
$dir[$domain][$user] = "";
|
||||||
//
|
}
|
||||||
// if the dir 'new' exists inside then it's an account
|
else
|
||||||
//
|
{
|
||||||
if (file_exists($homedir .'/'. $domain .'/'. $user .'/'. "new")) {
|
//
|
||||||
$dir[$domain][$user] = "";
|
// Alert that the dir doesn't have a 'new' dir, possibly not an account. Leave it.
|
||||||
} else {
|
//
|
||||||
//
|
echo "UNKNOWN : " . $homedir ."/". $domain ."/". $user ."/new NOT FOUND. Possibly not an account. Leaving untouched\n";
|
||||||
// Alert that the dir doesn't have a 'new' dir, possibly not an account. Leave it.
|
}
|
||||||
//
|
}
|
||||||
echo "UNKNOWN : " . $homedir ."/". $domain ."/". $user ."/new NOT FOUND. Possibly not an account. Leaving untouched\n";
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
//
|
||||||
//
|
// OK, got an array of accounts from the dir, Now connect to the DB and check them
|
||||||
// OK, got an array of accounts from the dir, Now connect to the DB and check them
|
//
|
||||||
//
|
$conx = mysql_connect( $CONF['database_host'],$CONF['database_user'],$CONF['database_password'] );
|
||||||
$conx = mysqli_connect($CONF['database_host'], $CONF['database_user'], $CONF['database_password'], $CONF['database_name']);
|
//
|
||||||
//
|
// Is there a problem connecting?
|
||||||
// Is there a problem connecting?
|
//
|
||||||
//
|
if ( $conx != false )
|
||||||
if (! $conx || mysqli_connect_errno()) {
|
{
|
||||||
echo "DB connection failed." . mysqli_connect_error() . "\n";
|
//
|
||||||
die("Problem connecting to the database. ");
|
// Select the database
|
||||||
}
|
//
|
||||||
|
mysql_select_db( $CONF['database_name'] , $conx) or die ("Can't access database postfix : " . mysql_error());
|
||||||
//
|
|
||||||
// Select all mailboxes to verify against dirs listed in array
|
//
|
||||||
//
|
// Select all mailboxes to verify against dirs listed in array
|
||||||
$query = "SELECT * FROM mailbox";
|
//
|
||||||
$result = mysqli_query($conx, $query);
|
$query = "SELECT * FROM mailbox";
|
||||||
|
$result = mysql_query( $query );
|
||||||
//
|
|
||||||
// Query the mailbox table
|
//
|
||||||
//
|
// Query the mailbox table
|
||||||
if (! $result) {
|
//
|
||||||
die("Failed to query mailbox table.");
|
if ( $result != false )
|
||||||
}
|
{
|
||||||
|
//
|
||||||
//
|
// Fetch the list of results
|
||||||
// Fetch the list of results
|
//
|
||||||
//
|
while ( $row = mysql_fetch_assoc( $result ) )
|
||||||
while ($row = mysqli_fetch_assoc($result)) {
|
{
|
||||||
//
|
//
|
||||||
// Pull apart the maildir field, needed to figure out the directory structure to compare
|
// Pull apart the maildir field, needed to figure out the directory structure to compare
|
||||||
//
|
//
|
||||||
$strip = explode("/", $row['maildir']);
|
$strip = explode("/",$row['maildir']);
|
||||||
//
|
//
|
||||||
// Unset the array if it exists. This stops it being erased later.
|
// Unset the array if it exists. This stops it being erased later.
|
||||||
//
|
//
|
||||||
unset($dir[ $strip[0] ][ $strip[1] ]);
|
unset( $dir[ $strip[0] ][ $strip[1] ] );
|
||||||
}
|
}
|
||||||
//
|
//
|
||||||
// If there are results. unset the domain too.
|
// If there are results. unset the domain too.
|
||||||
//
|
//
|
||||||
if (count($dir[$strip[0]])==0 and mysqli_num_rows($result)>0) {
|
if ( count($dir[$strip[0]])==0 and mysql_num_rows($result)>0 )
|
||||||
unset($dir[$strip[0]]);
|
unset( $dir[$strip[0]] );
|
||||||
}
|
}
|
||||||
|
else
|
||||||
//
|
die( "Failed SELECT in mailboxes\n" );
|
||||||
// OK, time to clean up. All known users/domains have been removed from the list.
|
}
|
||||||
//
|
else
|
||||||
|
die( 'Cannot connect to the database!\n' );
|
||||||
//
|
|
||||||
// If the array still exists (incase nothing there)
|
//
|
||||||
//
|
// OK, time to clean up. All known users/domains have been removed from the list.
|
||||||
if (is_array($dir)) {
|
//
|
||||||
//
|
|
||||||
// Go through each dir
|
//
|
||||||
//
|
// If the array still exists (incase nothing there)
|
||||||
foreach ($dir as $key => $value) {
|
//
|
||||||
//
|
if ( is_array($dir) )
|
||||||
// Is this a user array?
|
{
|
||||||
//
|
//
|
||||||
if (!is_array($value)) {
|
// Go through each dir
|
||||||
continue;
|
//
|
||||||
}
|
foreach ( $dir as $key => $value )
|
||||||
|
{
|
||||||
//
|
//
|
||||||
// Go through and nuke the folders
|
// Is this a user array?
|
||||||
//
|
//
|
||||||
foreach ($value as $user => $value2) {
|
if ( is_array( $value) )
|
||||||
// Nuke.. need any more explanations?
|
{
|
||||||
$path = $homedir . '/' . $key . '/' . $user;
|
//
|
||||||
$sieve_path = $homedir . '/.sieve/' . $key . '/' . $user;
|
// Go through and nuke the folders
|
||||||
$sieve_exists = file_exists($sieve_path);
|
//
|
||||||
// check if user has Sieve filters created
|
foreach ( $value as $user => $value2 )
|
||||||
if ($MAKE_CHANGES) {
|
{
|
||||||
deldir($path);
|
//
|
||||||
if ($sieve_exists) {
|
// Nuke.. need any more explanations?
|
||||||
deldir($sieve_path);
|
//
|
||||||
}
|
echo "REMOVING : " . $homedir."/".$key."/".$user."\n" ;
|
||||||
} else {
|
deldir( $homedir."/".$key."/".$user ) ;
|
||||||
echo " - Would recursively delete : $path \n";
|
}
|
||||||
if ($sieve_exists) {
|
}
|
||||||
echo " - Would recursively delete Sieve filters : $sieve_path \n";
|
}
|
||||||
}
|
}
|
||||||
}
|
//
|
||||||
}
|
// And we are outta here....
|
||||||
}
|
//
|
||||||
}
|
echo "Cleanup process completed\n";
|
||||||
|
?>
|
||||||
echo "Cleanup process completed\n";
|
|
||||||
|
|||||||
@ -1,221 +0,0 @@
|
|||||||
# Example configuration
|
|
||||||
|
|
||||||
The below covers some default(ish) configuration things for using Postfix, Dovecot with PostgreSQL.
|
|
||||||
|
|
||||||
# Postfix
|
|
||||||
|
|
||||||
Assumptions :
|
|
||||||
|
|
||||||
* Mail is delivered into /var/mail/vmail/foo@example.com/
|
|
||||||
* The user with id 8 is used for ownership of mail files.
|
|
||||||
* PostgreSQL is running on the local server
|
|
||||||
* Dovecot is running on the local server, and SASL is used to allow authenticated clients to mail out.
|
|
||||||
|
|
||||||
|
|
||||||
## /etc/postfix/main.cf
|
|
||||||
|
|
||||||
The proxy: bits are optional, you may need to install an additional postfix package on your server to enable them.
|
|
||||||
|
|
||||||
i.e. proxy:pgsql:/path/to/file is equivalent to pgsql:/path/to/file. Use of 'proxy:' may lead to a small performance boost.
|
|
||||||
|
|
||||||
|
|
||||||
```
|
|
||||||
relay_domains = $mydestination, proxy:pgsql:/etc/postfix/pgsql/relay_domains.cf
|
|
||||||
virtual_alias_maps = proxy:pgsql:/etc/postfix/pgsql/virtual_alias_maps.cf
|
|
||||||
virtual_mailbox_domains = proxy:pgsql:/etc/postfix/pgsql/virtual_domains_maps.cf
|
|
||||||
virtual_mailbox_maps = proxy:pgsql:/etc/postfix/pgsql/virtual_mailbox_maps.cf
|
|
||||||
virtual_mailbox_base = /var/mail/vmail
|
|
||||||
virtual_mailbox_limit = 512000000
|
|
||||||
virtual_minimum_uid = 8
|
|
||||||
virtual_transport = virtual
|
|
||||||
virtual_uid_maps = static:8
|
|
||||||
virtual_gid_maps = static:8
|
|
||||||
local_transport = virtual
|
|
||||||
local_recipient_maps = $virtual_mailbox_maps
|
|
||||||
```
|
|
||||||
|
|
||||||
and for Postfix SASL support :
|
|
||||||
|
|
||||||
```
|
|
||||||
# SASL Auth for SMTP relaying
|
|
||||||
smtpd_sasl_type = dovecot
|
|
||||||
smtpd_sasl_path = private/auth
|
|
||||||
smtpd_sasl_authenticated_header = yes
|
|
||||||
smtpd_sasl_auth_enable = yes
|
|
||||||
smtpd_sasl_security_options = noanonymous
|
|
||||||
broken_sasl_auth_clients = yes
|
|
||||||
```
|
|
||||||
|
|
||||||
## /etc/postfix/pgsql/relay_domains.cf
|
|
||||||
|
|
||||||
```
|
|
||||||
user = postfix
|
|
||||||
password = whatever
|
|
||||||
hosts = localhost
|
|
||||||
dbname = postfix
|
|
||||||
query = SELECT domain FROM domain WHERE domain='%s' and backupmx = true
|
|
||||||
```
|
|
||||||
|
|
||||||
## /etc/postfix/pgsql/virtual_alias_maps.cf
|
|
||||||
|
|
||||||
```
|
|
||||||
user = postfix
|
|
||||||
password = whatever
|
|
||||||
hosts = localhost
|
|
||||||
dbname = postfix
|
|
||||||
query = SELECT goto FROM alias WHERE address='%s' AND active = true
|
|
||||||
```
|
|
||||||
|
|
||||||
## /etc/postfix/pgsql/virtual_domains_maps.cf
|
|
||||||
|
|
||||||
```
|
|
||||||
user = postfix
|
|
||||||
password = whatever
|
|
||||||
hosts = localhost
|
|
||||||
dbname = postfix
|
|
||||||
#query = SELECT domain FROM domain WHERE domain='%s'
|
|
||||||
#optional query to use when relaying for backup MX
|
|
||||||
query = SELECT domain FROM domain WHERE domain='%s' and backupmx = false and active = true
|
|
||||||
```
|
|
||||||
|
|
||||||
## /etc/postfix/pgsql/virtual_mailbox_limits.cf
|
|
||||||
|
|
||||||
```
|
|
||||||
# Used for quota
|
|
||||||
user = postfix
|
|
||||||
password = whatever
|
|
||||||
hosts = localhost
|
|
||||||
dbname = postfix
|
|
||||||
query = SELECT quota FROM mailbox WHERE username='%s'
|
|
||||||
```
|
|
||||||
|
|
||||||
## /etc/postfix/pgsql/virtual_mailbox_maps.cf
|
|
||||||
|
|
||||||
```
|
|
||||||
user = postfix
|
|
||||||
password = whatever
|
|
||||||
hosts = localhost
|
|
||||||
dbname = postfix
|
|
||||||
query = SELECT maildir FROM mailbox WHERE username='%s' AND active = true
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
# Dovecot
|
|
||||||
|
|
||||||
(This is from version 2.2.27, Debian Stretch)
|
|
||||||
|
|
||||||
|
|
||||||
## /etc/dovecot/dovecot.conf
|
|
||||||
```
|
|
||||||
mail_location = maildir:/var/mail/vmail/%u/
|
|
||||||
|
|
||||||
namespace inbox {
|
|
||||||
type = private
|
|
||||||
inbox = yes
|
|
||||||
location =
|
|
||||||
mailbox Drafts {
|
|
||||||
special_use = \Drafts
|
|
||||||
}
|
|
||||||
mailbox Junk {
|
|
||||||
special_use = \Junk
|
|
||||||
}
|
|
||||||
mailbox Sent {
|
|
||||||
special_use = \Sent
|
|
||||||
}
|
|
||||||
mailbox "Sent Messages" {
|
|
||||||
special_use = \Sent
|
|
||||||
}
|
|
||||||
mailbox Trash {
|
|
||||||
special_use = \Trash
|
|
||||||
}
|
|
||||||
prefix =
|
|
||||||
}
|
|
||||||
|
|
||||||
protocols = "imap pop3"
|
|
||||||
|
|
||||||
# Requires certificates ...
|
|
||||||
#ssl = yes
|
|
||||||
#ssl_cert = </etc/dovecot/private/something.pem
|
|
||||||
#ssl_key = </etc/letsencrypt/certs/something.key
|
|
||||||
|
|
||||||
login_greeting = My Mail Server
|
|
||||||
# http://wiki2.dovecot.org/Authentication/Mechanisms
|
|
||||||
# login is for outlook express ...
|
|
||||||
auth_mechanisms = plain login
|
|
||||||
#auth_debug = yes
|
|
||||||
#auth_debug_passwords=yes
|
|
||||||
|
|
||||||
# Postfix - Sasl auth support.
|
|
||||||
service auth {
|
|
||||||
# Postfix smtp-auth
|
|
||||||
unix_listener /var/spool/postfix/private/auth {
|
|
||||||
mode = 0660
|
|
||||||
user = postfix
|
|
||||||
group = postfix
|
|
||||||
}
|
|
||||||
# Auth process is run as this user.
|
|
||||||
user = postfix
|
|
||||||
group = postfix
|
|
||||||
}
|
|
||||||
|
|
||||||
service imap {
|
|
||||||
executable = imap
|
|
||||||
}
|
|
||||||
|
|
||||||
userdb {
|
|
||||||
driver = sql
|
|
||||||
args = /etc/dovecot/dovecot-sql.conf
|
|
||||||
}
|
|
||||||
|
|
||||||
passdb {
|
|
||||||
driver = sql
|
|
||||||
args = /etc/dovecot/dovecot-sql.conf
|
|
||||||
}
|
|
||||||
|
|
||||||
# Needs to match Postfix virtual_uid_maps
|
|
||||||
first_valid_uid = 8
|
|
||||||
|
|
||||||
# disallow or allow plaintext auth.
|
|
||||||
disable_plaintext_auth = yes
|
|
||||||
|
|
||||||
mail_plugins = $mail_plugins zlib
|
|
||||||
|
|
||||||
plugin {
|
|
||||||
zlib_save_level = 6
|
|
||||||
zlib_save = gz
|
|
||||||
}
|
|
||||||
protocol imap {
|
|
||||||
mail_plugins = $mail_plugins imap_zlib
|
|
||||||
}
|
|
||||||
|
|
||||||
mail_max_userip_connections = 50
|
|
||||||
log_path = /var/log/dovecot.log
|
|
||||||
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
## /etc/dovecot/dovecot-sql.conf
|
|
||||||
|
|
||||||
Ideally dovecot has a different read only database user.
|
|
||||||
|
|
||||||
|
|
||||||
```
|
|
||||||
connect = host=localhost dbname=postfix user=dovecot password=whatever
|
|
||||||
|
|
||||||
driver = pgsql
|
|
||||||
|
|
||||||
# Default password scheme - change to match your Postfixadmin setting.
|
|
||||||
# depends on your $CONF['encrypt'] setting:
|
|
||||||
# md5crypt -> MD5-CRYPT
|
|
||||||
# md5 -> PLAIN-MD5
|
|
||||||
# cleartext -> PLAIN
|
|
||||||
default_pass_scheme = MD5-CRYPT
|
|
||||||
|
|
||||||
# Query to retrieve password. user can be used to retrieve username in other
|
|
||||||
# formats also.
|
|
||||||
|
|
||||||
password_query = SELECT username AS user,password FROM mailbox WHERE username = '%u' AND active='1'
|
|
||||||
|
|
||||||
# Query to retrieve user information, note uid matches dovecot.conf AND Postfix virtual_uid_maps parameter.
|
|
||||||
user_query = SELECT '/var/vmail/mail/' || maildir AS home, 8 as uid, 8 as gid FROM mailbox WHERE username = '%u' AND active = '1'
|
|
||||||
```
|
|
||||||
@ -1,48 +0,0 @@
|
|||||||
*Description
|
|
||||||
|
|
||||||
This extension adds support for password expiration.
|
|
||||||
It is designed to have expiration on users passwords. An email is sent when the password is expiring in 30 days, then 14 days, then 7 days.
|
|
||||||
It is strongly inspired by https://abridge2devnull.com/posts/2014/09/29/dovecot-user-password-expiration-notifications-updated-4122015/, and adapted to fit with Postfix Admin & Roundcube's password plugin
|
|
||||||
Expiration unit is day
|
|
||||||
Expiration value for domain is set through Postfix Admin GUI
|
|
||||||
|
|
||||||
*Installation
|
|
||||||
|
|
||||||
Perform the following changes:
|
|
||||||
|
|
||||||
**Changes in MySQL/MariaDB mailbox table (as defined in $CONF['database_tables'] from config.inc.php):
|
|
||||||
|
|
||||||
You are invited to backup your DB first, and ensure the table name is correct.
|
|
||||||
|
|
||||||
Execute the attached SQL script (password_expiration.sql) that will add the required columns. The expiration value for existing users will be set to 90 days. If you want a different value, edit line 2 in the script and replace 90 by the required value.
|
|
||||||
|
|
||||||
**Changes in Postfix Admin :
|
|
||||||
|
|
||||||
To enable password expiration, add the following to your config.inc.php file:
|
|
||||||
$CONF['password_expiration'] = 'YES';
|
|
||||||
|
|
||||||
All my tests are performed using $CONF['encrypt'] = 'md5crypt';
|
|
||||||
|
|
||||||
**If you are using Roundcube's password plugin, you should also adapt the $config['password_query'] value.
|
|
||||||
|
|
||||||
I recommend to use:
|
|
||||||
|
|
||||||
$config['password_query'] = 'UPDATE mailbox SET password=%c, modified = now(), password_expiry = now() + interval 90 day';
|
|
||||||
|
|
||||||
of cource you may adapt to the expected expiration value
|
|
||||||
|
|
||||||
All my tests are performed using $config['password_algorithm'] = 'md5-crypt';
|
|
||||||
|
|
||||||
**Changes in Dovecot (adapt if you use another LDA)
|
|
||||||
|
|
||||||
Edit dovecot-mysql.conf file, and replace the user_query (and only this one) by this query:
|
|
||||||
|
|
||||||
password_query = SELECT username as user, password, concat('/var/vmail/', maildir) as userdb_var, concat('maildir:/var/vmail/', maildir) as userdb_mail, 20001 as userdb_uid, 20001 as userdb_gid, m.domain FROM mailbox m, domain d where d.domain = m.domain and m.username = '%u' AND m.active = '1' AND (m.password_expiry > now() or d.password_expiry = 0)
|
|
||||||
|
|
||||||
Of course you may require to adapt the uid, gid, maildir and table to your setup
|
|
||||||
|
|
||||||
**Changes in system
|
|
||||||
|
|
||||||
You need to have a script running on a daily basis to check password expiration and send emails 30, 14 and 7 days before password expiration (script attached: check_mailpass_expiration.sh).
|
|
||||||
Edit the script to adapt the variables to your setup.
|
|
||||||
This script is using postfixadmin.my.cnf to read credentials. Edit this file to enter a DB user that is allowed to access (read-write) your database. This file should be protected from any user (chmod 400).
|
|
||||||
@ -1,41 +0,0 @@
|
|||||||

|
|
||||||
[](https://gitter.im/postfixadmin/Lobby)
|
|
||||||
[](https://coveralls.io/github/postfixadmin/postfixadmin?branch=master)
|
|
||||||

|
|
||||||
[](https://kiwiirc.com/nextclient/irc.freenode.net/#postfixadmin)
|
|
||||||
|
|
||||||
# PostfixAdmin
|
|
||||||
|
|
||||||
An open source, web based interface for managing domains/mailboxes/aliases etc on a Postfix based mail server.
|
|
||||||
|
|
||||||
Integrates with :
|
|
||||||
|
|
||||||
- Postfix
|
|
||||||
- IMAP/POP3 server (e.g. Dovecot or Courier)
|
|
||||||
- Database backend (choose one of: sqlite, mysql, postgresql)
|
|
||||||
- Fetchmail (optional)
|
|
||||||
|
|
||||||
## Features
|
|
||||||
|
|
||||||
- Unlimited domains/aliases/mailboxes
|
|
||||||
- Optional storage quota support
|
|
||||||
- Optional password expiry (beta)
|
|
||||||
- Multiple password hashing formats
|
|
||||||
- Supports PostgreSQL, MySQL, MariaDB, SQLite database backends (choose one)
|
|
||||||
- Supports retrieval of mail from a remote POP3 server (via fetchmail)
|
|
||||||
- Vacation / Autoresponder / Out Of Office support
|
|
||||||
- Users have the ability to login, change their password or vacation (out of office) status.
|
|
||||||
- Integration with Squirrelmail / Roundcube (via plugins)
|
|
||||||
- Optional XMLRPC based API
|
|
||||||
- Supports PHP5.6+
|
|
||||||
|
|
||||||
## Useful Links
|
|
||||||
|
|
||||||
- [Probably all you need to read (pdf)](http://blog.cboltz.de/uploads/postfixadmin-30-english.pdf)
|
|
||||||
- http://postfixadmin.sf.net - the current homepage for the project
|
|
||||||
- [Docker Images](https://github.com/postfixadmin/docker)
|
|
||||||
- [What is it? (txt)](/DOCUMENTS/POSTFIXADMIN.txt)
|
|
||||||
- [Installation instructions](/INSTALL.TXT)
|
|
||||||
- [Wiki](https://sourceforge.net/p/postfixadmin/wiki/)
|
|
||||||
- [Mailing list](https://sourceforge.net/p/postfixadmin/discussion/676076)
|
|
||||||
- [IRC channel](irc://irc.freenode.net/postfixadmin) (#postfixadmin on irc.freenode.net).
|
|
||||||
@ -1,93 +0,0 @@
|
|||||||
This file is not exhaustive.
|
|
||||||
|
|
||||||
Please feel free to add yourself and a summary of changes to this file at the bottom if creating a pull request.
|
|
||||||
|
|
||||||
|
|
||||||
Postfixadmin was originally written by Mischa Peters <mischa at high5 dot net>
|
|
||||||
|
|
||||||
Copyright (c) 2002 - 2005 High5!
|
|
||||||
Licensed under GPL for more info check GPL-LICENSE.TXT
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Additional authors:
|
|
||||||
|
|
||||||
2004/07/13 David Osborn <ossdev at daocon.com>
|
|
||||||
strict, processes domain level aliases, more
|
|
||||||
subroutines, send reply from original to address
|
|
||||||
|
|
||||||
2004/11/09 David Osborn <ossdev at daocon.com>
|
|
||||||
Added syslog support
|
|
||||||
Slightly better logging which includes messageid
|
|
||||||
Avoid infinite loops with domain aliases
|
|
||||||
|
|
||||||
2005-01-19 Troels Arvin <troels at arvin.dk>
|
|
||||||
PostgreSQL-version.
|
|
||||||
Normalized DB schema from one vacation table ("vacation")
|
|
||||||
to two ("vacation", "vacation_notification"). Uses
|
|
||||||
referential integrity CASCADE action to simplify cleanup
|
|
||||||
when a user is no longer on vacation.
|
|
||||||
Inserting variables into queries stricly by prepare()
|
|
||||||
to try to avoid SQL injection.
|
|
||||||
International characters are now handled well.
|
|
||||||
|
|
||||||
2005-01-21 Troels Arvin <troels at arvin.dk>
|
|
||||||
Uses the Email::Valid package to avoid sending notices
|
|
||||||
to obviously invalid addresses.
|
|
||||||
|
|
||||||
2007-08-15 David Goodwin <david at palepurple.co.uk>
|
|
||||||
Use the Perl Mail::Sendmail module for sending mail
|
|
||||||
Check for headers that start with blank lines (patch from forum)
|
|
||||||
|
|
||||||
2007-08-20 Martin Ambroz <amsys at trustica.cz>
|
|
||||||
Added initial Unicode support
|
|
||||||
|
|
||||||
2008-05-09 Fabio Bonelli <fabiobonelli at libero.it>
|
|
||||||
Properly handle failed queries to vacation_notification.
|
|
||||||
Fixed log reporting.
|
|
||||||
|
|
||||||
2008-07-29 Patch from Luxten to add repeat notification after timeout. See:
|
|
||||||
https://sourceforge.net/tracker/index.php?func=detail&aid=2031631&group_id=191583&atid=937966
|
|
||||||
|
|
||||||
2008-08-01 Luigi Iotti <luigi at iotti dot biz>
|
|
||||||
Use envelope sender/recipient instead of using
|
|
||||||
From: and To: header fields;
|
|
||||||
Support to good vacation behavior as in
|
|
||||||
http://www.irbs.net/internet/postfix/0707/0954.html
|
|
||||||
(needs to be tested);
|
|
||||||
|
|
||||||
2008-08-04 David Goodwin <david at palepurple dot co dot uk>
|
|
||||||
Use Log4Perl
|
|
||||||
Added better testing (and -t option)
|
|
||||||
|
|
||||||
2009-06-29 Stevan Bajic <stevan at bajic.ch>
|
|
||||||
Add Mail::Sender for SMTP auth + more flexibility
|
|
||||||
|
|
||||||
2009-07-07 Stevan Bajic <stevan at bajic.ch>
|
|
||||||
Add better alias lookups
|
|
||||||
Check for more heades from Anti-Virus/Anti-Spam solutions
|
|
||||||
|
|
||||||
2009-08-10 Sebastian <reg9009 at yahoo dot de>
|
|
||||||
Adjust SQL query for vacation timeframe. It is now possible to set from/until date for vacation message.
|
|
||||||
|
|
||||||
2012-04-1 Nikolaos Topp <info at ichier.de>
|
|
||||||
Add configuration parameter $smtp_client in order to get mails through
|
|
||||||
postfix helo-checks, using check_helo_access whitelist without permitting 'localhost' default style stuff
|
|
||||||
|
|
||||||
2012-04-19 Jan Kruis <jan at crossreference dot nl>
|
|
||||||
change SQL query for vacation into function.
|
|
||||||
Add sub get_interval()
|
|
||||||
Gives the user the option to set the interval time ( 0 = one reply, 1 = autoreply, > 1 = Delay reply )
|
|
||||||
See https://sourceforge.net/tracker/?func=detail&aid=3508083&group_id=191583&atid=937966
|
|
||||||
|
|
||||||
2012-06-18 Christoph Lechleitner <christoph.lechleitner@iteg.at>
|
|
||||||
Add capability to include the subject of the original mail in the subject of the vacation message.
|
|
||||||
A good vacation subject could be: 'Re: $SUBJECT'
|
|
||||||
Also corrected log entry about "Already informed ..." to show the $orig_from, not $email
|
|
||||||
|
|
||||||
2017-07-14 Thomas Kempf <tkempf@hueper.de>
|
|
||||||
Replacing deprecated Mail::Sender by Email::Sender
|
|
||||||
Add configuration parameter $no_vacation_pattern in order to exlude specific alias-recipients from
|
|
||||||
sending vacation mails, even if one or multiple of the recipients the alias points to has vacation
|
|
||||||
currently active.
|
|
||||||
|
|
||||||
@ -0,0 +1,150 @@
|
|||||||
|
##################################################
|
||||||
|
# Virtual Vacation for Postfix Admin Release 2.x #
|
||||||
|
##################################################
|
||||||
|
#
|
||||||
|
# Postfix Admin (Virtual Vacation)
|
||||||
|
# by Mischa Peters <mischa at high5 dot net>
|
||||||
|
# Copyright (c) 2002 - 2005 High5!
|
||||||
|
# Licensed under GPL for more info check GPL-LICENSE.TXT
|
||||||
|
#
|
||||||
|
# Modified by: Nicholas Paufler <npaufler at incentre dot net> (12/06/2004)
|
||||||
|
#
|
||||||
|
|
||||||
|
REQUIRED!
|
||||||
|
---------
|
||||||
|
There are a bunch of Perl modules which need installing, depending on your
|
||||||
|
distribution these may be available through your package management tool, or
|
||||||
|
will need installing through CPAN.
|
||||||
|
|
||||||
|
A full list of required modules can be found in the source of vacation.pl.
|
||||||
|
|
||||||
|
It obviously relies on Perl
|
||||||
|
|
||||||
|
|
||||||
|
About Virtual Vacation
|
||||||
|
----------------------
|
||||||
|
Virtual 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
|
||||||
|
|
||||||
|
#/etc/group
|
||||||
|
vacation:*:65501:
|
||||||
|
|
||||||
|
2. Create a directory
|
||||||
|
---------------------
|
||||||
|
Create a directory, for example /var/spool/vacation, that is accessible
|
||||||
|
only to the "vacation" user. This is where the vacation script is supposed
|
||||||
|
to store its temporary files.
|
||||||
|
|
||||||
|
|
||||||
|
3. Copy the files
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
Copy the vacation.pl file to the directory you created above:
|
||||||
|
|
||||||
|
$ cp vacation.pl <HOME>/vacation.pl
|
||||||
|
$ chown -R vacation:vacation <HOME>
|
||||||
|
|
||||||
|
Which will then look something like:
|
||||||
|
|
||||||
|
-rwx------ 1 vacation vacation 3356 Dec 21 00:00 vacation.pl*
|
||||||
|
|
||||||
|
4. Setup the transport type
|
||||||
|
--------------------
|
||||||
|
Define the transport type in the Postfix master file:
|
||||||
|
|
||||||
|
#/etc/postfix/master.cf:
|
||||||
|
vacation unix - n n - - pipe
|
||||||
|
flags=Rq user=vacation argv=/var/spool/vacation/vacation.pl -f ${sender} -- ${recipient}
|
||||||
|
|
||||||
|
Tell Postfix to use a transport maps file, so add the following to your
|
||||||
|
Postfix main.cf:
|
||||||
|
|
||||||
|
#/etc/postfix/main.cf:
|
||||||
|
transport_maps = hash:/etc/postfix/transport
|
||||||
|
|
||||||
|
Then add the transport definition to the newly created transport file.
|
||||||
|
Obviously, change yourdomain.com to your own domain. This can be any
|
||||||
|
arbitrary domain, and it is easiest if you just choose one that will be used
|
||||||
|
for all your domains.
|
||||||
|
|
||||||
|
#/etc/postfix/transport
|
||||||
|
autoreply.yourdomain.com vacation:
|
||||||
|
|
||||||
|
(You may need to create an entry in /etc/hosts for your non-existant domain)
|
||||||
|
|
||||||
|
Execute "postmap /etc/postfix/transport" to build the hashed database.
|
||||||
|
|
||||||
|
Execute "postfix reload" to complete the change.
|
||||||
|
|
||||||
|
|
||||||
|
5. Create the table
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
The database table should have already been created for you, by running
|
||||||
|
the 'upgrade.php' script when installing Postfixadmin.
|
||||||
|
|
||||||
|
If security is an issue for you, read ../DOCUMENTS/Security.txt
|
||||||
|
|
||||||
|
6. Edit vacation.pl
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
The perl vacation.pl script needs minor modification to know which database
|
||||||
|
you are using, and also how to connect to the database.
|
||||||
|
|
||||||
|
Namely :
|
||||||
|
|
||||||
|
Change any variables starting with '$db_' and '$db_type' to either 'mysql' or 'pgsql'.
|
||||||
|
|
||||||
|
Change the $vacation_domain variable to match what you entered in your /etc/postfix/transport
|
||||||
|
file.
|
||||||
|
|
||||||
|
What do these files do?
|
||||||
|
-----------------------
|
||||||
|
When a user enables a vacation message on their account, the alias
|
||||||
|
definition is changed so that in addition to delivering to their own
|
||||||
|
mailbox, it also delivers to a dummy alias which calls the vacation.pl
|
||||||
|
program. In other words, if joeuser@domain.com enables their vacation, the
|
||||||
|
entry in the alias database table will deliver mail to
|
||||||
|
joeuser@something.com, as well as
|
||||||
|
joeuser#something.com@autoreply.yourdomain.com
|
||||||
|
|
||||||
|
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 database. In the first couple of lines you have to specify the
|
||||||
|
database, username and password for it.
|
||||||
|
NOTE: Make sure that the path to perl 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.
|
||||||
@ -1,245 +0,0 @@
|
|||||||
# About Virtual Vacation
|
|
||||||
|
|
||||||
AKA 'An out of office' automated email response.
|
|
||||||
|
|
||||||
The vacation script runs as service within Postfix's master.cf configuration file.
|
|
||||||
Mail is sent to the vacation service via a transport table mapping.
|
|
||||||
When users mark themselves as away on vacation, an alias is added to their account
|
|
||||||
sending a copy of all mail to them to the vacation service.
|
|
||||||
|
|
||||||
e.g. mail to billy@goat.com will be delivered to
|
|
||||||
|
|
||||||
* billy@goat.com AND
|
|
||||||
* billy#goat.com@autoreply.goat.com
|
|
||||||
|
|
||||||
Mail to @autoreply.goat.com is caught by the vacation.pl script and a reply
|
|
||||||
will be sent based on various settings. By default a reply is only sent once.
|
|
||||||
|
|
||||||
# Dependencies / Requirements
|
|
||||||
|
|
||||||
There are a bunch of Perl modules which need installing, depending on your
|
|
||||||
distribution these may be available through your package management tool, or
|
|
||||||
will need installing through CPAN.
|
|
||||||
|
|
||||||
```
|
|
||||||
Email::Valid
|
|
||||||
Email::Sender
|
|
||||||
Email::Simple
|
|
||||||
Email::Valid
|
|
||||||
Try::Tiny
|
|
||||||
MIME::Charset
|
|
||||||
MIME::EncWords
|
|
||||||
Log::Log4perl
|
|
||||||
Log::Dispatch
|
|
||||||
GetOpt::Std
|
|
||||||
Net::DNS;
|
|
||||||
```
|
|
||||||
|
|
||||||
You may install these via CPAN, or through your package tool.
|
|
||||||
|
|
||||||
CPAN: 'perl -MCPAN -e shell', then 'install Module::Whatever'
|
|
||||||
|
|
||||||
|
|
||||||
## Debian Systems
|
|
||||||
|
|
||||||
|
|
||||||
```bash
|
|
||||||
apt-get install libemail-sender-perl libemail-simple-perl libemail-valid-perl libtry-tiny-perl libdbd-pg-perl libemail-mime-perl liblog-log4perl-perl liblog-dispatch-perl libgetopt-argvfile-perl libmime-charset-perl libmime-encwords-perl libnet-dns-perl
|
|
||||||
```
|
|
||||||
|
|
||||||
and one of :
|
|
||||||
```bash
|
|
||||||
libdbd-pg-perl or libdbd-mysql-perl
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
# Installing 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.
|
|
||||||
|
|
||||||
Also create a separate "vacation" group.
|
|
||||||
|
|
||||||
This should look like this:
|
|
||||||
|
|
||||||
```raw
|
|
||||||
#/etc/passwd
|
|
||||||
vacation:*:65501:65501:Virtual Vacation:/nonexistent:/sbin/nologin
|
|
||||||
```
|
|
||||||
|
|
||||||
```raw
|
|
||||||
#/etc/group
|
|
||||||
vacation:*:65501:
|
|
||||||
```
|
|
||||||
|
|
||||||
## 2. Create a log directory or log file
|
|
||||||
|
|
||||||
If you want to log to a file ($log\_to\_file), create a log directory or an
|
|
||||||
empty log file.
|
|
||||||
|
|
||||||
This file or directory needs to be writeable for the "vacation" user.
|
|
||||||
|
|
||||||
Note: If you are logging to syslog, you can skip this step.
|
|
||||||
|
|
||||||
|
|
||||||
## 3. Install vacation.pl
|
|
||||||
|
|
||||||
Create a directory /usr/lib/postfixadmin/ and copy the vacation.pl file to it:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
mkdir /usr/lib/postfixadmin
|
|
||||||
cp vacation.pl /usr/lib/postfixadmin/vacation.pl
|
|
||||||
chown -R root:vacation /usr/lib/postfixadmin
|
|
||||||
chmod 750 /usr/lib/postfixadmin/ /usr/lib/postfixadmin/vacation.pl
|
|
||||||
```
|
|
||||||
|
|
||||||
Which will then look something like:
|
|
||||||
|
|
||||||
```raw
|
|
||||||
-rwxr-x--- 1 root vacation 3356 Dec 21 00:00 vacation.pl*
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
## 4. Setup the transport type
|
|
||||||
|
|
||||||
Define the transport type in the Postfix master file:
|
|
||||||
|
|
||||||
```raw
|
|
||||||
#/etc/postfix/master.cf:
|
|
||||||
vacation unix - n n - - pipe
|
|
||||||
flags=Rq user=vacation argv=/usr/lib/postfixadmin/vacation.pl -f ${sender} -- ${recipient}
|
|
||||||
```
|
|
||||||
|
|
||||||
## 5. Setup the transport maps file
|
|
||||||
|
|
||||||
Tell Postfix to use a transport maps file, so add the following to your
|
|
||||||
Postfix main.cf:
|
|
||||||
|
|
||||||
```raw
|
|
||||||
#/etc/postfix/main.cf:
|
|
||||||
transport_maps = hash:/etc/postfix/transport
|
|
||||||
```
|
|
||||||
|
|
||||||
Then add the transport definition to the newly created transport file.
|
|
||||||
Obviously, change yourdomain.com to your own domain. This can be any
|
|
||||||
arbitrary domain, and it is easiest if you just choose one that will be used
|
|
||||||
for all your domains.
|
|
||||||
|
|
||||||
```raw
|
|
||||||
#/etc/postfix/transport
|
|
||||||
autoreply.yourdomain.com vacation:
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
(You may need to create an entry in /etc/hosts for your non-existant domain)
|
|
||||||
|
|
||||||
Execute
|
|
||||||
```bash
|
|
||||||
postmap /etc/postfix/transport
|
|
||||||
```
|
|
||||||
|
|
||||||
Execute
|
|
||||||
```bash
|
|
||||||
postfix reload
|
|
||||||
```
|
|
||||||
to complete the change.
|
|
||||||
|
|
||||||
|
|
||||||
## 6. Configure vacation.pl
|
|
||||||
|
|
||||||
The perl vacation.pl script needs to know which database you are using, and also
|
|
||||||
how to connect to the database.
|
|
||||||
|
|
||||||
Namely :
|
|
||||||
|
|
||||||
Change any variables starting with '$db\_' and '$db\_type' to either 'mysql' or 'pgsql'.
|
|
||||||
|
|
||||||
Change the $vacation\_domain variable to match what you entered in your /etc/postfix/transport
|
|
||||||
file.
|
|
||||||
|
|
||||||
You can do this in two ways:
|
|
||||||
|
|
||||||
a) edit vacation.pl directly (not recommended!)
|
|
||||||
|
|
||||||
b) create /etc/postfixadmin/vacation.conf and enter your settings there
|
|
||||||
|
|
||||||
Just use perl syntax there to fill the config variables listed in vacation.pl
|
|
||||||
(without the "our" keyword). Example:
|
|
||||||
```perl
|
|
||||||
$db_username = 'mail';
|
|
||||||
1; # required final line - keeps perl happy.
|
|
||||||
```
|
|
||||||
|
|
||||||
To make sure nobody except vacation.pl can read your vacation.conf (including the
|
|
||||||
database password), run
|
|
||||||
|
|
||||||
```bash
|
|
||||||
chown root:vacation /etc/postfixadmin/vacation.conf
|
|
||||||
chmod 640 /etc/postfixadmin/vacation.conf
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
## 7. Check the alias expansion
|
|
||||||
|
|
||||||
Depending on your setup, you may have multiple 'smtpd' service definitions within
|
|
||||||
your postfix master.cf file. This is especially the case if you are also using AMAVIS or
|
|
||||||
another content filtering system when mail is re-injected into Postfix using the smtpd daemon.
|
|
||||||
|
|
||||||
If you are, it's likely that alias expansion may happen more than once, in which case you
|
|
||||||
may see vacation-style responses duplicated. To suppress this behaviour, you need to add:
|
|
||||||
|
|
||||||
```raw
|
|
||||||
-o receive_override_options=no_address_mappings
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
For example :
|
|
||||||
|
|
||||||
```raw
|
|
||||||
smtp inet n - - - 12 smtpd
|
|
||||||
-o content_filter=amavis:[127.0.0.50]:10024
|
|
||||||
-o receive_override_options=no_address_mappings
|
|
||||||
|
|
||||||
127.0.0.1:10025 inet n - - - - smtpd
|
|
||||||
-o smtpd_autorized_xforward_hosts=127.0.0.0/8
|
|
||||||
-o smtpd_client_restrictions=
|
|
||||||
-o smtpd_helo_restrictions=
|
|
||||||
-o smtpd_sender_restrictions=
|
|
||||||
-o smtpd_recipient_restrictions=permit_mynetworks,reject
|
|
||||||
-o mynetworks=127.0.0.0/8
|
|
||||||
-o receive_override_options=no_header_body_checks
|
|
||||||
|
|
||||||
```
|
|
||||||
|
|
||||||
^^^ Alias expansion occurs here, so we don't want it to happen again for the
|
|
||||||
first smtpd daemon (above). If you have per-user settings in amavis,
|
|
||||||
you might want to have no_address_mappings in the smtpd on port 10025
|
|
||||||
instead.
|
|
||||||
|
|
||||||
|
|
||||||
## 8. Security
|
|
||||||
|
|
||||||
If security is an issue for you, read ../DOCUMENTS/Security.txt
|
|
||||||
|
|
||||||
# Postfixadmin
|
|
||||||
|
|
||||||
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.
|
|
||||||
|
|
||||||
|
|
||||||
# Help ! It's not working
|
|
||||||
|
|
||||||
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.
|
|
||||||
|
|
||||||
|
|
||||||
@ -0,0 +1,22 @@
|
|||||||
|
<?php
|
||||||
|
//
|
||||||
|
// Postfix Admin
|
||||||
|
// by Mischa Peters <mischa at high5 dot net>
|
||||||
|
// Copyright (c) 2002 - 2005 High5!
|
||||||
|
// Licensed under GPL for more info check GPL-LICENSE.TXT
|
||||||
|
//
|
||||||
|
// File: index.php
|
||||||
|
//
|
||||||
|
// Template File: -none-
|
||||||
|
//
|
||||||
|
// Template Variables:
|
||||||
|
//
|
||||||
|
// -none-
|
||||||
|
//
|
||||||
|
// Form POST \ GET Variables:
|
||||||
|
//
|
||||||
|
// -none-
|
||||||
|
//
|
||||||
|
header ("Location: ../login.php");
|
||||||
|
exit;
|
||||||
|
?>
|
||||||
@ -0,0 +1,4 @@
|
|||||||
|
<?php
|
||||||
|
header ("Location: ../login.php");
|
||||||
|
exit(0);
|
||||||
|
?>
|
||||||
@ -0,0 +1,131 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Postfix Admin
|
||||||
|
*
|
||||||
|
* LICENSE
|
||||||
|
* This source file is subject to the GPL license that is bundled with
|
||||||
|
* this package in the file LICENSE.TXT.
|
||||||
|
*
|
||||||
|
* Further details on the project are available at :
|
||||||
|
* http://www.postfixadmin.com or http://postfixadmin.sf.net
|
||||||
|
*
|
||||||
|
* @version $Id$
|
||||||
|
* @license GNU GPL v2 or later.
|
||||||
|
*
|
||||||
|
* File: backup.php
|
||||||
|
* Used to save all settings - but only works for MySQL databases.
|
||||||
|
* Template File: -none-
|
||||||
|
*
|
||||||
|
* Template Variables: -none-
|
||||||
|
*
|
||||||
|
* Form POST \ GET Variables: -none-
|
||||||
|
*/
|
||||||
|
|
||||||
|
require_once('common.php');
|
||||||
|
|
||||||
|
authentication_require_role('global-admin');
|
||||||
|
|
||||||
|
(($CONF['backup'] == 'NO') ? header("Location: " . $CONF['postfix_admin_url'] . "/main.php") && exit : '1');
|
||||||
|
|
||||||
|
// TODO: make backup supported for postgres
|
||||||
|
if ('pgsql'==$CONF['database_type'])
|
||||||
|
{
|
||||||
|
print '<p>Sorry: Backup is currently not supported for your DBMS.</p>';
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
SELECT attnum,attname,typname,atttypmod-4,attnotnull,atthasdef,adsrc
|
||||||
|
AS def FROM pg_attribute,pg_class,pg_type,pg_attrdef
|
||||||
|
WHERE pg_class.oid=attrelid AND pg_type.oid=atttypid
|
||||||
|
AND attnum>0 AND pg_class.oid=adrelid AND adnum=attnum AND atthasdef='t' AND lower(relname)='admin'
|
||||||
|
UNION SELECT attnum,attname,typname,atttypmod-4,attnotnull,atthasdef,''
|
||||||
|
AS def FROM pg_attribute,pg_class,pg_type
|
||||||
|
WHERE pg_class.oid=attrelid
|
||||||
|
AND pg_type.oid=atttypid
|
||||||
|
AND attnum>0
|
||||||
|
AND atthasdef='f'
|
||||||
|
AND lower(relname)='admin'
|
||||||
|
$db = $_GET['db'];
|
||||||
|
$cmd = "pg_dump -c -D -f /tix/miner/miner.sql -F p -N -U postgres $db";
|
||||||
|
$res = `$cmd`;
|
||||||
|
// Alternate: $res = shell_exec($cmd);
|
||||||
|
echo $res;
|
||||||
|
*/
|
||||||
|
|
||||||
|
if ($_SERVER['REQUEST_METHOD'] == "GET")
|
||||||
|
{
|
||||||
|
umask (077);
|
||||||
|
$path = (ini_get('upload_tmp_dir') != '') ? ini_get('upload_tmp_dir') : '/tmp/';
|
||||||
|
$filename = "postfixadmin-" . date ("Ymd") . "-" . getmypid() . ".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 = "<div class=\"error_msg\">Cannot open file ($backup)</div>";
|
||||||
|
include ("templates/header.php");
|
||||||
|
include ("templates/menu.php");
|
||||||
|
include ("templates/message.php");
|
||||||
|
include ("templates/footer.php");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
fwrite ($fh, $header);
|
||||||
|
|
||||||
|
$tables = array(
|
||||||
|
'admin',
|
||||||
|
'alias',
|
||||||
|
'alias_domain',
|
||||||
|
'config',
|
||||||
|
'domain',
|
||||||
|
'domain_admins',
|
||||||
|
'fetchmail',
|
||||||
|
'log',
|
||||||
|
'mailbox',
|
||||||
|
'vacation',
|
||||||
|
'vacation_notification'
|
||||||
|
);
|
||||||
|
|
||||||
|
for ($i = 0 ; $i < sizeof ($tables) ; ++$i)
|
||||||
|
{
|
||||||
|
$result = db_query ("SHOW CREATE TABLE " . table_by_key($tables[$i]));
|
||||||
|
if ($result['rows'] > 0)
|
||||||
|
{
|
||||||
|
while ($row = db_array ($result['result']))
|
||||||
|
{
|
||||||
|
fwrite ($fh, "$row[1];\n\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for ($i = 0 ; $i < sizeof ($tables) ; ++$i)
|
||||||
|
{
|
||||||
|
$result = db_query ("SELECT * FROM " . table_by_key($tables[$i]));
|
||||||
|
if ($result['rows'] > 0)
|
||||||
|
{
|
||||||
|
while ($row = db_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: text/plain");
|
||||||
|
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");
|
||||||
|
unlink ("$backup");
|
||||||
|
fpassthru ($download_backup);
|
||||||
|
}
|
||||||
|
/* vim: set expandtab softtabstop=3 tabstop=3 shiftwidth=3: */
|
||||||
|
?>
|
||||||
@ -0,0 +1,97 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Postfix Admin
|
||||||
|
*
|
||||||
|
* LICENSE
|
||||||
|
* This source file is subject to the GPL license that is bundled with
|
||||||
|
* this package in the file LICENSE.TXT.
|
||||||
|
*
|
||||||
|
* Further details on the project are available at :
|
||||||
|
* http://www.postfixadmin.com or http://postfixadmin.sf.net
|
||||||
|
*
|
||||||
|
* @version $Id$
|
||||||
|
* @license GNU GPL v2 or later.
|
||||||
|
*
|
||||||
|
* File: broadcast-message.php
|
||||||
|
* Used to send a message to _ALL_ users with mailboxes on this server.
|
||||||
|
*
|
||||||
|
* Template File: broadcast-message.php
|
||||||
|
*
|
||||||
|
* Template Variables: -none-
|
||||||
|
*
|
||||||
|
* Form POST \ GET Variables:
|
||||||
|
*
|
||||||
|
* name
|
||||||
|
* subject
|
||||||
|
* message
|
||||||
|
*/
|
||||||
|
|
||||||
|
require_once('common.php');
|
||||||
|
|
||||||
|
authentication_require_role('global-admin');
|
||||||
|
|
||||||
|
if ($CONF['sendmail'] != 'YES') {
|
||||||
|
header("Location: " . $CONF['postfix_admin_url'] . "/main.php");
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
$SESSID_USERNAME = authentication_get_username();
|
||||||
|
|
||||||
|
if ($_SERVER['REQUEST_METHOD'] == "POST")
|
||||||
|
{
|
||||||
|
if (empty($_POST['subject']) || empty($_POST['message']) || empty($_POST['name']))
|
||||||
|
{
|
||||||
|
$error = 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$q = 'select username from mailbox union '.
|
||||||
|
'select goto from alias '.
|
||||||
|
'where goto not in (select username from mailbox)';
|
||||||
|
|
||||||
|
$result = db_query ($q);
|
||||||
|
if ($result['rows'] > 0)
|
||||||
|
{
|
||||||
|
$b_name = mb_encode_mimeheader( $_POST['name'], 'UTF-8', 'Q');
|
||||||
|
$b_subject = mb_encode_mimeheader( $_POST['subject'], 'UTF-8', 'Q');
|
||||||
|
$b_message = base64_encode($_POST['message']);
|
||||||
|
|
||||||
|
$i = 0;
|
||||||
|
while ($row = db_array ($result['result'])) {
|
||||||
|
$fTo = $row[0];
|
||||||
|
$fHeaders = 'To: ' . $fTo . "\n";
|
||||||
|
$fHeaders .= 'From: ' . $b_name . ' <' . $CONF['admin_email'] . ">\n";
|
||||||
|
$fHeaders .= 'Subject: ' . $b_subject . "\n";
|
||||||
|
$fHeaders .= 'MIME-Version: 1.0' . "\n";
|
||||||
|
$fHeaders .= 'Content-Type: text/plain; charset=UTF-8' . "\n";
|
||||||
|
$fHeaders .= 'Content-Transfer-Encoding: base64' . "\n";
|
||||||
|
|
||||||
|
$fHeaders .= $b_message;
|
||||||
|
|
||||||
|
if (!smtp_mail ($fTo, $CONF['admin_email'], $fHeaders))
|
||||||
|
{
|
||||||
|
$tMessage .= "<br />" . $PALANG['pSendmail_result_error'] . "<br />";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$tMessage .= "<br />" . $PALANG['pSendmail_result_success'] . "<br />";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
include ("templates/header.php");
|
||||||
|
include ("templates/menu.php");
|
||||||
|
echo '<p>'.$PALANG['pBroadcast_success'].'</p>';
|
||||||
|
include ("templates/footer.php");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($_SERVER['REQUEST_METHOD'] == "GET" || $error == 1)
|
||||||
|
{
|
||||||
|
include ("templates/header.php");
|
||||||
|
include ("templates/menu.php");
|
||||||
|
include ("templates/broadcast-message.php");
|
||||||
|
include ("templates/footer.php");
|
||||||
|
}
|
||||||
|
|
||||||
|
/* vim: set expandtab softtabstop=3 tabstop=3 shiftwidth=3: */
|
||||||
|
?>
|
||||||
@ -1,20 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
#Adapt to your setup
|
|
||||||
|
|
||||||
POSTFIX_DB="postfix_test"
|
|
||||||
MYSQL_CREDENTIALS_FILE="postfixadmin.my.cnf"
|
|
||||||
|
|
||||||
REPLY_ADDRESS=noreply@example.com
|
|
||||||
|
|
||||||
# Change this list to change notification times and when ...
|
|
||||||
for INTERVAL in 30 14 7
|
|
||||||
do
|
|
||||||
LOWER=$(( $INTERVAL - 1 ))
|
|
||||||
|
|
||||||
QUERY="SELECT username,password_expiry FROM mailbox WHERE password_expiry > now() + interval $LOWER DAY AND password_expiry < NOW() + interval $INTERVAL DAY"
|
|
||||||
|
|
||||||
mysql --defaults-extra-file="$MYSQL_CREDENTIALS_FILE" "$POSTFIX_DB" -B -e "$QUERY" | while read -a RESULT ; do
|
|
||||||
echo -e "Dear User, \n Your password will expire on ${RESULT[1]}" | mail -s "Password 30 days before expiration notication" -r $REPLY_ADDRESS ${RESULT[0]}
|
|
||||||
done
|
|
||||||
|
|
||||||
done
|
|
||||||
@ -1,101 +1,63 @@
|
|||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* Postfix Admin
|
* Postfix Admin
|
||||||
*
|
*
|
||||||
* LICENSE
|
* LICENSE
|
||||||
* This source file is subject to the GPL license that is bundled with
|
* This source file is subject to the GPL license that is bundled with
|
||||||
* this package in the file LICENSE.TXT.
|
* this package in the file LICENSE.TXT.
|
||||||
*
|
*
|
||||||
* Further details on the project are available at http://postfixadmin.sf.net
|
* Further details on the project are available at :
|
||||||
*
|
* http://www.postfixadmin.com or http://postfixadmin.sf.net
|
||||||
* @license GNU GPL v2 or later.
|
*
|
||||||
*
|
* @version $Id$
|
||||||
|
* @license GNU GPL v2 or later.
|
||||||
|
*
|
||||||
* File: common.php
|
* File: common.php
|
||||||
* All pages should include this file - which itself sets up the necessary
|
* All pages should include this file - which itself sets up the necessary
|
||||||
* environment and ensures other functions are loaded.
|
* environment and ensures other functions are loaded.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (!defined('POSTFIXADMIN')) { # already defined if called from setup.php
|
if(!defined('POSTFIXADMIN')) {
|
||||||
define('POSTFIXADMIN', 1); # checked in included files
|
session_start();
|
||||||
|
}
|
||||||
if (!defined('POSTFIXADMIN_CLI')) {
|
define('POSTFIXADMIN', 1); # checked in included files
|
||||||
// this is the default; see also https://sourceforge.net/p/postfixadmin/bugs/347/
|
|
||||||
session_cache_limiter('nocache');
|
function incorrect_setup() {
|
||||||
session_name('postfixadmin_session');
|
global $incpath;
|
||||||
session_start();
|
# we ask the user to delete setup.php, which makes a blind redirect a bad idea
|
||||||
|
if(!is_file("$incpath/setup.php")) {
|
||||||
if (empty($_SESSION['flash'])) {
|
die ("config.inc.php does not exist or is not configured correctly. Please re-install setup.php and create/fix your config.");
|
||||||
$_SESSION['flash'] = array();
|
} else {
|
||||||
|
# common.php is indirectly included in setup.php (via upgrade.php) - avoid endless redirect loop
|
||||||
|
if (!preg_match('/setup\.php$/', $_SERVER['SCRIPT_NAME'])) {
|
||||||
|
header("Location: setup.php");
|
||||||
|
exit(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$incpath = dirname(__FILE__);
|
$incpath = dirname(__FILE__);
|
||||||
|
(ini_get('magic_quotes_gpc') ? ini_set('magic_quotes_runtime', '0') : '1');
|
||||||
|
(ini_get('magic_quotes_gpc') ? ini_set('magic_quotes_sybase', '0') : '1');
|
||||||
|
|
||||||
/**
|
if(ini_get('register_globals')) {
|
||||||
* @param string $class
|
die("Please turn off register_globals; edit your php.ini");
|
||||||
* __autoload implementation, for use with spl_autoload_register().
|
|
||||||
*/
|
|
||||||
function postfixadmin_autoload($class) {
|
|
||||||
$PATH = dirname(__FILE__) . '/model/' . $class . '.php';
|
|
||||||
|
|
||||||
if (is_file($PATH)) {
|
|
||||||
require_once($PATH);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
spl_autoload_register('postfixadmin_autoload');
|
require_once("$incpath/variables.inc.php");
|
||||||
|
|
||||||
if (!is_file("$incpath/config.inc.php")) {
|
if(!is_file("$incpath/config.inc.php")) {
|
||||||
die("config.inc.php is missing!");
|
// incorrectly setup...
|
||||||
|
incorrect_setup();
|
||||||
}
|
}
|
||||||
|
|
||||||
global $CONF;
|
|
||||||
|
|
||||||
|
|
||||||
require_once("$incpath/config.inc.php");
|
require_once("$incpath/config.inc.php");
|
||||||
|
if(isset($CONF['configured'])) {
|
||||||
|
if($CONF['configured'] == FALSE) {
|
||||||
if (isset($CONF['configured']) && !defined('PHPUNIT_TEST')) {
|
incorrect_setup();
|
||||||
if ($CONF['configured'] == false) {
|
|
||||||
die("Please edit config.local.php - change \$CONF['configured'] to true after specifying appropriate local settings (database_type etc)");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Config::write($CONF);
|
|
||||||
|
|
||||||
$PALANG = [];
|
|
||||||
require_once("$incpath/languages/language.php");
|
require_once("$incpath/languages/language.php");
|
||||||
require_once("$incpath/functions.inc.php");
|
require_once("$incpath/functions.inc.php");
|
||||||
if (extension_loaded('Phar') && ( version_compare(PHP_VERSION, '7.0.0') < 0)) {
|
require_once("$incpath/languages/" . check_language () . ".lang");
|
||||||
require_once("$incpath/lib/random_compat.phar");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (defined('POSTFIXADMIN_CLI')) {
|
|
||||||
$language = 'en'; # TODO: make configurable or autodetect from locale settings
|
|
||||||
} else {
|
|
||||||
$language = check_language(); # TODO: storing the language only at login instead of calling check_language() on every page would save some processor cycles ;-)
|
|
||||||
$_SESSION['lang'] = $language;
|
|
||||||
}
|
|
||||||
if (!empty($language)) {
|
|
||||||
require_once("$incpath/languages/" . $language . ".lang");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!empty($CONF['language_hook']) && function_exists($CONF['language_hook'])) {
|
|
||||||
$hook_func = $CONF['language_hook'];
|
|
||||||
$PALANG = $hook_func($PALANG, $language);
|
|
||||||
}
|
|
||||||
|
|
||||||
Config::write('__LANG', $PALANG);
|
|
||||||
|
|
||||||
unset($incpath);
|
|
||||||
|
|
||||||
if (!defined('POSTFIXADMIN_CLI')) {
|
|
||||||
if (!is_file(dirname(__FILE__) . "/lib/smarty.inc.php")) {
|
|
||||||
die("smarty.inc.php is missing! Something is wrong...");
|
|
||||||
}
|
|
||||||
require_once(dirname(__FILE__) . "/lib/smarty.inc.php");
|
|
||||||
}
|
|
||||||
|
|
||||||
/* vim: set expandtab softtabstop=4 tabstop=4 shiftwidth=4: */
|
/* vim: set expandtab softtabstop=4 tabstop=4 shiftwidth=4: */
|
||||||
|
|||||||
@ -1,47 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "postfixadmin/postfixadmin",
|
|
||||||
"description": "web based administration interface for Postfix mail servers",
|
|
||||||
"type": "project",
|
|
||||||
"license": "GPL-2.0",
|
|
||||||
"scripts": {
|
|
||||||
"build" : [
|
|
||||||
"@check-format",
|
|
||||||
"@lint",
|
|
||||||
"@test-fixup",
|
|
||||||
"@psalm",
|
|
||||||
"@test"
|
|
||||||
],
|
|
||||||
"check-format": "php-cs-fixer fix --ansi --dry-run --diff",
|
|
||||||
"format": "php-cs-fixer fix --ansi",
|
|
||||||
"lint": "@php ./vendor/bin/parallel-lint --exclude vendor/ --exclude lib/block_random_int.php --exclude lib/array_column.php .",
|
|
||||||
"test": "DATABASE=sqlite ./vendor/bin/phpunit --coverage-clover ./clover.xml tests/",
|
|
||||||
"test-fixup": "mkdir -p templates_c ; test -f config.local.php || touch config.local.php",
|
|
||||||
"psalm": "@php ./vendor/bin/psalm --show-info=false "
|
|
||||||
},
|
|
||||||
"require": {
|
|
||||||
"php": ">=7.0"
|
|
||||||
},
|
|
||||||
"require-dev": {
|
|
||||||
"ext-mysqli": "*",
|
|
||||||
"ext-sqlite3": "*",
|
|
||||||
"friendsofphp/php-cs-fixer": "*",
|
|
||||||
"php-parallel-lint/php-parallel-lint": "^1.0",
|
|
||||||
"php": ">7.2.0",
|
|
||||||
"cedx/coveralls": "^11.0",
|
|
||||||
"phpunit/phpunit": "8.*",
|
|
||||||
"vimeo/psalm":"^3.0",
|
|
||||||
"shardj/zf1-future" : "^1.12"
|
|
||||||
},
|
|
||||||
"autoload": {
|
|
||||||
"files": [
|
|
||||||
"config.inc.php",
|
|
||||||
"functions.inc.php",
|
|
||||||
"lib/smarty/libs/bootstrap.php"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"support": {
|
|
||||||
"irc": "irc://irc.freenode.org/postfixadmin",
|
|
||||||
"issues": "https://github.com/postfixadmin/postfixadmin/issues",
|
|
||||||
"chat": "https://gitter.im/postfixadmin/Lobby"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,45 +0,0 @@
|
|||||||
url_main = main.php
|
|
||||||
url_editactive = editactive.php?table=
|
|
||||||
# list_admin
|
|
||||||
url_list_admin = list.php?table=admin
|
|
||||||
url_create_admin = edit.php?table=admin
|
|
||||||
# list-domain
|
|
||||||
url_list_domain = list.php?table=domain
|
|
||||||
url_edit_domain = edit.php?table=domain
|
|
||||||
# list-virtual
|
|
||||||
url_list_virtual = list-virtual.php
|
|
||||||
url_create_mailbox = edit.php?table=mailbox
|
|
||||||
url_create_alias = edit.php?table=alias
|
|
||||||
url_create_alias_domain = edit.php?table=aliasdomain
|
|
||||||
# fetchmail
|
|
||||||
url_fetchmail = list.php?table=fetchmail
|
|
||||||
url_fetchmail_new_entry = edit.php?table=fetchmail
|
|
||||||
# sendmail
|
|
||||||
url_sendmail = sendmail.php
|
|
||||||
url_broadcast_message = broadcast-message.php
|
|
||||||
# password
|
|
||||||
url_password = edit.php?table=adminpassword
|
|
||||||
# backup
|
|
||||||
url_backup = backup.php
|
|
||||||
# viewlog
|
|
||||||
url_viewlog = viewlog.php
|
|
||||||
# logout
|
|
||||||
url_logout = login.php
|
|
||||||
|
|
||||||
# user-menu
|
|
||||||
url_user_main = main.php
|
|
||||||
url_user_edit_alias = edit-alias.php
|
|
||||||
url_user_vacation = vacation.php
|
|
||||||
url_user_password = password.php
|
|
||||||
url_user_logout = login.php
|
|
||||||
|
|
||||||
|
|
||||||
tr_header = <tr class="header">
|
|
||||||
tr_hilightoff = <tr class="hilightoff" onmouseover="className='hilighton';" onmouseout="className='hilightoff';">
|
|
||||||
|
|
||||||
url_delete = delete.php
|
|
||||||
url_search = list-virtual.php
|
|
||||||
form_search = <form name="search" method="post" action="list-virtual.php"><input class="form-control" name="search[_]" size="10" /></form>
|
|
||||||
|
|
||||||
[adminlistadmin]
|
|
||||||
url_edit_admin = edit.php?table=admin
|
|
||||||
@ -0,0 +1,69 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Postfix Admin
|
||||||
|
*
|
||||||
|
* LICENSE
|
||||||
|
* This source file is subject to the GPL license that is bundled with
|
||||||
|
* this package in the file LICENSE.TXT.
|
||||||
|
*
|
||||||
|
* Further details on the project are available at :
|
||||||
|
* http://www.postfixadmin.com or http://postfixadmin.sf.net
|
||||||
|
*
|
||||||
|
* @version $Id$
|
||||||
|
* @license GNU GPL v2 or later.
|
||||||
|
*
|
||||||
|
* File: create-admin.php
|
||||||
|
* Used to create new administrators.
|
||||||
|
* Template File: admin_create-admin.php
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* Template Variables:
|
||||||
|
*
|
||||||
|
* tMessage
|
||||||
|
* tUsername
|
||||||
|
* tDomains
|
||||||
|
*
|
||||||
|
* Form POST \ GET Variables:
|
||||||
|
*
|
||||||
|
* fUsername
|
||||||
|
* fPassword
|
||||||
|
* fPassword2
|
||||||
|
* fDomains
|
||||||
|
*/
|
||||||
|
|
||||||
|
require_once('common.php');
|
||||||
|
|
||||||
|
authentication_require_role('global-admin');
|
||||||
|
|
||||||
|
$list_domains = list_domains ();
|
||||||
|
$tDomains = array();
|
||||||
|
|
||||||
|
if ($_SERVER['REQUEST_METHOD'] == "GET")
|
||||||
|
{
|
||||||
|
$pAdminCreate_admin_username_text = $PALANG['pAdminCreate_admin_username_text'];
|
||||||
|
$tDomains = array ();
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($_SERVER['REQUEST_METHOD'] == "POST")
|
||||||
|
{
|
||||||
|
if (isset ($_POST['fUsername'])) $fUsername = escape_string ($_POST['fUsername']);
|
||||||
|
if (isset ($_POST['fPassword'])) $fPassword = escape_string ($_POST['fPassword']);
|
||||||
|
if (isset ($_POST['fPassword2'])) $fPassword2 = escape_string ($_POST['fPassword2']);
|
||||||
|
$fDomains = array();
|
||||||
|
if (!empty ($_POST['fDomains'])) $fDomains = $_POST['fDomains'];
|
||||||
|
|
||||||
|
list ($error, $tMessage, $pAdminCreate_admin_username_text, $pAdminCreate_admin_password_text) = create_admin($fUsername, $fPassword, $fPassword2, $fDomains);
|
||||||
|
|
||||||
|
if ($error != 0) {
|
||||||
|
if (isset ($_POST['fUsername'])) $tUsername = escape_string ($_POST['fUsername']);
|
||||||
|
if (isset ($_POST['fDomains'])) $tDomains = $_POST['fDomains'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
include ("templates/header.php");
|
||||||
|
include ("templates/menu.php");
|
||||||
|
include ("templates/admin_create-admin.php");
|
||||||
|
include ("templates/footer.php");
|
||||||
|
|
||||||
|
/* vim: set expandtab softtabstop=3 tabstop=3 shiftwidth=3: */
|
||||||
|
?>
|
||||||
@ -0,0 +1,139 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Postfix Admin
|
||||||
|
*
|
||||||
|
* LICENSE
|
||||||
|
*
|
||||||
|
* This source file is subject to the GPL license that is bundled with
|
||||||
|
* this package in the file LICENSE.TXT.
|
||||||
|
*
|
||||||
|
* Further details on the project are available at :
|
||||||
|
* http://www.postfixadmin.com or http://postfixadmin.sf.net
|
||||||
|
*
|
||||||
|
* File: create-alias-domain.php
|
||||||
|
* Template File: create-alias-domain.php
|
||||||
|
* Responsible for allowing for the creation of alias domains.
|
||||||
|
*
|
||||||
|
* @version $Id$
|
||||||
|
* @license GNU GPL v2 or later.
|
||||||
|
*
|
||||||
|
* Template Variables:
|
||||||
|
*
|
||||||
|
* tMessage
|
||||||
|
*
|
||||||
|
* Form POST \ GET Variables:
|
||||||
|
*
|
||||||
|
* fAliasDomain
|
||||||
|
* fTargetDomain
|
||||||
|
* fActive
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
require_once('common.php');
|
||||||
|
|
||||||
|
authentication_require_role('admin');
|
||||||
|
|
||||||
|
if (!boolconf('alias_domain')) {
|
||||||
|
header("Location: " . $CONF['postfix_admin_url'] . "/main.php");
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
$username = authentication_get_username();
|
||||||
|
$SESSID_USERNAME = $username;
|
||||||
|
if(authentication_has_role('global-admin')) {
|
||||||
|
$list_domains = list_domains ();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$list_domains = list_domains_for_admin ($username);
|
||||||
|
}
|
||||||
|
|
||||||
|
# read alias_domain table to see which domains in $list_domains
|
||||||
|
# are still available as an alias- or target-domain
|
||||||
|
$list_aliases = Array();
|
||||||
|
$result = db_query ("SELECT alias_domain, target_domain FROM $table_alias_domain");
|
||||||
|
if ($result['rows'] > 0) {
|
||||||
|
while ($row = db_array ($result['result']))
|
||||||
|
{
|
||||||
|
$list_aliases[ $row['alias_domain'] ] = $row['target_domain'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# filter available alias domains
|
||||||
|
$alias_domains = array();
|
||||||
|
foreach ($list_domains as $dom) {
|
||||||
|
if (isset($list_aliases[$dom]) || in_array($dom,$list_aliases)) continue;
|
||||||
|
$alias_domains[] = $dom;
|
||||||
|
}
|
||||||
|
if (count($alias_domains) == 0) {
|
||||||
|
$error = 1;
|
||||||
|
$tMessage = $PALANG['pCreate_alias_domain_error4'];
|
||||||
|
}
|
||||||
|
|
||||||
|
# filter available target domains
|
||||||
|
foreach ($list_domains as $dom) {
|
||||||
|
if (isset($list_aliases[$dom])) continue;
|
||||||
|
$target_domains[] = $dom;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (isset ($_REQUEST['alias_domain'])) {
|
||||||
|
$fAliasDomain = escape_string ($_REQUEST['alias_domain']);
|
||||||
|
$fAliasDomain = strtolower ($fAliasDomain);
|
||||||
|
}
|
||||||
|
if (isset ($_REQUEST['target_domain'])) {
|
||||||
|
$fTargetDomain = escape_string ($_REQUEST['target_domain']);
|
||||||
|
$fTargetDomain = strtolower ($fTargetDomain);
|
||||||
|
}
|
||||||
|
if (isset ($_REQUEST['active'])) {
|
||||||
|
$fActive = (bool)$_REQUEST['active'];
|
||||||
|
} else {
|
||||||
|
$fActive = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($_SERVER['REQUEST_METHOD'] == "POST")
|
||||||
|
{
|
||||||
|
if(!authentication_has_role ('global-admin') &&
|
||||||
|
!(check_owner ($SESSID_USERNAME, $fAliasDomain) &&
|
||||||
|
check_owner ($SESSID_USERNAME, $fTargetDomain)))
|
||||||
|
{
|
||||||
|
$error = 1;
|
||||||
|
$tMessage = $PALANG['pCreate_alias_domain_error1'];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isset($list_aliases[$fAliasDomain]) || // alias_domain is unique (primary key, a domain can't be an alias for multiple others)
|
||||||
|
in_array($fAliasDomain,$list_aliases) || // an alias_domain can't be a target_domain for a third domain.
|
||||||
|
isset($list_aliases[$fTargetDomain]) || // same as above, other way around
|
||||||
|
($fAliasDomain == $fTargetDomain) || // i really don't have to
|
||||||
|
empty($fAliasDomain) || empty($fTargetDomain)) // explain this, do i?
|
||||||
|
{
|
||||||
|
$error = 1;
|
||||||
|
$tMessage = $PALANG['pCreate_alias_domain_error2'];
|
||||||
|
}
|
||||||
|
|
||||||
|
$sqlActive = db_get_boolean($fActive);
|
||||||
|
|
||||||
|
if ($error != 1) {
|
||||||
|
$result = db_query ("INSERT INTO $table_alias_domain (alias_domain,target_domain,created,modified,active) VALUES ('$fAliasDomain','$fTargetDomain',NOW(),NOW(),'$sqlActive')");
|
||||||
|
if ($result['rows'] != 1) {
|
||||||
|
$error = 1;
|
||||||
|
$tMessage = $PALANG['pCreate_alias_domain_error3'];
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
db_log ($SESSID_USERNAME, $fAliasDomain, 'create_alias_domain', "$fAliasDomain -> $fTargetDomain");
|
||||||
|
|
||||||
|
flash_info($PALANG['pCreate_alias_domain_success']);
|
||||||
|
# we would have to update the list of domains available for aliasing. Doing a redirect is easier.
|
||||||
|
header("Location: " . $CONF['postfix_admin_url'] . "/create-alias-domain.php");
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$tMessage .= "<br />($fAliasDomain -> $fTargetDomain)<br />\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
include ("templates/header.php");
|
||||||
|
include ("templates/menu.php");
|
||||||
|
include ("templates/create-alias-domain.php");
|
||||||
|
include ("templates/footer.php");
|
||||||
|
/* vim: set expandtab softtabstop=3 tabstop=3 shiftwidth=3: */
|
||||||
|
?>
|
||||||
@ -0,0 +1,159 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Postfix Admin
|
||||||
|
*
|
||||||
|
* LICENSE
|
||||||
|
*
|
||||||
|
* This source file is subject to the GPL license that is bundled with
|
||||||
|
* this package in the file LICENSE.TXT.
|
||||||
|
*
|
||||||
|
* Further details on the project are available at :
|
||||||
|
* http://www.postfixadmin.com or http://postfixadmin.sf.net
|
||||||
|
*
|
||||||
|
* File: create-alias.php
|
||||||
|
* Template File: create-alias.php
|
||||||
|
* Responsible for allowing for the creation of mail aliases.
|
||||||
|
*
|
||||||
|
* @version $Id$
|
||||||
|
* @license GNU GPL v2 or later.
|
||||||
|
*
|
||||||
|
* Template Variables:
|
||||||
|
*
|
||||||
|
* tMessage
|
||||||
|
* tAddress
|
||||||
|
* tGoto
|
||||||
|
* tDomain
|
||||||
|
*
|
||||||
|
* Form POST \ GET Variables:
|
||||||
|
*
|
||||||
|
* fAddress
|
||||||
|
* fGoto
|
||||||
|
* fDomain
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
require_once('common.php');
|
||||||
|
|
||||||
|
authentication_require_role('admin');
|
||||||
|
$username = authentication_get_username();
|
||||||
|
$SESSID_USERNAME = $username;
|
||||||
|
if(authentication_has_role('global-admin')) {
|
||||||
|
$list_domains = list_domains ();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$list_domains = list_domains_for_admin ($username);
|
||||||
|
}
|
||||||
|
|
||||||
|
$pCreate_alias_goto_text = $PALANG['pCreate_alias_goto_text'];
|
||||||
|
|
||||||
|
if ($_SERVER['REQUEST_METHOD'] == "GET")
|
||||||
|
{
|
||||||
|
if (isset ($_GET['domain'])) {
|
||||||
|
$tDomain = escape_string ($_GET['domain']);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($_SERVER['REQUEST_METHOD'] == "POST")
|
||||||
|
{
|
||||||
|
if (isset ($_POST['fAddress']) && isset ($_POST['fDomain'])) {
|
||||||
|
$fAddress = escape_string($_POST['fAddress']) . "@" . escape_string ($_POST['fDomain']);
|
||||||
|
$fAddress = strtolower ($fAddress);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isset ($_POST['fGoto'])) {
|
||||||
|
$fGoto = escape_string ($_POST['fGoto']);
|
||||||
|
$fGoto = strtolower ($fGoto);
|
||||||
|
}
|
||||||
|
if(isset($_POST['fActive'])) {
|
||||||
|
$fActive = escape_string ($_POST['fActive']);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$fActive = "1";
|
||||||
|
}
|
||||||
|
|
||||||
|
if(isset($_POST['fDomain'])) {
|
||||||
|
$fDomain = escape_string ($_POST['fDomain']);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!preg_match ('/@/',$fGoto)) {
|
||||||
|
$fGoto = $fGoto . "@" . escape_string ($_POST['fDomain']);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!(authentication_has_role('global-admin') ||
|
||||||
|
check_owner ($SESSID_USERNAME, $fDomain) ))
|
||||||
|
{
|
||||||
|
$error = 1;
|
||||||
|
$tAddress = escape_string ($_POST['fAddress']);
|
||||||
|
$tGoto = $fGoto;
|
||||||
|
$tDomain = $fDomain;
|
||||||
|
$pCreate_alias_address_text = $PALANG['pCreate_alias_address_text_error1'];
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!check_alias($fDomain)) {
|
||||||
|
$error = 1;
|
||||||
|
$tAddress = escape_string ($_POST['fAddress']);
|
||||||
|
$tGoto = $fGoto;
|
||||||
|
$tDomain = $fDomain;
|
||||||
|
$pCreate_alias_address_text = $PALANG['pCreate_alias_address_text_error3'];
|
||||||
|
}
|
||||||
|
|
||||||
|
if(empty ($fAddress) || !check_email ($fAddress)) {
|
||||||
|
$error = 1;
|
||||||
|
$tAddress = escape_string ($_POST['fAddress']);
|
||||||
|
$tGoto = $fGoto;
|
||||||
|
$tDomain = $fDomain;
|
||||||
|
$pCreate_alias_address_text = $PALANG['pCreate_alias_address_text_error1'];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (empty($fGoto) || !check_email ($fGoto)) {
|
||||||
|
$error = 1;
|
||||||
|
$tAddress = escape_string ($_POST['fAddress']);
|
||||||
|
$tGoto = $fGoto;
|
||||||
|
$tDomain = $fDomain;
|
||||||
|
$pCreate_alias_goto_text = $PALANG['pCreate_alias_goto_text_error'];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (escape_string($_POST['fAddress']) == "*") {
|
||||||
|
$fAddress = "@" . escape_string ($_POST['fDomain']);
|
||||||
|
}
|
||||||
|
|
||||||
|
$result = db_query ("SELECT * FROM $table_alias WHERE address='$fAddress'");
|
||||||
|
if ($result['rows'] == 1) {
|
||||||
|
$error = 1;
|
||||||
|
$tAddress = escape_string ($_POST['fAddress']);
|
||||||
|
$tGoto = $fGoto;
|
||||||
|
$tDomain = $fDomain;
|
||||||
|
$pCreate_alias_address_text = $PALANG['pCreate_alias_address_text_error2'];
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($fActive == "on") {
|
||||||
|
$sqlActive = db_get_boolean(True);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$sqlActive = db_get_boolean(False);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($error != 1) {
|
||||||
|
if (preg_match('/^\*@(.*)$/', $fGoto, $match)) {
|
||||||
|
$fGoto = "@" . $match[1];
|
||||||
|
}
|
||||||
|
|
||||||
|
$result = db_query ("INSERT INTO $table_alias (address,goto,domain,created,modified,active) VALUES ('$fAddress','$fGoto','$fDomain',NOW(),NOW(),'$sqlActive')");
|
||||||
|
if ($result['rows'] != 1) {
|
||||||
|
$tDomain = $fDomain;
|
||||||
|
$tMessage = $PALANG['pCreate_alias_result_error'] . "<br />($fAddress -> $fGoto)<br />\n";
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
db_log ($SESSID_USERNAME, $fDomain, 'create_alias', "$fAddress -> $fGoto");
|
||||||
|
|
||||||
|
$tDomain = $fDomain;
|
||||||
|
$tMessage = $PALANG['pCreate_alias_result_success'] . "<br />($fAddress -> $fGoto)<br />\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
include ("templates/header.php");
|
||||||
|
include ("templates/menu.php");
|
||||||
|
include ("templates/create-alias.php");
|
||||||
|
include ("templates/footer.php");
|
||||||
|
?>
|
||||||
@ -0,0 +1,152 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Postfix Admin
|
||||||
|
*
|
||||||
|
* LICENSE
|
||||||
|
* This source file is subject to the GPL license that is bundled with
|
||||||
|
* this package in the file LICENSE.TXT.
|
||||||
|
*
|
||||||
|
* Further details on the project are available at :
|
||||||
|
* http://www.postfixadmin.com or http://postfixadmin.sf.net
|
||||||
|
*
|
||||||
|
* @version $Id$
|
||||||
|
* @license GNU GPL v2 or later.
|
||||||
|
*
|
||||||
|
* File: create-domain.php
|
||||||
|
* Allows administrators to create new domains.
|
||||||
|
* Template File: admin_create-domain.php
|
||||||
|
*
|
||||||
|
* Template Variables:
|
||||||
|
*
|
||||||
|
* tMessage
|
||||||
|
* tDomain
|
||||||
|
* tDescription
|
||||||
|
* tAliases
|
||||||
|
* tMailboxes
|
||||||
|
* tMaxquota
|
||||||
|
* tDefaultaliases
|
||||||
|
*
|
||||||
|
* Form POST \ GET Variables:
|
||||||
|
*
|
||||||
|
* fDomain
|
||||||
|
* fDescription
|
||||||
|
* fAliases
|
||||||
|
* fMailboxes
|
||||||
|
* fMaxquota
|
||||||
|
* fDefaultaliases
|
||||||
|
*/
|
||||||
|
|
||||||
|
require_once('common.php');
|
||||||
|
|
||||||
|
authentication_require_role('global-admin');
|
||||||
|
|
||||||
|
|
||||||
|
$form_fields = array(
|
||||||
|
'fDomain' => array('type' => 'str', 'default' => null),
|
||||||
|
'fDescription' => array('type' => 'str', 'default' =>''),
|
||||||
|
'fAliases' => array('type' => 'int', 'default' => $CONF['aliases']),
|
||||||
|
'fMailboxes' => array('type' => 'int', 'default' => $CONF['mailboxes']),
|
||||||
|
'fMaxquota' => array('type' => 'int', 'default' => $CONF['maxquota']),
|
||||||
|
'fTransport' => array('type' => 'str', 'default' => $CONF['transport_default'], 'options' => $CONF['transport_options']),
|
||||||
|
'fDefaultaliases' => array('type' => 'str', 'default' => 'off', 'options' => array('on', 'off')),
|
||||||
|
'fBackupmx' => array('type' => 'str', 'default' => 'off', 'options' => array('on', 'off'))
|
||||||
|
);
|
||||||
|
|
||||||
|
foreach($form_fields as $key => $default) {
|
||||||
|
if(isset($_POST[$key]) && (!empty($_POST[$key]))) {
|
||||||
|
$$key = escape_string($_POST[$key]);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$$key = $default['default'];
|
||||||
|
}
|
||||||
|
if($default['type'] == 'int') {
|
||||||
|
$$key = intval($$key);
|
||||||
|
}
|
||||||
|
if($default['type'] == 'str') {
|
||||||
|
$$key = strip_tags($$key); /* should we even bother? */
|
||||||
|
}
|
||||||
|
if(isset($default['options'])) {
|
||||||
|
if(!in_array($$key, $default['options'])) {
|
||||||
|
die("Invalid parameter given for $key");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ($_SERVER['REQUEST_METHOD'] == "GET")
|
||||||
|
{
|
||||||
|
/* default values as set above */
|
||||||
|
$tTransport = $fTransport;
|
||||||
|
$tAliases = $fAliases;
|
||||||
|
$tMaxquota = $fMaxquota;
|
||||||
|
$tMailboxes = $fMailboxes;
|
||||||
|
$tDefaultAliases = $fDefaultaliases;
|
||||||
|
$tBackupmx = $fBackupmx;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($_SERVER['REQUEST_METHOD'] == "POST")
|
||||||
|
{
|
||||||
|
if ($fDomain == null or domain_exist($fDomain) or !check_domain($fDomain))
|
||||||
|
{
|
||||||
|
$error = 1;
|
||||||
|
$tDomain = $fDomain;
|
||||||
|
$tDescription = $fDescription;
|
||||||
|
$tAliases = $fAliases;
|
||||||
|
$tMailboxes = $fMailboxes;
|
||||||
|
if (isset ($_POST['fMaxquota'])) $tMaxquota = $fMaxquota;
|
||||||
|
if (isset ($_POST['fTransport'])) $tTransport = $fTransport;
|
||||||
|
if (isset ($_POST['fDefaultaliases'])) $tDefaultaliases = $fDefaultaliases;
|
||||||
|
if (isset ($_POST['fBackupmx'])) $tBackupmx = $fBackupmx;
|
||||||
|
$pAdminCreate_domain_domain_text = $PALANG['pAdminCreate_domain_domain_text_error2'];
|
||||||
|
if (domain_exist ($fDomain)) $pAdminCreate_domain_domain_text = $PALANG['pAdminCreate_domain_domain_text_error'];
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($error != 1)
|
||||||
|
{
|
||||||
|
$tAliases = $CONF['aliases'];
|
||||||
|
$tMailboxes = $CONF['mailboxes'];
|
||||||
|
$tMaxquota = $CONF['maxquota'];
|
||||||
|
|
||||||
|
if ($fBackupmx == "on")
|
||||||
|
{
|
||||||
|
$fAliases = -1;
|
||||||
|
$fMailboxes = -1;
|
||||||
|
$fMaxquota = -1;
|
||||||
|
$fBackupmx = 1;
|
||||||
|
$sqlBackupmx = db_get_boolean(true);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$fBackupmx = 0;
|
||||||
|
$sqlBackupmx = db_get_boolean(false);
|
||||||
|
}
|
||||||
|
$sql_query = "INSERT INTO $table_domain (domain,description,aliases,mailboxes,maxquota,transport,backupmx,created,modified) VALUES ('$fDomain','$fDescription',$fAliases,$fMailboxes,$fMaxquota,'$fTransport',$sqlBackupmx,NOW(),NOW())";
|
||||||
|
$result = db_query($sql_query);
|
||||||
|
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 $table_alias (address,goto,domain,created,modified) VALUES ('$address','$goto','$fDomain',NOW(),NOW())");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$tMessage = $PALANG['pAdminCreate_domain_result_success'] . "<br />($fDomain)</br />";
|
||||||
|
}
|
||||||
|
if (!domain_postcreation($fDomain))
|
||||||
|
{
|
||||||
|
$tMessage = $PALANG['pAdminCreate_domain_error'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
include ("templates/header.php");
|
||||||
|
include ("templates/menu.php");
|
||||||
|
include ("templates/admin_create-domain.php");
|
||||||
|
include ("templates/footer.php");
|
||||||
|
|
||||||
|
/* vim: set expandtab softtabstop=3 tabstop=3 shiftwidth=3: */
|
||||||
|
?>
|
||||||
@ -0,0 +1,332 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Postfix Admin
|
||||||
|
*
|
||||||
|
* LICENSE
|
||||||
|
* This source file is subject to the GPL license that is bundled with
|
||||||
|
* this package in the file LICENSE.TXT.
|
||||||
|
*
|
||||||
|
* Further details on the project are available at :
|
||||||
|
* http://www.postfixadmin.com or http://postfixadmin.sf.net
|
||||||
|
*
|
||||||
|
* File: create-mailbox.php
|
||||||
|
* Responsible for allowing for the creation of mail boxes
|
||||||
|
*
|
||||||
|
* @version $Id$
|
||||||
|
* @license GNU GPL v2 or later.
|
||||||
|
*
|
||||||
|
* Template Variables:
|
||||||
|
*
|
||||||
|
* tMessage
|
||||||
|
* tUsername
|
||||||
|
* tName
|
||||||
|
* tQuota
|
||||||
|
* tDomain
|
||||||
|
*
|
||||||
|
* Form POST \ GET Variables:
|
||||||
|
*
|
||||||
|
* fUsername
|
||||||
|
* fPassword
|
||||||
|
* fPassword2
|
||||||
|
* fName
|
||||||
|
* fQuota
|
||||||
|
* fDomain
|
||||||
|
* fActive
|
||||||
|
* fMail
|
||||||
|
*/
|
||||||
|
|
||||||
|
require_once('common.php');
|
||||||
|
|
||||||
|
authentication_require_role('admin');
|
||||||
|
$SESSID_USERNAME = authentication_get_username();
|
||||||
|
if(authentication_has_role('global-admin')) {
|
||||||
|
$list_domains = list_domains ();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$list_domains = list_domains_for_admin($SESSID_USERNAME);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
$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'];
|
||||||
|
|
||||||
|
if ($_SERVER['REQUEST_METHOD'] == "GET")
|
||||||
|
{
|
||||||
|
$fDomain = $list_domains[0];
|
||||||
|
if (isset ($_GET['domain'])) $fDomain = escape_string ($_GET['domain']);
|
||||||
|
|
||||||
|
if(!in_array($fDomain, $list_domains)) {
|
||||||
|
die("Invalid domain name selected, or you tried to select a domain you are not an admin for");
|
||||||
|
}
|
||||||
|
$tDomain = $fDomain;
|
||||||
|
$result = db_query ("SELECT * FROM $table_domain WHERE domain='$fDomain'");
|
||||||
|
if ($result['rows'] == 1)
|
||||||
|
{
|
||||||
|
$row = db_array ($result['result']);
|
||||||
|
$tQuota = $row['maxquota'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($_SERVER['REQUEST_METHOD'] == "POST")
|
||||||
|
{
|
||||||
|
|
||||||
|
if (isset ($_POST['fUsername']) && isset ($_POST['fDomain'])) $fUsername = escape_string ($_POST['fUsername']) . "@" . escape_string ($_POST['fDomain']);
|
||||||
|
$fUsername = strtolower ($fUsername);
|
||||||
|
if (isset ($_POST['fPassword'])) $fPassword = escape_string ($_POST['fPassword']);
|
||||||
|
if (isset ($_POST['fPassword2'])) $fPassword2 = escape_string ($_POST['fPassword2']);
|
||||||
|
isset ($_POST['fName']) ? $fName = escape_string ($_POST['fName']) : $fName = "";
|
||||||
|
if (isset ($_POST['fDomain'])) $fDomain = escape_string ($_POST['fDomain']);
|
||||||
|
isset ($_POST['fQuota']) ? $fQuota = intval($_POST['fQuota']) : $fQuota = 0;
|
||||||
|
isset ($_POST['fActive']) ? $fActive = escape_string ($_POST['fActive']) : $fActive = "1";
|
||||||
|
if (isset ($_POST['fMail'])) $fMail = escape_string ($_POST['fMail']);
|
||||||
|
|
||||||
|
|
||||||
|
if ( (!check_owner ($SESSID_USERNAME, $fDomain)) && (!authentication_has_role('global-admin')) )
|
||||||
|
{
|
||||||
|
$error = 1;
|
||||||
|
$tUsername = escape_string ($_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 = escape_string ($_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 = escape_string ($_POST['fUsername']);
|
||||||
|
$tName = $fName;
|
||||||
|
$tQuota = $fQuota;
|
||||||
|
$tDomain = $fDomain;
|
||||||
|
$pCreate_mailbox_username_text = $PALANG['pCreate_mailbox_username_text_error1'];
|
||||||
|
}
|
||||||
|
|
||||||
|
$tPassGenerated = 0;
|
||||||
|
if (empty ($fPassword) or empty ($fPassword2) or ($fPassword != $fPassword2))
|
||||||
|
{
|
||||||
|
if (empty ($fPassword) and empty ($fPassword2) and $CONF['generate_password'] == "YES")
|
||||||
|
{
|
||||||
|
$fPassword = generate_password ();
|
||||||
|
$tPassGenerated = 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$error = 1;
|
||||||
|
$tUsername = escape_string ($_POST['fUsername']);
|
||||||
|
$tName = $fName;
|
||||||
|
$tQuota = $fQuota;
|
||||||
|
$tDomain = $fDomain;
|
||||||
|
$pCreate_mailbox_password_text = $PALANG['pCreate_mailbox_password_text_error'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($CONF['quota'] == "YES")
|
||||||
|
{
|
||||||
|
if (!check_quota ($fQuota, $fDomain))
|
||||||
|
{
|
||||||
|
$error = 1;
|
||||||
|
$tUsername = escape_string ($_POST['fUsername']);
|
||||||
|
$tName = $fName;
|
||||||
|
$tQuota = $fQuota;
|
||||||
|
$tDomain = $fDomain;
|
||||||
|
$pCreate_mailbox_quota_text = $PALANG['pCreate_mailbox_quota_text_error'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$result = db_query ("SELECT * FROM $table_alias WHERE address='$fUsername'");
|
||||||
|
if ($result['rows'] == 1)
|
||||||
|
{
|
||||||
|
$error = 1;
|
||||||
|
$tUsername = escape_string ($_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 . "/" . escape_string (strtolower($_POST['fUsername'])) . "/";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$maildir = $fUsername . "/";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!empty ($fQuota))
|
||||||
|
{
|
||||||
|
$quota = multiply_quota ($fQuota);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$quota = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($fActive == "on")
|
||||||
|
{
|
||||||
|
$sqlActive = db_get_boolean(True);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$sqlActive = db_get_boolean(False);
|
||||||
|
}
|
||||||
|
if ('pgsql'==$CONF['database_type'])
|
||||||
|
{
|
||||||
|
db_query('BEGIN');
|
||||||
|
}
|
||||||
|
|
||||||
|
$result = db_query ("INSERT INTO $table_alias (address,goto,domain,created,modified,active) VALUES ('$fUsername','$fUsername','$fDomain',NOW(),NOW(),'$sqlActive')");
|
||||||
|
if ($result['rows'] != 1)
|
||||||
|
{
|
||||||
|
$tDomain = $fDomain;
|
||||||
|
$tMessage = $PALANG['pAlias_result_error'] . "<br />($fUsername -> $fUsername)</br />";
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
# TODO: The following code segment is from admin/create-mailbox.php. To be compared/merged with the code from /create-mailbox.php.
|
||||||
|
Lines starting with /* were inserted to keep this section in commented mode.
|
||||||
|
|
||||||
|
|
||||||
|
if ($result['rows'] != 1)
|
||||||
|
{
|
||||||
|
$tDomain = $fDomain;
|
||||||
|
$tMessage .= $PALANG['pCreate_mailbox_result_error'] . "<br />($fUsername)<br />";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
|
||||||
|
$error=TRUE; // Being pessimistic
|
||||||
|
if (mailbox_postcreation($fUsername,$fDomain,$maildir))
|
||||||
|
{
|
||||||
|
if ('pgsql'==$CONF['database_type'])
|
||||||
|
{
|
||||||
|
$result=db_query("COMMIT");
|
||||||
|
|
||||||
|
/* should really not be possible: */
|
||||||
|
/*
|
||||||
|
if (!$result) die('COMMIT-query failed.');
|
||||||
|
}
|
||||||
|
$error=FALSE;
|
||||||
|
} else {
|
||||||
|
$tMessage .= $PALANG['pCreate_mailbox_result_error'] . "<br />($fUsername)<br />";
|
||||||
|
if ('pgsql'==$CONF['database_type'])
|
||||||
|
{
|
||||||
|
$result=db_query("ROLLBACK");
|
||||||
|
|
||||||
|
/* should really not be possible: */
|
||||||
|
/*
|
||||||
|
if (!$result) die('ROLLBACK-query failed.');
|
||||||
|
} else {
|
||||||
|
/*
|
||||||
|
When we cannot count on transactions, we need to move forward, despite
|
||||||
|
the problems.
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
$error=FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (!$error)
|
||||||
|
{
|
||||||
|
db_log ($CONF['admin_email'], $fDomain, 'create_mailbox', $fUsername);
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
TODO: this is the start of /create-mailbox code segment that was originally used in /create-mailbox.php instead
|
||||||
|
of the above from admin/create-mailbox.php.
|
||||||
|
To be compared / merged.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// apparently uppercase usernames really confuse some IMAP clients.
|
||||||
|
$fUsername = strtolower($fUsername);
|
||||||
|
$local_part = '';
|
||||||
|
if(preg_match('/^(.*)@/', $fUsername, $matches)) {
|
||||||
|
$local_part = $matches[1];
|
||||||
|
}
|
||||||
|
$result = db_query ("INSERT INTO $table_mailbox (username,password,name,maildir,local_part,quota,domain,created,modified,active) VALUES ('$fUsername','$password','$fName','$maildir','$local_part','$quota','$fDomain',NOW(),NOW(),'$sqlActive')");
|
||||||
|
if ($result['rows'] != 1 || !mailbox_postcreation($fUsername,$fDomain,$maildir, $quota))
|
||||||
|
{
|
||||||
|
$tDomain = $fDomain;
|
||||||
|
$tMessage .= $PALANG['pCreate_mailbox_result_error'] . "<br />($fUsername)<br />";
|
||||||
|
db_query('ROLLBACK');
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
db_query('COMMIT');
|
||||||
|
db_log ($SESSID_USERNAME, $fDomain, 'create_mailbox', "$fUsername");
|
||||||
|
/*
|
||||||
|
TODO: this is the end of /create-mailbox.php code segment
|
||||||
|
*/
|
||||||
|
$tDomain = $fDomain;
|
||||||
|
|
||||||
|
$tQuota = $CONF['maxquota'];
|
||||||
|
|
||||||
|
if ($fMail == "on")
|
||||||
|
{
|
||||||
|
$fTo = $fUsername;
|
||||||
|
$fFrom = $SESSID_USERNAME;
|
||||||
|
$fHeaders = "To: " . $fTo . "\n";
|
||||||
|
$fHeaders .= "From: " . $fFrom . "\n";
|
||||||
|
|
||||||
|
$fHeaders .= "Subject: " . encode_header ($PALANG['pSendmail_subject_text']) . "\n";
|
||||||
|
$fHeaders .= "MIME-Version: 1.0\n";
|
||||||
|
$fHeaders .= "Content-Type: text/plain; charset=utf-8\n";
|
||||||
|
$fHeaders .= "Content-Transfer-Encoding: 8bit\n";
|
||||||
|
|
||||||
|
$fHeaders .= $CONF['welcome_text'];
|
||||||
|
|
||||||
|
if (!smtp_mail ($fTo, $fFrom, $fHeaders))
|
||||||
|
{
|
||||||
|
$tMessage .= "<br />" . $PALANG['pSendmail_result_error'] . "<br />";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$tMessage .= "<br />" . $PALANG['pSendmail_result_success'] . "<br />";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$tShowpass = "";
|
||||||
|
if ( $tPassGenerated == 1 || $CONF['show_password'] == "YES") $tShowpass = " / $fPassword";
|
||||||
|
|
||||||
|
if (create_mailbox_subfolders($fUsername,$fPassword))
|
||||||
|
{
|
||||||
|
$tMessage .= $PALANG['pCreate_mailbox_result_success'] . "<br />($fUsername$tShowpass)";
|
||||||
|
} else {
|
||||||
|
$tMessage .= $PALANG['pCreate_mailbox_result_succes_nosubfolders'] . "<br />($fUsername$tShowpass)";
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
include ("templates/header.php");
|
||||||
|
include ("templates/menu.php");
|
||||||
|
include ("templates/create-mailbox.php");
|
||||||
|
include ("templates/footer.php");
|
||||||
|
|
||||||
|
/* vim: set expandtab softtabstop=3 tabstop=3 shiftwidth=3: */
|
||||||
|
?>
|
||||||
@ -1,22 +1,30 @@
|
|||||||
PostfixAdmin for Debian
|
PostfixAdmin for Debian
|
||||||
=======================
|
=======================
|
||||||
|
|
||||||
After installing the package, you should find that :
|
After installing the package, you should find that :
|
||||||
|
|
||||||
http://youserver/postfixadmin/setup.php works. This should
|
http://youserver/postfixadmin/setup.php works. This should
|
||||||
guide you through the appropriate process.
|
guide you through the appropriate process.
|
||||||
|
|
||||||
|
You will need to create a database (either MySQL or PostgreSQL)
|
||||||
|
and know the username and password for it. The Database does not need
|
||||||
|
to be on the same server as the Postfixadmin install.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Recommended and Suggested Packages
|
Recommended and Suggested Packages
|
||||||
==================================
|
==================================
|
||||||
|
|
||||||
- Postfix
|
- Postfix
|
||||||
- MySQL or PostgreSQL
|
- MySQL or PostgreSQL
|
||||||
- Courier or Dovecot
|
- Courier or Dovecot
|
||||||
|
|
||||||
|
|
||||||
Where to get help
|
Where to get help
|
||||||
=================
|
=================
|
||||||
|
|
||||||
The first stop would be the Postfixadmin Website, Forum or IRC channel.
|
The first stop would be the Postfixadmin Website, Forum or IRC channel.
|
||||||
|
|
||||||
See :
|
See :
|
||||||
- http://postfixadmin.sf.net
|
- http://postfixadmin.sf.net
|
||||||
- #postfixadmin on irc.freenode.net
|
- #postfixadmin on irc.freenode.net
|
||||||
|
|
||||||
|
|||||||
@ -1,27 +0,0 @@
|
|||||||
This package is using the quilt framework.
|
|
||||||
All patches are located in debian/patches.
|
|
||||||
|
|
||||||
Adding a new patch: quilt new <date-patch_name>
|
|
||||||
This will create a new file debian/patches/patch/date-patch_name.
|
|
||||||
Please use the current date (e.g. 20100221 - YYYYMMDD) as prefix!
|
|
||||||
|
|
||||||
Editing a file to include it into the patch: quilt edit <filename>
|
|
||||||
This will open your $EDITOR.
|
|
||||||
|
|
||||||
To write your changes into the new patchfile: quilt refresh.
|
|
||||||
|
|
||||||
quilt push:
|
|
||||||
Apply patch(es) from the series file. Without options, the next
|
|
||||||
patch in the series file is applied. When a number is specified,
|
|
||||||
apply the specified number of patches. When a patch name is
|
|
||||||
specified, apply all patches up to and including the specified patch.
|
|
||||||
Patch names may include the patches/ prefix, which means that
|
|
||||||
filename completion can be used.
|
|
||||||
|
|
||||||
quilt pop:
|
|
||||||
Remove patch(es) from the stack of applied patches. Without options,
|
|
||||||
the topmost patch is removed. When a number is specified, remove the
|
|
||||||
specified number of patches. When a patch name is specified, remove
|
|
||||||
patches until the specified patch end up on top of the stack.
|
|
||||||
Patch names may include the patches/ prefix, which means that
|
|
||||||
filename completion can be used.
|
|
||||||
@ -1,21 +0,0 @@
|
|||||||
Random instructions for help:
|
|
||||||
|
|
||||||
This 'debian' directory is used by dpkg-buildpackage when creating a .deb.
|
|
||||||
|
|
||||||
You'll need to install :
|
|
||||||
|
|
||||||
apt-get install dpkg-dev quilt debhelper
|
|
||||||
|
|
||||||
Then from within the trunk directory (or whatever forms the root of the
|
|
||||||
postfixadmin project), do the following :
|
|
||||||
|
|
||||||
1. Update debian/changelog; include your email address in the last change
|
|
||||||
(this is used to determine a gpg key to use)
|
|
||||||
|
|
||||||
2. debian/rules prep
|
|
||||||
|
|
||||||
3. dpkg-buildpackage -rfakeroot
|
|
||||||
|
|
||||||
4. Look in ../ at the shiny .deb / .tar.gz
|
|
||||||
|
|
||||||
5. Profit.
|
|
||||||
@ -1,3 +0,0 @@
|
|||||||
* DebTags
|
|
||||||
* dbconfig: DOCUMENTS/SECURITY.txt
|
|
||||||
* include postfix configuration templates
|
|
||||||
@ -0,0 +1,6 @@
|
|||||||
|
# BEGIN FOR POSTFIXADMIN
|
||||||
|
|
||||||
|
Alias /postfixadmin /usr/share/postfixadmin
|
||||||
|
|
||||||
|
|
||||||
|
# END FOR POSTFIXADMIN
|
||||||
@ -1,5 +0,0 @@
|
|||||||
# BEGIN FOR POSTFIXADMIN
|
|
||||||
|
|
||||||
Alias /postfixadmin /usr/share/postfixadmin/public
|
|
||||||
|
|
||||||
# END FOR POSTFIXADMIN
|
|
||||||
@ -1,77 +1,88 @@
|
|||||||
postfixadmin (3.2-1) unstable; urgency=low
|
postfixadmin (2.3beta) unstable; urgency=low
|
||||||
|
|
||||||
* New upstream release - PostfixAdmin v3.2
|
* Subversion revision 539
|
||||||
|
* Fixes for MySQL upgrade issues
|
||||||
|
* Improved vacation.pl (renotification options, use SMTP headers, better
|
||||||
|
logging, optional external config file)
|
||||||
|
* Improved fetchmail.pl
|
||||||
|
* Domain aliases - new implementation should reduce backscatter etc.
|
||||||
|
* translation updates
|
||||||
|
* Added domain-postcreation script support
|
||||||
|
* Enhanced mailbox table to make it easier for people to customise where mailboxes live
|
||||||
|
* and much more
|
||||||
|
|
||||||
-- David Goodwin <david@palepurple.co.uk> Wed, 02 May 2018 21:36:01 +0100
|
-- David Goodwin <david.goodwin@palepurple.co.uk> Tue, 20 Jan 2009 20:50:00 +0000
|
||||||
|
|
||||||
postfixadmin (3.1-1) unstable; urgency=low
|
postfixadmin (2.2.1.1) unstable; urgency=low
|
||||||
|
|
||||||
* New upstream release
|
* Subversion revision 412 (from branches/postfixadmin-2.2.1)
|
||||||
|
* THIS IS EFFECTIVELY THE SAME AS 2.2.1 (which should probably be ignored)
|
||||||
|
|
||||||
-- David Goodwin <david@palepurple.co.uk> Sun, 25 Jun 2017 16:27:01 +0000
|
-- David Goodwin <david.goodwin@palepurple.co.uk> Wed, 23 Jul 2008 12:37:00 +0000
|
||||||
|
|
||||||
postfixadmin (3.0.2-1) unstable; urgency=low
|
postfixadmin (2.2.1) unstable; urgency=low
|
||||||
|
|
||||||
* Security fix (don't delete protected aliases, CVE-2017-5930)
|
* Various bug fixes (MySQL charset issue(s))
|
||||||
* Fix MySQL vacation.cache column (regression fix)
|
* Updated translations (pl, bg, ru, nb, tw etc)
|
||||||
|
* added quota parameter to mailbox_postcreation hook
|
||||||
|
* new hook to update the quota after editing a mailbox
|
||||||
|
($CONF['mailbox_postedit_script'])
|
||||||
|
* fixed subfolder creation order and timing
|
||||||
|
* allow smtp server to be specified in vacation.pl
|
||||||
|
* fixed MySQL charset issues
|
||||||
|
* several small bugfixes
|
||||||
|
* Norwegian (bokmal) translation added
|
||||||
|
* Updated translations (pl, bg, ru, nb, tw etc)
|
||||||
|
* Subversion revision 408
|
||||||
|
|
||||||
-- David Goodwin <david@palepurple.co.uk> Wed, 08 Feb 2017 19:30:00 +0000
|
-- David Goodwin <david.goodwin@palepurple.co.uk> Mon, 21 Jul 2008 22:44:00 +0000
|
||||||
|
postfixadmin (2.2.0) unstable; urgency=low
|
||||||
|
|
||||||
postfixadmin (3.0.1-2) unstable; urgency=low
|
* 2.2.0 Released.
|
||||||
|
* Fix fetchmail script to work with PostgreSQL
|
||||||
|
* Fix fetchmail table creation in MySQL and PostgreSQL
|
||||||
|
* Documentation fixups
|
||||||
|
* Subversion revision 356
|
||||||
|
|
||||||
* Try and make dependencies less strict (and perhaps work for Ubuntu Precise as well)
|
-- David Goodwin <david.goodwin@palepurple.co.uk> Thu, 29 Apr 2008 15:47:00 +0000
|
||||||
|
|
||||||
-- David Goodwin <david@palepurple.co.uk> Mon, 10 Oct 2016 20:00:00 +0100
|
postfixadmin (2.2.0-rc5) unstable; urgency=low
|
||||||
|
|
||||||
postfixadmin (3.0.1-1) unstable; urgency=low
|
* Fix MySQL installation issues (schema not being created!)
|
||||||
|
* Fix MySQL vacation_notification timestamp issue
|
||||||
|
* SVN revision: 340
|
||||||
|
|
||||||
* Fix packaging issues (missing: smarty/ and configs/)
|
-- David Goodwin <david.goodwin@palepurple.co.uk> Wed, 23 Apr 2008 16:27:00 +0000
|
||||||
|
|
||||||
-- David Goodwin <david@palepurple.co.uk> Mon, 19 Sep 2016 10:08:00 +0100
|
postfixadmin (2.2.0-1rc4) unstable; urgency=low
|
||||||
|
|
||||||
postfixadmin (3.0-1) unstable; urgency=low
|
* Removal of standalone database schema files (see upgrade.php)
|
||||||
|
* Various bug fixes
|
||||||
|
* Better/Move documentation on installation
|
||||||
|
* setup.php/upgrade.php works for PostgreSQL and MySQL
|
||||||
|
* MySQL Unicode problems fixed
|
||||||
|
* I think this is effectively v2.2.0
|
||||||
|
* SVN revision: 336
|
||||||
|
|
||||||
* New upstream release
|
-- David Goodwin <david.goodwin@palepurple.co.uk> Sun, 20 Apr 2008 20:19:00 +0000
|
||||||
|
|
||||||
-- David Goodwin <david@palepurple.co.uk> Sun, 11 Sep 2016 18:42:00 +0100
|
postfixadmin (2.2.0-1rc3) unstable; urgency=low
|
||||||
|
|
||||||
postfixadmin (2.93-2) unstable; urgency=low
|
* Various bug fixes
|
||||||
|
|
||||||
* Replace debian/ using Debian v2.3.7-2. See Debian's #821643
|
-- David Goodwin <david.goodwin@palepurple.co.uk> Thu, 28 Feb 2008 12:00:00 +0000
|
||||||
* This adds : PHP7 and Apache 2.4 support.
|
|
||||||
|
|
||||||
-- David Goodwin <david@palepurple.co.uk> Sun, 22 May 2016 19:41:01 +0100
|
postfixadmin (2.2.0-1rc2) unstable; urgency=low
|
||||||
|
|
||||||
postfixadmin (2.93-1) unstable; urgency=low
|
* Improved CSS
|
||||||
|
* Improved upgrade procedure (should work for PGSQL) (see upgrade.php)
|
||||||
|
* Various bug fixes
|
||||||
|
|
||||||
* New upstream release (effectively beta3 for v3.0)
|
-- David Goodwin <david.goodwin@palepurple.co.uk> Sat, 29 Dec 2007 21:14:00 +0000
|
||||||
* update dependencies to allow mariadb as database
|
|
||||||
|
|
||||||
-- David Goodwin <david@palepurple.co.uk> Sat, 26 Sep 2015 15:05:00 +0100
|
postfixadmin (2.2.0-1rc1) unstable; urgency=low
|
||||||
|
|
||||||
postfixadmin (2.92-1) unstable; urgency=low
|
* Initial Release (via dpkg)
|
||||||
|
|
||||||
* New upstream release (effectively beta2 for v3.0)
|
-- David Goodwin <david.goodwin@palepurple.co.uk> Sun, 04 Nov 2007 15:36:00 +0000
|
||||||
|
|
||||||
-- David Goodwin <david@palepurple.co.uk> Wed, 28 Oct 2014 21:02:00 +0100
|
|
||||||
|
|
||||||
postfixadmin (2.91-1) unstable; urgency=low
|
|
||||||
|
|
||||||
* New upstream release (effectively beta for v3.0)
|
|
||||||
|
|
||||||
-- David Goodwin <david@palepurple.co.uk> Tue, 06 May 2014 21:36:00 +0100
|
|
||||||
|
|
||||||
postfixadmin (2.3.5-2) unstable; urgency=low
|
|
||||||
|
|
||||||
* Added .po translation files (Closes: 667951, #667962, #668202, #668288)
|
|
||||||
* Closes: #668298, #668301, #668405, #668635
|
|
||||||
* Updated standards version to 3.9.3 without changes.
|
|
||||||
|
|
||||||
-- Norman Messtorff <normes@normes.org> Thu, 26 Apr 2012 20:55:57 +0200
|
|
||||||
|
|
||||||
postfixadmin (2.3.5-1) unstable; urgency=low
|
|
||||||
|
|
||||||
* Initial Debian release (Closes: #247225)
|
|
||||||
|
|
||||||
-- Norman Messtorff <normes@normes.org> Sun, 15 Jan 2012 12:27:28 +0100
|
|
||||||
|
|
||||||
|
|||||||
@ -1 +1 @@
|
|||||||
7
|
5
|
||||||
|
|||||||
@ -0,0 +1,2 @@
|
|||||||
|
/etc/apache2/conf.d/postfixadmin
|
||||||
|
/etc/postfixadmin/config.inc.php
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue