commit feb5646
Michael Forney
·
2016-04-30 08:09:16 +0000 UTC
parent 70daabb
launch: Improve error messages
1 files changed,
+47,
-53
+47,
-53
1@@ -77,9 +77,7 @@ die(const char *format, ...);
2
3 static void __attribute__((noreturn)) usage(const char *name)
4 {
5- fprintf(stderr, "Usage: %s [-n] [-s <server-socket>] [-t <tty-device>] "
6- "[--] <server> [server arguments...]\n",
7- name);
8+ fprintf(stderr, "usage: %s [-n] [-s socket] [-t tty] [--] server [args...]\n", name);
9 exit(2);
10 }
11
12@@ -90,7 +88,7 @@ start_devices(void)
13
14 for (index = 0; index < launcher.num_drm_fds; ++index) {
15 if (drmSetMaster(launcher.drm_fds[index]) < 0)
16- die("Failed to set DRM master");
17+ die("failed to set DRM master");
18 }
19 }
20
21@@ -101,15 +99,12 @@ stop_devices(bool fatal)
22
23 for (index = 0; index < launcher.num_drm_fds; ++index) {
24 if (drmDropMaster(launcher.drm_fds[index]) < 0 && fatal)
25- die("Failed to drop DRM master");
26+ die("failed to drop DRM master");
27 }
28
29 for (index = 0; index < launcher.num_input_fds; ++index) {
30- if (ioctl(launcher.input_fds[index], EVIOCREVOKE, 0) == -1 && errno != ENODEV && fatal)
31- die("FATAL: Your kernel does not support EVIOCREVOKE; "
32- "input devices cannot be revoked: %s",
33- strerror(errno));
34-
35+ if (ioctl(launcher.input_fds[index], EVIOCREVOKE, 0) < 0 && errno != ENODEV && fatal)
36+ die("failed to revoke input device:");
37 close(launcher.input_fds[index]);
38 }
39
40@@ -125,7 +120,6 @@ cleanup(void)
41 return;
42
43 /* Cleanup VT */
44- fprintf(stderr, "Restoring VT to original state\n");
45 ioctl(launcher.tty_fd, VT_SETMODE, &mode);
46 ioctl(launcher.tty_fd, KDSETMODE, original_vt_state.console_mode);
47 ioctl(launcher.tty_fd, KDSKBMODE, original_vt_state.kb_mode);
48@@ -143,13 +137,12 @@ die(const char *format, ...)
49 {
50 va_list args;
51
52- fputs("FATAL: ", stderr);
53 va_start(args, format);
54 vfprintf(stderr, format, args);
55 va_end(args);
56
57- if (errno != 0)
58- fprintf(stderr, ": %s", strerror(errno));
59+ if (format[0] && format[strlen(format) - 1] == ':')
60+ fprintf(stderr, " %s", strerror(errno));
61
62 fputc('\n', stderr);
63
64@@ -185,7 +178,6 @@ handle_chld(int signal)
65 int status;
66
67 wait(&status);
68- fprintf(stderr, "Server exited with status %d\n", WEXITSTATUS(status));
69 cleanup();
70 exit(WEXITSTATUS(status));
71 }
72@@ -231,12 +223,12 @@ handle_socket_data(int socket)
73 switch (request->type) {
74 case SWC_LAUNCH_REQUEST_OPEN_DEVICE:
75 if (request->path[size - __builtin_offsetof(typeof(*request), path) - 1] != '\0') {
76- fprintf(stderr, "Path is not NULL terminated\n");
77+ fprintf(stderr, "path is not NULL terminated\n");
78 goto fail;
79 }
80
81 if (stat(request->path, &st) == -1) {
82- fprintf(stderr, "Could not stat %s\n", request->path);
83+ fprintf(stderr, "stat %s: %s\n", request->path, strerror(errno));
84 goto fail;
85 }
86
87@@ -246,25 +238,25 @@ handle_socket_data(int socket)
88 goto fail;
89
90 if (launcher.num_input_fds == ARRAY_LENGTH(launcher.input_fds)) {
91- fprintf(stderr, "Too many input devices opened\n");
92+ fprintf(stderr, "too many input devices opened\n");
93 goto fail;
94 }
95 break;
96 case DRM_MAJOR:
97 if (launcher.num_drm_fds == ARRAY_LENGTH(launcher.drm_fds)) {
98- fprintf(stderr, "Too many DRM devices opened\n");
99+ fprintf(stderr, "too many DRM devices opened\n");
100 goto fail;
101 }
102 break;
103 default:
104- fprintf(stderr, "Device is not an input device\n");
105+ fprintf(stderr, "device is not an input device\n");
106 goto fail;
107 }
108
109 fd = open(request->path, request->flags);
110
111 if (fd == -1) {
112- fprintf(stderr, "Could not open device %s\n", request->path);
113+ fprintf(stderr, "open %s: %s\n", request->path, strerror(errno));
114 goto fail;
115 }
116
117@@ -283,10 +275,10 @@ handle_socket_data(int socket)
118 goto fail;
119
120 if (ioctl(launcher.tty_fd, VT_ACTIVATE, request->vt) == -1)
121- fprintf(stderr, "Could not activate VT %d: %s\n", request->vt, strerror(errno));
122+ fprintf(stderr, "failed to activate VT %d: %s\n", request->vt, strerror(errno));
123 break;
124 default:
125- fprintf(stderr, "Unknown request %u\n", request->type);
126+ fprintf(stderr, "unknown request %u\n", request->type);
127 goto fail;
128 }
129
130@@ -312,9 +304,9 @@ find_vt(char *vt, size_t size)
131
132 tty0_fd = open("/dev/tty0", O_RDWR);
133 if (tty0_fd == -1)
134- die("Could not open /dev/tty0 to find unused VT");
135+ die("open /dev/tty0:");
136 if (ioctl(tty0_fd, VT_OPENQRY, &vt_num) != 0)
137- die("Could not find unused VT");
138+ die("VT open query failed:");
139 close(tty0_fd);
140 if (snprintf(vt, size, "/dev/tty%d", vt_num) >= size)
141 die("VT number is too large");
142@@ -339,7 +331,7 @@ open_tty(const char *tty_name)
143 fd = open(tty_name, O_RDWR | O_NOCTTY);
144
145 if (fd < 0)
146- die("Could not open %s", tty_name);
147+ die("open %s:", tty_name);
148
149 return fd;
150 }
151@@ -358,34 +350,34 @@ setup_tty(int fd)
152 };
153
154 if (fstat(fd, &st) == -1)
155- die("Could not stat TTY fd");
156+ die("failed to stat TTY fd:");
157
158 vt = minor(st.st_rdev);
159
160 if (major(st.st_rdev) != TTY_MAJOR || vt == 0)
161- die("Not a valid VT");
162+ die("not a valid VT");
163
164 if (ioctl(fd, VT_GETSTATE, &state) == -1)
165- die("Could not get the current VT state");
166+ die("failed to get the current VT state:");
167
168 original_vt_state.vt = state.v_active;
169
170 if (ioctl(fd, KDGKBMODE, &original_vt_state.kb_mode))
171- die("Could not get keyboard mode");
172+ die("failed to get keyboard mode:");
173
174 if (ioctl(fd, KDGETMODE, &original_vt_state.console_mode))
175- die("Could not get console mode");
176+ die("failed to get console mode:");
177
178 if (ioctl(fd, KDSKBMODE, K_OFF) == -1)
179- die("Could not set keyboard mode to K_OFF");
180+ die("failed to set keyboard mode to K_OFF:");
181
182 if (ioctl(fd, KDSETMODE, KD_GRAPHICS) == -1) {
183- perror("Could not set console mode to KD_GRAPHICS");
184+ perror("failed to set console mode to KD_GRAPHICS");
185 goto error0;
186 }
187
188 if (ioctl(fd, VT_SETMODE, &mode) == -1) {
189- perror("Could not set VT mode");
190+ perror("failed to set VT mode");
191 goto error1;
192 }
193
194@@ -393,12 +385,12 @@ setup_tty(int fd)
195 activate();
196 else if (!nflag) {
197 if (ioctl(fd, VT_ACTIVATE, vt) == -1) {
198- perror("Could not activate VT");
199+ perror("failed to activate VT");
200 goto error2;
201 }
202
203 if (ioctl(fd, VT_WAITACTIVE, vt) == -1) {
204- perror("Could not wait for VT to become active");
205+ perror("failed to wait for VT to become active");
206 goto error2;
207 }
208 }
209@@ -446,30 +438,30 @@ main(int argc, char *argv[])
210 usage(argv[0]);
211
212 if (socketpair(AF_LOCAL, SOCK_SEQPACKET, 0, sockets) == -1)
213- die("Could not create socket pair");
214+ die("socketpair:");
215
216 launcher.socket = sockets[0];
217
218 if (fcntl(sockets[0], F_SETFD, FD_CLOEXEC) == -1)
219- die("Could not set CLOEXEC on socket");
220+ die("failed set CLOEXEC on socket:");
221
222 action.sa_handler = &handle_chld;
223 if (sigaction(SIGCHLD, &action, NULL) == -1)
224- die("Failed to register signal handler for SIGCHLD");
225+ die("failed to register signal handler for SIGCHLD:");
226
227 action.sa_handler = &handle_usr1;
228 if (sigaction(SIGUSR1, &action, NULL) == -1)
229- die("Failed to register signal handler for SIGUSR1");
230+ die("failed to register signal handler for SIGUSR1:");
231
232 action.sa_handler = &handle_usr2;
233 if (sigaction(SIGUSR2, &action, NULL) == -1)
234- die("Failed to register signal handler for SIGUSR2");
235+ die("failed to register signal handler for SIGUSR2:");
236
237 action.sa_handler = &forward_signal;
238 if (sigaction(SIGINT, &action, NULL) == -1)
239- die("Failed to register signal handler for SIGINT");
240+ die("failed to register signal handler for SIGINT:");
241 if (sigaction(SIGTERM, &action, NULL) == -1)
242- die("Failed to register signal handler for SIGTERM");
243+ die("failed to register signal handler for SIGTERM:");
244
245 sigfillset(&set);
246 sigdelset(&set, SIGCHLD);
247@@ -484,7 +476,7 @@ main(int argc, char *argv[])
248 vt = vt_buf;
249 }
250
251- fprintf(stderr, "Running on %s\n", vt);
252+ fprintf(stderr, "running on %s\n", vt);
253 launcher.tty_fd = open_tty(vt);
254 setup_tty(launcher.tty_fd);
255
256@@ -497,15 +489,15 @@ main(int argc, char *argv[])
257 /* Reset signal handlers to defaults */
258 action.sa_handler = SIG_DFL;
259 if (sigaction(SIGCHLD, &action, NULL) == -1)
260- die("Failed to set default signal handler for SIGCHLD");
261+ die("failed to set default signal handler for SIGCHLD:");
262 if (sigaction(SIGUSR1, &action, NULL) == -1)
263- die("Failed to set default signal handler for SIGUSR1");
264+ die("failed to set default signal handler for SIGUSR1:");
265 if (sigaction(SIGUSR2, &action, NULL) == -1)
266- die("Failed to set default signal handler for SIGUSR2");
267+ die("failed to set default signal handler for SIGUSR2:");
268 if (sigaction(SIGINT, &action, NULL) == -1)
269- die("Failed to set default signal handler for SIGINT");
270+ die("failed to set default signal handler for SIGINT:");
271 if (sigaction(SIGTERM, &action, NULL) == -1)
272- die("Failed to set default signal handler for SIGTERM");
273+ die("failed to set default signal handler for SIGTERM:");
274
275 /* Set empty signal mask */
276 sigemptyset(&set);
277@@ -517,11 +509,13 @@ main(int argc, char *argv[])
278 sprintf(string, "%d", launcher.tty_fd);
279 setenv(SWC_LAUNCH_TTY_FD_ENV, string, 1);
280
281- if (setuid(getuid()) != 0 || setgid(getgid()) != 0)
282- die("Failed to drop permission before executing display server");
283+ if (setuid(getuid()) < 0)
284+ die("setuid:");
285+ if (setgid(getgid()) < 0)
286+ die("setgid:");
287
288 execvp(argv[optind], argv + optind);
289- die("Could not exec %s", argv[optind]);
290+ die("exec %s:", argv[optind]);
291 }
292 /* Parent */
293 else {
294@@ -538,7 +532,7 @@ main(int argc, char *argv[])
295 if (errno == EINTR)
296 continue;
297 else
298- die("Error while polling on socket fd");
299+ die("poll:");
300 }
301
302 handle_socket_data(pollfd.fd);