From c6a9fa3b98b99a5d501b4c85fe08f8b854e482be Mon Sep 17 00:00:00 2001 From: Joachim Nilsson Date: Sun, 21 Jun 2015 19:06:07 +0200 Subject: [PATCH] initctl: Order inetd filters same as in .conf file. Signed-off-by: Joachim Nilsson --- inetd.c | 15 ++++++++------- inetd.h | 4 ++-- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/inetd.c b/inetd.c index f503b7b6..0518bc77 100644 --- a/inetd.c +++ b/inetd.c @@ -258,7 +258,7 @@ static inetd_filter_t *find_filter(inetd_t *inetd, char *ifname) if (!ifname) ifname = "*"; - LIST_FOREACH(filter, &inetd->filters, link) { + TAILQ_FOREACH(filter, &inetd->filters, link) { _d("Checking filters for %s: '%s' vs '%s' (exact match) ...", inetd->name, filter->ifname, ifname); @@ -279,7 +279,7 @@ inetd_filter_t *inetd_filter_match(inetd_t *inetd, char *ifname) if (filter) return filter; - LIST_FOREACH(filter, &inetd->filters, link) { + TAILQ_FOREACH(filter, &inetd->filters, link) { _d("Checking filters for %s: '%s' vs '%s' (any match) ...", inetd->name, filter->ifname, ifname); @@ -316,7 +316,7 @@ int inetd_allow(inetd_t *inetd, char *ifname) filter->deny = 0; strlcpy(filter->ifname, ifname, sizeof(filter->ifname)); - LIST_INSERT_HEAD(&inetd->filters, filter, link); + TAILQ_INSERT_TAIL(&inetd->filters, filter, link); return 0; } @@ -347,7 +347,7 @@ int inetd_deny(inetd_t *inetd, char *ifname) filter->deny = 1; strlcpy(filter->ifname, ifname, sizeof(filter->ifname)); - LIST_INSERT_HEAD(&inetd->filters, filter, link); + TAILQ_INSERT_TAIL(&inetd->filters, filter, link); return 0; } @@ -407,7 +407,7 @@ int inetd_filter_str(inetd_t *inetd, char *str, size_t len) snprintf(str, len, "%s allow %s ", inetd->name, inetd->type == SOCK_DGRAM ? "UDP" : "TCP"); - LIST_FOREACH(filter, &inetd->filters, link) { + TAILQ_FOREACH(filter, &inetd->filters, link) { char ifname[IFNAMSIZ]; if (filter->deny) @@ -425,7 +425,7 @@ int inetd_filter_str(inetd_t *inetd, char *str, size_t len) } prev = 0; - LIST_FOREACH(filter, &inetd->filters, link) { + TAILQ_FOREACH(filter, &inetd->filters, link) { char ifname[IFNAMSIZ]; if (!filter->deny) @@ -490,6 +490,7 @@ int inetd_new(inetd_t *inetd, char *name, char *service, char *proto, int forkin if (!name) name = service; strlcpy(inetd->name, name, sizeof(inetd->name)); + TAILQ_INIT(&inetd->filters); /* Naïve mapping tcp->stream, udp->dgram, other->dgram */ if (!strcasecmp(sv->s_proto, "tcp")) @@ -512,7 +513,7 @@ int inetd_del(inetd_t *inetd) { inetd_filter_t *filter, *tmp; - LIST_FOREACH_SAFE(filter, &inetd->filters, link, tmp) + TAILQ_FOREACH_SAFE(filter, &inetd->filters, link, tmp) free(filter); return 0; diff --git a/inetd.h b/inetd.h index e2ad8c8a..9cddd523 100644 --- a/inetd.h +++ b/inetd.h @@ -32,7 +32,7 @@ typedef struct inetd_filter { - LIST_ENTRY(inetd_filter) link; + TAILQ_ENTRY(inetd_filter) link; int deny; /* 0:allow, 1:deny */ char ifname[IFNAMSIZ]; /* E.g., eth0 */ } inetd_filter_t; @@ -49,7 +49,7 @@ typedef struct { char name[10]; int (*cmd)(int type); /* internal inetd service, like 'time' */ - LIST_HEAD(, inetd_filter) filters; + TAILQ_HEAD(, inetd_filter) filters; } inetd_t; int inetd_dgram_peek (int sd, char *ifname);