[PATCH 3/4] Xorg.wrap: Clarify error messages

Guillem Jover guillem at hadrons.org
Mon Apr 14 09:13:24 PDT 2014


Not printing the program name produces very confusing messages that
might be difficult to attribute while trying to diagnose problems,
let's be explicit about who we are.

Also add a missing "/" between SUID_WRAPPER_DIR and "Xorg.bin".

Signed-off-by: Guillem Jover <guillem at hadrons.org>
---
 hw/xfree86/xorg-wrapper.c | 38 +++++++++++++++++++++++++-------------
 1 file changed, 25 insertions(+), 13 deletions(-)

diff --git a/hw/xfree86/xorg-wrapper.c b/hw/xfree86/xorg-wrapper.c
index 80889e8..12ea2c3 100644
--- a/hw/xfree86/xorg-wrapper.c
+++ b/hw/xfree86/xorg-wrapper.c
@@ -25,6 +25,7 @@
 
 #include "dix-config.h"
 
+#include <errno.h>
 #include <fcntl.h>
 #include <limits.h>
 #include <stdint.h>
@@ -40,6 +41,8 @@
 
 #define CONFIG_FILE SYSCONFDIR "/X11/Xwrapper.config"
 
+static const char *progname;
+
 enum { ROOT_ONLY, CONSOLE_ONLY, ANYBODY };
 
 /* KISS non locale / LANG parsing isspace version */
@@ -88,18 +91,21 @@ static void parse_config(int *allowed, int *needs_root_rights)
         /* Split in a key + value pair */
         equals = strchr(stripped, '=');
         if (!equals) {
-            fprintf(stderr, "Syntax error at %s line %d\n", CONFIG_FILE, line);
+            fprintf(stderr, "%s: Syntax error at %s line %d\n", progname,
+                CONFIG_FILE, line);
             exit(1);
         }
         *equals = 0;
         key   = strip(stripped);   /* To remove trailing whitespace from key */
         value = strip(equals + 1); /* To remove leading whitespace from val */
         if (!key[0]) {
-            fprintf(stderr, "Missing key at %s line %d\n", CONFIG_FILE, line);
+            fprintf(stderr, "%s: Missing key at %s line %d\n", progname,
+                CONFIG_FILE, line);
             exit(1);
         }
         if (!value[0]) {
-            fprintf(stderr, "Missing value at %s line %d\n", CONFIG_FILE, line);
+            fprintf(stderr, "%s: Missing value at %s line %d\n", progname,
+                CONFIG_FILE, line);
             exit(1);
         }
 
@@ -113,8 +119,8 @@ static void parse_config(int *allowed, int *needs_root_rights)
                 *allowed = ANYBODY;
             else {
                 fprintf(stderr,
-                    "Invalid value '%s' for 'allowed_users' at %s line %d\n",
-                    value, CONFIG_FILE, line);
+                    "%s: Invalid value '%s' for 'allowed_users' at %s line %d\n",
+                    progname, value, CONFIG_FILE, line);
                 exit(1);
             }
         }
@@ -127,8 +133,8 @@ static void parse_config(int *allowed, int *needs_root_rights)
                 *needs_root_rights = -1;
             else {
                 fprintf(stderr,
-                    "Invalid value '%s' for 'needs_root_rights' at %s line %d\n",
-                    value, CONFIG_FILE, line);
+                    "%s: Invalid value '%s' for 'needs_root_rights' at %s line %d\n",
+                    progname, value, CONFIG_FILE, line);
                 exit(1);
             }
         }
@@ -136,8 +142,8 @@ static void parse_config(int *allowed, int *needs_root_rights)
             /* Backward compatibility with older Debian Xwrapper, ignore */
         }
         else {
-            fprintf(stderr, "Invalid key '%s' at %s line %d\n", key,
-                    CONFIG_FILE, line);
+            fprintf(stderr, "%s: Invalid key '%s' at %s line %d\n", key,
+                progname, CONFIG_FILE, line);
             exit(1);
         }
     }
@@ -155,6 +161,8 @@ int main(int argc, char *argv[])
     int allowed = CONSOLE_ONLY;
     int needs_root_rights = -1;
 
+    progname = argv[0];
+
     parse_config(&allowed, &needs_root_rights);
 
     /* For non root users check if they are allowed to run the X server */
@@ -207,11 +215,13 @@ int main(int argc, char *argv[])
         uid_t realuid = getuid();
 
         if (setresgid(-1, realgid, realgid) != 0) {
-            perror("Could not drop setgid privileges");
+            fprintf(stderr, "%s: Could not drop setgid privileges: %s\n",
+                progname, strerror(errno));
             exit(1);
         }
         if (setresuid(-1, realuid, realuid) != 0) {
-            perror("Could not drop setuid privileges");
+            fprintf(stderr, "%s: Could not drop setuid privileges: %s\n",
+                progname, strerror(errno));
             exit(1);
         }
     }
@@ -220,12 +230,14 @@ int main(int argc, char *argv[])
 
     /* Check if the server is executable by our real uid */
     if (access(buf, X_OK) != 0) {
-        perror("Missing execute permissions for " SUID_WRAPPER_DIR "Xorg.bin");
+        fprintf(stderr, "%s: Missing execute permissions for %s/Xorg.bin: %s\n",
+            progname, SUID_WRAPPER_DIR, strerror(errno));
         exit(1);
     }
 
     argv[0] = buf;
     (void) execv(argv[0], argv);
-    perror("Failed to execute " SUID_WRAPPER_DIR "/Xorg.bin");
+    fprintf(stderr, "%s: Failed to execute %s/Xorg.bin: %s\n",
+        progname, SUID_WRAPPER_DIR, strerror(errno));
     exit(1);
 }
-- 
1.9.1.662.g3e70902



More information about the xorg-devel mailing list