bug-gnulib
[Top][All Lists]
Advanced

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

Re: Fwd: bug#27269: Sed --in-place is messing NTFS file permissions


From: Assaf Gordon
Subject: Re: Fwd: bug#27269: Sed --in-place is messing NTFS file permissions
Date: Sat, 18 Nov 2017 16:26:41 -0700
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.4.0

Hi Paul,

On 2017-11-18 03:46 PM, Paul Eggert wrote:
Assaf Gordon wrote:
set_permissions uses the USE_ACL #define to either call "set_acls"
or call chmod/fchmod directly [4].

It vaguely sounds like a Gnulib bug if set_permissions isn't calling set_acls when it should. However, your summary of what goes wrong is a bit sketchy; I can't tell which lines of set-permissions.c are being executed in what order.

Thanks for looking into this.

Here's a better flow using gdb (running in an NTFS-mounted directory, as before)
====
$ gdb ~/projects/sed/sed/sed
(gdb) b set_acls
(gdb) r -i.bak 1ifoo world
[....]
Breakpoint 1, set_acls (ctx=0x7fffffffdbb0, name=0x623c30 "./sedmmglZZ", desc=4, from_mode=0, must_chmod=0x7fffffffdb6e, acls_set=0x7fffffffdb6f)
    at lib/set-permissions.c:488
488       int ret = 0;
(gdb) bt
#0 set_acls (ctx=0x7fffffffdbb0, name=0x623c30 "./sedmmglZZ", desc=4, from_mode=0, must_chmod=0x7fffffffdb6e, acls_set=0x7fffffffdb6f)
    at lib/set-permissions.c:488
#1 0x0000000000417ecc in set_permissions (ctx=0x7fffffffdbb0, name=0x623c30 "./sedmmglZZ", desc=4) at lib/set-permissions.c:812 #2 0x0000000000414b6b in qcopy_acl (src_name=0x7fffffffe2de "world", source_desc=3, dst_name=0x623c30 "./sedmmglZZ", dest_desc=4, mode=33204)
    at lib/qcopy-acl.c:48
#3 0x000000000040b8b0 in copy_acl (src_name=0x7fffffffe2de "world", source_desc=3, dst_name=0x623c30 "./sedmmglZZ", dest_desc=4, mode=33204)
    at lib/copy-acl.c:46
#4 0x00000000004076ae in closedown (input=0x7fffffffdcc0) at sed/execute.c:677 #5 0x0000000000407847 in read_pattern_space (input=0x7fffffffdcc0, the_program=0x622260, append=0) at sed/execute.c:730 #6 0x0000000000409576 in process_files (the_program=0x622260, argv=0x7fffffffdf10) at sed/execute.c:1685 #7 0x000000000040a83b in main (argc=4, argv=0x7fffffffdef8) at sed/sed.c:377
====

Stepping through "set_acls", acl_set_fd returns 0,
but didn't actually set the permissions:
===
(gdb) n
503       if (! ctx->acls_not_supported)
(gdb)
505           if (ret == 0 && from_mode)
(gdb)
514           if (ret == 0 && ctx->acl)
(gdb) n
516               if (HAVE_ACL_SET_FD && desc != -1)
(gdb) n
517                 ret = acl_set_fd (desc, ctx->acl);
(gdb) n
520               if (ret != 0)
(gdb) p ret
$3 = 0
(gdb) n
531                   *acls_set = true;
(gdb)
532                   if (S_ISDIR(ctx->mode))
(gdb)
749       return ret;

(gdb) !ls -l ./sedmmglZZ
---------- 1 gordon gordon 10 Nov 18 16:14 ./sedmmglZZ
===


And from here all functions just return success:


===
(gdb) n
750     }
(gdb)
set_permissions (ctx=0x7fffffffdbb0, name=0x623c30 "./sedmmglZZ", desc=4) at lib/set-permissions.c:813
813       if (! acls_set)
(gdb)
833       if (must_chmod && ! early_chmod)
(gdb)
846       return ret;
(gdb)
847     }
(gdb)
qcopy_acl (src_name=0x7fffffffe2de "world", source_desc=3, dst_name=0x623c30 "./sedmmglZZ", dest_desc=4, mode=33204) at lib/qcopy-acl.c:49
49        free_permission_context (&ctx);
(gdb)
50        return ret;
(gdb)
51      }
(gdb)
copy_acl (src_name=0x7fffffffe2de "world", source_desc=3, dst_name=0x623c30 "./sedmmglZZ", dest_desc=4, mode=33204) at lib/copy-acl.c:47
47        switch (ret)
(gdb)
58            break;
(gdb)
60        return ret;
(gdb)
61      }
(gdb)
closedown (input=0x7fffffffdcc0) at sed/execute.c:681
681           ck_fclose (input->fp);
(gdb)
===


regards,
 - assaf





reply via email to

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