pyglue: don't return 127.0.0.0/8 IPs in interface_ips()
authorAndrew Tridgell <tridge@samba.org>
Thu, 25 Feb 2010 05:29:47 +0000 (16:29 +1100)
committerAndrew Tridgell <tridge@samba.org>
Fri, 26 Feb 2010 02:59:16 +0000 (13:59 +1100)
We don't generally want loopback addresses in the python code

source4/scripting/python/pyglue.c

index f0723867917e1cfd1ee0711033b4f8e8831d75c6..3ae0a0965cda7312ef7cfc3697a41f9d031cad6e 100644 (file)
@@ -491,6 +491,8 @@ static PyObject *py_dsdb_load_partition_usn(PyObject *self, PyObject *args)
 /*
   return the list of interface IPs we have configured
   takes an loadparm context, returns a list of IPs in string form
+
+  Does not return addresses on 127.0.0.0/8
  */
 static PyObject *py_interface_ips(PyObject *self, PyObject *args)
 {
@@ -500,7 +502,7 @@ static PyObject *py_interface_ips(PyObject *self, PyObject *args)
        PyObject *py_lp_ctx;
        struct loadparm_context *lp_ctx;
        struct interface *ifaces;
-       int i;
+       int i, ifcount;
 
        if (!PyArg_ParseTuple(args, "O", &py_lp_ctx))
                return NULL;
@@ -517,10 +519,21 @@ static PyObject *py_interface_ips(PyObject *self, PyObject *args)
 
        count = iface_count(ifaces);
 
-       pylist = PyList_New(count);
-       for (i = 0; i<count; i++) {
-               PyList_SetItem(pylist, i,
-                              PyString_FromString(iface_n_ip(ifaces, i)));
+       /* first count how many are not loopback addresses */
+       for (ifcount = i = 0; i<count; i++) {
+               const char *ip = iface_n_ip(ifaces, i);
+               if (!iface_same_net(ip, "127.0.0.1", "255.0.0.0")) {
+                       ifcount++;
+               }
+       }
+
+       pylist = PyList_New(ifcount);
+       for (ifcount = i = 0; i<count; i++) {
+               const char *ip = iface_n_ip(ifaces, i);
+               if (!iface_same_net(ip, "127.0.0.1", "255.0.0.0")) {
+                       PyList_SetItem(pylist, ifcount, PyString_FromString(ip));
+                       ifcount++;
+               }
        }
        talloc_free(tmp_ctx);
        return pylist;