service: Check that the supplied nameserver is in numeric format
[framework/connectivity/connman.git] / src / service.c
index f9fbe9d..94ef7b6 100644 (file)
@@ -3041,10 +3041,12 @@ static DBusMessage *set_property(DBusConnection *conn,
                        const char *val;
                        dbus_message_iter_get_basic(&entry, &val);
                        dbus_message_iter_next(&entry);
-                       if (str->len > 0)
-                               g_string_append_printf(str, " %s", val);
-                       else
-                               g_string_append(str, val);
+                       if (connman_inet_check_ipaddress(val) > 0) {
+                               if (str->len > 0)
+                                       g_string_append_printf(str, " %s", val);
+                               else
+                                       g_string_append(str, val);
+                       }
                }
 
                remove_nameservers(service, NULL, service->nameservers_config);
@@ -5500,18 +5502,32 @@ static struct connman_service *lookup_by_identifier(const char *identifier)
        return NULL;
 }
 
+struct provision_user_data {
+       const char *ident;
+       int ret;
+};
+
 static void provision_changed(gpointer value, gpointer user_data)
 {
        struct connman_service *service = value;
-       char *path = user_data;
+       struct provision_user_data *data = user_data;
+       const char *path = data->ident;
+       int ret;
 
-       __connman_config_provision_service_ident(service, path,
+       ret = __connman_config_provision_service_ident(service, path,
                        service->config_file, service->config_entry);
+       if (ret > 0)
+               data->ret = ret;
 }
 
-void __connman_service_provision_changed(const char *ident)
+int __connman_service_provision_changed(const char *ident)
 {
-       g_sequence_foreach(service_list, provision_changed, (void *)ident);
+       struct provision_user_data data = {
+               .ident = ident,
+               .ret = 0
+       };
+
+       g_sequence_foreach(service_list, provision_changed, (void *)&data);
 
        /*
         * Because the provision_changed() might have set some services
@@ -5527,6 +5543,8 @@ void __connman_service_provision_changed(const char *ident)
 
                __connman_connection_update_gateway();
        }
+
+       return data.ret;
 }
 
 void __connman_service_set_config(struct connman_service *service,