diff options
author | Sergey Poznyakoff <gray@gnu.org.ua> | 2016-01-08 11:29:13 +0200 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org.ua> | 2016-01-08 11:29:13 +0200 |
commit | 3325fed2895f079486b88c65409c73153fec306f (patch) | |
tree | 65165fde1e48346892cd0c0dfd7f7a4980ba1665 /src | |
parent | 46b2745b25176c14c42bcc9612b290c310929aa0 (diff) | |
download | pies-3325fed2895f079486b88c65409c73153fec306f.tar.gz pies-3325fed2895f079486b88c65409c73153fec306f.tar.bz2 |
Enable control socket when run as init process.
* configure.ac (DEFAULT_CONTROL_URL): Rename to
DEFAULT_PIES_CONTROL_URL. Change default value.
(DEFAULT_INIT_CONTROL_URL): New subst variable.
* lib/libpies.h (pies_basic_url_create): New prototype.
* lib/url.c (pies_basic_url_create): New function (renamed
from pies_url_create).
(pies_url_create): Expand variable references in the input string.
* src/Makefile.am (AM_CPPFLAGS): Pass DEFAULT_INIT_CONTROL_URL
* src/ctl.c (pies_control_url)
(ctl_open): Don't exit on errors, return -1 instead.
* src/pies.c (default_control_url): New variable.
(config_parse): Create default socket url.
(pies_control_url): New macro
(main): Set environment variable PIES_INSTANCE.
Try to open control socket in init process mode as well.
* src/pies.h (default_control_url): New extern.
(ctl_open): Change prototype.
(pies_control_url): Remove.
* src/piesctl-cl.opt (parse_options): Set environment variable
PIES_INSTANCE.
* src/piesctl.c (parse_config): Use pies_url_create and
DEFAULT_PIES_CONTROL_URL when falling back to the default socket.
Diffstat (limited to 'src')
-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 |
6 files changed, 38 insertions, 37 deletions
diff --git a/src/Makefile.am b/src/Makefile.am index 9fb29d2..01149c6 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -87,7 +87,8 @@ AM_CPPFLAGS=\ -DDEFAULT_VERSION_INCLUDE_DIR=\"$(incdir)\"\ -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 AM_LFLAGS=-dvp -Pmeta1 -olex.yy.c @@ -1233,45 +1233,29 @@ ctl_accept (int socket, void *data) return 0; } -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) { logmsg (LOG_CRIT, _("can't create control socket %s"), control.url->string); - exit (EX_UNAVAILABLE); + return -1; } if (listen (fd, 8)) { 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; } static void @@ -58,6 +58,11 @@ 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 { enum config_syntax syntax; @@ -1750,6 +1755,18 @@ 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); } @@ -1931,6 +1948,8 @@ pies_check_status (pid_t *ppid) return pies_status_running; } +#define pies_control_url() control.url->string + void request_restart_components (size_t cc, char **cv) { @@ -2230,7 +2249,7 @@ main (int argc, char **argv) else instance++; } - + setenv ("PIES_INSTANCE", instance, 1); log_tag = instance; if (!init_process) @@ -2371,9 +2390,12 @@ main (int argc, char **argv) diag_setup (DIAG_TO_SYSLOG); } - if (!init_process) - { + if (init_process) ctl_open (); + else + { + if (ctl_open ()) + exit (EX_UNAVAILABLE); create_pidfile (pidfile); } @@ -292,6 +292,7 @@ extern int dfl_level; extern size_t pies_master_argc; extern char **pies_master_argv; +extern char *default_control_url[2]; enum config_syntax { @@ -549,5 +550,4 @@ 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 @@ -95,6 +95,7 @@ void 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 @@ -188,17 +188,10 @@ parse_config () url = default_url; 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); } } |