From e0377fb294821a68112d4da09f836ac42e3d5956 Mon Sep 17 00:00:00 2001 From: Rob Landley Date: Tue, 5 Jan 2010 12:17:05 -0600 Subject: Add TOYBOX_SUID. --- main.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'main.c') diff --git a/main.c b/main.c index 4e6a31e7..e0dab1cc 100644 --- a/main.c +++ b/main.c @@ -64,6 +64,21 @@ static const int NEED_OPTIONS = void toy_init(struct toy_list *which, char *argv[]) { + // Drop permissions for non-suid commands. + + if (CFG_TOYBOX_SUID) { + uid_t uid = getuid(), euid = geteuid(); + + if (!(which->flags & TOYFLAG_STAYROOT)) { + if (uid != euid) xsetuid(euid=uid); + } else if (CFG_TOYBOX_DEBUG && uid) + error_exit("Not installed suid root"); + + if ((which->flags & TOYFLAG_NEEDROOT) && euid) + error_exit("Not root"); + + } + // Free old toys contents here? toys.which = which; -- cgit v1.2.3