r5359: BUG 2333: use the lpq command to pass in the correct printer name for cups_que...
authorGerald Carter <jerry@samba.org>
Sat, 12 Feb 2005 14:41:00 +0000 (14:41 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 15:55:39 +0000 (10:55 -0500)
(This used to be commit 3eee00e0d0e9b58cdd35209691072b625813681c)

source3/param/loadparm.c
source3/printing/print_cups.c

index 45245e2cfe5b6c8ec313157c5a7ba60dfd48093d..80843eda829a3cec75b6da2e036bfb01d87c9ff3 100644 (file)
@@ -1226,7 +1226,9 @@ static void init_printer_values(service *pService)
 
                case PRINT_CUPS:
 #ifdef HAVE_CUPS
-                       string_set(&pService->szLpqcommand, "");
+                       /* set the lpq command to contain the destination printer
+                          name only.  This is used by cups_queue_get() */
+                       string_set(&pService->szLpqcommand, "%p");
                        string_set(&pService->szLprmcommand, "");
                        string_set(&pService->szPrintcommand, "");
                        string_set(&pService->szLppausecommand, "");
index 59ab41b9f6750b5fe9fa365e0260859fef56348d..e6064564dc81589c68e4de7e47f573a9548aa7eb 100644 (file)
@@ -670,12 +670,13 @@ static int cups_job_submit(int snum, struct printjob *pjob)
  * 'cups_queue_get()' - Get all the jobs in the print queue.
  */
 
-static int cups_queue_get(const char *printer_name,
+static int cups_queue_get(const char *sharename,
                enum printing_types printing_type,
                char *lpq_command,
                print_queue_struct **q, 
                print_status_struct *status)
 {
+       fstring         printername;
        http_t          *http = NULL;           /* HTTP connection to server */
        ipp_t           *request = NULL,        /* IPP Request */
                        *response = NULL;       /* IPP Response */
@@ -711,7 +712,15 @@ static int cups_queue_get(const char *printer_name,
 
        *q = NULL;
 
-       DEBUG(5,("cups_queue_get(%s, %p, %p)\n", printer_name, q, status));
+       /* HACK ALERT!!!  The porblem with support the 'printer name' 
+          option is that we key the tdb off the sharename.  So we will 
+          overload the lpq_command string to pass in the printername 
+          (which is basically what we do for non-cups printers ... using 
+          the lpq_command to get the queue listing). */
+
+       fstrcpy( printername, lpq_command );
+
+       DEBUG(5,("cups_queue_get(%s, %p, %p)\n", printername, q, status));
 
        /*
         * Make sure we don't ask for passwords...
@@ -733,7 +742,7 @@ static int cups_queue_get(const char *printer_name,
         * Generate the printer URI...
        */
 
-       slprintf(uri, sizeof(uri) - 1, "ipp://localhost/printers/%s", printer_name);
+       slprintf(uri, sizeof(uri) - 1, "ipp://localhost/printers/%s", printername);
 
        /*
        * Build an IPP_GET_JOBS request, which requires the following
@@ -936,14 +945,14 @@ static int cups_queue_get(const char *printer_name,
        */
 
        if ((response = cupsDoRequest(http, request, "/")) == NULL) {
-               DEBUG(0,("Unable to get printer status for %s - %s\n", printer_name,
+               DEBUG(0,("Unable to get printer status for %s - %s\n", printername,
                         ippErrorString(cupsLastError())));
                *q = queue;
                goto out;
        }
 
        if (response->request.status.status_code >= IPP_OK_CONFLICT) {
-               DEBUG(0,("Unable to get printer status for %s - %s\n", printer_name,
+               DEBUG(0,("Unable to get printer status for %s - %s\n", printername,
                         ippErrorString(response->request.status.status_code)));
                *q = queue;
                goto out;