diff options
author | Gerald Carter <jerry@samba.org> | 2003-08-19 16:56:53 +0000 |
---|---|---|
committer | Gerald Carter <jerry@samba.org> | 2003-08-19 16:56:53 +0000 |
commit | 5ba60c560801eb85b5328ecaf52d82fc2b8dbc72 (patch) | |
tree | 1f96357c95606efbddf2bbaa013e432df28b91c3 /source3 | |
parent | d125c31d2ef6e778f8e507ab21bdd2e47534caa1 (diff) | |
download | samba-5ba60c560801eb85b5328ecaf52d82fc2b8dbc72.tar.gz samba-5ba60c560801eb85b5328ecaf52d82fc2b8dbc72.tar.bz2 samba-5ba60c560801eb85b5328ecaf52d82fc2b8dbc72.zip |
working on fix for BUG #294. Not done yet, but this at least clears
up some of the false positives in "rpcclient -c getdriver".
Also make sure that we ask for version2 and 3 drivers on x86.
(This used to be commit 5be51515680da910b623f486108d91f9ea914bd2)
Diffstat (limited to 'source3')
-rw-r--r-- | source3/rpc_client/cli_spoolss.c | 4 | ||||
-rw-r--r-- | source3/rpcclient/cmd_spoolss.c | 18 |
2 files changed, 17 insertions, 5 deletions
diff --git a/source3/rpc_client/cli_spoolss.c b/source3/rpc_client/cli_spoolss.c index f983f63cd7..8f5f2413de 100644 --- a/source3/rpc_client/cli_spoolss.c +++ b/source3/rpc_client/cli_spoolss.c @@ -720,7 +720,7 @@ WERROR cli_spoolss_getprinterdriver(struct cli_state *cli, TALLOC_CTX *mem_ctx, uint32 offered, uint32 *needed, POLICY_HND *pol, uint32 level, - const char *env, PRINTER_DRIVER_CTR *ctr) + const char *env, int version, PRINTER_DRIVER_CTR *ctr) { prs_struct qbuf, rbuf; SPOOL_Q_GETPRINTERDRIVER2 q; @@ -742,7 +742,7 @@ WERROR cli_spoolss_getprinterdriver(struct cli_state *cli, prs_init(&qbuf, MAX_PDU_FRAG_LEN, mem_ctx, MARSHALL); prs_init(&rbuf, 0, mem_ctx, UNMARSHALL); - make_spoolss_q_getprinterdriver2(&q, pol, env, level, 2, 2, + make_spoolss_q_getprinterdriver2(&q, pol, env, level, version, 2, &buffer, offered); /* Marshall data and send request */ diff --git a/source3/rpcclient/cmd_spoolss.c b/source3/rpcclient/cmd_spoolss.c index d2e62ac3a3..61e100c03b 100644 --- a/source3/rpcclient/cmd_spoolss.c +++ b/source3/rpcclient/cmd_spoolss.c @@ -35,6 +35,7 @@ static const struct table_node archi_table[]= { {"Windows 4.0", "WIN40", 0 }, {"Windows NT x86", "W32X86", 2 }, + {"Windows NT x86", "W32X86", 3 }, {"Windows NT R4000", "W32MIPS", 2 }, {"Windows NT Alpha_AXP", "W32ALPHA", 2 }, {"Windows NT PowerPC", "W32PPC", 2 }, @@ -936,6 +937,7 @@ static WERROR cmd_spoolss_getdriver(struct cli_state *cli, servername, user; uint32 i; + BOOL success = False; if ((argc == 1) || (argc > 3)) { @@ -971,15 +973,22 @@ static WERROR cmd_spoolss_getdriver(struct cli_state *cli, werror = cli_spoolss_getprinterdriver( cli, mem_ctx, 0, &needed, &pol, info_level, - archi_table[i].long_archi, &ctr); + archi_table[i].long_archi, archi_table[i].version, + &ctr); - if (W_ERROR_V(werror) == ERRinsufficientbuffer) + if (W_ERROR_V(werror) == ERRinsufficientbuffer) { werror = cli_spoolss_getprinterdriver( cli, mem_ctx, needed, NULL, &pol, info_level, - archi_table[i].long_archi, &ctr); + archi_table[i].long_archi, archi_table[i].version, + &ctr); + } if (!W_ERROR_IS_OK(werror)) continue; + + /* need at least one success */ + + success = True; printf ("\n[%s]\n", archi_table[i].long_archi); @@ -1004,6 +1013,9 @@ static WERROR cmd_spoolss_getdriver(struct cli_state *cli, if (opened_hnd) cli_spoolss_close_printer (cli, mem_ctx, &pol); + if ( success ) + werror = WERR_OK; + return werror; } |