diff options
Diffstat (limited to 'src/inetd.c')
-rw-r--r-- | src/inetd.c | 66 |
1 files changed, 44 insertions, 22 deletions
diff --git a/src/inetd.c b/src/inetd.c index f356512..a43bdf2 100644 --- a/src/inetd.c +++ b/src/inetd.c @@ -39,6 +39,43 @@ listel_dispose(const void *el) #define TCPMUX_PREFIX_LEN (sizeof(TCPMUX_PREFIX_STR)-1) static int +tcpmux_service (const char *service, char **psrv, int *pflag) +{ + if (strncmp (service, TCPMUX_PREFIX_STR, TCPMUX_PREFIX_LEN) == 0) + { + service += TCPMUX_PREFIX_LEN; + if (*service == '+') + { + *pflag |= CF_TCPMUXPLUS; + service++; + } + else + *pflag |= CF_TCPMUX; + *psrv = (char *) service; + return 1; + } + return 0; +} + +static char * +mktag (const char *address, const char *service) +{ + char *str; + + if (address) + { + str = xmalloc (strlen (address) + 1 + strlen (service) + 1); + strcpy (str, address); + strcat (str, ":"); + strcat (str, service); + } + else + str = xstrdup (service); + return str; +} + + +static int inetd_conf_file (const char *file) { FILE *fp; @@ -141,17 +178,8 @@ inetd_conf_file (const char *file) tag = service; /* Handle eventual "tcpmux/" */ - if (strncmp (service, TCPMUX_PREFIX_STR, TCPMUX_PREFIX_LEN) == 0) + if (tcpmux_service (service, &service, &flags)) { - service += TCPMUX_PREFIX_LEN; - if (*service == '+') - { - flags |= CF_TCPMUXPLUS; - service++; - } - else - flags |= CF_TCPMUX; - if (strncmp (ws.ws_wordv[IFLD_PROTOCOL], "tcp", 3)) { logmsg (LOG_ERR, "%s:%lu: %s", @@ -224,7 +252,7 @@ inetd_conf_file (const char *file) if (!builtin) { logmsg (LOG_ERR, "%s:%lu: %s", - file, line_no, _("unknown built-in")); + file, line_no, _("unknown internal service")); continue; } } @@ -232,17 +260,9 @@ inetd_conf_file (const char *file) builtin = NULL; /* Create the component */ - if (address) - { - str = xmalloc (strlen (address) + 1 + strlen (tag) + 1); - strcpy (str, address); - strcat (str, ":"); - strcat (str, tag); - comp = component_create (str); - free (str); - } - else - comp = component_create (tag); + str = mktag (address, tag); + comp = component_create (str); + free (str); comp->mode = pies_comp_inetd; comp->socket_type = socket_type; @@ -255,6 +275,8 @@ inetd_conf_file (const char *file) } else comp->flags = flags; + if (ISCF_TCPMUX (comp->flags)) + comp->tcpmux = mktag (address, "tcpmux"); comp->service = xstrdup (service); comp->privs.user = xstrdup (user); /* FIXME: memory leak */ if (group) |