Changeset - r41:0152e8091f0c
[Not reviewed]
default
0 4 0
Wolfgang Scherer (ws) - 7 years ago 2018-02-28 13:52:14
wolfgang.scherer@gmx.de
unconditional $FOOTER implemented via $VACATION_MSG_IN_FILE. $SUDO_CMD debugging.
4 files changed with 70 insertions and 249 deletions:
0 comments (0 inline, 0 general)
index.php
Show inline comments
 
@@ -39,6 +39,8 @@ if (isset($_REQUEST['_DEBUG_'])) {
 
    $_debug = 0;
 
}
 

	
 
//$stderr = fopen('php://stderr', 'w');
 

	
 
// file_put_contents('/tmp/xxxxxxx', 'check');
 
// system('touch /tmp/xxxxxx1');
 

	
 
@@ -188,6 +190,7 @@ if ($_debug) {
 
    echo ('</pre>'."\n");
 
}
 

	
 
$vacation_msg_in_file = sprintf('%s/%s', $home, $VACATION_MSG_IN_FILE);
 
$vacation_msg_file = sprintf('%s/%s', $home, $VACATION_MSG_FILE);
 
$vacation_db_file = sprintf('%s/%s', $home, $VACATION_DB_FILE);
 
$forward_file = sprintf('%s/%s', $home, $FORWARD_FILE);
 
@@ -219,7 +222,7 @@ if ($forward_active)
 

	
 
$vacation_setup_raw = isset($_REQUEST["raw"]);
 
$vacation_clear = isset($_REQUEST['clear']);
 
