]> git.proxmox.com Git - pve-manager.git/commitdiff
add new pvemailforward helper
authorDietmar Maurer <dietmar@proxmox.com>
Wed, 18 Jan 2012 08:45:54 +0000 (09:45 +0100)
committerDietmar Maurer <dietmar@proxmox.com>
Wed, 18 Jan 2012 08:45:54 +0000 (09:45 +0100)
And automatically install a .forward file.

bin/Makefile
bin/pvemailforward [new file with mode: 0755]
debian/postinst

index cda55d79df92026c216ba29414b342a2750c6893..348a87fd61627d2b17f33c2fa064dcc24778fd92 100644 (file)
@@ -42,10 +42,11 @@ vzrestore.1.pod: vzrestore
        perl -I.. ./vzrestore printmanpod >$@
 
 .PHONY: install 
-install: ${SCRIPTS} ${MANS}
+install: ${SCRIPTS} ${MANS} pvemailforward
        perl -I.. ./pvesh verifyapi
        install -d ${BINDIR}
        install -m 0755 ${SCRIPTS} ${BINDIR}
+       install -m 2755 -g www-data pvemailforward ${BINDIR}
        install -d ${MAN1DIR}
        install -m 0644 ${MANS} ${MAN1DIR}
        install -d ${PODDIR}
diff --git a/bin/pvemailforward b/bin/pvemailforward
new file mode 100755 (executable)
index 0000000..10d0b65
--- /dev/null
@@ -0,0 +1,40 @@
+#!/usr/bin/perl -w -T
+
+use strict;
+use warnings;
+use PVE::Tools;
+use PVE::SafeSyslog;
+use PVE::AccessControl;
+
+# NOTE: we need to run this with setgid www-data
+# else we cant read /etc/pve/user.cfg
+
+$ENV{'PATH'} = '/sbin:/bin:/usr/sbin:/usr/bin';
+
+initlog('pvemailforward');
+
+eval {
+    # note: that fails because we run with wrong uid (nobody)
+    #my $usercfg = cfs_read_file("user.cfg");
+    my $filename = "/etc/pve/user.cfg";
+    my $raw = PVE::Tools::file_get_contents($filename);
+    my $usercfg = PVE::AccessControl::parse_user_config($filename, $raw);
+
+    my $rootcfg = $usercfg->{users}->{'root@pam'} || {};
+    my $mailto = $rootcfg->{email};
+
+    die "user 'root\@pam' does not have a email address\n" if !$mailto;
+
+    syslog("info", "forward mail to <$mailto>");
+
+    # we never send DSN (avoid mail loops)
+    open(CMD, "|sendmail -bm -N never $mailto") ||
+       die "can't exec sendmail - $!\n";
+    while (<>) { print CMD $_; }
+    close(CMD);
+};
+if (my $err = $@) {
+    syslog('err', "mail forward failed: $err");
+}
+
+exit(0);
index 50469d632f55003421a0d4962046586f035901e3..1df1c3c9b7e9a1a39773b72dac01a60df83ca667 100755 (executable)
@@ -38,7 +38,16 @@ case "$1" in
     mkdir /etc/pve 2>/dev/null || true
 
     test -e /var/lib/pve-manager/apl-available || cp /usr/share/doc/pve-manager/aplinfo.dat /var/lib/pve-manager/apl-available
-    
+
+    if test -f /root/.forward; then
+       if ! grep -q '|/usr/bin/pvemailforward' /root/.forward; then 
+           echo "|/usr/bin/pvemailforward\n$(cat /root/.forward)" >/root/.forward.tmp
+           mv /root/.forward.tmp /root/.forward
+       fi
+    else
+       echo '|/usr/bin/pvemailforward' >/root/.forward
+    fi
+       
     update-rc.d pvedaemon defaults 21 79 >/dev/null
     update-rc.d pvestatd defaults 21 79 >/dev/null
     update-rc.d pvebanner start 99 2 3 4 5 >/dev/null