1355b4669Sjacobs /* 2355b4669Sjacobs * CDDL HEADER START 3355b4669Sjacobs * 4355b4669Sjacobs * The contents of this file are subject to the terms of the 5355b4669Sjacobs * Common Development and Distribution License (the "License"). 6355b4669Sjacobs * You may not use this file except in compliance with the License. 7355b4669Sjacobs * 8355b4669Sjacobs * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9355b4669Sjacobs * or http://www.opensolaris.org/os/licensing. 10355b4669Sjacobs * See the License for the specific language governing permissions 11355b4669Sjacobs * and limitations under the License. 12355b4669Sjacobs * 13355b4669Sjacobs * When distributing Covered Code, include this CDDL HEADER in each 14355b4669Sjacobs * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15355b4669Sjacobs * If applicable, add the following below this CDDL HEADER, with the 16355b4669Sjacobs * fields enclosed by brackets "[]" replaced with your own identifying 17355b4669Sjacobs * information: Portions Copyright [yyyy] [name of copyright owner] 18355b4669Sjacobs * 19355b4669Sjacobs * CDDL HEADER END 20355b4669Sjacobs */ 21355b4669Sjacobs 22355b4669Sjacobs /* 23f7c8cd01Ssonam gupta - Sun Microsystems - Bangalore India * Copyright 2009 Sun Microsystems, Inc. All rights reserved. 24355b4669Sjacobs * Use is subject to license terms. 25355b4669Sjacobs * 26355b4669Sjacobs */ 27355b4669Sjacobs 28355b4669Sjacobs /* $Id: lpstat.c 173 2006-05-25 04:52:06Z njacobs $ */ 29355b4669Sjacobs 30355b4669Sjacobs 31355b4669Sjacobs #include <stdio.h> 32355b4669Sjacobs #include <stdlib.h> 33355b4669Sjacobs #include <unistd.h> 34355b4669Sjacobs #include <string.h> 35355b4669Sjacobs #include <locale.h> 36355b4669Sjacobs #include <libintl.h> 3791216fe4Swendyp #include <ctype.h> 38355b4669Sjacobs #include <pwd.h> 39355b4669Sjacobs #include <papi.h> 40355b4669Sjacobs #include <uri.h> 41355b4669Sjacobs #include "common.h" 42*375b28ffSGowtham Thommandra #include "lp.h" 43355b4669Sjacobs 44355b4669Sjacobs static void 45355b4669Sjacobs usage(char *program) 46355b4669Sjacobs { 47355b4669Sjacobs char *name; 48355b4669Sjacobs 49355b4669Sjacobs if ((name = strrchr(program, '/')) == NULL) 50355b4669Sjacobs name = program; 51355b4669Sjacobs else 52355b4669Sjacobs name++; 53355b4669Sjacobs 54355b4669Sjacobs fprintf(stdout, gettext("Usage: %s [-d] [-r] [-s] [-t] [-a [list]] " 55355b4669Sjacobs "[-c [list]] [-o [list] [-l]] [-R [list] [-l]] " 56355b4669Sjacobs "[-p [list] [-D] [-l]] [-v [list]] [-S [list] [-l]] " 57355b4669Sjacobs "[-f [list] [-l]] [-u list]\n"), 58355b4669Sjacobs name); 59355b4669Sjacobs exit(1); 60355b4669Sjacobs } 61355b4669Sjacobs 62355b4669Sjacobs static char * 63355b4669Sjacobs nctime(time_t *t) 64355b4669Sjacobs { 65355b4669Sjacobs static char buf[64]; 66355b4669Sjacobs struct tm *tm = localtime(t); 67355b4669Sjacobs 68355b4669Sjacobs (void) strftime(buf, sizeof (buf), "%c", tm); 69355b4669Sjacobs 70355b4669Sjacobs return (buf); 71355b4669Sjacobs } 72355b4669Sjacobs 73355b4669Sjacobs static char * 74355b4669Sjacobs printer_name(papi_printer_t printer) 75355b4669Sjacobs { 76355b4669Sjacobs papi_attribute_t **attributes = papiPrinterGetAttributeList(printer); 77355b4669Sjacobs char *result = NULL; 78355b4669Sjacobs 79355b4669Sjacobs if (attributes != NULL) 80355b4669Sjacobs papiAttributeListGetString(attributes, NULL, 81355b4669Sjacobs "printer-name", &result); 82355b4669Sjacobs 83355b4669Sjacobs return (result); 84355b4669Sjacobs } 85355b4669Sjacobs 86355b4669Sjacobs static int 87355b4669Sjacobs lpstat_default_printer(papi_encryption_t encryption) 88355b4669Sjacobs { 89355b4669Sjacobs papi_status_t status; 90355b4669Sjacobs papi_service_t svc = NULL; 91355b4669Sjacobs papi_printer_t p = NULL; 92355b4669Sjacobs char *name = NULL; 93355b4669Sjacobs 94355b4669Sjacobs status = papiServiceCreate(&svc, NULL, NULL, NULL, cli_auth_callback, 95355b4669Sjacobs encryption, NULL); 96355b4669Sjacobs if (status == PAPI_OK) { 97355b4669Sjacobs char *req[] = { "printer-name", NULL }; 98355b4669Sjacobs 99355b4669Sjacobs status = papiPrinterQuery(svc, DEFAULT_DEST, req, NULL, &p); 100355b4669Sjacobs if (p != NULL) 101355b4669Sjacobs name = printer_name(p); 102355b4669Sjacobs } 103355b4669Sjacobs if (name != NULL) 104355b4669Sjacobs printf(gettext("system default printer: %s\n"), name); 105355b4669Sjacobs else 106355b4669Sjacobs printf(gettext("no system default destination\n")); 107355b4669Sjacobs papiPrinterFree(p); 108355b4669Sjacobs papiServiceDestroy(svc); 109355b4669Sjacobs 110355b4669Sjacobs return (0); 111355b4669Sjacobs } 112355b4669Sjacobs 113355b4669Sjacobs static int 114355b4669Sjacobs lpstat_service_status(papi_encryption_t encryption) 115355b4669Sjacobs { 116355b4669Sjacobs int result = 0; 117355b4669Sjacobs papi_status_t status; 118355b4669Sjacobs papi_service_t svc = NULL; 119355b4669Sjacobs char *name = NULL; 120355b4669Sjacobs 121355b4669Sjacobs if (((name = getenv("PAPI_SERVICE_URI")) == NULL) && 122355b4669Sjacobs ((name = getenv("IPP_SERVER")) == NULL) && 123355b4669Sjacobs ((name = getenv("CUPS_SERVER")) == NULL)) 124355b4669Sjacobs name = DEFAULT_SERVICE_URI; 125355b4669Sjacobs 126355b4669Sjacobs status = papiServiceCreate(&svc, name, NULL, NULL, cli_auth_callback, 127355b4669Sjacobs encryption, NULL); 128355b4669Sjacobs if (status != PAPI_OK) { 129355b4669Sjacobs printf(gettext("scheduler is not running\n")); 130355b4669Sjacobs result = -1; 131355b4669Sjacobs } else 132355b4669Sjacobs printf(gettext("scheduler is running\n")); 133355b4669Sjacobs papiServiceDestroy(svc); 134355b4669Sjacobs 135355b4669Sjacobs return (result); 136355b4669Sjacobs } 137355b4669Sjacobs 138355b4669Sjacobs static char * 139355b4669Sjacobs get_device_uri(papi_service_t svc, char *name) 140355b4669Sjacobs { 141355b4669Sjacobs papi_status_t status; 142355b4669Sjacobs papi_printer_t p = NULL; 143355b4669Sjacobs char *keys[] = { "device-uri", NULL }; 144355b4669Sjacobs char *result = NULL; 145355b4669Sjacobs 146355b4669Sjacobs status = papiPrinterQuery(svc, name, keys, NULL, &p); 147355b4669Sjacobs if ((status == PAPI_OK) && (p != NULL)) { 148355b4669Sjacobs papi_attribute_t **attrs = papiPrinterGetAttributeList(p); 149355b4669Sjacobs 150355b4669Sjacobs (void) papiAttributeListGetString(attrs, NULL, 151355b4669Sjacobs "device-uri", &result); 152355b4669Sjacobs if (result != NULL) 153355b4669Sjacobs result = strdup(result); 154355b4669Sjacobs 155355b4669Sjacobs papiPrinterFree(p); 156355b4669Sjacobs } 157355b4669Sjacobs 158355b4669Sjacobs return (result); 159355b4669Sjacobs } 160355b4669Sjacobs 161f7c8cd01Ssonam gupta - Sun Microsystems - Bangalore India static void 162f7c8cd01Ssonam gupta - Sun Microsystems - Bangalore India print_description(papi_attribute_t **list, char *printer_name) 163f7c8cd01Ssonam gupta - Sun Microsystems - Bangalore India { 164f7c8cd01Ssonam gupta - Sun Microsystems - Bangalore India char *str = ""; 165f7c8cd01Ssonam gupta - Sun Microsystems - Bangalore India 166f7c8cd01Ssonam gupta - Sun Microsystems - Bangalore India (void) papiAttributeListGetString(list, NULL, 167f7c8cd01Ssonam gupta - Sun Microsystems - Bangalore India "printer-info", &str); 168f7c8cd01Ssonam gupta - Sun Microsystems - Bangalore India 169f7c8cd01Ssonam gupta - Sun Microsystems - Bangalore India /* 170f7c8cd01Ssonam gupta - Sun Microsystems - Bangalore India * If no printer-info is read then 171f7c8cd01Ssonam gupta - Sun Microsystems - Bangalore India * by default the printer-info is <printer-name>@<server> 172f7c8cd01Ssonam gupta - Sun Microsystems - Bangalore India */ 173f7c8cd01Ssonam gupta - Sun Microsystems - Bangalore India if (str[0] == '\0') { 174f7c8cd01Ssonam gupta - Sun Microsystems - Bangalore India char *uri = NULL; 175f7c8cd01Ssonam gupta - Sun Microsystems - Bangalore India uri_t *u = NULL; 176f7c8cd01Ssonam gupta - Sun Microsystems - Bangalore India 177f7c8cd01Ssonam gupta - Sun Microsystems - Bangalore India (void) papiAttributeListGetString(list, NULL, 178f7c8cd01Ssonam gupta - Sun Microsystems - Bangalore India "printer-uri-supported", &uri); 179f7c8cd01Ssonam gupta - Sun Microsystems - Bangalore India 180f7c8cd01Ssonam gupta - Sun Microsystems - Bangalore India if ((uri != NULL) && (uri_from_string(uri, &u) == 0)) { 181f7c8cd01Ssonam gupta - Sun Microsystems - Bangalore India char *nodename = localhostname(); 182f7c8cd01Ssonam gupta - Sun Microsystems - Bangalore India 183f7c8cd01Ssonam gupta - Sun Microsystems - Bangalore India if ((u->host == NULL) || 184f7c8cd01Ssonam gupta - Sun Microsystems - Bangalore India (strcasecmp(u->host, "localhost") == 0) || 185f7c8cd01Ssonam gupta - Sun Microsystems - Bangalore India (strcasecmp(u->host, nodename) == 0)) 186f7c8cd01Ssonam gupta - Sun Microsystems - Bangalore India printf(gettext("\tDescription:\n")); 187f7c8cd01Ssonam gupta - Sun Microsystems - Bangalore India else 188f7c8cd01Ssonam gupta - Sun Microsystems - Bangalore India printf(gettext("\tDescription: %s@%s\n"), 189f7c8cd01Ssonam gupta - Sun Microsystems - Bangalore India printer_name, u->host); 190f7c8cd01Ssonam gupta - Sun Microsystems - Bangalore India 191f7c8cd01Ssonam gupta - Sun Microsystems - Bangalore India uri_free(u); 192f7c8cd01Ssonam gupta - Sun Microsystems - Bangalore India } else 193f7c8cd01Ssonam gupta - Sun Microsystems - Bangalore India printf(gettext("\tDescription:\n")); 194f7c8cd01Ssonam gupta - Sun Microsystems - Bangalore India } else 195f7c8cd01Ssonam gupta - Sun Microsystems - Bangalore India printf(gettext("\tDescription: %s\n"), str); 196f7c8cd01Ssonam gupta - Sun Microsystems - Bangalore India } 197f7c8cd01Ssonam gupta - Sun Microsystems - Bangalore India 198355b4669Sjacobs static char *report_device_keys[] = { "printer-name", "printer-uri-supported", 199355b4669Sjacobs NULL }; 200355b4669Sjacobs /* ARGSUSED2 */ 201355b4669Sjacobs static int 202355b4669Sjacobs report_device(papi_service_t svc, char *name, papi_printer_t printer, 203355b4669Sjacobs int verbose, int description) 204355b4669Sjacobs { 205355b4669Sjacobs papi_status_t status; 206355b4669Sjacobs papi_attribute_t **attrs = papiPrinterGetAttributeList(printer); 207355b4669Sjacobs char *uri = NULL; 208355b4669Sjacobs char *device = NULL; 209355b4669Sjacobs uri_t *u = NULL; 210355b4669Sjacobs 211355b4669Sjacobs if (name == NULL) { 212355b4669Sjacobs status = papiAttributeListGetString(attrs, NULL, 213355b4669Sjacobs "printer-name", &name); 214355b4669Sjacobs if (status != PAPI_OK) 215355b4669Sjacobs status = papiAttributeListGetString(attrs, NULL, 216355b4669Sjacobs "printer-uri-supported", &name); 217355b4669Sjacobs } 218355b4669Sjacobs 219355b4669Sjacobs if (name == NULL) 220355b4669Sjacobs return (-1); 221355b4669Sjacobs 222355b4669Sjacobs (void) papiAttributeListGetString(attrs, NULL, 223355b4669Sjacobs "printer-uri-supported", &uri); 224355b4669Sjacobs 225355b4669Sjacobs if ((uri != NULL) && (uri_from_string(uri, &u) == 0)) { 226355b4669Sjacobs char *nodename = localhostname(); 227355b4669Sjacobs 228355b4669Sjacobs if ((u->host == NULL) || 229355b4669Sjacobs (strcasecmp(u->host, "localhost") == 0) || 230355b4669Sjacobs (strcasecmp(u->host, nodename) == 0)) 231355b4669Sjacobs device = get_device_uri(svc, name); 232355b4669Sjacobs 233355b4669Sjacobs if (device != NULL) { 234355b4669Sjacobs printf(gettext("device for %s: %s\n"), name, device); 235355b4669Sjacobs return (0); 236355b4669Sjacobs } else if (uri != NULL) { 237355b4669Sjacobs printf(gettext("system for %s: %s (as %s)\n"), name, 238e059026eSKeerthi Kondaka u->host?u->host:"localhost", uri); 239355b4669Sjacobs return (0); 240355b4669Sjacobs } 241355b4669Sjacobs 242355b4669Sjacobs uri_free(u); 243355b4669Sjacobs } 244355b4669Sjacobs 245355b4669Sjacobs return (0); 246355b4669Sjacobs } 247355b4669Sjacobs 248355b4669Sjacobs static char *report_accepting_keys[] = { "printer-name", 249355b4669Sjacobs "printer-uri-supported", "printer-is-accepting-jobs", 250355b4669Sjacobs "printer-up-time", "printer-state-time", 251355b4669Sjacobs "lpsched-reject-date", "lpsched-reject-reason", NULL }; 252355b4669Sjacobs /* ARGSUSED2 */ 253355b4669Sjacobs static int 254355b4669Sjacobs report_accepting(papi_service_t svc, char *name, papi_printer_t printer, 255355b4669Sjacobs int verbose, int description) 256355b4669Sjacobs { 257355b4669Sjacobs papi_status_t status; 258355b4669Sjacobs papi_attribute_t **attrs = papiPrinterGetAttributeList(printer); 259355b4669Sjacobs time_t curr; 260355b4669Sjacobs char boolean = PAPI_FALSE; 261355b4669Sjacobs 262355b4669Sjacobs if (name == NULL) { 263355b4669Sjacobs status = papiAttributeListGetString(attrs, NULL, 264355b4669Sjacobs "printer-name", &name); 265355b4669Sjacobs if (status != PAPI_OK) 266355b4669Sjacobs status = papiAttributeListGetString(attrs, NULL, 267355b4669Sjacobs "printer-uri-supported", &name); 268355b4669Sjacobs } 269355b4669Sjacobs if (name == NULL) 270355b4669Sjacobs return (-1); 271355b4669Sjacobs 272355b4669Sjacobs (void) papiAttributeListGetBoolean(attrs, NULL, 273355b4669Sjacobs "printer-is-accepting-jobs", &boolean); 274355b4669Sjacobs (void) time(&curr); 275355b4669Sjacobs (void) papiAttributeListGetDatetime(attrs, NULL, 276355b4669Sjacobs "printer-up-time", &curr); 277355b4669Sjacobs (void) papiAttributeListGetDatetime(attrs, NULL, 278355b4669Sjacobs "printer-state-time", &curr); 279355b4669Sjacobs (void) papiAttributeListGetDatetime(attrs, NULL, 280355b4669Sjacobs "lpsched-reject-date", &curr); 281355b4669Sjacobs 282355b4669Sjacobs if (boolean == PAPI_TRUE) { 283355b4669Sjacobs printf(gettext("%s accepting requests since %s\n"), 284355b4669Sjacobs name, nctime(&curr)); 285355b4669Sjacobs } else { 286355b4669Sjacobs char *reason = "unknown reason"; 287355b4669Sjacobs 288355b4669Sjacobs (void) papiAttributeListGetString(attrs, NULL, 289355b4669Sjacobs "lpsched-reject-reason", &reason); 290355b4669Sjacobs 291355b4669Sjacobs printf(gettext("%s not accepting requests since %s\n\t%s\n"), 292355b4669Sjacobs name, nctime(&curr), reason); 293355b4669Sjacobs } 294355b4669Sjacobs 295355b4669Sjacobs return (0); 296355b4669Sjacobs } 297355b4669Sjacobs 298355b4669Sjacobs static char *report_class_keys[] = { "printer-name", "printer-uri-supported", 299355b4669Sjacobs "member-names", NULL }; 300355b4669Sjacobs /* ARGSUSED2 */ 301355b4669Sjacobs static int 302355b4669Sjacobs report_class(papi_service_t svc, char *name, papi_printer_t printer, 303355b4669Sjacobs int verbose, int description) 304355b4669Sjacobs { 305355b4669Sjacobs papi_status_t status; 306355b4669Sjacobs papi_attribute_t **attrs = papiPrinterGetAttributeList(printer); 307355b4669Sjacobs char *member = NULL; 308355b4669Sjacobs void *iter = NULL; 309355b4669Sjacobs 310355b4669Sjacobs status = papiAttributeListGetString(attrs, &iter, 311355b4669Sjacobs "member-names", &member); 312355b4669Sjacobs if (status == PAPI_NOT_FOUND) /* it's not a class */ 313355b4669Sjacobs return (0); 314355b4669Sjacobs 315355b4669Sjacobs if (name == NULL) { 316355b4669Sjacobs status = papiAttributeListGetString(attrs, NULL, 317355b4669Sjacobs "printer-name", &name); 318355b4669Sjacobs if (status != PAPI_OK) 319355b4669Sjacobs status = papiAttributeListGetString(attrs, NULL, 320355b4669Sjacobs "printer-uri-supported", &name); 321355b4669Sjacobs } 322355b4669Sjacobs if (name == NULL) 323355b4669Sjacobs return (-1); 324355b4669Sjacobs 325355b4669Sjacobs printf(gettext("members of class %s:\n\t%s\n"), name, member); 326355b4669Sjacobs while (papiAttributeListGetString(attrs, &iter, NULL, &member) 327355b4669Sjacobs == PAPI_OK) 328355b4669Sjacobs printf("\t%s\n", member); 329355b4669Sjacobs 330355b4669Sjacobs return (0); 331355b4669Sjacobs } 332355b4669Sjacobs 333355b4669Sjacobs static char *report_printer_keys[] = { "printer-name", 334355b4669Sjacobs "printer-uri-supported", "printer-state", 335355b4669Sjacobs "printer-up-time", "printer-state-time", 336355b4669Sjacobs "lpsched-disable-date", "printer-state-reasons", 337355b4669Sjacobs "lpsched-disable-reason", NULL }; 338355b4669Sjacobs /* ARGSUSED2 */ 339355b4669Sjacobs static int 340355b4669Sjacobs report_printer(papi_service_t svc, char *name, papi_printer_t printer, 341355b4669Sjacobs int verbose, int description) 342355b4669Sjacobs { 343355b4669Sjacobs papi_status_t status; 344355b4669Sjacobs papi_attribute_t **attrs = papiPrinterGetAttributeList(printer); 345355b4669Sjacobs time_t curr; 346355b4669Sjacobs int32_t pstat = 0; 347355b4669Sjacobs char *member = NULL; 34854d5ddccSsonam gupta - Sun Microsystems - Bangalore India papi_job_t *j = NULL; 349355b4669Sjacobs 350355b4669Sjacobs status = papiAttributeListGetString(attrs, NULL, 351355b4669Sjacobs "member-names", &member); 352355b4669Sjacobs if (status == PAPI_OK) /* it's a class */ 353355b4669Sjacobs return (0); 354355b4669Sjacobs 355355b4669Sjacobs if (name == NULL) { 356355b4669Sjacobs status = papiAttributeListGetString(attrs, NULL, 357355b4669Sjacobs "printer-name", &name); 358355b4669Sjacobs if (status != PAPI_OK) 359355b4669Sjacobs status = papiAttributeListGetString(attrs, NULL, 360355b4669Sjacobs "printer-uri-supported", &name); 361355b4669Sjacobs } 362355b4669Sjacobs if (name == NULL) 363355b4669Sjacobs return (-1); 364355b4669Sjacobs 365355b4669Sjacobs printf(gettext("printer %s "), name); 366355b4669Sjacobs 367355b4669Sjacobs status = papiAttributeListGetInteger(attrs, NULL, 368355b4669Sjacobs "printer-state", &pstat); 369355b4669Sjacobs 370355b4669Sjacobs switch (pstat) { 371355b4669Sjacobs case 0x03: /* idle */ 372355b4669Sjacobs printf(gettext("idle. enabled")); 373355b4669Sjacobs break; 37454d5ddccSsonam gupta - Sun Microsystems - Bangalore India case 0x04: /* processing */ 37554d5ddccSsonam gupta - Sun Microsystems - Bangalore India status = papiPrinterListJobs(svc, name, NULL, 37654d5ddccSsonam gupta - Sun Microsystems - Bangalore India 0, 0, &j); 37754d5ddccSsonam gupta - Sun Microsystems - Bangalore India 37854d5ddccSsonam gupta - Sun Microsystems - Bangalore India if (status == PAPI_OK) { 37954d5ddccSsonam gupta - Sun Microsystems - Bangalore India if (j != NULL) { 38054d5ddccSsonam gupta - Sun Microsystems - Bangalore India int i = 0; 381355b4669Sjacobs int32_t jobid = 0; 38254d5ddccSsonam gupta - Sun Microsystems - Bangalore India int32_t jstate = 0; 38354d5ddccSsonam gupta - Sun Microsystems - Bangalore India int flag = 0; 384355b4669Sjacobs 38554d5ddccSsonam gupta - Sun Microsystems - Bangalore India for (i = 0; j[i] != NULL; ++i) { 386356a8421Ssonam gupta - Sun Microsystems - Bangalore India papi_attribute_t **attr = 387356a8421Ssonam gupta - Sun Microsystems - Bangalore India papiJobGetAttributeList(j[i]); 38854d5ddccSsonam gupta - Sun Microsystems - Bangalore India 389356a8421Ssonam gupta - Sun Microsystems - Bangalore India papiAttributeListGetInteger(attr, 39054d5ddccSsonam gupta - Sun Microsystems - Bangalore India NULL, "job-state", &jstate); 391356a8421Ssonam gupta - Sun Microsystems - Bangalore India papiAttributeListGetInteger(attr, 39254d5ddccSsonam gupta - Sun Microsystems - Bangalore India NULL, "job-id", &jobid); 39354d5ddccSsonam gupta - Sun Microsystems - Bangalore India 39454d5ddccSsonam gupta - Sun Microsystems - Bangalore India /* 395c389c7f8SGowtham Thommandra * If the job-state is in 396c389c7f8SGowtham Thommandra * RS_PRINTING then only print. 39754d5ddccSsonam gupta - Sun Microsystems - Bangalore India */ 398c389c7f8SGowtham Thommandra if (jstate == 0x0008) { 39954d5ddccSsonam gupta - Sun Microsystems - Bangalore India if (flag == 0) 40054d5ddccSsonam gupta - Sun Microsystems - Bangalore India printf(gettext 40154d5ddccSsonam gupta - Sun Microsystems - Bangalore India ("now printing"\ 40254d5ddccSsonam gupta - Sun Microsystems - Bangalore India " %s-%d. enabled"), 40354d5ddccSsonam gupta - Sun Microsystems - Bangalore India name, jobid); 40454d5ddccSsonam gupta - Sun Microsystems - Bangalore India flag = 1; 40554d5ddccSsonam gupta - Sun Microsystems - Bangalore India } 40654d5ddccSsonam gupta - Sun Microsystems - Bangalore India } 407355b4669Sjacobs papiJobListFree(j); 40854d5ddccSsonam gupta - Sun Microsystems - Bangalore India } 409355b4669Sjacobs } 410355b4669Sjacobs break; 411355b4669Sjacobs case 0x05: /* stopped */ 412355b4669Sjacobs printf(gettext("disabled")); 413355b4669Sjacobs break; 414355b4669Sjacobs default: 415355b4669Sjacobs printf(gettext("unknown state(0x%x)."), pstat); 416355b4669Sjacobs break; 417355b4669Sjacobs } 418355b4669Sjacobs 419355b4669Sjacobs (void) time(&curr); 420355b4669Sjacobs (void) papiAttributeListGetDatetime(attrs, NULL, 421355b4669Sjacobs "printer-up-time", &curr); 422355b4669Sjacobs (void) papiAttributeListGetDatetime(attrs, NULL, 423355b4669Sjacobs "printer-state-time", &curr); 424355b4669Sjacobs (void) papiAttributeListGetDatetime(attrs, NULL, 425355b4669Sjacobs "lpsched-disable-date", &curr); 426355b4669Sjacobs printf(gettext(" since %s. available.\n"), nctime(&curr)); 427355b4669Sjacobs 428355b4669Sjacobs if (pstat == 0x05) { 429355b4669Sjacobs char *reason = "unknown reason"; 430355b4669Sjacobs 431355b4669Sjacobs (void) papiAttributeListGetString(attrs, NULL, 432355b4669Sjacobs "printer-state-reasons", &reason); 433355b4669Sjacobs (void) papiAttributeListGetString(attrs, NULL, 434355b4669Sjacobs "lpsched-disable-reason", &reason); 435355b4669Sjacobs printf(gettext("\t%s\n"), reason); 436355b4669Sjacobs } 437355b4669Sjacobs 438355b4669Sjacobs if (verbose == 1) { 439355b4669Sjacobs void *iter; 440355b4669Sjacobs char *str; 441355b4669Sjacobs 442355b4669Sjacobs str = ""; 443355b4669Sjacobs (void) papiAttributeListGetString(attrs, NULL, 444355b4669Sjacobs "form-ready", &str); 445355b4669Sjacobs printf(gettext("\tForm mounted: %s\n"), str); 446355b4669Sjacobs 447355b4669Sjacobs str = ""; 448355b4669Sjacobs iter = NULL; 449355b4669Sjacobs (void) papiAttributeListGetString(attrs, &iter, 450355b4669Sjacobs "document-format-supported", &str); 451355b4669Sjacobs printf(gettext("\tContent types: %s"), str); 452355b4669Sjacobs while (papiAttributeListGetString(attrs, &iter, NULL, &str) 453355b4669Sjacobs == PAPI_OK) 454355b4669Sjacobs printf(", %s", str); 455355b4669Sjacobs printf("\n"); 456355b4669Sjacobs 457f7c8cd01Ssonam gupta - Sun Microsystems - Bangalore India /* Display the printer description */ 458f7c8cd01Ssonam gupta - Sun Microsystems - Bangalore India print_description(attrs, name); 459355b4669Sjacobs 460355b4669Sjacobs str = ""; 461853389e3Swendyp iter = NULL; 462853389e3Swendyp (void) papiAttributeListGetString(attrs, &iter, 463853389e3Swendyp "lpsched-printer-type", &str); 464853389e3Swendyp printf(gettext("\tPrinter types: %s"), str); 465853389e3Swendyp while (papiAttributeListGetString(attrs, &iter, NULL, &str) 466853389e3Swendyp == PAPI_OK) 467853389e3Swendyp printf(", %s", str); 468853389e3Swendyp printf("\n"); 469853389e3Swendyp 470853389e3Swendyp str = ""; 471355b4669Sjacobs (void) papiAttributeListGetString(attrs, NULL, 472355b4669Sjacobs "lpsched-dial-info", &str); 473355b4669Sjacobs printf(gettext("\tConnection: %s\n"), 4745eb9a62cSJonathan Cowper-Andrewes ((str[0] == '\0') ? gettext("direct") : str)); 475355b4669Sjacobs 476355b4669Sjacobs str = ""; 477355b4669Sjacobs (void) papiAttributeListGetString(attrs, NULL, 478355b4669Sjacobs "lpsched-interface-script", &str); 479355b4669Sjacobs printf(gettext("\tInterface: %s\n"), str); 480355b4669Sjacobs 481355b4669Sjacobs str = NULL; 482355b4669Sjacobs (void) papiAttributeListGetString(attrs, NULL, 483355b4669Sjacobs "ppd-file-uri", &str); 484355b4669Sjacobs (void) papiAttributeListGetString(attrs, NULL, 485355b4669Sjacobs "lpsched-ppd-source-path", &str); 486355b4669Sjacobs if (str != NULL) 487355b4669Sjacobs printf(gettext("\tPPD: %s\n"), str); 488355b4669Sjacobs 489355b4669Sjacobs str = NULL; 490355b4669Sjacobs (void) papiAttributeListGetString(attrs, NULL, 491355b4669Sjacobs "lpsched-fault-alert-command", &str); 492355b4669Sjacobs if (str != NULL) 493355b4669Sjacobs printf(gettext("\tOn fault: %s\n"), str); 494355b4669Sjacobs 495355b4669Sjacobs str = ""; 496355b4669Sjacobs (void) papiAttributeListGetString(attrs, NULL, 497355b4669Sjacobs "lpsched-fault-recovery", &str); 498355b4669Sjacobs printf(gettext("\tAfter fault: %s\n"), 499355b4669Sjacobs ((str[0] == '\0') ? gettext("continue") : str)); 500355b4669Sjacobs 501355b4669Sjacobs str = "(all)"; 502355b4669Sjacobs iter = NULL; 503355b4669Sjacobs (void) papiAttributeListGetString(attrs, &iter, 504355b4669Sjacobs "requesting-user-name-allowed", &str); 505355b4669Sjacobs printf(gettext("\tUsers allowed:\n\t\t%s\n"), 506355b4669Sjacobs ((str[0] == '\0') ? gettext("(none)") : str)); 507355b4669Sjacobs if ((str != NULL) && (str[0] != '\0')) 508355b4669Sjacobs while (papiAttributeListGetString(attrs, &iter, NULL, 509355b4669Sjacobs &str) == PAPI_OK) 510355b4669Sjacobs printf("\t\t%s\n", str); 511355b4669Sjacobs 512355b4669Sjacobs str = NULL; 513355b4669Sjacobs iter = NULL; 514355b4669Sjacobs (void) papiAttributeListGetString(attrs, &iter, 515355b4669Sjacobs "requesting-user-name-denied", &str); 516355b4669Sjacobs if (str != NULL) { 517355b4669Sjacobs printf(gettext("\tUsers denied:\n\t\t%s\n"), 518355b4669Sjacobs ((str[0] == '\0') ? gettext("(none)") : str)); 519355b4669Sjacobs if ((str != NULL) && (str[0] != '\0')) 520355b4669Sjacobs while (papiAttributeListGetString(attrs, &iter, 521355b4669Sjacobs NULL, &str) == PAPI_OK) 522355b4669Sjacobs printf("\t\t%s\n", str); 523355b4669Sjacobs } 524355b4669Sjacobs 525f06271beSsonam gupta - Sun Microsystems - Bangalore India str = "none"; 526355b4669Sjacobs iter = NULL; 527355b4669Sjacobs (void) papiAttributeListGetString(attrs, &iter, 528355b4669Sjacobs "form-supported", &str); 529f06271beSsonam gupta - Sun Microsystems - Bangalore India printf(gettext("\tForms allowed:\n\t\t(%s)\n"), 530f06271beSsonam gupta - Sun Microsystems - Bangalore India ((str[0] == '\0') ? gettext("none") : str)); 531355b4669Sjacobs if ((str != NULL) && (str[0] != '\0')) 532355b4669Sjacobs while (papiAttributeListGetString(attrs, &iter, NULL, 533355b4669Sjacobs &str) == PAPI_OK) 534f06271beSsonam gupta - Sun Microsystems - Bangalore India printf("\t\t(%s)\n", str); 535355b4669Sjacobs 536355b4669Sjacobs str = ""; 537355b4669Sjacobs iter = NULL; 538355b4669Sjacobs (void) papiAttributeListGetString(attrs, &iter, 539355b4669Sjacobs "media-supported", &str); 540355b4669Sjacobs printf(gettext("\tMedia supported:\n\t\t%s\n"), 541355b4669Sjacobs ((str[0] == '\0') ? gettext("(none)") : str)); 542355b4669Sjacobs if ((str != NULL) && (str[0] != '\0')) 543355b4669Sjacobs while (papiAttributeListGetString(attrs, &iter, NULL, 544355b4669Sjacobs &str) == PAPI_OK) 545355b4669Sjacobs printf("\t\t%s\n", str); 546355b4669Sjacobs 547355b4669Sjacobs str = ""; 548355b4669Sjacobs (void) papiAttributeListGetString(attrs, NULL, 549355b4669Sjacobs "job-sheets-supported", &str); 550853389e3Swendyp if ((strcasecmp(str, "none")) == 0) 551853389e3Swendyp str = gettext("page never printed"); 552853389e3Swendyp else if (strcasecmp(str, "optional") == 0) 553853389e3Swendyp str = gettext("not required"); 554853389e3Swendyp else 555853389e3Swendyp str = gettext("required"); 556853389e3Swendyp 557853389e3Swendyp printf(gettext("\tBanner %s\n"), str); 558853389e3Swendyp 559355b4669Sjacobs 560355b4669Sjacobs str = ""; 561355b4669Sjacobs iter = NULL; 562355b4669Sjacobs (void) papiAttributeListGetString(attrs, &iter, 563355b4669Sjacobs "lpsched-print-wheels", &str); 564355b4669Sjacobs printf(gettext("\tCharacter sets:\n\t\t%s\n"), 565355b4669Sjacobs ((str[0] == '\0') ? gettext("(none)") : str)); 566355b4669Sjacobs if ((str != NULL) && (str[0] != '\0')) 567355b4669Sjacobs while (papiAttributeListGetString(attrs, &iter, NULL, 568355b4669Sjacobs &str) == PAPI_OK) 569355b4669Sjacobs printf("\t\t%s\n", str); 570355b4669Sjacobs 571355b4669Sjacobs printf(gettext("\tDefault pitch:\n")); 572355b4669Sjacobs printf(gettext("\tDefault page size:\n")); 573355b4669Sjacobs printf(gettext("\tDefault port setting:\n")); 574355b4669Sjacobs 575355b4669Sjacobs str = ""; 576355b4669Sjacobs iter = NULL; 577355b4669Sjacobs (void) papiAttributeListGetString(attrs, &iter, 578355b4669Sjacobs "lpsched-options", &str); 579355b4669Sjacobs if (str != NULL) { 580355b4669Sjacobs printf(gettext("\tOptions: %s"), str); 581355b4669Sjacobs while (papiAttributeListGetString(attrs, &iter, NULL, 582355b4669Sjacobs &str) == PAPI_OK) 583355b4669Sjacobs printf(", %s", str); 584355b4669Sjacobs printf("\n"); 585355b4669Sjacobs } 586355b4669Sjacobs 587f7c8cd01Ssonam gupta - Sun Microsystems - Bangalore India } else if (description == 1) 588f7c8cd01Ssonam gupta - Sun Microsystems - Bangalore India /* Display printer description */ 589f7c8cd01Ssonam gupta - Sun Microsystems - Bangalore India print_description(attrs, name); 590f7c8cd01Ssonam gupta - Sun Microsystems - Bangalore India else if (verbose > 1) 591355b4669Sjacobs papiAttributeListPrint(stdout, attrs, "\t"); 592355b4669Sjacobs 593355b4669Sjacobs if (verbose > 0) 594355b4669Sjacobs printf("\n"); 595355b4669Sjacobs 596355b4669Sjacobs return (0); 597355b4669Sjacobs } 598355b4669Sjacobs 599355b4669Sjacobs static int 600355b4669Sjacobs printer_query(char *name, int (*report)(papi_service_t, char *, papi_printer_t, 601355b4669Sjacobs int, int), papi_encryption_t encryption, 602355b4669Sjacobs int verbose, int description) 603355b4669Sjacobs { 604*375b28ffSGowtham Thommandra int result = 0, i = 0; 605355b4669Sjacobs papi_status_t status; 606355b4669Sjacobs papi_service_t svc = NULL; 607*375b28ffSGowtham Thommandra char **list = getlist(name, LP_WS, LP_SEP); 608355b4669Sjacobs 609*375b28ffSGowtham Thommandra if (list == NULL) { 610*375b28ffSGowtham Thommandra list = (char **)malloc(sizeof (char *)); 611*375b28ffSGowtham Thommandra list[0] = name; 612*375b28ffSGowtham Thommandra } 613*375b28ffSGowtham Thommandra 614*375b28ffSGowtham Thommandra /* 615*375b28ffSGowtham Thommandra * The for loop executes once for every printer 616*375b28ffSGowtham Thommandra * entry in list. If list is NULL that implies 617*375b28ffSGowtham Thommandra * name is also NULL, the loop runs only one time. 618*375b28ffSGowtham Thommandra */ 619*375b28ffSGowtham Thommandra 620*375b28ffSGowtham Thommandra for (i = 0; name == NULL || list[i] != NULL; i++) { 621*375b28ffSGowtham Thommandra name = list[i]; 622*375b28ffSGowtham Thommandra 623*375b28ffSGowtham Thommandra status = papiServiceCreate(&svc, name, NULL, NULL, 624*375b28ffSGowtham Thommandra cli_auth_callback, encryption, NULL); 625355b4669Sjacobs if (status != PAPI_OK) { 626022ba35cSjacobs if (status == PAPI_NOT_FOUND) 627*375b28ffSGowtham Thommandra fprintf(stderr, 628*375b28ffSGowtham Thommandra gettext("%s: unknown printer\n"), 629022ba35cSjacobs name ? name : "(NULL)"); 630022ba35cSjacobs else 631355b4669Sjacobs fprintf(stderr, gettext( 632355b4669Sjacobs "Failed to contact service for %s: %s\n"), 633355b4669Sjacobs name ? name : "(NULL)", 634355b4669Sjacobs verbose_papi_message(svc, status)); 635355b4669Sjacobs papiServiceDestroy(svc); 636*375b28ffSGowtham Thommandra result--; 637*375b28ffSGowtham Thommandra continue; 638355b4669Sjacobs } 639355b4669Sjacobs 640355b4669Sjacobs if (name == NULL) { /* all */ 641355b4669Sjacobs char **interest = interest_list(svc); 642355b4669Sjacobs 643355b4669Sjacobs if (interest != NULL) { 644355b4669Sjacobs int i; 645355b4669Sjacobs 646355b4669Sjacobs for (i = 0; interest[i] != NULL; i++) 647*375b28ffSGowtham Thommandra result += printer_query(interest[i], 648*375b28ffSGowtham Thommandra report, encryption, verbose, 649355b4669Sjacobs description); 650355b4669Sjacobs } 651355b4669Sjacobs } else { 652355b4669Sjacobs papi_printer_t printer = NULL; 653355b4669Sjacobs char **keys = NULL; 654355b4669Sjacobs 655355b4669Sjacobs /* 656*375b28ffSGowtham Thommandra * Limit the query to only required data 657*375b28ffSGowtham Thommandra * to reduce the need to go remote for 658*375b28ffSGowtham Thommandra * information. 659355b4669Sjacobs */ 660355b4669Sjacobs if (report == report_device) 661355b4669Sjacobs keys = report_device_keys; 662355b4669Sjacobs else if (report == report_class) 663355b4669Sjacobs keys = report_class_keys; 664355b4669Sjacobs else if (report == report_accepting) 665355b4669Sjacobs keys = report_accepting_keys; 666355b4669Sjacobs else if ((report == report_printer) && (verbose == 0)) 667355b4669Sjacobs keys = report_printer_keys; 668355b4669Sjacobs 669*375b28ffSGowtham Thommandra status = papiPrinterQuery(svc, name, keys, 670*375b28ffSGowtham Thommandra NULL, &printer); 671355b4669Sjacobs if (status != PAPI_OK) { 672355b4669Sjacobs fprintf(stderr, gettext( 673355b4669Sjacobs "Failed to get printer info for %s: %s\n"), 674355b4669Sjacobs name, verbose_papi_message(svc, status)); 675355b4669Sjacobs papiServiceDestroy(svc); 676*375b28ffSGowtham Thommandra result--; 677*375b28ffSGowtham Thommandra continue; 678355b4669Sjacobs } 679355b4669Sjacobs 680355b4669Sjacobs if (printer != NULL) 681*375b28ffSGowtham Thommandra result += report(svc, name, printer, verbose, 682355b4669Sjacobs description); 683355b4669Sjacobs 684355b4669Sjacobs papiPrinterFree(printer); 685355b4669Sjacobs } 686355b4669Sjacobs 687355b4669Sjacobs papiServiceDestroy(svc); 688355b4669Sjacobs 689*375b28ffSGowtham Thommandra if (name == NULL) 690*375b28ffSGowtham Thommandra break; 691*375b28ffSGowtham Thommandra } 692*375b28ffSGowtham Thommandra 693*375b28ffSGowtham Thommandra freelist(list); 694*375b28ffSGowtham Thommandra 695355b4669Sjacobs return (result); 696355b4669Sjacobs } 697355b4669Sjacobs 698355b4669Sjacobs static int 699355b4669Sjacobs match_user(char *user, char **list) 700355b4669Sjacobs { 701355b4669Sjacobs int i; 702355b4669Sjacobs 703355b4669Sjacobs for (i = 0; list[i] != NULL; i++) { 704355b4669Sjacobs if (strcmp(user, list[i]) == 0) 705355b4669Sjacobs return (0); 706355b4669Sjacobs } 707355b4669Sjacobs 708355b4669Sjacobs return (-1); 709355b4669Sjacobs } 710355b4669Sjacobs 711355b4669Sjacobs static char **users = NULL; 712355b4669Sjacobs 713355b4669Sjacobs static int 71435a603adSsonam gupta - Sun Microsystems - Bangalore India report_job(char *printer, papi_job_t job, int show_rank, int verbose) 715355b4669Sjacobs { 716355b4669Sjacobs papi_attribute_t **attrs = papiJobGetAttributeList(job); 717355b4669Sjacobs time_t clock = 0; 718355b4669Sjacobs char date[24]; 719355b4669Sjacobs char request[26]; 720355b4669Sjacobs char *user = "unknown"; 721b9c04f6bSsonam gupta - Sun Microsystems - Bangalore India char *host = NULL; 722355b4669Sjacobs int32_t size = 0; 723355b4669Sjacobs int32_t jstate = 0; 724b9c04f6bSsonam gupta - Sun Microsystems - Bangalore India char User[50]; 725355b4669Sjacobs 726355b4669Sjacobs char *destination = "unknown"; 727355b4669Sjacobs int32_t id = -1; 7283d09a4feSsonam gupta - Sun Microsystems - Bangalore India static int check = 0; 7293d09a4feSsonam gupta - Sun Microsystems - Bangalore India static char *uri = NULL; 730355b4669Sjacobs 731355b4669Sjacobs (void) papiAttributeListGetString(attrs, NULL, 732355b4669Sjacobs "job-originating-user-name", &user); 733355b4669Sjacobs 734355b4669Sjacobs if ((users != NULL) && (match_user(user, users) < 0)) 735355b4669Sjacobs return (0); 736355b4669Sjacobs 737b9c04f6bSsonam gupta - Sun Microsystems - Bangalore India (void) papiAttributeListGetString(attrs, NULL, 738b9c04f6bSsonam gupta - Sun Microsystems - Bangalore India "job-originating-host-name", &host); 739b9c04f6bSsonam gupta - Sun Microsystems - Bangalore India 7403d09a4feSsonam gupta - Sun Microsystems - Bangalore India if (check == 0) { 7413d09a4feSsonam gupta - Sun Microsystems - Bangalore India /* 7423d09a4feSsonam gupta - Sun Microsystems - Bangalore India * Read the attribute "job-printer-uri" 7433d09a4feSsonam gupta - Sun Microsystems - Bangalore India * just once 7443d09a4feSsonam gupta - Sun Microsystems - Bangalore India */ 7453d09a4feSsonam gupta - Sun Microsystems - Bangalore India (void) papiAttributeListGetString(attrs, NULL, 7463d09a4feSsonam gupta - Sun Microsystems - Bangalore India "job-printer-uri", &uri); 7473d09a4feSsonam gupta - Sun Microsystems - Bangalore India check = 1; 7483d09a4feSsonam gupta - Sun Microsystems - Bangalore India } 7493d09a4feSsonam gupta - Sun Microsystems - Bangalore India 7503d09a4feSsonam gupta - Sun Microsystems - Bangalore India if (host) { 7513d09a4feSsonam gupta - Sun Microsystems - Bangalore India /* Check if it is local printer or remote printer */ 7523d09a4feSsonam gupta - Sun Microsystems - Bangalore India uri_t *u = NULL; 7533d09a4feSsonam gupta - Sun Microsystems - Bangalore India 7543d09a4feSsonam gupta - Sun Microsystems - Bangalore India if ((uri != NULL) && (uri_from_string(uri, &u) == 0)) { 7553d09a4feSsonam gupta - Sun Microsystems - Bangalore India char *nodename = localhostname(); 7563d09a4feSsonam gupta - Sun Microsystems - Bangalore India 7573d09a4feSsonam gupta - Sun Microsystems - Bangalore India if ((u->host == NULL) || 7583d09a4feSsonam gupta - Sun Microsystems - Bangalore India (strcasecmp(u->host, "localhost") == 0) || 7593d09a4feSsonam gupta - Sun Microsystems - Bangalore India (strcasecmp(u->host, nodename) == 0)) { 7603d09a4feSsonam gupta - Sun Microsystems - Bangalore India 7613d09a4feSsonam gupta - Sun Microsystems - Bangalore India if (strcasecmp(host, nodename) == 0) { 7623d09a4feSsonam gupta - Sun Microsystems - Bangalore India /* 7633d09a4feSsonam gupta - Sun Microsystems - Bangalore India * Request submitted locally 7643d09a4feSsonam gupta - Sun Microsystems - Bangalore India * for the local queue. 7653d09a4feSsonam gupta - Sun Microsystems - Bangalore India * Hostname will not be displayed 7663d09a4feSsonam gupta - Sun Microsystems - Bangalore India */ 7673d09a4feSsonam gupta - Sun Microsystems - Bangalore India snprintf(User, sizeof (User), "%s", 7683d09a4feSsonam gupta - Sun Microsystems - Bangalore India user); 7693d09a4feSsonam gupta - Sun Microsystems - Bangalore India } 7703d09a4feSsonam gupta - Sun Microsystems - Bangalore India else 7713d09a4feSsonam gupta - Sun Microsystems - Bangalore India snprintf(User, sizeof (User), "%s@%s", 7723d09a4feSsonam gupta - Sun Microsystems - Bangalore India user, host); 7733d09a4feSsonam gupta - Sun Microsystems - Bangalore India } else if (uri != NULL) { 7743d09a4feSsonam gupta - Sun Microsystems - Bangalore India /* 7753d09a4feSsonam gupta - Sun Microsystems - Bangalore India * It's a remote printer. 7763d09a4feSsonam gupta - Sun Microsystems - Bangalore India * In case of remote printers hostname is 7773d09a4feSsonam gupta - Sun Microsystems - Bangalore India * always displayed. 7783d09a4feSsonam gupta - Sun Microsystems - Bangalore India */ 7793d09a4feSsonam gupta - Sun Microsystems - Bangalore India snprintf(User, sizeof (User), "%s@%s", 7803d09a4feSsonam gupta - Sun Microsystems - Bangalore India user, host); 7813d09a4feSsonam gupta - Sun Microsystems - Bangalore India } 7823d09a4feSsonam gupta - Sun Microsystems - Bangalore India uri_free(u); 7833d09a4feSsonam gupta - Sun Microsystems - Bangalore India } else { 7843d09a4feSsonam gupta - Sun Microsystems - Bangalore India /* 7853d09a4feSsonam gupta - Sun Microsystems - Bangalore India * If attribute "job-printer-uri" 7863d09a4feSsonam gupta - Sun Microsystems - Bangalore India * cannot be read 7873d09a4feSsonam gupta - Sun Microsystems - Bangalore India * by default append the hostname 7883d09a4feSsonam gupta - Sun Microsystems - Bangalore India */ 789b9c04f6bSsonam gupta - Sun Microsystems - Bangalore India snprintf(User, sizeof (User), "%s@%s", user, host); 7903d09a4feSsonam gupta - Sun Microsystems - Bangalore India } 7913d09a4feSsonam gupta - Sun Microsystems - Bangalore India } else { 7923d09a4feSsonam gupta - Sun Microsystems - Bangalore India /* 7933d09a4feSsonam gupta - Sun Microsystems - Bangalore India * When print server is s10u4 and ipp service is used 7943d09a4feSsonam gupta - Sun Microsystems - Bangalore India * "job-originating-hostname" attribute is not set 7953d09a4feSsonam gupta - Sun Microsystems - Bangalore India * So get the host information from the uri 7963d09a4feSsonam gupta - Sun Microsystems - Bangalore India */ 7973d09a4feSsonam gupta - Sun Microsystems - Bangalore India uri_t *u = NULL; 7983d09a4feSsonam gupta - Sun Microsystems - Bangalore India if ((uri != NULL) && (uri_from_string(uri, &u) == 0)) { 7993d09a4feSsonam gupta - Sun Microsystems - Bangalore India if ((u != NULL) && (u->host != NULL)) 8003d09a4feSsonam gupta - Sun Microsystems - Bangalore India snprintf(User, sizeof (User), "%s@%s", 8013d09a4feSsonam gupta - Sun Microsystems - Bangalore India user, u->host); 802b9c04f6bSsonam gupta - Sun Microsystems - Bangalore India else 803b9c04f6bSsonam gupta - Sun Microsystems - Bangalore India snprintf(User, sizeof (User), "%s", user); 804b9c04f6bSsonam gupta - Sun Microsystems - Bangalore India 8053d09a4feSsonam gupta - Sun Microsystems - Bangalore India uri_free(u); 8063d09a4feSsonam gupta - Sun Microsystems - Bangalore India } else 8073d09a4feSsonam gupta - Sun Microsystems - Bangalore India snprintf(User, sizeof (User), "%s", user); 8083d09a4feSsonam gupta - Sun Microsystems - Bangalore India } 809355b4669Sjacobs (void) papiAttributeListGetInteger(attrs, NULL, "job-k-octets", &size); 810355b4669Sjacobs size *= 1024; /* for the approximate byte size */ 811355b4669Sjacobs (void) papiAttributeListGetInteger(attrs, NULL, "job-octets", &size); 812355b4669Sjacobs 813355b4669Sjacobs (void) time(&clock); 814355b4669Sjacobs (void) papiAttributeListGetInteger(attrs, NULL, 815355b4669Sjacobs "time-at-creation", (int32_t *)&clock); 816355b4669Sjacobs (void) strftime(date, sizeof (date), "%b %d %R", localtime(&clock)); 817355b4669Sjacobs 818355b4669Sjacobs (void) papiAttributeListGetString(attrs, NULL, 819355b4669Sjacobs "job-printer-uri", &destination); 820355b4669Sjacobs (void) papiAttributeListGetString(attrs, NULL, 821355b4669Sjacobs "printer-name", &destination); 822355b4669Sjacobs (void) papiAttributeListGetInteger(attrs, NULL, 823355b4669Sjacobs "job-id", &id); 82440e7ce05Ssonam gupta - Sun Microsystems - Bangalore India (void) papiAttributeListGetInteger(attrs, NULL, 82540e7ce05Ssonam gupta - Sun Microsystems - Bangalore India "job-id-requested", &id); 82635a603adSsonam gupta - Sun Microsystems - Bangalore India 827f0b87b90Ssonam gupta - Sun Microsystems - Bangalore India 82835a603adSsonam gupta - Sun Microsystems - Bangalore India snprintf(request, sizeof (request), "%s-%d", printer, id); 829355b4669Sjacobs 830355b4669Sjacobs if (show_rank != 0) { 831355b4669Sjacobs int32_t rank = -1; 832355b4669Sjacobs 833355b4669Sjacobs (void) papiAttributeListGetInteger(attrs, NULL, 834355b4669Sjacobs "number-of-intervening-jobs", &rank); 835355b4669Sjacobs rank++; 836355b4669Sjacobs 837355b4669Sjacobs printf("%3d %-21s %-14s %7ld %s", 838b9c04f6bSsonam gupta - Sun Microsystems - Bangalore India rank, request, User, size, date); 839355b4669Sjacobs } else 840b9c04f6bSsonam gupta - Sun Microsystems - Bangalore India printf("%-23s %-14s %7ld %s", request, User, size, date); 841355b4669Sjacobs 842355b4669Sjacobs (void) papiAttributeListGetInteger(attrs, NULL, 843355b4669Sjacobs "job-state", &jstate); 844f0b87b90Ssonam gupta - Sun Microsystems - Bangalore India 845c389c7f8SGowtham Thommandra if (jstate == 0x0001) 846c389c7f8SGowtham Thommandra printf(gettext(" being held")); 847c389c7f8SGowtham Thommandra else if (jstate == 0x0800) 848c389c7f8SGowtham Thommandra printf(gettext(" notifying user")); 849c389c7f8SGowtham Thommandra else if (jstate == 0x0040) 850c389c7f8SGowtham Thommandra printf(gettext(" cancelled")); 851c389c7f8SGowtham Thommandra else if (jstate == 0x0010) 852c389c7f8SGowtham Thommandra printf(gettext(" finished printing")); 853c389c7f8SGowtham Thommandra else if (jstate == 0x0008) 854c389c7f8SGowtham Thommandra printf(gettext(" on %s"), destination); 855c389c7f8SGowtham Thommandra else if (jstate == 0x2000) 856c389c7f8SGowtham Thommandra printf(gettext(" held by admin")); 857c389c7f8SGowtham Thommandra else if (jstate == 0x0002) 858c389c7f8SGowtham Thommandra printf(gettext(" being filtered")); 859c389c7f8SGowtham Thommandra else if (jstate == 0x0004) 860c389c7f8SGowtham Thommandra printf(gettext(" filtered")); 861c389c7f8SGowtham Thommandra else if (jstate == 0x0020) 862c389c7f8SGowtham Thommandra printf(gettext(" held for change")); 863355b4669Sjacobs 864355b4669Sjacobs if (verbose == 1) { 8650a44ef6dSjacobs char *form = NULL; 8660a44ef6dSjacobs 867355b4669Sjacobs (void) papiAttributeListGetString(attrs, NULL, 868355b4669Sjacobs "output-device-assigned", &destination); 869355b4669Sjacobs printf("\n\t assigned %s", destination); 8700a44ef6dSjacobs 8710a44ef6dSjacobs (void) papiAttributeListGetString(attrs, NULL, "form", &form); 8720a44ef6dSjacobs if (form != NULL) 8730a44ef6dSjacobs printf(", form %s", form); 874355b4669Sjacobs } else if (verbose > 1) { 875355b4669Sjacobs printf("\n"); 876355b4669Sjacobs papiAttributeListPrint(stdout, attrs, "\t"); 877355b4669Sjacobs } 878355b4669Sjacobs 879355b4669Sjacobs printf("\n"); 880355b4669Sjacobs 881355b4669Sjacobs return (0); 882355b4669Sjacobs } 883355b4669Sjacobs 884355b4669Sjacobs static int 88535a603adSsonam gupta - Sun Microsystems - Bangalore India job_query(char *request, int (*report)(char *, papi_job_t, int, int), 886355b4669Sjacobs papi_encryption_t encryption, int show_rank, int verbose) 887355b4669Sjacobs { 888355b4669Sjacobs int result = 0; 889355b4669Sjacobs papi_status_t status; 890355b4669Sjacobs papi_service_t svc = NULL; 8914749ecc3Ssonam gupta - Sun Microsystems - Bangalore India char *printer = request; 892355b4669Sjacobs int32_t id = -1; 8934749ecc3Ssonam gupta - Sun Microsystems - Bangalore India int flag1 = 0; 8944749ecc3Ssonam gupta - Sun Microsystems - Bangalore India int flag = 1; 8954749ecc3Ssonam gupta - Sun Microsystems - Bangalore India int print_flag = 0; 896355b4669Sjacobs 8974749ecc3Ssonam gupta - Sun Microsystems - Bangalore India do { 8984749ecc3Ssonam gupta - Sun Microsystems - Bangalore India status = papiServiceCreate(&svc, printer, NULL, NULL, 8994749ecc3Ssonam gupta - Sun Microsystems - Bangalore India cli_auth_callback, encryption, NULL); 900355b4669Sjacobs 9014749ecc3Ssonam gupta - Sun Microsystems - Bangalore India if ((status == PAPI_OK) && (printer != NULL)) 9024749ecc3Ssonam gupta - Sun Microsystems - Bangalore India print_flag = 1; 9034749ecc3Ssonam gupta - Sun Microsystems - Bangalore India 9044749ecc3Ssonam gupta - Sun Microsystems - Bangalore India /* <name>-# printer name does not exist */ 9054749ecc3Ssonam gupta - Sun Microsystems - Bangalore India if (status != PAPI_OK) { 9064749ecc3Ssonam gupta - Sun Microsystems - Bangalore India /* 9074749ecc3Ssonam gupta - Sun Microsystems - Bangalore India * Check if <name>-# is a request-id 9084749ecc3Ssonam gupta - Sun Microsystems - Bangalore India * Once this check is done flag1 is set 9094749ecc3Ssonam gupta - Sun Microsystems - Bangalore India */ 9104749ecc3Ssonam gupta - Sun Microsystems - Bangalore India if (flag1 == 1) 9114749ecc3Ssonam gupta - Sun Microsystems - Bangalore India break; 9124749ecc3Ssonam gupta - Sun Microsystems - Bangalore India 9134749ecc3Ssonam gupta - Sun Microsystems - Bangalore India get_printer_id(printer, &printer, &id); 9144749ecc3Ssonam gupta - Sun Microsystems - Bangalore India 9154749ecc3Ssonam gupta - Sun Microsystems - Bangalore India status = papiServiceCreate(&svc, printer, NULL, NULL, 9164749ecc3Ssonam gupta - Sun Microsystems - Bangalore India cli_auth_callback, encryption, NULL); 9174749ecc3Ssonam gupta - Sun Microsystems - Bangalore India 918355b4669Sjacobs if (status != PAPI_OK) { 919355b4669Sjacobs fprintf(stderr, gettext( 920355b4669Sjacobs "Failed to contact service for %s: %s\n"), 921355b4669Sjacobs (printer ? printer : "all"), 922355b4669Sjacobs verbose_papi_message(svc, status)); 923355b4669Sjacobs return (-1); 924355b4669Sjacobs } 9254749ecc3Ssonam gupta - Sun Microsystems - Bangalore India } 926355b4669Sjacobs 927355b4669Sjacobs if (printer == NULL) { /* all */ 928355b4669Sjacobs char **interest = interest_list(svc); 929355b4669Sjacobs 930355b4669Sjacobs if (interest != NULL) { 931355b4669Sjacobs int i; 932355b4669Sjacobs 933355b4669Sjacobs for (i = 0; interest[i] != NULL; i++) 934355b4669Sjacobs result += job_query(interest[i], report, 935355b4669Sjacobs encryption, show_rank, verbose); 936355b4669Sjacobs } 937355b4669Sjacobs } else if (id == -1) { /* a printer */ 938355b4669Sjacobs papi_job_t *jobs = NULL; 939355b4669Sjacobs 9404749ecc3Ssonam gupta - Sun Microsystems - Bangalore India status = papiPrinterListJobs(svc, printer, NULL, 9414749ecc3Ssonam gupta - Sun Microsystems - Bangalore India 0, 0, &jobs); 942355b4669Sjacobs if (status != PAPI_OK) { 943355b4669Sjacobs fprintf(stderr, gettext( 944355b4669Sjacobs "Failed to get job list: %s\n"), 945355b4669Sjacobs verbose_papi_message(svc, status)); 946355b4669Sjacobs papiServiceDestroy(svc); 947355b4669Sjacobs return (-1); 948355b4669Sjacobs } 949355b4669Sjacobs 950355b4669Sjacobs if (jobs != NULL) { 951355b4669Sjacobs int i; 952355b4669Sjacobs 953355b4669Sjacobs for (i = 0; jobs[i] != NULL; i++) 95435a603adSsonam gupta - Sun Microsystems - Bangalore India result += report(printer, 95535a603adSsonam gupta - Sun Microsystems - Bangalore India jobs[i], show_rank, 95635a603adSsonam gupta - Sun Microsystems - Bangalore India verbose); 957355b4669Sjacobs } 958355b4669Sjacobs 959355b4669Sjacobs papiJobListFree(jobs); 960355b4669Sjacobs } else { /* a job */ 961355b4669Sjacobs papi_job_t job = NULL; 962f0b87b90Ssonam gupta - Sun Microsystems - Bangalore India int rid = id; 963355b4669Sjacobs 9644749ecc3Ssonam gupta - Sun Microsystems - Bangalore India /* Once a job has been found stop processing */ 9654749ecc3Ssonam gupta - Sun Microsystems - Bangalore India flag = 0; 9664749ecc3Ssonam gupta - Sun Microsystems - Bangalore India 967f0b87b90Ssonam gupta - Sun Microsystems - Bangalore India /* 968f0b87b90Ssonam gupta - Sun Microsystems - Bangalore India * Job-id could be the job-id requested 969f0b87b90Ssonam gupta - Sun Microsystems - Bangalore India * Check if it is job-id or job-id-requested 970f0b87b90Ssonam gupta - Sun Microsystems - Bangalore India */ 971f0b87b90Ssonam gupta - Sun Microsystems - Bangalore India id = job_to_be_queried(svc, printer, id); 972f0b87b90Ssonam gupta - Sun Microsystems - Bangalore India 973f0b87b90Ssonam gupta - Sun Microsystems - Bangalore India if (id > 0) 974*375b28ffSGowtham Thommandra status = papiJobQuery(svc, printer, id, 975*375b28ffSGowtham Thommandra NULL, &job); 976f0b87b90Ssonam gupta - Sun Microsystems - Bangalore India else 977*375b28ffSGowtham Thommandra status = papiJobQuery(svc, printer, rid, 978*375b28ffSGowtham Thommandra NULL, &job); 979f0b87b90Ssonam gupta - Sun Microsystems - Bangalore India 980355b4669Sjacobs if (status != PAPI_OK) { 9814749ecc3Ssonam gupta - Sun Microsystems - Bangalore India if (!print_flag) 982355b4669Sjacobs fprintf(stderr, gettext( 98354d5ddccSsonam gupta - Sun Microsystems - Bangalore India "Failed to get job"\ 98454d5ddccSsonam gupta - Sun Microsystems - Bangalore India " info for %s: %s\n"), 98554d5ddccSsonam gupta - Sun Microsystems - Bangalore India request, 98654d5ddccSsonam gupta - Sun Microsystems - Bangalore India verbose_papi_message(svc, status)); 987355b4669Sjacobs papiServiceDestroy(svc); 988355b4669Sjacobs return (-1); 989355b4669Sjacobs } 990355b4669Sjacobs 991355b4669Sjacobs if (job != NULL) 99235a603adSsonam gupta - Sun Microsystems - Bangalore India result = report(printer, job, 99335a603adSsonam gupta - Sun Microsystems - Bangalore India show_rank, verbose); 994355b4669Sjacobs 995355b4669Sjacobs papiJobFree(job); 996355b4669Sjacobs } 997355b4669Sjacobs 9984749ecc3Ssonam gupta - Sun Microsystems - Bangalore India if (flag) { 9994749ecc3Ssonam gupta - Sun Microsystems - Bangalore India id = -1; 10004749ecc3Ssonam gupta - Sun Microsystems - Bangalore India get_printer_id(printer, &printer, &id); 10014749ecc3Ssonam gupta - Sun Microsystems - Bangalore India if (id == -1) 10024749ecc3Ssonam gupta - Sun Microsystems - Bangalore India flag = 0; 10034749ecc3Ssonam gupta - Sun Microsystems - Bangalore India else 10044749ecc3Ssonam gupta - Sun Microsystems - Bangalore India flag1 = 1; 10054749ecc3Ssonam gupta - Sun Microsystems - Bangalore India } 10064749ecc3Ssonam gupta - Sun Microsystems - Bangalore India } while (flag); 10074749ecc3Ssonam gupta - Sun Microsystems - Bangalore India 1008355b4669Sjacobs papiServiceDestroy(svc); 1009355b4669Sjacobs 1010355b4669Sjacobs return (result); 1011355b4669Sjacobs } 1012355b4669Sjacobs 1013355b4669Sjacobs static int 1014355b4669Sjacobs report_form(char *name, papi_attribute_t **attrs, int verbose) 1015355b4669Sjacobs { 1016355b4669Sjacobs papi_status_t status; 1017355b4669Sjacobs char *form = NULL; 1018355b4669Sjacobs void *iter = NULL; 1019355b4669Sjacobs 1020355b4669Sjacobs for (status = papiAttributeListGetString(attrs, &iter, 1021355b4669Sjacobs "form-supported", &form); 1022355b4669Sjacobs status == PAPI_OK; 1023355b4669Sjacobs status = papiAttributeListGetString(attrs, &iter, 1024355b4669Sjacobs NULL, &form)) { 1025355b4669Sjacobs if ((name == NULL) || (strcmp(name, form) == 0)) { 1026355b4669Sjacobs printf(gettext("form %s is available to you\n"), form); 1027355b4669Sjacobs if (verbose != 0) { 1028355b4669Sjacobs char *detail = NULL; 1029355b4669Sjacobs status = papiAttributeListGetString(attrs, NULL, 103054d5ddccSsonam gupta - Sun Microsystems - Bangalore India "form-supported-detail", &detail); 1031355b4669Sjacobs if (status == PAPI_OK) 1032355b4669Sjacobs printf("%s\n", detail); 1033355b4669Sjacobs } 1034355b4669Sjacobs } 1035355b4669Sjacobs } 1036355b4669Sjacobs 1037355b4669Sjacobs return (0); 1038355b4669Sjacobs } 1039355b4669Sjacobs 1040355b4669Sjacobs static int 1041355b4669Sjacobs report_print_wheels(char *name, papi_attribute_t **attrs, int verbose) 1042355b4669Sjacobs { 1043355b4669Sjacobs papi_status_t status; 1044355b4669Sjacobs char *pw = NULL; 1045355b4669Sjacobs void *iter = NULL; 1046355b4669Sjacobs 1047355b4669Sjacobs for (status = papiAttributeListGetString(attrs, &iter, 1048355b4669Sjacobs "pw-supported", &pw); 1049355b4669Sjacobs status == PAPI_OK; 1050355b4669Sjacobs status = papiAttributeListGetString(attrs, &iter, NULL, &pw)) { 1051355b4669Sjacobs if ((name == NULL) || (strcmp(name, pw) == 0)) { 1052355b4669Sjacobs printf(gettext("charset %s is available\n"), pw); 1053355b4669Sjacobs if (verbose != 0) { 1054355b4669Sjacobs char *info = NULL; 1055355b4669Sjacobs status = papiAttributeListGetString(attrs, NULL, 1056355b4669Sjacobs "pw-supported-extra", &info); 1057355b4669Sjacobs if (status == PAPI_OK) 1058355b4669Sjacobs printf("%s\n", info); 1059355b4669Sjacobs } 1060355b4669Sjacobs } 1061355b4669Sjacobs } 1062355b4669Sjacobs 1063355b4669Sjacobs return (0); 1064355b4669Sjacobs } 1065355b4669Sjacobs 1066355b4669Sjacobs static int 1067355b4669Sjacobs service_query(char *name, int (*report)(char *, papi_attribute_t **, int), 1068355b4669Sjacobs papi_encryption_t encryption, int verbose) 1069355b4669Sjacobs { 1070355b4669Sjacobs int result = 0; 1071355b4669Sjacobs papi_status_t status; 1072355b4669Sjacobs papi_service_t svc = NULL; 1073355b4669Sjacobs papi_attribute_t **attrs = NULL; 1074355b4669Sjacobs 1075355b4669Sjacobs status = papiServiceCreate(&svc, name, NULL, NULL, cli_auth_callback, 1076355b4669Sjacobs encryption, NULL); 1077355b4669Sjacobs if (status != PAPI_OK) { 1078355b4669Sjacobs papiServiceDestroy(svc); 1079355b4669Sjacobs return (-1); 1080355b4669Sjacobs } 1081355b4669Sjacobs 1082355b4669Sjacobs attrs = papiServiceGetAttributeList(svc); 1083355b4669Sjacobs if (attrs != NULL) { 1084355b4669Sjacobs result = report(name, attrs, verbose); 1085355b4669Sjacobs 1086355b4669Sjacobs if (verbose > 1) { 1087355b4669Sjacobs printf("\n"); 1088355b4669Sjacobs papiAttributeListPrint(stdout, attrs, "\t"); 1089355b4669Sjacobs printf("\n"); 1090355b4669Sjacobs } 1091355b4669Sjacobs } 1092355b4669Sjacobs 1093355b4669Sjacobs papiServiceDestroy(svc); 1094355b4669Sjacobs 1095355b4669Sjacobs return (result); 1096355b4669Sjacobs } 1097355b4669Sjacobs 1098355b4669Sjacobs int 1099355b4669Sjacobs main(int ac, char *av[]) 1100355b4669Sjacobs { 1101355b4669Sjacobs int exit_code = 0; 1102355b4669Sjacobs papi_encryption_t encryption = PAPI_ENCRYPT_NEVER; 1103355b4669Sjacobs int rank = 0; 1104355b4669Sjacobs int verbose = 0; 1105355b4669Sjacobs int description = 0; 1106355b4669Sjacobs int c; 1107355b4669Sjacobs char **argv; 1108355b4669Sjacobs 1109355b4669Sjacobs (void) setlocale(LC_ALL, ""); 1110355b4669Sjacobs (void) textdomain("SUNW_OST_OSCMD"); 1111355b4669Sjacobs 1112355b4669Sjacobs argv = (char **)calloc((ac + 1), sizeof (char *)); 111391216fe4Swendyp for (c = 0; c < ac; c++) { 111491216fe4Swendyp if ((av[c][0] == '-') && (av[c][1] == 'l') && 111591216fe4Swendyp (isalpha(av[c][2]) != 0)) { 111691216fe4Swendyp /* preserve old "-l[po...]" behavior */ 111791216fe4Swendyp argv[c] = &av[c][1]; 111891216fe4Swendyp argv[c][0] = '-'; 111991216fe4Swendyp verbose = 1; 112091216fe4Swendyp 112191216fe4Swendyp } else 1122355b4669Sjacobs argv[c] = av[c]; 112391216fe4Swendyp } 112491216fe4Swendyp 1125355b4669Sjacobs argv[c++] = "--"; 1126355b4669Sjacobs ac = c; 1127355b4669Sjacobs 1128355b4669Sjacobs /* preprocess argument list looking for '-l' or '-R' so it can trail */ 1129355b4669Sjacobs while ((c = getopt(ac, argv, "LEDf:S:stc:p:a:drs:v:l:o:R:u:")) != EOF) 1130355b4669Sjacobs switch (c) { 1131355b4669Sjacobs case 'l': 1132355b4669Sjacobs if ((optarg == NULL) || (optarg[0] == '-')) 1133355b4669Sjacobs optarg = "1"; 1134355b4669Sjacobs verbose = atoi(optarg); 1135355b4669Sjacobs break; 1136355b4669Sjacobs case 'D': 1137355b4669Sjacobs description = 1; 1138355b4669Sjacobs break; 1139355b4669Sjacobs case 'R': 1140355b4669Sjacobs rank = 1; 1141355b4669Sjacobs break; 1142355b4669Sjacobs case 'E': 1143355b4669Sjacobs encryption = PAPI_ENCRYPT_REQUIRED; 1144355b4669Sjacobs break; 1145355b4669Sjacobs default: 1146355b4669Sjacobs break; 1147355b4669Sjacobs } 1148355b4669Sjacobs optind = 1; 1149355b4669Sjacobs 1150355b4669Sjacobs /* process command line arguments */ 1151355b4669Sjacobs while ((c = getopt(ac, argv, "LEDf:S:stc:p:a:drs:v:l:o:R:u:")) != EOF) { 1152355b4669Sjacobs switch (c) { /* these may or may not have an option */ 1153355b4669Sjacobs case 'a': 1154355b4669Sjacobs case 'c': 1155355b4669Sjacobs case 'p': 1156355b4669Sjacobs case 'o': 1157355b4669Sjacobs case 'R': 1158355b4669Sjacobs case 'u': 1159355b4669Sjacobs case 'v': 1160355b4669Sjacobs case 'l': 1161355b4669Sjacobs case 'f': 1162355b4669Sjacobs case 'S': 1163355b4669Sjacobs if (optarg[0] == '-') { 1164355b4669Sjacobs /* this check stop a possible infinite loop */ 1165355b4669Sjacobs if ((optind > 1) && (argv[optind-1][1] != c)) 1166355b4669Sjacobs optind--; 1167355b4669Sjacobs optarg = NULL; 1168355b4669Sjacobs } else if (strcmp(optarg, "all") == 0) 1169355b4669Sjacobs optarg = NULL; 1170355b4669Sjacobs } 1171355b4669Sjacobs 1172355b4669Sjacobs switch (c) { 1173355b4669Sjacobs case 'a': 1174355b4669Sjacobs exit_code += printer_query(optarg, report_accepting, 1175355b4669Sjacobs encryption, verbose, 0); 1176355b4669Sjacobs break; 1177355b4669Sjacobs case 'c': 1178355b4669Sjacobs exit_code += printer_query(optarg, report_class, 1179355b4669Sjacobs encryption, verbose, 0); 1180355b4669Sjacobs break; 1181355b4669Sjacobs case 'p': 1182355b4669Sjacobs exit_code += printer_query(optarg, report_printer, 118354d5ddccSsonam gupta - Sun Microsystems - Bangalore India encryption, verbose, description); 1184355b4669Sjacobs break; 1185355b4669Sjacobs case 'd': 1186355b4669Sjacobs exit_code += lpstat_default_printer(encryption); 1187355b4669Sjacobs break; 1188355b4669Sjacobs case 'r': 1189355b4669Sjacobs exit_code += lpstat_service_status(encryption); 1190355b4669Sjacobs break; 1191355b4669Sjacobs case 'u': 1192355b4669Sjacobs if (optarg != NULL) 1193355b4669Sjacobs users = strsplit(optarg, ", \n"); 1194355b4669Sjacobs exit_code += job_query(NULL, report_job, 1195355b4669Sjacobs encryption, rank, verbose); 1196355b4669Sjacobs if (users != NULL) { 1197355b4669Sjacobs free(users); 1198355b4669Sjacobs users = NULL; 1199355b4669Sjacobs } 1200355b4669Sjacobs break; 1201355b4669Sjacobs case 'v': 1202355b4669Sjacobs exit_code += printer_query(optarg, report_device, 1203355b4669Sjacobs encryption, verbose, 0); 1204355b4669Sjacobs break; 1205c2765d20SGowtham Thommandra case 'R': /* set "rank" flag in first pass */ 1206355b4669Sjacobs case 'o': 1207355b4669Sjacobs exit_code += job_query(optarg, report_job, 1208355b4669Sjacobs encryption, rank, verbose); 1209355b4669Sjacobs break; 1210355b4669Sjacobs case 'f': 1211355b4669Sjacobs exit_code += service_query(optarg, report_form, 1212355b4669Sjacobs encryption, verbose); 1213355b4669Sjacobs break; 1214355b4669Sjacobs case 'S': 1215355b4669Sjacobs exit_code += service_query(optarg, report_print_wheels, 1216355b4669Sjacobs encryption, verbose); 1217355b4669Sjacobs break; 1218355b4669Sjacobs case 's': 1219355b4669Sjacobs exit_code += lpstat_service_status(encryption); 1220355b4669Sjacobs exit_code += lpstat_default_printer(encryption); 1221355b4669Sjacobs exit_code += printer_query(NULL, report_class, 1222355b4669Sjacobs encryption, verbose, 0); 1223355b4669Sjacobs exit_code += printer_query(NULL, report_device, 1224355b4669Sjacobs encryption, verbose, 0); 1225355b4669Sjacobs exit_code += service_query(optarg, report_form, 1226355b4669Sjacobs encryption, verbose); 1227355b4669Sjacobs exit_code += service_query(optarg, report_print_wheels, 1228355b4669Sjacobs encryption, verbose); 1229355b4669Sjacobs break; 1230355b4669Sjacobs case 't': 1231355b4669Sjacobs exit_code += lpstat_service_status(encryption); 1232355b4669Sjacobs exit_code += lpstat_default_printer(encryption); 1233355b4669Sjacobs exit_code += printer_query(NULL, report_class, 1234355b4669Sjacobs encryption, verbose, 0); 1235355b4669Sjacobs exit_code += printer_query(NULL, report_device, 1236355b4669Sjacobs encryption, verbose, 0); 1237355b4669Sjacobs exit_code += printer_query(NULL, report_accepting, 1238355b4669Sjacobs encryption, verbose, 0); 1239355b4669Sjacobs exit_code += printer_query(NULL, report_printer, 1240355b4669Sjacobs encryption, verbose, 0); 1241355b4669Sjacobs exit_code += service_query(optarg, report_form, 1242355b4669Sjacobs encryption, verbose); 1243355b4669Sjacobs exit_code += service_query(optarg, report_print_wheels, 1244355b4669Sjacobs encryption, verbose); 1245355b4669Sjacobs exit_code += job_query(NULL, report_job, 1246355b4669Sjacobs encryption, rank, verbose); 1247355b4669Sjacobs break; 1248355b4669Sjacobs case 'L': /* local-only, ignored */ 1249355b4669Sjacobs case 'l': /* increased verbose level in first pass */ 1250355b4669Sjacobs case 'D': /* set "description" flag in first pass */ 1251355b4669Sjacobs case 'E': /* set encryption in the first pass */ 1252355b4669Sjacobs break; 1253355b4669Sjacobs default: 1254355b4669Sjacobs usage(av[0]); 1255355b4669Sjacobs } 1256355b4669Sjacobs } 1257355b4669Sjacobs ac--; 1258355b4669Sjacobs 1259355b4669Sjacobs if (ac == 1) { /* report on my jobs */ 1260355b4669Sjacobs struct passwd *pw = getpwuid(getuid()); 1261355b4669Sjacobs 1262355b4669Sjacobs if (pw != NULL) 1263355b4669Sjacobs users = strsplit(pw->pw_name, ""); 1264355b4669Sjacobs exit_code += job_query(NULL, report_job, encryption, 1265355b4669Sjacobs rank, verbose); 1266355b4669Sjacobs if (users != NULL) { 1267355b4669Sjacobs free(users); 1268355b4669Sjacobs users = NULL; 1269355b4669Sjacobs } 1270355b4669Sjacobs } else { 1271355b4669Sjacobs for (c = optind; c < ac; c++) 1272355b4669Sjacobs exit_code += job_query(argv[c], report_job, encryption, 1273355b4669Sjacobs rank, verbose); 1274355b4669Sjacobs } 1275355b4669Sjacobs 1276355b4669Sjacobs 1277355b4669Sjacobs if (exit_code != 0) 1278355b4669Sjacobs exit_code = 1; 1279355b4669Sjacobs 1280355b4669Sjacobs return (exit_code); 1281355b4669Sjacobs } 1282