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