Re: cifs-utils: setcifsacl receives STATUS_INVALID_SECURITY_DESCR reply from custom CIFS implementation

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

 



Somehow I missed this response. Out till Friday, will submit this
patch once I am back, next week. Thanks for testing the patch.

Regards,

Shirish

On Tue, Jul 11, 2017 at 7:13 AM, Paul van Schayck <polleke@xxxxxxxxx> wrote:
> Hi Shirish,
>
> I've tested the patch, and as far as I can see it works perfectly. The
> extra zero bytes are no longer in the request and the server now
> accepts them. I've tested on a number of directories, with a number of
> different ACEs, adding and deleting, and could not find an issue so
> far.
>
> I've not tested the smb2 patches for setting acl's yet, as I do not
> have an environment ready to go for recompiling the cifs kernel
> module.
>
> The server we are using is a Hitachi HNAS:
> https://www.hds.com/en-us/products-solutions/storage/network-attached-storage-platform.html
>
> Thanks,
>
> Paul
>
> On Wed, Jul 5, 2017 at 7:08 AM, Shirish Pargaonkar
> <shirishpargaonkar@xxxxxxxxx> wrote:
>> Can you try this patch, I did preliminary testing...
>>
>>
>>
>> On Tue, Jul 4, 2017 at 4:17 PM, Shirish Pargaonkar
>> <shirishpargaonkar@xxxxxxxxx> wrote:
>>> Hi Paul,
>>>
>>> So something like this works with smb 2.1 with the patchset I posted
>>> on the mailing list
>>> to make set acl work over smb 2 onwards...
>>>
>>> $ sudo ls -l /mnt/
>>> total 1
>>> -rwx------ 1 root root 32 Jan 26  2015 file1.txt
>>> -rwx------ 1 root root  0 Nov 30  2014 file2.txt
>>> drwx------ 2 root root  0 Nov 30  2014 folder1
>>> drwx------ 2 root root  0 Dec 22  2014 folder2
>>>
>>> $ sudo setcifsacl -S
>>> "ACL:S-1-5-21-609720889-20222076-3464071719-1001:ALLOWED/0x0/FULL,ACL:S-1-5-21-609720889-20222076-3464071719-513:ALLOWED/0x0/0x1f01b9,ACL:\Everyone:ALLOWED/0x0/0x1f01b9"
>>> /mnt/file1.txt
>>>
>>> $ sudo ls -l /mnt/
>>> total 1
>>> -rwxr-xr-x 1 root root 32 Jan 26  2015 file1.txt
>>> -rwx------ 1 root root  0 Nov 30  2014 file2.txt
>>> drwx------ 2 root root  0 Nov 30  2014 folder1
>>> drwx------ 2 root root  0 Dec 22  2014 folder2
>>>
>>> I then changed it back to 700 using smb1 set cifs acl and it worked too.
>>>
>>> $ sudo setcifsacl -S
>>> "ACL:S-1-5-21-609720889-20222076-3464071719-1001:ALLOWED/0x0/FULL,ACL:S-1-5-21-609720889-20222076-3464071719-513:ALLOWED/0x0/0x120088,ACL:\Everyone:ALLOWED/0x0/0x120088"
>>> /mnt/file1.txt
>>>
>>> $ sudo ls -l /mnt/
>>> total 1
>>> -rwx------ 1 root root 32 Jan 26  2015 file1.txt
>>> -rwx------ 1 root root  0 Nov 30  2014 file2.txt
>>> drwx------ 2 root root  0 Nov 30  2014 folder1
>>> drwx------ 2 root root  0 Dec 22  2014 folder2
>>>
>>> What type of Windows server is this?  These requests succeed but I do
>>> see extra bytes
>>> at the end of the security descriptor in both the requests, trying to
>>> figure out why is it allocated in the first place...
>>>
>>>
>>> On Tue, Jun 27, 2017 at 5:43 AM, Paul van Schayck <polleke@xxxxxxxxx> wrote:
>>>> Hi Shirish,
>>>>
>>>> Thank you for your answer.
>>>>
>>>> Attached you can find three pcap files.
>>>>
>>>> 1. linux-fail.pcap: Using the setcifsacl 6.7 version.
>>>> 2. linux-succes.pcap: Using the modified setcifsacl with the patch
>>>> above (note, I had to change to len + 4 in trim_request())
>>>> 3. windows-succes-trimmed.pcap: Using the dialog in Windows. Note that
>>>> this is over smbv2. The file was trimmed down, because windows was
>>>> noisy.
>>>>
>>>> The command I used was
>>>>
>>>> setcifsacl -S "ACL:S-1-5-21-1572361299-1184395705-1606240830-247332:ALLOWED/OI|CI/CHANGE,ACL:S-1-5-21-1572361299-1184395705-1606240830-544559:ALLOWED/I/FULL,ACL:S-1-3-0:ALLOWED/OI|CI|IO|I/FULL,ACL:S-1-5-21-1572361299-1184395705-1606240830-512:ALLOWED/OI|CI|I/FULL,ACL:S-1-5-21-1572361299-1184395705-1606240830-549266:ALLOWED/OI|CI|I/FULL,ACL:S-1-5-21-1572361299-1184395705-1606240830-544559:ALLOWED/OI|CI|IO|I/FULL,ACL:S-1-5-18:ALLOWED/OI|CI|I/FULL"
>>>> cifs-test/
>>>>
>>>> In Windows I used the dialog to set the same ACEs. Between the
>>>> linux-success and linux-fail file you can see the difference in the
>>>> number of zero bytes after the DACL.
>>>>
>>>> If this test case is still a bit noisy for you, I can try to build a
>>>> more simple ACE list. But I have to setup a new share for this.
>>>>
>>>> Thanks,
>>>>
>>>> Paul van Schayck
>>>>
>>>> On Tue, Jun 27, 2017 at 6:40 AM, Shirish Pargaonkar
>>>> <shirishpargaonkar@xxxxxxxxx> wrote:
>>>>> if you can provide tcpdumpas well as the command you are using of/for
>>>>> both Windows and Linux way, that would be helpful
>>>>>
>>>>> On Mon, Jun 26, 2017 at 8:04 AM, Paul van Schayck via samba-technical
>>>>> <samba-technical@xxxxxxxxxxxxxxx> wrote:
>>>>>> Dear samba-technical,
>>>>>>
>>>>>> If this list is inappropriate for this question then please redirect
>>>>>> me to a better one.
>>>>>>
>>>>>> I'm working with a HDS HNAS (Hitachi NAS) which has its own
>>>>>> implementation of the CIFS protocol. Mounting, and interactions all go
>>>>>> fine using linux-cifs and related tools.
>>>>>>
>>>>>> However, when sending a `setcifsacl -a ACE /dir` the response is
>>>>>> "main: setxattr error: Input/output error". Upon further digging using
>>>>>> tcpdump/wireshark it became clear that the HNAS is responding with
>>>>>>
>>>>>> NT Status: STATUS_INVALID_SECURITY_DESCR (0xc0000079)
>>>>>>
>>>>>> Setting the same ACE using a Windows client did work. So further
>>>>>> examining of the request being sent showed that the only difference
>>>>>> between the Windows client and setcifsacl was the addition of a lot of
>>>>>> padding zero bytes at the end of the security descriptor.
>>>>>>
>>>>>> Examining the code of setcifsacl.c and the request more it seems like
>>>>>> the request was not properly trimmed down to the number of aces being
>>>>>> sent. More buffer was allocated that the number of aces being sent. So
>>>>>> I made the attached patch to trim down the request. This fixes some of
>>>>>> the problems with setcifsacl, but for example breaks deleting aces. I
>>>>>> also think it's most likely an ugly fix, and the problem needs to be
>>>>>> solved elsewhere most likely.
>>>>>>
>>>>>> So my question is if someone can point me at the correct way to fix
>>>>>> this in setcifsacl, or help me fix it properly. If necessary I can
>>>>>> provide tcpdump's of Windows and Linux clients performing the request.
>>>>>>
>>>>>> Thanks,
>>>>>>
>>>>>> Paul van Schayck
>>>>>>
>>>>>> diff --git a/setcifsacl.c b/setcifsacl.c
>>>>>> index 7eeeaa6..4ada3c8 100644
>>>>>> --- a/setcifsacl.c
>>>>>> +++ b/setcifsacl.c
>>>>>> @@ -761,6 +761,20 @@ setacl_action(struct cifs_ntsd *pntsd, struct
>>>>>> cifs_ntsd **npntsd,
>>>>>>         return rc;
>>>>>>  }
>>>>>>
>>>>>> +ssize_t
>>>>>> +trim_request(ssize_t bufsize, struct cifs_ntsd *npntsd) {
>>>>>> +       int i, len = 0;
>>>>>> +       char *a = (char *) npntsd;
>>>>>> +
>>>>>> +       for( i = 0; i < bufsize; i++) {
>>>>>> +               if ( a[i] != 0 )
>>>>>> +                       len = i;
>>>>>> +       }
>>>>>> +
>>>>>> +       return (ssize_t) len + 2;
>>>>>> +}
>>>>>> +
>>>>>> +
>>>>>>  static void
>>>>>>  setcifsacl_usage(const char *prog)
>>>>>>  {
>>>>>> @@ -902,7 +916,7 @@ cifsacl:
>>>>>>         if (rc)
>>>>>>                 goto setcifsacl_action_ret;
>>>>>>
>>>>>> -       attrlen = setxattr(filename, ATTRNAME, ntsdptr, bufsize, 0);
>>>>>> +       attrlen = setxattr(filename, ATTRNAME, ntsdptr,
>>>>>> trim_request(bufsize, ntsdptr), 0);
>>>>>>         if (attrlen == -1) {
>>>>>>                 printf("%s: setxattr error: %s\n", __func__, strerror(errno));
>>>>>>                 goto setcifsacl_facenum_ret;
>>>>>>
--
To unsubscribe from this list: send the line "unsubscribe linux-cifs" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux