The branch, master has been updated
       via  b9f6e25fada torture: Fix a gcc qualifier ordering warning
       via  e593f969607 lib: Make accept_recv() return the listening socket
       via  f055d3f7db1 rpc_server: Fix a "bool==true" condition
       via  10d3a1c0689 rpc_server: Fix a typo
       via  181eb5728fd torture: Align integer types
       via  fa9d4570b8a lib: Align integer types
       via  b4077f7911d librpc: Fix a small memleak in epm_floor_string()
       via  c3ea181e762 smbd: Simplify sendfile_short_send()
       via  791b477ca5e sharesec: Simplify add_ace()
       via  90ea83b754b libcli: make_sec_acl() copies the ace_list, make that 
const
       via  f8f58301a11 smbcacls: Simplify add_ace_with_ctx()
       via  d4bbaee8904 libsmb: Simplify add_ace()
       via  3fa00ac31a8 libsmb: Simplify sec_desc_parse()
       via  5a018c70e24 smbcacls: Simplify sec_desc_parse()
       via  40e4958953c lib: Make accept_recv() return struct samba_sockaddr
       via  b417fd19675 rpc_server: Slightly simplify dcesrv_bind()
       via  ec4850d5205 rpc_server: Slightly simplify dcesrv_bind()
       via  d6d49638cc3 vfs: Simplify vfs_gluster_getwd()
       via  c5c9406b609 lib: Use hex_byte() in strhex_to_str()
       via  7d0981f5e78 lib: Avoid an "includes.h"
       via  d6c3faa1885 rpc_server: Fix a typo
      from  d8339056eef s3:idmap_hash: reliable return ID_TYPE_BOTH

https://git.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit b9f6e25fada7847af1971862dbdd6ce6e7103b1a
Author: Volker Lendecke <v...@samba.org>
Date:   Wed Jan 20 21:10:06 2021 +0100

    torture: Fix a gcc qualifier ordering warning
    
    Signed-off-by: Volker Lendecke <v...@samba.org>
    Reviewed-by: Jeremy Allison <j...@samba.org>
    
    Autobuild-User(master): Jeremy Allison <j...@samba.org>
    Autobuild-Date(master): Fri Jan 22 21:07:57 UTC 2021 on sn-devel-184

commit e593f969607791571248dd3341089001f49362fa
Author: Volker Lendecke <v...@samba.org>
Date:   Sun Jan 17 11:04:47 2021 +0100

    lib: Make accept_recv() return the listening socket
    
    This is helpful if you are in a listening loop with the same receiver
    for many sockets doing the same thing.
    
    Signed-off-by: Volker Lendecke <v...@samba.org>
    Reviewed-by: Jeremy Allison <j...@samba.org>

commit f055d3f7db1c6eb47a5773f3cbe5bf8a047f3830
Author: Volker Lendecke <v...@samba.org>
Date:   Wed Jan 20 14:53:56 2021 +0100

    rpc_server: Fix a "bool==true" condition
    
    Signed-off-by: Volker Lendecke <v...@samba.org>
    Reviewed-by: Jeremy Allison <j...@samba.org>

commit 10d3a1c0689c82ee0774cadc376c6b071afe277e
Author: Volker Lendecke <v...@samba.org>
Date:   Wed Jan 20 15:00:08 2021 +0100

    rpc_server: Fix a typo
    
    Signed-off-by: Volker Lendecke <v...@samba.org>
    Reviewed-by: Jeremy Allison <j...@samba.org>

commit 181eb5728fd4d9fd1126c1a396c8c621e2edc4d0
Author: Volker Lendecke <v...@samba.org>
Date:   Wed Jan 20 21:10:35 2021 +0100

    torture: Align integer types
    
    Signed-off-by: Volker Lendecke <v...@samba.org>
    Reviewed-by: Jeremy Allison <j...@samba.org>

commit fa9d4570b8af16a8ab4afe6ecc4cb8759a35c723
Author: Volker Lendecke <v...@samba.org>
Date:   Fri Jan 15 16:02:52 2021 +0100

    lib: Align integer types
    
    Signed-off-by: Volker Lendecke <v...@samba.org>
    Reviewed-by: Jeremy Allison <j...@samba.org>

