1 /* $OpenBSD: ypldap.h,v 1.16 2015/01/16 06:40:22 deraadt Exp $ */
5 * Copyright (c) 2008 Pierre-Yves Ritschard <pyr@openbsd.org>
7 * Permission to use, copy, modify, and distribute this software for any
8 * purpose with or without fee is hereby granted, provided that the above
9 * copyright notice and this permission notice appear in all copies.
11 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
12 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
13 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
14 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
15 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
16 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
17 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
22 #define YPLDAP_USER "_ypldap"
23 #define YPLDAP_CONF_FILE "/etc/ypldap.conf"
24 #define DEFAULT_INTERVAL 600
25 #define LINE_WIDTH 1024
26 #define FILTER_WIDTH 128
29 #define MAX_SERVERS_DNS 8
45 TAILQ_ENTRY(ypldap_addr) next;
46 struct sockaddr_storage ss;
48 TAILQ_HEAD(ypldap_addr_list, ypldap_addr);
50 enum ypldap_process_type {
54 extern enum ypldap_process_type ypldap_process;
57 RB_ENTRY(userent) ue_name_node;
58 RB_ENTRY(userent) ue_uid_node;
66 RB_ENTRY(groupent) ge_name_node;
67 RB_ENTRY(groupent) ge_gid_node;
82 * beck, djm, dlg: pay attention to the struct name
85 TAILQ_ENTRY(idm) idm_entry;
87 char idm_name[MAXHOSTNAMELEN];
88 #define F_SSL 0x00100000
89 #define F_CONFIGURING 0x00200000
90 #define F_NEEDAUTH 0x00400000
91 #define F_FIXED_ATTR(n) (1<<n)
92 #define F_LIST(n) (1<<n)
93 enum client_state idm_state;
94 u_int32_t idm_flags; /* lower 20 reserved */
96 struct ypldap_addr_list idm_addr;
98 char idm_binddn[LINE_WIDTH];
99 char idm_bindcred[LINE_WIDTH];
100 char idm_basedn[LINE_WIDTH];
101 char idm_groupdn[LINE_WIDTH];
102 #define FILTER_USER 1
103 #define FILTER_GROUP 0
104 char idm_filters[2][FILTER_WIDTH];
106 #define ATTR_PASSWD 1
110 #define ATTR_CHANGE 5
111 #define ATTR_EXPIRE 6
115 #define ATTR_GR_NAME 10
116 #define ATTR_GR_PASSWD 11
117 #define ATTR_GR_GID 12
118 #define ATTR_GR_MEMBERS 13
120 #define ATTR_GR_MIN 10
121 #define ATTR_GR_MAX 14
122 char idm_attrs[14][ATTR_WIDTH];
135 char ir_line[LINE_WIDTH];
140 void (*handler)(int, short, void *);
147 #define YPLDAP_OPT_VERBOSE 0x01
148 #define YPLDAP_OPT_NOACTION 0x02
150 #define YPMAP_PASSWD_BYNAME 0x00000001
151 #define YPMAP_PASSWD_BYUID 0x00000002
152 #define YPMAP_MASTER_PASSWD_BYNAME 0x00000004
153 #define YPMAP_MASTER_PASSWD_BYUID 0x00000008
154 #define YPMAP_GROUP_BYNAME 0x00000010
155 #define YPMAP_GROUP_BYGID 0x00000020
156 #define YPMAP_NETID_BYNAME 0x00000040
161 char sc_domainname[MAXHOSTNAMELEN];
162 struct timeval sc_conf_tv;
163 struct event sc_conf_ev;
164 TAILQ_HEAD(idm_list, idm) sc_idms;
165 struct imsgev *sc_iev;
166 struct imsgev *sc_iev_dns;
168 RB_HEAD(user_name_tree,userent) *sc_user_names;
169 RB_HEAD(user_uid_tree,userent) sc_user_uids;
170 RB_HEAD(group_name_tree,groupent)*sc_group_names;
171 RB_HEAD(group_gid_tree,groupent) sc_group_gids;
172 struct user_name_tree *sc_user_names_t;
173 struct group_name_tree *sc_group_names_t;
174 size_t sc_user_line_len;
175 size_t sc_group_line_len;
177 char *sc_group_lines;
179 struct yp_data *sc_yp;
186 void log_warn(const char *, ...);
187 void log_warnx(const char *, ...);
188 void log_info(const char *, ...);
189 void log_debug(const char *, ...);
190 void logit(int, const char *, ...);
191 void vlog(int, const char *, va_list);
192 __dead2 void fatal(const char *);
193 __dead2 void fatalx(const char *);
196 int parse_config(struct env *, const char *, int);
197 int cmdline_symset(char *);
200 pid_t ldapclient(int []);
203 void purge_config(struct env *);
204 void imsg_event_add(struct imsgev *);
205 int imsg_compose_event(struct imsgev *, u_int16_t, u_int32_t,
206 pid_t, int, void *, u_int16_t);
209 void flatten_entries(struct env *);
210 int userent_name_cmp(struct userent *, struct userent *);
211 int userent_uid_cmp(struct userent *, struct userent *);
212 int groupent_name_cmp(struct groupent *, struct groupent *);
213 int groupent_gid_cmp(struct groupent *, struct groupent *);
214 RB_PROTOTYPE( user_name_tree, userent, ue_name_node, userent_name_cmp);
215 RB_PROTOTYPE( user_uid_tree, userent, ue_uid_node, userent_uid_cmp);
216 RB_PROTOTYPE( group_name_tree, groupent, ge_name_node, groupent_name_cmp);
217 RB_PROTOTYPE( group_gid_tree, groupent, ge_gid_node, groupent_gid_cmp);
220 void yp_init(struct env *);
221 void yp_enable_events(void);
224 pid_t ypldap_dns(int[2], struct passwd *);