The branch, v3-4-stable has been updated
       via  22c2bb5f8db06656e3fc74d3f1ba226c1e5c824c (commit)
       via  d834a29ac59f3634392b0ab1e39a2b5ca0b527d2 (commit)
       via  a8e6233b080c80b4fdcc57f0bfd0e1453253fcbb (commit)
       via  210cda9cdb7248addd827a8a1f7126cf7e8637ab (commit)
       via  9a899b5542dc38b6fc501f6264abcadd2ecbea8a (commit)
       via  ec864a5b008ba68ec3bffe489fd9776fc133c225 (commit)
      from  83f80b73bffc790613b6fdfaf09b29cb0bfbdc33 (commit)

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-4-stable


- Log -----------------------------------------------------------------
commit 22c2bb5f8db06656e3fc74d3f1ba226c1e5c824c
Author: Karolin Seeger <ksee...@samba.org>
Date:   Thu Sep 3 09:38:00 2009 +0200

    WHATSNEW: Update changes since 3.4.0.
    
    Karolin
    (cherry picked from commit a0f2336ed6f5adb29d636eb880b0f6cd6cfc70f3)

commit d834a29ac59f3634392b0ab1e39a2b5ca0b527d2
Author: Günther Deschner <g...@samba.org>
Date:   Wed Jun 24 00:33:44 2009 +0200

    s3-pdb_ldap: Fix bug #4296: Clean up group membership while deleting a user.
    
    Note that this only is tried with editposix=yes.
    
    Guenther
    (cherry picked from commit 272e389ff63d929fc6b06305e00fa042d71dbec0)

commit a8e6233b080c80b4fdcc57f0bfd0e1453253fcbb
Author: Volker Lendecke <v...@samba.org>
Date:   Thu Apr 23 14:23:23 2009 +0200

    Fix an uninitialized variable
    
    Fix bug #6684.
    
    (cherry picked from commit b8cd1cff2dfad726cf6dab368dfcc31a29952889)
    (cherry picked from commit 050ded0624a49f2ffb53dcd88a93fd1d8c17595e)

commit 210cda9cdb7248addd827a8a1f7126cf7e8637ab
Author: Volker Lendecke <v...@samba.org>
Date:   Sun Aug 30 11:39:41 2009 +0200

    s3:libwbclient: Fix bug 6349, initialize domain info struct
    (cherry picked from commit e1a50994800ce311925214254c0a471a9f32c1f7)

commit 9a899b5542dc38b6fc501f6264abcadd2ecbea8a
Author: Simo Sorce <i...@samba.org>
Date:   Sat Aug 29 19:31:02 2009 -0400

    s3-smbpasswd: Fix Bug #6584: allow DOM\user when changing passwords 
remotely.
    
    Signed-off-by: Günther Deschner <g...@samba.org>
    (cherry picked from commit 8cb103372be4eb3232e5e13b67f63562e5506c7e)

commit ec864a5b008ba68ec3bffe489fd9776fc133c225
Author: Günther Deschner <g...@samba.org>
Date:   Tue Sep 1 11:58:05 2009 +0200

    wbclient: Fix Bug #6680: always activate handling of large (> 256 byte) 
ntlmv2 blobs in wbcAuthenticateUserEx().
    
    Guenther
    (cherry picked from commit dadc57b140b4379f9f2f6fafe40332061df4d5a5)

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

Summary of changes:
 WHATSNEW.txt                    |    4 +++
 nsswitch/libwbclient/wbc_pam.c  |   19 ++++++++++++---
 nsswitch/libwbclient/wbc_util.c |    2 +
 source3/libnet/libnet_dssync.c  |    2 +
 source3/libsmb/passchange.c     |   19 +++++++++++++--
 source3/passdb/pdb_ldap.c       |   46 +++++++++++++++++++++++++++++++++++++++
 6 files changed, 85 insertions(+), 7 deletions(-)


Changeset truncated at 500 lines:

diff --git a/WHATSNEW.txt b/WHATSNEW.txt
index 6c131a8..9dd59f5 100644
--- a/WHATSNEW.txt
+++ b/WHATSNEW.txt
@@ -44,6 +44,7 @@ o   Yannick Bergeron <burgerg...@hotmail.com>
 o   Günther Deschner <g...@samba.org>
     * BUG 6568: Fix _spoolss_GetPrintProcessorDirectory() implementation.
     * BUG 6607: Fix crash bug in spoolss_addprinterex_level_2.
+    * BUG 6680: Fix authentication failure from Windows 7 when domain joined.
 
 
 o   Olaf Flebbe <fle...@nix.science-computing.de>
