rdiff-backup-users
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [rdiff-backup-users] [PATCH] Preserve symlink permissions


From: dean gaudet
Subject: Re: [rdiff-backup-users] [PATCH] Preserve symlink permissions
Date: Sun, 5 Nov 2006 12:30:00 -0800 (PST)

On Sun, 5 Nov 2006, Andrew Ferguson wrote:

> Blair Zajac wrote:
> >> diff -Nur rdiff-backup-cvs/rdiff_backup/rpath.py rdiff-backup- 
> >> symlink-perms/rdiff_backup/rpath.py
> >> --- rdiff-backup-cvs/rdiff_backup/rpath.py 2006-01-13  
> >> 00:29:47.000000000 -0500
> >> +++ rdiff-backup-symlink-perms/rdiff_backup/rpath.py       2006-11-04  
> >> 15:55:39.000000000 -0500
> >> @@ -100,7 +100,12 @@
> >>
> >>    if rpin.isreg(): return copy_reg_file(rpin, rpout, compress)
> >>    elif rpin.isdir(): rpout.mkdir()
> >> -  elif rpin.issym(): rpout.symlink(rpin.readlink())
> >> +  elif rpin.issym():
> >> +          # some systems support permissions for symlinks, but
> >> +          # only by setting at creation via the umask
> >> +          os.umask(0777 - rpin.getperms())
> >> +          rpout.symlink(rpin.readlink())
> >> +          os.umask(077)   # restore rdiff-backup standard umask
> > 
> > I think it would be clearer to do something like this saving the  
> > current result of the umask, so if the umask is changed anywhere  
> > else, it'll always be restored:
> > 
> >             # some systems support permissions for symlinks, but
> >             # only by setting at creation via the umask
> >             orig_umask = os.umask(0777 - rpin.getperms())
> >             rpout.symlink(rpin.readlink())
> >             os.umask(orig_umask)
> 
> Indeed. Thanks, Blair.
> 
> Dean, can you apply the attached patch to CVS?

yeah... i used 0777 & ~rpin.getperms() as well.  in case rpin.getperms() 
returns set[ug]id or sticky.

btw -- adding two syscalls per symlink creation is a bit of a waste for 
platforms where it doesn't matter.  any chance you'd consider adding a 
test to fs_abilities and conditionalizing on it?

-dean




reply via email to

[Prev in Thread] Current Thread [Next in Thread]