static bool print_domain_groups(const char *domain) { wbcErr wbc_status = WBC_ERR_UNKNOWN_FAILURE; uint32_t i; uint32_t num_groups = 0; const char **groups = NULL; /* Send request to winbind daemon */ /* '.' is the special sign for our own domain */ if (domain && strcmp(domain, ".") == 0) { domain = get_winbind_domain(); } wbc_status = wbcListGroups(domain, &num_groups, &groups); if (!WBC_ERROR_IS_OK(wbc_status)) { return false; } for (i=0; i < num_groups; i++) { d_printf("%s\n", groups[i]); } wbcFreeMemory(groups); return true; }
static bool test_wbc_groups(struct torture_context *tctx) { const char *domain_name = NULL; uint32_t num_groups; const char **groups; int i; struct wbcInterfaceDetails *details; torture_assert_wbc_ok(tctx, wbcInterfaceDetails(&details), "%s", "wbcInterfaceDetails failed"); domain_name = talloc_strdup(tctx, details->netbios_domain); wbcFreeMemory(details); torture_assert_wbc_ok(tctx, wbcListGroups(domain_name, &num_groups, &groups), "wbcListGroups in %s failed", domain_name); torture_assert(tctx, !(num_groups > 0 && !groups), "wbcListGroups returned invalid results"); for (i=0; i < MIN(num_groups,100); i++) { struct wbcDomainSid sid; enum wbcSidType name_type; char *domain; char *name; char *sid_string; torture_assert_wbc_ok(tctx, wbcLookupName(domain_name, groups[i], &sid, &name_type), "wbcLookupName for %s failed", domain_name); wbcSidToString(&sid, &sid_string); torture_assert_wbc_ok(tctx, wbcLookupSid(&sid, &domain, &name, &name_type), "wbcLookupSid of %s failed", sid_string); wbcFreeMemory(sid_string); torture_assert(tctx, name, "wbcLookupSid returned no name"); } wbcFreeMemory(groups); return true; }