diff options
-rw-r--r-- | source4/torture/winbind/struct_based.c | 70 |
1 files changed, 47 insertions, 23 deletions
diff --git a/source4/torture/winbind/struct_based.c b/source4/torture/winbind/struct_based.c index d7e7c164b6..0477b7b111 100644 --- a/source4/torture/winbind/struct_based.c +++ b/source4/torture/winbind/struct_based.c @@ -591,22 +591,17 @@ struct torture_domain_sequence { uint32_t seq; }; -static bool torture_winbind_struct_show_sequence(struct torture_context *torture) +static bool get_sequence_numbers(struct torture_context *torture, + struct torture_domain_sequence **seqs) { struct winbindd_request req; struct winbindd_response rep; bool ok; const char *extra_data; fstring line; - uint32_t i; uint32_t count = 0; - struct torture_trust_domain *domlist = NULL; struct torture_domain_sequence *s = NULL; - torture_comment(torture, "Running WINBINDD_SHOW_SEQUENCE (struct based)\n"); - - torture_comment(torture, " - Running WINBINDD_SHOW_SEQUENCE without domain:\n"); - ZERO_STRUCT(req); ZERO_STRUCT(rep); @@ -615,8 +610,6 @@ static bool torture_winbind_struct_show_sequence(struct torture_context *torture extra_data = (char *)rep.extra_data.data; torture_assert(torture, extra_data, "NULL sequence list"); - torture_comment(torture, "%s", extra_data); - while (next_token(&extra_data, line, "\n", sizeof(fstring))) { char *p, *lp; uint32_t seq; @@ -632,13 +625,15 @@ static bool torture_winbind_struct_show_sequence(struct torture_context *torture s[count].netbios_name = talloc_strdup(s, lp); lp = p+1; - torture_assert(torture, strncmp(lp, ": ", 2) == 0, "invalid line format"); + torture_assert(torture, strncmp(lp, ": ", 2) == 0, + "invalid line format"); lp += 2; if (strcmp(lp, "DISCONNECTED") == 0) { seq = (uint32_t)-1; } else { seq = (uint32_t)strtol(lp, &p, 10); - torture_assert(torture, (*p == '\0'), "invalid line format"); + torture_assert(torture, (*p == '\0'), + "invalid line format"); torture_assert(torture, (seq != (uint32_t)-1), "sequence number -1 encountered"); } @@ -646,35 +641,64 @@ static bool torture_winbind_struct_show_sequence(struct torture_context *torture count++; } + SAFE_FREE(rep.extra_data.data); + + torture_assert(torture, count >= 2, "The list of domain sequence " + "numbers should contain 2 entries"); + + *seqs = s; + return true; +} + +static bool torture_winbind_struct_show_sequence(struct torture_context *torture) +{ + bool ok; + uint32_t i; + struct torture_trust_domain *domlist = NULL; + struct torture_domain_sequence *s = NULL; + + torture_comment(torture, "Running WINBINDD_SHOW_SEQUENCE (struct based)\n"); + + ok = get_sequence_numbers(torture, &s); + torture_assert(torture, ok, "failed to get list of sequence numbers"); - torture_comment(torture, " - getting list of trusted domains\n"); ok = get_trusted_domains(torture, &domlist); torture_assert(torture, ok, "failed to get trust list"); for (i=0; domlist[i].netbios_name; i++) { + struct winbindd_request req; + struct winbindd_response rep; uint32_t seq; - ok = (s[i].netbios_name != NULL); - torture_assert(torture, ok, "more domains recieved in second run"); - ok = (strcmp(domlist[i].netbios_name, s[i].netbios_name) == 0); - torture_assert(torture, ok, "inconsistent order of domain lists"); + torture_assert(torture, s[i].netbios_name, + "more domains recieved in second run"); + torture_assert_str_equal(torture, domlist[i].netbios_name, + s[i].netbios_name, + "inconsistent order of domain lists"); ZERO_STRUCT(req); ZERO_STRUCT(rep); - fstrcpy(req.domain_name, domlist[i].netbios_name); - torture_comment(torture, " - Running WINBINDD_SHOW_SEQUENCE " - "for domain %s:\n", req.domain_name); - DO_STRUCT_REQ_REP(WINBINDD_SHOW_SEQUENCE, &req, &rep); + seq = rep.data.sequence_number; - torture_comment(torture, "%s : ", req.domain_name); + if (i == 0) { + torture_assert(torture, (seq != (uint32_t)-1), + "BUILTIN domain disconnected"); + } else if (i == 1) { + torture_assert(torture, (seq != (uint32_t)-1), + "local domain disconnected"); + } + + if (seq == (uint32_t)-1) { - torture_comment(torture, "DISCONNECTED\n"); + torture_comment(torture, " * %s : DISCONNECTED\n", + req.domain_name); } else { - torture_comment(torture, "%d\n", seq); + torture_comment(torture, " * %s : %d\n", + req.domain_name, seq); } torture_assert(torture, (seq >= s[i].seq), "illegal sequence number encountered"); |