summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKeith M Wesolowski <wesolows@foobazco.org>2014-09-18 18:03:35 +0000
committerKeith M Wesolowski <wesolows@foobazco.org>2014-09-18 18:13:40 +0000
commit1b835011401c6664bbde117b07a1735e0aaf2c74 (patch)
tree37c48cb34bed0b871f37dd9c0e7ed4d20e6a5c8c
parent728438d524c6ee232871b4af59d1660e84959828 (diff)
downloadillumos-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.c30
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);
}