Index: entries.c =================================================================== RCS file: /cvs/src/usr.sbin/ypldap/entries.c,v retrieving revision 1.3 diff -u -p -r1.3 entries.c --- entries.c 16 Jan 2015 06:40:22 -0000 1.3 +++ entries.c 20 Jun 2017 01:25:24 -0000 @@ -63,7 +63,7 @@ flatten_entries(struct env *env) } endp = linep; - RB_FOREACH(ue, user_name_tree, env->sc_user_names) { + RBT_FOREACH(ue, user_name_tree, env->sc_user_names) { /* * we convert the first nul back to a column, * copy the string and then convert it back to a nul. @@ -99,7 +99,7 @@ flatten_entries(struct env *env) fatal("out of memory"); } endp = linep; - RB_FOREACH(ge, group_name_tree, env->sc_group_names) { + RBT_FOREACH(ge, group_name_tree, env->sc_group_names) { /* * we convert the first nul back to a column, * copy the string and then convert it back to a nul. @@ -118,30 +118,30 @@ flatten_entries(struct env *env) } int -userent_name_cmp(struct userent *ue1, struct userent *ue2) +userent_name_cmp(const struct userent *ue1, const struct userent *ue2) { return (strcmp(ue1->ue_line, ue2->ue_line)); } int -userent_uid_cmp(struct userent *ue1, struct userent *ue2) +userent_uid_cmp(const struct userent *ue1, const struct userent *ue2) { return (ue1->ue_uid - ue2->ue_uid); } int -groupent_name_cmp(struct groupent *ge1, struct groupent *ge2) +groupent_name_cmp(const struct groupent *ge1, const struct groupent *ge2) { return (strcmp(ge1->ge_line, ge2->ge_line)); } int -groupent_gid_cmp(struct groupent *ge1, struct groupent *ge2) +groupent_gid_cmp(const struct groupent *ge1, const struct groupent *ge2) { return (ge1->ge_gid - ge2->ge_gid); } -RB_GENERATE(user_name_tree, userent, ue_name_node, userent_name_cmp); -RB_GENERATE(user_uid_tree, userent, ue_uid_node, userent_uid_cmp); -RB_GENERATE(group_name_tree, groupent, ge_name_node, groupent_name_cmp); -RB_GENERATE(group_gid_tree, groupent, ge_gid_node, groupent_gid_cmp); +RBT_GENERATE(user_name_tree, userent, ue_name_node, userent_name_cmp); +RBT_GENERATE(user_uid_tree, userent, ue_uid_node, userent_uid_cmp); +RBT_GENERATE(group_name_tree, groupent, ge_name_node, groupent_name_cmp); +RBT_GENERATE(group_gid_tree, groupent, ge_gid_node, groupent_gid_cmp); Index: yp.c =================================================================== RCS file: /cvs/src/usr.sbin/ypldap/yp.c,v retrieving revision 1.18 diff -u -p -r1.18 yp.c --- yp.c 29 Nov 2016 17:15:27 -0000 1.18 +++ yp.c 20 Jun 2017 01:25:24 -0000 @@ -348,7 +348,7 @@ ypproc_match_2_svc(ypreq_key *arg, struc if (strcmp(arg->map, "passwd.byname") == 0 || strcmp(arg->map, "master.passwd.byname") == 0) { ukey.ue_line = key; - if ((ue = RB_FIND(user_name_tree, env->sc_user_names, + if ((ue = RBT_FIND(user_name_tree, env->sc_user_names, &ukey)) == NULL) { res.stat = YP_NOKEY; return (&res); @@ -364,7 +364,7 @@ ypproc_match_2_svc(ypreq_key *arg, struc return (&res); } - if ((ue = RB_FIND(user_uid_tree, &env->sc_user_uids, + if ((ue = RBT_FIND(user_uid_tree, &env->sc_user_uids, &ukey)) == NULL) { res.stat = YP_NOKEY; return (&res); @@ -378,7 +378,7 @@ ypproc_match_2_svc(ypreq_key *arg, struc res.stat = YP_BADARGS; return (&res); } - if ((ge = RB_FIND(group_gid_tree, &env->sc_group_gids, + if ((ge = RBT_FIND(group_gid_tree, &env->sc_group_gids, &gkey)) == NULL) { res.stat = YP_NOKEY; return (&res); @@ -388,7 +388,7 @@ ypproc_match_2_svc(ypreq_key *arg, struc return (&res); } else if (strcmp(arg->map, "group.byname") == 0) { gkey.ge_line = key; - if ((ge = RB_FIND(group_name_tree, env->sc_group_names, + if ((ge = RBT_FIND(group_name_tree, env->sc_group_names, &gkey)) == NULL) { res.stat = YP_NOKEY; return (&res); @@ -427,7 +427,7 @@ ypproc_match_2_svc(ypreq_key *arg, struc return (&res); } - if ((ue = RB_FIND(user_uid_tree, &env->sc_user_uids, + if ((ue = RBT_FIND(user_uid_tree, &env->sc_user_uids, &ukey)) == NULL) { res.stat = YP_NOKEY; return (&res); @@ -490,7 +490,7 @@ ypproc_next_2_svc(ypreq_key *arg, struct (void)strncpy(key, arg->key.keydat_val, arg->key.keydat_len); ukey.ue_line = key; - if ((ue = RB_FIND(user_name_tree, env->sc_user_names, + if ((ue = RBT_FIND(user_name_tree, env->sc_user_names, &ukey)) == NULL) { /* * canacar's trick: @@ -500,15 +500,14 @@ ypproc_next_2_svc(ypreq_key *arg, struct * lexicographical order, hence insert the search key * and look up the next field, then remove it again. */ - RB_INSERT(user_name_tree, env->sc_user_names, &ukey); - if ((ue = RB_NEXT(user_name_tree, &env->sc_user_names, - &ukey)) == NULL) { - RB_REMOVE(user_name_tree, env->sc_user_names, + RBT_INSERT(user_name_tree, env->sc_user_names, &ukey); + if ((ue = RBT_NEXT(user_name_tree, &ukey)) == NULL) { + RBT_REMOVE(user_name_tree, env->sc_user_names, &ukey); res.stat = YP_NOKEY; return (&res); } - RB_REMOVE(user_name_tree, env->sc_user_names, &ukey); + RBT_REMOVE(user_name_tree, env->sc_user_names, &ukey); } line = ue->ue_line + (strlen(ue->ue_line) + 1); line = line + (strlen(line) + 1); @@ -522,20 +521,19 @@ ypproc_next_2_svc(ypreq_key *arg, struct arg->key.keydat_len); gkey.ge_line = key; - if ((ge = RB_FIND(group_name_tree, env->sc_group_names, + if ((ge = RBT_FIND(group_name_tree, env->sc_group_names, &gkey)) == NULL) { /* * canacar's trick reloaded. */ - RB_INSERT(group_name_tree, env->sc_group_names, &gkey); - if ((ge = RB_NEXT(group_name_tree, &env->sc_group_names, - &gkey)) == NULL) { - RB_REMOVE(group_name_tree, env->sc_group_names, + RBT_INSERT(group_name_tree, env->sc_group_names, &gkey); + if ((ge = RBT_NEXT(group_name_tree, &gkey)) == NULL) { + RBT_REMOVE(group_name_tree, env->sc_group_names, &gkey); res.stat = YP_NOKEY; return (&res); } - RB_REMOVE(group_name_tree, env->sc_group_names, &gkey); + RBT_REMOVE(group_name_tree, env->sc_group_names, &gkey); } line = ge->ge_line + (strlen(ge->ge_line) + 1); Index: ypldap.c =================================================================== RCS file: /cvs/src/usr.sbin/ypldap/ypldap.c,v retrieving revision 1.21 diff -u -p -r1.21 ypldap.c --- ypldap.c 20 Jan 2017 12:39:36 -0000 1.21 +++ ypldap.c 20 Jun 2017 01:25:24 -0000 @@ -134,8 +134,8 @@ main_start_update(struct env *env) (env->sc_group_names_t = calloc(1, sizeof(*env->sc_group_names_t))) == NULL) fatal(NULL); - RB_INIT(env->sc_user_names_t); - RB_INIT(env->sc_group_names_t); + RBT_INIT(user_name_tree, env->sc_user_names_t); + RBT_INIT(group_name_tree, env->sc_group_names_t); } /* @@ -151,8 +151,8 @@ main_trash_update(struct env *env) env->update_trashed = 1; - while ((ue = RB_ROOT(env->sc_user_names_t)) != NULL) { - RB_REMOVE(user_name_tree, + while ((ue = RBT_ROOT(user_name_tree, env->sc_user_names_t)) != NULL) { + RBT_REMOVE(user_name_tree, env->sc_user_names_t, ue); free(ue->ue_line); free(ue->ue_netid_line); @@ -160,9 +160,9 @@ main_trash_update(struct env *env) } free(env->sc_user_names_t); env->sc_user_names_t = NULL; - while ((ge = RB_ROOT(env->sc_group_names_t)) + while ((ge = RBT_ROOT(group_name_tree, env->sc_group_names_t)) != NULL) { - RB_REMOVE(group_name_tree, + RBT_REMOVE(group_name_tree, env->sc_group_names_t, ge); free(ge->ge_line); free(ge); @@ -183,7 +183,7 @@ main_create_user_groups(struct env *env) const char *errstr = NULL; size_t len; - RB_FOREACH(ue, user_name_tree, env->sc_user_names_t) { + RBT_FOREACH(ue, user_name_tree, env->sc_user_names_t) { bp = cp = ue->ue_line; /* name */ @@ -219,7 +219,7 @@ main_create_user_groups(struct env *env) ue->ue_gid = pw_gid; } - RB_FOREACH(ge, group_name_tree, env->sc_group_names_t) { + RBT_FOREACH(ge, group_name_tree, env->sc_group_names_t) { bp = cp = ge->ge_line; /* name */ @@ -239,7 +239,7 @@ main_create_user_groups(struct env *env) if (!(cp = strsep(&bp, ","))) break; ukey.ue_line = cp; - if ((ue = RB_FIND(user_name_tree, env->sc_user_names_t, + if ((ue = RBT_FIND(user_name_tree, env->sc_user_names_t, &ukey)) == NULL) { /* User not found */ log_warnx("main: unknown user %s in group %s\n", @@ -300,8 +300,8 @@ main_end_update(struct env *env) /* * clean previous tree. */ - while ((ue = RB_ROOT(env->sc_user_names)) != NULL) { - RB_REMOVE(user_name_tree, env->sc_user_names, + while ((ue = RBT_ROOT(user_name_tree, env->sc_user_names)) != NULL) { + RBT_REMOVE(user_name_tree, env->sc_user_names, ue); free(ue->ue_netid_line); free(ue); @@ -313,8 +313,8 @@ main_end_update(struct env *env) env->sc_user_lines = NULL; env->sc_user_names_t = NULL; - while ((ge = RB_ROOT(env->sc_group_names)) != NULL) { - RB_REMOVE(group_name_tree, + while ((ge = RBT_ROOT(group_name_tree, env->sc_group_names)) != NULL) { + RBT_REMOVE(group_name_tree, env->sc_group_names, ge); free(ge); } @@ -333,13 +333,13 @@ main_end_update(struct env *env) */ make_uids: - RB_INIT(&env->sc_user_uids); - RB_INIT(&env->sc_group_gids); - RB_FOREACH(ue, user_name_tree, env->sc_user_names) - RB_INSERT(user_uid_tree, + RBT_INIT(user_uid_tree, &env->sc_user_uids); + RBT_INIT(group_gid_tree, &env->sc_group_gids); + RBT_FOREACH(ue, user_name_tree, env->sc_user_names) + RBT_INSERT(user_uid_tree, &env->sc_user_uids, ue); - RB_FOREACH(ge, group_name_tree, env->sc_group_names) - RB_INSERT(group_gid_tree, + RBT_FOREACH(ge, group_name_tree, env->sc_group_names) + RBT_INSERT(group_gid_tree, &env->sc_group_gids, ge); } @@ -400,7 +400,7 @@ main_dispatch_client(int fd, short event ue->ue_uid = ir.ir_key.ik_uid; len = strlen(ue->ue_line) + 1; ue->ue_line[strcspn(ue->ue_line, ":")] = '\0'; - if (RB_INSERT(user_name_tree, env->sc_user_names_t, + if (RBT_INSERT(user_name_tree, env->sc_user_names_t, ue) != NULL) { /* dup */ free(ue->ue_line); free(ue); @@ -426,7 +426,7 @@ main_dispatch_client(int fd, short event ge->ge_gid = ir.ir_key.ik_gid; len = strlen(ge->ge_line) + 1; ge->ge_line[strcspn(ge->ge_line, ":")] = '\0'; - if (RB_INSERT(group_name_tree, env->sc_group_names_t, + if (RBT_INSERT(group_name_tree, env->sc_group_names_t, ge) != NULL) { /* dup */ free(ge->ge_line); free(ge); @@ -544,8 +544,8 @@ main(int argc, char *argv[]) if (argc) usage(); - RB_INIT(&env.sc_user_uids); - RB_INIT(&env.sc_group_gids); + RBT_INIT(user_uid_tree, &env.sc_user_uids); + RBT_INIT(group_gid_tree, &env.sc_group_gids); if (parse_config(&env, conffile, opts)) exit(1); Index: ypldap.h =================================================================== RCS file: /cvs/src/usr.sbin/ypldap/ypldap.h,v retrieving revision 1.19 diff -u -p -r1.19 ypldap.h --- ypldap.h 30 May 2017 09:33:31 -0000 1.19 +++ ypldap.h 20 Jun 2017 01:25:24 -0000 @@ -59,8 +59,8 @@ static const char * const log_procnames[ }; struct userent { - RB_ENTRY(userent) ue_name_node; - RB_ENTRY(userent) ue_uid_node; + RBT_ENTRY(userent) ue_name_node; + RBT_ENTRY(userent) ue_uid_node; uid_t ue_uid; char *ue_line; char *ue_netid_line; @@ -68,8 +68,8 @@ struct userent { }; struct groupent { - RB_ENTRY(groupent) ge_name_node; - RB_ENTRY(groupent) ge_gid_node; + RBT_ENTRY(groupent) ge_name_node; + RBT_ENTRY(groupent) ge_gid_node; gid_t ge_gid; char *ge_line; }; @@ -169,10 +169,13 @@ struct env { struct imsgev *sc_iev; struct imsgev *sc_iev_dns; - RB_HEAD(user_name_tree,userent) *sc_user_names; - RB_HEAD(user_uid_tree,userent) sc_user_uids; - RB_HEAD(group_name_tree,groupent)*sc_group_names; - RB_HEAD(group_gid_tree,groupent) sc_group_gids; + RBT_HEAD(user_name_tree,userent) + *sc_user_names; + RBT_HEAD(user_uid_tree,userent) sc_user_uids; + RBT_HEAD(group_name_tree,groupent) + *sc_group_names; + RBT_HEAD(group_gid_tree,groupent) + sc_group_gids; struct user_name_tree *sc_user_names_t; struct group_name_tree *sc_group_names_t; size_t sc_user_line_len; @@ -211,14 +214,18 @@ int imsg_compose_event(struct imsgev /* entries.c */ void flatten_entries(struct env *); -int userent_name_cmp(struct userent *, struct userent *); -int userent_uid_cmp(struct userent *, struct userent *); -int groupent_name_cmp(struct groupent *, struct groupent *); -int groupent_gid_cmp(struct groupent *, struct groupent *); -RB_PROTOTYPE( user_name_tree, userent, ue_name_node, userent_name_cmp); -RB_PROTOTYPE( user_uid_tree, userent, ue_uid_node, userent_uid_cmp); -RB_PROTOTYPE( group_name_tree, groupent, ge_name_node, groupent_name_cmp); -RB_PROTOTYPE( group_gid_tree, groupent, ge_gid_node, groupent_gid_cmp); +int userent_name_cmp(const struct userent *, + const struct userent *); +int userent_uid_cmp(const struct userent *, + const struct userent *); +int groupent_name_cmp(const struct groupent *, + const struct groupent *); +int groupent_gid_cmp(const struct groupent *, + const struct groupent *); +RBT_PROTOTYPE( user_name_tree, userent, ue_name_node, userent_name_cmp); +RBT_PROTOTYPE( user_uid_tree, userent, ue_uid_node, userent_uid_cmp); +RBT_PROTOTYPE( group_name_tree, groupent, ge_name_node, groupent_name_cmp); +RBT_PROTOTYPE( group_gid_tree, groupent, ge_gid_node, groupent_gid_cmp); /* yp.c */ void yp_init(struct env *);