19{
21
22
23
24 uid_t uid = getuid();
25 uid_t euid = geteuid();
26
27
28
29 if (euid != 0) {
30 fprintf(stderr, "%s: must be setuid-root, please do: chown root, chmod u+s\n", argv[0]);
31 exit(1);
32 }
33
34#if 1
35 struct sched_param sparam;
36 sparam.sched_priority = 50;
37
38 status = sched_setscheduler(0, SCHED_FIFO, &sparam);
39
41 fprintf(stderr,
"%s: sched_setscheduler() returned %d, errno %d (%s)\n", argv[0],
status, errno, strerror(errno));
42 exit(1);
43 }
44#endif
45
46#if 0
47 status = setpriority(PRIO_PROCESS, 0, -20);
48
50 fprintf(stderr,
"%s: setpriority() returned %d, errno %d (%s)\n", argv[0],
status, errno, strerror(errno));
51 exit(1);
52 }
53#endif
54
55
57
59 fprintf(stderr,
"%s: cannot surrender root priveleges, setuid(%d) returned %d, errno %d (%s)\n", argv[0], uid,
status, errno, strerror(errno));
60 exit(1);
61 }
62
63 if (argc < 2) {
64 fprintf(stderr, "Usage: %s program [arguments...]\n", argv[0]);
65 exit(1);
66 }
67
68 status = execvp(argv[1], &argv[1]);
69
70 fprintf(stderr,
"%s: execvp(\"%s\") returned %d, errno %d (%s)\n", argv[0], argv[1],
status, errno, strerror(errno));
71 exit(1);
72}