Accepting only single rule entry instead of list
[platform/core/connectivity/stc-iptables.git] / src / stc-iptables-util.c
index 6ca1094..82cfefd 100755 (executable)
@@ -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;
        }