]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
libsmb: Convert cli_NetServerEnum() to return NTSTATUS
authorVolker Lendecke <vl@samba.org>
Mon, 19 Aug 2024 07:26:51 +0000 (09:26 +0200)
committerVolker Lendecke <vl@samba.org>
Tue, 20 Aug 2024 09:34:40 +0000 (09:34 +0000)
Signed-off-by: Volker Lendecke <vl@samba.org>
Reviewed-by: Andreas Schneider <asn@samba.org>
source3/libsmb/clirap.c
source3/libsmb/clirap.h
source3/libsmb/libsmb_dir.c
source3/utils/net_rap.c

index 6a0dab37e7b6d436f849b1086c1e7c562c3b2e64..cdaca3f8992dc1d163c9301142c5f0c9c1b45812 100644 (file)
@@ -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;
 }
 
 /****************************************************************************
index 7db173621653d814a32d1532f784bca5a472cef6..e66575a9c83852dd7a673a49fd3890070a03abc5 100644 (file)
@@ -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,
index 1506108812e043e16b65524bb1d952b0d5d95c04..240eec48b0395c819d2c34d6278bcb97b0bc98f0 100644 (file)
@@ -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);
index e19df0221b064393ed8adfde7dcc845f1242113e..31e33840aa24948ddef03421ff2b595a5952816b 100644 (file)
@@ -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)