Grabbed updates from upstream cvs to control ipv6 support #113212.
authorMike Frysinger <vapier@gentoo.org>
Tue, 22 Nov 2005 03:36:44 +0000 (03:36 +0000)
committerMike Frysinger <vapier@gentoo.org>
Tue, 22 Nov 2005 03:36:44 +0000 (03:36 +0000)
Package-Manager: portage-2.0.53_rc7

sys-process/psmisc/ChangeLog
sys-process/psmisc/Manifest
sys-process/psmisc/files/psmisc-21.8-ipv6.patch [new file with mode: 0644]
sys-process/psmisc/psmisc-21.8.ebuild

index 7ea00676fe199f050ea6b216fe7c6faf6bce9a1d..5fdd28bf1bf1d52dbb57dde1e410645c45f51bf2 100644 (file)
@@ -1,6 +1,10 @@
 # ChangeLog for sys-process/psmisc
 # Copyright 1999-2005 Gentoo Foundation; Distributed under the GPL v2
-# $Header: /var/cvsroot/gentoo-x86/sys-process/psmisc/ChangeLog,v 1.17 2005/11/18 00:48:27 pebenito Exp $
+# $Header: /var/cvsroot/gentoo-x86/sys-process/psmisc/ChangeLog,v 1.18 2005/11/22 03:36:44 vapier Exp $
+
+  22 Nov 2005; Mike Frysinger <vapier@gentoo.org>
+  +files/psmisc-21.8-ipv6.patch, psmisc-21.8.ebuild:
+  Grabbed updates from upstream cvs to control ipv6 support #113212.
 
   18 Nov 2005; Chris PeBenito <pebenito@gentoo.org> psmisc-21.8.ebuild:
   Remove SELinux patching as support is now integrated upstream.
index 081fc1d60366cff7da5fad34be1066a79814a813..994ab8f3bb02a94a1b27d902066c04df0a727328 100644 (file)
@@ -1,19 +1,20 @@
 -----BEGIN PGP SIGNED MESSAGE-----
 Hash: SHA1
 
-MD5 0a90108fa1709e4a604403cf9774717e ChangeLog 8159
+MD5 d5ed67b2650172c234c5f9afe124177e ChangeLog 8330
 MD5 6f859fa9957d5cbc362d55aa098dfd0b files/digest-psmisc-21.6 63
 MD5 6fa1579d289a6c34d485651937fc1cc0 files/digest-psmisc-21.8 63
 MD5 70563076a6e89ee1471085d19884f8c5 files/psmisc-21.6-nonls.patch 388
 MD5 c02f21e37725ecf3815688b08fb8606a files/psmisc-21.6-scanf.patch 1860
 MD5 b82b550c4133bb8a25ab43316ca04fc4 files/psmisc-21.6-selinux.diff.bz2 7709
+MD5 2dbf220a6cff3180162434cb4ad6a4b1 files/psmisc-21.8-ipv6.patch 13017
 MD5 9a09f8d531c582e78977dbfd96edc1f2 metadata.xml 164
 MD5 1166d8aabd3561f467db2ee4d10fe2f8 psmisc-21.6.ebuild 1274
-MD5 561a3448a607bde4ef140160eae55b86 psmisc-21.8.ebuild 1075
+MD5 f3ef3a517b7b6b72a1922cede2ac0e9a psmisc-21.8.ebuild 1169
 -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v1.4.2 (GNU/Linux)
 
-iD8DBQFDfSTnJ+ChZlpDtAoRAhfAAJ4pcCsh1yINdUSK6DcqhjmqOpfzVACbBpPh
-/q//eCVbaauC+clU2Ctzu6s=
-=u58v
+iD8DBQFDgpLVgIKl8Uu19MoRAmbPAJ9hyiAfi3xNV8zHpy7oodZ5SRul9ACeLpsj
+ng7ZZTfyvTIlJ1ZSB2tbzS8=
+=E0Ks
 -----END PGP SIGNATURE-----
