Author: qboosh                       Date: Mon Feb 28 15:58:06 2005 GMT
Module: SOURCES                       Tag: HEAD
---- Log message:
- nl_pid is not (always) pid (differs in case of bind collision) - get it by 
getsockname()

---- Files affected:
SOURCES:
   libinet6-pid.patch (NONE -> 1.1)  (NEW)

---- Diffs:

================================================================
Index: SOURCES/libinet6-pid.patch
diff -u /dev/null SOURCES/libinet6-pid.patch:1.1
--- /dev/null   Mon Feb 28 16:58:06 2005
+++ SOURCES/libinet6-pid.patch  Mon Feb 28 16:58:01 2005
@@ -0,0 +1,94 @@
+--- libinet6/ifaddrs.c.orig    2005-02-28 11:09:16.000000000 +0100
++++ libinet6/ifaddrs.c 2005-02-28 15:13:12.000000000 +0100
+@@ -242,14 +242,13 @@
+ }
+ 
+ static int
+-nl_getmsg (int sd, int request, int seq, struct nlmsghdr **nlhp, int *done)
++nl_getmsg (int sd, int pid, int request, int seq, struct nlmsghdr **nlhp, int 
*done)
+ {
+   struct nlmsghdr *nh;
+   size_t bufsize = 65536, lastbufsize = 0;
+   void *buff = NULL;
+   int result = 0, read_size;
+   int msg_flags;
+-  pid_t pid = getpid ();
+   for (;;)
+     {
+       void *newbuff = realloc (buff, bufsize);
+@@ -306,7 +305,7 @@
+ }
+ 
+ static int
+-nl_getlist (int sd, int seq,
++nl_getlist (int sd, int pid, int seq,
+           int request,
+           struct nlmsg_list **nlm_list, struct nlmsg_list **nlm_end)
+ {
+@@ -321,7 +320,7 @@
+     seq = (int) time (NULL);
+   while (!done)
+     {
+-      status = nl_getmsg (sd, request, seq, &nlh, &done);
++      status = nl_getmsg (sd, pid, request, seq, &nlh, &done);
+       if (status < 0)
+       return status;
+       if (nlh)
+@@ -401,9 +400,10 @@
+ 
+ /* ---------------------------------------------------------------------- */
+ static int
+-nl_open (void)
++nl_open (pid_t *pid)
+ {
+   struct sockaddr_nl nladdr;
++  socklen_t addr_len;
+   int sd;
+ 
+   sd = socket (PF_NETLINK, SOCK_RAW, NETLINK_ROUTE);
+@@ -416,6 +416,13 @@
+       nl_close (sd);
+       return -1;
+     }
++  addr_len = sizeof(nladdr);
++  if (getsockname (sd, (struct sockaddr *) &nladdr, &addr_len) < 0)
++    {
++      nl_close (sd);
++      return -1;
++    }
++  *pid = nladdr.nl_pid;
+   return sd;
+ }
+ 
+@@ -430,7 +437,7 @@
+   size_t dlen, xlen, nlen;
+   uint32_t max_ifindex = 0;
+ 
+-  pid_t pid = getpid ();
++  pid_t pid;
+   int seq;
+   int result;
+   int build;                  /* 0 or 1 */
+@@ -445,19 +452,19 @@
+ 
+ /* ---------------------------------- */
+   /* open socket and bind */
+-  sd = nl_open ();
++  sd = nl_open (&pid);
+   if (sd < 0)
+     return -1;
+ 
+ /* ---------------------------------- */
+   /* gather info */
+-  if ((seq = nl_getlist (sd, 0, RTM_GETLINK, &nlmsg_list, &nlmsg_end)) < 0)
++  if ((seq = nl_getlist (sd, pid, 0, RTM_GETLINK, &nlmsg_list, &nlmsg_end)) < 
0)
+     {
+       free_nlmsglist (nlmsg_list);
+       nl_close (sd);
+       return -1;
+     }
+-  if ((seq = nl_getlist (sd, seq + 1, RTM_GETADDR,
++  if ((seq = nl_getlist (sd, pid, seq + 1, RTM_GETADDR,
+                        &nlmsg_list, &nlmsg_end)) < 0)
+     {
+       free_nlmsglist (nlmsg_list);
================================================================

_______________________________________________
pld-cvs-commit mailing list
[email protected]
http://lists.pld-linux.org/mailman/listinfo/pld-cvs-commit

Reply via email to