]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
libsmb: Convert cli_RNetShareEnum() to NTSTATUS
authorVolker Lendecke <vl@samba.org>
Sun, 18 Aug 2024 18:48:48 +0000 (20:48 +0200)
committerVolker Lendecke <vl@samba.org>
Tue, 20 Aug 2024 09:34:40 +0000 (09:34 +0000)
Avoid a call to cli_nt_error()

Signed-off-by: Volker Lendecke <vl@samba.org>
Reviewed-by: Andreas Schneider <asn@samba.org>
source3/client/client.c
source3/libsmb/clirap.c
source3/libsmb/clirap.h
source3/libsmb/libsmb_dir.c
source3/utils/net_rap.c

index 08cf63018f38a144d4d6a4766ea307882c46f4e5..e2dd700314c742dcd3eeb168d110fe1c43b87e23 100644 (file)
@@ -4995,7 +4995,7 @@ static bool browse_host_rpc(bool sort)
 
 static bool browse_host(bool sort)
 {
-       int ret;
+       NTSTATUS status;
 
        if (!grepable) {
                d_printf("\n\tSharename       Type      Comment\n");
@@ -5010,14 +5010,14 @@ static bool browse_host(bool sort)
                return false;
        }
 
-       ret = cli_RNetShareEnum(cli, browse_fn, NULL);
-       if (ret == -1) {
-               NTSTATUS status = cli_nt_error(cli);
+       status = cli_RNetShareEnum(cli, browse_fn, NULL);
+       if (!NT_STATUS_IS_OK(status)) {
                d_printf("Error returning browse list: %s\n",
                         nt_errstr(status));
+               return false;
        }
 
-       return (ret != -1);
+       return true;
 }
 
 /****************************************************************************
index 7a020706c0ace92c9264ad814f27a6363fcada67..68790b0d3c8a02494d936b02a1d1bc24f67dbf91 100644 (file)
@@ -101,7 +101,10 @@ fail:
  Call a NetShareEnum - try and browse available connections on a host.
 ****************************************************************************/
 
-int cli_RNetShareEnum(struct cli_state *cli, void (*fn)(const char *, uint32_t, const char *, void *), void *state)
+NTSTATUS cli_RNetShareEnum(
+       struct cli_state *cli,
+       void (*fn)(const char *, uint32_t, const char *, void *),
+       void *state)
 {
        uint8_t *rparam = NULL;
        uint8_t *rdata = NULL;
@@ -165,6 +168,7 @@ int cli_RNetShareEnum(struct cli_state *cli, void (*fn)(const char *, uint32_t,
 
        if (!(res == 0 || res == ERRmoredata)) {
                DEBUG(4,("NetShareEnum res=%d\n", res));
+               status = werror_to_ntstatus(W_ERROR(res));
                goto done;
        }
 
@@ -224,7 +228,7 @@ done:
        TALLOC_FREE(rparam);
        TALLOC_FREE(rdata);
 
-       return count;
+       return status;
 }
 
 /****************************************************************************
index c31f4e513625ca1add46db3f8ef79538a136b050..6af93fcc358af92408f4754e318c855446b77cbc 100644 (file)
@@ -34,7 +34,10 @@ bool cli_api(struct cli_state *cli,
             char *data, int drcnt, int mdrcnt,
             char **rparam, unsigned int *rprcnt,
             char **rdata, unsigned int *rdrcnt);
-int cli_RNetShareEnum(struct cli_state *cli, void (*fn)(const char *, uint32_t, const char *, void *), void *state);
+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);
index 6e4dd329616a941189e4a502a3af434fcffc97ee..1506108812e043e16b65524bb1d952b0d5d95c04 100644 (file)
@@ -869,14 +869,10 @@ SMBC_opendir_ctx(SMBCCTX *context,
                                         * Only call cli_RNetShareEnum()
                                         * on SMB1 connections, not SMB2+.
                                         */
-                                       int rc = cli_RNetShareEnum(srv->cli,
-                                                              list_fn,
-                                                              (void *)dir);
-                                       if (rc != 0) {
-                                               status = cli_nt_error(srv->cli);
-                                       } else {
-                                               status = NT_STATUS_OK;
-                                       }
+                                       status = cli_RNetShareEnum(
+                                               srv->cli,
+                                               list_fn,
+                                               (void *)dir);
                                }
                                if (!NT_STATUS_IS_OK(status)) {
                                        /*
index cd1d5d90f7c64c79d83cb7a440fdec4ee734e268..e19df0221b064393ed8adfde7dcc845f1242113e 100644 (file)
@@ -301,7 +301,7 @@ int net_rap_share(struct net_context *c, int argc, const char **argv)
 
        if (argc == 0) {
                struct cli_state *cli;
-               int ret;
+               NTSTATUS status;
 
                if (c->display_usage) {
                        d_printf(_("Usage:\n"));
@@ -319,12 +319,12 @@ int net_rap_share(struct net_context *c, int argc, const char **argv)
        "\nEnumerating shared resources (exports) on remote server:\n\n"
        "\nShare name   Type     Description\n"
        "----------   ----     -----------\n"));
-                       ret = cli_RNetShareEnum(cli, long_share_fn, NULL);
+                       status = cli_RNetShareEnum(cli, long_share_fn, NULL);
                } else {
-                       ret = cli_RNetShareEnum(cli, share_fn, NULL);
+                       status = cli_RNetShareEnum(cli, share_fn, NULL);
                }
                cli_shutdown(cli);
-               return ret;
+               return NT_STATUS_IS_OK(status) ? 0 : -1;
        }
 
        return net_run_function(c, argc, argv, "net rap share", func);