]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Some platforms clear /var/run at boot, which makes connecting a remote console.....
authorTilghman Lesher <tilghman@meg.abyt.es>
Thu, 25 Feb 2010 21:21:05 +0000 (21:21 +0000)
committerTilghman Lesher <tilghman@meg.abyt.es>
Thu, 25 Feb 2010 21:21:05 +0000 (21:21 +0000)
Previously, we only created the default /var/run/asterisk directory at install
time.  While we could create it in the init script, that would not work for
those who start asterisk manually from the command line.  So the safest thing
to do is to create it as part of the Asterisk boot process.  This also changes
the ownership of the directory, because the pid and ctl files are created after
we setuid/setgid.

(closes issue #16802)
 Reported by: Brian
 Patches:
       20100224__issue16802.diff.txt uploaded by tilghman (license 14)
 Tested by: tzafrir

git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@248859 65c4cc65-6c06-0410-ace0-fbb531ad65f3

main/asterisk.c

index dc763388df41d99dea0eb2adb3fb389c159cfdd1..5730bc6fe4f85bf7dbd9a1ac1620466a86460bf5 100644 (file)
@@ -2868,6 +2868,12 @@ int main(int argc, char *argv[])
        if ((!runuser) && !ast_strlen_zero(ast_config_AST_RUN_USER))
                runuser = ast_config_AST_RUN_USER;
 
+       /* It's common on some platforms to clear /var/run at boot.  Create the
+        * socket file directory before we drop privileges. */
+       if (mkdir(ast_config_AST_RUN_DIR, 0755) && errno != EEXIST) {
+               ast_log(LOG_WARNING, "Unable to create socket file directory.  Remote consoles will not be able to connect! (%s)\n", strerror(x));
+       }
+
 #ifndef __CYGWIN__
 
        if (isroot) 
@@ -2880,6 +2886,9 @@ int main(int argc, char *argv[])
                        ast_log(LOG_WARNING, "No such group '%s'!\n", rungroup);
                        exit(1);
                }
+               if (chown(ast_config_AST_RUN_DIR, -1, gr->gr_gid)) {
+                       ast_log(LOG_WARNING, "Unable to chgrp run directory to %d (%s)\n", (int) gr->gr_gid, rungroup);
+               }
                if (setgid(gr->gr_gid)) {
                        ast_log(LOG_WARNING, "Unable to setgid to %d (%s)\n", (int)gr->gr_gid, rungroup);
                        exit(1);
@@ -2902,6 +2911,9 @@ int main(int argc, char *argv[])
                        ast_log(LOG_WARNING, "No such user '%s'!\n", runuser);
                        exit(1);
                }
+               if (chown(ast_config_AST_RUN_DIR, pw->pw_uid, -1)) {
+                       ast_log(LOG_WARNING, "Unable to chown run directory to %d (%s)\n", (int) pw->pw_uid, runuser);
+               }
 #ifdef HAVE_CAP
                if (prctl(PR_SET_KEEPCAPS, 1, 0, 0, 0)) {
                        ast_log(LOG_WARNING, "Unable to keep capabilities.\n");