commit b4077f7911dbe340eb1a5ba166049f381b9f4c24
Author: Volker Lendecke <v...@samba.org>
Date:   Fri Jan 15 15:16:55 2021 +0100

    librpc: Fix a small memleak in epm_floor_string()
    
    Use GUID_buf_string(), don't leak the output of GUID_string()
    
    Signed-off-by: Volker Lendecke <v...@samba.org>
    Reviewed-by: Jeremy Allison <j...@samba.org>

commit c3ea181e76206a865d04be836111dd40f462cfff
Author: Volker Lendecke <v...@samba.org>
Date:   Thu Jan 14 21:57:16 2021 +0100

    smbd: Simplify sendfile_short_send()
    
    Allocate 1024 bytes on the stack instead of using calloc
    
    Signed-off-by: Volker Lendecke <v...@samba.org>
    Reviewed-by: Jeremy Allison <j...@samba.org>

commit 791b477ca5ef8fdbdc7b144ad5d3c679644394a0
Author: Volker Lendecke <v...@samba.org>
Date:   Thu Jan 14 21:52:51 2021 +0100

    sharesec: Simplify add_ace()
    
    Use ADD_TO_ARRAY
    
    Signed-off-by: Volker Lendecke <v...@samba.org>
    Reviewed-by: Jeremy Allison <j...@samba.org>

commit 90ea83b754be1d02fbb421bb07c9cb246ec637d9
Author: Volker Lendecke <v...@samba.org>
Date:   Thu Jan 14 21:51:01 2021 +0100

    libcli: make_sec_acl() copies the ace_list, make that const
    
    Signed-off-by: Volker Lendecke <v...@samba.org>
    Reviewed-by: Jeremy Allison <j...@samba.org>

commit f8f58301a11caf13a416ff98b1681c78bd9a3a0b
Author: Volker Lendecke <v...@samba.org>
Date:   Thu Jan 14 21:45:36 2021 +0100

    smbcacls: Simplify add_ace_with_ctx()
    
    Use ADD_TO_ARRAY()
    
    Signed-off-by: Volker Lendecke <v...@samba.org>
    Reviewed-by: Jeremy Allison <j...@samba.org>

commit d4bbaee890416609add457aa9534152c61b3671d
Author: Volker Lendecke <v...@samba.org>
Date:   Thu Jan 14 21:33:13 2021 +0100

    libsmb: Simplify add_ace()
    
    Use ADD_TO_ARRAY()
    
    Signed-off-by: Volker Lendecke <v...@samba.org>
    Reviewed-by: Jeremy Allison <j...@samba.org>

commit 3fa00ac31a86cb43af05fa7f3f0bb15c13af44f8
Author: Volker Lendecke <v...@samba.org>
Date:   Thu Jan 14 21:32:21 2021 +0100

    libsmb: Simplify sec_desc_parse()
    
    Avoid CALLOC for just one struct dom_sids
    
    Signed-off-by: Volker Lendecke <v...@samba.org>
    Reviewed-by: Jeremy Allison <j...@samba.org>

commit 5a018c70e241bed007339ebe3890f2eaaf678ff2
Author: Volker Lendecke <v...@samba.org>
Date:   Thu Jan 14 20:49:00 2021 +0100

    smbcacls: Simplify sec_desc_parse()
    
    Don't use SMB_CALLOC_ARRAY for just one element.
    
    Signed-off-by: Volker Lendecke <v...@samba.org>
    Reviewed-by: Jeremy Allison <j...@samba.org>

commit 40e4958953c8518fa779286fd96ebf36517a5bdb
Author: Volker Lendecke <v...@samba.org>
Date:   Mon Jan 11 15:58:58 2021 +0100

    lib: Make accept_recv() return struct samba_sockaddr
    
    Avoid casting problems by using the samba_sockaddr union
    
    Signed-off-by: Volker Lendecke <v...@samba.org>
    Reviewed-by: Jeremy Allison <j...@samba.org>

