From 096a41e4403b6ef9bf59677e4a6e54ba7d7eb665 Mon Sep 17 00:00:00 2001 From: Tilghman Lesher Date: Thu, 25 Feb 2010 21:21:05 +0000 Subject: [PATCH] Some platforms clear /var/run at boot, which makes connecting a remote console... difficult. 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 | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/main/asterisk.c b/main/asterisk.c index dc763388df..5730bc6fe4 100644 --- a/main/asterisk.c +++ b/main/asterisk.c @@ -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"); -- 2.47.2