s3-util_sid: use shared dom_sid_compare_auth and dom_sid_equal_X functions.
[samba.git] / source3 / libsmb / libsmb_xattr.c
index e4a0a0558638b272aac39e517fee1c3e26e63556..bc329bf226cabab86d236edf03f19e96e80bfedd 100644 (file)
@@ -7,17 +7,17 @@
    Copyright (C) Tom Jansen (Ninja ISD) 2002 
    Copyright (C) Derrell Lipman 2003-2008
    Copyright (C) Jeremy Allison 2007, 2008
-   
+
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 3 of the License, or
    (at your option) any later version.
-   
+
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-   
+
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
@@ -25,6 +25,9 @@
 #include "includes.h"
 #include "libsmbclient.h"
 #include "libsmb_internal.h"
+#include "../librpc/gen_ndr/ndr_lsa.h"
+#include "rpc_client/cli_lsarpc.h"
+#include "../libcli/security/dom_sid.h"
 
 
 /*
@@ -34,17 +37,15 @@ static struct rpc_pipe_client *
 find_lsa_pipe_hnd(struct cli_state *ipc_cli)
 {
        struct rpc_pipe_client *pipe_hnd;
-        
+
        for (pipe_hnd = ipc_cli->pipe_list;
              pipe_hnd;
              pipe_hnd = pipe_hnd->next) {
-                
                if (ndr_syntax_id_equal(&pipe_hnd->abstract_syntax,
                                        &ndr_table_lsarpc.syntax_id)) {
                        return pipe_hnd;
                }
        }
-        
        return NULL;
 }
 
@@ -55,24 +56,24 @@ find_lsa_pipe_hnd(struct cli_state *ipc_cli)
  */
 
 static int
