Accepting only single rule entry instead of list 66/163166/1
authorNishant Chaprana <n.chaprana@samsung.com>
Thu, 7 Dec 2017 12:53:27 +0000 (18:23 +0530)
committerNishant Chaprana <n.chaprana@samsung.com>
Thu, 7 Dec 2017 12:54:01 +0000 (18:24 +0530)
Change-Id: Ibce3d4db3d0dd9d240effe3c08a4830db43f6f2b
Signed-off-by: Nishant Chaprana <n.chaprana@samsung.com>
interfaces/stc-iptables-iface.xml
packaging/stc-iptables.spec
src/stc-iptables-util.c

index 2a1c379..7996cea 100755 (executable)
@@ -5,19 +5,19 @@
        </interface>
        <interface name="net.stc.iptables.rule">
                <method name='IptAddRule'>
-                       <arg type='aa{sv}' name='rules' direction='in'/>
+                       <arg type='a{sv}' name='rules' direction='in'/>
                        <arg type='i' name='error_code' direction='out'/>
                </method>
                <method name='IptRemoveRule'>
-                       <arg type='aa{sv}' name='rules' direction='in'/>
+                       <arg type='a{sv}' name='rules' direction='in'/>
                        <arg type='i' name='error_code' direction='out'/>
                </method>
                <method name='Ip6tAddRule'>
-                       <arg type='aa{sv}' name='rules' direction='in'/>
+                       <arg type='a{sv}' name='rules' direction='in'/>
                        <arg type='i' name='error_code' direction='out'/>
                </method>
                <method name='Ip6tRemoveRule'>
-                       <arg type='aa{sv}' name='rules' direction='in'/>
+                       <arg type='a{sv}' name='rules' direction='in'/>
                        <arg type='i' name='error_code' direction='out'/>
                </method>
        </interface>
index 6b78a3b..aa2af8d 100644 (file)
@@ -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+
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;
        }