The branch, master has been updated
       via  8a3bff343a21bc8b4c229bae5830db7462fea25f (commit)
       via  b7c38abe27e7f5a0823f8dacff51b1724426314c (commit)
       via  fafa60844151c60e02f5b50e98e2e6e973e56d1d (commit)
       via  6e058e5977c6ca4369d09338d519fdd5f1611ca6 (commit)
       via  3566efede2a77b26615ceef50b89d50c59ce7119 (commit)
       via  29737ab5da4b8fd753e455bf00e1ad2c3ae8d957 (commit)
      from  60164e9002c28911dbfd7115cb9bff05be5aff25 (commit)

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


- Log -----------------------------------------------------------------
commit 8a3bff343a21bc8b4c229bae5830db7462fea25f
Author: Günther Deschner <[EMAIL PROTECTED]>
Date:   Thu Oct 23 11:45:41 2008 +0200

    s3-build: fix another build warning with the new ASN1 code.
    
    Guenther

commit b7c38abe27e7f5a0823f8dacff51b1724426314c
Author: Günther Deschner <[EMAIL PROTECTED]>
Date:   Thu Oct 23 03:32:38 2008 +0200

    netapi: fix add_GROUP_USERS_INFO_X_buffer.
    
    Guenther

commit fafa60844151c60e02f5b50e98e2e6e973e56d1d
Author: Günther Deschner <[EMAIL PROTECTED]>
Date:   Thu Oct 23 03:32:15 2008 +0200

    netapi: fix NetUserGetGroups_r returning partial results.
    
    Guenther

commit 6e058e5977c6ca4369d09338d519fdd5f1611ca6
Author: Günther Deschner <[EMAIL PROTECTED]>
Date:   Thu Oct 23 03:31:32 2008 +0200

    s3-samr-server: unify callback convention: _samr_UserSetInfo.
    
    Guenther

commit 3566efede2a77b26615ceef50b89d50c59ce7119
Author: Günther Deschner <[EMAIL PROTECTED]>
Date:   Thu Oct 23 03:30:58 2008 +0200

    s3-samr-server: unify callback convention: _samr_QueryDomainInfo.
    
    Guenther

commit 29737ab5da4b8fd753e455bf00e1ad2c3ae8d957
Author: Günther Deschner <[EMAIL PROTECTED]>
Date:   Thu Oct 23 03:30:14 2008 +0200

    s3-samr-server: fix return code in _samr_QueryDisplayInformation.
    
    Guenther

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

Summary of changes:
 source3/lib/netapi/user.c        |   21 +++++--
 source3/libsmb/spnego.c          |    7 ++-
 source3/rpc_server/srv_samr_nt.c |  105 ++++++++++++++------------------------
 3 files changed, 58 insertions(+), 75 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/lib/netapi/user.c b/source3/lib/netapi/user.c
