commit e17d7bf
Emilia Smólska
·
2026-07-27 19:53:10 +0000 UTC
parent 2229e46
style
M
arg.h
+7,
-9
1@@ -1,21 +1,19 @@
2-#define nil ((void *)0)
3-
4 extern char *argv0;
5
6-#define ARGBEGIN for((argv0 || (argv0 = argv[0])), argc--, argv++;\
7+#define ARGBEGIN for ((argv0 || (argv0 = argv[0])), argc--, argv++;\
8 argv[0] && argv[0][0] == '-' && argv[0][1];\
9- argc--, argv++){\
10+ argc--, argv++) {\
11 char *_args;\
12 char *_argt;\
13 char _argc;\
14 _args = &argv[0][1];\
15- if(_args[0] == '-' && _args[1] == '\0'){\
16+ if (_args[0] == '-' && _args[1] == '\0') {\
17 argc--, argv++;\
18 break;\
19 }\
20 _argc = '\0';\
21- while(_args[0] && (_argc = *_args++))\
22- switch(_argc)
23+ while (_args[0] && (_argc = *_args++))\
24+ switch (_argc)
25
26 #define ARGEND (void)_args, _argt, _argc;\
27 }\
28@@ -23,11 +21,11 @@ extern char *argv0;
29
30 #define ARGF() (_argt = _args, _args = "",\
31 (_argt[0] ? _argt :\
32- argv[1] ? (argc--, *++argv) : nil))
33+ argv[1] ? (argc--, *++argv) : (char *)0))
34
35 #define EARGF(x) (_argt = _args, _args = "",\
36 (_argt[0] ? _argt :\
37 argv[1] ? (argc--, *++argv) :\
38- ((x), abort(), nil)))
39+ ((x), abort(), (char *)0)))
40
41 #define ARGC() _argc
M
verily.c
+46,
-56
1@@ -4,6 +4,7 @@
2 #include <pwd.h>
3 #include <stdarg.h>
4 #include <stdbool.h>
5+#include <stddef.h>
6 #include <stdnoreturn.h>
7 #include <stdio.h>
8 #include <stdlib.h>
9@@ -17,7 +18,9 @@
10 #include <login_cap.h>
11 #endif
12
13-#define nelem(x) (long)(sizeof(x) / sizeof((x)[0]))
14+typedef ptrdiff_t isz;
15+
16+#define countof(x) (isz)(sizeof(x) / sizeof((x)[0]))
17
18 #define STRINGIFY1(x) #x
19 #define STRINGIFY(x) STRINGIFY1(x)
20@@ -34,71 +37,60 @@ static void dosetuid(uid_t, struct passwd *);
21 int
22 main(int argc, char **argv)
23 {
24- gid_t groups[NGROUPS_MAX];
25- char *shcmd[3] = {nil, "-i", nil};
26- char **cmd;
27- char *arg;
28- struct group *wheel;
29- int ngroups;
30- bool iswheel;
31-
32 argv0 = argv[0];
33
34 #if !defined(WITH_CHROOT) && defined(HAVE_PLEDGE)
35- if(pledge("stdio rpath getpw exec id", nil) < 0)
36+ if (pledge("stdio rpath getpw exec id", 0) < 0)
37 die("pledge: %s", strerror(errno));
38 #endif
39
40- wheel = getgrnam(CHECKGRPSTR);
41- if(!wheel)
42+ struct group *wheel = getgrnam(CHECKGRPSTR);
43+ if (!wheel)
44 die(CHECKGRPSTR ": No such group");
45- ngroups = getgroups(nelem(groups), groups);
46- if(ngroups < 0)
47+ gid_t groups[NGROUPS_MAX];
48+ int ngroups = getgroups(countof(groups), groups);
49+ if (ngroups < 0)
50 die("getgroups: %s", strerror(errno));
51- iswheel = false;
52- for(int i = 0; i < nelem(groups); i++)
53- if(groups[i] == wheel->gr_gid){
54+ bool iswheel = false;
55+ for (int i = 0; i < countof(groups); i++)
56+ if (groups[i] == wheel->gr_gid) {
57 iswheel = true;
58 break;
59 }
60- if(!iswheel)
61+ if (!iswheel)
62 die("Not in the " CHECKGRPSTR " group");
63
64- if(access(CHECKFILESTR, W_OK) < 0)
65+ if (access(CHECKFILESTR, W_OK) < 0)
66 die(CHECKFILESTR ": %s", strerror(errno));
67
68- if(argc <= 1 || argv[1][0] != '-')
69- dosetuid(0, nil);
70+ if (argc <= 1 || argv[1][0] != '-')
71+ dosetuid(0, 0);
72
73- ARGBEGIN{
74+ ARGBEGIN {
75 #ifdef HAVE_LOGIN_CAP
76 case 'c': {
77- arg = EARGF(usage());
78- if(setclasscontext(arg, LOGIN_SETALL) < 0)
79+ char *arg = EARGF(usage());
80+ if (setclasscontext(arg, LOGIN_SETALL) < 0)
81 die("setclasscontext %s: %s", arg, strerror(errno));
82 break;
83 }
84 #endif
85 case 'G': {
86+ char *arg = EARGF(usage());
87 char *end;
88- gid_t gid;
89-
90- arg = EARGF(usage());
91- gid = strtol(arg, &end, 10);
92- if(arg[0] == '\0' || end[0] != '\0')
93+ gid_t gid = strtol(arg, &end, 10);
94+ if (arg[0] == '\0' || end[0] != '\0')
95 usage();
96- if(setgid(gid) < 0)
97+ if (setgid(gid) < 0)
98 die("setgid %u: %s", gid, strerror(errno));
99 break;
100 }
101 case 'g': {
102- struct group *group;
103-
104- arg = EARGF(usage());
105- group = getgrnam(arg);
106- if(!group)
107+ char *arg = EARGF(usage());
108+ struct group *group = getgrnam(arg);
109+ if (!group)
110 die("%s: No such group", arg);
111- if(setgid(group->gr_gid) < 0)
112+ if (setgid(group->gr_gid) < 0)
113 die("setgid %u: %s", group->gr_gid, strerror(errno));
114 break;
115 }
116@@ -106,31 +98,27 @@ main(int argc, char **argv)
117 exit(0);
118 #ifdef WITH_CHROOT
119 case 'r': {
120- arg = EARGF(usage());
121- if(chroot(arg) < 0)
122+ char *arg = EARGF(usage());
123+ if (chroot(arg) < 0)
124 die("chroot %s: %s", arg, strerror(errno));
125- if(chdir("/") < 0)
126+ if (chdir("/") < 0)
127 die("chdir /: %s", strerror(errno));
128 break;
129 }
130 #endif
131 case 'U': {
132+ char *arg = EARGF(usage());
133 char *end;
134- uid_t uid;
135-
136- arg = EARGF(usage());
137- uid = strtol(arg, &end, 10);
138- if(arg[0] == '\0' || end[0] != '\0')
139+ uid_t uid = strtol(arg, &end, 10);
140+ if (arg[0] == '\0' || end[0] != '\0')
141 usage();
142- dosetuid(uid, nil);
143+ dosetuid(uid, 0);
144 break;
145 }
146 case 'u': {
147- struct passwd *passwd;
148-
149- arg = EARGF(usage());
150- passwd = getpwnam(arg);
151- if(!passwd)
152+ char *arg = EARGF(usage());
153+ struct passwd *passwd = getpwnam(arg);
154+ if (!passwd)
155 die("%s: No such user", arg);
156 dosetuid(passwd->pw_uid, passwd);
157 break;
158@@ -139,12 +127,14 @@ main(int argc, char **argv)
159 usage();
160 }ARGEND
161
162- if(argc == 0){
163+ char **cmd;
164+ char *shcmd[3] = {NULL, "-i", NULL};
165+ if (argc == 0) {
166 shcmd[0] = getenv("SHELL");
167- if(!shcmd[0])
168+ if (!shcmd[0])
169 die("$SHELL not set");
170 cmd = shcmd;
171- }else
172+ } else
173 cmd = argv;
174
175 (void)execvp(cmd[0], cmd);
176@@ -187,11 +177,11 @@ static void
177 dosetuid(uid_t uid, struct passwd *passwd)
178 {
179 #ifdef HAVE_LOGIN_CAP
180- if(!passwd)
181+ if (!passwd)
182 passwd = getpwuid(uid);
183- if(!passwd)
184+ if (!passwd)
185 die("%u: No such user id", uid);
186- if(setusercontext(nil, passwd, uid, LOGIN_SETALL) < 0)
187+ if (setusercontext(0, passwd, uid, LOGIN_SETALL) < 0)
188 die("setusercontext: %s", strerror(errno));
189 #else
190 (void)passwd;