diff --git a/inetd.c b/inetd.c index a48272da..52671aca 100644 --- a/inetd.c +++ b/inetd.c @@ -351,6 +351,18 @@ inetd_filter_t *inetd_filter_match(inetd_t *inetd, char *ifname) return NULL; } +int inetd_flush(inetd_t *inetd) +{ + inetd_filter_t *filter, *next; + + TAILQ_FOREACH_SAFE(filter, &inetd->filters, link, next) { + TAILQ_REMOVE(&inetd->filters, filter, link); + free(filter); + } + + return 0; +} + /* Poor man's tcpwrappers filtering */ int inetd_allow(inetd_t *inetd, char *ifname) { diff --git a/inetd.h b/inetd.h index 83073cfd..1fdf1edd 100644 --- a/inetd.h +++ b/inetd.h @@ -64,6 +64,7 @@ int inetd_del (inetd_t *inetd); int inetd_match (inetd_t *inetd, char *service, char *proto); int inetd_filter_str (inetd_t *inetd, char *str, size_t len); +int inetd_flush (inetd_t *inetd); int inetd_allow (inetd_t *inetd, char *ifname); int inetd_deny (inetd_t *inetd, char *ifname); int inetd_is_allowed (inetd_t *inetd, char *ifname); diff --git a/service.c b/service.c index 4454cfc3..36482a77 100644 --- a/service.c +++ b/service.c @@ -671,6 +671,8 @@ int service_register(int type, char *line, time_t mtime, char *username) } inetd_setup: + inetd_flush(&svc->inetd); + if (!ifaces) { _d("No specific iface listed for %s, allowing ANY.", service); inetd_allow(&svc->inetd, NULL);