From fe724c70d2b8b916cb7ca77b7370d77e8e5b80de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=BCnther=20Deschner?= Date: Sat, 2 Oct 2010 22:14:37 +0200 Subject: s3-spoolss: fix set_printer_hnd_name() to match torture test. Guenther --- source3/rpc_server/srv_spoolss_nt.c | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) (limited to 'source3/rpc_server') diff --git a/source3/rpc_server/srv_spoolss_nt.c b/source3/rpc_server/srv_spoolss_nt.c index c05ba66e427..e63c63e1c55 100644 --- a/source3/rpc_server/srv_spoolss_nt.c +++ b/source3/rpc_server/srv_spoolss_nt.c @@ -586,16 +586,22 @@ static bool set_printer_hnd_name(TALLOC_CTX *mem_ctx, DEBUGADD(5, ("searching for [%s]\n", aprinter)); - if ((p = strchr(aprinter, ',')) != NULL) { - if (*p == ' ') + p = strchr(aprinter, ','); + if (p != NULL) { + char *p2 = p; + p++; + if (*p == ' ') { p++; - if (strnequal(p+1, "DrvConvert", strlen("DrvConvert")) || - strnequal(p+1, " DrvConvert", strlen(" DrvConvert"))) { - *p = '\0'; - } else if (strnequal(p+1, "LocalOnly", strlen("LocalOnly")) || - strnequal(p+1, " LocalOnly", strlen(" LocalOnly"))) { - *p = '\0'; } + if (strncmp(p, "DrvConvert", strlen("DrvConvert")) == 0) { + *p2 = '\0'; + } else if (strncmp(p, "LocalOnly", strlen("LocalOnly")) == 0) { + *p2 = '\0'; + } + } + + if (p) { + DEBUGADD(5, ("stripped handlename: [%s]\n", aprinter)); } /* check for the Port Monitor Interface */ @@ -1691,7 +1697,7 @@ WERROR _spoolss_OpenPrinterEx(struct pipes_struct *p, DEBUG(0,("_spoolss_OpenPrinterEx: Cannot open a printer handle " "for printer %s\n", r->in.printername)); ZERO_STRUCTP(r->out.handle); - return WERR_INVALID_PARAM; + return WERR_INVALID_PRINTER_NAME; } Printer = find_printer_index_by_hnd(p, r->out.handle); -- cgit v1.2.1