if ($vacation_clear || !test_readable($vacation_msg_file, $user)) {
 
if ($vacation_clear || !test_readable($vacation_msg_in_file, $user)) {
 
    // Reset to default
 
    $vacation_msg = get_text('vacation');
 
    $vacation_parts = vacation_split($vacation_msg, False);
 
@@ -228,7 +231,7 @@ if ($vacation_clear || !test_readable($v
 
    $vacation_msg = vacation_join($vacation_subject, $vacation_body);
 
    $vacation_setup_raw = False;
 
} else {
 
    $vacation_msg = cat_file($vacation_msg_file, $user);
 
    $vacation_msg = cat_file($vacation_msg_in_file, $user);
 
}
 

	
 
$message_parts = message_split($vacation_msg);
 
@@ -312,13 +315,17 @@ if ($vacation_setup || $vacation_setup_r
 

	
 
    while (True) {
 
        if ($vacation_del_log) {
 
            system(sprintf(
 
            $cmd = sprintf(
 
                       '%s -u %s %s %s %s',
 
                       $SUDO_CMD, $user, $SUDO_OPT_H, $VACATION_CMD, $VACATION_INIT_OPTS));
 
            $vacation_excl_pipe = popen(sprintf(
 
                $SUDO_CMD, $user, $SUDO_OPT_H, $VACATION_CMD, $VACATION_INIT_OPTS);
 
            // fprintf($stderr, "\$cmd: %s<br>\n", $cmd);
 
            system($cmd);
 

	
 
            $pipe_cmd = sprintf(
 
                      '%s -u %s %s %s %s',
 
                      $SUDO_CMD, $user, $SUDO_OPT_H, $VACATION_CMD, $VACATION_EXLCUDE_OPTS),
 
                'w');
 
                $SUDO_CMD, $user, $SUDO_OPT_H, $VACATION_CMD, $VACATION_EXLCUDE_OPTS);
 
            // fprintf($stderr, "\$pipe_cmd: %s<br>\n", $pipe_cmd);
 
            $vacation_excl_pipe = popen($pipe_cmd, 'w');
 
            fwrite($vacation_excl_pipe, sprintf("%s%s\n", $user, $DOMAIN_SUFFIX));
 
            if (!empty($user_alias)) {
 
                fwrite($vacation_excl_pipe, sprintf("%s%s\n", $user_alias, $DOMAIN_SUFFIX));
 
@@ -351,22 +358,42 @@ if ($vacation_setup || $vacation_setup_r
 
        } else {
 
            $vacation_msg = vacation_join($vacation_subject, $vacation_body, $vacation_headers);
 
        }
 
        $vacation_msg_pipe = popen(sprintf(
 
        $pipe_cmd = sprintf(
 
            '%s -u %s %s %s %s',
 
            $SUDO_CMD, $user, $SUDO_OPT_H, $WRITE_TO_CMD, $vacation_msg_in_file);
 
        // fprintf($stderr, "\$pipe_cmd: %s<br>\n", $pipe_cmd);
 

	
 
        $vacation_msg_pipe = popen($pipe_cmd, 'w');
 
        fwrite($vacation_msg_pipe, $vacation_msg);
 
        pclose($vacation_msg_pipe);
 

	
 
        $pipe_cmd = sprintf(
 
                  '%s -u %s %s %s %s',
 
                  $SUDO_CMD, $user, $SUDO_OPT_H, $WRITE_TO_CMD, $vacation_msg_file),
 
            'w');
 
        fwrite($vacation_msg_pipe, $vacation_msg);
 
            $SUDO_CMD, $user, $SUDO_OPT_H, $WRITE_TO_CMD, $vacation_msg_file);
 
        // fprintf($stderr, "\$pipe_cmd: %s<br>\n", $pipe_cmd);
 

	
 
        $vacation_msg_pipe = popen($pipe_cmd, 'w');
 
        if (!$FOOTER || $vacation_setup_raw || $x_wsv_raw) {
 
            $full_msg = $vacation_msg;
 
        } else {
 
            $full_msg = rtrim(rtrim($vacation_msg)."\n".$FOOTER)."\n";
 
        }
 
        fwrite($vacation_msg_pipe, $full_msg);
 
        pclose($vacation_msg_pipe);
 

	
 
        // Initialize vacation(1) if necessary.
 
        if (!test_readable($vacation_db_file, $user)) {
 
            system(sprintf(
 
            $cmd = sprintf(
 
                       '%s -u %s %s %s %s',
 
                       $SUDO_CMD, $user, $SUDO_OPT_H, $VACATION_CMD, $VACATION_INIT_OPTS));
 
            $vacation_excl_pipe = popen(sprintf(
 
                $SUDO_CMD, $user, $SUDO_OPT_H, $VACATION_CMD, $VACATION_INIT_OPTS);
 
            // fprintf($stderr, "\$cmd: %s<br>\n", $cmd);
 
            system($cmd);
 

	
 
            $pipe_cmd = sprintf(
 
                      '%s -u %s %s %s %s',
 
                      $SUDO_CMD, $user, $SUDO_OPT_H, $VACATION_CMD, $VACATION_EXLCUDE_OPTS),
 
                'w');
 
                $SUDO_CMD, $user, $SUDO_OPT_H, $VACATION_CMD, $VACATION_EXLCUDE_OPTS);
 
            // fprintf($stderr, "\$pipe_cmd: %s<br>\n", $pipe_cmd);
 
            $vacation_excl_pipe = popen($pipe_cmd, 'w');
 
            fwrite($vacation_excl_pipe, sprintf("%s%s\n", $user, $DOMAIN_SUFFIX));
 
            if (!empty($user_alias)) {
 
                fwrite($vacation_excl_pipe, sprintf("%s%s\n", $user_alias, $DOMAIN_SUFFIX));
 
@@ -387,31 +414,37 @@ if ($vacation_setup || $vacation_setup_r
 
                }
 
                $use_fs[] = $fs;
 
            }
 
            $forward_file_pipe = popen(sprintf(
 
            $pipe_cmd = sprintf(
 
                      '%s -u %s %s %s %s',
 
                      $SUDO_CMD, $user, $SUDO_OPT_H, $WRITE_TO_CMD, $forward_file),
 
                'w');
 
                $SUDO_CMD, $user, $SUDO_OPT_H, $WRITE_TO_CMD, $forward_file);
 
            // fprintf($stderr, "\$pipe_cmd: %s<br>\n", $pipe_cmd);
 
            $forward_file_pipe = popen($pipe_cmd, 'w');
 
            fwrite($forward_file_pipe, implode(", ", $use_fs)."\n");
 
            pclose($forward_file_pipe);
 
            if (!empty($VACATION_FORWARD_EXT_ENTRY)) {
 
                foreach ($FORWARD_EXTENSIONS as $fe) {
 
                    $cmd = sprintf(
 
                    $pipe_cmd = sprintf(
 
                        '%s -u %s %s %s %s%s',
 
                        $SUDO_CMD, $user, $SUDO_OPT_H, $WRITE_TO_CMD, $forward_file, $fe);
 
                    $forward_file_pipe = popen($cmd, 'w');
 
                    // fprintf($stderr, "\$pipe_cmd: %s<br>\n", $pipe_cmd);
 
                    $forward_file_pipe = popen($pipe_cmd, 'w');
 
                    fwrite($forward_file_pipe, $VACATION_FORWARD_EXT_ENTRY."\n");
 
                    pclose($forward_file_pipe);
 
                }
 
            }
 
        } else {
 
            system(sprintf(
 
            $cmd = sprintf(
 
                       '%s -u %s %s %s %s',
 
                       $SUDO_CMD, $user, $SUDO_OPT_H, $RM_CMD, $forward_file));
 
                $SUDO_CMD, $user, $SUDO_OPT_H, $RM_CMD, $forward_file);
 
            // fprintf($stderr, "\$cmd: %s<br>\n", $cmd);
 
            system($cmd);
 
            if (!empty($VACATION_FORWARD_EXT_ENTRY)) {
 
                foreach ($FORWARD_EXTENSIONS as $fe) {
 
                    system(sprintf(
 
                    $cmd = sprintf(
 
                               '%s -u %s %s %s %s%s',
 
                               $SUDO_CMD, $user, $SUDO_OPT_H, $RM_CMD, $forward_file, $fe));
 
                        $SUDO_CMD, $user, $SUDO_OPT_H, $RM_CMD, $forward_file, $fe);
 
                    // fprintf($stderr, "\$cmd: %s<br>\n", $cmd);
 
                    system($cmd);
 
                }
 
            }
 
        }
 
@@ -584,6 +617,7 @@ if ($x_wsv_raw || $EXPERT_ENABLED)
 
// echo ('<pre>'."\n");
 
// echo ($vacation_list_cmd);
 
// echo ('</pre>'."\n");
 
// fprintf($stderr, "\$vacation_list_cmd: %s<br>\n", $vacation_list_cmd);
 
$vacation_ausgabe = popen ($vacation_list_cmd, 'r');
 
$vacation_list = stream_get_contents($vacation_ausgabe);
 
pclose($vacation_ausgabe);
lib/config.php
Show inline comments
 
@@ -47,182 +47,13 @@
 

	
 
// Administrators can modify the settings of all users.
 
$ADMIN_USERS = Array(
 
    'js',
 
    'sw',
 
    'wscherer',
 
    'admin',
 
    'lm',
 
    'sc',
 
    );
 

	
 
// User aliases for vacation
 
$USER_ALIASES = Array(
 
    // auto-generated |:conf:| /etc/srvconfig/mail/userdb-user-for-mx.sh --php-alias
 
    'admin' => 'ws.admin',
 
    'am' => 'andreas.mogel',
 
    'ar' => 'steffen.arndt',
 
    'av' => 'andreas.vehe',
 
    'aw' => 'anne-marie.wolf',
 
    'ba' => 'sandra.bauer',
 
    'be' => 'bernhard.etzelmueller',
 
    'bk' => 'benjamin.kirner',
 
    'bm' => 'michael.bayer',
 
    'bn' => 'bert.nebelung',
 
    'br' => 'robert.biedermann',
 
    'bs' => 'bianca.sattes',
 
    'bt' => 'torhan.bartel',
 
    'bw' => 'bruno.wendel',
 
    'ch' => 'christian.heid',
 
    'chh' => 'christian.hoerner',
 
    'ck' => 'christian.kraemer',
 
    'cl' => 'christian.lindner',
 
    'cm' => 'claus.mayer',
 
    'co' => 'concepcion.ocana-moreno',
 
    'cp' => 'carolin.prinz',
 
    'cr' => 'christian.roeding',
 
    'ct' => 'carsten.thieme',
 
    'de' => 'dieter.ebert',
 
    'dg' => 'daniel.graf',
 
    'dk' => 'david.kuehnl',
 
    'dl' => 'marek.dluzynski',
 
    'dm' => 'dmitri.riss',
 
    'do' => 'martin.dolinski',
 
    'dr' => 'dieter.reuthal',
 
    'ds' => 'david.stroebel',
 
    'du' => 'denis.uhde',
 
    'dz' => 'dominik.zimmermann',
 
    'em' => 'beate.etzelmueller',
 
    'en' => 'ellen.nicklisch',
 
    'es' => 'edith.schneider',
 
    'fg' => 'guido.fischer',
 
    'fj' => 'frank.jaeger',
 
    'fm' => 'frank.mueller',
 
    'fr' => 'frank.richter',
 
    'fs' => 'frank.stiegler',
 
    'fu' => 'friedrich.ullrich',
 
    'gs' => 'gabriele.schoenwald',
 
    'gw' => 'gudrun.wende',
 
    'ha' => 'ralf.haubrich',
 
    'hb' => 'harry.bitterer',
 
    'he' => 'heiko.simeth',
 
    'hh' => 'helmut.henning',
 
    'hl' => 'holger.lucke',
 
    'hm' => 'sebastian.herrmann',
 
    'ho' => 'bernd.hoffmann',
 
    'hp' => 'holger.poeschel',
 
    'hs' => 'hubert.snoppek',
 
    'iv' => 'irene.vehe',
 
    'ja' => 'jan.reuss',
 
    'jdienst' => 'johannes.dienst',
 
    'jh' => 'johannes.schaefer',
 
    'jj' => 'jens.jirschik',
 
    'jm' => 'juergen.mueller',
 
    'jn' => 'jochen.neumeier',
 
    'jo' => 'jonathan.stroebel',
 
    'jp' => 'johannes.perli',
 
    'jr' => 'juergen.reuthal',
 
    'js' => 'juergen.schroll',
 
    'ju' => 'justin.schwarz',
 
    'jw' => 'jan.von.wietersheim',
 
    'kf' => 'katharina.fischer',
 
    'kk' => 'karl-heinz.kaiser',
 
    'kl' => 'rolf.kluge',
 
    'kn' => 'birgit.knaus',
 
    'kr' => 'karin.reuthal',
 
    'ks' => 'karol.schuster',
 
    'lm' => 'michael.letsch',
 
    'ln' => 'lutz.nicklisch',
 
    'lotte' => 'lotte.etzelmueller',
 
    'ma' => 'michael.arz',
 
    'mb' => 'marika.burggraf',
 
    'md' => 'markus.dusel',
 
    'me' => 'marco.melber',
 
    'mf' => 'frank.macha',
 
    'mg' => 'martin.glaessner',
 
    'mi' => 'maria.interrante',
 
    'mj' => 'mandy.junghans',
 
    'mk' => 'manuela.kuenne',
 
    'ml' => 'markus.ludwig',
 
    'mm' => 'mario.manfrini',
 
    'mo' => 'karlheinz.mog',
 
    'mp' => 'marco.pohlenz',
 
    'mr' => 'marianne.rose',
 
    'ms' => 'martin.seiler',
 
    'mt' => 'marcus.thoene',
 
    'mu' => 'jochen.muenz',
 
    'mw' => 'mario.weiler',
 
    'mz' => 'martin.zeptner',
 
    'nd' => 'nadine.dehler',
 
    'ne' => 'nina.etzelmueller',
 
    'ng' => 'norbert.goess',
 
    'nm' => 'nikolei.mauckner',
 
    'no' => 'norbert.wirsching',
 
    'nt' => 'norbert.zengei',
 
    'nw' => 'niklas.weickert',
 
    'ob' => 'ottmar.boettcher',
 
    'os' => 'oliver.schmidt',
 
    'ow' => 'odile.weide',
 
    'pb' => 'praktikant.brehna',
 
    'pf' => 'patrick.froehlich',
 
    'pm' => 'praktikant.marktsteft',
 
    'pn' => 'praktikant.nuernberg',
 
    'po' => 'iris.posch',
 
    'pp' => 'pia.lentowitsch',
 
    'pr' => 'raphael.provazi',
 
    'ps' => 'peter.scheck',
 
    'pt' => 'philipp.ptak',
 
    'pw' => 'peter.weigand',
 
    'qm' => 'uwe.hertlein',
 
    'ra' => 'andreas.reichelt',
 
    'rb' => 'rene.becker',
 
    'rc' => 'roman.conrad',
 
    're' => 'daniel.reuther',
 
    'rf' => 'ronni.freitag',
 
    'rh' => 'raina.hesse',
 
    'rj' => 'julian.rueckel',
 
    'rk' => 'roland.kopitsch',
 
    'rp' => 'renate.paul',
 
    'rs' => 'simone.ruetzel',
 
    'ry' => 'manfred.rychlick',
 
    'sb' => 'denis.steinberg',
 
    'sc' => 'markus.schmitt',
 
    'sd' => 'serem.didin',
 
    'se' => 'daniel.seemann',
 
    'sf' => 'sebastian.fick',
 
    'sh' => 'stefan.holzmann',
 
    'si' => 'simon.henning',
 
    'sj' => 'joerg.schmittlein',
 
    'sk' => 'sandra.kleinschrod',
 
    'sl' => 'jonas.schroll',
 
    'sm' => 'stefan.mueller',
 
    'sn' => 'nico.slansky',
 
    'sr' => 'steffen.reichart',
 
    'st' => 'mario.stelzl',
 
    'su' => 'uwe.schaaf',
 
    'sv' => 'benjamin.schraven',
 
    'sw' => 'wolfgang.scherer',
 
    'tb' => 'thomas.bachmann',
 
    'te' => 'tim.etzelmueller',
 
    'tg' => 'thomas.gruebl',
 
    'th' => 'thorsten.heim',
 
    'tm' => 'thorsten.manger',
 
    'ts' => 'thomas.steinruck',
 
    'ug' => 'ute.gumler',
 
    'us' => 'ursula.schleif',
 
    'vk' => 'volker.kohlhepp',
 
    'vr' => 'volker.reihs',
 
    'vs' => 'vitalij.stein',
 
    'we' => 'gerd.weber',
 
    'wg' => 'gabriele.watl',
 
    'wh' => 'waldemar.hoppe',
 
    'wi' => 'ralf.winkler',
 
    'wk' => 'wolfgang.kirchner',
 
    'wn' => 'wolfgang.neumayr',
 
    'wr' => 'sascha.wendrich',
 
    'wscherer' => 'shop.admin',
 
    'wv' => 'werner.vehe',
 
    'xms' => 'martin.schoenberg',
 
    'yh' => 'yves.hensler',
 
    // |:conf:| end
 
    );
 

	
 
@@ -232,58 +63,8 @@
 
    'clamav',
 
    'postman',
 
    'vmail',
 
    'wscherer',
 
    'julian',
 
    'reserviert2',
 
    'reserviert11',
 
    'reserviert12',
 
    'reserviert30',
 
    'mbak',
 
    'spam',
 
    'ws-gruppe',
 
    'chh',
 
    'kk',
 
    //  auto-generated |:conf:| /etc/srvconfig/mail/userdb-user-for-mx.sh x | sed "s,^,    ',;s/$/',/"
 
    'bn',
 
    'cm',
 
    'cp',
 
    'cr',
 
    'de',
 
    'dg',
 
    'ds',
 
    'fg',
 
    'fs',
 
    'hb',
 
    'hp',
 
    'jm',
 
    'jp',
 
    'jr',
 
    'jw',
 
    'kk',
 
    'kr',
 
    'lm',
 
    'me',
 
    'mf',
 
    'ml',
 
    'mm',
 
    'mo',
 
    'ms',
 
    'mt',
 
    'mz',
 
    'nd',
 
    'pw',
 
    'rb',
 
    're',
 
    'rf',
 
    'sb',
 
    'sf',
 
    'sl',
 
    'sv',
 
    'tm',
 
    'ts',
 
    'ug',
 
    'we',
 
    'wn',
 
    // |:conf:| end
 
    );
 

	
 
@@ -307,6 +88,7 @@
 
$FORMAIL_CMD = '/usr/bin/formail';
 
$VACATION_CMD = '/usr/bin/vacation';
 
$VACATION_MSG_FILE = '.vacation.msg';
 
$VACATION_MSG_IN_FILE = '.vacation.msg.in';
 
$VACATION_DB_FILE = '.vacation.db';
 
$VACATION_INIT_OPTS = '-i -r 1';
 
$VACATION_EXLCUDE_OPTS = '-x';
 
@@ -330,6 +112,9 @@
 
    'in-reply-to',
 
    );
 

	
 
$FOOTER = trim('
 
');
 

	
 
//
 
// :ide-menu: Emacs IDE Menu - Buffer @BUFFER@
 
// . M-x `eIDE-menu' ()(eIDE-menu "z")
lib/util.php
Show inline comments
 
@@ -29,11 +29,12 @@ require_once(dirname(__FILE__) . '/../li
 

	
 
function test_readable($file, $user)
 
{
 
    global $SUDO_CMD, $SUDO_OPT_H, $TEST_CMD;
 
    global $SUDO_CMD, $SUDO_OPT_H, $TEST_CMD, $stderr;
 

	
 
    $test_cmd = sprintf(
 
        "%s -u %s %s %s '%s'",
 
        $SUDO_CMD, $user, $SUDO_OPT_H, $TEST_CMD, $file);
 
    // fprintf($stderr, "\$test_cmd: %s<br>\n", $test_cmd);
 
    $test_ausgabe = popen ($test_cmd, 'r');
 
    $result = stream_get_contents($test_ausgabe);
 
    pclose($test_ausgabe);
 
@@ -42,11 +43,12 @@ function test_readable($file, $user)
 

	
 
function cat_file($file, $user)
 
{
 
    global $SUDO_CMD, $SUDO_OPT_H, $CAT_CMD;
 
    global $SUDO_CMD, $SUDO_OPT_H, $CAT_CMD, $stderr;
 

	
 
    $cat_cmd = sprintf(
 
        "%s -u %s %s %s '%s'",
 
        $SUDO_CMD, $user, $SUDO_OPT_H, $CAT_CMD, $file);
 
    // fprintf($stderr, "\$cat_cmd: %s<br>\n", $cat_cmd);
 
    $cat_ausgabe = popen ($cat_cmd, 'r');
 
    $result = stream_get_contents($cat_ausgabe);
 
    pclose($cat_ausgabe);
lib/ws-vacation-sudo.in
Show inline comments
 
@@ -5,13 +5,13 @@ Cmnd_Alias VACATION=/usr/bin/vacation *
 
Cmnd_Alias RM_FORWARD=/bin/rm -f /home/*/.forward
 
Cmnd_Alias RM_FORWARD_EXT=/bin/rm -f /home/*/.forward+*
 
Cmnd_Alias TEST_FORWARD=@base_dir@/lib/test_readable.sh /home/*/.forward
 
Cmnd_Alias TEST_VACATION_MSG=@base_dir@/lib/test_readable.sh /home/*/.vacation.msg
 
Cmnd_Alias TEST_VACATION_MSG=@base_dir@/lib/test_readable.sh /home/*/.vacation.msg*
 
Cmnd_Alias TEST_VACATION_DB=@base_dir@/lib/test_readable.sh /home/*/.vacation.db
 
Cmnd_Alias GET_FORWARD=/bin/cat /home/*/.forward
 
Cmnd_Alias GET_VACATION_MSG=/bin/cat /home/*/.vacation.msg
 
Cmnd_Alias GET_VACATION_MSG=/bin/cat /home/*/.vacation.msg*
 
Cmnd_Alias PUT_FORWARD=@base_dir@/lib/write_to.sh /home/*/.forward
 
Cmnd_Alias PUT_FORWARD_EXT=@base_dir@/lib/write_to.sh /home/*/.forward+*
 
Cmnd_Alias PUT_VACATION_MSG=@base_dir@/lib/write_to.sh /home/*/.vacation.msg
 
Cmnd_Alias PUT_VACATION_MSG=@base_dir@/lib/write_to.sh /home/*/.vacation.msg*
 
WWWRUN ALL=(NOTROOT) NOPASSWD: VACATION
 
WWWRUN ALL=(NOTROOT) NOPASSWD: RM_FORWARD
 
WWWRUN ALL=(NOTROOT) NOPASSWD: RM_FORWARD_EXT
0 comments (0 inline, 0 general)