llib-lprint revision 7253:39650c3caeca
1169695Skan/* 2169695Skan * CDDL HEADER START 3169695Skan * 4169695Skan * The contents of this file are subject to the terms of the 5169695Skan * Common Development and Distribution License (the "License"). 6169695Skan * You may not use this file except in compliance with the License. 7169695Skan * 8169695Skan * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9169695Skan * or http://www.opensolaris.org/os/licensing. 10169695Skan * See the License for the specific language governing permissions 11169695Skan * and limitations under the License. 12169695Skan * 13169695Skan * When distributing Covered Code, include this CDDL HEADER in each 14169695Skan * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15169695Skan * If applicable, add the following below this CDDL HEADER, with the 16169695Skan * fields enclosed by brackets "[]" replaced with your own identifying 17169695Skan * information: Portions Copyright [yyyy] [name of copyright owner] 18169695Skan * 19169695Skan * CDDL HEADER END 20169695Skan */ 21169695Skan/* 22169695Skan * Copyright 2008 Sun Microsystems, Inc. All rights reserved. 23169695Skan * Use is subject to license terms. 24169695Skan */ 25169695Skan 26169695Skan/* LINTLIBRARY */ 27169695Skan/* PROTOLIB1 */ 28169695Skan 29169695Skan#pragma ident "%Z%%M% %I% %E% SMI" 30169695Skan 31169695Skan#include <arpa/inet.h> 32169695Skan#include <dirent.h> 33169695Skan#include <dlfcn.h> 34169695Skan#include <errno.h> 35169695Skan#include <fcntl.h> 36169695Skan#include <libintl.h> 37169695Skan#include <netdb.h> 38169695Skan#include <netinet/in.h> 39169695Skan#include <pwd.h> 40169695Skan#include <rpc/rpc.h> 41169695Skan#include <rpcsvc/yp_prot.h> 42169695Skan#include <rpcsvc/ypclnt.h> 43169695Skan#include <signal.h> 44169695Skan#include <stdarg.h> 45169695Skan#include <stdio.h> 46169695Skan#include <stdlib.h> 47169695Skan#include <string.h> 48169695Skan#include <sys/mman.h> 49169695Skan#include <sys/socket.h> 50169695Skan#include <sys/stat.h> 51169695Skan#include <sys/systeminfo.h> 52169695Skan#include <sys/types.h> 53169695Skan#include <syslog.h> 54169695Skan#include <unistd.h> 55169695Skan 56169695Skanvoid **list_append(void **, void *); 57169695Skanvoid **list_append_unique(void **, void *, int (*)(void *, void*)); 58169695Skanvoid **list_concatenate(void **, void **); 59169695Skanvoid * list_locate(void **, int (*)(void *, void *), void *); 60169695Skanint list_iterate(void **, int (*)(void *, __va_list), ...); 61169695Skan 62169695Skanvoid *dynamic_function(const char *, const char *); 63169695Skan 64169695Skanstruct ns_bsd_addr { 65169695Skan char *server; /* server name */ 66169695Skan char *printer; /* printer name or NULL */ 67169695Skan char *extension; /* RFC-1179 conformance */ 68169695Skan char *pname; /* Local printer name */ 69169695Skan}; 70169695Skantypedef struct ns_bsd_addr ns_bsd_addr_t; 71169695Skan 72169695Skan/* Key/Value pair structure */ 73169695Skanstruct ns_kvp { 74169695Skan char *key; /* key */ 75169695Skan char *value; /* value string */ 76169695Skan}; 77169695Skantypedef struct ns_kvp ns_kvp_t; 78169695Skan 79169695Skan/* Printer Object structure */ 80169695Skanstruct ns_printer { 81169695Skan char *name; /* primary name of printer */ 82169695Skan char **aliases; /* aliases for printer */ 83169695Skan char *source; /* name service derived from */ 84169695Skan ns_kvp_t **attributes; /* key/value pairs. */ 85169695Skan}; 86169695Skantypedef struct ns_printer ns_printer_t; 87169695Skan 88169695Skan/* functions to get/put printer objects */ 89169695Skanns_printer_t *ns_printer_create(char *, char **, char *, ns_kvp_t **); 90169695Skanns_printer_t *ns_printer_get_name(const char *, const char *); 91169695Skanns_printer_t **ns_printer_get_list(const char *); 92169695Skanint ns_printer_put(const ns_printer_t *); 93169695Skanvoid ns_printer_destroy(ns_printer_t *); 94169695Skan 95169695Skan/* functions to manipulate key/value pairs */ 96169695Skanvoid *ns_get_value(const char *, const ns_printer_t *); 97169695Skanchar *ns_get_value_string(const char *, const ns_printer_t *); 98169695Skanint ns_set_value(const char *, const void *, ns_printer_t *); 99169695Skanint ns_set_value_from_string(const char *, const char *, 100169695Skan ns_printer_t *); 101169695Skanns_kvp_t *ns_kvp_create(const char *, const char *); 102169695Skan 103169695Skan/* for BSD bindings only */ 104169695Skanns_bsd_addr_t *ns_bsd_addr_get_default(void); 105169695Skanns_bsd_addr_t *ns_bsd_addr_get_name(char *name); 106169695Skanns_bsd_addr_t **ns_bsd_addr_get_all(int); 107169695Skanns_bsd_addr_t **ns_bsd_addr_get_list(int); 108169695Skan 109169695Skan/* others */ 110169695Skanns_printer_t *posix_name(const char *); 111169695Skanint ns_printer_match_name(ns_printer_t *, const char *); 112169695Skanchar *ns_printer_name_list(const ns_printer_t *); 113169695Skanchar *value_to_string(const char *, void *); 114169695Skanvoid *string_to_value(const char *, char *); 115169695Skan 116169695Skan 117169695Skanns_printer_t *_cvt_pconf_entry_to_printer(char *, char *); 118169695Skanchar *_cvt_printer_to_pconf_entry(ns_printer_t *); 119169695Skan 120169695Skanns_printer_t *_cvt_user_string_to_printer(char *, char *); 121169695Skanchar *_cvt_printer_to_user_string(ns_printer_t *); 122169695Skan 123169695Skan 124169695Skanns_printer_t *_file_get_name(const char *, const char *, 125169695Skan ns_printer_t *(*)(char *, char *), char *); 126169695Skan 127169695Skanns_printer_t **_file_get_list(const char *, 128169695Skan ns_printer_t *(*)(char *, char *), char *); 129169695Skan 130169695Skanint _file_put_printer(const char *, const ns_printer_t *, 131169695Skan ns_printer_t *(*)(char *, char *), char *, char *(*)(ns_printer_t *)); 132169695Skan 133169695Skan 134169695Skanns_printer_t *_nis_get_name(const char *, const char *, 135169695Skan ns_printer_t *(*)(char *, char *), char *); 136169695Skan 137169695Skanns_printer_t **_nis_get_list(const char *, 138169695Skan ns_printer_t *(*)(char *, char *), char *); 139169695Skan 140169695Skanint _nis_put_printer(const char *, const ns_printer_t *, 141169695Skan ns_printer_t *(*)(char *, char *), char *, char *(*)(ns_printer_t *)); 142169695Skan