/* * CDDL HEADER START * * The contents of this file are subject to the terms of the * Common Development and Distribution License (the "License"). * You may not use this file except in compliance with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE * or http://www.opensolaris.org/os/licensing. * See the License for the specific language governing permissions * and limitations under the License. * * When distributing Covered Code, include this CDDL HEADER in each * file and include the License file at usr/src/OPENSOLARIS.LICENSE. * If applicable, add the following below this CDDL HEADER, with the * fields enclosed by brackets "[]" replaced with your own identifying * information: Portions Copyright [yyyy] [name of copyright owner] * * CDDL HEADER END */ /* * Copyright 2006 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ /* LINTLIBRARY */ /* PROTOLIB1 */ #pragma ident "%Z%%M% %I% %E% SMI" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include typedef struct _jobfile jobfile_t; typedef struct _job job_t; struct _jobfile { char *jf_spl_path; /* df file */ char *jf_src_path; /* source file */ char *jf_name; /* title/name */ char *jf_data; /* ptr to mmapped file */ long jf_size; /* size of data */ char jf_mmapped; /* is this mmapped or malloced */ }; struct _job { int job_id; char *job_printer; char *job_server; char *job_user; char *job_host; char *job_spool_dir; jobfile_t *job_cf; char job_df_next; jobfile_t **job_df_list; }; int job_store(job_t *job); void job_free(job_t *job); void job_destroy(job_t *job); job_t *job_create(char *printer, char *server, char *spool); job_t *job_retrieve(char *xfer_file, char *spool); job_t **job_list_append(job_t **list, char *printer, char *spool); #ifndef SUNOS_4 int vjob_match_attribute(char *attribute, __va_list ap); int vjob_cancel(job_t *job, __va_list ap); #endif void **list_append(void **, void *); void **list_append_unique(void **, void *, int (*)(void *, void*)); void **list_concatenate(void **, void **); void * list_locate(void **, int (*)(void *, void *), void *); int list_iterate(void **, int (*)(void *, __va_list), ...); char * get_user_name(void); int check_client_spool(char *printer); int get_lock(char *name, int write_pid); uid_t get_user_id(void); char *strcdup(char *, char); char *strndup(char *, int); char **strsplit(char *, char *); int file_size(char *); int copy_file(char *src, char *dst); int map_in_file(const char *name, char **buf); int write_buffer(char *name, char *buf, int len); void start_daemon(int do_fork); int kill_process(char *file); void *dynamic_function(const char *, const char *); int net_open(char *host, int timeout); int net_close(int nd); int net_read(int nd, char *buf, int len); int net_write(int nd, char *buf, int len); int net_printf(int nd, char *fmt, ...); char *net_gets(char *buf, int size, int nd); int net_send_message(int nd, char *fmt, ...); int net_response(int nd); int net_send_file(int nd, char *name, char *data, int data_len, int type); struct ns_bsd_addr { char *server; /* server name */ char *printer; /* printer name or NULL */ char *extension; /* RFC-1179 conformance */ char *pname; /* Local printer name */ }; typedef struct ns_bsd_addr ns_bsd_addr_t; /* Key/Value pair structure */ struct ns_kvp { char *key; /* key */ char *value; /* value string */ }; typedef struct ns_kvp ns_kvp_t; /* Printer Object structure */ struct ns_printer { char *name; /* primary name of printer */ char **aliases; /* aliases for printer */ char *source; /* name service derived from */ ns_kvp_t **attributes; /* key/value pairs. */ }; typedef struct ns_printer ns_printer_t; /* functions to get/put printer objects */ ns_printer_t *ns_printer_create(char *, char **, char *, ns_kvp_t **); ns_printer_t *ns_printer_get_name(const char *, const char *); ns_printer_t **ns_printer_get_list(const char *); int ns_printer_put(const ns_printer_t *); void ns_printer_destroy(ns_printer_t *); /* functions to manipulate key/value pairs */ void *ns_get_value(const char *, const ns_printer_t *); char *ns_get_value_string(const char *, const ns_printer_t *); int ns_set_value(const char *, const void *, ns_printer_t *); int ns_set_value_from_string(const char *, const char *, ns_printer_t *); ns_kvp_t *ns_kvp_create(const char *, const char *); /* for BSD bindings only */ ns_bsd_addr_t *ns_bsd_addr_get_default(void); ns_bsd_addr_t *ns_bsd_addr_get_name(char *name); ns_bsd_addr_t **ns_bsd_addr_get_all(int); ns_bsd_addr_t **ns_bsd_addr_get_list(int); /* others */ ns_printer_t *posix_name(const char *); int ns_printer_match_name(ns_printer_t *, const char *); char *ns_printer_name_list(const ns_printer_t *); char *value_to_string(const char *, void *); void *string_to_value(const char *, char *); ns_printer_t *_cvt_pconf_entry_to_printer(char *, char *); char *_cvt_printer_to_pconf_entry(ns_printer_t *); ns_printer_t *_cvt_user_string_to_printer(char *, char *); char *_cvt_printer_to_user_string(ns_printer_t *); ns_printer_t *_file_get_name(const char *, const char *, ns_printer_t *(*)(char *, char *), char *); ns_printer_t **_file_get_list(const char *, ns_printer_t *(*)(char *, char *), char *); int _file_put_printer(const char *, const ns_printer_t *, ns_printer_t *(*)(char *, char *), char *, char *(*)(ns_printer_t *)); ns_printer_t *_nis_get_name(const char *, const char *, ns_printer_t *(*)(char *, char *), char *); ns_printer_t **_nis_get_list(const char *, ns_printer_t *(*)(char *, char *), char *); int _nis_put_printer(const char *, const ns_printer_t *, ns_printer_t *(*)(char *, char *), char *, char *(*)(ns_printer_t *));