add script to create emails by hand from the commandline
This commit is contained in:
parent
c76903673b
commit
fbb834c75e
|
@ -654,6 +654,7 @@ src/generate_apache_conf.php -text
|
||||||
src/generate_bind_conf.php -text
|
src/generate_bind_conf.php -text
|
||||||
src/inotify_do_actions.sh -text
|
src/inotify_do_actions.sh -text
|
||||||
src/inotify_update_domains.sh -text
|
src/inotify_update_domains.sh -text
|
||||||
|
src/mail_add.php -text
|
||||||
src/mail_dodelete.php -text
|
src/mail_dodelete.php -text
|
||||||
src/mem_add -text
|
src/mem_add -text
|
||||||
src/mem_del -text
|
src/mem_del -text
|
||||||
|
|
|
@ -0,0 +1,147 @@
|
||||||
|
#!/usr/bin/php -q
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* @file helper function to create emails from the commandline
|
||||||
|
*
|
||||||
|
* automatically generates a password based on the configured
|
||||||
|
* password generators
|
||||||
|
*
|
||||||
|
* Limitations
|
||||||
|
* - has snarky comments about how PHP or AlternC is badly designed
|
||||||
|
* - can create a mailbox or a forward, not both
|
||||||
|
* - configuration is inline here
|
||||||
|
* - quotas and "dryrun" options are hardcoded because php's getopt sucks
|
||||||
|
*/
|
||||||
|
|
||||||
|
// just for inspection
|
||||||
|
global $cuid;
|
||||||
|
|
||||||
|
// those will be tried in order, the first one to return more than 7
|
||||||
|
// chars will win
|
||||||
|
$generators = array('pwqgen', 'pwgen');
|
||||||
|
$dryrun = false;
|
||||||
|
// 1GB default quota
|
||||||
|
$default_quotas = 1024; // in MB because using bytes would be too
|
||||||
|
// precise (try to guess AlternC, just you try)
|
||||||
|
|
||||||
|
require_once("/usr/share/alternc/panel/class/config_nochk.php");
|
||||||
|
|
||||||
|
function usage() {
|
||||||
|
global $argv;
|
||||||
|
// putting {$argv[0]} or $argv[0] in the heredoc fails
|
||||||
|
$wtfphp = $argv[0];
|
||||||
|
$u = <<<EOF
|
||||||
|
Usage: $wtfphp <email> <alias> ...
|
||||||
|
|
||||||
|
email: full email adress, including domain, which must exist
|
||||||
|
alias: one or many aliases the email should forward to, space separated
|
||||||
|
|
||||||
|
EOF;
|
||||||
|
error_log($u);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (count($argv) < 2) {
|
||||||
|
usage();
|
||||||
|
}
|
||||||
|
|
||||||
|
$user = preg_split('/@/', $argv[1])[0]; // first argument is user@domain
|
||||||
|
$domain = preg_split('/@/', $argv[1])[1];
|
||||||
|
$recipients = array_slice($argv, 2); // rest is recipients
|
||||||
|
|
||||||
|
// there's no function to do that, oddly enough...
|
||||||
|
// there's one to extract the compte from the mail_id (!) but we
|
||||||
|
// haven't created it yet...
|
||||||
|
$db->query('SELECT id,compte FROM domaines WHERE domaine="'.addslashes($domain).'"');
|
||||||
|
if ($db->next_record()) {
|
||||||
|
$compte = $db->f('compte');
|
||||||
|
$domain_id = $db->f('id');
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
error_log("domain $domain not found");
|
||||||
|
exit(2);
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($generators as $generator) {
|
||||||
|
$password = `$generator 2>/dev/null`;
|
||||||
|
if (!is_null($password) and strlen($password) > 7) {
|
||||||
|
$password = trim($password);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (is_null($password)) {
|
||||||
|
error_log('password generators failed to produce 8 characters: ' . join("\n", $generators));
|
||||||
|
exit(3);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* need not to be $quota because that would replace alternc's global
|
||||||
|
* $quota... even though we don't say global $quota anywhere here, yay
|
||||||
|
* php scoping.
|
||||||
|
*/
|
||||||
|
$quotas = $default_quotas;
|
||||||
|
$r = join(", ", $recipients);
|
||||||
|
|
||||||
|
print <<<EOF
|
||||||
|
user: $user
|
||||||
|
domain: $domain
|
||||||
|
compte: $compte
|
||||||
|
password: $password
|
||||||
|
quota: $default_quotas
|
||||||
|
recipients: $r
|
||||||
|
|
||||||
|
EOF;
|
||||||
|
|
||||||
|
if ($dryrun) {
|
||||||
|
error_log('not creating email because of $dryrun is true');
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
print "cuid: $cuid\n";
|
||||||
|
$mem->su($compte);
|
||||||
|
print "cuid: $cuid\n";
|
||||||
|
|
||||||
|
/* function signature is:
|
||||||
|
* function create($dom_id, $mail,$type="",$dontcheck=false)
|
||||||
|
* yet $type is never passed anywhere and is actually empty in the
|
||||||
|
* database (!) $dontcheck is undocumented, so we'll ignore it
|
||||||
|
*
|
||||||
|
* also, this function explicitely tells me to not use it, but doesn't
|
||||||
|
* provide an alternative. i choose to disobey instead of rewriting it
|
||||||
|
* from scratch
|
||||||
|
*/
|
||||||
|
if (!($mail_id = $mail->create($domain_id, $user))) {
|
||||||
|
error_log('failed to create: ' . $err->errstr());
|
||||||
|
exit(4);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* function set_passwd($mail_id,$pass)
|
||||||
|
*
|
||||||
|
* just set the password
|
||||||
|
*
|
||||||
|
* no idea why this is a different function.
|
||||||
|
*/
|
||||||
|
if (!$mail->set_passwd($mail_id,$password)) {
|
||||||
|
error_log("failed to set password on mail $mail_id: " . $err->errstr());
|
||||||
|
exit(5);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* function set_details($mail_id, $islocal, $quotamb,
|
||||||
|
* $recipients,$delivery="dovecot",$dontcheck=false)
|
||||||
|
*
|
||||||
|
* you read that right, recipients is a string (!)
|
||||||
|
*
|
||||||
|
* if we have no aliases, it's a mailbox. deal with it.
|
||||||
|
*/
|
||||||
|
if (!$mail->set_details($mail_id, !count($recipients), $quota, join("\n", $recipients))) {
|
||||||
|
error_log('failed to set details: ' . $err->errstr());
|
||||||
|
exit(6);
|
||||||
|
}
|
||||||
|
|
||||||
|
// maybe we need to call the hooks? i don't know!
|
||||||
|
/* $rh=$hooks->invoke("mail_edit_post",array($mail_id)); */
|
||||||
|
/* if (in_array(false,$res,true)) { */
|
||||||
|
/* include ("mail_edit.php"); */
|
||||||
|
/* exit(); */
|
||||||
|
/* } else { */
|
||||||
|
/* foreach($rh as $h) if ($h) $error.=$h."<br />"; */
|
||||||
|
/* } */
|
||||||
|
|
Loading…
Reference in New Issue