s3fs-utils: Free the popt context in smbcacls and smbquotas.
[kai/samba.git] / source3 / utils / smbcacls.c
index 9a6c2836309e39401faae6e3e7bb3a7c056bb5f2..7df4e4872580d2a4834b0e2deeb361c998c40efb 100644 (file)
@@ -89,7 +89,7 @@ static NTSTATUS cli_lsa_lookup_sid(struct cli_state *cli,
        char **domains;
        char **names;
 
-       status = cli_tcon_andx(cli, "IPC$", "?????", "", 0);
+       status = cli_tree_connect(cli, "IPC$", "?????", "", 0);
        if (!NT_STATUS_IS_OK(status)) {
                goto tcon_fail;
        }
@@ -139,7 +139,7 @@ static NTSTATUS cli_lsa_lookup_name(struct cli_state *cli,
        struct dom_sid *sids;
        enum lsa_SidType *types;
 
-       status = cli_tcon_andx(cli, "IPC$", "?????", "", 0);
+       status = cli_tree_connect(cli, "IPC$", "?????", "", 0);
        if (!NT_STATUS_IS_OK(status)) {
                goto tcon_fail;
        }
@@ -187,7 +187,7 @@ static NTSTATUS cli_lsa_lookup_domain_sid(struct cli_state *cli,
        TALLOC_CTX *frame = talloc_stackframe();
        const struct ndr_syntax_id *lsarpc_syntax = &ndr_table_lsarpc.syntax_id;
 
-       status = cli_tcon_andx(cli, "IPC$", "?????", "", 0);
+       status = cli_tree_connect(cli, "IPC$", "?????", "", 0);
        if (!NT_STATUS_IS_OK(status)) {
                goto done;
        }
@@ -223,7 +223,8 @@ done:
        return status;
 }
 
-struct dom_sid* get_domain_sid(struct cli_state *cli) {
+static struct dom_sid *get_domain_sid(struct cli_state *cli)
+{
        NTSTATUS status;
 
        struct dom_sid *sid = talloc(talloc_tos(), struct dom_sid);
@@ -867,12 +868,21 @@ static bool set_secdesc(struct cli_state *cli, const char *filename,
        uint16_t fnum = (uint16_t)-1;
         bool result=true;
        NTSTATUS status;
+       uint32_t desired_access = 0;
 
-       /* The desired access below is the only one I could find that works
-          with NT4, W2KP and Samba */
+       /* Make the desired_access more specific. */
+       if (sd->dacl) {
+               desired_access |= WRITE_DAC_ACCESS;
+       }
+       if (sd->sacl) {
+               desired_access |= SEC_FLAG_SYSTEM_SECURITY;
+       }
+       if (sd->owner_sid || sd->group_sid) {
+               desired_access |= WRITE_OWNER_ACCESS;
+       }
 
        status = cli_ntcreate(cli, filename, 0,
-                             WRITE_DAC_ACCESS|WRITE_OWNER_ACCESS,
+                             desired_access,
                              0, FILE_SHARE_READ|FILE_SHARE_WRITE,
                              FILE_OPEN, 0x0, 0x0, &fnum);
        if (!NT_STATUS_IS_OK(status)) {
@@ -1425,6 +1435,8 @@ static struct cli_state *connect_one(struct user_auth_info *auth_info,
                return -1;
        }
 
+       poptFreeContext(pc);
+
        string_replace(path,'/','\\');
 
        server = talloc_strdup(frame, path+2);