Ignore:
Timestamp:
Nov 24, 2016, 1:14:11 PM (9 years ago)
Author:
Silvan Scherrer
Message:

Samba Server: update vendor to version 4.4.3

File:
1 edited

Legend:

Unmodified
Added
Removed
  • vendor/current/source3/libsmb/clisecdesc.c

    r740 r988  
    2020#include "includes.h"
    2121#include "libsmb/libsmb.h"
     22#include "../libcli/security/secdesc.h"
     23#include "../libcli/smb/smbXcli_base.h"
    2224
    23 /****************************************************************************
    24   query the security descriptor for a open file
    25  ****************************************************************************/
    26 struct security_descriptor *cli_query_secdesc(struct cli_state *cli, uint16_t fnum,
    27                             TALLOC_CTX *mem_ctx)
     25NTSTATUS cli_query_security_descriptor(struct cli_state *cli,
     26                                       uint16_t fnum,
     27                                       uint32_t sec_info,
     28                                       TALLOC_CTX *mem_ctx,
     29                                       struct security_descriptor **sd)
    2830{
    2931        uint8_t param[8];
    3032        uint8_t *rdata=NULL;
    3133        uint32_t rdata_count=0;
    32         struct security_descriptor *psd = NULL;
    3334        NTSTATUS status;
     35        struct security_descriptor *lsd;
     36
     37        if (smbXcli_conn_protocol(cli->conn) >= PROTOCOL_SMB2_02) {
     38                return cli_smb2_query_security_descriptor(cli,
     39                                                        fnum,
     40                                                        sec_info,
     41                                                        mem_ctx,
     42                                                        sd);
     43        }
    3444
    3545        SIVAL(param, 0, fnum);
    36         SIVAL(param, 4, 0x7);
     46        SIVAL(param, 4, sec_info);
    3747
    3848        status = cli_trans(talloc_tos(), cli, SMBnttrans,
     
    5363        }
    5464
    55         status = unmarshall_sec_desc(mem_ctx, (uint8 *)rdata, rdata_count,
    56                                      &psd);
    57 
     65        status = unmarshall_sec_desc(mem_ctx, (uint8_t *)rdata, rdata_count,
     66                                     &lsd);
    5867        if (!NT_STATUS_IS_OK(status)) {
    5968                DEBUG(10, ("unmarshall_sec_desc failed: %s\n",
     
    6271        }
    6372
     73        if (sd != NULL) {
     74                *sd = lsd;
     75        } else {
     76                TALLOC_FREE(lsd);
     77        }
     78
    6479 cleanup:
    6580
    6681        TALLOC_FREE(rdata);
    6782
    68         return psd;
     83        return status;
     84}
     85
     86NTSTATUS cli_query_secdesc(struct cli_state *cli, uint16_t fnum,
     87                           TALLOC_CTX *mem_ctx, struct security_descriptor **sd)
     88{
     89        uint32_t sec_info = SECINFO_OWNER | SECINFO_GROUP | SECINFO_DACL;
     90
     91        return cli_query_security_descriptor(cli, fnum, sec_info, mem_ctx, sd);
    6992}
    7093
     
    7295  set the security descriptor for a open file
    7396 ****************************************************************************/
    74 NTSTATUS cli_set_secdesc(struct cli_state *cli, uint16_t fnum,
    75                          struct security_descriptor *sd)
     97NTSTATUS cli_set_security_descriptor(struct cli_state *cli,
     98                                     uint16_t fnum,
     99                                     uint32_t sec_info,
     100                                     const struct security_descriptor *sd)
    76101{
    77102        uint8_t param[8];
    78         uint32 sec_info = 0;
    79         uint8 *data;
     103        uint8_t *data;
    80104        size_t len;
    81105        NTSTATUS status;
     106
     107        if (smbXcli_conn_protocol(cli->conn) >= PROTOCOL_SMB2_02) {
     108                return cli_smb2_set_security_descriptor(cli,
     109                                                        fnum,
     110                                                        sec_info,
     111                                                        sd);
     112        }
    82113
    83114        status = marshall_sec_desc(talloc_tos(), sd, &data, &len);
     
    89120
    90121        SIVAL(param, 0, fnum);
    91 
    92         if (sd->dacl)
    93                 sec_info |= SECINFO_DACL;
    94         if (sd->owner_sid)
    95                 sec_info |= SECINFO_OWNER;
    96         if (sd->group_sid)
    97                 sec_info |= SECINFO_GROUP;
    98         SSVAL(param, 4, sec_info);
     122        SIVAL(param, 4, sec_info);
    99123
    100124        status = cli_trans(talloc_tos(), cli, SMBnttrans,
     
    115139        return status;
    116140}
     141
     142NTSTATUS cli_set_secdesc(struct cli_state *cli, uint16_t fnum,
     143                         const struct security_descriptor *sd)
     144{
     145        uint32_t sec_info = 0;
     146
     147        if (sd->dacl || (sd->type & SEC_DESC_DACL_PRESENT)) {
     148                sec_info |= SECINFO_DACL;
     149        }
     150        if (sd->sacl || (sd->type & SEC_DESC_SACL_PRESENT)) {
     151                sec_info |= SECINFO_SACL;
     152        }
     153        if (sd->owner_sid) {
     154                sec_info |= SECINFO_OWNER;
     155        }
     156        if (sd->group_sid) {
     157                sec_info |= SECINFO_GROUP;
     158        }
     159
     160        return cli_set_security_descriptor(cli, fnum, sec_info, sd);
     161}
Note: See TracChangeset for help on using the changeset viewer.