libsmb: Remove a call to SMBC_errno()
authorVolker Lendecke <vl@samba.org>
Sat, 23 Sep 2023 01:42:24 +0000 (18:42 -0700)
committerJeremy Allison <jra@samba.org>
Mon, 25 Sep 2023 19:01:34 +0000 (19:01 +0000)
This involves converting cli_printjob_del() to NTSTATUS and thus
touches a few callers.

Signed-off-by: Volker Lendecke <vl@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
source3/client/client.c
source3/libsmb/cliprint.c
source3/libsmb/libsmb_printjob.c
source3/libsmb/proto.h
source3/utils/net_rap.c

index b7953a1f7b83c58323997bef9b98f9bea1e4c1df..f14e3f4130e8fd724ec9a4978b820d30b019a21a 100644 (file)
@@ -2282,11 +2282,12 @@ static int cmd_mput(void)
 
 static int do_cancel(int job)
 {
-       if (cli_printjob_del(cli, job)) {
+       NTSTATUS status = cli_printjob_del(cli, job);
+
+       if (NT_STATUS_IS_OK(status)) {
                d_printf("Job %d cancelled\n",job);
                return 0;
        } else {
-               NTSTATUS status = cli_nt_error(cli);
                d_printf("Error cancelling job %d : %s\n",
                         job, nt_errstr(status));
                return 1;
index 2e51dabdf32950628a5e993bebe6f5b2b10285f9..b354990f619de6301854bba8d2fd5edeab601776 100644 (file)
@@ -152,14 +152,15 @@ NTSTATUS cli_print_queue(struct cli_state *cli,
   cancel a print job
   ****************************************************************************/
 
-int cli_printjob_del(struct cli_state *cli, int job)
+NTSTATUS cli_printjob_del(struct cli_state *cli, int job)
 {
-       char *rparam = NULL;
-       char *rdata = NULL;
-       char *p;
-       unsigned int rdrcnt,rprcnt;
-       int ret = -1;
+       uint8_t *rparam = NULL;
+       uint8_t *rdata = NULL;
+       char *p = NULL;
+       uint32_t rdrcnt, rprcnt;
+       int result_code;
        char param[1024];
+       NTSTATUS status = NT_STATUS_OK;
 
        memset(param,'\0',sizeof(param));
 
@@ -173,16 +174,46 @@ int cli_printjob_del(struct cli_state *cli, int job)
        SSVAL(p,0,job);
        p += 2;
 
-       if (cli_api(cli,
-                   param, PTR_DIFF(p,param), 1024,  /* Param, length, maxlen */
-                   NULL, 0, CLI_BUFFER_SIZE,            /* data, length, maxlen */
-                   &rparam, &rprcnt,                /* return params, length */
-                   &rdata, &rdrcnt)) {               /* return data, length */
-               ret = SVAL(rparam,0);
+       status = cli_trans(talloc_tos(),
+                          cli,
+                          SMBtrans,           /* trans_cmd */
+                          "\\PIPE\\LANMAN",   /* name */
+                          0,                  /* fid */
+                          0,                  /* function */
+                          0,                  /* flags */
+                          NULL,               /* setup */
+                          0,                  /* num_setup */
+                          0,                  /* max_setup */
+                          (uint8_t *)param,   /* param */
+                          PTR_DIFF(p, param), /* num_param */
+                          1024,               /* max_param */
+                          NULL,               /* data */
+                          0,                  /* num_data */
+                          CLI_BUFFER_SIZE,    /* max_data */
+                          NULL,               /* recv_flags2 */
+                          NULL,               /* rsetup */
+                          0,                  /* min_rsetup */
+                          NULL,               /* num_rsetup */
+                          &rparam,            /* rparam */
+                          8,                  /* min_rparam */
+                          &rprcnt,            /* num_rparam */
+                          &rdata,             /* rdata */
+                          0,                  /* min_rdata */
+                          &rdrcnt);           /* num_rdata */
+       if (!NT_STATUS_IS_OK(status)) {
+               cli->raw_status = status;
+               return status;
        }
 
-       SAFE_FREE(rparam);
-       SAFE_FREE(rdata);
+       result_code = SVAL(rparam, 0);
+
+       TALLOC_FREE(rparam);
+       TALLOC_FREE(rdata);
+
+       if (result_code == ERRnosuchprintjob) {
+               status = NT_STATUS_INVALID_PARAMETER;
+               cli->raw_status = NT_STATUS_INVALID_PARAMETER;
+       }
 
-       return ret;
+       return status;
 }
index cb567231fcefdc6c9924df908084c660432f6207..2b05dd077cff58568223bb04fc3bc3dc705fe33e 100644 (file)
@@ -271,9 +271,9 @@ SMBC_unlink_print_job_ctx(SMBCCTX *context,
        char *password = NULL;
        char *workgroup = NULL;
        char *path = NULL;
-        int err;
        uint16_t port = 0;
        TALLOC_CTX *frame = talloc_stackframe();
+       NTSTATUS status;
 
        if (!context || !context->internal->initialized) {
                 errno = EINVAL;
@@ -322,14 +322,12 @@ SMBC_unlink_print_job_ctx(SMBCCTX *context,
                 return -1;  /* errno set by SMBC_server */
         }
 
-        if ((err = cli_printjob_del(srv->cli, id)) != 0) {
-                if (err < 0)
-                        errno = SMBC_errno(context, srv->cli);
-                else if (err == ERRnosuchprintjob)
-                        errno = EINVAL;
+       status = cli_printjob_del(srv->cli, id);
+       if (!NT_STATUS_IS_OK(status)) {
+               errno = cli_status_to_errno(status);
                TALLOC_FREE(frame);
                 return -1;
-        }
+       }
 
        TALLOC_FREE(frame);
         return 0;
index 0522b1b6868574c494c5461e58dc4486b214caf6..6c814449b4d2f00e7e08dcb112d1b3f03f68c19c 100644 (file)
@@ -816,7 +816,7 @@ NTSTATUS cli_oplock_ack_recv(struct tevent_req *req);
 
 NTSTATUS cli_print_queue(struct cli_state *cli,
                         void (*fn)(struct print_job_info *));
-int cli_printjob_del(struct cli_state *cli, int job);
+NTSTATUS cli_printjob_del(struct cli_state *cli, int job);
 
 /* The following definitions come from libsmb/cliquota.c  */
 
index 8f74604cb4aae0fadb3e71b73c517b86fe146a66..8f07106927c265c891f17929053b7f2973c37706 100644 (file)
@@ -712,7 +712,7 @@ static int rap_printq_info(struct net_context *c, int argc, const char **argv)
 static int rap_printq_delete(struct net_context *c, int argc, const char **argv)
 {
        struct cli_state *cli;
-       int ret;
+       NTSTATUS status;
 
        if (argc == 0 || c->display_usage)
                 return net_rap_printq_usage(c, argc, argv);
@@ -720,9 +720,12 @@ static int rap_printq_delete(struct net_context *c, int argc, const char **argv)
        if (!NT_STATUS_IS_OK(net_make_ipc_connection(c, 0, &cli)))
                 return -1;
 
-       ret = cli_printjob_del(cli, atoi(argv[0]));
+       status = cli_printjob_del(cli, atoi(argv[0]));
        cli_shutdown(cli);
-       return ret;
+       if (!NT_STATUS_IS_OK(status)) {
+               return -1;
+       }
+       return 0;
 }
 
 int net_rap_printq(struct net_context *c, int argc, const char **argv)