diff --git a/sys-process/psmisc/files/psmisc-21.8-ipv6.patch b/sys-process/psmisc/files/psmisc-21.8-ipv6.patch
new file mode 100644 (file)
index 0000000..074f684
--- /dev/null
@@ -0,0 +1,418 @@
+http://bugs.gentoo.org/113212
+
+--- src/fuser.c
++++ src/fuser.c
+@@ -66,6 +66,7 @@ static dev_t get_netdev(void);
+ int parse_mount(struct names *this_name, struct device_list **dev_list);
+ static void add_device(struct device_list **dev_list, struct names  *this_name, dev_t device);
+ void scan_mount_devices(const opt_type opts, struct mountdev_list **mount_devices);
++void scan_unixsockets(struct unixsocket_list **unixsocket_head);
+ #ifdef DEBUG
+ static void debug_match_lists(struct names *names_head, struct inode_list *ino_head, struct device_list *dev_head);
+ #endif
+@@ -94,8 +95,10 @@ static void usage (const char *errormsg)
+     "    -u        display user IDs\n"
+     "    -v        verbose output\n"
+     "    -V        display version information\n"
++#ifdef WITH_IPV6
+     "    -4        search IPv4 sockets only\n"
+     "    -6        search IPv6 sockets only\n"
++#endif
+     "    -         reset options\n\n"
+     "  udp/tcp names: [local_port][,[rmt_host][,[rmt_port]]]\n\n"));
+   exit (1);
+@@ -228,6 +231,7 @@ static void add_ip_conn(struct ip_connec
+       *ip_list = ip_tmp;
+ }
+ 
++#ifdef WITH_IPV6
+ static void add_ip6_conn(struct ip6_connections **ip_list, const char *protocol, struct names *this_name, const int lcl_port, const int rmt_port, struct in6_addr rmt_address)
+ {
+       struct ip6_connections *ip_tmp, *ip_head;
+@@ -244,6 +248,7 @@ static void add_ip6_conn(struct ip6_conn
+ 
+       *ip_list = ip_tmp;
+ }
++#endif
+ 
+ static void add_matched_proc(struct names *name_list, const pid_t pid, const uid_t uid, const char access)
+ {
+@@ -322,6 +329,19 @@ int parse_file(struct names *this_name, 
+       return 0;
+ }
+ 
++int parse_unixsockets(struct names *this_name, struct inode_list **ino_list, struct unixsocket_list *sun_head)
++{
++      struct unixsocket_list *sun_tmp;
++
++      for (sun_tmp = sun_head; sun_tmp != NULL ; sun_tmp = sun_tmp->next)
++      {
++              if (strcmp(this_name->filename, sun_tmp->sun_name) == 0) {
++                      add_inode(ino_list, this_name, sun_tmp->dev, sun_tmp->inode);
++              }
++      }
++      return 0;
++}
++
+ int parse_mounts(struct names *this_name, struct mountdev_list *mounts, struct device_list **dev_list, const char opts) 
+ {
+       struct stat st;
+@@ -347,7 +369,11 @@ int parse_mounts(struct names *this_name
+       return 0;
+ }
+ 
++#ifdef WITH_IPV6
+ int parse_inet(struct names *this_name, const int ipv6_only, const int ipv4_only, struct ip_connections **ip_list, struct ip6_connections **ip6_list)
++#else
++int parse_inet(struct names *this_name, struct ip_connections **ip_list)
++#endif
+ {
+       struct addrinfo *res, *resptr;
+       struct addrinfo hints;
+@@ -355,7 +381,9 @@ int parse_inet(struct names *this_name, 
+       char *lcl_port_str, *rmt_addr_str, *rmt_port_str, *tmpstr, *tmpstr2;
+       in_port_t lcl_port;
+       struct sockaddr_in *sin;
++#ifdef WITH_IPV6
+       struct sockaddr_in6 *sin6;
++#endif
+       char hostspec[100];
+       char *protocol;
+       int i;
+@@ -402,12 +430,16 @@ int parse_inet(struct names *this_name, 
+       /*printf("parsed to lp %s rh %s rp %s\n", lcl_port_str, rmt_addr_str, rmt_port_str);*/
+ 
+       memset(&hints, 0, sizeof(hints));
++#ifdef WITH_IPV6
+       if (ipv6_only) {
+               hints.ai_family = PF_INET6;
+       } else if (ipv4_only) {
+                       hints.ai_family = PF_INET;
+               } else 
+                       hints.ai_family = PF_UNSPEC;
++#else
++      hints.ai_family = PF_INET;
++#endif
+       if (strcmp(protocol, "tcp") == 0)
+               hints.ai_socktype = SOCK_STREAM;
+       else
+@@ -428,9 +460,11 @@ int parse_inet(struct names *this_name, 
+                       case AF_INET:
+                               lcl_port = ((struct sockaddr_in*)(res->ai_addr))->sin_port;
+                               break;
++#ifdef WITH_IPV6
+                       case AF_INET6:
+                               lcl_port = ((struct sockaddr_in6*)(res->ai_addr))->sin6_port;
+                               break;
++#endif
+                       default:
+                               fprintf(stderr, _("Unknown local port AF %d\n"), res->ai_family);
+                               freeaddrinfo(res);
+@@ -442,7 +476,9 @@ int parse_inet(struct names *this_name, 
+       res = NULL;
+       if (rmt_addr_str == NULL && rmt_port_str == NULL) {
+               add_ip_conn(ip_list, protocol, this_name, ntohs(lcl_port), 0, INADDR_ANY);
++#ifdef WITH_IPV6
+               add_ip6_conn(ip6_list, protocol,this_name, ntohs(lcl_port), 0, in6addr_any);
++#endif
+               return 0;
+       } else {
+               /* Resolve remote address and port */
+@@ -453,10 +489,12 @@ int parse_inet(struct names *this_name, 
+                                               sin = (struct sockaddr_in*)resptr->ai_addr;
+                                               add_ip_conn(ip_list, protocol, this_name, ntohs(lcl_port), ntohs(sin->sin_port), sin->sin_addr.s_addr);
+                                       break;
++#ifdef WITH_IPV6
+                               case AF_INET6:
+                                       sin6 = (struct sockaddr_in6*)resptr->ai_addr;
+                                               add_ip6_conn(ip6_list, protocol, this_name, ntohs(lcl_port), ntohs(sin6->sin6_port), sin6->sin6_addr);
+                                       break;
++#endif
+                               }
+                       } /*while */
+                       return 0;
+@@ -481,7 +519,7 @@ void find_net_sockets(struct inode_list 
+               return ;
+ 
+       if ( (fp = fopen(pathname, "r")) == NULL) {
+-              fprintf(stderr, _("Cannot open protocol file: %s"), strerror(errno));
++              fprintf(stderr, _("Cannot open protocol file \"%s\": %s"), pathname,strerror(errno));
+               return;
+       }
+       while (fgets(line, BUFSIZ, fp) != NULL) {
+@@ -512,6 +550,7 @@ void find_net_sockets(struct inode_list 
+       return ;
+ }
+ 
++#ifdef WITH_IPV6
+ void find_net6_sockets(struct inode_list **ino_list, struct ip6_connections *conn_list, const char *protocol, const dev_t netdev)
+ {
+       FILE *fp;
+@@ -565,38 +606,48 @@ void find_net6_sockets(struct inode_list
+               }
+       }
+ }
++#endif
+ 
+ int main(int argc, char *argv[])
+ {
+       opt_type opts; 
+       int sig_number;
++#ifdef WITH_IPV6
+       int ipv4_only, ipv6_only;
++#endif
+       unsigned char default_namespace = NAMESPACE_FILE;
+       struct mountdev_list *mount_devices = NULL;
+       struct device_list *match_devices = NULL;
++      struct unixsocket_list *unixsockets = NULL;
+ 
+       dev_t netdev;
+       struct ip_connections *tcp_connection_list = NULL;
+       struct ip_connections *udp_connection_list = NULL;
++#ifdef WITH_IPV6
+       struct ip6_connections *tcp6_connection_list = NULL;
+       struct ip6_connections *udp6_connection_list = NULL;
++#endif
+       struct inode_list *match_inodes = NULL;
+       struct names *names_head, *this_name, *names_tail;
+-      int optc, option;
++      int optc;
++      char *option;
+       char *nsptr;
+ 
++#ifdef WITH_IPV6
+       ipv4_only = ipv6_only = 0;
++#endif
+       names_head = this_name = names_tail = NULL;
+       opts = 0;
+       sig_number = SIGKILL;
+ 
+       netdev = get_netdev();
+       scan_mount_devices(opts, &mount_devices);
++      scan_unixsockets(&unixsockets);
+ 
+       /* getopt doesnt like things like -SIGBLAH */
+       for(optc = 1; optc < argc; optc++) {
+               if (argv[optc][0] == '-') { /* its an option */
+-                      option=argv[optc][1];
++                      option=argv[optc] + 1;
+                       if (argv[optc][1] == '-') { /* its a long option */
+                               if (argv[optc][2] == '\0') {
+                                       continue;
+@@ -604,13 +655,15 @@ int main(int argc, char *argv[])
+                               /* FIXME longopts */
+                               continue;
+                       }
+-                      switch(argv[optc][1]) {
++                      while (*option) switch(*option++) {
++#ifdef WITH_IPV6
+                               case '4':
+                                       ipv4_only = 1;
+                                       break;
+                               case '6':
+                                       ipv6_only = 1;
+                                       break;
++#endif
+                               case 'a':
+                                       opts |= OPT_ALLFILES;
+                                       break;
+@@ -662,8 +715,8 @@ int main(int argc, char *argv[])
+                                       print_version();
+                                       return 0;
+                               default:
+-                                      if ( isupper(argv[optc][1]) || isdigit(argv[optc][1])) {
+-                                              sig_number = get_signal(argv[optc]+1,"fuser");
++                                      if ( isupper(*option) || isdigit(*option) ) {
++                                              sig_number = get_signal(option,"fuser");
+                                               break;
+                                       }
+                                       fprintf(stderr,"%s: Invalid option %c\n",argv[0] , argv[optc][1]);
+@@ -703,15 +756,24 @@ int main(int argc, char *argv[])
+               switch(this_name->name_space) {
+                       case NAMESPACE_TCP:
+                               asprintf(&(this_name->filename), "%s/tcp", argv[optc]);
++#ifdef WITH_IPV6
+                               parse_inet(this_name, ipv4_only, ipv6_only, &tcp_connection_list, &tcp6_connection_list);
++#else
++                              parse_inet(this_name, &tcp_connection_list);
++#endif
+                               break;
+                       case NAMESPACE_UDP:
+                               asprintf(&(this_name->filename), "%s/udp", argv[optc]);
++#ifdef WITH_IPV6
+                               parse_inet(this_name, ipv4_only, ipv6_only, &tcp_connection_list, &tcp6_connection_list);
++#else
++                              parse_inet(this_name, &tcp_connection_list);
++#endif
+                               break;
+                       default: /* FILE */
+                               this_name->filename = strdup(argv[optc]);
+                                       parse_file(this_name, &match_inodes);
++                                      parse_unixsockets(this_name, &match_inodes, unixsockets);
+                               if (opts & OPT_MOUNTPOINT || opts & OPT_MOUNTS)
+                                       parse_mounts(this_name, mount_devices, &match_devices, opts);
+                               break;
+@@ -733,13 +795,16 @@ int main(int argc, char *argv[])
+               if (opts & OPT_ALLFILES)
+                       usage(_("all option cannot be used with silent option."));
+       }
++#ifdef WITH_IPV6
+       if (ipv4_only && ipv6_only)
+               usage(_("You cannot search for only IPv4 and only IPv6 sockets at the same time"));
+       if (!ipv4_only) {
++#endif
+               if (tcp_connection_list != NULL)
+                       find_net_sockets(&match_inodes, tcp_connection_list, "tcp",netdev);
+               if (udp_connection_list != NULL)
+                       find_net_sockets(&match_inodes, udp_connection_list, "udp",netdev);
++#ifdef WITH_IPV6
+       }
+       if (!ipv6_only) {
+               if (tcp6_connection_list != NULL)
+@@ -747,6 +812,7 @@ int main(int argc, char *argv[])
+               if (udp6_connection_list != NULL)
+                       find_net6_sockets(&match_inodes,  udp6_connection_list, "udp",netdev);
+       }
++#endif
+ #ifdef DEBUG
+       debug_match_lists(names_head, match_inodes, match_devices);
+ #endif
+@@ -761,25 +827,27 @@ static int print_matches(struct names *n
+ {
+       struct names *nptr;
+       struct procs *pptr;
+-      char first;
+-      int len;
++      char head = 0;
++      char first = 1;
++      int len = 0;
+       struct passwd *pwent = NULL;
+-      int have_match = 1;
+-      
++      int have_match = 0;
+       
+-      if (opts & OPT_VERBOSE)
+-              fprintf(stderr, _("\n%*s USER        PID ACCESS COMMAND\n"),
+-                              NAME_FIELD, "");
+       for (nptr = names_head; nptr != NULL ; nptr = nptr->next) {
+-              fprintf(stderr, "%s", nptr->filename);
+-              first = 1;
+-              len = strlen(nptr->filename);
+-              if (!(opts & OPT_VERBOSE)) {
+-                      putc(':', stderr);
+-                      len++;
++              if (nptr->matched_procs != NULL || opts & OPT_ALLFILES) {
++                      if (head == 0 && opts & OPT_VERBOSE) {
++                              fprintf(stderr, _("\n%*s USER        PID ACCESS COMMAND\n"),
++                                      NAME_FIELD, "");
++                              head = 1;
++                      }
++
++                      fprintf(stderr, "%s:", nptr->filename);
++                      len = strlen(nptr->filename) + 1;
+               }
++
++              first = 1;
+               for (pptr = nptr->matched_procs; pptr != NULL ; pptr = pptr->next) {
+-                      have_match = 0;
++                      have_match = 1;
+                       if (opts & (OPT_VERBOSE|OPT_USER)) {
+                               if (pwent == NULL || pwent->pw_uid != pptr->uid)
+                                       pwent = getpwuid(pptr->uid);
+@@ -831,13 +899,13 @@ static int print_matches(struct names *n
+                       len = 0;
+                       first = 0;
+               }
+-              if (nptr->matched_procs == NULL || !(opts & OPT_VERBOSE))
++              if (nptr->matched_procs != NULL || opts & OPT_ALLFILES)
+                       putc('\n', stderr);
+               if (opts & OPT_KILL)
+                       kill_matched_proc(nptr->matched_procs,  opts, sig_number);
+ 
+       } /* next name */
+-      return have_match;
++      return !have_match;
+ 
+ }
+ 
+@@ -960,6 +1028,44 @@ void add_mount_device(struct mountdev_li
+ }
+ 
+ /*
++ * scan_unixsockets : Create a list of Unix sockets
++ *   This list is used later for matching purposes
++ */
++void scan_unixsockets(struct unixsocket_list **unixsocket_head)
++{
++      FILE *fp;
++      char line[BUFSIZ];
++      char *scanned_path;
++      int scanned_inode;
++      struct stat st;
++      struct unixsocket_list *newsocket;
++      
++      if ( (fp = fopen("/proc/net/unix","r")) == NULL) {
++              fprintf(stderr, _("Cannot open /proc/net/unix: %s\n"),
++                              strerror(errno));
++              return;
++      }
++      while (fgets(line, BUFSIZ, fp) != NULL) {
++              if (sscanf(line, "%*x: %*x %*x %*x %*x %*d %d %as",
++                      &scanned_inode,
++                      &scanned_path) != 2) 
++                      continue;
++              if (stat(scanned_path, &st) < 0) {
++                      free(scanned_path);
++                      continue;
++              }
++              if ( (newsocket = malloc(sizeof(struct unixsocket_list))) == NULL)
++                      continue;
++              newsocket->sun_name = strdup(scanned_path);
++              newsocket->inode = scanned_inode; /* st.st_ino;*/
++              newsocket->dev = 0; /* st.st_dev;*/
++              newsocket->next = *unixsocket_head;
++              *unixsocket_head = newsocket;
++      } /* while */
++
++}
++
++/*
+  * scan_mount_devices : Create a list of mount points and devices
+  *   This list is used later for matching purposes
+  */
+@@ -1001,7 +1107,7 @@ static void debug_match_lists(struct nam
+       struct inode_list *iptr;
+       struct device_list *dptr;
+ 
+-      fprintf(stderr,"Names:\n");
++      fprintf(stderr,"Specified Names:\n");
+       for (nptr=names_head; nptr!= NULL; nptr=nptr->next) 
+       {
+               fprintf(stderr, "\t%s %c\n", nptr->filename, nptr->name_space);
+@@ -1009,8 +1115,8 @@ static void debug_match_lists(struct nam
+       fprintf(stderr,"\nInodes:\n");
+       for (iptr=ino_head; iptr!=NULL; iptr=iptr->next)
+       {
+-              fprintf(stderr, "\tDev:%0lx Inode:%0lx\n",
+-                              (unsigned long)iptr->device, (unsigned long)iptr->inode);
++              fprintf(stderr, "  Dev:%0lx Inode:(%0ld) 0x%0lx => %s\n",
++                              (unsigned long)iptr->device, (unsigned long)iptr->inode, (unsigned long)iptr->inode, iptr->name->filename);
+       }
+       fprintf(stderr,"\nDevices:\n");
+       for (dptr=dev_head; dptr!=NULL; dptr=dptr->next)
+--- src/fuser.h
++++ src/fuser.h
+@@ -72,6 +72,13 @@ struct device_list {
+       struct device_list *next;
+ };
+ 
++struct unixsocket_list {
++      char *sun_name;
++      ino_t   inode;
++      dev_t   dev;
++      struct unixsocket_list *next;
++};
++
+ #define NAMESPACE_FILE 0
+ #define NAMESPACE_TCP 1
+ #define NAMESPACE_UDP 2
index dfc4228ca91d56d1114415961a9d8594dd4215b0..c9457ee22329fa6a6c2927211857ea3375017e38 100644 (file)
@@ -1,6 +1,6 @@
 # Copyright 1999-2005 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
-# $Header: /var/cvsroot/gentoo-x86/sys-process/psmisc/psmisc-21.8.ebuild,v 1.2 2005/11/18 00:48:27 pebenito Exp $
+# $Header: /var/cvsroot/gentoo-x86/sys-process/psmisc/psmisc-21.8.ebuild,v 1.3 2005/11/22 03:36:44 vapier Exp $
 
 inherit eutils
 
@@ -11,7 +11,7 @@ SRC_URI="mirror://sourceforge/psmisc/${P}.tar.gz"
 LICENSE="GPL-2"
 SLOT="0"
 KEYWORDS="~alpha ~amd64 ~arm ~hppa ~ia64 ~m68k ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc ~x86"
-IUSE="nls selinux"
+IUSE="ipv6 nls selinux"
 
 RDEPEND=">=sys-libs/ncurses-5.2-r2
        selinux? ( sys-libs/libselinux )"
@@ -22,6 +22,8 @@ DEPEND="${RDEPEND}
 src_unpack() {
        unpack ${A}
        cd "${S}"
+       epatch "${FILESDIR}"/${P}-ipv6.patch
+       use ipv6 && echo '#define HAVE_IPV6' >> config.h.in
        epunt_cxx #73632
 }