commit b417fd19675bb2d987abc768695c0b2feb1f637a
Author: Volker Lendecke <v...@samba.org>
Date:   Thu Jan 14 12:20:43 2021 +0100

    rpc_server: Slightly simplify dcesrv_bind()
    
    Factor out dereferencing conn->dce_ctx
    
    Signed-off-by: Volker Lendecke <v...@samba.org>
    Reviewed-by: Jeremy Allison <j...@samba.org>

commit ec4850d5205b0b568221124a628153a99e6c1e7f
Author: Volker Lendecke <v...@samba.org>
Date:   Thu Jan 14 12:17:53 2021 +0100

    rpc_server: Slightly simplify dcesrv_bind()
    
    We have already dereferenced call->conn in a variable, use that.
    
    Signed-off-by: Volker Lendecke <v...@samba.org>
    Reviewed-by: Jeremy Allison <j...@samba.org>

commit d6d49638cc3553dc83914035301ddafab966180b
Author: Volker Lendecke <v...@samba.org>
Date:   Thu Jan 14 10:25:41 2021 +0100

    vfs: Simplify vfs_gluster_getwd()
    
    Avoid a malloc, we allocate PATH_MAX chars on the stack elsewhere too
    
    Signed-off-by: Volker Lendecke <v...@samba.org>
    Reviewed-by: Jeremy Allison <j...@samba.org>

commit c5c9406b6098cddbb939b3abc5d9435a9a24f6b2
Author: Volker Lendecke <v...@samba.org>
Date:   Thu Jan 14 10:21:19 2021 +0100

    lib: Use hex_byte() in strhex_to_str()
    
    I had completely missed that one in the last round...
    
    Signed-off-by: Volker Lendecke <v...@samba.org>
    Reviewed-by: Jeremy Allison <j...@samba.org>

commit 7d0981f5e78bc881ca6521932379c69604c33a38
Author: Volker Lendecke <v...@samba.org>
Date:   Thu Jan 14 10:10:04 2021 +0100

    lib: Avoid an "includes.h"
    
    Signed-off-by: Volker Lendecke <v...@samba.org>
    Reviewed-by: Jeremy Allison <j...@samba.org>

commit d6c3faa188523bef0177c9411209d3ebf78ad159
Author: Volker Lendecke <v...@samba.org>
Date:   Wed Jan 13 16:03:08 2021 +0100

    rpc_server: Fix a typo
    
    Signed-off-by: Volker Lendecke <v...@samba.org>
    Reviewed-by: Jeremy Allison <j...@samba.org>

-----------------------------------------------------------------------

Summary of changes:
 lib/async_req/async_sock.c           | 31 ++++++++------
 lib/async_req/async_sock.h           |  7 +++-
 lib/util/util.c                      | 33 +++------------
 lib/util/util_runcmd.c               |  4 +-
 libcli/security/secacl.c             |  8 ++--
 libcli/security/secacl.h             |  8 ++--
 librpc/rpc/binding.c                 | 10 +++--
 librpc/rpc/dcesrv_core.c             | 29 ++++++-------
 source3/lib/util_nttoken.c           |  2 +-
 source3/libsmb/libsmb_xattr.c        | 81 ++++++++++++++++++------------------
 source3/modules/vfs_glusterfs.c      | 10 +----
 source3/smbd/reply.c                 |  9 +---
 source3/utils/sharesec.c             | 24 +++++------
 source3/utils/smbcacls.c             | 69 +++++++++++++++---------------
 source4/rpc_server/dcerpc_server.c   |  2 +-
 source4/rpc_server/service_rpc.c     |  2 +-
 source4/torture/rpc/spoolss_notify.c |  4 +-
 17 files changed, 159 insertions(+), 174 deletions(-)


Changeset truncated at 500 lines:

diff --git a/lib/async_req/async_sock.c b/lib/async_req/async_sock.c
index 85ec148191e..3035aaaf623 100644
--- a/lib/async_req/async_sock.c
+++ b/lib/async_req/async_sock.c
@@ -28,6 +28,7 @@
 #include <tevent.h>
 #include "lib/async_req/async_sock.h"
 #include "lib/util/iov_buf.h"
+#include "lib/util/util_net.h"
 
 /* Note: lib/util/ is currently GPL */
 #include "lib/util/tevent_unix.h"
