static bool test_list_empty(struct torture_context *tctx, const void *tcase_data, const void *test_data) { struct share_context *ctx = discard_const(tcase_data); int count; const char **names; torture_assert_ntstatus_ok(tctx, share_list_all(tctx, ctx, &count, &names), "share_list_all failed"); return true; }
NTSTATUS rap_netshareenum(TALLOC_CTX *mem_ctx, struct tevent_context *event_ctx, struct loadparm_context *lp_ctx, struct rap_NetShareEnum *r) { NTSTATUS nterr; const char **snames; struct share_context *sctx; struct share_config *scfg; int i, j, count; r->out.status = 0; r->out.available = 0; r->out.info = NULL; nterr = share_get_context_by_name(mem_ctx, lp_share_backend(lp_ctx), event_ctx, lp_ctx, &sctx); if (!NT_STATUS_IS_OK(nterr)) { return nterr; } nterr = share_list_all(mem_ctx, sctx, &count, &snames); if (!NT_STATUS_IS_OK(nterr)) { return nterr; } r->out.available = count; r->out.info = talloc_array(mem_ctx, union rap_shareenum_info, r->out.available); for (i = 0, j = 0; i < r->out.available; i++) { if (!NT_STATUS_IS_OK(share_get_config(mem_ctx, sctx, snames[i], &scfg))) { DEBUG(3, ("WARNING: Service [%s] disappeared after enumeration!\n", snames[i])); continue; } strncpy(r->out.info[j].info1.name, snames[i], sizeof(r->out.info[0].info1.name)); r->out.info[i].info1.pad = 0; r->out.info[i].info1.type = dcesrv_common_get_share_type(mem_ctx, NULL, scfg); r->out.info[i].info1.comment = talloc_strdup(mem_ctx, share_string_option(scfg, SHARE_COMMENT, "")); talloc_free(scfg); j++; } r->out.available = j; return NT_STATUS_OK; }