X-Git-Url: http://git.linux-vserver.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=util-vserver%2Fsrc%2Ffakerunlevel.c;h=d532d693896be53d26b18be9d63786cabe55ac28;hb=faa778968d1a7dfeaebc9fe4b847e691dc62fd15;hp=322d90a1b75f575b05192ccb26b54b26a3ffd702;hpb=04a42f060cd6fe32ea481e61a38427cf3a17a49d;p=util-vserver.git diff --git a/util-vserver/src/fakerunlevel.c b/util-vserver/src/fakerunlevel.c index 322d90a..d532d69 100644 --- a/util-vserver/src/fakerunlevel.c +++ b/util-vserver/src/fakerunlevel.c @@ -38,6 +38,12 @@ #include #include +#define ENSC_WRAPPERS_PREFIX "fakerunlevel: " +#define ENSC_WRAPPERS_UNISTD 1 +#define ENSC_WRAPPERS_FCNTL 1 +#include + +int wrapper_exit_code = 1; static void showHelp(int fd, int exit_code) @@ -79,34 +85,24 @@ int main (int argc, char *argv[]) if (runlevel<0 || runlevel>6) showHelp(2,1); - if (chroot(".")==-1 || - chdir("/")==-1) { - perror("chroot()/chdir()"); - return EXIT_FAILURE; - } + Echroot("."); + Echdir("/"); // Real NSS is too expensive/insecure in this state; therefore, use the // value detected at ./configure stage or overridden by $UTMP_GID // env-variable gid = gid_str ? atoi(gid_str) : UTMP_GID; - if (setgroups(1,&gid)==-1 || - setgid(gid)==-1 || - getgid()!=gid) { - perror("setgid()/getgid()"); - return EXIT_FAILURE; - } + Esetgroups(1, &gid); + Esetgid(gid); - umask(002); - fd = open(fname, O_WRONLY|O_CREAT|O_APPEND, 0664); - if (fd==-1) { - perror("open()"); + if (getgid()!=gid) { + WRITE_MSG(2, "fakerunlevel: Failed to set group\n"); return EXIT_FAILURE; } - if (close(fd)==-1) { - perror("close()"); - return EXIT_FAILURE; - } + umask(002); + fd = EopenD(fname, O_WRONLY|O_CREAT|O_APPEND, 0664); + Eclose(fd); utmpname (fname); setutent();