Deleted Added
full compact
ypldap.h (290931) ypldap.h (290935)
1/* $OpenBSD: ypldap.h,v 1.16 2015/01/16 06:40:22 deraadt Exp $ */
1/* $OpenBSD: ypldap.h,v 1.16 2015/01/16 06:40:22 deraadt Exp $ */
2/* $FreeBSD: head/usr.sbin/ypldap/ypldap.h 290931 2015-11-16 16:48:43Z rodrigc $ */
2/* $FreeBSD: head/usr.sbin/ypldap/ypldap.h 290935 2015-11-16 17:02:34Z rodrigc $ */
3
4/*
5 * Copyright (c) 2008 Pierre-Yves Ritschard <pyr@openbsd.org>
6 *
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.
10 *
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.
18 */
19
20#include <imsg.h>
21
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
27#define ATTR_WIDTH 32
28
29#define MAX_SERVERS_DNS 8
30
31enum imsg_type {
32 IMSG_NONE,
33 IMSG_CONF_START,
34 IMSG_CONF_IDM,
35 IMSG_CONF_END,
36 IMSG_START_UPDATE,
37 IMSG_END_UPDATE,
38 IMSG_TRASH_UPDATE,
39 IMSG_PW_ENTRY,
40 IMSG_GRP_ENTRY,
41 IMSG_HOST_DNS
42};
43
44struct ypldap_addr {
45 struct ypldap_addr *next;
46 struct sockaddr_storage ss;
47};
48
49enum {
50 PROC_MAIN,
51 PROC_CLIENT
52} ypldap_process;
53
54struct userent {
55 RB_ENTRY(userent) ue_name_node;
56 RB_ENTRY(userent) ue_uid_node;
57 uid_t ue_uid;
58 char *ue_line;
59 char *ue_netid_line;
60 gid_t ue_gid;
61};
62
63struct groupent {
64 RB_ENTRY(groupent) ge_name_node;
65 RB_ENTRY(groupent) ge_gid_node;
66 gid_t ge_gid;
67 char *ge_line;
68};
69
70enum client_state {
71 STATE_NONE,
72 STATE_DNS_INPROGRESS,
73 STATE_DNS_TEMPFAIL,
74 STATE_DNS_DONE,
75 STATE_LDAP_FAIL,
76 STATE_LDAP_DONE
77};
78
79/*
80 * beck, djm, dlg: pay attention to the struct name
81 */
82struct idm {
83 TAILQ_ENTRY(idm) idm_entry;
84 u_int32_t idm_id;
3
4/*
5 * Copyright (c) 2008 Pierre-Yves Ritschard <pyr@openbsd.org>
6 *
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.
10 *
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.
18 */
19
20#include <imsg.h>
21
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
27#define ATTR_WIDTH 32
28
29#define MAX_SERVERS_DNS 8
30
31enum imsg_type {
32 IMSG_NONE,
33 IMSG_CONF_START,
34 IMSG_CONF_IDM,
35 IMSG_CONF_END,
36 IMSG_START_UPDATE,
37 IMSG_END_UPDATE,
38 IMSG_TRASH_UPDATE,
39 IMSG_PW_ENTRY,
40 IMSG_GRP_ENTRY,
41 IMSG_HOST_DNS
42};
43
44struct ypldap_addr {
45 struct ypldap_addr *next;
46 struct sockaddr_storage ss;
47};
48
49enum {
50 PROC_MAIN,
51 PROC_CLIENT
52} ypldap_process;
53
54struct userent {
55 RB_ENTRY(userent) ue_name_node;
56 RB_ENTRY(userent) ue_uid_node;
57 uid_t ue_uid;
58 char *ue_line;
59 char *ue_netid_line;
60 gid_t ue_gid;
61};
62
63struct groupent {
64 RB_ENTRY(groupent) ge_name_node;
65 RB_ENTRY(groupent) ge_gid_node;
66 gid_t ge_gid;
67 char *ge_line;
68};
69
70enum client_state {
71 STATE_NONE,
72 STATE_DNS_INPROGRESS,
73 STATE_DNS_TEMPFAIL,
74 STATE_DNS_DONE,
75 STATE_LDAP_FAIL,
76 STATE_LDAP_DONE
77};
78
79/*
80 * beck, djm, dlg: pay attention to the struct name
81 */
82struct idm {
83 TAILQ_ENTRY(idm) idm_entry;
84 u_int32_t idm_id;
85 char idm_name[HOST_NAME_MAX+1];
85 char idm_name[MAXHOSTNAMELEN];
86#define F_SSL 0x00100000
87#define F_CONFIGURING 0x00200000
88#define F_NEEDAUTH 0x00400000
89#define F_FIXED_ATTR(n) (1<<n)
90#define F_LIST(n) (1<<n)
91 enum client_state idm_state;
92 u_int32_t idm_flags; /* lower 20 reserved */
93 u_int32_t idm_list;
94 struct ypldap_addr *idm_addr;
95 in_port_t idm_port;
96 char idm_binddn[LINE_WIDTH];
97 char idm_bindcred[LINE_WIDTH];
98 char idm_basedn[LINE_WIDTH];
99 char idm_groupdn[LINE_WIDTH];
100#define FILTER_USER 1
101#define FILTER_GROUP 0
102 char idm_filters[2][FILTER_WIDTH];
103#define ATTR_NAME 0
104#define ATTR_PASSWD 1
105#define ATTR_UID 2
106#define ATTR_GID 3
107#define ATTR_CLASS 4
108#define ATTR_CHANGE 5
109#define ATTR_EXPIRE 6
110#define ATTR_GECOS 7
111#define ATTR_DIR 8
112#define ATTR_SHELL 9
113#define ATTR_GR_NAME 10
114#define ATTR_GR_PASSWD 11
115#define ATTR_GR_GID 12
116#define ATTR_GR_MEMBERS 13
117#define ATTR_MAX 10
118#define ATTR_GR_MIN 10
119#define ATTR_GR_MAX 14
120 char idm_attrs[14][ATTR_WIDTH];
121 struct env *idm_env;
122 struct event idm_ev;
123#ifdef SSL
124 struct ssl *idm_ssl;
125#endif
126};
127
128struct idm_req {
129 union {
130 uid_t ik_uid;
131 uid_t ik_gid;
132 } ir_key;
133 char ir_line[LINE_WIDTH];
134};
135
136struct imsgev {
137 struct imsgbuf ibuf;
138 void (*handler)(int, short, void *);
139 struct event ev;
140 void *data;
141 short events;
142};
143
144struct env {
145#define YPLDAP_OPT_VERBOSE 0x01
146#define YPLDAP_OPT_NOACTION 0x02
147 u_int8_t sc_opts;
148#define YPMAP_PASSWD_BYNAME 0x00000001
149#define YPMAP_PASSWD_BYUID 0x00000002
150#define YPMAP_MASTER_PASSWD_BYNAME 0x00000004
151#define YPMAP_MASTER_PASSWD_BYUID 0x00000008
152#define YPMAP_GROUP_BYNAME 0x00000010
153#define YPMAP_GROUP_BYGID 0x00000020
154#define YPMAP_NETID_BYNAME 0x00000040
155 u_int32_t sc_flags;
156
157 u_int32_t sc_maxid;
158
86#define F_SSL 0x00100000
87#define F_CONFIGURING 0x00200000
88#define F_NEEDAUTH 0x00400000
89#define F_FIXED_ATTR(n) (1<<n)
90#define F_LIST(n) (1<<n)
91 enum client_state idm_state;
92 u_int32_t idm_flags; /* lower 20 reserved */
93 u_int32_t idm_list;
94 struct ypldap_addr *idm_addr;
95 in_port_t idm_port;
96 char idm_binddn[LINE_WIDTH];
97 char idm_bindcred[LINE_WIDTH];
98 char idm_basedn[LINE_WIDTH];
99 char idm_groupdn[LINE_WIDTH];
100#define FILTER_USER 1
101#define FILTER_GROUP 0
102 char idm_filters[2][FILTER_WIDTH];
103#define ATTR_NAME 0
104#define ATTR_PASSWD 1
105#define ATTR_UID 2
106#define ATTR_GID 3
107#define ATTR_CLASS 4
108#define ATTR_CHANGE 5
109#define ATTR_EXPIRE 6
110#define ATTR_GECOS 7
111#define ATTR_DIR 8
112#define ATTR_SHELL 9
113#define ATTR_GR_NAME 10
114#define ATTR_GR_PASSWD 11
115#define ATTR_GR_GID 12
116#define ATTR_GR_MEMBERS 13
117#define ATTR_MAX 10
118#define ATTR_GR_MIN 10
119#define ATTR_GR_MAX 14
120 char idm_attrs[14][ATTR_WIDTH];
121 struct env *idm_env;
122 struct event idm_ev;
123#ifdef SSL
124 struct ssl *idm_ssl;
125#endif
126};
127
128struct idm_req {
129 union {
130 uid_t ik_uid;
131 uid_t ik_gid;
132 } ir_key;
133 char ir_line[LINE_WIDTH];
134};
135
136struct imsgev {
137 struct imsgbuf ibuf;
138 void (*handler)(int, short, void *);
139 struct event ev;
140 void *data;
141 short events;
142};
143
144struct env {
145#define YPLDAP_OPT_VERBOSE 0x01
146#define YPLDAP_OPT_NOACTION 0x02
147 u_int8_t sc_opts;
148#define YPMAP_PASSWD_BYNAME 0x00000001
149#define YPMAP_PASSWD_BYUID 0x00000002
150#define YPMAP_MASTER_PASSWD_BYNAME 0x00000004
151#define YPMAP_MASTER_PASSWD_BYUID 0x00000008
152#define YPMAP_GROUP_BYNAME 0x00000010
153#define YPMAP_GROUP_BYGID 0x00000020
154#define YPMAP_NETID_BYNAME 0x00000040
155 u_int32_t sc_flags;
156
157 u_int32_t sc_maxid;
158
159 char sc_domainname[HOST_NAME_MAX+1];
159 char sc_domainname[MAXHOSTNAMELEN];
160 struct timeval sc_conf_tv;
161 struct event sc_conf_ev;
162 TAILQ_HEAD(idm_list, idm) sc_idms;
163 struct imsgev *sc_iev;
164 struct imsgev *sc_iev_dns;
165
166 RB_HEAD(user_name_tree,userent) *sc_user_names;
167 RB_HEAD(user_uid_tree,userent) sc_user_uids;
168 RB_HEAD(group_name_tree,groupent)*sc_group_names;
169 RB_HEAD(group_gid_tree,groupent) sc_group_gids;
170 struct user_name_tree *sc_user_names_t;
171 struct group_name_tree *sc_group_names_t;
172 size_t sc_user_line_len;
173 size_t sc_group_line_len;
174 char *sc_user_lines;
175 char *sc_group_lines;
176
177 struct yp_data *sc_yp;
178
179 int update_trashed;
180};
181
182/* log.c */
183void log_init(int);
184void log_warn(const char *, ...);
185void log_warnx(const char *, ...);
186void log_info(const char *, ...);
187void log_debug(const char *, ...);
188void logit(int, const char *, ...);
189void vlog(int, const char *, va_list);
190__dead void fatal(const char *);
191__dead void fatalx(const char *);
192
193/* parse.y */
194int parse_config(struct env *, const char *, int);
195int cmdline_symset(char *);
196
197/* ldapclient.c */
198pid_t ldapclient(int []);
199
200/* ypldap.c */
201void purge_config(struct env *);
202void imsg_event_add(struct imsgev *);
203int imsg_compose_event(struct imsgev *, u_int16_t, u_int32_t,
204 pid_t, int, void *, u_int16_t);
205
206/* entries.c */
207void flatten_entries(struct env *);
208int userent_name_cmp(struct userent *, struct userent *);
209int userent_uid_cmp(struct userent *, struct userent *);
210int groupent_name_cmp(struct groupent *, struct groupent *);
211int groupent_gid_cmp(struct groupent *, struct groupent *);
212RB_PROTOTYPE( user_name_tree, userent, ue_name_node, userent_name_cmp);
213RB_PROTOTYPE( user_uid_tree, userent, ue_uid_node, userent_uid_cmp);
214RB_PROTOTYPE( group_name_tree, groupent, ge_name_node, groupent_name_cmp);
215RB_PROTOTYPE( group_gid_tree, groupent, ge_gid_node, groupent_gid_cmp);
216
217/* yp.c */
218void yp_init(struct env *);
219void yp_enable_events(void);
220
221/* ypldap_dns.c */
222pid_t ypldap_dns(int[2], struct passwd *);
160 struct timeval sc_conf_tv;
161 struct event sc_conf_ev;
162 TAILQ_HEAD(idm_list, idm) sc_idms;
163 struct imsgev *sc_iev;
164 struct imsgev *sc_iev_dns;
165
166 RB_HEAD(user_name_tree,userent) *sc_user_names;
167 RB_HEAD(user_uid_tree,userent) sc_user_uids;
168 RB_HEAD(group_name_tree,groupent)*sc_group_names;
169 RB_HEAD(group_gid_tree,groupent) sc_group_gids;
170 struct user_name_tree *sc_user_names_t;
171 struct group_name_tree *sc_group_names_t;
172 size_t sc_user_line_len;
173 size_t sc_group_line_len;
174 char *sc_user_lines;
175 char *sc_group_lines;
176
177 struct yp_data *sc_yp;
178
179 int update_trashed;
180};
181
182/* log.c */
183void log_init(int);
184void log_warn(const char *, ...);
185void log_warnx(const char *, ...);
186void log_info(const char *, ...);
187void log_debug(const char *, ...);
188void logit(int, const char *, ...);
189void vlog(int, const char *, va_list);
190__dead void fatal(const char *);
191__dead void fatalx(const char *);
192
193/* parse.y */
194int parse_config(struct env *, const char *, int);
195int cmdline_symset(char *);
196
197/* ldapclient.c */
198pid_t ldapclient(int []);
199
200/* ypldap.c */
201void purge_config(struct env *);
202void imsg_event_add(struct imsgev *);
203int imsg_compose_event(struct imsgev *, u_int16_t, u_int32_t,
204 pid_t, int, void *, u_int16_t);
205
206/* entries.c */
207void flatten_entries(struct env *);
208int userent_name_cmp(struct userent *, struct userent *);
209int userent_uid_cmp(struct userent *, struct userent *);
210int groupent_name_cmp(struct groupent *, struct groupent *);
211int groupent_gid_cmp(struct groupent *, struct groupent *);
212RB_PROTOTYPE( user_name_tree, userent, ue_name_node, userent_name_cmp);
213RB_PROTOTYPE( user_uid_tree, userent, ue_uid_node, userent_uid_cmp);
214RB_PROTOTYPE( group_name_tree, groupent, ge_name_node, groupent_name_cmp);
215RB_PROTOTYPE( group_gid_tree, groupent, ge_gid_node, groupent_gid_cmp);
216
217/* yp.c */
218void yp_init(struct env *);
219void yp_enable_events(void);
220
221/* ypldap_dns.c */
222pid_t ypldap_dns(int[2], struct passwd *);