ypldap.h revision 303975
1274955Ssvnmir/* $OpenBSD: ypldap.h,v 1.16 2015/01/16 06:40:22 deraadt Exp $ */ 2274955Ssvnmir/* $FreeBSD: releng/11.0/usr.sbin/ypldap/ypldap.h 297907 2016-04-13 03:36:34Z araujo $ */ 3353358Sdim 4353358Sdim/* 5353358Sdim * Copyright (c) 2008 Pierre-Yves Ritschard <pyr@openbsd.org> 6274955Ssvnmir * 7274955Ssvnmir * Permission to use, copy, modify, and distribute this software for any 8274955Ssvnmir * purpose with or without fee is hereby granted, provided that the above 9274955Ssvnmir * copyright notice and this permission notice appear in all copies. 10274955Ssvnmir * 11274955Ssvnmir * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 12274955Ssvnmir * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 13314564Sdim * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 14314564Sdim * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 15314564Sdim * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 16314564Sdim * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 17314564Sdim * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 18314564Sdim */ 19274955Ssvnmir 20314564Sdim#include <imsg.h> 21314564Sdim 22314564Sdim#define YPLDAP_USER "_ypldap" 23314564Sdim#define YPLDAP_CONF_FILE "/etc/ypldap.conf" 24314564Sdim#define DEFAULT_INTERVAL 600 25314564Sdim#define LINE_WIDTH 1024 26314564Sdim#define FILTER_WIDTH 128 27314564Sdim#define ATTR_WIDTH 32 28314564Sdim 29314564Sdim#define MAX_SERVERS_DNS 8 30314564Sdim 31314564Sdimenum imsg_type { 32314564Sdim IMSG_NONE, 33314564Sdim IMSG_CONF_START, 34314564Sdim IMSG_CONF_IDM, 35314564Sdim IMSG_CONF_END, 36314564Sdim IMSG_START_UPDATE, 37314564Sdim IMSG_END_UPDATE, 38314564Sdim IMSG_TRASH_UPDATE, 39314564Sdim IMSG_PW_ENTRY, 40314564Sdim IMSG_GRP_ENTRY, 41314564Sdim IMSG_HOST_DNS 42314564Sdim}; 43314564Sdim 44314564Sdimstruct ypldap_addr { 45314564Sdim TAILQ_ENTRY(ypldap_addr) next; 46314564Sdim struct sockaddr_storage ss; 47314564Sdim}; 48314564SdimTAILQ_HEAD(ypldap_addr_list, ypldap_addr); 49314564Sdim 50314564Sdimenum { 51314564Sdim PROC_MAIN, 52314564Sdim PROC_CLIENT 53314564Sdim} ypldap_process; 54314564Sdim 55314564Sdimstruct userent { 56314564Sdim RB_ENTRY(userent) ue_name_node; 57314564Sdim RB_ENTRY(userent) ue_uid_node; 58314564Sdim uid_t ue_uid; 59314564Sdim char *ue_line; 60314564Sdim char *ue_netid_line; 61314564Sdim gid_t ue_gid; 62314564Sdim}; 63314564Sdim 64314564Sdimstruct groupent { 65314564Sdim RB_ENTRY(groupent) ge_name_node; 66314564Sdim RB_ENTRY(groupent) ge_gid_node; 67314564Sdim gid_t ge_gid; 68314564Sdim char *ge_line; 69314564Sdim}; 70314564Sdim 71314564Sdimenum client_state { 72314564Sdim STATE_NONE, 73314564Sdim STATE_DNS_INPROGRESS, 74314564Sdim STATE_DNS_TEMPFAIL, 75314564Sdim STATE_DNS_DONE, 76314564Sdim STATE_LDAP_FAIL, 77314564Sdim STATE_LDAP_DONE 78314564Sdim}; 79314564Sdim 80314564Sdim/* 81314564Sdim * beck, djm, dlg: pay attention to the struct name 82314564Sdim */ 83314564Sdimstruct idm { 84314564Sdim TAILQ_ENTRY(idm) idm_entry; 85314564Sdim u_int32_t idm_id; 86274955Ssvnmir char idm_name[MAXHOSTNAMELEN]; 87274955Ssvnmir#define F_SSL 0x00100000 88280031Sdim#define F_CONFIGURING 0x00200000 89280031Sdim#define F_NEEDAUTH 0x00400000 90274955Ssvnmir#define F_FIXED_ATTR(n) (1<<n) 91360784Sdim#define F_LIST(n) (1<<n) 92327952Sdim enum client_state idm_state; 93314564Sdim u_int32_t idm_flags; /* lower 20 reserved */ 94327952Sdim u_int32_t idm_list; 95327952Sdim struct ypldap_addr_list idm_addr; 96327952Sdim in_port_t idm_port; 97280031Sdim char idm_binddn[LINE_WIDTH]; 98314564Sdim char idm_bindcred[LINE_WIDTH]; 99327952Sdim char idm_basedn[LINE_WIDTH]; 100314564Sdim char idm_groupdn[LINE_WIDTH]; 101274955Ssvnmir#define FILTER_USER 1 102314564Sdim#define FILTER_GROUP 0 103327952Sdim char idm_filters[2][FILTER_WIDTH]; 104327952Sdim#define ATTR_NAME 0 105327952Sdim#define ATTR_PASSWD 1 106327952Sdim#define ATTR_UID 2 107327952Sdim#define ATTR_GID 3 108274955Ssvnmir#define ATTR_CLASS 4 109274955Ssvnmir#define ATTR_CHANGE 5 110274955Ssvnmir#define ATTR_EXPIRE 6 111314564Sdim#define ATTR_GECOS 7 112327952Sdim#define ATTR_DIR 8 113274955Ssvnmir#define ATTR_SHELL 9 114327952Sdim#define ATTR_GR_NAME 10 115327952Sdim#define ATTR_GR_PASSWD 11 116327952Sdim#define ATTR_GR_GID 12 117314564Sdim#define ATTR_GR_MEMBERS 13 118314564Sdim#define ATTR_MAX 10 119314564Sdim#define ATTR_GR_MIN 10 120314564Sdim#define ATTR_GR_MAX 14 121327952Sdim char idm_attrs[14][ATTR_WIDTH]; 122341825Sdim struct env *idm_env; 123280031Sdim struct event idm_ev; 124280031Sdim#ifdef SSL 125327952Sdim struct ssl *idm_ssl; 126280031Sdim#endif 127280031Sdim}; 128327952Sdim 129327952Sdimstruct idm_req { 130274955Ssvnmir union { 131314564Sdim uid_t ik_uid; 132314564Sdim uid_t ik_gid; 133314564Sdim } ir_key; 134314564Sdim char ir_line[LINE_WIDTH]; 135314564Sdim}; 136314564Sdim 137314564Sdimstruct imsgev { 138314564Sdim struct imsgbuf ibuf; 139314564Sdim void (*handler)(int, short, void *); 140314564Sdim struct event ev; 141314564Sdim void *data; 142314564Sdim short events; 143341825Sdim}; 144314564Sdim 145314564Sdimstruct env { 146314564Sdim#define YPLDAP_OPT_VERBOSE 0x01 147327952Sdim#define YPLDAP_OPT_NOACTION 0x02 148327952Sdim u_int8_t sc_opts; 149327952Sdim#define YPMAP_PASSWD_BYNAME 0x00000001 150327952Sdim#define YPMAP_PASSWD_BYUID 0x00000002 151314564Sdim#define YPMAP_MASTER_PASSWD_BYNAME 0x00000004 152314564Sdim#define YPMAP_MASTER_PASSWD_BYUID 0x00000008 153314564Sdim#define YPMAP_GROUP_BYNAME 0x00000010 154314564Sdim#define YPMAP_GROUP_BYGID 0x00000020 155314564Sdim#define YPMAP_NETID_BYNAME 0x00000040 156314564Sdim u_int32_t sc_flags; 157314564Sdim 158314564Sdim u_int32_t sc_maxid; 159314564Sdim 160314564Sdim char sc_domainname[MAXHOSTNAMELEN]; 161314564Sdim struct timeval sc_conf_tv; 162314564Sdim struct event sc_conf_ev; 163314564Sdim TAILQ_HEAD(idm_list, idm) sc_idms; 164314564Sdim struct imsgev *sc_iev; 165314564Sdim struct imsgev *sc_iev_dns; 166309124Sdim 167327952Sdim RB_HEAD(user_name_tree,userent) *sc_user_names; 168327952Sdim RB_HEAD(user_uid_tree,userent) sc_user_uids; 169274955Ssvnmir RB_HEAD(group_name_tree,groupent)*sc_group_names; 170314564Sdim RB_HEAD(group_gid_tree,groupent) sc_group_gids; 171314564Sdim struct user_name_tree *sc_user_names_t; 172314564Sdim struct group_name_tree *sc_group_names_t; 173314564Sdim size_t sc_user_line_len; 174314564Sdim size_t sc_group_line_len; 175314564Sdim char *sc_user_lines; 176314564Sdim char *sc_group_lines; 177314564Sdim 178341825Sdim struct yp_data *sc_yp; 179314564Sdim 180314564Sdim int update_trashed; 181341825Sdim}; 182314564Sdim 183314564Sdim/* log.c */ 184314564Sdimvoid log_init(int); 185314564Sdimvoid log_warn(const char *, ...); 186314564Sdimvoid log_warnx(const char *, ...); 187314564Sdimvoid log_info(const char *, ...); 188314564Sdimvoid log_debug(const char *, ...); 189314564Sdimvoid logit(int, const char *, ...); 190314564Sdimvoid vlog(int, const char *, va_list); 191314564Sdim__dead2 void fatal(const char *); 192314564Sdim__dead2 void fatalx(const char *); 193314564Sdim 194314564Sdim/* parse.y */ 195314564Sdimint parse_config(struct env *, const char *, int); 196314564Sdimint cmdline_symset(char *); 197314564Sdim 198314564Sdim/* ldapclient.c */ 199314564Sdimpid_t ldapclient(int []); 200314564Sdim 201314564Sdim/* ypldap.c */ 202314564Sdimvoid purge_config(struct env *); 203314564Sdimvoid imsg_event_add(struct imsgev *); 204314564Sdimint imsg_compose_event(struct imsgev *, u_int16_t, u_int32_t, 205314564Sdim pid_t, int, void *, u_int16_t); 206314564Sdim 207314564Sdim/* entries.c */ 208314564Sdimvoid flatten_entries(struct env *); 209314564Sdimint userent_name_cmp(struct userent *, struct userent *); 210314564Sdimint userent_uid_cmp(struct userent *, struct userent *); 211327952Sdimint groupent_name_cmp(struct groupent *, struct groupent *); 212309124Sdimint groupent_gid_cmp(struct groupent *, struct groupent *); 213327952SdimRB_PROTOTYPE( user_name_tree, userent, ue_name_node, userent_name_cmp); 214327952SdimRB_PROTOTYPE( user_uid_tree, userent, ue_uid_node, userent_uid_cmp); 215327952SdimRB_PROTOTYPE( group_name_tree, groupent, ge_name_node, groupent_name_cmp); 216274955SsvnmirRB_PROTOTYPE( group_gid_tree, groupent, ge_gid_node, groupent_gid_cmp); 217314564Sdim 218314564Sdim/* yp.c */ 219314564Sdimvoid yp_init(struct env *); 220314564Sdimvoid yp_enable_events(void); 221314564Sdim 222314564Sdim/* ypldap_dns.c */ 223314564Sdimpid_t ypldap_dns(int[2], struct passwd *); 224314564Sdim