From 06e86cf804392b5adfcb0dee3b3636d9d11ac785 Mon Sep 17 00:00:00 2001 From: Dengfeng Liu Date: Wed, 12 Jun 2024 17:49:54 +0800 Subject: [PATCH] feat: add show wildcard domain info Signed-off-by: Dengfeng Liu --- src/wd_util.c | 32 ++++++++++++++++++++++++++++++++ src/wd_util.h | 2 ++ src/wdctl_thread.c | 9 ++++++++- 3 files changed, 42 insertions(+), 1 deletion(-) diff --git a/src/wd_util.c b/src/wd_util.c index 97b0f424f..5fbbef411 100644 --- a/src/wd_util.c +++ b/src/wd_util.c @@ -643,6 +643,38 @@ get_trusted_domains_text(void) return pstr_to_string(pstr); } +char * +get_trusted_pan_domains_text(void) +{ + pstr_t *pstr = pstr_new(); + s_config *config = config_get_config(); + t_domain_trusted *domain_trusted = NULL; + + pstr_cat(pstr, "\nTrusted wildcard domains:\n"); + + LOCK_DOMAIN(); + + for (domain_trusted = config->pan_domains_trusted; domain_trusted != NULL; domain_trusted = domain_trusted->next) { + pstr_append_sprintf(pstr, " %s ", domain_trusted->domain); + t_ip_trusted *ip_trusted = domain_trusted->ips_trusted; + if(ip_trusted != NULL) { + pstr_cat(pstr, "with ip:\n"); + for (; ip_trusted != NULL; ip_trusted = ip_trusted->next) { + // convert uip to string + char ip[INET_ADDRSTRLEN] = {0}; + inet_ntop(AF_INET, &ip_trusted->uip, ip, INET_ADDRSTRLEN); + pstr_append_sprintf(pstr, " %s\n", ip); + } + } else { + pstr_cat(pstr, "\n"); + } + } + + UNLOCK_DOMAIN(); + + return pstr_to_string(pstr); +} + char * mqtt_get_serialize_maclist(int which) { diff --git a/src/wd_util.h b/src/wd_util.h index 8532cfecd..ee7347fd3 100644 --- a/src/wd_util.h +++ b/src/wd_util.h @@ -104,6 +104,8 @@ char *mqtt_get_trusted_iplist_text(void); char *get_trusted_domains_text(void); +char *get_trusted_pan_domains_text(void); + char *get_untrusted_maclist_text(void); char *get_trusted_maclist_text(void); diff --git a/src/wdctl_thread.c b/src/wdctl_thread.c index 3615d6e2b..7e3098352 100644 --- a/src/wdctl_thread.c +++ b/src/wdctl_thread.c @@ -326,7 +326,14 @@ show_trusted_pdomains() static void wdctl_show_trusted_pan_domains(struct bufferevent *fd) { - bufferevent_write(fd, "Yes", 3); + char *status = get_trusted_pan_domains_text(); + if (status) { + size_t len = strlen(status); + bufferevent_write(fd, status, len); /* XXX Not handling error because we'd just print the same log line. */ + free(status); + } else + bufferevent_write(fd, "No", 2); + } char *