From 2d361cc1034a18c36bc57d23cd3a413b1510795f Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Mon, 19 Aug 2024 09:26:51 +0200 Subject: [PATCH] libsmb: Convert cli_NetServerEnum() to return NTSTATUS Signed-off-by: Volker Lendecke Reviewed-by: Andreas Schneider --- source3/libsmb/clirap.c | 18 ++++++++++++------ source3/libsmb/clirap.h | 9 ++++++--- source3/libsmb/libsmb_dir.c | 22 +++++++++++++--------- source3/utils/net_rap.c | 22 ++++++++++++++-------- 4 files changed, 45 insertions(+), 26 deletions(-) diff --git a/source3/libsmb/clirap.c b/source3/libsmb/clirap.c index 6a0dab37e7b..cdaca3f8992 100644 --- a/source3/libsmb/clirap.c +++ b/source3/libsmb/clirap.c @@ -177,9 +177,12 @@ done: the comment and a state pointer. ****************************************************************************/ -bool cli_NetServerEnum(struct cli_state *cli, char *workgroup, uint32_t stype, - void (*fn)(const char *, uint32_t, const char *, void *), - void *state) +NTSTATUS cli_NetServerEnum( + struct cli_state *cli, + char *workgroup, + uint32_t stype, + void (*fn)(const char *, uint32_t, const char *, void *), + void *state) { uint8_t *rparam = NULL; uint8_t *rdata = NULL; @@ -235,7 +238,7 @@ bool cli_NetServerEnum(struct cli_state *cli, char *workgroup, uint32_t stype, if (len == 0) { SAFE_FREE(last_entry); - return false; + return NT_STATUS_INTERNAL_ERROR; } p += len; @@ -247,7 +250,7 @@ bool cli_NetServerEnum(struct cli_state *cli, char *workgroup, uint32_t stype, if (len == 0) { SAFE_FREE(last_entry); - return false; + return NT_STATUS_INTERNAL_ERROR; } p += len; } @@ -416,7 +419,10 @@ bool cli_NetServerEnum(struct cli_state *cli, char *workgroup, uint32_t stype, } } - return(return_cnt > 0); + if (return_cnt == 0) { + return NT_STATUS_NO_MORE_ENTRIES; + } + return NT_STATUS_OK; } /**************************************************************************** diff --git a/source3/libsmb/clirap.h b/source3/libsmb/clirap.h index 7db17362165..e66575a9c83 100644 --- a/source3/libsmb/clirap.h +++ b/source3/libsmb/clirap.h @@ -33,9 +33,12 @@ NTSTATUS cli_RNetShareEnum( struct cli_state *cli, void (*fn)(const char *, uint32_t, const char *, void *), void *state); -bool cli_NetServerEnum(struct cli_state *cli, char *workgroup, uint32_t stype, - void (*fn)(const char *, uint32_t, const char *, void *), - void *state); +NTSTATUS cli_NetServerEnum( + struct cli_state *cli, + char *workgroup, + uint32_t stype, + void (*fn)(const char *, uint32_t, const char *, void *), + void *state); NTSTATUS cli_oem_change_password(struct cli_state *cli, const char *user, const char *new_password, diff --git a/source3/libsmb/libsmb_dir.c b/source3/libsmb/libsmb_dir.c index 1506108812e..240eec48b03 100644 --- a/source3/libsmb/libsmb_dir.c +++ b/source3/libsmb/libsmb_dir.c @@ -700,11 +700,12 @@ SMBC_opendir_ctx(SMBCCTX *context, /* Now, list the stuff ... */ - if (!cli_NetServerEnum(srv->cli, - workgroup, - SV_TYPE_DOMAIN_ENUM, - list_unique_wg_fn, - (void *)dir)) { + status = cli_NetServerEnum(srv->cli, + workgroup, + SV_TYPE_DOMAIN_ENUM, + list_unique_wg_fn, + (void *)dir); + if (!NT_STATUS_IS_OK(status)) { continue; } } @@ -761,6 +762,7 @@ SMBC_opendir_ctx(SMBCCTX *context, */ char *wgroup = server; fstring buserver; + NTSTATUS status; dir->dir_type = SMBC_SERVER; @@ -819,10 +821,12 @@ SMBC_opendir_ctx(SMBCCTX *context, } /* Now, list the servers ... */ - if (!cli_NetServerEnum(srv->cli, wgroup, - 0x0000FFFE, list_fn, - (void *)dir)) { - + status = cli_NetServerEnum(srv->cli, + wgroup, + 0x0000FFFE, + list_fn, + (void *)dir); + if (!NT_STATUS_IS_OK(status)) { if (dir) { SAFE_FREE(dir->fname); SAFE_FREE(dir); diff --git a/source3/utils/net_rap.c b/source3/utils/net_rap.c index e19df0221b0..31e33840aa2 100644 --- a/source3/utils/net_rap.c +++ b/source3/utils/net_rap.c @@ -535,7 +535,7 @@ static int net_rap_server_domain(struct net_context *c, int argc, const char **argv) { struct cli_state *cli; - int ret; + NTSTATUS status; if (c->display_usage) { d_printf("%s\n%s", @@ -552,10 +552,13 @@ static int net_rap_server_domain(struct net_context *c, int argc, "\tServer name Server description\n" "\t------------- ----------------------------\n")); - ret = cli_NetServerEnum(cli, cli->server_domain, SV_TYPE_ALL, - display_server_func,NULL); + status = cli_NetServerEnum(cli, + cli->server_domain, + SV_TYPE_ALL, + display_server_func, + NULL); cli_shutdown(cli); - return ret; + return NT_STATUS_IS_OK(status) ? 0 : -1; } int net_rap_server(struct net_context *c, int argc, const char **argv) @@ -598,7 +601,7 @@ int net_rap_domain_usage(struct net_context *c, int argc, const char **argv) int net_rap_domain(struct net_context *c, int argc, const char **argv) { struct cli_state *cli; - int ret; + NTSTATUS status; if (c->display_usage) return net_rap_domain_usage(c, argc, argv); @@ -610,10 +613,13 @@ int net_rap_domain(struct net_context *c, int argc, const char **argv) "\tDomain name Server name of Browse Master\n" "\t------------- ----------------------------\n")); - ret = cli_NetServerEnum(cli, cli->server_domain, SV_TYPE_DOMAIN_ENUM, - display_server_func,NULL); + status = cli_NetServerEnum(cli, + cli->server_domain, + SV_TYPE_DOMAIN_ENUM, + display_server_func, + NULL); cli_shutdown(cli); - return ret; + return NT_STATUS_IS_OK(status) ? 0 : -1; } int net_rap_printq_usage(struct net_context *c, int argc, const char **argv) -- 2.47.3