diff options
Diffstat (limited to 'usr.bin/sudo')
-rw-r--r-- | usr.bin/sudo/ChangeLog | 19 | ||||
-rw-r--r-- | usr.bin/sudo/redblack.c | 22 | ||||
-rw-r--r-- | usr.bin/sudo/set_perms.c | 8 |
3 files changed, 37 insertions, 12 deletions
diff --git a/usr.bin/sudo/ChangeLog b/usr.bin/sudo/ChangeLog index ef26b882c7e..9a3940d4af3 100644 --- a/usr.bin/sudo/ChangeLog +++ b/usr.bin/sudo/ChangeLog @@ -1,3 +1,22 @@ +2009-06-29 09:36 millert + + * redblack.c: In rbrepair, re-color the root or the first non-block + node we find to be black. Re-coloring the root is probably not + needed but won't hurt. + +2009-06-29 09:35 millert + + * sudo.cat, sudoers.cat, sudo.man.in, sudoers.man.in: regen + +2009-06-26 16:40 millert + + * redblack.c: When repairing the tree, don't touch the root node. + +2009-06-25 08:44 millert + + * set_perms.c: Protect call to setegid in runas_setup with #ifdef + HAVE_SETEUID. Reported by Josef Schmid. + 2009-06-23 14:29 millert * sudoers.pod: Document that we accept env_pam-style environment diff --git a/usr.bin/sudo/redblack.c b/usr.bin/sudo/redblack.c index 91c8586bba9..ac8ea2d2136 100644 --- a/usr.bin/sudo/redblack.c +++ b/usr.bin/sudo/redblack.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004-2005, 2007 Todd C. Miller <Todd.Miller@courtesan.com> + * Copyright (c) 2004-2005, 2007,2009 Todd C. Miller <Todd.Miller@courtesan.com> * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above @@ -58,7 +58,7 @@ #include "redblack.h" #ifndef lint -__unused static const char rcsid[] = "$Sudo: redblack.c,v 1.11 2009/06/26 20:40:17 millert Exp $"; +__unused static const char rcsid[] = "$Sudo: redblack.c,v 1.12 2009/06/29 13:36:20 millert Exp $"; #endif /* lint */ static void rbrepair __P((struct rbtree *, struct rbnode *)); @@ -77,10 +77,11 @@ static void _rbdestroy __P((struct rbtree *, struct rbnode *, * In addition to the ordinary requirements imposed on binary search * trees, we make the following additional requirements of any valid * red-black tree: - * 1) The root is black. - * 2) All leaves are black. - * 3) Both children of each red node are black. - * 4) The paths from each leaf up to the root each contain the same + * 1) Every node is either red or black. + * 2) The root is black. + * 3) All leaves are black. + * 4) Both children of each red node are black. + * 5) The paths from each leaf up to the root each contain the same * number of black nodes. */ @@ -372,8 +373,8 @@ rbdestroy(tree, destroy) * Delete node 'z' from the tree and return its data pointer. */ void *rbdelete(tree, z) - struct rbtree* tree; - struct rbnode* z; + struct rbtree *tree; + struct rbnode *z; { struct rbnode *x, *y; void *data = z->data; @@ -444,7 +445,7 @@ rbrepair(tree, node) node->parent->color = black; sibling->right->color = black; rotate_left(tree, node->parent); - break; + node = rbroot(tree); /* exit loop */ } } else { /* if (node == node->parent->right) */ sibling = node->parent->left; @@ -468,8 +469,9 @@ rbrepair(tree, node) node->parent->color = black; sibling->left->color = black; rotate_right(tree, node->parent); - break; + node = rbroot(tree); /* exit loop */ } } } + node->color = black; } diff --git a/usr.bin/sudo/set_perms.c b/usr.bin/sudo/set_perms.c index 887e8b74574..4417330f976 100644 --- a/usr.bin/sudo/set_perms.c +++ b/usr.bin/sudo/set_perms.c @@ -52,7 +52,7 @@ #include "sudo.h" #ifndef lint -__unused static const char rcsid[] = "$Sudo: set_perms.c,v 1.48 2009/05/25 12:02:41 millert Exp $"; +__unused static const char rcsid[] = "$Sudo: set_perms.c,v 1.49 2009/06/25 12:44:33 millert Exp $"; #endif /* lint */ #ifdef __TANDEM @@ -577,7 +577,11 @@ runas_setup() * Initialize group vector */ runas_setgroups(); - if (setegid(gid) || setgid(gid)) +#ifdef HAVE_SETEUID + if (setegid(gid)) + warning("cannot set egid to runas gid"); +#endif + if (setgid(gid)) warning("cannot set gid to runas gid"); } } |