diff options
author | msweet <msweet@a1ca3aef-8c08-0410-bb20-df032aa958be> | 2011-05-11 05:36:13 +0000 |
---|---|---|
committer | msweet <msweet@a1ca3aef-8c08-0410-bb20-df032aa958be> | 2011-05-11 05:36:13 +0000 |
commit | eac3a0a01bf37d95f4129b28296cb697c54b2613 (patch) | |
tree | a209bfa09edda04d8a339b869b4d5ce3057d8bbe /systemv/lpadmin.c | |
parent | 22c9029b44a790ba1ee894027431dcea1ec2aeab (diff) | |
download | cups-eac3a0a01bf37d95f4129b28296cb697c54b2613.tar.gz |
Merge changes from CUPS 1.5svn-r9763.
git-svn-id: svn+ssh://src.apple.com/svn/cups/easysw/current@3242 a1ca3aef-8c08-0410-bb20-df032aa958be
Diffstat (limited to 'systemv/lpadmin.c')
-rw-r--r-- | systemv/lpadmin.c | 431 |
1 files changed, 284 insertions, 147 deletions
diff --git a/systemv/lpadmin.c b/systemv/lpadmin.c index b2337167c..4794240b2 100644 --- a/systemv/lpadmin.c +++ b/systemv/lpadmin.c @@ -19,7 +19,9 @@ * default_printer() - Set the default printing destination. * delete_printer() - Delete a printer from the system. * delete_printer_from_class() - Delete a printer from a class. + * delete_printer_option() - Delete a printer option. * enable_printer() - Enable a printer. + * get_printer_type() - Determine the printer type and URI. * set_printer_options() - Set the printer options and/or file. * validate_name() - Make sure the printer name only contains * valid chars. @@ -36,16 +38,20 @@ * Local functions... */ -static int add_printer_to_class(http_t *http, char *printer, char *pclass); -static int default_printer(http_t *http, char *printer); -static int delete_printer(http_t *http, char *printer); -static int delete_printer_from_class(http_t *http, char *printer, - char *pclass); -static int enable_printer(http_t *http, char *printer); -static int set_printer_options(http_t *http, char *printer, - int num_options, cups_option_t *options, - char *file); -static int validate_name(const char *name); +static int add_printer_to_class(http_t *http, char *printer, char *pclass); +static int default_printer(http_t *http, char *printer); +static int delete_printer(http_t *http, char *printer); +static int delete_printer_from_class(http_t *http, char *printer, + char *pclass); +static int delete_printer_option(http_t *http, char *printer, + char *option); +static int enable_printer(http_t *http, char *printer); +static cups_ptype_t get_printer_type(http_t *http, char *printer, char *uri, + size_t urisize); +static int set_printer_options(http_t *http, char *printer, + int num_options, cups_option_t *options, + char *file); +static int validate_name(const char *name); /* @@ -375,6 +381,51 @@ main(int argc, /* I - Number of command-line arguments */ return (1); break; + case 'R' : /* Remove option */ + if (!http) + { + http = httpConnectEncrypt(cupsServer(), ippPort(), + cupsEncryption()); + + if (http == NULL) + { + _cupsLangPrintf(stderr, + _("lpadmin: Unable to connect to server: %s"), + strerror(errno)); + return (1); + } + } + + if (printer == NULL) + { + _cupsLangPuts(stderr, + _("lpadmin: Unable to delete option:\n" + " You must specify a printer name " + "first.")); + return (1); + } + + if (argv[i][2]) + val = argv[i] + 2; + else + { + i ++; + + if (i >= argc) + { + _cupsLangPuts(stderr, + _("lpadmin: Expected name after \"-R\" " + "option.")); + return (1); + } + + val = argv[i]; + } + + if (delete_printer_option(http, printer, val)) + return (1); + break; + case 'U' : /* Username */ if (argv[i][2] != '\0') cupsSetUser(argv[i] + 2); @@ -661,6 +712,7 @@ add_printer_to_class(http_t *http, /* I - Server connection */ * attributes-charset * attributes-natural-language * printer-uri + * requesting-user-name */ request = ippNewRequest(IPP_GET_PRINTER_ATTRIBUTES); @@ -669,6 +721,8 @@ add_printer_to_class(http_t *http, /* I - Server connection */ "localhost", 0, "/classes/%s", pclass); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri); + ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", + NULL, cupsUser()); /* * Do the request and get back a response... @@ -677,26 +731,30 @@ add_printer_to_class(http_t *http, /* I - Server connection */ response = cupsDoRequest(http, request, "/"); /* - * Build a CUPS_ADD_CLASS request, which requires the following + * Build a CUPS_ADD_MODIFY_CLASS request, which requires the following * attributes: * * attributes-charset * attributes-natural-language * printer-uri + * requesting-user-name * member-uris */ - request = ippNewRequest(CUPS_ADD_CLASS); + request = ippNewRequest(CUPS_ADD_MODIFY_CLASS); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri); + ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", + NULL, cupsUser()); /* * See if the printer is already in the class... */ if (response != NULL && - (members = ippFindAttribute(response, "member-names", IPP_TAG_NAME)) != NULL) + (members = ippFindAttribute(response, "member-names", + IPP_TAG_NAME)) != NULL) for (i = 0; i < members->num_values; i ++) if (strcasecmp(printer, members->values[i].string.text) == 0) { @@ -716,7 +774,8 @@ add_printer_to_class(http_t *http, /* I - Server connection */ "localhost", 0, "/printers/%s", printer); if (response != NULL && - (members = ippFindAttribute(response, "member-uris", IPP_TAG_URI)) != NULL) + (members = ippFindAttribute(response, "member-uris", + IPP_TAG_URI)) != NULL) { /* * Add the printer to the existing list... @@ -725,7 +784,8 @@ add_printer_to_class(http_t *http, /* I - Server connection */ attr = ippAddStrings(request, IPP_TAG_PRINTER, IPP_TAG_URI, "member-uris", members->num_values + 1, NULL, NULL); for (i = 0; i < members->num_values; i ++) - attr->values[i].string.text = _cupsStrAlloc(members->values[i].string.text); + attr->values[i].string.text = + _cupsStrAlloc(members->values[i].string.text); attr->values[i].string.text = _cupsStrAlloc(uri); } @@ -739,26 +799,15 @@ add_printer_to_class(http_t *http, /* I - Server connection */ ippDelete(response); - if ((response = cupsDoRequest(http, request, "/admin/")) == NULL) - { - _cupsLangPrintf(stderr, "lpadmin: %s", cupsLastErrorString()); - - return (1); - } - else if (response->request.status.status_code > IPP_OK_CONFLICT) + ippDelete(cupsDoRequest(http, request, "/admin/")); + if (cupsLastError() > IPP_OK_CONFLICT) { - _cupsLangPrintf(stderr, "lpadmin: %s", cupsLastErrorString()); - - ippDelete(response); + _cupsLangPrintf(stderr, _("%s: %s"), "lpadmin", cupsLastErrorString()); return (1); } else - { - ippDelete(response); - return (0); - } } @@ -770,8 +819,7 @@ static int /* O - 0 on success, 1 on fail */ default_printer(http_t *http, /* I - Server connection */ char *printer) /* I - Printer name */ { - ipp_t *request, /* IPP Request */ - *response; /* IPP Response */ + ipp_t *request; /* IPP Request */ char uri[HTTP_MAX_URI]; /* URI for printer/class */ @@ -784,6 +832,7 @@ default_printer(http_t *http, /* I - Server connection */ * attributes-charset * attributes-natural-language * printer-uri + * requesting-user-name */ httpAssembleURIf(HTTP_URI_CODING_ALL, uri, sizeof(uri), "ipp", NULL, @@ -793,31 +842,23 @@ default_printer(http_t *http, /* I - Server connection */ ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-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 ((response = cupsDoRequest(http, request, "/admin/")) == NULL) - { - _cupsLangPrintf(stderr, "lpadmin: %s", cupsLastErrorString()); + ippDelete(cupsDoRequest(http, request, "/admin/")); - return (1); - } - else if (response->request.status.status_code > IPP_OK_CONFLICT) + if (cupsLastError() > IPP_OK_CONFLICT) { - _cupsLangPrintf(stderr, "lpadmin: %s", cupsLastErrorString()); - - ippDelete(response); + _cupsLangPrintf(stderr, _("%s: %s"), "lpadmin", cupsLastErrorString()); return (1); } else - { - ippDelete(response); - return (0); - } } @@ -829,8 +870,7 @@ static int /* O - 0 on success, 1 on fail */ delete_printer(http_t *http, /* I - Server connection */ char *printer) /* I - Printer to delete */ { - ipp_t *request, /* IPP Request */ - *response; /* IPP Response */ + ipp_t *request; /* IPP Request */ char uri[HTTP_MAX_URI]; /* URI for printer/class */ @@ -843,6 +883,7 @@ delete_printer(http_t *http, /* I - Server connection */ * attributes-charset * attributes-natural-language * printer-uri + * requesting-user-name */ request = ippNewRequest(CUPS_DELETE_PRINTER); @@ -851,31 +892,23 @@ delete_printer(http_t *http, /* I - Server connection */ "localhost", 0, "/printers/%s", printer); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-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 ((response = cupsDoRequest(http, request, "/admin/")) == NULL) - { - _cupsLangPrintf(stderr, "lpadmin: %s", cupsLastErrorString()); + ippDelete(cupsDoRequest(http, request, "/admin/")); - return (1); - } - else if (response->request.status.status_code > IPP_OK_CONFLICT) + if (cupsLastError() > IPP_OK_CONFLICT) { - _cupsLangPrintf(stderr, "lpadmin: %s", cupsLastErrorString()); - - ippDelete(response); + _cupsLangPrintf(stderr, _("%s: %s"), "lpadmin", cupsLastErrorString()); return (1); } else - { - ippDelete(response); - return (0); - } } @@ -907,6 +940,7 @@ delete_printer_from_class( * attributes-charset * attributes-natural-language * printer-uri + * requesting-user-name */ request = ippNewRequest(IPP_GET_PRINTER_ATTRIBUTES); @@ -915,6 +949,8 @@ delete_printer_from_class( "localhost", 0, "/classes/%s", pclass); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri); + ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, "requesting-user-name", + NULL, cupsUser()); /* * Do the request and get back a response... @@ -923,7 +959,7 @@ delete_printer_from_class( if ((response = cupsDoRequest(http, request, "/classes/")) == NULL || response->request.status.status_code == IPP_NOT_FOUND) { - _cupsLangPrintf(stderr, "lpadmin: %s", cupsLastErrorString()); + _cupsLangPrintf(stderr, _("%s: %s"), "lpadmin", cupsLastErrorString()); ippDelete(response); @@ -967,29 +1003,35 @@ delete_printer_from_class( * attributes-charset * attributes-natural-language * printer-uri + * requesting-user-name */ request = ippNewRequest(CUPS_DELETE_CLASS); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri); + ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, + "requesting-user-name", NULL, cupsUser()); } else { /* - * Build a CUPS_ADD_CLASS request, which requires the following + * Build a CUPS_ADD_MODIFY_CLASS request, which requires the following * attributes: * * attributes-charset * attributes-natural-language * printer-uri + * requesting-user-name * member-uris */ - request = ippNewRequest(CUPS_ADD_CLASS); + request = ippNewRequest(CUPS_ADD_MODIFY_CLASS); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri); + ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, + "requesting-user-name", NULL, cupsUser()); /* * Delete the printer from the class... @@ -1011,26 +1053,69 @@ delete_printer_from_class( ippDelete(response); - if ((response = cupsDoRequest(http, request, "/admin/")) == NULL) + ippDelete(cupsDoRequest(http, request, "/admin/")); + + if (cupsLastError() > IPP_OK_CONFLICT) { - _cupsLangPrintf(stderr, "lpadmin: %s", cupsLastErrorString()); + _cupsLangPrintf(stderr, _("%s: %s"), "lpadmin", cupsLastErrorString()); return (1); } - else if (response->request.status.status_code > IPP_OK_CONFLICT) - { - _cupsLangPrintf(stderr, "lpadmin: %s", cupsLastErrorString()); + else + return (0); +} - ippDelete(response); - return (1); - } +/* + * 'delete_printer_option()' - Delete a printer option. + */ + +static int /* O - 0 on success, 1 on fail */ +delete_printer_option(http_t *http, /* I - Server connection */ + char *printer, /* I - Printer */ + char *option) /* I - Option to delete */ +{ + ipp_t *request; /* IPP request */ + char uri[HTTP_MAX_URI]; /* URI for printer/class */ + + + /* + * Build a CUPS_ADD_MODIFY_PRINTER or CUPS_ADD_MODIFY_CLASS request, which + * requires the following attributes: + * + * attributes-charset + * attributes-natural-language + * printer-uri + * requesting-user-name + * option with deleteAttr tag + */ + + if (get_printer_type(http, printer, uri, sizeof(uri)) & + (CUPS_PRINTER_CLASS | CUPS_PRINTER_IMPLICIT)) + request = ippNewRequest(CUPS_ADD_MODIFY_CLASS); else + request = ippNewRequest(CUPS_ADD_MODIFY_PRINTER); + + ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, + "printer-uri", NULL, uri); + ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, + "requesting-user-name", NULL, cupsUser()); + ippAddInteger(request, IPP_TAG_PRINTER, IPP_TAG_DELETEATTR, option, 0); + + /* + * Do the request and get back a response... + */ + + ippDelete(cupsDoRequest(http, request, "/admin/")); + + if (cupsLastError() > IPP_OK_CONFLICT) { - ippDelete(response); + _cupsLangPrintf(stderr, _("%s: %s"), "lpadmin", cupsLastErrorString()); - return (0); + return (1); } + else + return (0); } @@ -1042,60 +1127,113 @@ static int /* O - 0 on success, 1 on fail */ enable_printer(http_t *http, /* I - Server connection */ char *printer) /* I - Printer to enable */ { - ipp_t *request, /* IPP Request */ - *response; /* IPP Response */ + ipp_t *request; /* IPP Request */ char uri[HTTP_MAX_URI]; /* URI for printer/class */ DEBUG_printf(("enable_printer(%p, \"%s\")\n", http, printer)); /* - * Build a CUPS_ADD_PRINTER request, which requires the following - * attributes: + * Build a CUPS_ADD_MODIFY_PRINTER or CUPS_ADD_MODIFY_CLASS request, which + * require the following attributes: * * attributes-charset * attributes-natural-language * printer-uri + * requesting-user-name * printer-state * printer-is-accepting-jobs */ - request = ippNewRequest(CUPS_ADD_PRINTER); + if (get_printer_type(http, printer, uri, sizeof(uri)) & + (CUPS_PRINTER_CLASS | CUPS_PRINTER_IMPLICIT)) + request = ippNewRequest(CUPS_ADD_MODIFY_CLASS); + else + request = ippNewRequest(CUPS_ADD_MODIFY_PRINTER); - httpAssembleURIf(HTTP_URI_CODING_ALL, uri, sizeof(uri), "ipp", NULL, - "localhost", 0, "/printers/%s", printer); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri); - + ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, + "requesting-user-name", NULL, cupsUser()); ippAddInteger(request, IPP_TAG_PRINTER, IPP_TAG_ENUM, "printer-state", IPP_PRINTER_IDLE); - ippAddBoolean(request, IPP_TAG_PRINTER, "printer-is-accepting-jobs", 1); /* * Do the request and get back a response... */ - if ((response = cupsDoRequest(http, request, "/admin/")) == NULL) - { - _cupsLangPrintf(stderr, "lpadmin: %s", cupsLastErrorString()); + ippDelete(cupsDoRequest(http, request, "/admin/")); - return (1); - } - else if (response->request.status.status_code > IPP_OK_CONFLICT) + if (cupsLastError() > IPP_OK_CONFLICT) { - _cupsLangPrintf(stderr, "lpadmin: %s", cupsLastErrorString()); - - ippDelete(response); + _cupsLangPrintf(stderr, _("%s: %s"), "lpadmin", cupsLastErrorString()); return (1); } else + return (0); +} + + +/* + * 'get_printer_type()' - Determine the printer type and URI. + */ + +static cups_ptype_t /* O - printer-type value */ +get_printer_type(http_t *http, /* I - Server connection */ + char *printer, /* I - Printer name */ + char *uri, /* I - URI buffer */ + size_t urisize) /* I - Size of URI buffer */ +{ + ipp_t *request, /* IPP request */ + *response; /* IPP response */ + ipp_attribute_t *attr; /* printer-type attribute */ + cups_ptype_t type; /* printer-type value */ + + + /* + * Build a GET_PRINTER_ATTRIBUTES request, which requires the following + * attributes: + * + * attributes-charset + * attributes-natural-language + * printer-uri + * requested-attributes + * requesting-user-name + */ + + httpAssembleURIf(HTTP_URI_CODING_ALL, uri, urisize, "ipp", NULL, "localhost", + ippPort(), "/printers/%s", printer); + + request = ippNewRequest(IPP_GET_PRINTER_ATTRIBUTES); + ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, + "printer-uri", NULL, uri); + ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD, + "requested-attributes", NULL, "printer-type"); + ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_NAME, + "requesting-user-name", NULL, cupsUser()); + + /* + * Do the request... + */ + + response = cupsDoRequest(http, request, "/"); + if ((attr = ippFindAttribute(response, "printer-type", + IPP_TAG_ENUM)) != NULL) { - ippDelete(response); + type = (cups_ptype_t)attr->values[0].integer; - return (0); + if (type & (CUPS_PRINTER_CLASS | CUPS_PRINTER_IMPLICIT)) + httpAssembleURIf(HTTP_URI_CODING_ALL, uri, urisize, "ipp", NULL, + "localhost", ippPort(), "/classes/%s", printer); } + else + type = CUPS_PRINTER_LOCAL; + + ippDelete(response); + + return (type); } @@ -1111,10 +1249,7 @@ set_printer_options( cups_option_t *options, /* I - Options */ char *file) /* I - PPD file/interface script */ { - ipp_t *request, /* IPP Request */ - *response; /* IPP Response */ - ipp_attribute_t *attr; /* IPP attribute */ - ipp_op_t op; /* Operation to perform */ + ipp_t *request; /* IPP Request */ const char *ppdfile; /* PPD filename */ int ppdchanged; /* PPD changed? */ ppd_file_t *ppd; /* PPD file */ @@ -1127,59 +1262,16 @@ set_printer_options( cups_file_t *in, /* PPD file */ *out; /* Temporary file */ const char *protocol, /* Old protocol option */ - *customval; /* Custom option value */ + *customval, /* Custom option value */ + *boolval; /* Boolean value */ + int wrote_ipp_supplies = 0, /* Wrote cupsIPPSupplies keyword? */ + wrote_snmp_supplies = 0;/* Wrote cupsSNMPSupplies keyword? */ DEBUG_printf(("set_printer_options(http=%p, printer=\"%s\", num_options=%d, " "options=%p, file=\"%s\")\n", http, printer, num_options, options, file)); - httpAssembleURIf(HTTP_URI_CODING_ALL, uri, sizeof(uri), "ipp", NULL, - "localhost", 0, "/printers/%s", printer); - - /* - * Build a GET_PRINTER_ATTRIBUTES request, which requires the following - * attributes: - * - * attributes-charset - * attributes-natural-language - * printer-uri - * requested-attributes - */ - - request = ippNewRequest(IPP_GET_PRINTER_ATTRIBUTES); - - ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, - "printer-uri", NULL, uri); - ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_KEYWORD, - "requested-attributes", NULL, "printer-type"); - - /* - * Do the request... - */ - - op = CUPS_ADD_MODIFY_PRINTER; - - if ((response = cupsDoRequest(http, request, "/")) != NULL) - { - /* - * See what kind of printer or class it is... - */ - - if ((attr = ippFindAttribute(response, "printer-type", - IPP_TAG_ENUM)) != NULL) - { - if (attr->values[0].integer & (CUPS_PRINTER_CLASS | CUPS_PRINTER_IMPLICIT)) - { - op = CUPS_ADD_MODIFY_CLASS; - httpAssembleURIf(HTTP_URI_CODING_ALL, uri, sizeof(uri), "ipp", NULL, - "localhost", 0, "/classes/%s", printer); - } - } - - ippDelete(response); - } - /* * Build a CUPS_ADD_MODIFY_PRINTER or CUPS_ADD_MODIFY_CLASS request, which * requires the following attributes: @@ -1187,10 +1279,15 @@ set_printer_options( * attributes-charset * attributes-natural-language * printer-uri + * requesting-user-name * other options */ - request = ippNewRequest(op); + if (get_printer_type(http, printer, uri, sizeof(uri)) & + (CUPS_PRINTER_CLASS | CUPS_PRINTER_IMPLICIT)) + request = ippNewRequest(CUPS_ADD_MODIFY_CLASS); + else + request = ippNewRequest(CUPS_ADD_MODIFY_PRINTER); ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_URI, "printer-uri", NULL, uri); @@ -1215,7 +1312,7 @@ set_printer_options( if (file) ppdfile = file; - else if (op == CUPS_ADD_MODIFY_PRINTER) + else if (request->request.op.operation_id == CUPS_ADD_MODIFY_PRINTER) ppdfile = cupsGetPPD(printer); else ppdfile = NULL; @@ -1256,7 +1353,27 @@ set_printer_options( while (cupsFileGets(in, line, sizeof(line))) { - if (strncmp(line, "*Default", 8)) + if (!strncmp(line, "*cupsIPPSupplies:", 17) && + (boolval = cupsGetOption("cupsIPPSupplies", num_options, + options)) != NULL) + { + wrote_ipp_supplies = 1; + cupsFilePrintf(out, "*cupsIPPSupplies: %s\n", + (!strcasecmp(boolval, "true") || + !strcasecmp(boolval, "yes") || + !strcasecmp(boolval, "on")) ? "True" : "False"); + } + else if (!strncmp(line, "*cupsSNMPSupplies:", 18) && + (boolval = cupsGetOption("cupsSNMPSupplies", num_options, + options)) != NULL) + { + wrote_snmp_supplies = 1; + cupsFilePrintf(out, "*cupsSNMPSupplies: %s\n", + (!strcasecmp(boolval, "true") || + !strcasecmp(boolval, "yes") || + !strcasecmp(boolval, "on")) ? "True" : "False"); + } + else if (strncmp(line, "*Default", 8)) cupsFilePrintf(out, "%s\n", line); else { @@ -1306,6 +1423,26 @@ set_printer_options( } } + if (!wrote_ipp_supplies && + (boolval = cupsGetOption("cupsIPPSupplies", num_options, + options)) != NULL) + { + cupsFilePrintf(out, "*cupsIPPSupplies: %s\n", + (!strcasecmp(boolval, "true") || + !strcasecmp(boolval, "yes") || + !strcasecmp(boolval, "on")) ? "True" : "False"); + } + + if (!wrote_snmp_supplies && + (boolval = cupsGetOption("cupsSNMPSupplies", num_options, + options)) != NULL) + { + cupsFilePrintf(out, "*cupsSNMPSupplies: %s\n", + (!strcasecmp(boolval, "true") || + !strcasecmp(boolval, "yes") || + !strcasecmp(boolval, "on")) ? "True" : "False"); + } + cupsFileClose(in); cupsFileClose(out); ppdClose(ppd); @@ -1341,7 +1478,7 @@ set_printer_options( if (cupsLastError() > IPP_OK_CONFLICT) { - _cupsLangPrintf(stderr, "lpadmin: %s", cupsLastErrorString()); + _cupsLangPrintf(stderr, _("%s: %s"), "lpadmin", cupsLastErrorString()); return (1); } |