Changeset 988 for vendor/current/source3/libsmb/clisecdesc.c
- Timestamp:
- Nov 24, 2016, 1:14:11 PM (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
vendor/current/source3/libsmb/clisecdesc.c
r740 r988 20 20 #include "includes.h" 21 21 #include "libsmb/libsmb.h" 22 #include "../libcli/security/secdesc.h" 23 #include "../libcli/smb/smbXcli_base.h" 22 24 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)25 NTSTATUS 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) 28 30 { 29 31 uint8_t param[8]; 30 32 uint8_t *rdata=NULL; 31 33 uint32_t rdata_count=0; 32 struct security_descriptor *psd = NULL;33 34 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 } 34 44 35 45 SIVAL(param, 0, fnum); 36 SIVAL(param, 4, 0x7);46 SIVAL(param, 4, sec_info); 37 47 38 48 status = cli_trans(talloc_tos(), cli, SMBnttrans, … … 53 63 } 54 64 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); 58 67 if (!NT_STATUS_IS_OK(status)) { 59 68 DEBUG(10, ("unmarshall_sec_desc failed: %s\n", … … 62 71 } 63 72 73 if (sd != NULL) { 74 *sd = lsd; 75 } else { 76 TALLOC_FREE(lsd); 77 } 78 64 79 cleanup: 65 80 66 81 TALLOC_FREE(rdata); 67 82 68 return psd; 83 return status; 84 } 85 86 NTSTATUS 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); 69 92 } 70 93 … … 72 95 set the security descriptor for a open file 73 96 ****************************************************************************/ 74 NTSTATUS cli_set_secdesc(struct cli_state *cli, uint16_t fnum, 75 struct security_descriptor *sd) 97 NTSTATUS cli_set_security_descriptor(struct cli_state *cli, 98 uint16_t fnum, 99 uint32_t sec_info, 100 const struct security_descriptor *sd) 76 101 { 77 102 uint8_t param[8]; 78 uint32 sec_info = 0; 79 uint8 *data; 103 uint8_t *data; 80 104 size_t len; 81 105 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 } 82 113 83 114 status = marshall_sec_desc(talloc_tos(), sd, &data, &len); … … 89 120 90 121 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); 99 123 100 124 status = cli_trans(talloc_tos(), cli, SMBnttrans, … … 115 139 return status; 116 140 } 141 142 NTSTATUS 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.