From: Volker Lendecke Date: Sat, 23 Sep 2023 01:42:24 +0000 (-0700) Subject: libsmb: Remove a call to SMBC_errno() X-Git-Tag: tevent-0.16.0~511 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=15ff9c1819826cf4ed5535fa20741adffbbe7281;p=thirdparty%2Fsamba.git libsmb: Remove a call to SMBC_errno() This involves converting cli_printjob_del() to NTSTATUS and thus touches a few callers. Signed-off-by: Volker Lendecke Reviewed-by: Jeremy Allison --- diff --git a/source3/client/client.c b/source3/client/client.c index b7953a1f7b8..f14e3f4130e 100644 --- a/source3/client/client.c +++ b/source3/client/client.c @@ -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; diff --git a/source3/libsmb/cliprint.c b/source3/libsmb/cliprint.c index 2e51dabdf32..b354990f619 100644 --- a/source3/libsmb/cliprint.c +++ b/source3/libsmb/cliprint.c @@ -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; } diff --git a/source3/libsmb/libsmb_printjob.c b/source3/libsmb/libsmb_printjob.c index cb567231fce..2b05dd077cf 100644 --- a/source3/libsmb/libsmb_printjob.c +++ b/source3/libsmb/libsmb_printjob.c @@ -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; diff --git a/source3/libsmb/proto.h b/source3/libsmb/proto.h index 0522b1b6868..6c814449b4d 100644 --- a/source3/libsmb/proto.h +++ b/source3/libsmb/proto.h @@ -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 */ diff --git a/source3/utils/net_rap.c b/source3/utils/net_rap.c index 8f74604cb4a..8f07106927c 100644 --- a/source3/utils/net_rap.c +++ b/source3/utils/net_rap.c @@ -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)