From 473c558937303226c1200ad01bad3920fc8a51f6 Mon Sep 17 00:00:00 2001 From: Günther Deschner Date: Tue, 10 Feb 2009 15:11:29 +0100 Subject: s3-rpcclient: use one macro for all printername formats. Guenther --- source3/rpcclient/cmd_spoolss.c | 168 ++++++++++++---------------------------- 1 file changed, 51 insertions(+), 117 deletions(-) diff --git a/source3/rpcclient/cmd_spoolss.c b/source3/rpcclient/cmd_spoolss.c index 9471c86e62..4a1d5cd3dc 100644 --- a/source3/rpcclient/cmd_spoolss.c +++ b/source3/rpcclient/cmd_spoolss.c @@ -24,6 +24,13 @@ #include "includes.h" #include "rpcclient.h" +#define RPCCLIENT_PRINTERNAME(_printername, _cli, _arg) \ +{ \ + _printername = talloc_asprintf_strupper_m(mem_ctx, "%s\\%s", \ + _cli->srv_name_slash, _arg); \ + W_ERROR_HAVE_NO_MEMORY(_printername); \ +} + struct table_node { const char *long_archi; const char *short_archi; @@ -465,8 +472,7 @@ static WERROR cmd_spoolss_setprinter(struct rpc_pipe_client *cli, uint32 info_level = 2; bool opened_hnd = False; PRINTER_INFO_CTR ctr; - fstring printername, - comment; + const char *printername, *comment = NULL; if (argc == 1 || argc > 3) { printf("Usage: %s printername comment\n", argv[0]); @@ -476,10 +482,10 @@ static WERROR cmd_spoolss_setprinter(struct rpc_pipe_client *cli, /* Open a printer handle */ if (argc == 3) { - fstrcpy(comment, argv[2]); + comment = argv[2]; } - slprintf(printername, sizeof(printername)-1, "%s\\%s", cli->srv_name_slash, argv[1]); + RPCCLIENT_PRINTERNAME(printername, cli, argv[1]); /* get a printer handle */ result = rpccli_spoolss_openprinter_ex(cli, mem_ctx, @@ -526,8 +532,8 @@ static WERROR cmd_spoolss_setprintername(struct rpc_pipe_client *cli, uint32 info_level = 2; bool opened_hnd = False; PRINTER_INFO_CTR ctr; - fstring printername, - new_printername; + const char *printername, + *new_printername = NULL; if (argc == 1 || argc > 3) { printf("Usage: %s printername new_printername\n", argv[0]); @@ -537,10 +543,10 @@ static WERROR cmd_spoolss_setprintername(struct rpc_pipe_client *cli, /* Open a printer handle */ if (argc == 3) { - fstrcpy(new_printername, argv[2]); + new_printername = argv[2]; } - slprintf(printername, sizeof(printername)-1, "%s\\%s", cli->srv_name_slash, argv[1]); + RPCCLIENT_PRINTERNAME(printername, cli, argv[1]); /* get a printer handle */ result = rpccli_spoolss_openprinter_ex(cli, mem_ctx, @@ -586,7 +592,7 @@ static WERROR cmd_spoolss_getprinter(struct rpc_pipe_client *cli, uint32 info_level = 1; bool opened_hnd = False; PRINTER_INFO_CTR ctr; - fstring printername; + const char *printername; if (argc == 1 || argc > 3) { printf("Usage: %s [level]\n", argv[0]); @@ -598,7 +604,7 @@ static WERROR cmd_spoolss_getprinter(struct rpc_pipe_client *cli, info_level = atoi(argv[2]); } - slprintf(printername, sizeof(printername)-1, "%s\\%s", cli->srv_name_slash, argv[1]); + RPCCLIENT_PRINTERNAME(printername, cli, argv[1]); /* get a printer handle */ @@ -954,7 +960,7 @@ static WERROR cmd_spoolss_getdriver(struct rpc_pipe_client *cli, uint32 info_level = 3; bool opened_hnd = False; PRINTER_DRIVER_CTR ctr; - fstring printername; + const char *printername; uint32 i; bool success = False; @@ -965,7 +971,9 @@ static WERROR cmd_spoolss_getdriver(struct rpc_pipe_client *cli, } /* get the arguments need to open the printer handle */ - slprintf(printername, sizeof(printername)-1, "%s\\%s", cli->srv_name_slash, argv[1]); + + RPCCLIENT_PRINTERNAME(printername, cli, argv[1]); + if (argc == 3) info_level = atoi(argv[2]); @@ -1393,7 +1401,7 @@ static WERROR cmd_spoolss_setdriver(struct rpc_pipe_client *cli, bool opened_hnd = False; PRINTER_INFO_CTR ctr; PRINTER_INFO_2 info2; - fstring printername; + const char *printername; /* parse the command arguments */ if (argc != 3) @@ -1402,7 +1410,7 @@ static WERROR cmd_spoolss_setdriver(struct rpc_pipe_client *cli, return WERR_OK; } - slprintf(printername, sizeof(printername)-1, "%s\\%s", cli->srv_name_slash, argv[1]); + RPCCLIENT_PRINTERNAME(printername, cli, argv[1]); /* Get a printer handle */ @@ -1603,7 +1611,7 @@ static WERROR cmd_spoolss_addform(struct rpc_pipe_client *cli, TALLOC_CTX *mem_c POLICY_HND handle; WERROR werror; NTSTATUS status; - char *printername = NULL; + const char *printername; bool got_handle = False; union spoolss_AddFormInfo info; struct spoolss_AddFormInfo1 info1; @@ -1617,9 +1625,7 @@ static WERROR cmd_spoolss_addform(struct rpc_pipe_client *cli, TALLOC_CTX *mem_c /* Get a printer handle */ - if (asprintf(&printername, "%s\\%s", cli->srv_name_slash, argv[1]) == -1) { - return WERR_NOMEM; - } + RPCCLIENT_PRINTERNAME(printername, cli, argv[1]); werror = rpccli_spoolss_openprinter_ex(cli, mem_ctx, printername, @@ -1656,8 +1662,6 @@ static WERROR cmd_spoolss_addform(struct rpc_pipe_client *cli, TALLOC_CTX *mem_c if (got_handle) rpccli_spoolss_ClosePrinter(cli, mem_ctx, &handle, NULL); - SAFE_FREE(printername); - return werror; } @@ -1670,7 +1674,7 @@ static WERROR cmd_spoolss_setform(struct rpc_pipe_client *cli, TALLOC_CTX *mem_c POLICY_HND handle; WERROR werror; NTSTATUS status; - char *printername = NULL; + const char *printername; bool got_handle = False; union spoolss_AddFormInfo info; struct spoolss_AddFormInfo1 info1; @@ -1684,9 +1688,7 @@ static WERROR cmd_spoolss_setform(struct rpc_pipe_client *cli, TALLOC_CTX *mem_c /* Get a printer handle */ - if (asprintf(&printername, "%s\\%s", cli->srv_name_slash, argv[1]) == -1) { - return WERR_NOMEM; - } + RPCCLIENT_PRINTERNAME(printername, cli, argv[1]); werror = rpccli_spoolss_openprinter_ex(cli, mem_ctx, printername, @@ -1723,8 +1725,6 @@ static WERROR cmd_spoolss_setform(struct rpc_pipe_client *cli, TALLOC_CTX *mem_c if (got_handle) rpccli_spoolss_ClosePrinter(cli, mem_ctx, &handle, NULL); - SAFE_FREE(printername); - return werror; } @@ -1790,7 +1790,7 @@ static WERROR cmd_spoolss_getform(struct rpc_pipe_client *cli, TALLOC_CTX *mem_c POLICY_HND handle; WERROR werror; NTSTATUS status; - char *printername = NULL; + const char *printername; bool got_handle = False; DATA_BLOB buffer; uint32_t offered = 0; @@ -1806,9 +1806,7 @@ static WERROR cmd_spoolss_getform(struct rpc_pipe_client *cli, TALLOC_CTX *mem_c /* Get a printer handle */ - if (asprintf(&printername, "%s\\%s", cli->srv_name_slash, argv[1]) == -1) { - return WERR_NOMEM; - } + RPCCLIENT_PRINTERNAME(printername, cli, argv[1]); werror = rpccli_spoolss_openprinter_ex(cli, mem_ctx, printername, @@ -1853,8 +1851,6 @@ static WERROR cmd_spoolss_getform(struct rpc_pipe_client *cli, TALLOC_CTX *mem_c if (got_handle) rpccli_spoolss_ClosePrinter(cli, mem_ctx, &handle, NULL); - SAFE_FREE(printername); - return werror; } @@ -1868,7 +1864,7 @@ static WERROR cmd_spoolss_deleteform(struct rpc_pipe_client *cli, POLICY_HND handle; WERROR werror; NTSTATUS status; - char *printername = NULL; + const char *printername; bool got_handle = False; /* Parse the command arguments */ @@ -1880,9 +1876,7 @@ static WERROR cmd_spoolss_deleteform(struct rpc_pipe_client *cli, /* Get a printer handle */ - if (asprintf(&printername, "%s\\%s", cli->srv_name_slash, argv[1]) == -1) { - return WERR_NOMEM; - } + RPCCLIENT_PRINTERNAME(printername, cli, argv[1]); werror = rpccli_spoolss_openprinter_ex(cli, mem_ctx, printername, @@ -1907,8 +1901,6 @@ static WERROR cmd_spoolss_deleteform(struct rpc_pipe_client *cli, if (got_handle) rpccli_spoolss_ClosePrinter(cli, mem_ctx, &handle, NULL); - SAFE_FREE(printername); - return werror; } @@ -1921,7 +1913,7 @@ static WERROR cmd_spoolss_enum_forms(struct rpc_pipe_client *cli, { POLICY_HND handle; WERROR werror; - char *printername = NULL; + const char *printername; bool got_handle = False; uint32 num_forms, level = 1, i; FORM_1 *forms; @@ -1935,9 +1927,7 @@ static WERROR cmd_spoolss_enum_forms(struct rpc_pipe_client *cli, /* Get a printer handle */ - if (asprintf(&printername, "%s\\%s", cli->srv_name_slash, argv[1]) == -1) { - return WERR_NOMEM; - } + RPCCLIENT_PRINTERNAME(printername, cli, argv[1]); werror = rpccli_spoolss_openprinter_ex(cli, mem_ctx, printername, @@ -1967,8 +1957,6 @@ static WERROR cmd_spoolss_enum_forms(struct rpc_pipe_client *cli, if (got_handle) rpccli_spoolss_ClosePrinter(cli, mem_ctx, &handle, NULL); - SAFE_FREE(printername); - return werror; } @@ -1980,7 +1968,7 @@ static WERROR cmd_spoolss_setprinterdata(struct rpc_pipe_client *cli, int argc, const char **argv) { WERROR result; - fstring printername; + const char *printername; POLICY_HND pol; bool opened_hnd = False; PRINTER_INFO_CTR ctr; @@ -1997,7 +1985,7 @@ static WERROR cmd_spoolss_setprinterdata(struct rpc_pipe_client *cli, goto done; } - slprintf(printername, sizeof(printername)-1, "%s\\%s", cli->srv_name_slash, argv[1]); + RPCCLIENT_PRINTERNAME(printername, cli, argv[1]); value.type = REG_NONE; @@ -2191,7 +2179,7 @@ static WERROR cmd_spoolss_enum_jobs(struct rpc_pipe_client *cli, WERROR result; uint32 level = 1, num_jobs, i; bool got_hnd = False; - char *printername = NULL; + const char *printername; POLICY_HND hnd; JOB_INFO_CTR ctr; @@ -2205,15 +2193,7 @@ static WERROR cmd_spoolss_enum_jobs(struct rpc_pipe_client *cli, /* Open printer handle */ - printername = talloc_asprintf(mem_ctx, "\\\\%s\\", cli->desthost); - if (!printername) { - return WERR_NOMEM; - } - strupper_m(printername); - printername = talloc_asprintf_append(printername, "%s", argv[1]); - if (!printername) { - return WERR_NOMEM; - } + RPCCLIENT_PRINTERNAME(printername, cli, argv[1]); result = rpccli_spoolss_openprinter_ex(cli, mem_ctx, printername, @@ -2263,7 +2243,7 @@ static WERROR cmd_spoolss_enum_data( struct rpc_pipe_client *cli, WERROR result; uint32 i=0, val_needed, data_needed; bool got_hnd = False; - char *printername = NULL; + const char *printername; POLICY_HND hnd; if (argc != 2) { @@ -2273,15 +2253,7 @@ static WERROR cmd_spoolss_enum_data( struct rpc_pipe_client *cli, /* Open printer handle */ - printername = talloc_asprintf(mem_ctx, "\\\\%s\\", cli->desthost); - if (!printername) { - return WERR_NOMEM; - } - strupper_m(printername); - printername = talloc_asprintf_append(printername, "%s", argv[1]); - if (!printername) { - return WERR_NOMEM; - } + RPCCLIENT_PRINTERNAME(printername, cli, argv[1]); result = rpccli_spoolss_openprinter_ex(cli, mem_ctx, printername, @@ -2325,7 +2297,7 @@ static WERROR cmd_spoolss_enum_data_ex( struct rpc_pipe_client *cli, WERROR result; uint32 i; bool got_hnd = False; - char *printername = NULL; + const char *printername; const char *keyname = NULL; POLICY_HND hnd; REGVAL_CTR *ctr = NULL; @@ -2339,15 +2311,7 @@ static WERROR cmd_spoolss_enum_data_ex( struct rpc_pipe_client *cli, /* Open printer handle */ - printername = talloc_asprintf(mem_ctx, "\\\\%s\\", cli->desthost); - if (!printername) { - return WERR_NOMEM; - } - strupper_m(printername); - printername = talloc_asprintf_append(printername, "%s", argv[1]); - if (!printername) { - return WERR_NOMEM; - } + RPCCLIENT_PRINTERNAME(printername, cli, argv[1]); result = rpccli_spoolss_openprinter_ex(cli, mem_ctx, printername, @@ -2390,7 +2354,7 @@ static WERROR cmd_spoolss_enum_printerkey( struct rpc_pipe_client *cli, { WERROR result; bool got_hnd = False; - char *printername = NULL; + const char *printername; const char *keyname = NULL; POLICY_HND hnd; uint16 *keylist = NULL, *curkey; @@ -2407,15 +2371,7 @@ static WERROR cmd_spoolss_enum_printerkey( struct rpc_pipe_client *cli, /* Open printer handle */ - printername = talloc_asprintf(mem_ctx, "\\\\%s\\", cli->desthost); - if (!printername) { - return WERR_NOMEM; - } - strupper_m(printername); - printername = talloc_asprintf_append(printername, "%s", argv[1]); - if (!printername) { - return WERR_NOMEM; - } + RPCCLIENT_PRINTERNAME(printername, cli, argv[1]); result = rpccli_spoolss_openprinter_ex(cli, mem_ctx, printername, @@ -2462,7 +2418,7 @@ static WERROR cmd_spoolss_rffpcnex(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx, int argc, const char **argv) { - fstring servername, printername; + const char *printername; POLICY_HND hnd; bool got_hnd = False; WERROR result; @@ -2476,9 +2432,7 @@ static WERROR cmd_spoolss_rffpcnex(struct rpc_pipe_client *cli, /* Open printer */ - slprintf(printername, sizeof(printername) - 1, "\\\\%s\\%s", - cli->desthost, argv[1]); - strupper_m(printername); + RPCCLIENT_PRINTERNAME(printername, cli, argv[1]); result = rpccli_spoolss_openprinter_ex(cli, mem_ctx, printername, @@ -2519,9 +2473,6 @@ static WERROR cmd_spoolss_rffpcnex(struct rpc_pipe_client *cli, /* Send rffpcnex */ - slprintf(servername, sizeof(servername) - 1, "\\\\%s", myhostname()); - strupper_m(servername); - result = rpccli_spoolss_rffpcnex( cli, mem_ctx, &hnd, 0, 0, cli->srv_name_slash, 123, &option); @@ -2642,7 +2593,7 @@ static WERROR cmd_spoolss_printercmp(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx, int argc, const char **argv) { - fstring printername, servername1, servername2; + const char *printername; char *printername_path = NULL; struct cli_state *cli_server2 = NULL; struct rpc_pipe_client *cli2 = NULL; @@ -2655,16 +2606,9 @@ static WERROR cmd_spoolss_printercmp(struct rpc_pipe_client *cli, return WERR_OK; } - fstrcpy( printername, argv[1] ); - - fstrcpy( servername1, cli->desthost ); - fstrcpy( servername2, argv[2] ); - strupper_m( servername1 ); - strupper_m( servername2 ); - /* first get the connection to the remote server */ - nt_status = cli_full_connection(&cli_server2, global_myname(), servername2, + nt_status = cli_full_connection(&cli_server2, global_myname(), argv[2], NULL, 0, "IPC$", "IPC", get_cmdline_auth_info_username(rpcclient_auth_info), @@ -2680,19 +2624,14 @@ static WERROR cmd_spoolss_printercmp(struct rpc_pipe_client *cli, &cli2); if (!NT_STATUS_IS_OK(nt_status)) { printf("failed to open spoolss pipe on server %s (%s)\n", - servername2, nt_errstr(nt_status)); + argv[2], nt_errstr(nt_status)); return WERR_GENERAL_FAILURE; } /* now open up both printers */ - printername_path = talloc_asprintf(mem_ctx, - "\\\\%s\\%s", - servername1, - printername); - if (!printername_path) { - return WERR_NOMEM; - } + RPCCLIENT_PRINTERNAME(printername_path, cli, printername); + printf("Opening %s...", printername_path); werror = rpccli_spoolss_openprinter_ex(cli, mem_ctx, @@ -2705,13 +2644,8 @@ static WERROR cmd_spoolss_printercmp(struct rpc_pipe_client *cli, } printf("ok\n"); - printername_path = talloc_asprintf(mem_ctx, - "\\\\%s\\%s", - servername2, - printername); - if (!printername_path) { - return WERR_NOMEM; - } + RPCCLIENT_PRINTERNAME(printername_path, cli2, printername); + printf("Opening %s...", printername_path); werror = rpccli_spoolss_openprinter_ex(cli2, mem_ctx, printername_path, -- cgit