-ace_compare(SEC_ACE *ace1,
-            SEC_ACE *ace2)
+ace_compare(struct security_ace *ace1,
+            struct security_ace *ace2)
 {
         bool b1;
         bool b2;
-        
+
         /* If the ACEs are equal, we have nothing more to do. */
         if (sec_ace_equal(ace1, ace2)) {
                return 0;
         }
-        
+
         /* Inherited follow non-inherited */
         b1 = ((ace1->flags & SEC_ACE_FLAG_INHERITED_ACE) != 0);
         b2 = ((ace2->flags & SEC_ACE_FLAG_INHERITED_ACE) != 0);
         if (b1 != b2) {
                 return (b1 ? 1 : -1);
         }
-        
+
         /*
          * What shall we do with AUDITs and ALARMs?  It's undefined.  We'll
          * sort them after DENY and ALLOW.
@@ -88,7 +89,7 @@ ace_compare(SEC_ACE *ace1,
         if (b1 != b2) {
                 return (b1 ? 1 : -1);
         }
-        
+
         /* Allowed ACEs follow denied ACEs */
         b1 = (ace1->type == SEC_ACE_TYPE_ACCESS_ALLOWED ||
               ace1->type == SEC_ACE_TYPE_ACCESS_ALLOWED_OBJECT);
@@ -97,7 +98,7 @@ ace_compare(SEC_ACE *ace1,
         if (b1 != b2) {
                 return (b1 ? 1 : -1);
         }
-        
+
         /*
          * ACEs applying to an entity's object follow those applying to the
          * entity itself
@@ -109,47 +110,46 @@ ace_compare(SEC_ACE *ace1,
         if (b1 != b2) {
                 return (b1 ? 1 : -1);
         }
-        
+
         /*
          * If we get this far, the ACEs are similar as far as the
          * characteristics we typically care about (those defined by the
          * referenced MS document).  We'll now sort by characteristics that
          * just seems reasonable.
          */
-        
+
        if (ace1->type != ace2->type) {
                return ace2->type - ace1->type;
         }
-        
-       if (sid_compare(&ace1->trustee, &ace2->trustee)) {
-               return sid_compare(&ace1->trustee, &ace2->trustee);
+
+       if (dom_sid_compare(&ace1->trustee, &ace2->trustee)) {
+               return dom_sid_compare(&ace1->trustee, &ace2->trustee);
         }
-        
+
        if (ace1->flags != ace2->flags) {
                return ace1->flags - ace2->flags;
         }
-        
+
        if (ace1->access_mask != ace2->access_mask) {
                return ace1->access_mask - ace2->access_mask;
         }
-        
+
        if (ace1->size != ace2->size) {
                return ace1->size - ace2->size;
         }
-        
-       return memcmp(ace1, ace2, sizeof(SEC_ACE));
+
+       return memcmp(ace1, ace2, sizeof(struct security_ace));
 }
 
 
 static void
-sort_acl(SEC_ACL *the_acl)
+sort_acl(struct security_acl *the_acl)
 {
        uint32 i;
        if (!the_acl) return;
-        
-       qsort(the_acl->aces, the_acl->num_aces, sizeof(the_acl->aces[0]),
-              QSORT_CAST ace_compare);
-        
+
+       TYPESAFE_QSORT(the_acl->aces, the_acl->num_aces, ace_compare);
+
        for (i=1;i<the_acl->num_aces;) {
                if (sec_ace_equal(&the_acl->aces[i-1], &the_acl->aces[i])) {
                        int j;
@@ -169,28 +169,28 @@ convert_sid_to_string(struct cli_state *ipc_cli,
                       struct policy_handle *pol,
                       fstring str,
                       bool numeric,
-                      DOM_SID *sid)
+                      struct dom_sid *sid)
 {
        char **domains = NULL;
        char **names = NULL;
        enum lsa_SidType *types = NULL;
        struct rpc_pipe_client *pipe_hnd = find_lsa_pipe_hnd(ipc_cli);
        TALLOC_CTX *ctx;
-        
+
        sid_to_fstring(str, sid);
-        
+
        if (numeric) {
                return;     /* no lookup desired */
        }
-        
+
        if (!pipe_hnd) {
                return;
        }
-        
+
        /* Ask LSA to convert the sid to a name */
-        
+
        ctx = talloc_stackframe();
-        
+
        if (!NT_STATUS_IS_OK(rpccli_lsa_lookup_sids(pipe_hnd, ctx,
                                                     pol, 1, sid, &domains,
                                                     &names, &types)) ||
@@ -198,9 +198,9 @@ convert_sid_to_string(struct cli_state *ipc_cli,
                TALLOC_FREE(ctx);
                return;
        }
-        
+
        /* Converted OK */
-        
+
        slprintf(str, sizeof(fstring) - 1, "%s%s%s",
                 domains[0], lp_winbind_separator(),
                 names[0]);
@@ -213,28 +213,28 @@ static bool
 convert_string_to_sid(struct cli_state *ipc_cli,
                       struct policy_handle *pol,
                       bool numeric,
-                      DOM_SID *sid,
+                      struct dom_sid *sid,
                       const char *str)
 {
        enum lsa_SidType *types = NULL;
-       DOM_SID *sids = NULL;
+       struct dom_sid *sids = NULL;
        bool result = True;
        TALLOC_CTX *ctx = NULL;
        struct rpc_pipe_client *pipe_hnd = find_lsa_pipe_hnd(ipc_cli);
-        
+
        if (!pipe_hnd) {
                return False;
        }
-        
+
         if (numeric) {
                 if (strncmp(str, "S-", 2) == 0) {
                         return string_to_sid(sid, str);
                 }
-                
+
                 result = False;
                 goto done;
         }
-        
+
        ctx = talloc_stackframe();
        if (!NT_STATUS_IS_OK(rpccli_lsa_lookup_names(pipe_hnd, ctx,
                                                      pol, 1, &str,
@@ -243,20 +243,19 @@ convert_string_to_sid(struct cli_state *ipc_cli,
                result = False;
                goto done;
        }
-        
+
        sid_copy(sid, &sids[0]);
 done:
-        
        TALLOC_FREE(ctx);
        return result;
 }
 
 
-/* parse an ACE in the same format as print_ace() */
+/* parse an struct security_ace in the same format as print_ace() */
 static bool
 parse_ace(struct cli_state *ipc_cli,
           struct policy_handle *pol,
-          SEC_ACE *ace,
+          struct security_ace *ace,
           bool numeric,
           char *str)
 {
@@ -266,15 +265,15 @@ parse_ace(struct cli_state *ipc_cli,
        unsigned int atype;
         unsigned int aflags;
         unsigned int amask;
-       DOM_SID sid;
+       struct dom_sid sid;
        uint32_t mask;
        const struct perm_value *v;
         struct perm_value {
-                const char *perm;
+                const char perm[7];
                 uint32 mask;
         };
        TALLOC_CTX *frame = talloc_stackframe();
-        
+
         /* These values discovered by inspection */
         static const struct perm_value special_values[] = {
                 { "R", 0x00120089 },
@@ -283,17 +282,16 @@ parse_ace(struct cli_state *ipc_cli,
                 { "D", 0x00010000 },
                 { "P", 0x00040000 },
                 { "O", 0x00080000 },
-                { NULL, 0 },
+                { "", 0 },
         };
-        
+
         static const struct perm_value standard_values[] = {
                 { "READ",   0x001200a9 },
                 { "CHANGE", 0x001301bf },
                 { "FULL",   0x001f01ff },
-                { NULL, 0 },
+                { "", 0 },
         };
-        
-        
+
        ZERO_STRUCTP(ace);
        p = strchr_m(str,':');
        if (!p) {
@@ -303,25 +301,25 @@ parse_ace(struct cli_state *ipc_cli,
        *p = '\0';
        p++;
        /* Try to parse numeric form */
-        
+
        if (sscanf(p, "%i/%i/%i", &atype, &aflags, &amask) == 3 &&
            convert_string_to_sid(ipc_cli, pol, numeric, &sid, str)) {
                goto done;
        }
-        
+
        /* Try to parse text form */
-        
+
        if (!convert_string_to_sid(ipc_cli, pol, numeric, &sid, str)) {
                TALLOC_FREE(frame);
                return false;
        }
-        
+
        cp = p;
        if (!next_token_talloc(frame, &cp, &tok, "/")) {
                TALLOC_FREE(frame);
                return false;
        }
-        
+
        if (StrnCaseCmp(tok, "ALLOWED", strlen("ALLOWED")) == 0) {
                atype = SEC_ACE_TYPE_ACCESS_ALLOWED;
        } else if (StrnCaseCmp(tok, "DENIED", strlen("DENIED")) == 0) {
@@ -330,20 +328,20 @@ parse_ace(struct cli_state *ipc_cli,
                TALLOC_FREE(frame);
                return false;
        }
-        
+
        /* Only numeric form accepted for flags at present */
-        
+
        if (!(next_token_talloc(frame, &cp, &tok, "/") &&
              sscanf(tok, "%i", &aflags))) {
                TALLOC_FREE(frame);
                return false;
        }
-        
+
        if (!next_token_talloc(frame, &cp, &tok, "/")) {
                TALLOC_FREE(frame);
                return false;
        }
-        
+
        if (strncmp(tok, "0x", 2) == 0) {
                if (sscanf(tok, "%i", &amask) != 1) {
                        TALLOC_FREE(frame);
@@ -351,38 +349,38 @@ parse_ace(struct cli_state *ipc_cli,
                }
                goto done;
        }
-        
+
        for (v = standard_values; v->perm; v++) {
                if (strcmp(tok, v->perm) == 0) {
                        amask = v->mask;
                        goto done;
                }
        }
-        
+
        p = tok;
-        
+
        while(*p) {
                bool found = False;
-                
+
                for (v = special_values; v->perm; v++) {
                        if (v->perm[0] == *p) {
                                amask |= v->mask;
                                found = True;
                        }
                }
-                
+
                if (!found) {
                        TALLOC_FREE(frame);
                        return false;
                }
                p++;
        }
-        
+
        if (*p) {
                TALLOC_FREE(frame);
                return false;
        }
-        
+
 done:
        mask = amask;
        init_sec_ace(ace, &sid, atype, mask, aflags);
@@ -390,26 +388,26 @@ done:
        return true;
 }
 
-/* add an ACE to a list of ACEs in a SEC_ACL */
+/* add an struct security_ace to a list of struct security_aces in a struct security_acl */
 static bool
-add_ace(SEC_ACL **the_acl,
-        SEC_ACE *ace,
+add_ace(struct security_acl **the_acl,
+        struct security_ace *ace,
         TALLOC_CTX *ctx)
 {
-       SEC_ACL *newacl;
-       SEC_ACE *aces;
-        
+       struct security_acl *newacl;
+       struct security_ace *aces;
+
        if (! *the_acl) {
                (*the_acl) = make_sec_acl(ctx, 3, 1, ace);
                return True;
        }
-        
-       if ((aces = SMB_CALLOC_ARRAY(SEC_ACE,
+
+       if ((aces = SMB_CALLOC_ARRAY(struct security_ace,
                                      1+(*the_acl)->num_aces)) == NULL) {
                return False;
        }
-       memcpy(aces, (*the_acl)->aces, (*the_acl)->num_aces * sizeof(SEC_ACE));
-       memcpy(aces+(*the_acl)->num_aces, ace, sizeof(SEC_ACE));
+       memcpy(aces, (*the_acl)->aces, (*the_acl)->num_aces * sizeof(struct security_ace));
+       memcpy(aces+(*the_acl)->num_aces, ace, sizeof(struct security_ace));
        newacl = make_sec_acl(ctx, (*the_acl)->revision,
                               1+(*the_acl)->num_aces, aces);
        SAFE_FREE(aces);
@@ -419,7 +417,7 @@ add_ace(SEC_ACL **the_acl,
 
 
 /* parse a ascii version of a security descriptor */
-static SEC_DESC *
+static struct security_descriptor *
 sec_desc_parse(TALLOC_CTX *ctx,
                struct cli_state *ipc_cli,
                struct policy_handle *pol,
@@ -428,26 +426,26 @@ sec_desc_parse(TALLOC_CTX *ctx,
 {
        const char *p = str;
        char *tok;
-       SEC_DESC *ret = NULL;
+       struct security_descriptor *ret = NULL;
        size_t sd_size;
-       DOM_SID *group_sid=NULL;
-        DOM_SID *owner_sid=NULL;
-       SEC_ACL *dacl=NULL;
+       struct dom_sid *group_sid=NULL;
+        struct dom_sid *owner_sid=NULL;
+       struct security_acl *dacl=NULL;
        int revision=1;
-        
+
        while (next_token_talloc(ctx, &p, &tok, "\t,\r\n")) {
-                
+
                if (StrnCaseCmp(tok,"REVISION:", 9) == 0) {
                        revision = strtol(tok+9, NULL, 16);
                        continue;
                }
-                
+
                if (StrnCaseCmp(tok,"OWNER:", 6) == 0) {
                        if (owner_sid) {
                                DEBUG(5,("OWNER specified more than once!\n"));
                                goto done;
                        }
-                       owner_sid = SMB_CALLOC_ARRAY(DOM_SID, 1);
+                       owner_sid = SMB_CALLOC_ARRAY(struct dom_sid, 1);
                        if (!owner_sid ||
                            !convert_string_to_sid(ipc_cli, pol,
                                                    numeric,
@@ -457,13 +455,13 @@ sec_desc_parse(TALLOC_CTX *ctx,
                        }
                        continue;
                }
-                
+
                if (StrnCaseCmp(tok,"OWNER+:", 7) == 0) {
                        if (owner_sid) {
                                DEBUG(5,("OWNER specified more than once!\n"));
                                goto done;
                        }
-                       owner_sid = SMB_CALLOC_ARRAY(DOM_SID, 1);
+                       owner_sid = SMB_CALLOC_ARRAY(struct dom_sid, 1);
                        if (!owner_sid ||
                            !convert_string_to_sid(ipc_cli, pol,
                                                    False,
@@ -473,13 +471,13 @@ sec_desc_parse(TALLOC_CTX *ctx,
                        }
                        continue;
                }
-                
+
                if (StrnCaseCmp(tok,"GROUP:", 6) == 0) {
                        if (group_sid) {
                                DEBUG(5,("GROUP specified more than once!\n"));
                                goto done;
                        }
-                       group_sid = SMB_CALLOC_ARRAY(DOM_SID, 1);
+                       group_sid = SMB_CALLOC_ARRAY(struct dom_sid, 1);
                        if (!group_sid ||
                            !convert_string_to_sid(ipc_cli, pol,
                                                    numeric,
@@ -489,13 +487,13 @@ sec_desc_parse(TALLOC_CTX *ctx,
                        }
                        continue;
                }
-                
+
                if (StrnCaseCmp(tok,"GROUP+:", 7) == 0) {
                        if (group_sid) {
                                DEBUG(5,("GROUP specified more than once!\n"));
                                goto done;
                        }
-                       group_sid = SMB_CALLOC_ARRAY(DOM_SID, 1);
+                       group_sid = SMB_CALLOC_ARRAY(struct dom_sid, 1);
                        if (!group_sid ||
                            !convert_string_to_sid(ipc_cli, pol,
                                                    False,
@@ -505,9 +503,9 @@ sec_desc_parse(TALLOC_CTX *ctx,
                        }
                        continue;
                }
-                
+
                if (StrnCaseCmp(tok,"ACL:", 4) == 0) {
-                       SEC_ACE ace;
+                       struct security_ace ace;
                        if (!parse_ace(ipc_cli, pol, &ace, numeric, tok+4)) {
                                DEBUG(5, ("Failed to parse ACL %s\n", tok));
                                goto done;
@@ -518,9 +516,9 @@ sec_desc_parse(TALLOC_CTX *ctx,
                        }
                        continue;
                }
-                
+
                if (StrnCaseCmp(tok,"ACL+:", 5) == 0) {
-                       SEC_ACE ace;
+                       struct security_ace ace;
                        if (!parse_ace(ipc_cli, pol, &ace, False, tok+5)) {
                                DEBUG(5, ("Failed to parse ACL %s\n", tok));
                                goto done;
@@ -531,18 +529,17 @@ sec_desc_parse(TALLOC_CTX *ctx,
                        }
                        continue;
                }
-                
+
                DEBUG(5, ("Failed to parse security descriptor\n"));
                goto done;
        }
-        
+
        ret = make_sec_desc(ctx, revision, SEC_DESC_SELF_RELATIVE, 
                            owner_sid, group_sid, NULL, dacl, &sd_size);
-        
+
 done:
        SAFE_FREE(group_sid);
        SAFE_FREE(owner_sid);
-        
        return ret;
 }
 
@@ -562,13 +559,13 @@ dos_attr_query(SMBCCTX *context,
         uint16 mode = 0;
        SMB_INO_T inode = 0;
         DOS_ATTR_DESC *ret;
-        
+
         ret = TALLOC_P(ctx, DOS_ATTR_DESC);
         if (!ret) {
                 errno = ENOMEM;
                 return NULL;
         }
-        
+
         /* Obtain the DOS attributes */
         if (!SMBC_getatr(context, srv, CONST_DISCARD(char *, filename),
                          &mode, &size,
@@ -581,7 +578,7 @@ dos_attr_query(SMBCCTX *context,
                 DEBUG(5, ("dos_attr_query Failed to query old attributes\n"));
                 return NULL;
         }
-        
+
         ret->mode = mode;
         ret->size = size;
         ret->create_time = convert_timespec_to_time_t(create_time_ts);
@@ -589,7 +586,7 @@ dos_attr_query(SMBCCTX *context,
         ret->write_time = convert_timespec_to_time_t(write_time_ts);
         ret->change_time = convert_timespec_to_time_t(change_time_ts);
         ret->inode = inode;
-        
+
         return ret;
 }
 
@@ -611,7 +608,7 @@ dos_attr_parse(SMBCCTX *context,
                 const char * write_time_attr;
                 const char * change_time_attr;
         } attr_strings;
-        
+
         /* Determine whether to use old-style or new-style attribute names */
         if (context->internal->full_time_names) {
                 /* new-style names */
@@ -626,7 +623,7 @@ dos_attr_parse(SMBCCTX *context,
                 attr_strings.write_time_attr = "M_TIME";
                 attr_strings.change_time_attr = "C_TIME";
         }
-        
+
         /* if this is to set the entire ACL... */
         if (*str == '*') {
                 /* ... then increment past the first colon if there is one */
@@ -636,7 +633,7 @@ dos_attr_parse(SMBCCTX *context,
                         p = str;
                 }
         }
-        
+
        frame = talloc_stackframe();
        while (next_token_talloc(frame, &p, &tok, "\t,\r\n")) {
                if (StrnCaseCmp(tok, "MODE:", 5) == 0) {
@@ -651,30 +648,30 @@ dos_attr_parse(SMBCCTX *context,
                         }
                        continue;
                }
-                
+
                if (StrnCaseCmp(tok, "SIZE:", 5) == 0) {
                         dad->size = (SMB_OFF_T)atof(tok+5);
                        continue;
                }
-                
+
                 n = strlen(attr_strings.access_time_attr);
                 if (StrnCaseCmp(tok, attr_strings.access_time_attr, n) == 0) {
                         dad->access_time = (time_t)strtol(tok+n+1, NULL, 10);
                        continue;
                }
-                
+
                 n = strlen(attr_strings.change_time_attr);
                 if (StrnCaseCmp(tok, attr_strings.change_time_attr, n) == 0) {
                         dad->change_time = (time_t)strtol(tok+n+1, NULL, 10);
                        continue;
                }
-                
+
                 n = strlen(attr_strings.write_time_attr);
                 if (StrnCaseCmp(tok, attr_strings.write_time_attr, n) == 0) {
                         dad->write_time = (time_t)strtol(tok+n+1, NULL, 10);
                        continue;
                }
-                
+
                if (attr_strings.create_time_attr != NULL) {
                        n = strlen(attr_strings.create_time_attr);
                        if (StrnCaseCmp(tok, attr_strings.create_time_attr,
@@ -684,7 +681,7 @@ dos_attr_parse(SMBCCTX *context,
                                continue;
                        }
                }
-                
+
                if (StrnCaseCmp(tok, "INODE:", 6) == 0) {
                         dad->inode = (SMB_INO_T)atof(tok+6);
                        continue;
@@ -730,8 +727,8 @@ cacl_get(SMBCCTX *context,
         bool exclude_dos_inode = False;
         bool numeric = True;
         bool determine_size = (bufsize == 0);
-       int fnum = -1;
-       SEC_DESC *sd;
+       uint16_t fnum;
+       struct security_descriptor *sd;
        fstring sidstr;
         fstring name_sandbox;
         char *name;
@@ -761,7 +758,7 @@ cacl_get(SMBCCTX *context,
                 const char * write_time_attr;
                 const char * change_time_attr;
         } excl_attr_strings;
-        
+
         /* Determine whether to use old-style or new-style attribute names */
         if (context->internal->full_time_names) {
                 /* new-style names */
@@ -769,7 +766,7 @@ cacl_get(SMBCCTX *context,
                 attr_strings.access_time_attr = "ACCESS_TIME";
                 attr_strings.write_time_attr = "WRITE_TIME";
                 attr_strings.change_time_attr = "CHANGE_TIME";
-                
+
                 excl_attr_strings.create_time_attr = "CREATE_TIME";
                 excl_attr_strings.access_time_attr = "ACCESS_TIME";
                 excl_attr_strings.write_time_attr = "WRITE_TIME";
@@ -780,28 +777,28 @@ cacl_get(SMBCCTX *context,
                 attr_strings.access_time_attr = "A_TIME";
                 attr_strings.write_time_attr = "M_TIME";
                 attr_strings.change_time_attr = "C_TIME";
-                
+
                 excl_attr_strings.create_time_attr = NULL;
                 excl_attr_strings.access_time_attr = "dos_attr.A_TIME";
                 excl_attr_strings.write_time_attr = "dos_attr.M_TIME";
                 excl_attr_strings.change_time_attr = "dos_attr.C_TIME";
         }
-        
+
         /* Copy name so we can strip off exclusions (if any are specified) */
         strncpy(name_sandbox, attr_name, sizeof(name_sandbox) - 1);
-        
+
         /* Ensure name is null terminated */
         name_sandbox[sizeof(name_sandbox) - 1] = '\0';
-        
+
         /* Play in the sandbox */
         name = name_sandbox;
-        
+
         /* If there are any exclusions, point to them and mask them from name */
         if ((pExclude = strchr(name, '!')) != NULL)
         {
                 *pExclude++ = '\0';
         }
-        
+
         all = (StrnCaseCmp(name, "system.*", 8) == 0);
         all_nt = (StrnCaseCmp(name, "system.nt_sec_desc.*", 20) == 0);
         all_nt_acls = (StrnCaseCmp(name, "system.nt_sec_desc.acl.*", 24) == 0);
@@ -809,21 +806,20 @@ cacl_get(SMBCCTX *context,
         some_nt = (StrnCaseCmp(name, "system.nt_sec_desc.", 19) == 0);
         some_dos = (StrnCaseCmp(name, "system.dos_attr.", 16) == 0);
         numeric = (* (name + strlen(name) - 1) != '+');
-        
+
         /* Look for exclusions from "all" requests */
         if (all || all_nt || all_dos) {
-                
                 /* Exclusions are delimited by '!' */
                 for (;
                      pExclude != NULL;
                      pExclude = (p == NULL ? NULL : p + 1)) {
-                        
+
                         /* Find end of this exclusion name */
                         if ((p = strchr(pExclude, '!')) != NULL)
                         {
                                 *p = '\0';
                         }
-                        
+
                         /* Which exclusion name is this? */
                         if (StrCaseCmp(pExclude,
                                        "nt_sec_desc.revision") == 0) {
@@ -877,9 +873,9 @@ cacl_get(SMBCCTX *context,
                         }
                 }
         }
-        
+
         n_used = 0;
-        
+
         /*
          * If we are (possibly) talking to an NT or new system and some NT
          * attributes have been requested...
@@ -901,9 +897,8 @@ cacl_get(SMBCCTX *context,
                }
 
                 /* ... then obtain any NT attributes which were requested */
-                fnum = cli_nt_create(targetcli, targetpath, CREATE_ACCESS_READ);
-
-                if (fnum == -1) {
+                if (!NT_STATUS_IS_OK(cli_ntcreate(targetcli, targetpath, 0, CREATE_ACCESS_READ, 0,
+                               FILE_SHARE_READ|FILE_SHARE_WRITE, FILE_OPEN, 0x0, 0x0, &fnum))) {
                        DEBUG(5, ("cacl_get failed to open %s: %s\n",
                                targetpath, cli_errstr(targetcli)));
                        errno = 0;
@@ -951,7 +946,7 @@ cacl_get(SMBCCTX *context,
                                                      sd->revision);
                                 }
                         }
-                        
+
                         if (!determine_size && n > bufsize) {
                                 errno = ERANGE;
                                 return -1;
@@ -961,7 +956,7 @@ cacl_get(SMBCCTX *context,
                         bufsize -= n;
                         n = 0;
                 }
-                
+
                 if (! exclude_nt_owner) {
                         /* Get owner and group sid */
                         if (sd->owner_sid) {
@@ -972,7 +967,7 @@ cacl_get(SMBCCTX *context,
                         } else {
                                 fstrcpy(sidstr, "");
                         }
-                        
+
                         if (all || all_nt) {
                                 if (determine_size) {
                                         p = talloc_asprintf(ctx, ",OWNER:%s",
@@ -999,7 +994,7 @@ cacl_get(SMBCCTX *context,
                                                      sidstr);
                                 }
                         }
-                        
+
                         if (!determine_size && n > bufsize) {
                                 errno = ERANGE;
                                 return -1;
@@ -1009,7 +1004,7 @@ cacl_get(SMBCCTX *context,
                         bufsize -= n;
                         n = 0;
                 }
-                
+
                 if (! exclude_nt_group) {
                         if (sd->group_sid) {
                                 convert_sid_to_string(ipc_cli, pol,
@@ -1018,7 +1013,7 @@ cacl_get(SMBCCTX *context,
                         } else {
                                 fstrcpy(sidstr, "");
                         }
-                        
+
                         if (all || all_nt) {
                                 if (determine_size) {
                                         p = talloc_asprintf(ctx, ",GROUP:%s",
@@ -1045,7 +1040,7 @@ cacl_get(SMBCCTX *context,
                                                      "%s", sidstr);
                                 }
                         }
-                        
+
                         if (!determine_size && n > bufsize) {
                                 errno = ERANGE;
                                 return -1;
@@ -1055,16 +1050,16 @@ cacl_get(SMBCCTX *context,
                         bufsize -= n;
                         n = 0;
                 }
-                
+
                 if (! exclude_nt_acl) {
                         /* Add aces to value buffer  */
                         for (i = 0; sd->dacl && i < sd->dacl->num_aces; i++) {
-                                
-                                SEC_ACE *ace = &sd->dacl->aces[i];
+
+                                struct security_ace *ace = &sd->dacl->aces[i];
                                 convert_sid_to_string(ipc_cli, pol,
                                                       sidstr, numeric,
                                                       &ace->trustee);
-                                
+
                                 if (all || all_nt) {
                                         if (determine_size) {
                                                 p = talloc_asprintf(
@@ -1147,15 +1142,15 @@ cacl_get(SMBCCTX *context,
                                 n = 0;
                         }
                 }
-                
+
                 /* Restore name pointer to its original value */
                 name -= 19;
         }
-        
+
         if (all || some_dos) {
                 /* Point to the portion after "system.dos_attr." */
                 name += 16;     /* if (all) this will be invalid but unused */
-                
+
                 /* Obtain the DOS attributes */
                 if (!SMBC_getatr(context, srv, filename, &mode, &size, 
                                  &create_time_ts,
@@ -1163,17 +1158,16 @@ cacl_get(SMBCCTX *context,
                                  &write_time_ts,
                                  &change_time_ts,
                                  &ino)) {
-                        
+
                         errno = SMBC_errno(context, srv->cli);
                         return -1;
-                        
                 }
-                
+
                 create_time = convert_timespec_to_time_t(create_time_ts);
                 access_time = convert_timespec_to_time_t(access_time_ts);
                 write_time = convert_timespec_to_time_t(write_time_ts);
                 change_time = convert_timespec_to_time_t(change_time_ts);
-                
+
                 if (! exclude_dos_mode) {
                         if (all || all_dos) {
                                 if (determine_size) {
@@ -1211,7 +1205,7 @@ cacl_get(SMBCCTX *context,
                                                      "0x%x", mode);
                                 }
                         }
-                        
+
                         if (!determine_size && n > bufsize) {
                                 errno = ERANGE;
                                 return -1;
@@ -1221,7 +1215,7 @@ cacl_get(SMBCCTX *context,
                         bufsize -= n;
                         n = 0;
                 }
-                
+
                 if (! exclude_dos_size) {
                         if (all || all_dos) {
                                 if (determine_size) {
@@ -1256,7 +1250,7 @@ cacl_get(SMBCCTX *context,
                                                      (double)size);
                                 }
                         }
-                        
+
                         if (!determine_size && n > bufsize) {
                                 errno = ERANGE;
                                 return -1;
@@ -1266,7 +1260,7 @@ cacl_get(SMBCCTX *context,
                         bufsize -= n;
                         n = 0;
                 }
-                
+
                 if (! exclude_dos_create_time &&
                     attr_strings.create_time_attr != NULL) {
                         if (all || all_dos) {
@@ -1299,7 +1293,7 @@ cacl_get(SMBCCTX *context,
                                                      "%lu", (unsigned long) create_time);
                                 }
                         }
-                        
+
                         if (!determine_size && n > bufsize) {
                                 errno = ERANGE;
                                 return -1;
@@ -1309,7 +1303,7 @@ cacl_get(SMBCCTX *context,
                         bufsize -= n;
                         n = 0;
                 }
-                
+
                 if (! exclude_dos_access_time) {
                         if (all || all_dos) {
                                 if (determine_size) {
@@ -1341,7 +1335,7 @@ cacl_get(SMBCCTX *context,
                                                      "%lu", (unsigned long) access_time);
                                 }
                         }
-                        
+
                         if (!determine_size && n > bufsize) {
                                 errno = ERANGE;
                                 return -1;
@@ -1351,7 +1345,7 @@ cacl_get(SMBCCTX *context,
                         bufsize -= n;
                         n = 0;
                 }
-                
+
                 if (! exclude_dos_write_time) {
                         if (all || all_dos) {
                                 if (determine_size) {
@@ -1383,7 +1377,7 @@ cacl_get(SMBCCTX *context,
                                                      "%lu", (unsigned long) write_time);
                                 }
                         }
-                        
+
                         if (!determine_size && n > bufsize) {
                                 errno = ERANGE;
                                 return -1;
@@ -1393,7 +1387,7 @@ cacl_get(SMBCCTX *context,
                         bufsize -= n;
                         n = 0;
                 }
-                
+
                 if (! exclude_dos_change_time) {
                         if (all || all_dos) {
                                 if (determine_size) {
@@ -1425,7 +1419,7 @@ cacl_get(SMBCCTX *context,
                                                      "%lu", (unsigned long) change_time);
                                 }
                         }
-                        
+
                         if (!determine_size && n > bufsize) {
                                 errno = ERANGE;
                                 return -1;
@@ -1435,7 +1429,7 @@ cacl_get(SMBCCTX *context,
                         bufsize -= n;
                         n = 0;
                 }
-                
+
                 if (! exclude_dos_inode) {
                         if (all || all_dos) {
                                 if (determine_size) {
@@ -1470,7 +1464,7 @@ cacl_get(SMBCCTX *context,
                                                      (double) ino);
                                 }
                         }
-                        
+
                         if (!determine_size && n > bufsize) {
                                 errno = ERANGE;
                                 return -1;
@@ -1480,16 +1474,16 @@ cacl_get(SMBCCTX *context,
                         bufsize -= n;
                         n = 0;
                 }
-                
+
                 /* Restore name pointer to its original value */
                 name -= 16;
         }
-        
+
         if (n_used == 0) {
                 errno = ENOATTR;
                 return -1;
         }
-        
+
        return n_used;
 }
 
@@ -1507,12 +1501,12 @@ cacl_set(SMBCCTX *context,
        int mode,
        int flags)
 {
-       int fnum;
+       uint16_t fnum = (uint16_t)-1;
         int err = 0;
-       SEC_DESC *sd = NULL, *old;
-        SEC_ACL *dacl = NULL;
-       DOM_SID *owner_sid = NULL;
-       DOM_SID *group_sid = NULL;
+       struct security_descriptor *sd = NULL, *old;
+        struct security_acl *dacl = NULL;
+       struct dom_sid *owner_sid = NULL;
+       struct dom_sid *group_sid = NULL;
        uint32 i, j;
        size_t sd_size;
        int ret = 0;
@@ -1526,24 +1520,23 @@ cacl_set(SMBCCTX *context,
                 numeric = ((p = strchr(the_acl, ':')) != NULL &&
                            p > the_acl &&
                            p[-1] != '+');
-                
+
                 /* if this is to set the entire ACL... */
                 if (*the_acl == '*') {
                         /* ... then increment past the first colon */
                         the_acl = p + 1;
                 }
-                
+
                 sd = sec_desc_parse(ctx, ipc_cli, pol, numeric, the_acl);
-                
                 if (!sd) {
                        errno = EINVAL;
                        return -1;
                 }
         }
-        
+
        /* SMBC_XATTR_MODE_REMOVE_ALL is the only caller
           that doesn't deref sd */
-        
+
        if (!sd && (mode != SMBC_XATTR_MODE_REMOVE_ALL)) {
                errno = EINVAL;
                return -1;
@@ -1560,9 +1553,8 @@ cacl_set(SMBCCTX *context,
        /* The desired access below is the only one I could find that works
           with NT4, W2KP and Samba */
 
-       fnum = cli_nt_create(targetcli, targetpath, CREATE_ACCESS_READ);
-
-       if (fnum == -1) {
+       if (!NT_STATUS_IS_OK(cli_ntcreate(targetcli, targetpath, 0, CREATE_ACCESS_READ, 0,
+                               FILE_SHARE_READ|FILE_SHARE_WRITE, FILE_OPEN, 0x0, 0x0, &fnum))) {
                 DEBUG(5, ("cacl_set failed to open %s: %s\n",
                           targetpath, cli_errstr(targetcli)));
                 errno = 0;
@@ -1603,7 +1595,7 @@ cacl_set(SMBCCTX *context,
                                        break;
                                }
                        }
-                        
+
                        if (!found) {
                                 err = ENOATTR;
                                 ret = -1;
@@ -1611,13 +1603,13 @@ cacl_set(SMBCCTX *context,
                        }
                }
                break;
-                
+
        case SMBC_XATTR_MODE_ADD:
                for (i=0;sd->dacl && i<sd->dacl->num_aces;i++) {
                        bool found = False;
-                        
+
                        for (j=0;old->dacl && j<old->dacl->num_aces;j++) {
-                               if (sid_equal(&sd->dacl->aces[i].trustee,
+                               if (dom_sid_equal(&sd->dacl->aces[i].trustee,
                                              &old->dacl->aces[j].trustee)) {
                                         if (!(flags & SMBC_XATTR_FLAG_CREATE)) {
                                                 err = EEXIST;
@@ -1629,68 +1621,67 @@ cacl_set(SMBCCTX *context,
                                        found = True;
                                }
                        }
-                        
+
                        if (!found && (flags & SMBC_XATTR_FLAG_REPLACE)) {
                                 err = ENOATTR;
                                 ret = -1;
                                 goto failed;
                        }
-                        
+
                         for (i=0;sd->dacl && i<sd->dacl->num_aces;i++) {
                                 add_ace(&old->dacl, &sd->dacl->aces[i], ctx);
                         }
                }
                 dacl = old->dacl;
                break;
-                
+
        case SMBC_XATTR_MODE_SET:
                old = sd;
                 owner_sid = old->owner_sid;
                 group_sid = old->group_sid;
                 dacl = old->dacl;
                break;
-                
+
         case SMBC_XATTR_MODE_CHOWN:
                 owner_sid = sd->owner_sid;
                 break;
-                
+
         case SMBC_XATTR_MODE_CHGRP:
                 group_sid = sd->group_sid;
                 break;
        }
-        
+
        /* Denied ACE entries must come before allowed ones */
        sort_acl(old->dacl);
-        
+
        /* Create new security descriptor and set it */
        sd = make_sec_desc(ctx, old->revision, SEC_DESC_SELF_RELATIVE,
                           owner_sid, group_sid, NULL, dacl, &sd_size);
-        
-       fnum = cli_nt_create(targetcli, targetpath,
-                             WRITE_DAC_ACCESS | WRITE_OWNER_ACCESS);
-        
-       if (fnum == -1) {
+
+       if (!NT_STATUS_IS_OK(cli_ntcreate(targetcli, targetpath, 0,
+                             WRITE_DAC_ACCESS | WRITE_OWNER_ACCESS, 0,
+                            FILE_SHARE_READ|FILE_SHARE_WRITE, FILE_OPEN, 0x0, 0x0, &fnum))) {
                DEBUG(5, ("cacl_set failed to open %s: %s\n",
                           targetpath, cli_errstr(targetcli)));
                 errno = 0;
                return -1;
        }
-        
+
        if (!cli_set_secdesc(targetcli, fnum, sd)) {
                DEBUG(5, ("ERROR: secdesc set failed: %s\n",
                        cli_errstr(targetcli)));
                ret = -1;
        }
-        
+
        /* Clean up */
-        
+
 failed:
        cli_close(targetcli, fnum);
-        
+
         if (err != 0) {
                 errno = err;
         }
-        
+
        return ret;
 }
 
@@ -1721,23 +1712,22 @@ SMBC_setxattr_ctx(SMBCCTX *context,
                 const char * change_time_attr;
         } attr_strings;
         TALLOC_CTX *frame = talloc_stackframe();
-        
+
        if (!context || !context->internal->initialized) {
-                
                errno = EINVAL;  /* Best I can think of ... */
                TALLOC_FREE(frame);
                return -1;
        }
-        
+
        if (!fname) {
                errno = EINVAL;
                TALLOC_FREE(frame);
                return -1;
        }
-        
+
        DEBUG(4, ("smbc_setxattr(%s, %s, %.*s)\n",
                   fname, name, (int) size, (const char*)value));
-        
+
        if (SMBC_parse_path(frame,
                             context,
                             fname,
@@ -1752,7 +1742,7 @@ SMBC_setxattr_ctx(SMBCCTX *context,
                TALLOC_FREE(frame);
                return -1;
         }
-        
+
        if (!user || user[0] == (char)0) {
                user = talloc_strdup(frame, smbc_getUser(context));
                if (!user) {
@@ -1761,14 +1751,14 @@ SMBC_setxattr_ctx(SMBCCTX *context,
                        return -1;
                }
        }
-        
+
        srv = SMBC_server(frame, context, True,
                           server, share, &workgroup, &user, &password);
        if (!srv) {
                TALLOC_FREE(frame);
                return -1;  /* errno set by SMBC_server */
        }
-        
+
         if (! srv->no_nt_session) {
                 ipc_srv = SMBC_attr_server(frame, context, server, share,
                                            &workgroup, &user, &password);
@@ -1778,7 +1768,7 @@ SMBC_setxattr_ctx(SMBCCTX *context,
         } else {
                 ipc_srv = NULL;
         }
-        
+
         /*
          * Are they asking to set the entire set of known attributes?
          */
@@ -1794,7 +1784,7 @@ SMBC_setxattr_ctx(SMBCCTX *context,
                        TALLOC_FREE(frame);
                         return -1;
                 }
-                
+
                 if (ipc_srv) {
                         ret = cacl_set(context, talloc_tos(), srv->cli,
                                        ipc_srv->cli, &ipc_srv->pol, path,
@@ -1806,13 +1796,13 @@ SMBC_setxattr_ctx(SMBCCTX *context,
                 } else {
                         ret = 0;
                 }
-                
+
                 /* get a DOS Attribute Descriptor with current attributes */
                 dad = dos_attr_query(context, talloc_tos(), path, srv);
                 if (dad) {
                         /* Overwrite old with new, using what was provided */
                         dos_attr_parse(context, dad, srv, namevalue);
-                        
+
                         /* Set the new DOS attributes */
                         if (! SMBC_setatr(context, srv, path,
                                           dad->create_time,
@@ -1820,12 +1810,12 @@ SMBC_setxattr_ctx(SMBCCTX *context,
                                           dad->write_time,
                                           dad->change_time,
                                           dad->mode)) {
-                                
+
                                 /* cause failure if NT failed too */
                                 dad = NULL; 
                         }
                 }
-                
+
                 /* we only fail if both NT and DOS sets failed */
                 if (ret < 0 && ! dad) {
                         ret = -1; /* in case dad was null */
@@ -1833,11 +1823,11 @@ SMBC_setxattr_ctx(SMBCCTX *context,
                 else {
                         ret = 0;
                 }
-                
+
                TALLOC_FREE(frame);
                 return ret;
         }
-        
+
         /*
          * Are they asking to set an access control element or to set
          * the entire access control list?
@@ -1847,12 +1837,12 @@ SMBC_setxattr_ctx(SMBCCTX *context,
             StrCaseCmp(name, "system.nt_sec_desc.revision") == 0 ||
             StrnCaseCmp(name, "system.nt_sec_desc.acl", 22) == 0 ||
             StrnCaseCmp(name, "system.nt_sec_desc.acl+", 23) == 0) {
-                
+
                 /* Yup. */
                 char *namevalue =
                         talloc_asprintf(talloc_tos(), "%s:%s",
                                         name+19, (const char *) value);
-                
+
                 if (! ipc_srv) {
                         ret = -1; /* errno set by SMBC_server() */
                 }
@@ -1871,18 +1861,18 @@ SMBC_setxattr_ctx(SMBCCTX *context,
                TALLOC_FREE(frame);
                 return ret;
         }
-        
+
         /*
          * Are they asking to set the owner?
          */
         if (StrCaseCmp(name, "system.nt_sec_desc.owner") == 0 ||
             StrCaseCmp(name, "system.nt_sec_desc.owner+") == 0) {
-                
+
                 /* Yup. */
                 char *namevalue =
                         talloc_asprintf(talloc_tos(), "%s:%s",
                                         name+19, (const char *) value);
-                
+
                 if (! ipc_srv) {
                         ret = -1; /* errno set by SMBC_server() */
                 }
@@ -1897,18 +1887,18 @@ SMBC_setxattr_ctx(SMBCCTX *context,
                TALLOC_FREE(frame);
                 return ret;
         }
-        
+
         /*
          * Are they asking to set the group?
          */
         if (StrCaseCmp(name, "system.nt_sec_desc.group") == 0 ||
             StrCaseCmp(name, "system.nt_sec_desc.group+") == 0) {
-                
+
                 /* Yup. */
                 char *namevalue =
                         talloc_asprintf(talloc_tos(), "%s:%s",
                                         name+19, (const char *) value);
-                
+
                 if (! ipc_srv) {
                         /* errno set by SMBC_server() */
                         ret = -1;
@@ -1924,7 +1914,7 @@ SMBC_setxattr_ctx(SMBCCTX *context,
                TALLOC_FREE(frame);
                 return ret;
         }
-        
+
         /* Determine whether to use old-style or new-style attribute names */
         if (context->internal->full_time_names) {
                 /* new-style names */
@@ -1939,7 +1929,7 @@ SMBC_setxattr_ctx(SMBCCTX *context,
                 attr_strings.write_time_attr = "system.dos_attr.M_TIME";
                 attr_strings.change_time_attr = "system.dos_attr.C_TIME";
         }
-        
+
         /*
          * Are they asking to set a DOS attribute?
          */
@@ -1950,7 +1940,7 @@ SMBC_setxattr_ctx(SMBCCTX *context,
             StrCaseCmp(name, attr_strings.access_time_attr) == 0 ||
             StrCaseCmp(name, attr_strings.write_time_attr) == 0 ||
             StrCaseCmp(name, attr_strings.change_time_attr) == 0) {
-                
+
                 /* get a DOS Attribute Descriptor with current attributes */
                 dad = dos_attr_query(context, talloc_tos(), path, srv);
                 if (dad) {
@@ -1963,7 +1953,7 @@ SMBC_setxattr_ctx(SMBCCTX *context,
                         } else {
                                 /* Overwrite old with provided new params */
                                 dos_attr_parse(context, dad, srv, namevalue);
-                                
+
                                 /* Set the new DOS attributes */
                                 ret2 = SMBC_setatr(context, srv, path,
                                                    dad->create_time,
@@ -1971,7 +1961,7 @@ SMBC_setxattr_ctx(SMBCCTX *context,
                                                    dad->write_time,
                                                    dad->change_time,
                                                    dad->mode);
-                                
+
                                 /* ret2 has True (success) / False (failure) */
                                 if (ret2) {
                                         ret = 0;
@@ -1982,11 +1972,11 @@ SMBC_setxattr_ctx(SMBCCTX *context,
                 } else {
                         ret = -1;
                 }
-                
+
                TALLOC_FREE(frame);
                 return ret;
         }
-        
+
         /* Unsupported attribute name */
         errno = EINVAL;
        TALLOC_FREE(frame);
@@ -2016,22 +2006,21 @@ SMBC_getxattr_ctx(SMBCCTX *context,
                 const char * change_time_attr;
         } attr_strings;
        TALLOC_CTX *frame = talloc_stackframe();
-        
+
        if (!context || !context->internal->initialized) {
-                
                 errno = EINVAL;  /* Best I can think of ... */
                TALLOC_FREE(frame);
                 return -1;
         }
-        
+
         if (!fname) {
                 errno = EINVAL;
                TALLOC_FREE(frame);
                 return -1;
         }
-        
+
         DEBUG(4, ("smbc_getxattr(%s, %s)\n", fname, name));
-        
+
         if (SMBC_parse_path(frame,
                             context,
                             fname,
@@ -2046,7 +2035,7 @@ SMBC_getxattr_ctx(SMBCCTX *context,
                TALLOC_FREE(frame);
                return -1;
         }
-        
+
         if (!user || user[0] == (char)0) {
                user = talloc_strdup(frame, smbc_getUser(context));
                if (!user) {
@@ -2055,14 +2044,14 @@ SMBC_getxattr_ctx(SMBCCTX *context,
                        return -1;
                }
        }
-        
+
         srv = SMBC_server(frame, context, True,
                           server, share, &workgroup, &user, &password);
         if (!srv) {
                TALLOC_FREE(frame);
                 return -1;  /* errno set by SMBC_server */
         }
-        
+
         if (! srv->no_nt_session) {
                 ipc_srv = SMBC_attr_server(frame, context, server, share,
                                            &workgroup, &user, &password);
@@ -2072,7 +2061,7 @@ SMBC_getxattr_ctx(SMBCCTX *context,
         } else {
                 ipc_srv = NULL;
         }
-        
+
         /* Determine whether to use old-style or new-style attribute names */
         if (context->internal->full_time_names) {
                 /* new-style names */
@@ -2087,7 +2076,7 @@ SMBC_getxattr_ctx(SMBCCTX *context,
                 attr_strings.write_time_attr = "system.dos_attr.M_TIME";
                 attr_strings.change_time_attr = "system.dos_attr.C_TIME";
         }
-        
+
         /* Are they requesting a supported attribute? */
         if (StrCaseCmp(name, "system.*") == 0 ||
             StrnCaseCmp(name, "system.*!", 9) == 0 ||
@@ -2114,7 +2103,7 @@ SMBC_getxattr_ctx(SMBCCTX *context,
             StrCaseCmp(name, attr_strings.write_time_attr) == 0 ||
             StrCaseCmp(name, attr_strings.change_time_attr) == 0 ||
             StrCaseCmp(name, "system.dos_attr.inode") == 0) {
-                
+
                 /* Yup. */
                 char *filename = (char *) name;
                 ret = cacl_get(context, talloc_tos(), srv,
@@ -2129,7 +2118,7 @@ SMBC_getxattr_ctx(SMBCCTX *context,
                TALLOC_FREE(frame);
                 return ret;
         }
-        
+
         /* Unsupported attribute name */
         errno = EINVAL;
        TALLOC_FREE(frame);
@@ -2152,22 +2141,21 @@ SMBC_removexattr_ctx(SMBCCTX *context,
        char *workgroup = NULL;
        char *path = NULL;
        TALLOC_CTX *frame = talloc_stackframe();
-        
+
        if (!context || !context->internal->initialized) {
-                
                 errno = EINVAL;  /* Best I can think of ... */
                TALLOC_FREE(frame);
                 return -1;
         }
-        
+
         if (!fname) {
                 errno = EINVAL;
                TALLOC_FREE(frame);
                 return -1;
         }
-        
+
         DEBUG(4, ("smbc_removexattr(%s, %s)\n", fname, name));
-        
+
        if (SMBC_parse_path(frame,
                             context,
                             fname,
@@ -2182,7 +2170,7 @@ SMBC_removexattr_ctx(SMBCCTX *context,
                TALLOC_FREE(frame);
                return -1;
         }
-        
+
         if (!user || user[0] == (char)0) {
                user = talloc_strdup(frame, smbc_getUser(context));
                if (!user) {
@@ -2191,14 +2179,14 @@ SMBC_removexattr_ctx(SMBCCTX *context,
                        return -1;
                }
        }
-        
+
         srv = SMBC_server(frame, context, True,
                           server, share, &workgroup, &user, &password);
         if (!srv) {
                TALLOC_FREE(frame);
                 return -1;  /* errno set by SMBC_server */
         }
-        
+
         if (! srv->no_nt_session) {
                 ipc_srv = SMBC_attr_server(frame, context, server, share,
                                            &workgroup, &user, &password);
@@ -2208,16 +2196,16 @@ SMBC_removexattr_ctx(SMBCCTX *context,
         } else {
                 ipc_srv = NULL;
         }
-        
+
         if (! ipc_srv) {
                TALLOC_FREE(frame);
                 return -1; /* errno set by SMBC_attr_server */
         }
-        
+
         /* Are they asking to set the entire ACL? */
         if (StrCaseCmp(name, "system.nt_sec_desc.*") == 0 ||
             StrCaseCmp(name, "system.nt_sec_desc.*+") == 0) {
-                
+
                 /* Yup. */
                 ret = cacl_set(context, talloc_tos(), srv->cli,
                                ipc_srv->cli, &ipc_srv->pol, path,
@@ -2225,7 +2213,7 @@ SMBC_removexattr_ctx(SMBCCTX *context,
                TALLOC_FREE(frame);
                 return ret;
         }
-        
+
         /*
          * Are they asking to remove one or more spceific security descriptor
          * attributes?
@@ -2237,7 +2225,7 @@ SMBC_removexattr_ctx(SMBCCTX *context,
             StrCaseCmp(name, "system.nt_sec_desc.group+") == 0 ||
             StrnCaseCmp(name, "system.nt_sec_desc.acl", 22) == 0 ||
             StrnCaseCmp(name, "system.nt_sec_desc.acl+", 23) == 0) {
-                
+
                 /* Yup. */
                 ret = cacl_set(context, talloc_tos(), srv->cli,
                                ipc_srv->cli, &ipc_srv->pol, path,
@@ -2246,7 +2234,7 @@ SMBC_removexattr_ctx(SMBCCTX *context,
                TALLOC_FREE(frame);
                 return ret;
         }
-        
+
         /* Unsupported attribute name */
         errno = EINVAL;
        TALLOC_FREE(frame);
@@ -2305,7 +2293,7 @@ SMBC_listxattr_ctx(SMBCCTX *context,
                 "system.dos_attr.change_time\0"
                 ;
         const char * supported;
-        
+
         if (context->internal->full_time_names) {
                 supported = supported_new;
                 retsize = sizeof(supported_new);
@@ -2313,16 +2301,16 @@ SMBC_listxattr_ctx(SMBCCTX *context,
                 supported = supported_old;
                 retsize = sizeof(supported_old);
         }
-        
+
         if (size == 0) {
                 return retsize;
         }
-        
+
         if (retsize > size) {
                 errno = ERANGE;
                 return -1;
         }
-        
+
         /* this can't be strcpy() because there are embedded null characters */
         memcpy(list, supported, retsize);
         return retsize;