]> source.dussan.org Git - tigervnc.git/commitdiff
Fix logging in daemonized tl-session
authorPierre Ossman <ossman@cendio.se>
Thu, 11 Mar 2021 09:00:05 +0000 (10:00 +0100)
committerPierre Ossman <ossman@cendio.se>
Thu, 11 Mar 2021 09:00:05 +0000 (10:00 +0100)
stderr has been redirected to /dev/null so all logging needs to go to
syslog.

unix/vncserver/vncsession.c

index 956a8f4ba2ff707b57b56d9453033a7fbca68404..784d5daeb30bb5054711c1bb72c631d416b5f5eb 100644 (file)
@@ -102,6 +102,12 @@ begin_daemon(void)
     if (pid != 0)
         _exit(0);
 
+    /* A safe working directory */
+    if (chdir("/") < 0) {
+        perror("chdir");
+        return -1;
+    }
+
     /* Send all stdio to /dev/null */
     devnull = open("/dev/null", O_RDWR);
     if (devnull < 0) {
@@ -117,12 +123,6 @@ begin_daemon(void)
     if (devnull > 2)
         close(devnull);
 
-    /* A safe working directory */
-    if (chdir("/") < 0) {
-        perror("chdir");
-        return -1;
-    }
-
     return 0;
 }
 
@@ -318,19 +318,19 @@ switch_user(const char *username, uid_t uid, gid_t gid)
 {
     // We must change group stuff first, because only root can do that.
     if (setgid(gid) < 0) {
-        perror(": setgid");
+        syslog(LOG_CRIT, "setgid: %s", strerror(errno));
         _exit(EX_OSERR);
     }
 
     // Supplementary groups.
     if (initgroups(username, gid) < 0) {
-        perror("initgroups");
+        syslog(LOG_CRIT, "initgroups: %s", strerror(errno));
         _exit(EX_OSERR);
     }
 
     // Set euid, ruid and suid
     if (setuid(uid) < 0) {
-        perror("setuid");
+        syslog(LOG_CRIT, "setuid: %s", strerror(errno));
         _exit(EX_OSERR);
     }
 }
@@ -344,11 +344,11 @@ redir_stdio(const char *homedir, const char *display)
 
     fd = open("/dev/null", O_RDONLY);
     if (fd == -1) {
-        perror("open");
+        syslog(LOG_CRIT, "Failure redirecting stdin: open: %s", strerror(errno));
         _exit(EX_OSERR);
     }
     if (dup2(fd, 0) == -1) {
-        perror("dup2");
+        syslog(LOG_CRIT, "Failure redirecting stdin: dup2: %s", strerror(errno));
         _exit(EX_OSERR);
     }
     close(fd);
@@ -356,13 +356,13 @@ redir_stdio(const char *homedir, const char *display)
     snprintf(logfile, sizeof(logfile), "%s/.vnc", homedir);
     if (mkdir(logfile, 0755) == -1) {
         if (errno != EEXIST) {
-            perror("mkdir");
+            syslog(LOG_CRIT, "Failure creating \"%s\": %s", logfile, strerror(errno));
             _exit(EX_OSERR);
         }
     }
 
     if (gethostname(hostname, sizeof(hostname)) == -1) {
-        perror("gethostname");
+        syslog(LOG_CRIT, "gethostname: %s", strerror(errno));
         _exit(EX_OSERR);
     }
 
@@ -370,11 +370,11 @@ redir_stdio(const char *homedir, const char *display)
              homedir, hostname, display);
     fd = open(logfile, O_CREAT | O_WRONLY | O_TRUNC, 0644);
     if (fd == -1) {
-        perror("open");
+        syslog(LOG_CRIT, "Failure creating log file \"%s\": %s", logfile, strerror(errno));
         _exit(EX_OSERR);
     }
     if ((dup2(fd, 1) == -1) || (dup2(fd, 2) == -1)) {
-        perror("dup2");
+        syslog(LOG_CRIT, "Failure redirecting stdout or stderr: %s", strerror(errno));
         _exit(EX_OSERR);
     }
     close(fd);
@@ -388,7 +388,7 @@ close_fds(void)
 
     dir = opendir("/proc/self/fd");
     if (dir == NULL) {
-        perror("opendir");
+        syslog(LOG_CRIT, "opendir: %s", strerror(errno));
         _exit(EX_OSERR);
     }
 
@@ -468,7 +468,7 @@ run_script(const char *username, const char *display, char **envp)
     execvp(child_argv[0], (char*const*)child_argv);
 
     // execvp failed
-    perror("execvp");
+    syslog(LOG_CRIT, "execvp: %s", strerror(errno));
 
     _exit(EX_OSERR);
 }