@@ -704,8 +705,7 @@ bool wait_for_read_recv(struct tevent_req *req, int *perr)
 struct accept_state {
        struct tevent_fd *fde;
        int listen_sock;
-       socklen_t addrlen;
-       struct sockaddr_storage addr;
+       struct samba_sockaddr addr;
        int sock;
 };
 
@@ -747,10 +747,12 @@ static void accept_handler(struct tevent_context *ev, 
struct tevent_fd *fde,
                tevent_req_error(req, EIO);
                return;
        }
-       state->addrlen = sizeof(state->addr);
 
-       ret = accept(state->listen_sock, (struct sockaddr *)&state->addr,
-                    &state->addrlen);
+       state->addr.sa_socklen = sizeof(state->addr.u);
+
+       ret = accept(state->listen_sock,
+                    &state->addr.u.sa,
+                    &state->addr.sa_socklen);
        if ((ret == -1) && (errno == EINTR)) {
                /* retry */
                return;
@@ -764,23 +766,28 @@ static void accept_handler(struct tevent_context *ev, 
struct tevent_fd *fde,
        tevent_req_done(req);
 }
 
-int accept_recv(struct tevent_req *req, struct sockaddr_storage *paddr,
-               socklen_t *paddrlen, int *perr)
+int accept_recv(struct tevent_req *req,
+               int *listen_sock,
+               struct samba_sockaddr *paddr,
+               int *perr)
 {
        struct accept_state *state = tevent_req_data(req, struct accept_state);
+       int sock = state->sock;
        int err;
 
        if (tevent_req_is_unix_error(req, &err)) {
                if (perr != NULL) {
                        *perr = err;
                }
+               tevent_req_received(req);
                return -1;
        }
-       if (paddr != NULL) {
-               memcpy(paddr, &state->addr, state->addrlen);
+       if (listen_sock != NULL) {
+               *listen_sock = state->listen_sock;
        }
-       if (paddrlen != NULL) {
-               *paddrlen = state->addrlen;
+       if (paddr != NULL) {
+               *paddr = state->addr;
        }
-       return state->sock;
+       tevent_req_received(req);
+       return sock;
 }
diff --git a/lib/async_req/async_sock.h b/lib/async_req/async_sock.h
index 9cc052e253b..780195e3725 100644
--- a/lib/async_req/async_sock.h
+++ b/lib/async_req/async_sock.h
@@ -57,9 +57,12 @@ struct tevent_req *wait_for_read_send(TALLOC_CTX *mem_ctx,
                                      bool check_errors);
 bool wait_for_read_recv(struct tevent_req *req, int *perr);
 
+struct samba_sockaddr;
 struct tevent_req *accept_send(TALLOC_CTX *mem_ctx, struct tevent_context *ev,
                               int listen_sock);
-int accept_recv(struct tevent_req *req, struct sockaddr_storage *paddr,
-               socklen_t *paddrlen, int *perr);
+int accept_recv(struct tevent_req *req,
+               int *listen_sock,
+               struct samba_sockaddr *paddr,
+               int *perr);
 
 #endif
diff --git a/lib/util/util.c b/lib/util/util.c
index 3ca6b61df32..57f19aaa1a1 100644
--- a/lib/util/util.c
+++ b/lib/util/util.c
@@ -879,42 +879,21 @@ _PUBLIC_ size_t strhex_to_str(char *p, size_t p_len, 
const char *strhex, size_t
 {
        size_t i = 0;
        size_t num_chars = 0;
-       uint8_t   lonybble, hinybble;
-       const char     *hexchars = "0123456789ABCDEF";
-       char           *p1 = NULL, *p2 = NULL;
 
        /* skip leading 0x prefix */
        if (strncasecmp(strhex, "0x", 2) == 0) {
                i += 2; /* skip two chars */
        }
 
-       for (; i+1 < strhex_len && strhex[i] != 0 && strhex[i+1] != 0; i++) {
-               p1 = strchr(hexchars, toupper((unsigned char)strhex[i]));
-               if (p1 == NULL) {
+       while ((i < strhex_len) && (num_chars < p_len)) {
+               bool ok = hex_byte(&strhex[i], (uint8_t *)&p[num_chars]);
+               if (!ok) {
                        break;
                }
-
-               i++; /* next hex digit */
-
-               p2 = strchr(hexchars, toupper((unsigned char)strhex[i]));
-               if (p2 == NULL) {
-                       break;
-               }
-
-               /* get the two nybbles */
-               hinybble = PTR_DIFF(p1, hexchars);
-               lonybble = PTR_DIFF(p2, hexchars);
-
-               if (num_chars >= p_len) {
-                       break;
-               }
-
-               p[num_chars] = (hinybble << 4) | lonybble;
-               num_chars++;
-
-               p1 = NULL;
-               p2 = NULL;
+               i += 2;
+               num_chars += 1;
        }
+
        return num_chars;
 }
 
diff --git a/lib/util/util_runcmd.c b/lib/util/util_runcmd.c
index 3bb4cd83f68..ce2db35d223 100644
--- a/lib/util/util_runcmd.c
+++ b/lib/util/util_runcmd.c
@@ -25,9 +25,11 @@
   log
  */
 
-#include "includes.h"
+#include "replace.h"
 #include "system/filesys.h"
 #include <tevent.h>
+#include "lib/util/samba_util.h"
+#include "lib/util/debug.h"
 #include "../lib/util/tevent_unix.h"
 #include "../lib/util/tfork.h"
 #include "../lib/util/sys_rw.h"
diff --git a/libcli/security/secacl.c b/libcli/security/secacl.c
index b90e3ae2d4a..a367ab676d2 100644
--- a/libcli/security/secacl.c
+++ b/libcli/security/secacl.c
@@ -31,9 +31,11 @@
  Create a SEC_ACL structure.
 ********************************************************************/
 
-struct security_acl *make_sec_acl(TALLOC_CTX *ctx,
-                                 enum security_acl_revision revision,
-                                 int num_aces, struct security_ace *ace_list)
+struct security_acl *make_sec_acl(
+       TALLOC_CTX *ctx,
+       enum security_acl_revision revision,
+       int num_aces,
+       const struct security_ace *ace_list)
 {
        struct security_acl *dst;
        int i;
diff --git a/libcli/security/secacl.h b/libcli/security/secacl.h
index c58d2c47fc3..961e2b4d891 100644
--- a/libcli/security/secacl.h
+++ b/libcli/security/secacl.h
@@ -23,9 +23,11 @@
 
 #include "librpc/gen_ndr/security.h"
 
-struct security_acl *make_sec_acl(TALLOC_CTX *ctx, enum security_acl_revision 
revision,
-                     int num_aces, struct security_ace *ace_list);
-
+struct security_acl *make_sec_acl(
+       TALLOC_CTX *ctx,
+       enum security_acl_revision revision,
+       int num_aces,
+       const struct security_ace *ace_list);
 
 #endif /*_SECACL_H_*/
 
diff --git a/librpc/rpc/binding.c b/librpc/rpc/binding.c
index 29be6ae16b2..80ab1a45134 100644
--- a/librpc/rpc/binding.c
+++ b/librpc/rpc/binding.c
@@ -137,7 +137,7 @@ const char *epm_floor_string(TALLOC_CTX *mem_ctx, struct 
epm_floor *epm_floor)
                        status = dcerpc_floor_get_lhs_data(epm_floor, &syntax);
                        if (NT_STATUS_IS_OK(status)) {
                                /* lhs is used: UUID */
-                               char *uuidstr;
+                               struct GUID_txt_buf buf;
 
                                if (GUID_equal(&syntax.uuid, 
&ndr_transfer_syntax_ndr.uuid)) {
                                        return "NDR";
@@ -147,9 +147,11 @@ const char *epm_floor_string(TALLOC_CTX *mem_ctx, struct 
epm_floor *epm_floor)
                                        return "NDR64";
                                } 
 
-                               uuidstr = GUID_string(mem_ctx, &syntax.uuid);
-
-                               return talloc_asprintf(mem_ctx, " uuid 
%s/0x%02x", uuidstr, syntax.if_version);
+                               return talloc_asprintf(
+                                       mem_ctx,
+                                       " uuid %s/0x%02x",
+                                       GUID_buf_string(&syntax.uuid, &buf),
+                                       syntax.if_version);
                        } else { /* IPX */
                                return talloc_asprintf(mem_ctx, "IPX:%s", 
                                                
data_blob_hex_string_upper(mem_ctx, &epm_floor->rhs.uuid.unknown));
diff --git a/librpc/rpc/dcesrv_core.c b/librpc/rpc/dcesrv_core.c
index 06f6c4b2382..a413359d985 100644
--- a/librpc/rpc/dcesrv_core.c
+++ b/librpc/rpc/dcesrv_core.c
@@ -162,7 +162,7 @@ _PUBLIC_ const struct dcesrv_interface 
*find_interface_by_uuid(const struct dces
 }
 
 /*
-  find the earlier parts of a fragmented call awaiting reassembily
+  find the earlier parts of a fragmented call awaiting reassembly
 */
 static struct dcesrv_call_state *dcesrv_find_fragmented_call(struct 
dcesrv_connection *dce_conn, uint32_t call_id)
 {
@@ -920,6 +920,7 @@ static void dcesrv_bind_done(struct tevent_req *subreq);
 static NTSTATUS dcesrv_bind(struct dcesrv_call_state *call)
 {
        struct dcesrv_connection *conn = call->conn;
+       struct dcesrv_context *dce_ctx = conn->dce_ctx;
        struct ncacn_packet *pkt = &call->ack_pkt;
        NTSTATUS status;
        uint32_t extra_flags = 0;
@@ -958,15 +959,15 @@ static NTSTATUS dcesrv_bind(struct dcesrv_call_state 
*call)
         * via ncacn_ip_tcp on port 135.
         */
        max_req = MAX(2048, max_req);
-       max_rep = MIN(max_req, call->conn->max_recv_frag);
+       max_rep = MIN(max_req, conn->max_recv_frag);
        /* They are truncated to an 8 byte boundary. */
        max_rep &= 0xFFF8;
 
        /* max_recv_frag and max_xmit_frag result always in the same value! */
-       call->conn->max_recv_frag = max_rep;
-       call->conn->max_xmit_frag = max_rep;
+       conn->max_recv_frag = max_rep;
+       conn->max_xmit_frag = max_rep;
 
-       status = call->conn->dce_ctx->callbacks.assoc_group.find(call);
+       status = dce_ctx->callbacks.assoc_group.find(call);
        if (!NT_STATUS_IS_OK(status)) {
                DBG_NOTICE("Failed to find assoc_group 0x%08x: %s\n",
                           call->pkt.u.bind.assoc_group_id, nt_errstr(status));
@@ -1022,7 +1023,7 @@ static NTSTATUS dcesrv_bind(struct dcesrv_call_state 
*call)
                a->result = DCERPC_BIND_ACK_RESULT_NEGOTIATE_ACK;
                a->reason.negotiate = 0;
                if (features & DCERPC_BIND_TIME_SECURITY_CONTEXT_MULTIPLEXING) {
-                       if (call->conn->max_auth_states != 0) {
+                       if (conn->max_auth_states != 0) {
                                a->reason.negotiate |=
                                DCERPC_BIND_TIME_SECURITY_CONTEXT_MULTIPLEXING;
                        }
@@ -1032,7 +1033,7 @@ static NTSTATUS dcesrv_bind(struct dcesrv_call_state 
*call)
                                DCERPC_BIND_TIME_KEEP_CONNECTION_ON_ORPHAN;
                }
 
-               call->conn->assoc_group->bind_time_features = 
a->reason.negotiate;
+               conn->assoc_group->bind_time_features = a->reason.negotiate;
        }
 
        /*
@@ -1070,7 +1071,7 @@ static NTSTATUS dcesrv_bind(struct dcesrv_call_state 
*call)
        }
 
        if (call->state_flags & DCESRV_CALL_STATE_FLAG_PROCESS_PENDING_CALL) {
-               call->conn->state_flags |= 
DCESRV_CALL_STATE_FLAG_PROCESS_PENDING_CALL;
+               conn->state_flags |= 
DCESRV_CALL_STATE_FLAG_PROCESS_PENDING_CALL;
        }
 
        /*
@@ -1097,18 +1098,18 @@ static NTSTATUS dcesrv_bind(struct dcesrv_call_state 
*call)
        }
 
        /* setup a bind_ack */
-       dcesrv_init_hdr(pkt, lpcfg_rpc_big_endian(call->conn->dce_ctx->lp_ctx));
+       dcesrv_init_hdr(pkt, lpcfg_rpc_big_endian(dce_ctx->lp_ctx));
        pkt->auth_length = 0;
        pkt->call_id = call->pkt.call_id;
        pkt->ptype = DCERPC_PKT_BIND_ACK;
        pkt->pfc_flags = DCERPC_PFC_FLAG_FIRST | DCERPC_PFC_FLAG_LAST | 
extra_flags;
-       pkt->u.bind_ack.max_xmit_frag = call->conn->max_xmit_frag;
-       pkt->u.bind_ack.max_recv_frag = call->conn->max_recv_frag;
-       pkt->u.bind_ack.assoc_group_id = call->conn->assoc_group->id;
+       pkt->u.bind_ack.max_xmit_frag = conn->max_xmit_frag;
+       pkt->u.bind_ack.max_recv_frag = conn->max_recv_frag;
+       pkt->u.bind_ack.assoc_group_id = conn->assoc_group->id;
 
-       ep_2nd_description = call->conn->endpoint->ep_2nd_description;
+       ep_2nd_description = conn->endpoint->ep_2nd_description;
        if (ep_2nd_description == NULL) {
-               ep_2nd_description = call->conn->endpoint->ep_description;
+               ep_2nd_description = conn->endpoint->ep_description;
        }
 
        endpoint = dcerpc_binding_get_string_option(
diff --git a/source3/lib/util_nttoken.c b/source3/lib/util_nttoken.c
index ffa858d7794..5fa513f604e 100644
--- a/source3/lib/util_nttoken.c
+++ b/source3/lib/util_nttoken.c
@@ -74,7 +74,7 @@ NTSTATUS merge_nt_token(TALLOC_CTX *mem_ctx,
 {
        struct security_token *token = NULL;
        NTSTATUS status;
-       int i;
+       uint32_t i;
 
        if (!token_1 || !token_2 || !token_out) {
                return NT_STATUS_INVALID_PARAMETER;
diff --git a/source3/libsmb/libsmb_xattr.c b/source3/libsmb/libsmb_xattr.c
index 0751c65d58a..9a3a1210ea1 100644
--- a/source3/libsmb/libsmb_xattr.c
+++ b/source3/libsmb/libsmb_xattr.c
@@ -391,27 +391,24 @@ done:
 /* add an struct security_ace to a list of struct security_aces in a struct 
security_acl */
 static bool
 add_ace(struct security_acl **the_acl,
-        struct security_ace *ace,
+        const struct security_ace *ace,
         TALLOC_CTX *ctx)
 {
-       struct security_acl *newacl;
-       struct security_ace *aces;
+       struct security_acl *acl = *the_acl;
 
-       if (! *the_acl) {
-               (*the_acl) = make_sec_acl(ctx, 3, 1, ace);
-               return True;
+       if (acl == NULL) {
+               acl = make_sec_acl(ctx, 3, 0, NULL);
+               if (acl == NULL) {
+                       return false;
+               }
        }
 
-       if ((aces = SMB_CALLOC_ARRAY(struct security_ace,
-                                     1+(*the_acl)->num_aces)) == NULL) {
-               return False;
+       if (acl->num_aces == UINT32_MAX) {
+               return false;
        }
-       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);
-       (*the_acl) = newacl;
+       ADD_TO_ARRAY(
+               acl, struct security_ace, *ace, &acl->aces, &acl->num_aces);
+       *the_acl = acl;
        return True;
 }
 
@@ -428,8 +425,9 @@ sec_desc_parse(TALLOC_CTX *ctx,
        char *tok;
        struct security_descriptor *ret = NULL;
        size_t sd_size;
-       struct dom_sid *group_sid=NULL;
-        struct dom_sid *owner_sid=NULL;
+       struct dom_sid owner_sid = { .num_auths = 0 };
+       struct dom_sid group_sid = { .num_auths = 0 };
+       bool have_owner = false, have_group = false;
        struct security_acl *dacl=NULL;
        int revision=1;
 
@@ -441,66 +439,62 @@ sec_desc_parse(TALLOC_CTX *ctx,
                }
 
                if (strncasecmp_m(tok,"OWNER:", 6) == 0) {
-                       if (owner_sid) {
+                       if (have_owner) {
                                DEBUG(5,("OWNER specified more than once!\n"));
                                goto done;
                        }
-                       owner_sid = SMB_CALLOC_ARRAY(struct dom_sid, 1);
-                       if (!owner_sid ||
-                           !convert_string_to_sid(ipc_cli, pol,
+                       if (!convert_string_to_sid(ipc_cli, pol,
                                                    numeric,
-                                                   owner_sid, tok+6)) {
+                                                   &owner_sid, tok+6)) {
                                DEBUG(5, ("Failed to parse owner sid\n"));
                                goto done;
                        }
+                       have_owner = true;
                        continue;
                }
 
                if (strncasecmp_m(tok,"OWNER+:", 7) == 0) {
-                       if (owner_sid) {
+                       if (have_owner) {
                                DEBUG(5,("OWNER specified more than once!\n"));
                                goto done;
                        }
-                       owner_sid = SMB_CALLOC_ARRAY(struct dom_sid, 1);
-                       if (!owner_sid ||
-                           !convert_string_to_sid(ipc_cli, pol,
+                       if (!convert_string_to_sid(ipc_cli, pol,
                                                    False,
-                                                   owner_sid, tok+7)) {
+                                                   &owner_sid, tok+7)) {
                                DEBUG(5, ("Failed to parse owner sid\n"));
                                goto done;
                        }
+                       have_owner = true;
                        continue;
                }
 
                if (strncasecmp_m(tok,"GROUP:", 6) == 0) {
-                       if (group_sid) {
+                       if (have_group) {
                                DEBUG(5,("GROUP specified more than once!\n"));
                                goto done;
                        }
-                       group_sid = SMB_CALLOC_ARRAY(struct dom_sid, 1);
-                       if (!group_sid ||
-                           !convert_string_to_sid(ipc_cli, pol,
+                       if (!convert_string_to_sid(ipc_cli, pol,
                                                    numeric,
-                                                   group_sid, tok+6)) {
+                                                   &group_sid, tok+6)) {
                                DEBUG(5, ("Failed to parse group sid\n"));
                                goto done;
                        }
+                       have_group = true;
                        continue;
                }
 
                if (strncasecmp_m(tok,"GROUP+:", 7) == 0) {
-                       if (group_sid) {
+                       if (have_group) {
                                DEBUG(5,("GROUP specified more than once!\n"));
                                goto done;
                        }
-                       group_sid = SMB_CALLOC_ARRAY(struct dom_sid, 1);
-                       if (!group_sid ||
-                           !convert_string_to_sid(ipc_cli, pol,
+                       if (!convert_string_to_sid(ipc_cli, pol,
                                                    False,
-                                                   group_sid, tok+6)) {
+                                                   &group_sid, tok+6)) {
                                DEBUG(5, ("Failed to parse group sid\n"));
                                goto done;
                        }
+                       have_group = true;
                        continue;
                }
 
@@ -534,12 +528,17 @@ sec_desc_parse(TALLOC_CTX *ctx,
                goto done;
        }
 
-       ret = make_sec_desc(ctx, revision, SEC_DESC_SELF_RELATIVE, 
-                           owner_sid, group_sid, NULL, dacl, &sd_size);
+       ret = make_sec_desc(
+               ctx,
+               revision,
+               SEC_DESC_SELF_RELATIVE,
+               have_owner ? &owner_sid : NULL,
+               have_group ? &group_sid : NULL,
+               NULL,
+               dacl,
+               &sd_size);
 
 done:
-       SAFE_FREE(group_sid);
-       SAFE_FREE(owner_sid);
        return ret;
 }
 
diff --git a/source3/modules/vfs_glusterfs.c b/source3/modules/vfs_glusterfs.c
index 9cc27b5c352..36459bc3184 100644
--- a/source3/modules/vfs_glusterfs.c
+++ b/source3/modules/vfs_glusterfs.c


-- 
Samba Shared Repository

Reply via email to