Andreas,
Removing the checks isprint(*s) and *s == '\\' resolves the issue.
AD shares are associated with a doamin name and AD users/groups will be in
the format Dom\user. Can someone explain why these checks are required?
The '\\' check is required so that backslashes will go through
unquote(quote(string)) will come out correctly.
The isprint() check is a misguided attempt to do something reasonable with
unprintable characters, but it leads to lots of problems with different
encodings, so it should probably be removed. I'll fix that.
There also is a check for '=' in quote(). This is from the attr package which
separates names and values with '=', but unnecessary in acl. quote() should
probably be passed in a string of additional characters that need to be quoted
so that it does the right thing in both packages.
The do_print() in getfacl/getfacl.c calls
printf("# owner: %s\n", xquote(user_name(st->st_uid, opt_numeric)));
printf("# group: %s\n", xquote(group_name(st->st_gid, opt_numeric)));
and xquote simply calls quote().
Also, acl_entry_to_any_str() in libacl/__acl_to_any_text.c calls quote.
I could not find the corresponding unquote calls for these.
If I wrap the above quote() calls with unquote(), the problem seems to be
resolved.
Attaching a patch for the same.
Cheers!
Anoop
getfacl-2.2.47.patch.2
Description: Unix manual page
|