From ac7413f5d0756aeaf63b0ad2557aca0b741643da Mon Sep 17 00:00:00 2001 From: micah Date: Fri, 9 Jun 2006 17:27:21 +0000 Subject: [PATCH] Added a slightly modified version of the anti-fascist patch (allows for a configurable admingroup to be set, instead of forcing it to be root), closes debian bug#370396 git-svn-id: http://code.autistici.org/svn/backupninja/trunk@406 758a04ac-41e6-0310-8a23-8373a73cc35d --- AUTHORS | 1 + ChangeLog | 5 +++++ etc/backupninja.conf.in | 4 ++++ src/backupninja.in | 44 ++++++++++++++++++++++++++++++----------- 4 files changed, 43 insertions(+), 11 deletions(-) diff --git a/AUTHORS b/AUTHORS index 4181b73..8b615d1 100644 --- a/AUTHORS +++ b/AUTHORS @@ -15,3 +15,4 @@ cmccallum@thecsl.org Daniel.Bonniot@inria.fr Brad Fritz -- trac patch garcondumonde@riseup.net +Martin Krafft madduck@debian.org -- admingroup patch \ No newline at end of file diff --git a/ChangeLog b/ChangeLog index 07430ce..b1e9fd7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -3,6 +3,11 @@ version 0.9.4 -- unreleased . Fixed bug in toint(), and thus isnow(), which caused it to not work when run from cron. . Recursively ignore subdirs in /etc/backup.d (Closes: #361102) + . Add admingroup option to configuration to allow a group that can + read/write configurations (instead of only allowing root). Checks + and complains about group-readable files only when the group differs + from the one in the configuration file (default is root as before). + Thanks to Martin Krafft for the patch (Closes: #370396). handler changes Added tar handler mysql: diff --git a/etc/backupninja.conf.in b/etc/backupninja.conf.in index 362eb59..10ac2bb 100644 --- a/etc/backupninja.conf.in +++ b/etc/backupninja.conf.in @@ -25,6 +25,10 @@ reportsuccess = yes # even if there was no error. (default = yes) reportwarning = yes +# set to the administration group that is allowed to +# read/write configuration files in /etc/backup.d +admingroup = root + ####################################################### # for most installations, the defaults below are good # ####################################################### diff --git a/src/backupninja.in b/src/backupninja.in index 2835a3c..57936da 100755 --- a/src/backupninja.in +++ b/src/backupninja.in @@ -130,17 +130,37 @@ function msg { # function check_perms() { - local file=$1 - local perms=`ls -ld $file` - perms=${perms:4:6} - if [ "$perms" != "------" ]; then - echo "Configuration files must not be group or world writable/readable! Dying on file $file" - fatal "Configuration files must not be group or world writable/readable! Dying on file $file" - fi - if [ `ls -ld $file | awk '{print $3}'` != "root" ]; then - echo "Configuration files must be owned by root! Dying on file $file" - fatal "Configuration files must be owned by root! Dying on file $file" - fi + local file=$1 + local perms + perms=($(stat -L --printf='%a %g %G %u %U' $file)) + local gperm=${perms[0]:1:1} + local wperm=${perms[0]:2:1} + local gid=${perms[1]} + local group=${perms[2]} + local owner=${perms[3]} + + if [ "$owner" != 0 ]; then + echo "Configuration files must be owned by root! Dying on file $file" + fatal "Configuration files must be owned by root! Dying on file $file" + fi + + if [ $wperm -gt 0 ]; then + echo "Configuration files must not be world writable/readable! Dying on file $file" + fatal "Configuration files must not be world writable/readable! Dying on file $file" + fi + + if [ $gperm -gt 0 ]; then + case "$admingroup" in + $gid|$group) :;; + + *) + if [ "$gid" != 0 ]; then + echo "Configuration files must writable/readable by group ${perms[2]}! Dying on file $file" + fatal "Configuration files must writable/readable by group ${perms[2]}! Dying on file $file" + fi + ;; + esac + fi } # simple lowercase function @@ -423,6 +443,7 @@ getconf PGSQLDUMP /usr/bin/pg_dump getconf PGSQLDUMPALL /usr/bin/pg_dumpall getconf GZIP /bin/gzip getconf RSYNC /usr/bin/rsync +getconf admingroup root # initialize vservers support # (get config variables and check real vservers availability) @@ -461,6 +482,7 @@ fi for file in $files; do [ -f "$file" ] || continue + check_perms ${file%/*} # check containing dir check_perms $file suffix="${file##*.}" base=`basename $file` -- 2.30.2