[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Rdiff-backup-bugs] [bug #15436] Abort when using ACLs and user/group un
From: |
Remy Blank |
Subject: |
[Rdiff-backup-bugs] [bug #15436] Abort when using ACLs and user/group unknown on destination |
Date: |
Fri, 13 Jan 2006 13:57:03 +0100 |
User-agent: |
Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.7.12) Gecko/20051216 Firefox/1.0.7 |
URL:
<http://savannah.nongnu.org/bugs/?func=detailitem&item_id=15436>
Summary: Abort when using ACLs and user/group unknown on
destination
Project: rdiff-backup
Submitted by: remyblank
Submitted on: Fri 01/13/06 at 13:57
Category: None
Severity: 3 - Normal
Item Group: None
Status: None
Privacy: Public
Assigned to: None
Open/Closed: Open
_______________________________________________________
Details:
I am backing up from a linux server with ACLs to a linux server with ACLs.
Both servers have different passwd/group files, i.e. some users from the
source don't exist on the destination. I am not using user or group mapping
files. I am using rdiff-backup-1.0.1 on Gentoo.
There is one file on the source with an ACL referencing user "gterrien",
which doesn't exist on the destination. rdiff-backup warns that the ACL is
dropped and continues. But it raises an uncaught exception and aborts as soon
as it reaches a file *without* ACL but owned by "gterrien". The exception is
due to calling os.chown() with "None" as the user parameter.
I could diagnose the cause as follows:
- The unknown user is detected in eas_acls.list_to_acl() after calling
map_id_name().
- map_id_name() calls user_group.Map.get_id_from_name() to retrieve the id
for a username.
- Map.get_id_from_name() calls Map.find_id_from_name(), which returns None
if the username cannot be found.
- Map.get_id_from_name() gets None as the id *and stores it in its cache
name2id_dict*.
- When rdiff-backup reaches the next file without ACL but with the same
username, it calls user_group.Map.get_id().
- Map.get_id() looks the username up in the cache name2id_dict *and finds an
entry with value None*, so it returns None instead of the id passed to
get_id().
I am not familiar enough with the internal workings of rdiff-backup, so I am
not sure what the correct fix would be.
I would propose either of the following:
- Check in Map.get_id_from_name() if find_id_from_name() returns None, and
not store it in the cache if it is the case.
- Check in Map.get_id() if the value returned by the cache is None, and in
that case to return the id passed as parameter.
Please feel free to contact me if you need more information or testing.
_______________________________________________________
Reply to this item at:
<http://savannah.nongnu.org/bugs/?func=detailitem&item_id=15436>
_______________________________________________
Message sent via/by Savannah
http://savannah.nongnu.org/
- [Rdiff-backup-bugs] [bug #15436] Abort when using ACLs and user/group unknown on destination,
Remy Blank <=