#include #include #include #include #include int main(int argc, char **argv) { char *end; unsigned long mask; if (argc < 3) { fputs("usage: package-umaskexec MASK PROGRAM [ARG ...]\n", stderr); return 2; } errno = 0; mask = strtoul(argv[1], &end, 8); if (errno != 0 || end == argv[1] || *end != '\0' || mask > 0777) { fputs("package-umaskexec: invalid mask\n", stderr); return 2; } umask((mode_t)mask); execv(argv[2], &argv[2]); fputs("package-umaskexec: exec failed\n", stderr); return 127; }