# HG changeset patch # User wolfgang.scherer@gmx.de # Date 2018-02-28 13:52:14 # Node ID 0152e8091f0c0b37d0d36768b0ed21731f6f618a # Parent 0068aed3241c675fec5af4e7f97f92e16b624f7b unconditional $FOOTER implemented via $VACATION_MSG_IN_FILE. $SUDO_CMD debugging. diff --git a/index.php b/index.php --- a/index.php +++ b/index.php @@ -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 (''."\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( - '%s -u %s %s %s %s', - $SUDO_CMD, $user, $SUDO_OPT_H, $VACATION_CMD, $VACATION_INIT_OPTS)); - $vacation_excl_pipe = popen(sprintf( - '%s -u %s %s %s %s', - $SUDO_CMD, $user, $SUDO_OPT_H, $VACATION_CMD, $VACATION_EXLCUDE_OPTS), - 'w'); + $cmd = sprintf( + '%s -u %s %s %s %s', + $SUDO_CMD, $user, $SUDO_OPT_H, $VACATION_CMD, $VACATION_INIT_OPTS); + // fprintf($stderr, "\$cmd: %s
\n", $cmd); + system($cmd); + + $pipe_cmd = sprintf( + '%s -u %s %s %s %s', + $SUDO_CMD, $user, $SUDO_OPT_H, $VACATION_CMD, $VACATION_EXLCUDE_OPTS); + // fprintf($stderr, "\$pipe_cmd: %s
\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( - '%s -u %s %s %s %s', - $SUDO_CMD, $user, $SUDO_OPT_H, $WRITE_TO_CMD, $vacation_msg_file), - 'w'); + $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
\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); + // fprintf($stderr, "\$pipe_cmd: %s
\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( - '%s -u %s %s %s %s', - $SUDO_CMD, $user, $SUDO_OPT_H, $VACATION_CMD, $VACATION_INIT_OPTS)); - $vacation_excl_pipe = popen(sprintf( - '%s -u %s %s %s %s', - $SUDO_CMD, $user, $SUDO_OPT_H, $VACATION_CMD, $VACATION_EXLCUDE_OPTS), - 'w'); + $cmd = sprintf( + '%s -u %s %s %s %s', + $SUDO_CMD, $user, $SUDO_OPT_H, $VACATION_CMD, $VACATION_INIT_OPTS); + // fprintf($stderr, "\$cmd: %s
\n", $cmd); + system($cmd); + + $pipe_cmd = sprintf( + '%s -u %s %s %s %s', + $SUDO_CMD, $user, $SUDO_OPT_H, $VACATION_CMD, $VACATION_EXLCUDE_OPTS); + // fprintf($stderr, "\$pipe_cmd: %s
\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( - '%s -u %s %s %s %s', - $SUDO_CMD, $user, $SUDO_OPT_H, $WRITE_TO_CMD, $forward_file), - 'w'); + $pipe_cmd = sprintf( + '%s -u %s %s %s %s', + $SUDO_CMD, $user, $SUDO_OPT_H, $WRITE_TO_CMD, $forward_file); + // fprintf($stderr, "\$pipe_cmd: %s
\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
\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( - '%s -u %s %s %s %s', - $SUDO_CMD, $user, $SUDO_OPT_H, $RM_CMD, $forward_file)); + $cmd = sprintf( + '%s -u %s %s %s %s', + $SUDO_CMD, $user, $SUDO_OPT_H, $RM_CMD, $forward_file); + // fprintf($stderr, "\$cmd: %s
\n", $cmd); + system($cmd); if (!empty($VACATION_FORWARD_EXT_ENTRY)) { foreach ($FORWARD_EXTENSIONS as $fe) { - system(sprintf( - '%s -u %s %s %s %s%s', - $SUDO_CMD, $user, $SUDO_OPT_H, $RM_CMD, $forward_file, $fe)); + $cmd = sprintf( + '%s -u %s %s %s %s%s', + $SUDO_CMD, $user, $SUDO_OPT_H, $RM_CMD, $forward_file, $fe); + // fprintf($stderr, "\$cmd: %s
\n", $cmd); + system($cmd); } } } @@ -584,6 +617,7 @@ if ($x_wsv_raw || $EXPERT_ENABLED) // echo ('
'."\n");
 // echo ($vacation_list_cmd);
 // echo ('
'."\n"); +// fprintf($stderr, "\$vacation_list_cmd: %s
\n", $vacation_list_cmd); $vacation_ausgabe = popen ($vacation_list_cmd, 'r'); $vacation_list = stream_get_contents($vacation_ausgabe); pclose($vacation_ausgabe); diff --git a/lib/config.php b/lib/config.php --- a/lib/config.php +++ b/lib/config.php @@ -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") diff --git a/lib/util.php b/lib/util.php --- a/lib/util.php +++ b/lib/util.php @@ -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
\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
\n", $cat_cmd); $cat_ausgabe = popen ($cat_cmd, 'r'); $result = stream_get_contents($cat_ausgabe); pclose($cat_ausgabe); diff --git a/lib/ws-vacation-sudo.in b/lib/ws-vacation-sudo.in --- a/lib/ws-vacation-sudo.in +++ b/lib/ws-vacation-sudo.in @@ -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