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 * Copyright 2008 Sun Microsystems, Inc. All rights reserved. 23 * Use is subject to license terms. 24 */ 25 /* 26 * Common code and structures used by name-service-switch "compat" backends. 27 */ 28 29 #ifndef _COMPAT_COMMON_H 30 #define _COMPAT_COMMON_H 31 32 #include <nss_common.h> 33 #include <nss_dbdefs.h> 34 #include <stdio.h> 35 36 #ifdef __cplusplus 37 extern "C" { 38 #endif 39 40 typedef struct compat_backend *compat_backend_ptr_t; 41 typedef nss_status_t (*compat_backend_op_t)(compat_backend_ptr_t, void *); 42 43 /* 44 * ===> Fix da comments (and in files_common.h too...) 45 * Iterator function for _nss_files_do_all(), which probably calls yp_all(). 46 * NSS_NOTFOUND means "keep enumerating", NSS_SUCCESS means"return now", 47 * other values don't make much sense. In other words we're abusing 48 * (overloading) the meaning of nss_status_t, but hey... 49 * _nss_compat_XY_all() is a wrapper around _nss_files_do_all() that does the 50 * generic work for nss_XbyY_args_t backends (calls cstr2ent etc). 51 */ 52 typedef nss_status_t (*files_do_all_func_t)(const char *, int, void *args); 53 /* ===> ^^ nuke this line */ 54 typedef int (*compat_XY_check_func)(nss_XbyY_args_t *); 55 typedef const char *(*compat_get_name)(nss_XbyY_args_t *); 56 typedef int (*compat_merge_func)(compat_backend_ptr_t, 57 nss_XbyY_args_t *, 58 const char **fields); 59 60 typedef struct setofstrings *strset_t; 61 62 struct compat_backend { 63 compat_backend_op_t *ops; 64 int n_ops; 65 const char *filename; 66 FILE *f; 67 int minbuf; 68 char *buf; 69 int linelen; /* <== Explain use, lifetime */ 70 71 nss_db_initf_t db_initf; 72 nss_db_root_t *db_rootp; /* Shared between instances */ 73 nss_getent_t db_context; /* Per-instance enumeration */ 74 75 compat_get_name getnamef; 76 compat_merge_func mergef; 77 78 /* We wouldn't need all this hokey state stuff if we */ 79 /* used another thread to implement a coroutine... */ 80 enum { 81 GETENT_FILE, 82 GETENT_NETGROUP, 83 GETENT_ATTRDB, 84 GETENT_ALL, 85 GETENT_DONE 86 } state; 87 strset_t minuses; 88 89 int permit_netgroups; 90 const char *yp_domain; 91 nss_backend_t *getnetgrent_backend; 92 char *netgr_buffer; 93 int return_string_data; 94 int (*str2ent_save)(); 95 int (*str2ent_alt)(); 96 void *workarea; 97 }; 98 99 #if defined(__STDC__) 100 extern nss_backend_t *_nss_compat_constr(compat_backend_op_t *ops, 101 int n_ops, 102 const char *filename, 103 int min_bufsize, 104 nss_db_root_t *rootp, 105 nss_db_initf_t initf, 106 int netgroups, 107 compat_get_name getname_func, 108 compat_merge_func merge_func); 109 extern nss_status_t _nss_compat_destr(compat_backend_ptr_t, void *dummy); 110 extern nss_status_t _nss_compat_setent(compat_backend_ptr_t, void *dummy); 111 extern nss_status_t _nss_compat_endent(compat_backend_ptr_t, void *dummy); 112 extern nss_status_t _nss_compat_getent(compat_backend_ptr_t, void *); 113 extern nss_status_t _nss_compat_XY_all(compat_backend_ptr_t, 114 nss_XbyY_args_t *args, 115 compat_XY_check_func check, 116 nss_dbop_t op_num); 117 extern nss_status_t _attrdb_compat_XY_all(compat_backend_ptr_t, 118 nss_XbyY_args_t *args, 119 int netdb, 120 compat_XY_check_func check, 121 nss_dbop_t op_num); 122 #else 123 extern nss_backend_t *_nss_compat_constr(); 124 extern nss_status_t _nss_compat_destr(); 125 extern nss_status_t _nss_compat_setent(); 126 extern nss_status_t _nss_compat_endent(); 127 extern nss_status_t _nss_compat_getent(); 128 extern nss_status_t _nss_compat_XY_all(); 129 extern nss_status_t _attrdb_compat_XY_all(); 130 #endif 131 132 /* functions to validate passwd and group ids */ 133 extern int validate_passwd_ids(char *line, int *linelenp, int buflen, 134 int extra_chars); 135 extern int validate_group_ids(char *line, int *linelenp, int buflen, 136 int extra_chars); 137 138 #ifdef __cplusplus 139 } 140 #endif 141 142 #endif /* _COMPAT_COMMON_H */ 143