Author: obnox Date: 2007-10-04 23:20:30 +0000 (Thu, 04 Oct 2007) New Revision: 25509
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=25509 Log: Extend the WINBIND-STRUCT-LOOKUP_NAME_SID test to also verify failure of the lookup for an invalid SID and an invalid name. Michael Modified: branches/SAMBA_4_0/source/torture/winbind/struct_based.c Changeset: Modified: branches/SAMBA_4_0/source/torture/winbind/struct_based.c =================================================================== --- branches/SAMBA_4_0/source/torture/winbind/struct_based.c 2007-10-04 18:23:22 UTC (rev 25508) +++ branches/SAMBA_4_0/source/torture/winbind/struct_based.c 2007-10-04 23:20:30 UTC (rev 25509) @@ -937,8 +937,27 @@ return true; } +static bool name_is_in_list(const char *name, const char **list) +{ + uint32_t count; + + for (count = 0; list[count]; count++) { + if (strequal(name, list[count])) { + return true; + } + } + return false; +} + static bool torture_winbind_struct_lookup_name_sid(struct torture_context *torture) { + struct winbindd_request req; + struct winbindd_response rep; + const char *invalid_sid = "S-0-0-7"; + char *domain; + const char *invalid_user = "noone"; + char *invalid_name; + bool strict = torture_setting_bool(torture, "strict mode", false); char **users; char **groups; uint32_t count; @@ -949,11 +968,55 @@ ok = get_user_list(torture, &users); torture_assert(torture, ok, "failed to retrieve list of users"); lookup_name_sid_list(torture, users); - talloc_free(users); ok = get_group_list(torture, &groups); torture_assert(torture, ok, "failed to retrieve list of groups"); lookup_name_sid_list(torture, groups); + + ZERO_STRUCT(req); + ZERO_STRUCT(rep); + + fstrcpy(req.data.sid, invalid_sid); + + ok = true; + DO_STRUCT_REQ_REP_EXT(WINBINDD_LOOKUPSID, &req, &rep, + NSS_STATUS_NOTFOUND, + strict, + ok=false, + talloc_asprintf(torture, + "invalid sid %s was resolved", + invalid_sid)); + + ZERO_STRUCT(req); + ZERO_STRUCT(rep); + + /* try to find an invalid name... */ + + count = 0; + get_winbind_domain(torture, &domain); + do { + count++; + invalid_name = talloc_asprintf(torture, "%s\\%s%u", + domain, + invalid_user, count); + } while(name_is_in_list(invalid_name, (const char **)users) || + name_is_in_list(invalid_name, (const char **)groups)); + + fstrcpy(req.data.name.dom_name, domain); + fstrcpy(req.data.name.name, + talloc_asprintf(torture, "%s%u", invalid_user, + count)); + + ok = true; + DO_STRUCT_REQ_REP_EXT(WINBINDD_LOOKUPNAME, &req, &rep, + NSS_STATUS_NOTFOUND, + strict, + ok=false, + talloc_asprintf(torture, + "invalid name %s was resolved", + invalid_name)); + + talloc_free(users); talloc_free(groups); return true;