]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
handling upn
authorBo Yang <boyang@samba.org>
Sat, 18 Jul 2009 06:23:24 +0000 (14:23 +0800)
committerKarolin Seeger <kseeger@samba.org>
Mon, 27 Jul 2009 10:07:32 +0000 (12:07 +0200)
lookupname failed, cannot find domain when attempt
to change password.

This addresses bug #6560.

Signed-off-by: Bo Yang <boyang@samba.org>
source/nsswitch/pam_winbind.c
source/winbindd/winbindd_sid.c
source/winbindd/winbindd_util.c

index 1211ffd44de46fb67f541fa292be0c245fdbd2cb..73be3e03f90e5049dffd5b97df2b171449d0fd74 100644 (file)
@@ -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;
        }
index 641b18ebbd8fbdd7ba31ca05738261374d4ed285..b0f2c72ae1e1b4379eba208abc2ef506b10dd434 100644 (file)
@@ -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;
index 2d87015fec0ab249797436ac23ed7005aac6efd3..efa85fa81e0cd030808263d138afab8bceb8c9f3 100644 (file)
@@ -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;
                }