The branch, master has been updated via 9d05e91ec062e6c745a1b51c99b9d4c3df0961f1 (commit) via b19b6aea1258de18eec6832199f2b736a930b095 (commit) from 25fc58afcd6051cd387a7114afadab2a85b98cfb (commit)
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master - Log ----------------------------------------------------------------- commit 9d05e91ec062e6c745a1b51c99b9d4c3df0961f1 Author: Günther Deschner <g...@samba.org> Date: Mon Feb 9 18:49:34 2009 +0100 s3-rpcclient: use rpccli_spoolss_openprinter_ex helper. Guenther commit b19b6aea1258de18eec6832199f2b736a930b095 Author: Günther Deschner <g...@samba.org> Date: Mon Feb 9 17:56:20 2009 +0100 s3-rpcclient: add rpccli_spoolss_openprinter_ex() convenience wrapper. Guenther ----------------------------------------------------------------------- Summary of changes: source3/include/proto.h | 5 + source3/libads/ldap_printer.c | 10 +- source3/rpc_client/cli_spoolss.c | 49 ++++++++++ source3/rpcclient/cmd_spoolss.c | 184 ++++++++++++++++++-------------------- source3/utils/net_rpc_printer.c | 7 +- 5 files changed, 150 insertions(+), 105 deletions(-) Changeset truncated at 500 lines: diff --git a/source3/include/proto.h b/source3/include/proto.h index 849bed3..db277ff 100644 --- a/source3/include/proto.h +++ b/source3/include/proto.h @@ -5428,6 +5428,11 @@ NTSTATUS rpccli_try_samr_connects(struct rpc_pipe_client *cli, /* The following definitions come from rpc_client/cli_spoolss.c */ +WERROR rpccli_spoolss_openprinter_ex(struct rpc_pipe_client *cli, + TALLOC_CTX *mem_ctx, + const char *printername, + uint32_t access_desired, + struct policy_handle *handle); WERROR rpccli_spoolss_open_printer_ex(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx, const char *printername, const char *datatype, uint32 access_required, const char *station, const char *username, POLICY_HND *pol); diff --git a/source3/libads/ldap_printer.c b/source3/libads/ldap_printer.c index 1bcb86e..a61df3c 100644 --- a/source3/libads/ldap_printer.c +++ b/source3/libads/ldap_printer.c @@ -319,11 +319,11 @@ WERROR get_remote_printer_publishing_data(struct rpc_pipe_client *cli, DEBUG(3, ("Insufficient memory\n")); return WERR_NOMEM; } - - result = rpccli_spoolss_open_printer_ex(cli, mem_ctx, printername, - "", MAXIMUM_ALLOWED_ACCESS, - cli->srv_name_slash, cli->auth->user_name, - &pol); + + result = rpccli_spoolss_openprinter_ex(cli, mem_ctx, + printername, + SEC_FLAG_MAXIMUM_ALLOWED, + &pol); if (!W_ERROR_IS_OK(result)) { DEBUG(3, ("Unable to open printer %s, error is %s.\n", printername, win_errstr(result))); diff --git a/source3/rpc_client/cli_spoolss.c b/source3/rpc_client/cli_spoolss.c index 1ad8b5d..780043a 100644 --- a/source3/rpc_client/cli_spoolss.c +++ b/source3/rpc_client/cli_spoolss.c @@ -25,6 +25,55 @@ #include "includes.h" #include "rpc_client.h" +/********************************************************************** + convencience wrapper around rpccli_spoolss_OpenPrinterEx +**********************************************************************/ + +WERROR rpccli_spoolss_openprinter_ex(struct rpc_pipe_client *cli, + TALLOC_CTX *mem_ctx, + const char *printername, + uint32_t access_desired, + struct policy_handle *handle) +{ + NTSTATUS status; + WERROR werror; + struct spoolss_DevmodeContainer devmode_ctr; + union spoolss_UserLevel userlevel; + struct spoolss_UserLevel1 level1; + + ZERO_STRUCT(devmode_ctr); + + level1.size = 28; + level1.client = cli->srv_name_slash; + level1.user = cli->auth->user_name; + level1.build = 1381; + level1.major = 2; + level1.minor = 0; + level1.processor = 0; + + userlevel.level1 = &level1; + + status = rpccli_spoolss_OpenPrinterEx(cli, mem_ctx, + printername, + NULL, + devmode_ctr, + access_desired, + 1, /* level */ + userlevel, + handle, + &werror); + + if (!W_ERROR_IS_OK(werror)) { + return werror; + } + + if (!NT_STATUS_IS_OK(status)) { + return ntstatus_to_werror(status); + } + + return WERR_OK; +} + /********************************************************************* Decode various spoolss rpc's and info levels ********************************************************************/ diff --git a/source3/rpcclient/cmd_spoolss.c b/source3/rpcclient/cmd_spoolss.c index aba961a..9471c86 100644 --- a/source3/rpcclient/cmd_spoolss.c +++ b/source3/rpcclient/cmd_spoolss.c @@ -97,7 +97,6 @@ static WERROR cmd_spoolss_open_printer_ex(struct rpc_pipe_client *cli, int argc, const char **argv) { WERROR werror; - fstring printername; POLICY_HND hnd; if (argc != 2) { @@ -108,17 +107,14 @@ static WERROR cmd_spoolss_open_printer_ex(struct rpc_pipe_client *cli, if (!cli) return WERR_GENERAL_FAILURE; - fstrcpy(printername, argv[1]); - /* Open the printer handle */ - werror = rpccli_spoolss_open_printer_ex(cli, mem_ctx, printername, - "", PRINTER_ALL_ACCESS, - cli->srv_name_slash, - cli->auth->user_name, &hnd); - + werror = rpccli_spoolss_openprinter_ex(cli, mem_ctx, + argv[1], + PRINTER_ALL_ACCESS, + &hnd); if (W_ERROR_IS_OK(werror)) { - printf("Printer %s opened successfully\n", printername); + printf("Printer %s opened successfully\n", argv[1]); rpccli_spoolss_ClosePrinter(cli, mem_ctx, &hnd, &werror); if (!W_ERROR_IS_OK(werror)) { @@ -486,10 +482,10 @@ static WERROR cmd_spoolss_setprinter(struct rpc_pipe_client *cli, slprintf(printername, sizeof(printername)-1, "%s\\%s", cli->srv_name_slash, argv[1]); /* get a printer handle */ - result = rpccli_spoolss_open_printer_ex(cli, mem_ctx, printername, "", - PRINTER_ALL_ACCESS, cli->srv_name_slash, - cli->auth->user_name, &pol); - + result = rpccli_spoolss_openprinter_ex(cli, mem_ctx, + printername, + PRINTER_ALL_ACCESS, + &pol); if (!W_ERROR_IS_OK(result)) goto done; @@ -547,10 +543,10 @@ static WERROR cmd_spoolss_setprintername(struct rpc_pipe_client *cli, slprintf(printername, sizeof(printername)-1, "%s\\%s", cli->srv_name_slash, argv[1]); /* get a printer handle */ - result = rpccli_spoolss_open_printer_ex(cli, mem_ctx, printername, "", - PRINTER_ALL_ACCESS, cli->srv_name_slash, - cli->auth->user_name, &pol); - + result = rpccli_spoolss_openprinter_ex(cli, mem_ctx, + printername, + PRINTER_ALL_ACCESS, + &pol); if (!W_ERROR_IS_OK(result)) goto done; @@ -606,11 +602,10 @@ static WERROR cmd_spoolss_getprinter(struct rpc_pipe_client *cli, /* get a printer handle */ - result = rpccli_spoolss_open_printer_ex(cli, mem_ctx, printername, - "", MAXIMUM_ALLOWED_ACCESS, - cli->srv_name_slash, - cli->auth->user_name, &pol); - + result = rpccli_spoolss_openprinter_ex(cli, mem_ctx, + printername, + SEC_FLAG_MAXIMUM_ALLOWED, + &pol); if (!W_ERROR_IS_OK(result)) goto done; @@ -745,11 +740,10 @@ static WERROR cmd_spoolss_getprinterdata(struct rpc_pipe_client *cli, /* get a printer handle */ - result = rpccli_spoolss_open_printer_ex(cli, mem_ctx, printername, - "", MAXIMUM_ALLOWED_ACCESS, - cli->srv_name_slash, - cli->auth->user_name, &pol); - + result = rpccli_spoolss_openprinter_ex(cli, mem_ctx, + printername, + SEC_FLAG_MAXIMUM_ALLOWED, + &pol); if (!W_ERROR_IS_OK(result)) goto done; @@ -808,11 +802,10 @@ static WERROR cmd_spoolss_getprinterdataex(struct rpc_pipe_client *cli, /* get a printer handle */ - result = rpccli_spoolss_open_printer_ex(cli, mem_ctx, printername, - "", MAXIMUM_ALLOWED_ACCESS, - cli->srv_name_slash, - cli->auth->user_name, &pol); - + result = rpccli_spoolss_openprinter_ex(cli, mem_ctx, + printername, + SEC_FLAG_MAXIMUM_ALLOWED, + &pol); if (!W_ERROR_IS_OK(result)) goto done; @@ -978,11 +971,10 @@ static WERROR cmd_spoolss_getdriver(struct rpc_pipe_client *cli, /* Open a printer handle */ - werror = rpccli_spoolss_open_printer_ex(cli, mem_ctx, printername, "", - PRINTER_ACCESS_USE, - cli->srv_name_slash, - cli->auth->user_name, &pol); - + werror = rpccli_spoolss_openprinter_ex(cli, mem_ctx, + printername, + PRINTER_ACCESS_USE, + &pol); if (!W_ERROR_IS_OK(werror)) { printf("Error opening printer handle for %s!\n", printername); return werror; @@ -1414,11 +1406,10 @@ static WERROR cmd_spoolss_setdriver(struct rpc_pipe_client *cli, /* Get a printer handle */ - result = rpccli_spoolss_open_printer_ex(cli, mem_ctx, printername, "", - PRINTER_ALL_ACCESS, - cli->srv_name_slash, - cli->auth->user_name, &pol); - + result = rpccli_spoolss_openprinter_ex(cli, mem_ctx, + printername, + PRINTER_ALL_ACCESS, + &pol); if (!W_ERROR_IS_OK(result)) goto done; @@ -1630,11 +1621,10 @@ static WERROR cmd_spoolss_addform(struct rpc_pipe_client *cli, TALLOC_CTX *mem_c return WERR_NOMEM; } - werror = rpccli_spoolss_open_printer_ex(cli, mem_ctx, printername, "", - PRINTER_ALL_ACCESS, - cli->srv_name_slash, cli->auth->user_name, - &handle); - + werror = rpccli_spoolss_openprinter_ex(cli, mem_ctx, + printername, + PRINTER_ALL_ACCESS, + &handle); if (!W_ERROR_IS_OK(werror)) goto done; @@ -1698,10 +1688,10 @@ static WERROR cmd_spoolss_setform(struct rpc_pipe_client *cli, TALLOC_CTX *mem_c return WERR_NOMEM; } - werror = rpccli_spoolss_open_printer_ex( - cli, mem_ctx, printername, "", MAXIMUM_ALLOWED_ACCESS, - cli->srv_name_slash, cli->auth->user_name, &handle); - + werror = rpccli_spoolss_openprinter_ex(cli, mem_ctx, + printername, + SEC_FLAG_MAXIMUM_ALLOWED, + &handle); if (!W_ERROR_IS_OK(werror)) goto done; @@ -1820,10 +1810,10 @@ static WERROR cmd_spoolss_getform(struct rpc_pipe_client *cli, TALLOC_CTX *mem_c return WERR_NOMEM; } - werror = rpccli_spoolss_open_printer_ex( - cli, mem_ctx, printername, "", MAXIMUM_ALLOWED_ACCESS, - cli->srv_name_slash, cli->auth->user_name, &handle); - + werror = rpccli_spoolss_openprinter_ex(cli, mem_ctx, + printername, + SEC_FLAG_MAXIMUM_ALLOWED, + &handle); if (!W_ERROR_IS_OK(werror)) goto done; @@ -1894,10 +1884,10 @@ static WERROR cmd_spoolss_deleteform(struct rpc_pipe_client *cli, return WERR_NOMEM; } - werror = rpccli_spoolss_open_printer_ex( - cli, mem_ctx, printername, "", MAXIMUM_ALLOWED_ACCESS, - cli->srv_name_slash, cli->auth->user_name, &handle); - + werror = rpccli_spoolss_openprinter_ex(cli, mem_ctx, + printername, + SEC_FLAG_MAXIMUM_ALLOWED, + &handle); if (!W_ERROR_IS_OK(werror)) goto done; @@ -1949,10 +1939,10 @@ static WERROR cmd_spoolss_enum_forms(struct rpc_pipe_client *cli, return WERR_NOMEM; } - werror = rpccli_spoolss_open_printer_ex( - cli, mem_ctx, printername, "", MAXIMUM_ALLOWED_ACCESS, - cli->srv_name_slash, cli->auth->user_name, &handle); - + werror = rpccli_spoolss_openprinter_ex(cli, mem_ctx, + printername, + SEC_FLAG_MAXIMUM_ALLOWED, + &handle); if (!W_ERROR_IS_OK(werror)) goto done; @@ -2034,10 +2024,11 @@ static WERROR cmd_spoolss_setprinterdata(struct rpc_pipe_client *cli, } /* get a printer handle */ - result = rpccli_spoolss_open_printer_ex(cli, mem_ctx, printername, "", - MAXIMUM_ALLOWED_ACCESS, - cli->srv_name_slash, - cli->auth->user_name, &pol); + + result = rpccli_spoolss_openprinter_ex(cli, mem_ctx, + printername, + SEC_FLAG_MAXIMUM_ALLOWED, + &pol); if (!W_ERROR_IS_OK(result)) goto done; @@ -2224,11 +2215,10 @@ static WERROR cmd_spoolss_enum_jobs(struct rpc_pipe_client *cli, return WERR_NOMEM; } - result = rpccli_spoolss_open_printer_ex(cli, mem_ctx, printername, - "", MAXIMUM_ALLOWED_ACCESS, - cli->srv_name_slash, - cli->auth->user_name, &hnd); - + result = rpccli_spoolss_openprinter_ex(cli, mem_ctx, + printername, + SEC_FLAG_MAXIMUM_ALLOWED, + &hnd); if (!W_ERROR_IS_OK(result)) goto done; @@ -2293,11 +2283,10 @@ static WERROR cmd_spoolss_enum_data( struct rpc_pipe_client *cli, return WERR_NOMEM; } - result = rpccli_spoolss_open_printer_ex(cli, mem_ctx, printername, - "", MAXIMUM_ALLOWED_ACCESS, - cli->srv_name_slash, - cli->auth->user_name, &hnd); - + result = rpccli_spoolss_openprinter_ex(cli, mem_ctx, + printername, + SEC_FLAG_MAXIMUM_ALLOWED, + &hnd); if (!W_ERROR_IS_OK(result)) goto done; @@ -2360,11 +2349,10 @@ static WERROR cmd_spoolss_enum_data_ex( struct rpc_pipe_client *cli, return WERR_NOMEM; } - result = rpccli_spoolss_open_printer_ex(cli, mem_ctx, printername, - "", MAXIMUM_ALLOWED_ACCESS, - cli->srv_name_slash, - cli->auth->user_name, &hnd); - + result = rpccli_spoolss_openprinter_ex(cli, mem_ctx, + printername, + SEC_FLAG_MAXIMUM_ALLOWED, + &hnd); if (!W_ERROR_IS_OK(result)) goto done; @@ -2429,12 +2417,10 @@ static WERROR cmd_spoolss_enum_printerkey( struct rpc_pipe_client *cli, return WERR_NOMEM; } - - result = rpccli_spoolss_open_printer_ex(cli, mem_ctx, printername, - "", MAXIMUM_ALLOWED_ACCESS, - cli->srv_name_slash, - cli->auth->user_name, &hnd); - + result = rpccli_spoolss_openprinter_ex(cli, mem_ctx, + printername, + SEC_FLAG_MAXIMUM_ALLOWED, + &hnd); if (!W_ERROR_IS_OK(result)) goto done; @@ -2494,10 +2480,10 @@ static WERROR cmd_spoolss_rffpcnex(struct rpc_pipe_client *cli, cli->desthost, argv[1]); strupper_m(printername); - result = rpccli_spoolss_open_printer_ex( - cli, mem_ctx, printername, "", MAXIMUM_ALLOWED_ACCESS, - cli->srv_name_slash, cli->auth->user_name, &hnd); - + result = rpccli_spoolss_openprinter_ex(cli, mem_ctx, + printername, + SEC_FLAG_MAXIMUM_ALLOWED, + &hnd); if (!W_ERROR_IS_OK(result)) { printf("Error opening %s\n", argv[1]); goto done; @@ -2658,7 +2644,6 @@ static WERROR cmd_spoolss_printercmp(struct rpc_pipe_client *cli, { fstring printername, servername1, servername2; char *printername_path = NULL; - struct cli_state *cli_server1 = rpc_pipe_np_smb_conn(cli); struct cli_state *cli_server2 = NULL; struct rpc_pipe_client *cli2 = NULL; POLICY_HND hPrinter1, hPrinter2; @@ -2709,8 +2694,11 @@ static WERROR cmd_spoolss_printercmp(struct rpc_pipe_client *cli, return WERR_NOMEM; } printf("Opening %s...", printername_path); - werror = rpccli_spoolss_open_printer_ex( cli, mem_ctx, printername_path, - "", PRINTER_ALL_ACCESS, servername1, cli_server1->user_name, &hPrinter1); + + werror = rpccli_spoolss_openprinter_ex(cli, mem_ctx, + printername_path, + PRINTER_ALL_ACCESS, + &hPrinter1); if ( !W_ERROR_IS_OK(werror) ) { printf("failed (%s)\n", win_errstr(werror)); goto done; @@ -2725,8 +2713,10 @@ static WERROR cmd_spoolss_printercmp(struct rpc_pipe_client *cli, return WERR_NOMEM; } printf("Opening %s...", printername_path); - werror = rpccli_spoolss_open_printer_ex( cli2, mem_ctx, printername_path, - "", PRINTER_ALL_ACCESS, servername2, cli_server2->user_name, &hPrinter2 ); + werror = rpccli_spoolss_openprinter_ex(cli2, mem_ctx, + printername_path, + PRINTER_ALL_ACCESS, + &hPrinter2); if ( !W_ERROR_IS_OK(werror) ) { printf("failed (%s)\n", win_errstr(werror)); goto done; diff --git a/source3/utils/net_rpc_printer.c b/source3/utils/net_rpc_printer.c index a40d5ca..41a5e8f 100644 --- a/source3/utils/net_rpc_printer.c +++ b/source3/utils/net_rpc_printer.c @@ -736,9 +736,10 @@ static bool net_spoolss_open_printer_ex(struct rpc_pipe_client *pipe_hnd, pipe_hnd->srv_name_slash, username, printername2, access_required)); /* open printer */ - result = rpccli_spoolss_open_printer_ex(pipe_hnd, mem_ctx, printername2, - "", access_required, - pipe_hnd->srv_name_slash, username, hnd); + result = rpccli_spoolss_openprinter_ex(pipe_hnd, mem_ctx, + printername2, + access_required, + hnd); /* be more verbose */ if (W_ERROR_V(result) == W_ERROR_V(WERR_ACCESS_DENIED)) { -- Samba Shared Repository