From c7a2ef7a1e80e5e99b442bd30ab0f044fca4bfda Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Sat, 9 Feb 2008 14:30:06 +0000 Subject: [PATCH] Add support for SELinux RBAC. Sudoers entries may specify a role and type. There are also role and type defaults that may be used. To make sure a transition occurs, when using RBAC commands are executed via the new sesh binary. Based on initial changes from Dan Walsh. --- sesh.c | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 sesh.c diff --git a/sesh.c b/sesh.c new file mode 100644 index 000000000..f1a3ac072 --- /dev/null +++ b/sesh.c @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2008 Todd C. Miller + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "compat.h" + +#ifndef lint +__unused static const char rcsid[] = "$Sudo$"; +#endif /* lint */ + +int +main (int argc, char **argv) +{ + char *cp, *cmnd; + + if (argc < 2) + errx(EXIT_FAILURE, "requires at least one argument"); + + /* Shift argv and make a copy of the command to execute. */ + argv++; + argc--; + cmnd = strdup(argv[0]); + if (cmnd == NULL) + err(EXIT_FAILURE, NULL); + + /* If invoked as a login shell, modify argv[0] accordingly. */ + if (argv[0][0] == '-') { + if ((cp = strrchr(argv[0], '/')) == NULL) + cp = argv[0]; + *cp = '-'; + } + execv(cmnd, argv); + warn("unable to execute %s", argv[0]); + _exit(EXIT_FAILURE); +} -- 2.50.1