Package: rdiff-backup
Version: 1.1.14-1
Severity: normal
Tags: patch

In AFS, non-privileged users can change the high-bit permissions on
files, but not on directories.  The enclosed patch makes the
high_perms test try to set bits on both files and directories.  The
new test should succeed in less weird filesystems, but fail in afs.

(When a privileged users tries to set high-bit permissions on a
directory, chmod returns 0 but the bits aren't set, which means a
privileged user might fail more subtly and silently.  I haven't tested
this case, but this patch won't make the situation any worse.)

-- System Information:
Debian Release: 3.1
  APT prefers testing
  APT policy: (990, 'testing'), (500, 'unstable'), (500, 'stable')
Architecture: sparc (sparc64)

Kernel: Linux 2.6.14-2-sparc64
Locale: LANG=C, LC_CTYPE=C (charmap=ANSI_X3.4-1968)
Shell: /bin/sh linked to /bin/bash

Versions of packages rdiff-backup depends on:
ii  libc6                         2.6.1-1    GNU C Library: Shared libraries
ii  librsync1                     0.9.7-1    Library which implements the rsync
ii  python                        2.4.4-6    An interactive high-level object-o
ii  python-support                0.7.4      automated rebuilding support for p

Versions of packages rdiff-backup recommends:
pn  python-pylibacl               <none>     (no description available)
pn  python-pyxattr                <none>     (no description available)

-- no debconf information

*** /tmp/diff
diff -wru rdiff_backup.orig/fs_abilities.py rdiff_backup/fs_abilities.py
--- rdiff_backup.orig/fs_abilities.py   2007-08-13 16:39:22.000000000 +0000
+++ rdiff_backup/fs_abilities.py        2007-11-05 06:31:34.000000000 +0000
@@ -411,14 +411,19 @@
 
        def set_high_perms_readwrite(self, dir_rp):
                """Test for writing high-bit permissions like suid"""
-               tmp_rp = dir_rp.append("high_perms")
-               tmp_rp.touch()
+               tmpf_rp = dir_rp.append("high_perms_file")
+               tmpf_rp.touch()
+               tmpd_rp = dir_rp.append("high_perms_dir")
+               tmpd_rp.mkdir()
                try:
-                       tmp_rp.chmod(07000)
-                       tmp_rp.chmod(07777)
+                       tmpf_rp.chmod(07000)
+                       tmpf_rp.chmod(07777)
+                       tmpd_rp.chmod(07000)
+                       tmpd_rp.chmod(07777)
                except (OSError, IOError): self.high_perms = 0
                else: self.high_perms = 1
-               tmp_rp.delete()
+               tmpf_rp.delete()
+               tmpd_rp.rmdir()
 
        def set_symlink_perms(self, dir_rp):
                """Test if symlink permissions are affected by umask"""
diff -wru rdiff_backup.orig/fs_abilities.py rdiff_backup/fs_abilities.py
--- rdiff_backup.orig/fs_abilities.py   2007-08-13 16:39:22.000000000 +0000
+++ rdiff_backup/fs_abilities.py        2007-11-05 06:31:34.000000000 +0000
@@ -411,14 +411,19 @@
 
        def set_high_perms_readwrite(self, dir_rp):
                """Test for writing high-bit permissions like suid"""
-               tmp_rp = dir_rp.append("high_perms")
-               tmp_rp.touch()
+               tmpf_rp = dir_rp.append("high_perms_file")
+               tmpf_rp.touch()
+               tmpd_rp = dir_rp.append("high_perms_dir")
+               tmpd_rp.mkdir()
                try:
-                       tmp_rp.chmod(07000)
-                       tmp_rp.chmod(07777)
+                       tmpf_rp.chmod(07000)
+                       tmpf_rp.chmod(07777)
+                       tmpd_rp.chmod(07000)
+                       tmpd_rp.chmod(07777)
                except (OSError, IOError): self.high_perms = 0
                else: self.high_perms = 1
-               tmp_rp.delete()
+               tmpf_rp.delete()
+               tmpd_rp.rmdir()
 
        def set_symlink_perms(self, dir_rp):
                """Test if symlink permissions are affected by umask"""
Only in rdiff_backup: fs_abilities.py~

Reply via email to