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=7d1dc7317d24e2c21a5b7ffb2e46fe970f760798;hpb=0bb1e785dd3879ce41d751cfd71bd2cbef72b8a2;p=util-vserver.git diff --git a/util-vserver/src/fakerunlevel.c b/util-vserver/src/fakerunlevel.c index 7d1dc73..d532d69 100644 --- a/util-vserver/src/fakerunlevel.c +++ b/util-vserver/src/fakerunlevel.c @@ -34,9 +34,16 @@ #include #include #include +#include #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) @@ -78,33 +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 (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();