X-Git-Url: http://git.ipfire.org/?a=blobdiff_plain;f=berkeley%2Flprm.c;h=e07eb22259b8022fa49d611d9c05445556838c6f;hb=4d301e694f72b03ab2b6c8189387bd7076a3a2ea;hp=41f35ca12621df29724c11f5ae4a86ee9a640aad;hpb=8ca02f3c0539293422509d03219786fb6d7db48b;p=thirdparty%2Fcups.git diff --git a/berkeley/lprm.c b/berkeley/lprm.c index 41f35ca12..e07eb2225 100644 --- a/berkeley/lprm.c +++ b/berkeley/lprm.c @@ -1,25 +1,16 @@ /* - * "$Id: lprm.c 5719 2006-07-11 21:04:48Z mike $" + * "$Id: lprm.c 7261 2008-01-28 23:09:31Z mike $" * * "lprm" command for the Common UNIX Printing System (CUPS). * + * Copyright 2007-2009 by Apple Inc. * Copyright 1997-2006 by Easy Software Products. * * These coded instructions, statements, and computer programs are the - * property of Easy Software Products and are protected by Federal - * copyright law. Distribution and use rights are outlined in the file - * "LICENSE.txt" which should have been included with this file. If this - * file is missing or damaged please contact Easy Software Products - * at: - * - * Attn: CUPS Licensing Information - * Easy Software Products - * 44141 Airport View Drive, Suite 204 - * Hollywood, Maryland 20636 USA - * - * Voice: (301) 373-9600 - * EMail: cups-info@cups.org - * WWW: http://www.cups.org + * property of Apple Inc. and are protected by Federal copyright + * law. Distribution and use rights are outlined in the file "LICENSE.txt" + * which should have been included with this file. If this file is + * file is missing or damaged, see the license at "http://www.cups.org/". * * Contents: * @@ -46,47 +37,24 @@ int /* O - Exit status */ main(int argc, /* I - Number of command-line arguments */ char *argv[]) /* I - Command-line arguments */ { - http_t *http; /* HTTP connection to server */ int i; /* Looping var */ int job_id; /* Job ID */ - const char *dest; /* Destination printer */ + const char *name; /* Destination printer */ char *instance; /* Pointer to instance name */ - char uri[1024]; /* Printer or job URI */ - ipp_t *request; /* IPP request */ - ipp_t *response; /* IPP response */ - ipp_op_t op; /* Operation */ - cups_lang_t *language; /* Language */ - int num_dests; /* Number of destinations */ - cups_dest_t *dests, /* Destinations */ + cups_dest_t *dest, /* Destination */ *defdest; /* Default destination */ - http_encryption_t encryption; /* Encryption? */ - + int did_cancel; /* Did we cancel something? */ - /* - * Setup to cancel individual print jobs... - */ - op = IPP_CANCEL_JOB; - job_id = 0; - dest = NULL; - response = NULL; - http = NULL; - encryption = cupsEncryption(); - language = cupsLangDefault(); + _cupsSetLocale(argv); /* - * Open a connection to the server... + * Setup to cancel individual print jobs... */ - if ((http = httpConnectEncrypt(cupsServer(), ippPort(), encryption)) == NULL) - { - _cupsLangPuts(stderr, _("lprm: Unable to contact server!\n")); - return (1); - } - - num_dests = cupsGetDests2(http, &dests); - defdest = cupsGetDest(NULL, NULL, num_dests, dests); - dest = defdest ? defdest->name : NULL; + did_cancel = 0; + defdest = cupsGetNamedDest(CUPS_HTTP_DEFAULT, NULL, NULL); + name = defdest ? defdest->name : NULL; /* * Process command-line arguments... @@ -98,38 +66,36 @@ main(int argc, /* I - Number of command-line arguments */ { case 'E' : /* Encrypt */ #ifdef HAVE_SSL - encryption = HTTP_ENCRYPT_REQUIRED; - - httpEncryption(http, encryption); - cupsSetEncryption(encryption); + cupsSetEncryption(HTTP_ENCRYPT_REQUIRED); #else _cupsLangPrintf(stderr, - _("%s: Sorry, no encryption support compiled in!\n"), + _("%s: Sorry, no encryption support compiled in\n"), argv[0]); #endif /* HAVE_SSL */ break; case 'P' : /* Cancel jobs on a printer */ if (argv[i][2]) - dest = argv[i] + 2; + name = argv[i] + 2; else { i ++; - dest = argv[i]; + name = argv[i]; } - if ((instance = strchr(dest, '/')) != NULL) + if ((instance = strchr(name, '/')) != NULL) *instance = '\0'; - if (cupsGetDest(dest, NULL, num_dests, dests) == NULL) + if ((dest = cupsGetNamedDest(CUPS_HTTP_DEFAULT, name, + NULL)) == NULL) { _cupsLangPrintf(stderr, - _("%s: Error - unknown destination \"%s\"!\n"), - argv[0], dest); - cupsFreeDests(num_dests, dests); - httpClose(http); - return(1); + _("%s: Error - unknown destination \"%s\"\n"), + argv[0], name); + goto error; } + + cupsFreeDests(1, dest); break; case 'U' : /* Username */ @@ -142,9 +108,9 @@ main(int argc, /* I - Number of command-line arguments */ { _cupsLangPrintf(stderr, _("%s: Error - expected username after " - "\'-U\' option!\n"), + "\'-U\' option\n"), argv[0]); - return (1); + goto error; } cupsSetUser(argv[i]); @@ -162,36 +128,26 @@ main(int argc, /* I - Number of command-line arguments */ { _cupsLangPrintf(stderr, _("%s: Error - expected hostname after " - "\'-h\' option!\n"), + "\'-h\' option\n"), argv[0]); - return (1); + goto error; } else cupsSetServer(argv[i]); } - httpClose(http); - cupsFreeDests(num_dests, dests); + if (defdest) + cupsFreeDests(1, defdest); - if ((http = httpConnectEncrypt(cupsServer(), ippPort(), - encryption)) == NULL) - { - _cupsLangPuts(stderr, _("lprm: Unable to contact server!\n")); - return (1); - } - - num_dests = cupsGetDests2(http, &dests); - defdest = cupsGetDest(NULL, NULL, num_dests, dests); - dest = defdest ? defdest->name : NULL; + defdest = cupsGetNamedDest(CUPS_HTTP_DEFAULT, NULL, NULL); + name = defdest ? defdest->name : NULL; break; default : _cupsLangPrintf(stderr, - _("%s: Error - unknown option \'%c\'!\n"), + _("%s: Error - unknown option \'%c\'\n"), argv[0], argv[i][1]); - cupsFreeDests(num_dests, dests); - httpClose(http); - return (1); + goto error; } else { @@ -199,11 +155,17 @@ main(int argc, /* I - Number of command-line arguments */ * Cancel a job or printer... */ - if (isdigit(argv[i][0] & 255) && - cupsGetDest(argv[i], NULL, num_dests, dests) == NULL) + if ((dest = cupsGetNamedDest(CUPS_HTTP_DEFAULT, argv[i], NULL)) != NULL) + cupsFreeDests(1, dest); + + if (dest) + { + name = argv[i]; + job_id = 0; + } + else if (isdigit(argv[i][0] & 255)) { - dest = NULL; - op = IPP_CANCEL_JOB; + name = NULL; job_id = atoi(argv[i]); } else if (!strcmp(argv[i], "-")) @@ -212,87 +174,54 @@ main(int argc, /* I - Number of command-line arguments */ * Cancel all jobs */ - op = IPP_PURGE_JOBS; + job_id = -1; } else { - dest = argv[i]; - job_id = 0; + _cupsLangPrintf(stderr, + _("%s: Error - unknown destination \"%s\"\n"), + argv[0], argv[i]); + goto error; } - /* - * Build an IPP request, which requires the following - * attributes: - * - * attributes-charset - * attributes-natural-language - * printer-uri + job-id *or* job-uri - * [requesting-user-name] - */ - - request = ippNewRequest(op); - - if (dest) - { - httpAssembleURIf(HTTP_URI_CODING_ALL, uri, sizeof(uri), "ipp", NULL, - "localhost", 0, "/printers/%s", dest); - ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, - "printer-uri", NULL, uri); - ippAddInteger(request, IPP_TAG_OPERATION, IPP_TAG_INTEGER, "job-id", - job_id); - } - else - { - sprintf(uri, "ipp://localhost/jobs/%d", job_id); - ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "job-uri", NULL, - uri); - } - - ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, - "requesting-user-name", NULL, cupsUser()); - - /* - * Do the request and get back a response... - */ - - if (op == IPP_PURGE_JOBS) - response = cupsDoRequest(http, request, "/admin/"); - else - response = cupsDoRequest(http, request, "/jobs/"); - - ippDelete(response); - - if (cupsLastError() > IPP_OK_CONFLICT) + if (cupsCancelJob2(CUPS_HTTP_DEFAULT, name, job_id, 0) != IPP_OK) { _cupsLangPrintf(stderr, "%s: %s\n", argv[0], cupsLastErrorString()); - - cupsFreeDests(num_dests, dests); - httpClose(http); - return (1); + goto error; } + + did_cancel = 1; } /* - * If nothing has been cancelled yet, cancel the current job on the specified + * If nothing has been canceled yet, cancel the current job on the specified * (or default) printer... */ - if (response == NULL) - if (!cupsCancelJob(dest, 0)) + if (!did_cancel && cupsCancelJob2(CUPS_HTTP_DEFAULT, name, 0, 0) != IPP_OK) { _cupsLangPrintf(stderr, "%s: %s\n", argv[0], cupsLastErrorString()); - cupsFreeDests(num_dests, dests); - httpClose(http); - return (1); + goto error; } - cupsFreeDests(num_dests, dests); - httpClose(http); + if (defdest) + cupsFreeDests(1, defdest); return (0); + + /* + * If we get here there was an error, so clean up... + */ + + error: + + if (defdest) + cupsFreeDests(1, defdest); + + return (1); } /* - * End of "$Id: lprm.c 5719 2006-07-11 21:04:48Z mike $". + * End of "$Id: lprm.c 7261 2008-01-28 23:09:31Z mike $". */