diff options
author | Sergey Poznyakoff <gray@gnu.org.ua> | 2009-11-24 21:19:56 +0200 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org.ua> | 2009-11-24 21:19:56 +0200 |
commit | 534098c3d35f36ab9d333fb0ee800c7ffaf0dcbd (patch) | |
tree | 5e8ed3f413000e73f8ff00286e1615f2408e9c37 /src/progman.c | |
parent | a7779d56bb758157e122a420a56f2d7b4475e554 (diff) | |
download | pies-534098c3d35f36ab9d333fb0ee800c7ffaf0dcbd.tar.gz pies-534098c3d35f36ab9d333fb0ee800c7ffaf0dcbd.tar.bz2 |
Implement inetd builtin services.
* src/inetd-bi.c: New file.
* src/Makefile.am (pies_SOURCES): Add inetd-bi.c.
* src/pies.h (struct component): New member `builtin'.
(qotdfile): New extern.
(inetd_builtin): New struct.
(inetd_builtin_lookup): New proto.
* src/progman.c (prog_start): Handle internal
services.
* src/inetd.c (inetd_conf_file): Handle internal
services.
* src/pies.c (qotdfile): New global.
(pies_keywords): New keyword "qotd-file".
Diffstat (limited to 'src/progman.c')
-rw-r--r-- | src/progman.c | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/src/progman.c b/src/progman.c index f0cc4c9..35fc876 100644 --- a/src/progman.c +++ b/src/progman.c @@ -754,7 +754,13 @@ prog_start (struct prog *prog) logmsg (LOG_ERR, _("%s: cannot remove file `%s': %s"), prog->tag, prog->v.p.comp->rmfile, strerror (errno)); } - + + if (prog->v.p.comp->builtin && prog->v.p.comp->builtin->single_process) + { + prog->v.p.comp->builtin->fun (prog->v.p.socket); + return; + } + redir[RETR_OUT] = open_redirector (prog, RETR_OUT); redir[RETR_ERR] = open_redirector (prog, RETR_ERR); @@ -789,6 +795,14 @@ prog_start (struct prog *prog) prog->v.p.comp->limits ? prog->v.p.comp->limits : pies_limits); + if (prog->v.p.comp->builtin) + { + mf_proctitle_format ("inetd %s", + prog->v.p.comp->builtin->service); + prog->v.p.comp->builtin->fun (prog->v.p.socket); + _exit (0); + } + if (debug_level >= 1) { int i; @@ -843,13 +857,13 @@ prog_start (struct prog *prog) if (prog->v.p.comp->mode == pies_comp_pass_fd) FD_SET (prog->v.p.socket, &fdset); close_fds (&fdset); - + execvp (prog->v.p.comp->program ? prog->v.p.comp->program : prog->v.p.comp->argv[0], prog->v.p.comp->argv); openlog (log_tag, LOG_PID, prog->v.p.comp->facility); syslog (LOG_CRIT, _("cannot start `%s': %s"), prog->tag, - strerror (errno)); + strerror (errno)); _exit (EX_SOFTWARE); case -1: @@ -1339,7 +1353,7 @@ prog_start_prerequisites (struct prog *prog) if (!prog->prereq) return 0; /* Ok to startup */ - debug (1, ("Starting prerequisites of %s", prog->tag)); + debug (1, ("starting prerequisites of %s", prog->tag)); ret = 0; for (i = 0; prog->prereq[i]; i++) { |