diff options
author | Keith M Wesolowski <wesolows@foobazco.org> | 2014-09-18 18:03:35 +0000 |
---|---|---|
committer | Keith M Wesolowski <wesolows@foobazco.org> | 2014-09-18 18:13:40 +0000 |
commit | 1b835011401c6664bbde117b07a1735e0aaf2c74 (patch) | |
tree | 37c48cb34bed0b871f37dd9c0e7ed4d20e6a5c8c | |
parent | 728438d524c6ee232871b4af59d1660e84959828 (diff) | |
download | illumos-joyent-1b835011401c6664bbde117b07a1735e0aaf2c74.tar.gz |
OS-3361 sockets created via t_open/t_bind not shown by pfiles20140918
Reviewed by: Robert Mustacchi <rm@joyent.com>
-rw-r--r-- | usr/src/cmd/ptools/pfiles/pfiles.c | 30 |
1 files changed, 20 insertions, 10 deletions
diff --git a/usr/src/cmd/ptools/pfiles/pfiles.c b/usr/src/cmd/ptools/pfiles/pfiles.c index d03661b317..8e09ef534b 100644 --- a/usr/src/cmd/ptools/pfiles/pfiles.c +++ b/usr/src/cmd/ptools/pfiles/pfiles.c @@ -271,15 +271,14 @@ show_file(void *data, prfdinfo_t *info) (mode & S_IFMT) == S_IFDOOR); if (Pstate(Pr) != PS_DEAD) { - char *dev; + char *dev = NULL; if ((mode & S_IFMT) == S_IFSOCK) dosocket(Pr, info->pr_fd); else if ((mode & S_IFMT) == S_IFIFO) dofifo(Pr, info->pr_fd); - if ((mode & S_IFMT) == S_IFCHR && - (dev = strrchr(info->pr_path, ':')) != NULL) { + if ((mode & S_IFMT) == S_IFCHR) { /* * There's no elegant way to determine * if a character device supports TLI, @@ -291,11 +290,20 @@ show_file(void *data, prfdinfo_t *info) "tcp", "tcp6", "udp", "udp6", NULL }; - dev++; /* skip past the `:' */ - for (i = 0; tlidevs[i] != NULL; i++) { - if (strcmp(dev, tlidevs[i]) == 0) { - dotli(Pr, info->pr_fd); - break; + /* global zone: /devices paths */ + dev = strrchr(info->pr_path, ':'); + /* also check the /dev path for zones */ + if (dev == NULL) + dev = strrchr(info->pr_path, '/'); + if (dev != NULL) { + dev++; /* skip past the `:' */ + + for (i = 0; tlidevs[i] != NULL; i++) { + if (strcmp(dev, tlidevs[i]) == + 0) { + dotli(Pr, info->pr_fd); + break; + } } } } @@ -797,9 +805,11 @@ dotli(struct ps_prochandle *Pr, int fd) strcmd.sc_cmd = TI_GETMYNAME; if (pr_ioctl(Pr, fd, _I_CMD, &strcmd, sizeof (strcmd)) == 0) - show_sockaddr("sockname", (void *)&strcmd.sc_buf, 0); + show_sockaddr("sockname", (void *)&strcmd.sc_buf, + (size_t)strcmd.sc_len); strcmd.sc_cmd = TI_GETPEERNAME; if (pr_ioctl(Pr, fd, _I_CMD, &strcmd, sizeof (strcmd)) == 0) - show_sockaddr("peername", (void *)&strcmd.sc_buf, 0); + show_sockaddr("peername", (void *)&strcmd.sc_buf, + (size_t)strcmd.sc_len); } |