From 810947029094ec15f18ea89c599b5e3c25cf0fd7 Mon Sep 17 00:00:00 2001 From: Nishant Chaprana Date: Thu, 7 Dec 2017 18:23:27 +0530 Subject: [PATCH] Accepting only single rule entry instead of list Change-Id: Ibce3d4db3d0dd9d240effe3c08a4830db43f6f2b Signed-off-by: Nishant Chaprana --- interfaces/stc-iptables-iface.xml | 8 +- packaging/stc-iptables.spec | 2 +- src/stc-iptables-util.c | 194 +++++++++++++++++--------------------- 3 files changed, 94 insertions(+), 110 deletions(-) diff --git a/interfaces/stc-iptables-iface.xml b/interfaces/stc-iptables-iface.xml index 2a1c379..7996cea 100755 --- a/interfaces/stc-iptables-iface.xml +++ b/interfaces/stc-iptables-iface.xml @@ -5,19 +5,19 @@ - + - + - + - + diff --git a/packaging/stc-iptables.spec b/packaging/stc-iptables.spec index 6b78a3b..aa2af8d 100644 --- a/packaging/stc-iptables.spec +++ b/packaging/stc-iptables.spec @@ -1,6 +1,6 @@ Name: stc-iptables Summary: STC(Smart Traffic Control) iptables -Version: 0.0.1 +Version: 0.0.2 Release: 0 Group: Network & Connectivity/Other License: GPL-2.0+ diff --git a/src/stc-iptables-util.c b/src/stc-iptables-util.c index 6ca1094..82cfefd 100755 --- a/src/stc-iptables-util.c +++ b/src/stc-iptables-util.c @@ -133,38 +133,34 @@ gboolean handle_iptables_add_rule(StcRule *object, if (rules != NULL) { GVariantIter *iter = NULL; - GVariantIter *iter_row = NULL; - - g_variant_get(rules, "aa{sv}", &iter); - - while (g_variant_iter_next(iter, "a{sv}", &iter_row)) { - iptables_rule_s *rule = MALLOC0(iptables_rule_s, 1); - if (rule != NULL) { - memset(rule, 0, sizeof(iptables_rule_s)); - - stc_iptables_gdbus_dict_foreach(iter_row, - __stc_extract_rule, - rule); - - ret = iptables_add_rule(rule); - if (ret != STC_ERROR_NONE) { - STC_LOGE("Failed add rule [%s:%d:%s:%d:%s:%s]", rule->chain, - rule->type, rule->ifname, rule->classid, - rule->nfacct_name, rule->target); - } - - FREE(rule->chain); - FREE(rule->ifname); - FREE(rule->nfacct_name); - FREE(rule->target); + + g_variant_get(rules, "a{sv}", &iter); + + iptables_rule_s *rule = MALLOC0(iptables_rule_s, 1); + if (rule != NULL) { + memset(rule, 0, sizeof(iptables_rule_s)); + + stc_iptables_gdbus_dict_foreach(iter, + __stc_extract_rule, + rule); + + ret = iptables_add_rule(rule); + if (ret != STC_ERROR_NONE) { + STC_LOGE("Failed add rule [%s:%d:%s:%d:%s:%s]", rule->chain, + rule->type, rule->ifname, rule->classid, + rule->nfacct_name, rule->target); } - g_variant_iter_free(iter_row); + FREE(rule->chain); + FREE(rule->ifname); + FREE(rule->nfacct_name); + FREE(rule->target); } + g_variant_iter_free(iter); } else { STC_IPTABLES_DBUS_REPLY_ERROR(invocation, - STC_ERROR_INVALID_PARAMETER); + STC_ERROR_INVALID_PARAMETER); __STC_LOG_FUNC_EXIT__; return TRUE; } @@ -189,37 +185,33 @@ gboolean handle_iptables_remove_rule(StcRule *object, if (rules != NULL) { GVariantIter *iter = NULL; - GVariantIter *iter_row = NULL; - g_variant_get(rules, "aa{sv}", &iter); - - while (g_variant_iter_next(iter, "a{sv}", &iter_row)) { - iptables_rule_s *rule = MALLOC0(iptables_rule_s, 1); - if (rule != NULL) { - memset(rule, 0, sizeof(iptables_rule_s)); - - stc_iptables_gdbus_dict_foreach(iter_row, - __stc_extract_rule, - rule); - - ret = iptables_remove_rule(rule); - if (ret != STC_ERROR_NONE) { - STC_LOGE("Failed remove rule [%s:%d:%s:%d:%s:%s]", rule->chain, - rule->type, rule->ifname, rule->classid, - rule->nfacct_name, rule->target); - } - - FREE(rule->chain); - FREE(rule->ifname); - FREE(rule->nfacct_name); - FREE(rule->target); + g_variant_get(rules, "a{sv}", &iter); + + iptables_rule_s *rule = MALLOC0(iptables_rule_s, 1); + if (rule != NULL) { + memset(rule, 0, sizeof(iptables_rule_s)); + + stc_iptables_gdbus_dict_foreach(iter, + __stc_extract_rule, + rule); + + ret = iptables_remove_rule(rule); + if (ret != STC_ERROR_NONE) { + STC_LOGE("Failed remove rule [%s:%d:%s:%d:%s:%s]", rule->chain, + rule->type, rule->ifname, rule->classid, + rule->nfacct_name, rule->target); } - g_variant_iter_free(iter_row); + FREE(rule->chain); + FREE(rule->ifname); + FREE(rule->nfacct_name); + FREE(rule->target); } + g_variant_iter_free(iter); } else { STC_IPTABLES_DBUS_REPLY_ERROR(invocation, - STC_ERROR_INVALID_PARAMETER); + STC_ERROR_INVALID_PARAMETER); __STC_LOG_FUNC_EXIT__; return TRUE; } @@ -234,9 +226,9 @@ gboolean handle_iptables_remove_rule(StcRule *object, } gboolean handle_iptables_add_chain(StcChain *object, - GDBusMethodInvocation *invocation, - const gchar *chain, - void *user_data) + GDBusMethodInvocation *invocation, + const gchar *chain, + void *user_data) { __STC_LOG_FUNC_ENTER__; stc_error_e ret = STC_ERROR_NONE; @@ -294,38 +286,34 @@ gboolean handle_ip6tables_add_rule(StcRule *object, if (rules != NULL) { GVariantIter *iter = NULL; - GVariantIter *iter_row = NULL; - - g_variant_get(rules, "aa{sv}", &iter); - - while (g_variant_iter_next(iter, "a{sv}", &iter_row)) { - ip6tables_rule_s *rule = MALLOC0(ip6tables_rule_s, 1); - if (rule != NULL) { - memset(rule, 0, sizeof(ip6tables_rule_s)); - - stc_iptables_gdbus_dict_foreach(iter_row, - __stc_extract_6_rule, - rule); - - ret = ip6tables_add_rule(rule); - if (ret != STC_ERROR_NONE) { - STC_LOGE("Failed add rule [%s:%d:%s:%d:%s:%s]", rule->chain, - rule->type, rule->ifname, rule->classid, - rule->nfacct_name, rule->target); - } - - FREE(rule->chain); - FREE(rule->ifname); - FREE(rule->nfacct_name); - FREE(rule->target); + + g_variant_get(rules, "a{sv}", &iter); + + ip6tables_rule_s *rule = MALLOC0(ip6tables_rule_s, 1); + if (rule != NULL) { + memset(rule, 0, sizeof(ip6tables_rule_s)); + + stc_iptables_gdbus_dict_foreach(iter, + __stc_extract_6_rule, + rule); + + ret = ip6tables_add_rule(rule); + if (ret != STC_ERROR_NONE) { + STC_LOGE("Failed add rule [%s:%d:%s:%d:%s:%s]", rule->chain, + rule->type, rule->ifname, rule->classid, + rule->nfacct_name, rule->target); } - g_variant_iter_free(iter_row); + FREE(rule->chain); + FREE(rule->ifname); + FREE(rule->nfacct_name); + FREE(rule->target); } + g_variant_iter_free(iter); } else { STC_IPTABLES_DBUS_REPLY_ERROR(invocation, - STC_ERROR_INVALID_PARAMETER); + STC_ERROR_INVALID_PARAMETER); __STC_LOG_FUNC_EXIT__; return TRUE; } @@ -350,37 +338,33 @@ gboolean handle_ip6tables_remove_rule(StcRule *object, if (rules != NULL) { GVariantIter *iter = NULL; - GVariantIter *iter_row = NULL; - g_variant_get(rules, "aa{sv}", &iter); - - while (g_variant_iter_next(iter, "a{sv}", &iter_row)) { - ip6tables_rule_s *rule = MALLOC0(ip6tables_rule_s, 1); - if (rule != NULL) { - memset(rule, 0, sizeof(ip6tables_rule_s)); - - stc_iptables_gdbus_dict_foreach(iter_row, - __stc_extract_6_rule, - rule); - - ret = ip6tables_remove_rule(rule); - if (ret != STC_ERROR_NONE) { - STC_LOGE("Failed remove rule [%s:%d:%s:%d:%s:%s]", rule->chain, - rule->type, rule->ifname, rule->classid, - rule->nfacct_name, rule->target); - } - - FREE(rule->chain); - FREE(rule->ifname); - FREE(rule->nfacct_name); - FREE(rule->target); + g_variant_get(rules, "a{sv}", &iter); + + ip6tables_rule_s *rule = MALLOC0(ip6tables_rule_s, 1); + if (rule != NULL) { + memset(rule, 0, sizeof(ip6tables_rule_s)); + + stc_iptables_gdbus_dict_foreach(iter, + __stc_extract_6_rule, + rule); + + ret = ip6tables_remove_rule(rule); + if (ret != STC_ERROR_NONE) { + STC_LOGE("Failed remove rule [%s:%d:%s:%d:%s:%s]", rule->chain, + rule->type, rule->ifname, rule->classid, + rule->nfacct_name, rule->target); } - g_variant_iter_free(iter_row); + FREE(rule->chain); + FREE(rule->ifname); + FREE(rule->nfacct_name); + FREE(rule->target); } + g_variant_iter_free(iter); } else { STC_IPTABLES_DBUS_REPLY_ERROR(invocation, - STC_ERROR_INVALID_PARAMETER); + STC_ERROR_INVALID_PARAMETER); __STC_LOG_FUNC_EXIT__; return TRUE; } -- 2.7.4