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 2008 Sun Microsystems, Inc.  All rights reserved.
24  * Use is subject to license terms.
25  */
26 
27 /*
28  * nis_common.h
29  *
30  * Common code and structures used by name-service-switch "nis" backends.
31  */
32 
33 #ifndef _NIS_COMMON_H
34 #define	_NIS_COMMON_H
35 
36 #include <nss_dbdefs.h>
37 #include <stdlib.h>
38 #include <strings.h>
39 #include <signal.h>
40 #include <rpcsvc/ypclnt.h>
41 #include <rpcsvc/yp_prot.h>
42 
43 #ifdef	__cplusplus
44 extern "C" {
45 #endif
46 
47 #define	NIS_MAP_AUDITUSER	"audit_user"
48 #define	NIS_MAP_AUTHATTR	"auth_attr"
49 #define	NIS_MAP_EXECATTR	"exec_attr"
50 #define	NIS_MAP_PROFATTR	"prof_attr"
51 #define	NIS_MAP_USERATTR	"user_attr"
52 
53 
54 typedef struct nis_backend *nis_backend_ptr_t;
55 typedef nss_status_t	(*nis_backend_op_t)(nis_backend_ptr_t, void *);
56 
57 struct nis_backend {
58 	nis_backend_op_t	*ops;
59 	nss_dbop_t		n_ops;
60 	const char		*domain;
61 	const char		*enum_map;
62 	char			*enum_key;
63 	int			enum_keylen;
64 };
65 
66 /*
67  * Iterator function for _nss_nis_do_all(), which probably calls yp_all().
68  *   NSS_NOTFOUND means "keep enumerating", NSS_SUCCESS means"return now",
69  *   other values don't make much sense.  In other words we're abusing
70  *   (overloading) the meaning of nss_status_t, but hey...
71  * _nss_nis_XY_all() is a wrapper around _nss_nis_do_all() that does the
72  *   generic work for nss_XbyY_args_t backends (calls cstr2ent etc).
73  */
74 typedef nss_status_t	(*nis_do_all_func_t)(const char *, int, void *priv);
75 typedef int		(*nis_XY_check_func)(nss_XbyY_args_t *);
76 
77 extern nss_backend_t	*_nss_nis_constr(nis_backend_op_t	*ops,
78 					int			n_ops,
79 					const char		*map);
80 extern nss_status_t	_nss_nis_destr(nis_backend_ptr_t, void *dummy);
81 extern nss_status_t	_nss_nis_setent(nis_backend_ptr_t, void *dummy);
82 extern nss_status_t  	_nss_nis_endent(nis_backend_ptr_t, void *dummy);
83 extern nss_status_t  	_nss_nis_getent_rigid(nis_backend_ptr_t, void *);
84 extern nss_status_t  	_nss_nis_getent_netdb(nis_backend_ptr_t, void *);
85 extern nss_status_t 	_nss_nis_do_all(nis_backend_ptr_t,
86 					void			*func_priv,
87 					const char		*filter,
88 					nis_do_all_func_t	func);
89 extern nss_status_t 	_nss_nis_XY_all(nis_backend_ptr_t,
90 					nss_XbyY_args_t		*check_args,
91 					int			netdb,
92 					const char		*filter,
93 					nis_XY_check_func	check);
94 extern nss_status_t	_nss_nis_lookup(nis_backend_ptr_t,
95 					nss_XbyY_args_t		*args,
96 					int			netdb,
97 					const char		*map,
98 					const char		*key,
99 					int			*yp_statusp);
100 extern nss_status_t _nss_nis_lookup_rsvdport(nis_backend_ptr_t   be,
101 					nss_XbyY_args_t	*args,
102 					int netdb,
103 					const char	*map,
104 					const char	*key,
105 					int	*ypstatusp);
106 
107 /* Lower-level interface */
108 extern nss_status_t	_nss_nis_ypmatch(const char		*domain,
109 					const char		*map,
110 					const char		*key,
111 					char			**valp,
112 					int			*vallenp,
113 					int			*yp_statusp);
114 extern const char	*_nss_nis_domain();
115 extern int __nss2herrno(nss_status_t nsstat);
116 extern int thr_sigsetmask(int how, const sigset_t *set, sigset_t *oset);
117 extern int _nss_nis_check_name_aliases(nss_XbyY_args_t *argp,
118 					const char *line,
119 					int linelen);
120 
121 /* private yp "configurable lookup persistence" interface in libnsl */
122 extern int __yp_match_cflookup(char *, char *, char *, int, char **,
123 			    int *, int *);
124 extern int __yp_match_rsvdport_cflookup(char *, char *, char *, int, char **,
125 				    int *, int *);
126 extern int __yp_first_cflookup(char *, char *, char **, int *, char **,
127 			    int *, int);
128 
129 extern int __yp_next_cflookup(char *, char *, char *, int, char **, int *,
130 			    char **, int  *, int);
131 
132 extern int __yp_all_cflookup(char *, char *, struct ypall_callback *, int);
133 
134 /* functions to validate passwd and group ids */
135 extern int validate_passwd_ids(char **linepp, int *linelenp, int allocbuf);
136 extern int validate_group_ids(char **linepp, int *linelenp, int allocbuf);
137 
138 #ifdef	__cplusplus
139 }
140 #endif
141 
142 #endif /* _NIS_COMMON_H */
143