1/*
2 * CDDL HEADER START
3 *
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
7 *
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
12 *
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
18 *
19 * CDDL HEADER END
20 */
21
22/*
23 * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
24 * Use is subject to license terms.
25 *
26 */
27
28/* $Id: enable.c 146 2006-03-24 00:26:54Z njacobs $ */
29
30
31#include <stdio.h>
32#include <stdlib.h>
33#include <unistd.h>
34#include <string.h>
35#include <locale.h>
36#include <libintl.h>
37#include <papi.h>
38#include "common.h"
39
40static void
41usage(char *program)
42{
43	char *name;
44
45	if ((name = strrchr(program, '/')) == NULL)
46		name = program;
47	else
48		name++;
49
50	fprintf(stdout,
51	    gettext("Usage: %s destination ...\n"),
52	    name);
53	exit(1);
54}
55
56int
57main(int ac, char *av[])
58{
59	papi_status_t status;
60	papi_service_t svc = NULL;
61	papi_encryption_t encryption = PAPI_ENCRYPT_NEVER;
62	int exit_status = 0;
63	int c;
64
65	(void) setlocale(LC_ALL, "");
66	(void) textdomain("SUNW_OST_OSCMD");
67
68	while ((c = getopt(ac, av, "E")) != EOF)
69		switch (c) {
70		case 'E':
71			encryption = PAPI_ENCRYPT_ALWAYS;
72			break;
73		default:
74			usage(av[0]);
75		}
76
77	if (ac == optind)
78		usage(av[0]);
79
80	for (c = optind; c < ac; c++) {
81		char *printer = av[c];
82
83		status = papiServiceCreate(&svc, printer, NULL, NULL,
84		    cli_auth_callback, encryption, NULL);
85		if (status != PAPI_OK) {
86			fprintf(stderr, gettext(
87			    "Failed to contact service for %s: %s\n"),
88			    printer, verbose_papi_message(svc, status));
89			exit_status = 1;
90		}
91
92		status = papiPrinterEnable(svc, printer);
93		if (status == PAPI_OK) {
94			printf(gettext("printer \"%s\" now enabled\n"),
95			    printer);
96		} else if (status == PAPI_NOT_ACCEPTING) {
97			fprintf(stderr, gettext(
98			    "Destination \"%s\" was already enabled.\n"),
99			    printer);
100			exit_status = 1;
101		} else {
102			/* The operation is not supported in lpd protocol */
103			if (status == PAPI_OPERATION_NOT_SUPPORTED) {
104				fprintf(stderr,
105				    verbose_papi_message(svc, status));
106			} else {
107				fprintf(stderr, gettext("enable: %s: %s\n"),
108				    printer, verbose_papi_message(svc, status));
109			}
110			exit_status = 1;
111		}
112
113		papiServiceDestroy(svc);
114	}
115
116	return (exit_status);
117}
118