diff options
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | configure.ac | 7 | ||||
-rw-r--r-- | lib/libpies.h | 1 | ||||
-rw-r--r-- | lib/url.c | 19 | ||||
-rw-r--r-- | po/.gitignore | 1 | ||||
-rw-r--r-- | src/Makefile.am | 3 | ||||
-rw-r--r-- | src/ctl.c | 28 | ||||
-rw-r--r-- | src/pies.c | 28 | ||||
-rw-r--r-- | src/pies.h | 4 | ||||
-rw-r--r-- | src/piesctl-cl.opt | 1 | ||||
-rw-r--r-- | src/piesctl.c | 11 |
11 files changed, 64 insertions, 40 deletions
@@ -1,2 +1,3 @@ +/ABOUT-NLS~ *.a *.la diff --git a/configure.ac b/configure.ac index 3b34059..d6d4e4f 100644 --- a/configure.ac +++ b/configure.ac @@ -130,6 +130,9 @@ AH_BOTTOM([ ]) -AC_SUBST([DEFAULT_CONTROL_URL],[unix:///tmp/%s.ctl]) -AC_ARG_VAR([DEFAULT_CONTROL_URL], +AC_SUBST([DEFAULT_PIES_CONTROL_URL],['unix:///tmp/$${PIES_INSTANCE}.ctl']) +AC_ARG_VAR([DEFAULT_PIES_CONTROL_URL], + [URL of the default control socket]) +AC_SUBST([DEFAULT_INIT_CONTROL_URL],['unix:///dev/init.ctl']) +AC_ARG_VAR([DEFAULT_INIT_CONTROL_URL], [URL of the default control socket]) diff --git a/lib/libpies.h b/lib/libpies.h index b04182e..1c83b8e 100644 --- a/lib/libpies.h +++ b/lib/libpies.h @@ -72,4 +72,5 @@ struct pies_url }; +int pies_basic_url_create (struct pies_url **purl, const char *str); int pies_url_create (struct pies_url **purl, const char *str); void pies_url_destroy (struct pies_url **purl); @@ -326,5 +326,5 @@ pies_url_copy (struct pies_url **purl, struct pies_url *src) int -pies_url_create (struct pies_url **purl, const char *str) +pies_basic_url_create (struct pies_url **purl, const char *str) { int rc; @@ -345,4 +345,21 @@ pies_url_create (struct pies_url **purl, const char *str) return rc; } + +extern char **environ; + +int +pies_url_create (struct pies_url **purl, const char *str) +{ + struct wordsplit ws; + int rc; + + ws.ws_env = (const char**) environ; + if (wordsplit (str, &ws, + WRDSF_NOCMD | WRDSF_QUOTE | WRDSF_NOSPLIT | WRDSF_ENV)) + return -1; + rc = pies_basic_url_create (purl, ws.ws_wordv[0]); + wordsplit_free (&ws); + return rc; +} const char * diff --git a/po/.gitignore b/po/.gitignore index d00dd8d..b45a955 100644 --- a/po/.gitignore +++ b/po/.gitignore @@ -1,2 +1,3 @@ +/Rules-quot~ /Makevars.template~ /Makefile.in.in~ diff --git a/src/Makefile.am b/src/Makefile.am index 9fb29d2..01149c6 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -88,5 +88,6 @@ AM_CPPFLAGS=\ -DDEFAULT_INCLUDE_DIR=\"$(pkgdatadir)/include\"\ -DDEFAULT_STATE_DIR=\"$(pkgstatedir)\"\ - -DDEFAULT_CONTROL_URL=\"$(DEFAULT_CONTROL_URL)\" + -DDEFAULT_PIES_CONTROL_URL='"$(DEFAULT_PIES_CONTROL_URL)"'\ + -DDEFAULT_INIT_CONTROL_URL='"$(DEFAULT_INIT_CONTROL_URL)"' AM_YFLAGS=-dvt -pmeta1 @@ -1234,27 +1234,9 @@ ctl_accept (int socket, void *data) } -char const * -pies_control_url (void) -{ - if (!control.url) - { - char *str = xasprintf (DEFAULT_CONTROL_URL, instance); - if (pies_url_create (&control.url, str)) - { - logmsg (LOG_CRIT, _("%s: cannot create URL: %s"), - str, strerror (errno)); - exit (EX_OSERR); - } - free (str); - } - return control.url->string; -} - -void -ctl_open () +int +ctl_open (void) { int fd; - pies_control_url (); fd = create_socket (control.url, SOCK_STREAM, NULL, 077); if (fd == -1) @@ -1262,5 +1244,5 @@ ctl_open () logmsg (LOG_CRIT, _("can't create control socket %s"), control.url->string); - exit (EX_UNAVAILABLE); + return -1; } @@ -1269,8 +1251,10 @@ ctl_open () logmsg (LOG_CRIT, _("can't listen on control socket %s: %s"), control.url->string, strerror (errno)); - exit (EX_UNAVAILABLE); + return -1; } register_socket (fd, ctl_accept, NULL, NULL, NULL); + + return 0; } @@ -58,4 +58,9 @@ char *mailer_command_line = "/usr/sbin/sendmail -oi -t"; int mailer_argc; char **mailer_argv; + +char *default_control_url[2] = { + DEFAULT_PIES_CONTROL_URL, + DEFAULT_INIT_CONTROL_URL +}; struct config_file @@ -1750,4 +1755,16 @@ config_parse (char const *name) if (grecs_tree_process (tree, pies_keywords)) config_error (); + + if (!control.url) + { + char const *str = default_control_url[init_process]; + if (pies_url_create (&control.url, str)) + { + logmsg (LOG_CRIT, _("%s: cannot create control URL: %s"), + str, strerror (errno)); + if (!init_process) + exit (EX_OSERR); + } + } grecs_tree_free (tree); @@ -1932,4 +1949,6 @@ pies_check_status (pid_t *ppid) } +#define pies_control_url() control.url->string + void request_restart_components (size_t cc, char **cv) @@ -2231,5 +2250,5 @@ main (int argc, char **argv) instance++; } - + setenv ("PIES_INSTANCE", instance, 1); log_tag = instance; @@ -2372,7 +2391,10 @@ main (int argc, char **argv) } - if (!init_process) + if (init_process) + ctl_open (); + else { - ctl_open (); + if (ctl_open ()) + exit (EX_UNAVAILABLE); create_pidfile (pidfile); } @@ -293,4 +293,5 @@ extern int dfl_level; extern size_t pies_master_argc; extern char **pies_master_argv; +extern char *default_control_url[2]; enum config_syntax @@ -550,4 +551,3 @@ struct control extern struct control control; -void ctl_open(void); -char const *pies_control_url (void); +int ctl_open(void); diff --git a/src/piesctl-cl.opt b/src/piesctl-cl.opt index b8e4fc1..b787a5c 100644 --- a/src/piesctl-cl.opt +++ b/src/piesctl-cl.opt @@ -96,4 +96,5 @@ parse_options(int argc, char *argv[], int *index) { GETOPT(argc, argv, *index) + setenv ("PIES_INSTANCE", instance, 1); } diff --git a/src/piesctl.c b/src/piesctl.c index 301e7ac..dba8988 100644 --- a/src/piesctl.c +++ b/src/piesctl.c @@ -189,15 +189,8 @@ parse_config () else { - int rc; - size_t len = 0; - file_name = NULL; - grecs_asprintf (&file_name, &len, DEFAULT_CONTROL_URL, instance); - rc = pies_url_create (&url, file_name); - free (file_name); - - if (rc) + if (pies_url_create (&url, DEFAULT_PIES_CONTROL_URL)) { grecs_error (NULL, 0, _("%s: cannot create URL: %s"), - DEFAULT_CONTROL_URL, strerror (errno)); + DEFAULT_PIES_CONTROL_URL, strerror (errno)); exit (EX_SOFTWARE); } |