index fcb87b7..2abc25d 100644
--- a/source3/lib/netapi/user.c
+++ b/source3/lib/netapi/user.c
@@ -2787,15 +2787,23 @@ NTSTATUS add_GROUP_USERS_INFO_X_buffer(TALLOC_CTX 
*mem_ctx,
 
        switch (level) {
                case 0:
-                       u0.grui0_name = talloc_strdup(mem_ctx, group_name);
-                       NT_STATUS_HAVE_NO_MEMORY(u0.grui0_name);
+                       if (group_name) {
+                               u0.grui0_name = talloc_strdup(mem_ctx, 
group_name);
+                               NT_STATUS_HAVE_NO_MEMORY(u0.grui0_name);
+                       } else {
+                               u0.grui0_name = NULL;
+                       }
 
                        ADD_TO_ARRAY(mem_ctx, struct GROUP_USERS_INFO_0, u0,
                                     (struct GROUP_USERS_INFO_0 **)buffer, 
num_entries);
                        break;
                case 1:
-                       u1.grui1_name = talloc_strdup(mem_ctx, group_name);
-                       NT_STATUS_HAVE_NO_MEMORY(u1.grui1_name);
+                       if (group_name) {
+                               u1.grui1_name = talloc_strdup(mem_ctx, 
group_name);
+                               NT_STATUS_HAVE_NO_MEMORY(u1.grui1_name);
+                       } else {
+                               u1.grui1_name = NULL;
+                       }
 
                        u1.grui1_attributes = attributes;
 
@@ -2916,12 +2924,13 @@ WERROR NetUserGetGroups_r(struct libnetapi_ctx *ctx,
                                        rids,
                                        &names,
                                        &types);
-       if (!NT_STATUS_IS_OK(status)) {
+       if (!NT_STATUS_IS_OK(status) &&
+           !NT_STATUS_EQUAL(status, STATUS_SOME_UNMAPPED)) {
                werr = ntstatus_to_werror(status);
                goto done;
        }
 
-       for (i=0; i < rid_array->count; i++) {
+       for (i=0; i < names.count; i++) {
                status = add_GROUP_USERS_INFO_X_buffer(ctx,
                                                       r->in.level,
                                                       names.names[i].string,
diff --git a/source3/libsmb/spnego.c b/source3/libsmb/spnego.c
index 72559cd..ee2c3c3 100644
--- a/source3/libsmb/spnego.c
+++ b/source3/libsmb/spnego.c
@@ -185,10 +185,13 @@ static bool read_negTokenTarg(ASN1_DATA *asn1, 
negTokenTarg_t *token)
                        asn1_end_tag(asn1);
                        asn1_end_tag(asn1);
                        break;
-               case ASN1_CONTEXT(1):
+               case ASN1_CONTEXT(1): {
+                       const char *mech = NULL;
                        asn1_start_tag(asn1, ASN1_CONTEXT(1));
-                       asn1_read_OID(asn1, NULL, &token->supportedMech);
+                       asn1_read_OID(asn1, NULL, &mech);
                        asn1_end_tag(asn1);
+                       token->supportedMech = CONST_DISCARD(char *, mech);
+                       }
                        break;
                case ASN1_CONTEXT(2):
                        asn1_start_tag(asn1, ASN1_CONTEXT(2));
diff --git a/source3/rpc_server/srv_samr_nt.c b/source3/rpc_server/srv_samr_nt.c
index 36be832..0f82675 100644
--- a/source3/rpc_server/srv_samr_nt.c
+++ b/source3/rpc_server/srv_samr_nt.c
@@ -1647,7 +1647,7 @@ NTSTATUS _samr_QueryDisplayInfo(pipes_struct *p,
        /* calculate the total size */
        total_data_size=num_account*struct_size;
 
-       if (num_account) {
+       if (max_entries <= num_account) {
                status = STATUS_MORE_ENTRIES;
        } else {
                status = NT_STATUS_OK;
@@ -2910,14 +2910,11 @@ NTSTATUS _samr_GetGroupsForUser(pipes_struct *p,
 }
 
 /*******************************************************************
- samr_QueryDomainInfo_internal
+ _samr_QueryDomainInfo
  ********************************************************************/
 
-static NTSTATUS samr_QueryDomainInfo_internal(const char *fn_name,
-                                             pipes_struct *p,
-                                             struct policy_handle *handle,
-                                             uint32_t level,
-                                             union samr_DomainInfo 
**dom_info_ptr)
+NTSTATUS _samr_QueryDomainInfo(pipes_struct *p,
+                              struct samr_QueryDomainInfo *r)
 {
        NTSTATUS status = NT_STATUS_OK;
        struct samr_info *info = NULL;
@@ -2939,28 +2936,26 @@ static NTSTATUS samr_QueryDomainInfo_internal(const 
char *fn_name,
 
        uint32 num_users=0, num_groups=0, num_aliases=0;
 
-       DEBUG(5,("%s: %d\n", fn_name, __LINE__));
+       DEBUG(5,("_samr_QueryDomainInfo: %d\n", __LINE__));
 
        dom_info = TALLOC_ZERO_P(p->mem_ctx, union samr_DomainInfo);
        if (!dom_info) {
                return NT_STATUS_NO_MEMORY;
        }
 
-       *dom_info_ptr = dom_info;
-
        /* find the policy handle.  open a policy on it. */
-       if (!find_policy_by_hnd(p, handle, (void **)(void *)&info)) {
+       if (!find_policy_by_hnd(p, r->in.domain_handle, (void **)(void 
*)&info)) {
                return NT_STATUS_INVALID_HANDLE;
        }
 
        status = access_check_samr_function(info->acc_granted,
                                            SA_RIGHT_SAM_OPEN_DOMAIN,
-                                           "_samr_QueryDomainInfo_internal" );
+                                           "_samr_QueryDomainInfo" );
 
        if ( !NT_STATUS_IS_OK(status) )
                return status;
 
-       switch (level) {
+       switch (r->in.level) {
                case 0x01:
 
                        become_root();
@@ -3136,23 +3131,11 @@ static NTSTATUS samr_QueryDomainInfo_internal(const 
char *fn_name,
                        return NT_STATUS_INVALID_INFO_CLASS;
        }
 
-       DEBUG(5,("%s: %d\n", fn_name, __LINE__));
-
-       return status;
-}
+       *r->out.info = dom_info;
 
-/*******************************************************************
- _samr_QueryDomainInfo
- ********************************************************************/
+       DEBUG(5,("_samr_QueryDomainInfo: %d\n", __LINE__));
 
-NTSTATUS _samr_QueryDomainInfo(pipes_struct *p,
-                              struct samr_QueryDomainInfo *r)
-{
-       return samr_QueryDomainInfo_internal("_samr_QueryDomainInfo",
-                                            p,
-                                            r->in.domain_handle,
-                                            r->in.level,
-                                            r->out.info);
+       return status;
 }
 
 /* W2k3 seems to use the same check for all 3 objects that can be created via
@@ -4157,20 +4140,18 @@ static NTSTATUS set_user_info_25(TALLOC_CTX *mem_ctx,
 }
 
 /*******************************************************************
- samr_SetUserInfo_internal
+ samr_SetUserInfo
  ********************************************************************/
 
-static NTSTATUS samr_SetUserInfo_internal(const char *fn_name,
-                                         pipes_struct *p,
-                                         struct policy_handle *user_handle,
-                                         uint16_t level,
-                                         union samr_UserInfo *info)
+NTSTATUS _samr_SetUserInfo(pipes_struct *p,
+                          struct samr_SetUserInfo *r)
 {
        NTSTATUS status;
        struct samu *pwd = NULL;
        DOM_SID sid;
-       POLICY_HND *pol = user_handle;
-       uint16_t switch_value = level;
+       POLICY_HND *pol = r->in.user_handle;
+       union samr_UserInfo *info = r->in.info;
+       uint16_t switch_value = r->in.level;
        uint32_t acc_granted;
        uint32_t acc_required;
        bool ret;
@@ -4178,7 +4159,7 @@ static NTSTATUS samr_SetUserInfo_internal(const char 
*fn_name,
        uint32_t acb_info;
        DISP_INFO *disp_info = NULL;
 
-       DEBUG(5,("%s: %d\n", fn_name, __LINE__));
+       DEBUG(5,("_samr_SetUserInfo: %d\n", __LINE__));
 
        /* find the policy handle.  open a policy on it. */
        if (!get_lsa_policy_samr_sid(p, pol, &sid, &acc_granted, &disp_info)) {
@@ -4208,16 +4189,16 @@ static NTSTATUS samr_SetUserInfo_internal(const char 
*fn_name,
 
        status = access_check_samr_function(acc_granted,
                                            acc_required,
-                                           fn_name);
+                                           "_samr_SetUserInfo");
        if (!NT_STATUS_IS_OK(status)) {
                return status;
        }
 
-       DEBUG(5, ("%s: sid:%s, level:%d\n",
-                 fn_name, sid_string_dbg(&sid), switch_value));
+       DEBUG(5, ("_samr_SetUserInfo: sid:%s, level:%d\n",
+                 sid_string_dbg(&sid), switch_value));
 
        if (info == NULL) {
-               DEBUG(5, ("%s: NULL info level\n", fn_name));
+               DEBUG(5, ("_samr_SetUserInfo: NULL info level\n"));
                return NT_STATUS_INVALID_INFO_CLASS;
        }
 
@@ -4251,8 +4232,7 @@ static NTSTATUS samr_SetUserInfo_internal(const char 
*fn_name,
                }
        }
 
-       DEBUG(5, ("%s: %s does%s possess sufficient rights\n",
-                 fn_name,
+       DEBUG(5, ("_samr_SetUserInfo: %s does%s possess sufficient rights\n",
                  uidtoname(p->pipe_user.ut.uid),
                  has_enough_rights ? "" : " not"));
 
@@ -4381,31 +4361,19 @@ static NTSTATUS samr_SetUserInfo_internal(const char 
*fn_name,
 }
 
 /*******************************************************************
- _samr_SetUserInfo
- ********************************************************************/
-
-NTSTATUS _samr_SetUserInfo(pipes_struct *p,
-                          struct samr_SetUserInfo *r)
-{
-       return samr_SetUserInfo_internal("_samr_SetUserInfo",
-                                        p,
-                                        r->in.user_handle,
-                                        r->in.level,
-                                        r->in.info);
-}
-
-/*******************************************************************
  _samr_SetUserInfo2
  ********************************************************************/
 
 NTSTATUS _samr_SetUserInfo2(pipes_struct *p,
                            struct samr_SetUserInfo2 *r)
 {
-       return samr_SetUserInfo_internal("_samr_SetUserInfo2",
-                                        p,
-                                        r->in.user_handle,
-                                        r->in.level,
-                                        r->in.info);
+       struct samr_SetUserInfo q;
+
+       q.in.user_handle        = r->in.user_handle;
+       q.in.level              = r->in.level;
+       q.in.info               = r->in.info;
+
+       return _samr_SetUserInfo(p, &q);
 }
 
 /*********************************************************************
@@ -5682,11 +5650,14 @@ NTSTATUS 
_samr_RemoveMemberFromForeignDomain(pipes_struct *p,
 NTSTATUS _samr_QueryDomainInfo2(pipes_struct *p,
                                struct samr_QueryDomainInfo2 *r)
 {
-       return samr_QueryDomainInfo_internal("_samr_QueryDomainInfo2",
-                                            p,
-                                            r->in.domain_handle,
-                                            r->in.level,
-                                            r->out.info);
+       struct samr_QueryDomainInfo q;
+
+       q.in.domain_handle      = r->in.domain_handle;
+       q.in.level              = r->in.level;
+
+       q.out.info              = r->out.info;
+
+       return _samr_QueryDomainInfo(p, &q);
 }
 
 /*******************************************************************


-- 
Samba Shared Repository

Reply via email to