The branch, v3-4-test has been updated
       via  9acc670541031414d0cb5df39d18866c4c96b37c (commit)
      from  d53cb77ab21cc6edc2f1767bb56a75901c4c1709 (commit)

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


- Log -----------------------------------------------------------------
commit 9acc670541031414d0cb5df39d18866c4c96b37c
Author: Bo Yang <boy...@samba.org>
Date:   Thu Jul 23 10:23:21 2009 +0800

    s3: To correctly handle upn
    
    lookupname failed, cannot find domain when attempt
    to change password.
    
    This addresses bug #6560.
    
    Signed-off-by: Bo Yang <boy...@samba.org>

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

Summary of changes:
 nsswitch/pam_winbind.c           |   13 ++++++++++++-
 source3/winbindd/winbindd_sid.c  |    5 +++++
 source3/winbindd/winbindd_util.c |    3 ++-
 3 files changed, 19 insertions(+), 2 deletions(-)


Changeset truncated at 500 lines:

diff --git a/nsswitch/pam_winbind.c b/nsswitch/pam_winbind.c
index e90f1b7..4a44248 100644
--- a/nsswitch/pam_winbind.c
+++ b/nsswitch/pam_winbind.c
@@ -2284,6 +2284,7 @@ static char* winbind_upn_to_username(struct pwb_context 
*ctx,
        enum wbcSidType type;
        char *domain;
        char *name;
+       char *p;
 
        /* This cannot work when the winbind separator = @ */
 
@@ -2292,9 +2293,19 @@ static char* winbind_upn_to_username(struct pwb_context 
*ctx,
                return NULL;
        }
 
+       name = talloc_strdup(ctx, upn);
+       if (!name) {
+               return NULL;
+       }
+
+       if ((p = strchr(name, '@')) != NULL) {
+               *p = 0;
+               domain = p + 1;
+       }
+
        /* Convert the UPN to a SID */
 
-       wbc_status = wbcLookupName("", upn, &sid, &type);
+       wbc_status = wbcLookupName(domain, name, &sid, &type);
        if (!WBC_ERROR_IS_OK(wbc_status)) {
                return NULL;
        }
diff --git a/source3/winbindd/winbindd_sid.c b/source3/winbindd/winbindd_sid.c
index 641b18e..b0f2c72 100644
--- a/source3/winbindd/winbindd_sid.c
+++ b/source3/winbindd/winbindd_sid.c
@@ -93,6 +93,11 @@ void winbindd_lookupname(struct winbindd_cli_state *state)
                *p = 0;
                name_domain = state->request.data.name.name;
                name_user = p+1;
+       } else if ((p = strchr(state->request.data.name.name, '@')) != NULL) {
+               /* upn */
+               name_domain = p + 1;
+               *p = 0;
+               name_user = state->request.data.name.name;
        } else {
                name_domain = state->request.data.name.dom_name;
                name_user = state->request.data.name.name;
diff --git a/source3/winbindd/winbindd_util.c b/source3/winbindd/winbindd_util.c
index a2c1c85..3070c62 100644
--- a/source3/winbindd/winbindd_util.c
+++ b/source3/winbindd/winbindd_util.c
@@ -1144,7 +1144,8 @@ bool parse_domain_user(const char *domuser, fstring 
domain, fstring user)
                if ( assume_domain(lp_workgroup())) {
                        fstrcpy(domain, lp_workgroup());
                } else if ((p = strchr(domuser, '@')) != NULL) {
-                       fstrcpy(domain, "");                    
+                       fstrcpy(domain, p + 1);
+                       user[PTR_DIFF(p, domuser)] = 0;
                } else {
                        return False;
                }


-- 
Samba Shared Repository

Reply via email to