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 | |
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.
-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,3 +1,4 @@ | |||
1 | /ABOUT-NLS~ | ||
1 | *.a | 2 | *.a |
2 | *.la | 3 | *.la |
3 | *.lo | 4 | *.lo |
diff --git a/configure.ac b/configure.ac index 3b34059..d6d4e4f 100644 --- a/configure.ac +++ b/configure.ac | |||
@@ -129,8 +129,11 @@ AH_BOTTOM([ | |||
129 | # endif | 129 | # endif |
130 | ]) | 130 | ]) |
131 | 131 | ||
132 | AC_SUBST([DEFAULT_CONTROL_URL],[unix:///tmp/%s.ctl]) | 132 | AC_SUBST([DEFAULT_PIES_CONTROL_URL],['unix:///tmp/$${PIES_INSTANCE}.ctl']) |
133 | AC_ARG_VAR([DEFAULT_CONTROL_URL], | 133 | AC_ARG_VAR([DEFAULT_PIES_CONTROL_URL], |
134 | [URL of the default control socket]) | ||
135 | AC_SUBST([DEFAULT_INIT_CONTROL_URL],['unix:///dev/init.ctl']) | ||
136 | AC_ARG_VAR([DEFAULT_INIT_CONTROL_URL], | ||
134 | [URL of the default control socket]) | 137 | [URL of the default control socket]) |
135 | 138 | ||
136 | IMPRIMATUR_INIT | 139 | IMPRIMATUR_INIT |
diff --git a/lib/libpies.h b/lib/libpies.h index b04182e..1c83b8e 100644 --- a/lib/libpies.h +++ b/lib/libpies.h | |||
@@ -71,6 +71,7 @@ struct pies_url | |||
71 | char **argv; | 71 | char **argv; |
72 | }; | 72 | }; |
73 | 73 | ||
74 | int pies_basic_url_create (struct pies_url **purl, const char *str); | ||
74 | int pies_url_create (struct pies_url **purl, const char *str); | 75 | int pies_url_create (struct pies_url **purl, const char *str); |
75 | void pies_url_destroy (struct pies_url **purl); | 76 | void pies_url_destroy (struct pies_url **purl); |
76 | const char *pies_url_get_arg (struct pies_url *url, const char *argname); | 77 | const char *pies_url_get_arg (struct pies_url *url, const char *argname); |
@@ -325,7 +325,7 @@ pies_url_copy (struct pies_url **purl, struct pies_url *src) | |||
325 | } | 325 | } |
326 | 326 | ||
327 | int | 327 | int |
328 | pies_url_create (struct pies_url **purl, const char *str) | 328 | pies_basic_url_create (struct pies_url **purl, const char *str) |
329 | { | 329 | { |
330 | int rc; | 330 | int rc; |
331 | struct pies_url *url; | 331 | struct pies_url *url; |
@@ -345,6 +345,23 @@ pies_url_create (struct pies_url **purl, const char *str) | |||
345 | return rc; | 345 | return rc; |
346 | } | 346 | } |
347 | 347 | ||
348 | extern char **environ; | ||
349 | |||
350 | int | ||
351 | pies_url_create (struct pies_url **purl, const char *str) | ||
352 | { | ||
353 | struct wordsplit ws; | ||
354 | int rc; | ||
355 | |||
356 | ws.ws_env = (const char**) environ; | ||
357 | if (wordsplit (str, &ws, | ||
358 | WRDSF_NOCMD | WRDSF_QUOTE | WRDSF_NOSPLIT | WRDSF_ENV)) | ||
359 | return -1; | ||
360 | rc = pies_basic_url_create (purl, ws.ws_wordv[0]); | ||
361 | wordsplit_free (&ws); | ||
362 | return rc; | ||
363 | } | ||
364 | |||
348 | const char * | 365 | const char * |
349 | pies_url_get_arg (struct pies_url *url, const char *argname) | 366 | pies_url_get_arg (struct pies_url *url, const char *argname) |
350 | { | 367 | { |
diff --git a/po/.gitignore b/po/.gitignore index d00dd8d..b45a955 100644 --- a/po/.gitignore +++ b/po/.gitignore | |||
@@ -1,3 +1,4 @@ | |||
1 | /Rules-quot~ | ||
1 | /Makevars.template~ | 2 | /Makevars.template~ |
2 | /Makefile.in.in~ | 3 | /Makefile.in.in~ |
3 | *.gmo | 4 | *.gmo |
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=\ | |||
87 | -DDEFAULT_VERSION_INCLUDE_DIR=\"$(incdir)\"\ | 87 | -DDEFAULT_VERSION_INCLUDE_DIR=\"$(incdir)\"\ |
88 | -DDEFAULT_INCLUDE_DIR=\"$(pkgdatadir)/include\"\ | 88 | -DDEFAULT_INCLUDE_DIR=\"$(pkgdatadir)/include\"\ |
89 | -DDEFAULT_STATE_DIR=\"$(pkgstatedir)\"\ | 89 | -DDEFAULT_STATE_DIR=\"$(pkgstatedir)\"\ |
90 | -DDEFAULT_CONTROL_URL=\"$(DEFAULT_CONTROL_URL)\" | 90 | -DDEFAULT_PIES_CONTROL_URL='"$(DEFAULT_PIES_CONTROL_URL)"'\ |
91 | -DDEFAULT_INIT_CONTROL_URL='"$(DEFAULT_INIT_CONTROL_URL)"' | ||
91 | 92 | ||
92 | AM_YFLAGS=-dvt -pmeta1 | 93 | AM_YFLAGS=-dvt -pmeta1 |
93 | AM_LFLAGS=-dvp -Pmeta1 -olex.yy.c | 94 | AM_LFLAGS=-dvp -Pmeta1 -olex.yy.c |
@@ -1233,45 +1233,29 @@ ctl_accept (int socket, void *data) | |||
1233 | return 0; | 1233 | return 0; |
1234 | } | 1234 | } |
1235 | 1235 | ||
1236 | char const * | 1236 | int |
1237 | pies_control_url (void) | 1237 | ctl_open (void) |
1238 | { | ||
1239 | if (!control.url) | ||
1240 | { | ||
1241 | char *str = xasprintf (DEFAULT_CONTROL_URL, instance); | ||
1242 | if (pies_url_create (&control.url, str)) | ||
1243 | { | ||
1244 | logmsg (LOG_CRIT, _("%s: cannot create URL: %s"), | ||
1245 | str, strerror (errno)); | ||
1246 | exit (EX_OSERR); | ||
1247 | } | ||
1248 | free (str); | ||
1249 | } | ||
1250 | return control.url->string; | ||
1251 | } | ||
1252 | |||
1253 | void | ||
1254 | ctl_open () | ||
1255 | { | 1238 | { |
1256 | int fd; | 1239 | int fd; |
1257 | 1240 | ||
1258 | pies_control_url (); | ||
1259 | fd = create_socket (control.url, SOCK_STREAM, NULL, 077); | 1241 | fd = create_socket (control.url, SOCK_STREAM, NULL, 077); |
1260 | if (fd == -1) | 1242 | if (fd == -1) |
1261 | { | 1243 | { |
1262 | logmsg (LOG_CRIT, _("can't create control socket %s"), | 1244 | logmsg (LOG_CRIT, _("can't create control socket %s"), |
1263 | control.url->string); | 1245 | control.url->string); |
1264 | exit (EX_UNAVAILABLE); | 1246 | return -1; |
1265 | } | 1247 | } |
1266 | 1248 | ||
1267 | if (listen (fd, 8)) | 1249 | if (listen (fd, 8)) |
1268 | { | 1250 | { |
1269 | logmsg (LOG_CRIT, _("can't listen on control socket %s: %s"), | 1251 | logmsg (LOG_CRIT, _("can't listen on control socket %s: %s"), |
1270 | control.url->string, strerror (errno)); | 1252 | control.url->string, strerror (errno)); |
1271 | exit (EX_UNAVAILABLE); | 1253 | return -1; |
1272 | } | 1254 | } |
1273 | 1255 | ||
1274 | register_socket (fd, ctl_accept, NULL, NULL, NULL); | 1256 | register_socket (fd, ctl_accept, NULL, NULL, NULL); |
1257 | |||
1258 | return 0; | ||
1275 | } | 1259 | } |
1276 | 1260 | ||
1277 | static void | 1261 | static void |
@@ -58,6 +58,11 @@ char *mailer_command_line = "/usr/sbin/sendmail -oi -t"; | |||
58 | int mailer_argc; | 58 | int mailer_argc; |
59 | char **mailer_argv; | 59 | char **mailer_argv; |
60 | 60 | ||
61 | char *default_control_url[2] = { | ||
62 | DEFAULT_PIES_CONTROL_URL, | ||
63 | DEFAULT_INIT_CONTROL_URL | ||
64 | }; | ||
65 | |||
61 | struct config_file | 66 | struct config_file |
62 | { | 67 | { |
63 | enum config_syntax syntax; | 68 | enum config_syntax syntax; |
@@ -1750,6 +1755,18 @@ config_parse (char const *name) | |||
1750 | if (grecs_tree_process (tree, pies_keywords)) | 1755 | if (grecs_tree_process (tree, pies_keywords)) |
1751 | config_error (); | 1756 | config_error (); |
1752 | 1757 | ||
1758 | if (!control.url) | ||
1759 | { | ||
1760 | char const *str = default_control_url[init_process]; | ||
1761 | if (pies_url_create (&control.url, str)) | ||
1762 | { | ||
1763 | logmsg (LOG_CRIT, _("%s: cannot create control URL: %s"), | ||
1764 | str, strerror (errno)); | ||
1765 | if (!init_process) | ||
1766 | exit (EX_OSERR); | ||
1767 | } | ||
1768 | } | ||
1769 | |||
1753 | grecs_tree_free (tree); | 1770 | grecs_tree_free (tree); |
1754 | } | 1771 | } |
1755 | 1772 | ||
@@ -1931,6 +1948,8 @@ pies_check_status (pid_t *ppid) | |||
1931 | return pies_status_running; | 1948 | return pies_status_running; |
1932 | } | 1949 | } |
1933 | 1950 | ||
1951 | #define pies_control_url() control.url->string | ||
1952 | |||
1934 | void | 1953 | void |
1935 | request_restart_components (size_t cc, char **cv) | 1954 | request_restart_components (size_t cc, char **cv) |
1936 | { | 1955 | { |
@@ -2230,7 +2249,7 @@ main (int argc, char **argv) | |||
2230 | else | 2249 | else |
2231 | instance++; | 2250 | instance++; |
2232 | } | 2251 | } |
2233 | 2252 | setenv ("PIES_INSTANCE", instance, 1); | |
2234 | log_tag = instance; | 2253 | log_tag = instance; |
2235 | 2254 | ||
2236 | if (!init_process) | 2255 | if (!init_process) |
@@ -2371,9 +2390,12 @@ main (int argc, char **argv) | |||
2371 | diag_setup (DIAG_TO_SYSLOG); | 2390 | diag_setup (DIAG_TO_SYSLOG); |
2372 | } | 2391 | } |
2373 | 2392 | ||
2374 | if (!init_process) | 2393 | if (init_process) |
2375 | { | ||
2376 | ctl_open (); | 2394 | ctl_open (); |
2395 | else | ||
2396 | { | ||
2397 | if (ctl_open ()) | ||