@@ -372,6 +373,7 @@ o   Jeremy Allison <j...@samba.org>
 
 
 o   Günther Deschner <g...@samba.org>
+    * BUG 4296: Clean up group membership while deleting a user.
     * BUG 5456: Fix "net ads testjoin".
     * BUG 6253: Use correct value for password expiry calculation in
       pam_winbind.
@@ -383,6 +385,7 @@ o   Günther Deschner <g...@samba.org>
 
 o   Volker Lendecke <v...@samba.org>
     * BUG 4699: Remove pidfile on clean shutdown.
+    * BUG 6349: Initialize domain info struct.
     * BUG 6449: 'net rap user add' crashes without -C option.
 
 
@@ -398,6 +401,7 @@ o   Andreas Schneider <m...@cynapses.org>
 o   Simo Sorce <i...@samba.org>
     * BUG 6081: Make it possible to change machine account sids.
     * BUG 6333: Consolidate create/delete account paths in pdbedit.
+    * BUG 6584: Allow DOM\user when changing passwords remotely.
 
 
 o   Jelmer Vernooij <jel...@samba.org>
diff --git a/nsswitch/libwbclient/wbc_pam.c b/nsswitch/libwbclient/wbc_pam.c
index 61ce2a1..422665a 100644
--- a/nsswitch/libwbclient/wbc_pam.c
+++ b/nsswitch/libwbclient/wbc_pam.c
@@ -423,15 +423,24 @@ wbcErr wbcAuthenticateUserEx(const struct 
wbcAuthUserParams *params,
                request.data.auth_crap.lm_resp_len =
                                MIN(params->password.response.lm_length,
                                    sizeof(request.data.auth_crap.lm_resp));
-               request.data.auth_crap.nt_resp_len =
-                               MIN(params->password.response.nt_length,
-                                   sizeof(request.data.auth_crap.nt_resp));
                if (params->password.response.lm_data) {
                        memcpy(request.data.auth_crap.lm_resp,
                               params->password.response.lm_data,
                               request.data.auth_crap.lm_resp_len);
                }
-               if (params->password.response.nt_data) {
+               request.data.auth_crap.nt_resp_len = 
params->password.response.nt_length;
+               if (params->password.response.nt_length > 
sizeof(request.data.auth_crap.nt_resp)) {
+                       request.flags |= WBFLAG_BIG_NTLMV2_BLOB;
+                       request.extra_len = params->password.response.nt_length;
+                       request.extra_data.data = talloc_zero_array(NULL, char, 
request.extra_len);
+                       if (request.extra_data.data == NULL) {
+                               wbc_status = WBC_ERR_NO_MEMORY;
+                               BAIL_ON_WBC_ERROR(wbc_status);
+                       }
+                       memcpy(request.extra_data.data,
+                              params->password.response.nt_data,
+                              request.data.auth_crap.nt_resp_len);
+               } else if (params->password.response.nt_data) {
                        memcpy(request.data.auth_crap.nt_resp,
                               params->password.response.nt_data,
                               request.data.auth_crap.nt_resp_len);
@@ -477,6 +486,8 @@ done:
        if (response.extra_data.data)
                free(response.extra_data.data);
 
+       talloc_free(request.extra_data.data);
+
        return wbc_status;
 }
 
diff --git a/nsswitch/libwbclient/wbc_util.c b/nsswitch/libwbclient/wbc_util.c
index 5c5034e..c39023f 100644
--- a/nsswitch/libwbclient/wbc_util.c
+++ b/nsswitch/libwbclient/wbc_util.c
@@ -262,6 +262,8 @@ static wbcErr process_domain_info_string(TALLOC_CTX *ctx,
                BAIL_ON_WBC_ERROR(wbc_status);
        }
 
+       ZERO_STRUCTP(info);
+
        r = info_string;
 
        /* Short Name */
diff --git a/source3/libnet/libnet_dssync.c b/source3/libnet/libnet_dssync.c
index 746b096..ce6ad58 100644
--- a/source3/libnet/libnet_dssync.c
+++ b/source3/libnet/libnet_dssync.c
@@ -667,6 +667,8 @@ static NTSTATUS libnet_dssync_process(TALLOC_CTX *mem_ctx,
                dn_count = 1;
        }
 
+       status = NT_STATUS_OK;
+
        for (count=0; count < dn_count; count++) {
                status = libnet_dssync_build_request(mem_ctx, ctx,
                                                     dns[count],
diff --git a/source3/libsmb/passchange.c b/source3/libsmb/passchange.c
index 7f0389f..f3cb9d6 100644
--- a/source3/libsmb/passchange.c
+++ b/source3/libsmb/passchange.c
@@ -31,10 +31,24 @@ NTSTATUS remote_password_change(const char *remote_machine, 
const char *user_nam
        struct cli_state *cli;
        struct rpc_pipe_client *pipe_hnd;
        struct sockaddr_storage ss;
+       char *user, *domain, *p;
 
        NTSTATUS result;
        bool pass_must_change = False;
 
+       user = talloc_strdup(talloc_tos(), user_name);
+       SMB_ASSERT(user != NULL);
+       domain = talloc_strdup(talloc_tos(), "");
+       SMB_ASSERT(domain != NULL);
+
+       /* allow usernames of the form domain\\user or domain/user */
+       if ((p = strchr_m(user,'\\')) || (p = strchr_m(user,'/')) ||
+           (p = strchr_m(user,*lp_winbind_separator()))) {
+               *p = 0;
+               domain = user;
+               user = p+1;
+       }
+
        *err_str = NULL;
 
        if(!resolve_name( remote_machine, &ss, 0x20)) {
@@ -139,7 +153,7 @@ NTSTATUS remote_password_change(const char *remote_machine, 
const char *user_nam
                        return result;
                }
        } else {
-               result = cli_init_creds(cli, user_name, "", old_passwd);
+               result = cli_init_creds(cli, user, domain, old_passwd);
                if (!NT_STATUS_IS_OK(result)) {
                        cli_shutdown(cli);
                        return result;
@@ -163,8 +177,7 @@ NTSTATUS remote_password_change(const char *remote_machine, 
const char *user_nam
                result = cli_rpc_pipe_open_ntlmssp(cli,
                                                   &ndr_table_samr.syntax_id,
                                                   PIPE_AUTH_LEVEL_PRIVACY,
-                                                  "", /* what domain... ? */
-                                                  user_name,
+                                                  domain, user,
                                                   old_passwd,
                                                   &pipe_hnd);
        } else {
diff --git a/source3/passdb/pdb_ldap.c b/source3/passdb/pdb_ldap.c
index cf4889b..71d4030 100644
--- a/source3/passdb/pdb_ldap.c
+++ b/source3/passdb/pdb_ldap.c
@@ -5187,6 +5187,18 @@ static NTSTATUS ldapsam_create_user(struct pdb_methods 
*my_methods,
        return NT_STATUS_OK;
 }
 
+static NTSTATUS ldapsam_del_groupmem(struct pdb_methods *my_methods,
+                                    TALLOC_CTX *tmp_ctx,
+                                    uint32 group_rid,
+                                    uint32 member_rid);
+
+static NTSTATUS ldapsam_enum_group_memberships(struct pdb_methods *methods,
+                                              TALLOC_CTX *mem_ctx,
+                                              struct samu *user,
+                                              DOM_SID **pp_sids,
+                                              gid_t **pp_gids,
+                                              size_t *p_num_groups);
+
 static NTSTATUS ldapsam_delete_user(struct pdb_methods *my_methods, TALLOC_CTX 
*tmp_ctx, struct samu *sam_acct)
 {
        struct ldapsam_privates *ldap_state = (struct ldapsam_privates 
*)my_methods->private_data;
@@ -5241,6 +5253,40 @@ static NTSTATUS ldapsam_delete_user(struct pdb_methods 
*my_methods, TALLOC_CTX *
                return NT_STATUS_NO_MEMORY;
        }
 
+       /* try to remove memberships first */
+       {
+               NTSTATUS status;
+               struct dom_sid *sids = NULL;
+               gid_t *gids = NULL;
+               size_t num_groups = 0;
+               int i;
+               uint32_t user_rid = pdb_get_user_rid(sam_acct);
+
+               status = ldapsam_enum_group_memberships(my_methods,
+                                                       tmp_ctx,
+                                                       sam_acct,
+                                                       &sids,
+                                                       &gids,
+                                                       &num_groups);
+               if (!NT_STATUS_IS_OK(status)) {
+                       goto delete_dn;
+               }
+
+               for (i=0; i < num_groups; i++) {
+
+                       uint32_t group_rid;
+
+                       sid_peek_rid(&sids[i], &group_rid);
+
+                       ldapsam_del_groupmem(my_methods,
+                                            tmp_ctx,
+                                            group_rid,
+                                            user_rid);
+               }
+       }
+
+ delete_dn:
+
        rc = smbldap_delete(ldap_state->smbldap_state, dn);
        if (rc != LDAP_SUCCESS) {
                return NT_STATUS_UNSUCCESSFUL;


-- 
Samba Shared Repository

Reply via email to