tags 370396 patch
thanks

See attached patch. New config option: admingroup. It also adds one
additional check, which is the containing directory of configuration
files; if that has +w, there's also a security problem, no?

-- 
Please do not send copies of list mail to me; I read the list!
 
 .''`.     martin f. krafft <[EMAIL PROTECTED]>
: :'  :    proud Debian developer and author: http://debiansystem.info
`. `'`
  `-  Debian - when you have better things to do than fixing a system
--- /usr/sbin/backupninja.orig  2006-04-08 23:03:53.000000000 +0200
+++ /usr/sbin/backupninja       2006-06-05 02:36:29.827183100 +0200
@@ -130,17 +130,38 @@
 #
 
 function check_perms() {
+       set -x
        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
+       local stat
+       stat=($(stat -L --printf='%a %g %G %u %U' $file))
+       local gperm=${stat[0]:1:1}
+       local wperm=${stat[0]:2:1}
+       local gid=${stat[1]}
+       local group=${stat[2]}
+       local owner=${stat[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 ${stat[2]}! Dying on file $file"
+                                       fatal "Configuration files must 
writable/readable by group ${stat[2]}! Dying on file $file"
+                               fi
+                               ;;
+               esac
+       fi
+       set +x
 }
 
 # simple lowercase function
@@ -403,6 +424,7 @@
 setfile $conffile
 
 # get global config options (second param is the default)
+getconf admingroup root
 getconf configdirectory /etc/backup.d
 getconf scriptdirectory /usr/share/backupninja
 getconf reportemail
@@ -461,6 +483,7 @@
 for file in $files; do
        [ -f "$file" ] || continue
 
+       check_perms ${file%/*} # check containing dir
        check_perms $file
        suffix="${file##*.}"
        base=`basename $file`

Attachment: signature.asc
Description: Digital signature (GPG/PGP)

Reply via email to