Only take process id of localhost client connection entries.
authorRalf Habacker <ralf.habacker@freenet.de>
Thu, 8 Aug 2013 14:48:04 +0000 (16:48 +0200)
committerRalf Habacker <ralf.habacker@freenet.de>
Fri, 9 Aug 2013 15:52:32 +0000 (17:52 +0200)
This patch makes sure, that the process id is fetched only from localhost
 client address connections fetched from the tcp table.

Bug: https://bugs.freedesktop.org/show_bug.cgi?id=66060
Reviewed-by: Simon McVittie <simon.mcvittie@collabora.co.uk>
dbus/dbus-sysdeps-win.c

index aa0f97e..14fbf13 100644 (file)
@@ -208,7 +208,8 @@ _dbus_get_peer_pid_from_tcp_handle (int handle)
       for (dwSize = 0; dwSize < lpBuffer->dwNumEntries; dwSize++)
         {
           int local_port = ntohs (lpBuffer->table[dwSize].dwLocalPort);
-          if (local_port == peer_port)
+          int local_address = ntohl (lpBuffer->table[dwSize].dwLocalAddr);
+          if (local_address == INADDR_LOOPBACK && local_port == peer_port)
             {
               result = lpBuffer->table[dwSize].dwOwningPid;
               break;
@@ -244,8 +245,10 @@ _dbus_get_peer_pid_from_tcp_handle (int handle)
   for (i = 0; i < tcp_table->dwNumEntries; i++)
     {
       MIB_TCPROW_OWNER_PID *p = &tcp_table->table[i];
+      int local_address = ntohl (p->dwLocalAddr);
       int local_port = ntohs (p->dwLocalPort);
-      if (p->dwState == MIB_TCP_STATE_ESTAB && local_port == peer_port)
+      if (p->dwState == MIB_TCP_STATE_ESTAB
+          && local_address == INADDR_LOOPBACK && local_port == peer_port)
         result = p->dwOwningPid;
     }