nsswitch: Fix wbcListGroups test
authorChristof Schmitt <cs@samba.org>
Fri, 30 Mar 2018 21:35:03 +0000 (14:35 -0700)
committerKarolin Seeger <kseeger@samba.org>
Wed, 11 Apr 2018 09:52:25 +0000 (11:52 +0200)
With an AD DC, wbcListGroups returns the users in the DOMAIN SEPARATOR
GROUPNAME format.  The test then calls wbcLookupName with the domain
name and the previous string (including domain and separator) as
username. Fix this by passing the correct username and adding some
additional checks.

BUG: https://bugzilla.samba.org/show_bug.cgi?id=13312

Signed-off-by: Christof Schmitt <cs@samba.org>
Reviewed-by: Andreas Schneider <asn@samba.org>
(cherry picked from commit f4db4e86c341a89357082e81e30c302440647530)

nsswitch/libwbclient/tests/wbclient.c

index 8c532bbaa754e3d70fefc285f6845c38958bfccf..d10794297b8fb33a42219d7bb8d7d975e875b8d0 100644 (file)
@@ -430,6 +430,7 @@ static bool test_wbc_groups(struct torture_context *tctx)
        char *domain = NULL;
        char *name = NULL;
        char *sid_string = NULL;
+       char separator;
 
        torture_assert_wbc_ok(tctx, wbcInterfaceDetails(&details),
                              "%s", "wbcInterfaceDetails failed");
@@ -440,6 +441,7 @@ static bool test_wbc_groups(struct torture_context *tctx)
                            ret,
                            fail,
                            "Failed to allocate domain_name");
+       separator = details->winbind_separator;
        wbcFreeMemory(details);
        details = NULL;
 
@@ -456,10 +458,39 @@ static bool test_wbc_groups(struct torture_context *tctx)
        for (i=0; i < MIN(num_groups,100); i++) {
                struct wbcDomainSid sid;
                enum wbcSidType name_type;
+               const char *group;
+               char *c;
+
+               c = strchr(groups[i], separator);
+
+               if (c == NULL) {
+                       /*
+                        * NT4 DC
+                        * group name does not contain DOMAIN SEPARATOR prefix.
+                        */
+
+                       group = groups[i];
+               } else {
+                       /*
+                        * AD DC
+                        * group name starts with DOMAIN SEPARATOR prefix.
+                        */
+                       const char *dom;
+
+
+                       *c = '\0';
+                       dom = groups[i];
+                       group = c + 1;
+
+                       torture_assert_str_equal_goto(tctx, dom, domain_name,
+                                                     ret, fail, "Domain part "
+                                                     "of group name does not "
+                                                     "match domain name.\n");
+               }
 
                torture_assert_wbc_ok_goto_fail(tctx,
                                                wbcLookupName(domain_name,
-                                                             groups[i],
+                                                             group,
                                                              &sid,
                                                              &name_type),
                                                "wbcLookupName for %s failed",