From 31abbf39ae7ba4f11d6ea352939a711237e8aef0 Mon Sep 17 00:00:00 2001 From: Chaitanya Godavarthi Date: Wed, 16 Jun 2021 21:56:11 -0400 Subject: [PATCH] wifi-2649 Fix Captive portal vifC vifS mismatch Mismatch in vifC and vifS for captive portal is leading to opennds restarts and memory leakage. Fix by making sure the vifC and vifS are in parity. uci_blob not being freed, fix by making uci_blob as global so that it need not be freed and can be reused instead. Signed-off-by: Chaitanya Godavarthi Cleaning up captive portal code to improve stability and reduce memory leaks Signed-off-by: Nagendrababu --- feeds/wlan-ap/opennds/Makefile | 1 - feeds/wlan-ap/opennds/files/lib/Tip.png | Bin 21138 -> 0 bytes .../openwrt/src/lib/target/inc/captive.h | 2 +- .../openwrt/src/lib/target/inc/fixup.h | 19 +++ .../openwrt/src/lib/target/override.mk | 1 + .../openwrt/src/lib/target/src/captive.c | 143 ++++++++++-------- .../openwrt/src/lib/target/src/fixup.c | 89 +++++++++++ .../openwrt/src/lib/target/src/utils.c | 11 ++ .../platform/openwrt/src/lib/target/src/vif.c | 2 + 9 files changed, 206 insertions(+), 62 deletions(-) delete mode 100644 feeds/wlan-ap/opennds/files/lib/Tip.png create mode 100644 feeds/wlan-ap/opensync/src/platform/openwrt/src/lib/target/inc/fixup.h create mode 100644 feeds/wlan-ap/opensync/src/platform/openwrt/src/lib/target/src/fixup.c diff --git a/feeds/wlan-ap/opennds/Makefile b/feeds/wlan-ap/opennds/Makefile index e46bcf0db..e48b39696 100644 --- a/feeds/wlan-ap/opennds/Makefile +++ b/feeds/wlan-ap/opennds/Makefile @@ -52,7 +52,6 @@ define Package/opennds/install $(INSTALL_DIR) $(1)/usr/lib/opennds $(CP) ./files/lib/splash.css $(1)/etc/opennds/htdocs/ - $(CP) ./files/lib/Tip.png $(1)/etc/opennds/htdocs/images/ $(CP) ./files/lib/opennds $(1)/etc/config/ $(CP) ./files/etc/init.d/opennds $(1)/etc/init.d/ $(CP) ./files/lib/login.sh $(1)/usr/lib/opennds/ diff --git a/feeds/wlan-ap/opennds/files/lib/Tip.png b/feeds/wlan-ap/opennds/files/lib/Tip.png deleted file mode 100644 index 7329ef488c938101623124bb91f3a388e431fea1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21138 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 +#include +#include +#include +#include "fixup.h" -struct blob_buf cap={ }; +static struct blob_buf cap={ }; +static struct blob_buf cap_blob={ }; +static struct blob_buf url_buf={ }; static struct uci_package *opennds; -static struct uci_context *cap_uci; +static struct uci_context *caps_uci; +static struct uci_context *capg_uci; struct blob_attr *d; #define SCHEMA_CAPTIVE_PORTAL_OPT_SZ 255 @@ -140,6 +148,10 @@ void vif_state_dhcp_allowlist_get(struct schema_Wifi_VIF_State *vstate) char read_ifname[8]; char set[8]; struct blob_attr *td[__DNS_ATTR_MAX] = { }; + + if (vif_fixup_iface_captive_enabled(vstate->if_name) == false) + return; + uci_load(dns, "dhcp", &dhcp); ip_section = uci_lookup_section(dns, dhcp,"dnsmasq"); if(!ip_section) { @@ -182,12 +194,16 @@ void vif_dhcp_opennds_allowlist_set(const struct schema_Wifi_VIF_Config *vconf, int i; char ips[128]; char buff[64]; + + if (vif_fixup_iface_captive_enabled(vconf->if_name) == false) + return; + ipset_flush(ifname); e = blobmsg_open_array(&dnsmas, "ipset"); for (i = 0; i < vconf->captive_allowlist_len; i++) { strcpy(buff,(char*)vconf->captive_allowlist[i]); - sprintf(ips,"/%s/set_%s", buff,"opennds"); + snprintf(ips, sizeof(ips), "/%s/set_%s", buff,"opennds"); blobmsg_add_string(&dnsmas, NULL,ips); } blobmsg_close_array(&dnsmas, e); @@ -235,10 +251,13 @@ void vif_state_captive_portal_options_get(struct schema_Wifi_VIF_State *vstate) struct blob_attr *tc[__NDS_ATTR_MAX] = { }; struct uci_section *cp_section; - uci_load(cap_uci, "opennds", &opennds); - cp_section = uci_lookup_section(cap_uci, opennds,"opennds"); + if (vif_fixup_iface_captive_enabled(vstate->if_name) == false) + return; + + uci_load(capg_uci, "opennds", &opennds); + cp_section = uci_lookup_section(capg_uci, opennds,"opennds"); if(!cp_section) { - uci_unload(cap_uci, opennds); + uci_unload(capg_uci, opennds); return; } blob_buf_init(&cap, 0); @@ -351,15 +370,14 @@ void vif_state_captive_portal_options_get(struct schema_Wifi_VIF_State *vstate) } } } -uci_unload(cap_uci, opennds); +uci_unload(capg_uci, opennds); return; } -void clean_up(CURL *curl,FILE* imagefile, FILE* headerfile) +void clean_up(CURL *curl,FILE* imagefile) { curl_easy_cleanup(curl); fclose(imagefile); - fclose(headerfile); return; } @@ -368,33 +386,27 @@ size_t write_data(void *ptr, size_t size, size_t nmemb, FILE *stream) { return written; } -void splash_page_logo(char* dest_file, char* src_url) +void captive_portal_files_download(char* dest_file, char* src_url) { CURL *curl; CURLcode res; FILE *imagefile; - FILE *headerfile; - static const char *clientcert = "/usr/opensync/certs/client.pem"; + const char *clientcert = "/usr/opensync/certs/client.pem"; const char *clientkey = "/usr/opensync/certs/client_dec.key"; - static const char *pHeaderFile = "/etc/opennds/splashlogo_header"; const char *keytype = "PEM"; - char errbuf[CURL_ERROR_SIZE]; - headerfile = fopen(pHeaderFile, "wb"); + imagefile = fopen(dest_file, "wb"); if(imagefile == NULL){ LOG(ERR, "fopen failed"); - if(headerfile) - fclose(headerfile); return; } curl = curl_easy_init(); if (curl == NULL){ LOG(ERR, "curl_easy_init failed"); - clean_up(curl,imagefile,headerfile); + clean_up(curl,imagefile); return; } - curl_easy_setopt(curl, CURLOPT_HEADERDATA, headerfile); curl_easy_setopt(curl, CURLOPT_URL, src_url); curl_easy_setopt(curl, CURLOPT_SSLCERT, clientcert); curl_easy_setopt(curl, CURLOPT_SSLKEY, clientkey); @@ -403,23 +415,22 @@ void splash_page_logo(char* dest_file, char* src_url) curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data); curl_easy_setopt(curl, CURLOPT_WRITEDATA, imagefile); - curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, errbuf); curl_easy_setopt(curl, CURLOPT_HEADER, 0L); res = curl_easy_perform(curl); if (res != CURLE_OK){ - clean_up(curl,imagefile,headerfile); + clean_up(curl,imagefile); remove(dest_file); return; } - clean_up(curl,imagefile,headerfile); + clean_up(curl,imagefile); return ; } int ipset_create(char *ifnds) { char command[64]; - sprintf(command,"ipset create set_%s hash:ip", ifnds); + snprintf(command, sizeof(command), "ipset create set_%s hash:ip", ifnds); return (system(command)); } @@ -427,18 +438,19 @@ void captive_portal_get_current_urls(char *ifname, char *splash_logo, char *back { char *buf = NULL; struct blob_attr *tc[__NDS_ATTR_MAX] = { }; - struct blob_buf url_buf={ }; - struct uci_section *cp_section; + struct uci_section *cp_section = NULL; + struct uci_package *opennds = NULL; - uci_load(cap_uci, "opennds", &opennds); - cp_section = uci_lookup_section(cap_uci, opennds,"opennds"); + uci_load(caps_uci, "opennds", &opennds); + cp_section = uci_lookup_section(caps_uci, opennds,"opennds"); if(!cp_section) { - uci_unload(cap_uci, opennds); + uci_unload(caps_uci, opennds); return; } blob_buf_init(&url_buf, 0); uci_to_blob(&url_buf, cp_section, &opennds_param); + blobmsg_parse(opennds_policy, __NDS_ATTR_MAX, tc, blob_data(url_buf.head), blob_len(url_buf.head)); if (tc[NDS_ATTR_SPLASH_PAGE_LOGO]) { @@ -460,7 +472,8 @@ void captive_portal_get_current_urls(char *ifname, char *splash_logo, char *back } else { user_file[0]=0; } - uci_unload(cap_uci, opennds); + uci_unload(caps_uci, opennds); + return; } void opennds_parameters(char *ifname) @@ -469,7 +482,7 @@ void opennds_parameters(char *ifname) char users_router[7][64] = { "allow tcp port 53","allow udp port 53", "allow udp port 67","allow tcp port 22", "allow tcp port 23", "allow tcp port 80", "allow tcp port 443"}; - struct blob_buf cap_blob={ }; + blob_buf_init(&cap_blob, 0); blobmsg_add_string(&cap_blob, "fwhook_enabled","1"); @@ -493,38 +506,35 @@ void opennds_parameters(char *ifname) blobmsg_add_string(&cap_blob, NULL, users_router[i]); } blobmsg_close_array(&cap_blob, d); - blob_to_uci_section(cap_uci, "opennds", "opennds", "opennds", cap_blob.head, &opennds_param, NULL); - uci_commit_all(cap_uci); + blob_to_uci_section(caps_uci, "opennds", "opennds", "opennds", cap_blob.head, &opennds_param, NULL); + uci_commit_all(caps_uci); return; } void opennds_section_del(char *section_name) { struct uci_package *opennds; - struct uci_context *nds_ctx; struct uci_element *e = NULL, *tmp = NULL; int ret = 0; - nds_ctx = uci_alloc_context(); - ret = uci_load(nds_ctx, "opennds", &opennds); + ret = uci_load(caps_uci, "opennds", &opennds); if (ret) { LOGE("%s: %s uci_load() failed with rc %d", section_name, __func__, ret); - uci_free_context(nds_ctx); + uci_unload(caps_uci, opennds); return; } uci_foreach_element_safe(&opennds->sections, tmp, e) { struct uci_section *s = uci_to_section(e); if (!strcmp(s->e.name, section_name)) { - uci_section_del(nds_ctx, "vif", "opennds", (char *)s->e.name, section_name); + uci_section_del(caps_uci, "vif", "opennds", (char *)s->e.name, section_name); } else { continue; } } - uci_commit(nds_ctx, &opennds, false); - uci_unload(nds_ctx, opennds); - uci_free_context(nds_ctx); + uci_commit(caps_uci, &opennds, false); + uci_unload(caps_uci, opennds); } void vif_captive_portal_set(const struct schema_Wifi_VIF_Config *vconf, char *ifname) @@ -534,23 +544,26 @@ void vif_captive_portal_set(const struct schema_Wifi_VIF_Config *vconf, char *if const char *opt; const char *val; blob_buf_init(&cap, 0); - char path[64]; - char webroot[64]; + char path[64] = {0}; + char webroot[64] = {0}; + char ipset_tcp80[64]; char ipset_tcp443[64]; - char splash_logo[84]; - char back_image[84]; - char user_file[84]; - sprintf(path,"/etc/opennds/htdocs/images/"); - sprintf(webroot,"/etc/opennds/htdocs"); - sprintf(ipset_tcp80,"allow tcp port 80 ipset set_opennds"); - sprintf(ipset_tcp443,"allow tcp port 443 ipset set_opennds"); + char splash_logo[84] = {0}; + char back_image[84] = {0}; + char user_file[84] = {0}; + + snprintf(path, sizeof(path), "/etc/opennds/htdocs/images/"); + snprintf(webroot, sizeof(webroot), "/etc/opennds/htdocs"); + + snprintf(ipset_tcp80, sizeof(ipset_tcp80),"allow tcp port 80 ipset set_opennds"); + snprintf(ipset_tcp443, sizeof(ipset_tcp443), "allow tcp port 443 ipset set_opennds"); + char file_path[128]; struct stat st = {0}; if (stat(path, &st) == -1) mkdir(path, 0755); - captive_portal_get_current_urls(ifname, splash_logo, back_image, user_file); for (j = 0; j < SCHEMA_CAPTIVE_PORTAL_OPTS_MAX; j++) { @@ -575,6 +588,7 @@ void vif_captive_portal_set(const struct schema_Wifi_VIF_Config *vconf, char *if blobmsg_add_string(&cap, NULL, ipset_tcp80); blobmsg_add_string(&cap, NULL, ipset_tcp443); blobmsg_close_array(&cap, d); + vif_fixup_set_iface_captive(ifname, true); } else if (strcmp(value,"username")==0) { blobmsg_add_string(&cap, "webroot",webroot); @@ -589,6 +603,8 @@ void vif_captive_portal_set(const struct schema_Wifi_VIF_Config *vconf, char *if blobmsg_add_string(&cap, NULL, ipset_tcp443); blobmsg_close_array(&cap, d); + vif_fixup_set_iface_captive(ifname, true); + } else if (strcmp(value,"radius")==0) { blobmsg_add_string(&cap, "webroot",webroot); opennds_parameters("opennds"); @@ -596,14 +612,19 @@ void vif_captive_portal_set(const struct schema_Wifi_VIF_Config *vconf, char *if blobmsg_add_string(&cap, "enabled", "1"); blobmsg_add_string(&cap, "gatewayinterface","br-lan"); blobmsg_add_string(&cap, "preauth", "/usr/lib/opennds/radius.sh"); + ipset_create("opennds"); d = blobmsg_open_array(&cap, "preauthenticated_users"); blobmsg_add_string(&cap, NULL, ipset_tcp80); blobmsg_add_string(&cap, NULL, ipset_tcp443); blobmsg_close_array(&cap, d); + + vif_fixup_set_iface_captive(ifname, true); } else { - opennds_section_del("opennds"); + vif_fixup_set_iface_captive(ifname, false); + if (vif_fixup_captive_enabled() == false) + opennds_section_del("opennds"); return; } } @@ -632,15 +653,15 @@ void vif_captive_portal_set(const struct schema_Wifi_VIF_Config *vconf, char *if else if (strcmp(opt, "splash_page_logo") == 0) { blobmsg_add_string(&cap, "splash_page_logo", value); if (strcmp(splash_logo,value) !=0) { - sprintf(file_path,"%s%s",path,"TipLogo.png"); - splash_page_logo(file_path,value); + snprintf(file_path, sizeof(file_path), "%s%s",path,"TipLogo.png"); + captive_portal_files_download(file_path,value); } } else if (strcmp(opt, "splash_page_background_logo") == 0) { blobmsg_add_string(&cap, "page_background_logo", value); if (strcmp(back_image,value) !=0) { - sprintf(file_path,"%s%s",path,"TipBackLogo.png"); - splash_page_logo(file_path,value); + snprintf(file_path, sizeof(file_path),"%s%s",path,"TipBackLogo.png"); + captive_portal_files_download(file_path,value); } } @@ -660,18 +681,20 @@ void vif_captive_portal_set(const struct schema_Wifi_VIF_Config *vconf, char *if else if (strcmp(opt, "username_password_file") == 0) { blobmsg_add_string(&cap, "username_password_file", value); if (strcmp(user_file,value) !=0) { - sprintf(file_path,"%s%s",path,"userpass.dat"); - splash_page_logo(file_path,value); + snprintf(file_path, sizeof(file_path),"%s%s",path,"userpass.dat"); + captive_portal_files_download(file_path,value); } } } - blob_to_uci_section(cap_uci, "opennds", "opennds", "opennds", cap.head, &opennds_param, NULL); - uci_commit_all(cap_uci); + blob_to_uci_section(caps_uci, "opennds", "opennds", "opennds", cap.head, &opennds_param, NULL); + uci_commit_all(caps_uci); return; } + void captive_portal_init() { - cap_uci=uci_alloc_context(); + caps_uci=uci_alloc_context(); + capg_uci=uci_alloc_context(); dns=uci_alloc_context(); return; } diff --git a/feeds/wlan-ap/opensync/src/platform/openwrt/src/lib/target/src/fixup.c b/feeds/wlan-ap/opensync/src/platform/openwrt/src/lib/target/src/fixup.c new file mode 100644 index 000000000..c05b15400 --- /dev/null +++ b/feeds/wlan-ap/opensync/src/platform/openwrt/src/lib/target/src/fixup.c @@ -0,0 +1,89 @@ +/* SPDX-License-Identifier: BSD-3-Clause */ + +#include +#include +#include +#include +#include +#include +#include + +#include "log.h" +#include "const.h" +#include "target.h" + +#include +#include +#include +#include + +#include "fixup.h" + + +/* + * VIF Fixup + */ + +static struct avl_tree vif_fixup_tree = AVL_TREE_INIT(vif_fixup_tree, avl_strcmp, false, NULL); + +struct vif_fixup * vif_fixup_find(const char *ifname) +{ + struct vif_fixup *vif = avl_find_element(&vif_fixup_tree, ifname, vif, avl); + if (vif) + return vif; + + /* Not found, add */ + vif = malloc(sizeof(*vif)); + if (!vif) + return NULL; + + memset(vif, 0, sizeof(*vif)); + strncpy(vif->name, ifname, IF_NAMESIZE); + vif->avl.key = vif->name; + avl_insert(&vif_fixup_tree, &vif->avl); + return vif; +} + +void vif_fixup_del(char *ifname) +{ + struct vif_fixup *vif = NULL; + vif = avl_find_element(&vif_fixup_tree, ifname, vif, avl); + if (vif) { + avl_delete(&vif_fixup_tree, &vif->avl); + free(vif); + } +} + +bool vif_fixup_captive_enabled(void) +{ + struct vif_fixup *vif_ptr = NULL; + struct vif_fixup *vif = NULL; + + avl_for_each_element_safe(&vif_fixup_tree, vif, avl, vif_ptr) { + if (vif->has_captive == true) + return true; + } + return false; +} + +bool vif_fixup_iface_captive_enabled(const char *ifname) +{ + struct vif_fixup * vif = NULL; + + vif = vif_fixup_find(ifname); + + if (vif) + return vif->has_captive; + else + return false; +} + +void vif_fixup_set_iface_captive(const char *ifname, bool en) +{ + struct vif_fixup * vif = NULL; + + vif = vif_fixup_find(ifname); + + if (vif) + vif->has_captive = en; +} diff --git a/feeds/wlan-ap/opensync/src/platform/openwrt/src/lib/target/src/utils.c b/feeds/wlan-ap/opensync/src/platform/openwrt/src/lib/target/src/utils.c index 0c2d78ebd..0ae6d52ae 100644 --- a/feeds/wlan-ap/opensync/src/platform/openwrt/src/lib/target/src/utils.c +++ b/feeds/wlan-ap/opensync/src/platform/openwrt/src/lib/target/src/utils.c @@ -512,6 +512,17 @@ bool vif_state_to_conf(struct schema_Wifi_VIF_State *vstate, } vconf->custom_options_len = vstate->custom_options_len; + for (i = 0; i < vstate->captive_allowlist_len; i++) + STRSCPY(vconf->captive_allowlist[i], vstate->captive_allowlist[i]); + vconf->captive_allowlist_len = vstate->captive_allowlist_len; + + for (i = 0; i < vstate->captive_portal_len; i++) { + STRSCPY(vconf->captive_portal_keys[i], + vstate->captive_portal_keys[i]); + STRSCPY(vconf->captive_portal[i], vstate->captive_portal[i]); + } + vconf->captive_portal_len = vstate->captive_portal_len; + return true; #undef VIF_COPY diff --git a/feeds/wlan-ap/opensync/src/platform/openwrt/src/lib/target/src/vif.c b/feeds/wlan-ap/opensync/src/platform/openwrt/src/lib/target/src/vif.c index fdeeb7a11..6b3444d68 100755 --- a/feeds/wlan-ap/opensync/src/platform/openwrt/src/lib/target/src/vif.c +++ b/feeds/wlan-ap/opensync/src/platform/openwrt/src/lib/target/src/vif.c @@ -26,6 +26,7 @@ #include "ovsdb_table.h" #include "ovsdb_sync.h" #include "rrm_config.h" +#include "fixup.h" #define MODULE_ID LOG_MODULE_ID_VIF #define UCI_BUFFER_SIZE 80 @@ -1326,6 +1327,7 @@ bool target_vif_config_del(const struct schema_Wifi_VIF_Config *vconf) const char *ifname; int ret = 0; + vif_fixup_del((char *)vconf->if_name); vlan_del((char *)vconf->if_name); vif_ctx = uci_alloc_context(); ret= uci_load(vif_ctx, "wireless", &wireless);