Hi,

i found 2 bugs in connman's code,
1) when trying to ipv4_probe with a static configuration, and there is no
broadcast address set, the daemon will segfault.
2) There is no way to set broadcast address and nameserver address using
dbus, the dbus names are not set.

The patch is for bug 2, i paste it here, and also attach it since i heard
attachments sometimes do not work.
please review it and add it to the repository.

diff --git a/src/element.c b/src/element.c
index e670864..cad748a 100644
--- a/src/element.c
+++ b/src/element.c
@@ -939,6 +939,7 @@ int __connman_element_append_ipv4(struct connman_element
*element,
 {
     const char *method = NULL;
     const char *address = NULL, *netmask = NULL, *gateway = NULL;
+    const char *broadcast = NULL, *nameserver = NULL;

     connman_element_get_value(element,
                 CONNMAN_PROPERTY_ID_IPV4_METHOD, &method);
@@ -950,6 +951,11 @@ int __connman_element_append_ipv4(struct
connman_element *element,
     connman_element_get_value(element,
                 CONNMAN_PROPERTY_ID_IPV4_GATEWAY, &gateway);

+    connman_element_get_value(element,
+                CONNMAN_PROPERTY_ID_IPV4_BROADCAST, &broadcast);
+    connman_element_get_value(element,
+                CONNMAN_PROPERTY_ID_IPV4_NAMESERVER, &nameserver);
+
     if (method != NULL)
         connman_dbus_dict_append_variant(dict, "IPv4.Method",
                         DBUS_TYPE_STRING, &method);
@@ -966,6 +972,14 @@ int __connman_element_append_ipv4(struct
connman_element *element,
         connman_dbus_dict_append_variant(dict, "IPv4.Gateway",
                         DBUS_TYPE_STRING, &gateway);

+    if (broadcast != NULL)
+        connman_dbus_dict_append_variant(dict, "IPv4.Broadcast",
+                        DBUS_TYPE_STRING, &broadcast);
+
+    if (nameserver != NULL)
+        connman_dbus_dict_append_variant(dict, "IPv4.Nameserver",
+                        DBUS_TYPE_STRING, &nameserver);
+
     return 0;
 }

@@ -1030,8 +1044,32 @@ int __connman_element_set_ipv4(struct connman_element
*element,
         element->ipv4.gateway = g_strdup(gateway);

         connman_element_update(element);
-    }
+    } else if (g_str_equal(name, "IPv4.Broadcast") == TRUE) {
+        const char *broadcast;
+
+        if (type != DBUS_TYPE_STRING)
+            return -EINVAL;
+
+        dbus_message_iter_get_basic(value, &broadcast);
+
+        g_free(element->ipv4.broadcast);
+        element->ipv4.broadcast = g_strdup(broadcast);
+
+        connman_element_update(element);
+    } else if (g_str_equal(name, "IPv4.Nameserver") == TRUE) {
+        const char *nameserver;
+
+        if (type != DBUS_TYPE_STRING)
+            return -EINVAL;

+        dbus_message_iter_get_basic(value, &nameserver);
+
+        g_free(element->ipv4.nameserver);
+        element->ipv4.nameserver = g_strdup(nameserver);
+
+        connman_element_update(element);
+    }
+
     return 0;
 }

Attachment: connman_ipv4_static.patch
Description: Binary data

_______________________________________________
connman mailing list
[email protected]
http://lists.connman.net/listinfo/connman

Reply via email to