diff --git a/libbbfdm-api/dmcommon.c b/libbbfdm-api/dmcommon.c index 8aa0d1c6..2308a483 100644 --- a/libbbfdm-api/dmcommon.c +++ b/libbbfdm-api/dmcommon.c @@ -60,7 +60,7 @@ char *RateAdjAlgorithm[] = {"B", "C", NULL}; char *PIN[] = {"^\\d{4}|\\d{8}$", NULL}; char *DestinationAddress[] = {"^\\d+/\\d+$", NULL}; -char *RegulatoryDomain[] = {"^[A-Z][A-Z][ OI]$", NULL}; +char *RegulatoryDomain[] = {"^[A-Z][A-Z]$", "^[A-Z][A-Z][ OI]$", NULL}; char *ConformingAction[] = {"^Null$", "^Drop$", "^[0-9]|[1-5][0-9]|6[0-3]$", "^:[0-7]$", "^([0-9]|[1-5][0-9]|6[0-3]):[0-7]$", NULL}; char *IPv4Address[] = {"^$", "^((25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])$", NULL}; char *IPv6Address[] = {"^$", "^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$", NULL}; diff --git a/libbbfdm/dmtree/tr181/wifi.c b/libbbfdm/dmtree/tr181/wifi.c index e573b95b..c9d6191a 100644 --- a/libbbfdm/dmtree/tr181/wifi.c +++ b/libbbfdm/dmtree/tr181/wifi.c @@ -1213,12 +1213,16 @@ static int set_WiFiRadio_RegulatoryDomain(char *refparam, struct dmctx *ctx, voi { switch (action) { case VALUECHECK: - if (bbfdm_validate_string(ctx, value, 3, 3, NULL, RegulatoryDomain)) + if (bbfdm_validate_string(ctx, value, 2, 3, NULL, RegulatoryDomain)) return FAULT_9007; break; case VALUESET: dmuci_set_value_by_section((((struct wifi_radio_args *)data)->sections)->dmmap_section, "country", value); - value[2] = '\0'; + + // uci only support country code, so strip I/O from value before setting + if (DM_STRLEN(value) == 3) + value[2] = '\0'; + dmuci_set_value_by_section((((struct wifi_radio_args *)data)->sections)->config_section, "country", value); break; }