|
Packit |
6f02de |
/*
|
|
Packit |
6f02de |
* print.c - common print support functions for lsof
|
|
Packit |
6f02de |
*/
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
/*
|
|
Packit |
6f02de |
* Copyright 1994 Purdue Research Foundation, West Lafayette, Indiana
|
|
Packit |
6f02de |
* 47907. All rights reserved.
|
|
Packit |
6f02de |
*
|
|
Packit |
6f02de |
* Written by Victor A. Abell
|
|
Packit |
6f02de |
*
|
|
Packit |
6f02de |
* This software is not subject to any license of the American Telephone
|
|
Packit |
6f02de |
* and Telegraph Company or the Regents of the University of California.
|
|
Packit |
6f02de |
*
|
|
Packit |
6f02de |
* Permission is granted to anyone to use this software for any purpose on
|
|
Packit |
6f02de |
* any computer system, and to alter it and redistribute it freely, subject
|
|
Packit |
6f02de |
* to the following restrictions:
|
|
Packit |
6f02de |
*
|
|
Packit |
6f02de |
* 1. Neither the authors nor Purdue University are responsible for any
|
|
Packit |
6f02de |
* consequences of the use of this software.
|
|
Packit |
6f02de |
*
|
|
Packit |
6f02de |
* 2. The origin of this software must not be misrepresented, either by
|
|
Packit |
6f02de |
* explicit claim or by omission. Credit to the authors and Purdue
|
|
Packit |
6f02de |
* University must appear in documentation and sources.
|
|
Packit |
6f02de |
*
|
|
Packit |
6f02de |
* 3. Altered versions must be plainly marked as such, and must not be
|
|
Packit |
6f02de |
* misrepresented as being the original software.
|
|
Packit |
6f02de |
*
|
|
Packit |
6f02de |
* 4. This notice may not be removed or altered.
|
|
Packit |
6f02de |
*/
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#ifndef lint
|
|
Packit |
6f02de |
static char copyright[] =
|
|
Packit |
6f02de |
"@(#) Copyright 1994 Purdue Research Foundation.\nAll rights reserved.\n";
|
|
Packit |
6f02de |
static char *rcsid = "$Id: print.c,v 1.56 2018/02/14 14:20:14 abe Exp $";
|
|
Packit |
6f02de |
#endif
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#include "lsof.h"
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
/*
|
|
Packit |
6f02de |
* Local definitions, structures and function prototypes
|
|
Packit |
6f02de |
*/
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#define HCINC 64 /* host cache size increase chunk */
|
|
Packit |
6f02de |
#define PORTHASHBUCKETS 128 /* port hash bucket count
|
|
Packit |
6f02de |
* !!MUST BE A POWER OF 2!! */
|
|
Packit |
6f02de |
#define PORTTABTHRESH 10 /* threshold at which we will switch
|
|
Packit |
6f02de |
* from using getservbyport() to
|
|
Packit |
6f02de |
* getservent() -- see lkup_port()
|
|
Packit |
6f02de |
* and fill_porttab() */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
struct hostcache {
|
|
Packit |
6f02de |
unsigned char a[MAX_AF_ADDR]; /* numeric address */
|
|
Packit |
6f02de |
int af; /* address family -- e.g., AF_INET
|
|
Packit |
6f02de |
* or AF_INET6 */
|
|
Packit |
6f02de |
char *name; /* name */
|
|
Packit |
6f02de |
};
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
struct porttab {
|
|
Packit |
6f02de |
int port;
|
|
Packit |
6f02de |
MALLOC_S nl; /* name length (excluding '\0') */
|
|
Packit |
6f02de |
int ss; /* service name status, 0 = lookup not
|
|
Packit |
6f02de |
* yet performed */
|
|
Packit |
6f02de |
char *name;
|
|
Packit |
6f02de |
struct porttab *next;
|
|
Packit |
6f02de |
};
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(HASNORPC_H)
|
|
Packit |
6f02de |
static struct porttab **Pth[2] = { NULL, NULL };
|
|
Packit |
6f02de |
/* port hash buckets:
|
|
Packit |
6f02de |
* Pth[0] for TCP service names
|
|
Packit |
6f02de |
* Pth[1] for UDP service names
|
|
Packit |
6f02de |
*/
|
|
Packit |
6f02de |
#else /* !defined(HASNORPC_H) */
|
|
Packit |
6f02de |
static struct porttab **Pth[4] = { NULL, NULL, NULL, NULL };
|
|
Packit |
6f02de |
/* port hash buckets:
|
|
Packit |
6f02de |
* Pth[0] for TCP service names
|
|
Packit |
6f02de |
* Pth[1] for UDP service names
|
|
Packit |
6f02de |
* Pth[2] for TCP portmap info
|
|
Packit |
6f02de |
* Pth[3] for UDP portmap info
|
|
Packit |
6f02de |
*/
|
|
Packit |
6f02de |
#endif /* defined(HASNORPC_H) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#define HASHPORT(p) (((((int)(p)) * 31415) >> 3) & (PORTHASHBUCKETS - 1))
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if !defined(HASNORPC_H)
|
|
Packit |
6f02de |
_PROTOTYPE(static void fill_portmap,(void));
|
|
Packit |
6f02de |
_PROTOTYPE(static void update_portmap,(struct porttab *pt, char *pn));
|
|
Packit |
6f02de |
#endif /* !defined(HASNORPC_H) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
_PROTOTYPE(static void fill_porttab,(void));
|
|
Packit |
6f02de |
_PROTOTYPE(static char *lkup_port,(int p, int pr, int src));
|
|
Packit |
6f02de |
_PROTOTYPE(static char *lkup_svcnam,(int h, int p, int pr, int ss));
|
|
Packit |
6f02de |
_PROTOTYPE(static int printinaddr,(void));
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
/*
|
|
Packit |
6f02de |
* endnm() - locate end of Namech
|
|
Packit |
6f02de |
*/
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
char *
|
|
Packit |
6f02de |
endnm(sz)
|
|
Packit |
6f02de |
size_t *sz; /* returned remaining size */
|
|
Packit |
6f02de |
{
|
|
Packit |
6f02de |
register char *s;
|
|
Packit |
6f02de |
register size_t tsz;
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
for (s = Namech, tsz = Namechl; *s; s++, tsz--)
|
|
Packit |
6f02de |
;
|
|
Packit |
6f02de |
*sz = tsz;
|
|
Packit |
6f02de |
return(s);
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if !defined(HASNORPC_H)
|
|
Packit |
6f02de |
/*
|
|
Packit |
6f02de |
* fill_portmap() -- fill the RPC portmap program name table via a conversation
|
|
Packit |
6f02de |
* with the portmapper
|
|
Packit |
6f02de |
*
|
|
Packit |
6f02de |
* The following copyright notice acknowledges that this function was adapted
|
|
Packit |
6f02de |
* from getrpcportnam() of the source code of the OpenBSD netstat program.
|
|
Packit |
6f02de |
*/
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
/*
|
|
Packit |
6f02de |
* Copyright (c) 1983, 1988, 1993
|
|
Packit |
6f02de |
* The Regents of the University of California. All rights reserved.
|
|
Packit |
6f02de |
*
|
|
Packit |
6f02de |
* Redistribution and use in source and binary forms, with or without
|
|
Packit |
6f02de |
* modification, are permitted provided that the following conditions
|
|
Packit |
6f02de |
* are met:
|
|
Packit |
6f02de |
* 1. Redistributions of source code must retain the above copyright
|
|
Packit |
6f02de |
* notice, this list of conditions and the following disclaimer.
|
|
Packit |
6f02de |
* 2. Redistributions in binary form must reproduce the above copyright
|
|
Packit |
6f02de |
* notice, this list of conditions and the following disclaimer in the
|
|
Packit |
6f02de |
* documentation and/or other materials provided with the distribution.
|
|
Packit |
6f02de |
* 3. All advertising materials mentioning features or use of this software
|
|
Packit |
6f02de |
* must display the following acknowledgement:
|
|
Packit |
6f02de |
* This product includes software developed by the University of
|
|
Packit |
6f02de |
* California, Berkeley and its contributors.
|
|
Packit |
6f02de |
* 4. Neither the name of the University nor the names of its contributors
|
|
Packit |
6f02de |
* may be used to endorse or promote products derived from this software
|
|
Packit |
6f02de |
* without specific prior written permission.
|
|
Packit |
6f02de |
*
|
|
Packit |
6f02de |
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
|
Packit |
6f02de |
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
Packit |
6f02de |
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
Packit |
6f02de |
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
|
Packit |
6f02de |
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
Packit |
6f02de |
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
Packit |
6f02de |
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
Packit |
6f02de |
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
Packit |
6f02de |
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
Packit |
6f02de |
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
Packit |
6f02de |
* SUCH DAMAGE.
|
|
Packit |
6f02de |
*/
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
static void
|
|
Packit |
6f02de |
fill_portmap()
|
|
Packit |
6f02de |
{
|
|
Packit |
6f02de |
char buf[128], *cp, *nm;
|
|
Packit |
6f02de |
CLIENT *c;
|
|
Packit |
6f02de |
int h, port, pr;
|
|
Packit |
6f02de |
MALLOC_S nl;
|
|
Packit |
6f02de |
struct pmaplist *p = (struct pmaplist *)NULL;
|
|
Packit |
6f02de |
struct porttab *pt;
|
|
Packit |
6f02de |
struct rpcent *r;
|
|
Packit |
6f02de |
struct TIMEVAL_LSOF tm;
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if !defined(CAN_USE_CLNT_CREATE)
|
|
Packit |
6f02de |
struct hostent *he;
|
|
Packit |
6f02de |
struct sockaddr_in ia;
|
|
Packit |
6f02de |
int s = RPC_ANYSOCK;
|
|
Packit |
6f02de |
#endif /* !defined(CAN_USE_CLNT_CREATE) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
/*
|
|
Packit |
6f02de |
* Construct structures for communicating with the portmapper.
|
|
Packit |
6f02de |
*/
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if !defined(CAN_USE_CLNT_CREATE)
|
|
Packit |
6f02de |
zeromem(&ia, sizeof(ia));
|
|
Packit |
6f02de |
ia.sin_family = AF_INET;
|
|
Packit |
6f02de |
if ((he = gethostbyname("localhost")))
|
|
Packit |
6f02de |
MEMMOVE((caddr_t)&ia.sin_addr, he->h_addr, he->h_length);
|
|
Packit |
6f02de |
ia.sin_port = htons(PMAPPORT);
|
|
Packit |
6f02de |
#endif /* !defined(CAN_USE_CLNT_CREATE) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
tm.tv_sec = 60;
|
|
Packit |
6f02de |
tm.tv_usec = 0;
|
|
Packit |
6f02de |
/*
|
|
Packit |
6f02de |
* Get an RPC client handle. Then ask for a dump of the port map.
|
|
Packit |
6f02de |
*/
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(CAN_USE_CLNT_CREATE)
|
|
Packit |
6f02de |
if (!(c = clnt_create("localhost", PMAPPROG, PMAPVERS, "tcp")))
|
|
Packit |
6f02de |
#else /* !defined(CAN_USE_CLNT_CREATE) */
|
|
Packit |
6f02de |
if (!(c = clnttcp_create(&ia, PMAPPROG, PMAPVERS, &s, 0, 0)))
|
|
Packit |
6f02de |
#endif /* defined(CAN_USE_CLNT_CREATE) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
return;
|
|
Packit |
6f02de |
if (clnt_call(c, PMAPPROC_DUMP, XDR_VOID, NULL, XDR_PMAPLIST,
|
|
Packit |
6f02de |
(caddr_t)&p, tm)
|
|
Packit |
6f02de |
!= RPC_SUCCESS) {
|
|
Packit |
6f02de |
clnt_destroy(c);
|
|
Packit |
6f02de |
return;
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
/*
|
|
Packit |
6f02de |
* Loop through the port map dump, creating portmap table entries from TCP
|
|
Packit |
6f02de |
* and UDP members.
|
|
Packit |
6f02de |
*/
|
|
Packit |
6f02de |
for (; p; p = p->pml_next) {
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
/*
|
|
Packit |
6f02de |
* Determine the port map entry's protocol; ignore all but TCP and UDP.
|
|
Packit |
6f02de |
*/
|
|
Packit |
6f02de |
if (p->pml_map.pm_prot == IPPROTO_TCP)
|
|
Packit |
6f02de |
pr = 2;
|
|
Packit |
6f02de |
else if (p->pml_map.pm_prot == IPPROTO_UDP)
|
|
Packit |
6f02de |
pr = 3;
|
|
Packit |
6f02de |
else
|
|
Packit |
6f02de |
continue;
|
|
Packit |
6f02de |
/*
|
|
Packit |
6f02de |
* See if there's already a portmap entry for this port. If there is,
|
|
Packit |
6f02de |
* ignore this entry.
|
|
Packit |
6f02de |
*/
|
|
Packit |
6f02de |
h = HASHPORT((port = (int)p->pml_map.pm_port));
|
|
Packit |
6f02de |
for (pt = Pth[pr][h]; pt; pt = pt->next) {
|
|
Packit |
6f02de |
if (pt->port == port)
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
if (pt)
|
|
Packit |
6f02de |
continue;
|
|
Packit |
6f02de |
/*
|
|
Packit |
6f02de |
* Save the registration name or number.
|
|
Packit |
6f02de |
*/
|
|
Packit |
6f02de |
cp = (char *)NULL;
|
|
Packit |
6f02de |
if ((r = (struct rpcent *)getrpcbynumber(p->pml_map.pm_prog))) {
|
|
Packit |
6f02de |
if (r->r_name && strlen(r->r_name))
|
|
Packit |
6f02de |
cp = r->r_name;
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
if (!cp) {
|
|
Packit |
6f02de |
(void) snpf(buf, sizeof(buf), "%lu",
|
|
Packit |
6f02de |
(unsigned long)p->pml_map.pm_prog);
|
|
Packit |
6f02de |
cp = buf;
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
if (!strlen(cp))
|
|
Packit |
6f02de |
continue;
|
|
Packit |
6f02de |
/*
|
|
Packit |
6f02de |
* Allocate space for the portmap name entry and copy it there.
|
|
Packit |
6f02de |
*/
|
|
Packit |
6f02de |
if (!(nm = mkstrcpy(cp, &nl))) {
|
|
Packit |
6f02de |
(void) fprintf(stderr,
|
|
Packit |
6f02de |
"%s: can't allocate space for portmap entry: ", Pn);
|
|
Packit |
6f02de |
safestrprt(cp, stderr, 1);
|
|
Packit |
6f02de |
Exit(1);
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
if (!nl) {
|
|
Packit |
6f02de |
(void) free((FREE_P *)nm);
|
|
Packit |
6f02de |
continue;
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
/*
|
|
Packit |
6f02de |
* Allocate and fill a porttab struct entry for the portmap table.
|
|
Packit |
6f02de |
* Link it to the head of its hash bucket, and make it the new head.
|
|
Packit |
6f02de |
*/
|
|
Packit |
6f02de |
if (!(pt = (struct porttab *)malloc(sizeof(struct porttab)))) {
|
|
Packit |
6f02de |
(void) fprintf(stderr,
|
|
Packit |
6f02de |
"%s: can't allocate porttab entry for portmap: ", Pn);
|
|
Packit |
6f02de |
safestrprt(nm, stderr, 1);
|
|
Packit |
6f02de |
Exit(1);
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
pt->name = nm;
|
|
Packit |
6f02de |
pt->nl = nl;
|
|
Packit |
6f02de |
pt->port = port;
|
|
Packit |
6f02de |
pt->next = Pth[pr][h];
|
|
Packit |
6f02de |
pt->ss = 0;
|
|
Packit |
6f02de |
Pth[pr][h] = pt;
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
clnt_destroy(c);
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
#endif /* !defined(HASNORPC_H) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
/*
|
|
Packit |
6f02de |
* fill_porttab() -- fill the TCP and UDP service name port table with a
|
|
Packit |
6f02de |
* getservent() scan
|
|
Packit |
6f02de |
*/
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
static void
|
|
Packit |
6f02de |
fill_porttab()
|
|
Packit |
6f02de |
{
|
|
Packit |
6f02de |
int h, p, pr;
|
|
Packit |
6f02de |
MALLOC_S nl;
|
|
Packit |
6f02de |
char *nm;
|
|
Packit |
6f02de |
struct porttab *pt;
|
|
Packit |
6f02de |
struct servent *se;
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
(void) endservent();
|
|
Packit |
6f02de |
/*
|
|
Packit |
6f02de |
* Scan the services data base for TCP and UDP entries that have a non-null
|
|
Packit |
6f02de |
* name associated with them.
|
|
Packit |
6f02de |
*/
|
|
Packit |
6f02de |
(void) setservent(1);
|
|
Packit |
6f02de |
while ((se = getservent())) {
|
|
Packit |
6f02de |
if (!se->s_name || !se->s_proto)
|
|
Packit |
6f02de |
continue;
|
|
Packit |
6f02de |
if (strcasecmp(se->s_proto, "TCP") == 0)
|
|
Packit |
6f02de |
pr = 0;
|
|
Packit |
6f02de |
else if (strcasecmp(se->s_proto, "UDP") == 0)
|
|
Packit |
6f02de |
pr = 1;
|
|
Packit |
6f02de |
else
|
|
Packit |
6f02de |
continue;
|
|
Packit |
6f02de |
if (!se->s_name || !strlen(se->s_name))
|
|
Packit |
6f02de |
continue;
|
|
Packit |
6f02de |
p = ntohs(se->s_port);
|
|
Packit |
6f02de |
/*
|
|
Packit |
6f02de |
* See if a port->service entry is already cached for this port and
|
|
Packit |
6f02de |
* prototcol. If it is, leave it alone.
|
|
Packit |
6f02de |
*/
|
|
Packit |
6f02de |
h = HASHPORT(p);
|
|
Packit |
6f02de |
for (pt = Pth[pr][h]; pt; pt = pt->next) {
|
|
Packit |
6f02de |
if (pt->port == p)
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
if (pt)
|
|
Packit |
6f02de |
continue;
|
|
Packit |
6f02de |
/*
|
|
Packit |
6f02de |
* Add a new entry to the cache for this port and protocol.
|
|
Packit |
6f02de |
*/
|
|
Packit |
6f02de |
if (!(nm = mkstrcpy(se->s_name, &nl))) {
|
|
Packit |
6f02de |
(void) fprintf(stderr,
|
|
Packit |
6f02de |
"%s: can't allocate %d bytes for port %d name: %s\n",
|
|
Packit |
6f02de |
Pn, (int)(nl + 1), p, se->s_name);
|
|
Packit |
6f02de |
Exit(1);
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
if (!nl) {
|
|
Packit |
6f02de |
(void) free((FREE_P *)nm);
|
|
Packit |
6f02de |
continue;
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
if (!(pt = (struct porttab *)malloc(sizeof(struct porttab)))) {
|
|
Packit |
6f02de |
(void) fprintf(stderr,
|
|
Packit |
6f02de |
"%s: can't allocate porttab entry for port %d: %s\n",
|
|
Packit |
6f02de |
Pn, p, se->s_name);
|
|
Packit |
6f02de |
Exit(1);
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
pt->name = nm;
|
|
Packit |
6f02de |
pt->nl = nl - 1;
|
|
Packit |
6f02de |
pt->port = p;
|
|
Packit |
6f02de |
pt->next = Pth[pr][h];
|
|
Packit |
6f02de |
pt->ss = 0;
|
|
Packit |
6f02de |
Pth[pr][h] = pt;
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
(void) endservent();
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
/*
|
|
Packit |
6f02de |
* gethostnm() - get host name
|
|
Packit |
6f02de |
*/
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
char *
|
|
Packit |
6f02de |
gethostnm(ia, af)
|
|
Packit |
6f02de |
unsigned char *ia; /* Internet address */
|
|
Packit |
6f02de |
int af; /* address family -- e.g., AF_INET
|
|
Packit |
6f02de |
* or AF_INET6 */
|
|
Packit |
6f02de |
{
|
|
Packit |
6f02de |
int al = MIN_AF_ADDR;
|
|
Packit |
6f02de |
char hbuf[256];
|
|
Packit |
6f02de |
static struct hostcache *hc = (struct hostcache *)NULL;
|
|
Packit |
6f02de |
static int hcx = 0;
|
|
Packit |
6f02de |
char *hn, *np;
|
|
Packit |
6f02de |
struct hostent *he = (struct hostent *)NULL;
|
|
Packit |
6f02de |
int i, j;
|
|
Packit |
6f02de |
MALLOC_S len;
|
|
Packit |
6f02de |
static int nhc = 0;
|
|
Packit |
6f02de |
/*
|
|
Packit |
6f02de |
* Search cache.
|
|
Packit |
6f02de |
*/
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(HASIPv6)
|
|
Packit |
6f02de |
if (af == AF_INET6)
|
|
Packit |
6f02de |
al = MAX_AF_ADDR;
|
|
Packit |
6f02de |
#endif /* defined(HASIPv6) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
for (i = 0; i < hcx; i++) {
|
|
Packit |
6f02de |
if (af != hc[i].af)
|
|
Packit |
6f02de |
continue;
|
|
Packit |
6f02de |
for (j = 0; j < al; j++) {
|
|
Packit |
6f02de |
if (ia[j] != hc[i].a[j])
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
if (j >= al)
|
|
Packit |
6f02de |
return(hc[i].name);
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
/*
|
|
Packit |
6f02de |
* If -n has been specified, construct a numeric address. Otherwise, look up
|
|
Packit |
6f02de |
* host name by address. If that fails, or if there is no name in the returned
|
|
Packit |
6f02de |
* hostent structure, construct a numeric version of the address.
|
|
Packit |
6f02de |
*/
|
|
Packit |
6f02de |
if (Fhost)
|
|
Packit |
6f02de |
he = gethostbyaddr((char *)ia, al, af);
|
|
Packit |
6f02de |
if (!he || !he->h_name) {
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(HASIPv6)
|
|
Packit |
6f02de |
if (af == AF_INET6) {
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
/*
|
|
Packit |
6f02de |
* Since IPv6 numeric addresses use `:' as a separator, enclose
|
|
Packit |
6f02de |
* them in brackets.
|
|
Packit |
6f02de |
*/
|
|
Packit |
6f02de |
hbuf[0] = '[';
|
|
Packit |
6f02de |
if (!inet_ntop(af, ia, hbuf + 1, sizeof(hbuf) - 3)) {
|
|
Packit |
6f02de |
(void) snpf(&hbuf[1], (sizeof(hbuf) - 1),
|
|
Packit |
6f02de |
"can't format IPv6 address]");
|
|
Packit |
6f02de |
} else {
|
|
Packit |
6f02de |
len = strlen(hbuf);
|
|
Packit |
6f02de |
(void) snpf(&hbuf[len], sizeof(hbuf) - len, "]");
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
} else
|
|
Packit |
6f02de |
#endif /* defined(HASIPv6) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
if (af == AF_INET)
|
|
Packit |
6f02de |
(void) snpf(hbuf, sizeof(hbuf), "%u.%u.%u.%u", ia[0], ia[1],
|
|
Packit |
6f02de |
ia[2], ia[3]);
|
|
Packit |
6f02de |
else
|
|
Packit |
6f02de |
(void) snpf(hbuf, sizeof(hbuf), "(unknown AF value: %d)", af);
|
|
Packit |
6f02de |
hn = hbuf;
|
|
Packit |
6f02de |
} else
|
|
Packit |
6f02de |
hn = (char *)he->h_name;
|
|
Packit |
6f02de |
/*
|
|
Packit |
6f02de |
* Allocate space for name and copy name to it.
|
|
Packit |
6f02de |
*/
|
|
Packit |
6f02de |
if (!(np = mkstrcpy(hn, (MALLOC_S *)NULL))) {
|
|
Packit |
6f02de |
(void) fprintf(stderr, "%s: no space for host name: ", Pn);
|
|
Packit |
6f02de |
safestrprt(hn, stderr, 1);
|
|
Packit |
6f02de |
Exit(1);
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
/*
|
|
Packit |
6f02de |
* Add address/name entry to cache. Allocate cache space in HCINC chunks.
|
|
Packit |
6f02de |
*/
|
|
Packit |
6f02de |
if (hcx >= nhc) {
|
|
Packit |
6f02de |
nhc += HCINC;
|
|
Packit |
6f02de |
len = (MALLOC_S)(nhc * sizeof(struct hostcache));
|
|
Packit |
6f02de |
if (!hc)
|
|
Packit |
6f02de |
hc = (struct hostcache *)malloc(len);
|
|
Packit |
6f02de |
else
|
|
Packit |
6f02de |
hc = (struct hostcache *)realloc((MALLOC_P *)hc, len);
|
|
Packit |
6f02de |
if (!hc) {
|
|
Packit |
6f02de |
(void) fprintf(stderr, "%s: no space for host cache\n", Pn);
|
|
Packit |
6f02de |
Exit(1);
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
hc[hcx].af = af;
|
|
Packit |
6f02de |
for (i = 0; i < al; i++) {
|
|
Packit |
6f02de |
hc[hcx].a[i] = ia[i];
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
hc[hcx++].name = np;
|
|
Packit |
6f02de |
return(np);
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
/*
|
|
Packit |
6f02de |
* lkup_port() - look up port for protocol
|
|
Packit |
6f02de |
*/
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
static char *
|
|
Packit |
6f02de |
lkup_port(p, pr, src)
|
|
Packit |
6f02de |
int p; /* port number */
|
|
Packit |
6f02de |
int pr; /* protocol index: 0 = tcp, 1 = udp */
|
|
Packit |
6f02de |
int src; /* port source: 0 = local
|
|
Packit |
6f02de |
* 1 = foreign */
|
|
Packit |
6f02de |
{
|
|
Packit |
6f02de |
int h, nh;
|
|
Packit |
6f02de |
MALLOC_S nl;
|
|
Packit |
6f02de |
char *nm, *pn;
|
|
Packit |
6f02de |
static char pb[128];
|
|
Packit |
6f02de |
static int pm = 0;
|
|
Packit |
6f02de |
struct porttab *pt;
|
|
Packit |
6f02de |
/*
|
|
Packit |
6f02de |
* If the hash buckets haven't been allocated, do so.
|
|
Packit |
6f02de |
*/
|
|
Packit |
6f02de |
if (!Pth[0]) {
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(HASNORPC_H)
|
|
Packit |
6f02de |
nh = 2;
|
|
Packit |
6f02de |
#else /* !defined(HASNORPC_H) */
|
|
Packit |
6f02de |
nh = FportMap ? 4 : 2;
|
|
Packit |
6f02de |
#endif /* defined(HASNORPC_H) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
for (h = 0; h < nh; h++) {
|
|
Packit |
6f02de |
if (!(Pth[h] = (struct porttab **)calloc(PORTHASHBUCKETS,
|
|
Packit |
6f02de |
sizeof(struct porttab *))))
|
|
Packit |
6f02de |
{
|
|
Packit |
6f02de |
(void) fprintf(stderr,
|
|
Packit |
6f02de |
"%s: can't allocate %d bytes for %s %s hash buckets\n",
|
|
Packit |
6f02de |
Pn,
|
|
Packit |
6f02de |
(int)(2 * (PORTHASHBUCKETS * sizeof(struct porttab *))),
|
|
Packit |
6f02de |
(h & 1) ? "UDP" : "TCP",
|
|
Packit |
6f02de |
(h > 1) ? "portmap" : "port");
|
|
Packit |
6f02de |
Exit(1);
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if !defined(HASNORPC_H)
|
|
Packit |
6f02de |
/*
|
|
Packit |
6f02de |
* If we're looking up program names for portmapped ports, make sure the
|
|
Packit |
6f02de |
* portmap table has been loaded.
|
|
Packit |
6f02de |
*/
|
|
Packit |
6f02de |
if (FportMap && !pm) {
|
|
Packit |
6f02de |
(void) fill_portmap();
|
|
Packit |
6f02de |
pm++;
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
#endif /* !defined(HASNORPC_H) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
/*
|
|
Packit |
6f02de |
* Hash the port and see if its name has been cached. Look for a local
|
|
Packit |
6f02de |
* port first in the portmap, if portmap searching is enabled.
|
|
Packit |
6f02de |
*/
|
|
Packit |
6f02de |
h = HASHPORT(p);
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if !defined(HASNORPC_H)
|
|
Packit |
6f02de |
if (!src && FportMap) {
|
|
Packit |
6f02de |
for (pt = Pth[pr+2][h]; pt; pt = pt->next) {
|
|
Packit |
6f02de |
if (pt->port != p)
|
|
Packit |
6f02de |
continue;
|
|
Packit |
6f02de |
if (!pt->ss) {
|
|
Packit |
6f02de |
pn = Fport ? lkup_svcnam(h, p, pr, 0) : (char *)NULL;
|
|
Packit |
6f02de |
if (!pn) {
|
|
Packit |
6f02de |
(void) snpf(pb, sizeof(pb), "%d", p);
|
|
Packit |
6f02de |
pn = pb;
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
(void) update_portmap(pt, pn);
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
return(pt->name);
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
#endif /* !defined(HASNORPC_H) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
for (pt = Pth[pr][h]; pt; pt = pt->next) {
|
|
Packit |
6f02de |
if (pt->port == p)
|
|
Packit |
6f02de |
return(pt->name);
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
/*
|
|
Packit |
6f02de |
* Search for a possible service name, unless the -P option has been specified.
|
|
Packit |
6f02de |
*
|
|
Packit |
6f02de |
* If there is no service name, return a %d conversion.
|
|
Packit |
6f02de |
*
|
|
Packit |
6f02de |
* Don't cache %d conversions; a zero port number is a %d conversion that
|
|
Packit |
6f02de |
* is represented by "*".
|
|
Packit |
6f02de |
*/
|
|
Packit |
6f02de |
pn = Fport ? lkup_svcnam(h, p, pr, 1) : (char *)NULL;
|
|
Packit |
6f02de |
if (!pn || !strlen(pn)) {
|
|
Packit |
6f02de |
if (p) {
|
|
Packit |
6f02de |
(void) snpf(pb, sizeof(pb), "%d", p);
|
|
Packit |
6f02de |
return(pb);
|
|
Packit |
6f02de |
} else
|
|
Packit |
6f02de |
return("*");
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
/*
|
|
Packit |
6f02de |
* Allocate a new porttab entry for the TCP or UDP service name.
|
|
Packit |
6f02de |
*/
|
|
Packit |
6f02de |
if (!(pt = (struct porttab *)malloc(sizeof(struct porttab)))) {
|
|
Packit |
6f02de |
(void) fprintf(stderr,
|
|
Packit |
6f02de |
"%s: can't allocate porttab entry for port %d\n", Pn, p);
|
|
Packit |
6f02de |
Exit(1);
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
/*
|
|
Packit |
6f02de |
* Allocate space for the name; copy it to the porttab entry; and link the
|
|
Packit |
6f02de |
* porttab entry to its hash bucket.
|
|
Packit |
6f02de |
*
|
|
Packit |
6f02de |
* Return a pointer to the name.
|
|
Packit |
6f02de |
*/
|
|
Packit |
6f02de |
if (!(nm = mkstrcpy(pn, &nl))) {
|
|
Packit |
6f02de |
(void) fprintf(stderr,
|
|
Packit |
6f02de |
"%s: can't allocate space for port name: ", Pn);
|
|
Packit |
6f02de |
safestrprt(pn, stderr, 1);
|
|
Packit |
6f02de |
Exit(1);
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
pt->name = nm;
|
|
Packit |
6f02de |
pt->nl = nl;
|
|
Packit |
6f02de |
pt->port = p;
|
|
Packit |
6f02de |
pt->next = Pth[pr][h];
|
|
Packit |
6f02de |
pt->ss = 0;
|
|
Packit |
6f02de |
Pth[pr][h] = pt;
|
|
Packit |
6f02de |
return(nm);
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
/*
|
|
Packit |
6f02de |
* lkup_svcnam() - look up service name for port
|
|
Packit |
6f02de |
*/
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
static char *
|
|
Packit |
6f02de |
lkup_svcnam(h, p, pr, ss)
|
|
Packit |
6f02de |
int h; /* porttab hash index */
|
|
Packit |
6f02de |
int p; /* port number */
|
|
Packit |
6f02de |
int pr; /* protocol: 0 = TCP, 1 = UDP */
|
|
Packit |
6f02de |
int ss; /* search status: 1 = Pth[pr][h]
|
|
Packit |
6f02de |
* already searched */
|
|
Packit |
6f02de |
{
|
|
Packit |
6f02de |
static int fl[PORTTABTHRESH];
|
|
Packit |
6f02de |
static int fln = 0;
|
|
Packit |
6f02de |
static int gsbp = 0;
|
|
Packit |
6f02de |
int i;
|
|
Packit |
6f02de |
struct porttab *pt;
|
|
Packit |
6f02de |
static int ptf = 0;
|
|
Packit |
6f02de |
struct servent *se;
|
|
Packit |
6f02de |
/*
|
|
Packit |
6f02de |
* Do nothing if -P has been specified.
|
|
Packit |
6f02de |
*/
|
|
Packit |
6f02de |
if (!Fport)
|
|
Packit |
6f02de |
return((char *)NULL);
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
for (;;) {
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
/*
|
|
Packit |
6f02de |
* Search service name cache, if it hasn't already been done.
|
|
Packit |
6f02de |
* Return the name of a match.
|
|
Packit |
6f02de |
*/
|
|
Packit |
6f02de |
if (!ss) {
|
|
Packit |
6f02de |
for (pt = Pth[pr][h]; pt; pt = pt->next) {
|
|
Packit |
6f02de |
if (pt->port == p)
|
|
Packit |
6f02de |
return(pt->name);
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
/*
|
|
Packit |
6f02de |
* If fill_porttab() has been called, there is no service name.
|
|
Packit |
6f02de |
*
|
|
Packit |
6f02de |
* Do PORTTABTHRES getservbport() calls, remembering the failures, so they
|
|
Packit |
6f02de |
* won't be repeated.
|
|
Packit |
6f02de |
*
|
|
Packit |
6f02de |
* After PORTABTHRESH getservbyport() calls, call fill_porttab() once,
|
|
Packit |
6f02de |
*/
|
|
Packit |
6f02de |
if (ptf)
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
if (gsbp < PORTTABTHRESH) {
|
|
Packit |
6f02de |
for (i = 0; i < fln; i++) {
|
|
Packit |
6f02de |
if (fl[i] == p)
|
|
Packit |
6f02de |
return((char *)NULL);
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
gsbp++;
|
|
Packit |
6f02de |
if ((se = getservbyport(htons(p), pr ? "udp" : "tcp")))
|
|
Packit |
6f02de |
return(se->s_name);
|
|
Packit |
6f02de |
if (fln < PORTTABTHRESH)
|
|
Packit |
6f02de |
fl[fln++] = p;
|
|
Packit |
6f02de |
return((char *)NULL);
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
(void) fill_porttab();
|
|
Packit |
6f02de |
ptf++;
|
|
Packit |
6f02de |
ss = 0;
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
return((char *)NULL);
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
/*
|
|
Packit |
6f02de |
* print_file() - print file
|
|
Packit |
6f02de |
*/
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
void
|
|
Packit |
6f02de |
print_file()
|
|
Packit |
6f02de |
{
|
|
Packit |
6f02de |
char buf[128];
|
|
Packit |
6f02de |
char *cp = (char *)NULL;
|
|
Packit |
6f02de |
dev_t dev;
|
|
Packit |
6f02de |
int devs, len;
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
if (PrPass && !Hdr) {
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
/*
|
|
Packit |
6f02de |
* Print the header line if this is the second pass and the
|
|
Packit |
6f02de |
* header hasn't already been printed.
|
|
Packit |
6f02de |
*/
|
|
Packit |
6f02de |
(void) printf("%-*.*s %*s", CmdColW, CmdColW, CMDTTL, PidColW,
|
|
Packit |
6f02de |
PIDTTL);
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(HASTASKS)
|
|
Packit |
6f02de |
if (TaskPrtTid)
|
|
Packit |
6f02de |
(void) printf(" %*s", TaskTidColW, TASKTIDTTL);
|
|
Packit |
6f02de |
if (TaskPrtCmd)
|
|
Packit |
6f02de |
(void) printf(" %-*.*s", TaskCmdColW, TaskCmdColW, TASKCMDTTL);
|
|
Packit |
6f02de |
#endif /* defined(HASTASKS) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(HASZONES)
|
|
Packit |
6f02de |
if (Fzone)
|
|
Packit |
6f02de |
(void) printf(" %-*s", ZoneColW, ZONETTL);
|
|
Packit |
6f02de |
#endif /* defined(HASZONES) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(HASSELINUX)
|
|
Packit |
6f02de |
if (Fcntx)
|
|
Packit |
6f02de |
(void) printf(" %-*s", CntxColW, CNTXTTL);
|
|
Packit |
6f02de |
#endif /* defined(HASSELINUX) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(HASPPID)
|
|
Packit |
6f02de |
if (Fppid)
|
|
Packit |
6f02de |
(void) printf(" %*s", PpidColW, PPIDTTL);
|
|
Packit |
6f02de |
#endif /* defined(HASPPID) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
if (Fpgid)
|
|
Packit |
6f02de |
(void) printf(" %*s", PgidColW, PGIDTTL);
|
|
Packit |
6f02de |
(void) printf(" %*s %*s %*s",
|
|
Packit |
6f02de |
UserColW, USERTTL,
|
|
Packit |
6f02de |
FdColW - 2, FDTTL,
|
|
Packit |
6f02de |
TypeColW, TYPETTL);
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(HASFSTRUCT)
|
|
Packit |
6f02de |
if (Fsv) {
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
# if !defined(HASNOFSADDR)
|
|
Packit |
6f02de |
if (Fsv & FSV_FA)
|
|
Packit |
6f02de |
(void) printf(" %*s", FsColW, FSTTL);
|
|
Packit |
6f02de |
# endif /* !defined(HASNOFSADDR) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
# if !defined(HASNOFSCOUNT)
|
|
Packit |
6f02de |
if (Fsv & FSV_CT)
|
|
Packit |
6f02de |
(void) printf(" %*s", FcColW, FCTTL);
|
|
Packit |
6f02de |
# endif /* !defined(HASNOFSCOUNT) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
# if !defined(HASNOFSFLAGS)
|
|
Packit |
6f02de |
if (Fsv & FSV_FG)
|
|
Packit |
6f02de |
(void) printf(" %*s", FgColW, FGTTL);
|
|
Packit |
6f02de |
# endif /* !defined(HASNOFSFLAGS) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
# if !defined(HASNOFSNADDR)
|
|
Packit |
6f02de |
if (Fsv & FSV_NI)
|
|
Packit |
6f02de |
(void) printf(" %*s", NiColW, NiTtl);
|
|
Packit |
6f02de |
# endif /* !defined(HASNOFSNADDR) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
#endif /* defined(HASFSTRUCT) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
(void) printf(" %*s", DevColW, DEVTTL);
|
|
Packit |
6f02de |
if (Foffset)
|
|
Packit |
6f02de |
(void) printf(" %*s", SzOffColW, OFFTTL);
|
|
Packit |
6f02de |
else if (Fsize)
|
|
Packit |
6f02de |
(void) printf(" %*s", SzOffColW, SZTTL);
|
|
Packit |
6f02de |
else
|
|
Packit |
6f02de |
(void) printf(" %*s", SzOffColW, SZOFFTTL);
|
|
Packit |
6f02de |
if (Fnlink)
|
|
Packit |
6f02de |
(void) printf(" %*s", NlColW, NLTTL);
|
|
Packit |
6f02de |
(void) printf(" %*s %s\n", NodeColW, NODETTL, NMTTL);
|
|
Packit |
6f02de |
Hdr++;
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
/*
|
|
Packit |
6f02de |
* Size or print the command.
|
|
Packit |
6f02de |
*/
|
|
Packit |
6f02de |
cp = (Lp->cmd && *Lp->cmd != '\0') ? Lp->cmd : "(unknown)";
|
|
Packit |
6f02de |
if (!PrPass) {
|
|
Packit |
6f02de |
len = safestrlen(cp, 2);
|
|
Packit |
6f02de |
if (CmdLim && (len > CmdLim))
|
|
Packit |
6f02de |
len = CmdLim;
|
|
Packit |
6f02de |
if (len > CmdColW)
|
|
Packit |
6f02de |
CmdColW = len;
|
|
Packit |
6f02de |
} else
|
|
Packit |
6f02de |
safestrprtn(cp, CmdColW, stdout, 2);
|
|
Packit |
6f02de |
/*
|
|
Packit |
6f02de |
* Size or print the process ID.
|
|
Packit |
6f02de |
*/
|
|
Packit |
6f02de |
if (!PrPass) {
|
|
Packit |
6f02de |
(void) snpf(buf, sizeof(buf), "%d", Lp->pid);
|
|
Packit |
6f02de |
if ((len = strlen(buf)) > PidColW)
|
|
Packit |
6f02de |
PidColW = len;
|
|
Packit |
6f02de |
} else
|
|
Packit |
6f02de |
(void) printf(" %*d", PidColW, Lp->pid);
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(HASTASKS)
|
|
Packit |
6f02de |
/*
|
|
Packit |
6f02de |
* Size or print task ID and command name.
|
|
Packit |
6f02de |
*/
|
|
Packit |
6f02de |
if (!PrPass) {
|
|
Packit |
6f02de |
if ((cp = Lp->tcmd)) {
|
|
Packit |
6f02de |
len = safestrlen(cp, 2);
|
|
Packit |
6f02de |
if (TaskCmdLim && (len > TaskCmdLim))
|
|
Packit |
6f02de |
len = TaskCmdLim;
|
|
Packit |
6f02de |
if (len > TaskCmdColW)
|
|
Packit |
6f02de |
TaskCmdColW = len;
|
|
Packit |
6f02de |
TaskPrtCmd = 1;
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
if (Lp->tid) {
|
|
Packit |
6f02de |
(void) snpf(buf, sizeof(buf), "%d", Lp->tid);
|
|
Packit |
6f02de |
if ((len = strlen(buf)) >TaskTidColW)
|
|
Packit |
6f02de |
TaskTidColW = len;
|
|
Packit |
6f02de |
TaskPrtTid = 1;
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
} else {
|
|
Packit |
6f02de |
if (TaskPrtTid) {
|
|
Packit |
6f02de |
if (Lp->tid)
|
|
Packit |
6f02de |
(void) printf(" %*d", TaskTidColW, Lp->tid);
|
|
Packit |
6f02de |
else
|
|
Packit |
6f02de |
(void) printf(" %*s", TaskTidColW, "");
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
if (TaskPrtCmd) {
|
|
Packit |
6f02de |
cp = Lp->tcmd ? Lp->tcmd : "";
|
|
Packit |
6f02de |
printf(" ");
|
|
Packit |
6f02de |
safestrprtn(cp, TaskCmdColW, stdout, 2);
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
#endif /* defined(HASTASKS) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(HASZONES)
|
|
Packit |
6f02de |
/*
|
|
Packit |
6f02de |
* Size or print the zone.
|
|
Packit |
6f02de |
*/
|
|
Packit |
6f02de |
if (Fzone) {
|
|
Packit |
6f02de |
if (!PrPass) {
|
|
Packit |
6f02de |
if (Lp->zn) {
|
|
Packit |
6f02de |
if ((len = strlen(Lp->zn)) > ZoneColW)
|
|
Packit |
6f02de |
ZoneColW = len;
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
} else
|
|
Packit |
6f02de |
(void) printf(" %-*s", ZoneColW, Lp->zn ? Lp->zn : "");
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
#endif /* defined(HASZONES) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(HASSELINUX)
|
|
Packit |
6f02de |
/*
|
|
Packit |
6f02de |
* Size or print the context.
|
|
Packit |
6f02de |
*/
|
|
Packit |
6f02de |
if (Fcntx) {
|
|
Packit |
6f02de |
if (!PrPass) {
|
|
Packit |
6f02de |
if (Lp->cntx) {
|
|
Packit |
6f02de |
if ((len = strlen(Lp->cntx)) > CntxColW)
|
|
Packit |
6f02de |
CntxColW = len;
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
} else
|
|
Packit |
6f02de |
(void) printf(" %-*s", CntxColW, Lp->cntx ? Lp->cntx : "");
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
#endif /* defined(HASSELINUX) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(HASPPID)
|
|
Packit |
6f02de |
if (Fppid) {
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
/*
|
|
Packit |
6f02de |
* Size or print the parent process ID.
|
|
Packit |
6f02de |
*/
|
|
Packit |
6f02de |
if (!PrPass) {
|
|
Packit |
6f02de |
(void) snpf(buf, sizeof(buf), "%d", Lp->ppid);
|
|
Packit |
6f02de |
if ((len = strlen(buf)) > PpidColW)
|
|
Packit |
6f02de |
PpidColW = len;
|
|
Packit |
6f02de |
} else
|
|
Packit |
6f02de |
(void) printf(" %*d", PpidColW, Lp->ppid);
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
#endif /* defined(HASPPID) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
if (Fpgid) {
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
/*
|
|
Packit |
6f02de |
* Size or print the process group ID.
|
|
Packit |
6f02de |
*/
|
|
Packit |
6f02de |
if (!PrPass) {
|
|
Packit |
6f02de |
(void) snpf(buf, sizeof(buf), "%d", Lp->pgid);
|
|
Packit |
6f02de |
if ((len = strlen(buf)) > PgidColW)
|
|
Packit |
6f02de |
PgidColW = len;
|
|
Packit |
6f02de |
} else
|
|
Packit |
6f02de |
(void) printf(" %*d", PgidColW, Lp->pgid);
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
/*
|
|
Packit |
6f02de |
* Size or print the user ID or login name.
|
|
Packit |
6f02de |
*/
|
|
Packit |
6f02de |
if (!PrPass) {
|
|
Packit |
6f02de |
if ((len = strlen(printuid((UID_ARG)Lp->uid, NULL))) > UserColW)
|
|
Packit |
6f02de |
UserColW = len;
|
|
Packit |
6f02de |
} else
|
|
Packit |
6f02de |
(void) printf(" %*.*s", UserColW, UserColW,
|
|
Packit |
6f02de |
printuid((UID_ARG)Lp->uid, NULL));
|
|
Packit |
6f02de |
/*
|
|
Packit |
6f02de |
* Size or print the file descriptor, access mode and lock status.
|
|
Packit |
6f02de |
*/
|
|
Packit |
6f02de |
if (!PrPass) {
|
|
Packit |
6f02de |
(void) snpf(buf, sizeof(buf), "%s%c%c",
|
|
Packit |
6f02de |
Lf->fd,
|
|
Packit |
6f02de |
(Lf->lock == ' ') ? Lf->access
|
|
Packit |
6f02de |
: (Lf->access == ' ') ? '-'
|
|
Packit |
6f02de |
: Lf->access,
|
|
Packit |
6f02de |
Lf->lock);
|
|
Packit |
6f02de |
if ((len = strlen(buf)) > FdColW)
|
|
Packit |
6f02de |
FdColW = len;
|
|
Packit |
6f02de |
} else
|
|
Packit |
6f02de |
(void) printf(" %*.*s%c%c", FdColW - 2, FdColW - 2, Lf->fd,
|
|
Packit |
6f02de |
(Lf->lock == ' ') ? Lf->access
|
|
Packit |
6f02de |
: (Lf->access == ' ') ? '-'
|
|
Packit |
6f02de |
: Lf->access,
|
|
Packit |
6f02de |
Lf->lock);
|
|
Packit |
6f02de |
/*
|
|
Packit |
6f02de |
* Size or print the type.
|
|
Packit |
6f02de |
*/
|
|
Packit |
6f02de |
if (!PrPass) {
|
|
Packit |
6f02de |
if ((len = strlen(Lf->type)) > TypeColW)
|
|
Packit |
6f02de |
TypeColW = len;
|
|
Packit |
6f02de |
} else
|
|
Packit |
6f02de |
(void) printf(" %*.*s", TypeColW, TypeColW, Lf->type);
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(HASFSTRUCT)
|
|
Packit |
6f02de |
/*
|
|
Packit |
6f02de |
* Size or print the file structure address, file usage count, and node
|
|
Packit |
6f02de |
* ID (address).
|
|
Packit |
6f02de |
*/
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
if (Fsv) {
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
# if !defined(HASNOFSADDR)
|
|
Packit |
6f02de |
if (Fsv & FSV_FA) {
|
|
Packit |
6f02de |
cp = (Lf->fsv & FSV_FA) ? print_kptr(Lf->fsa, buf, sizeof(buf))
|
|
Packit |
6f02de |
: "";
|
|
Packit |
6f02de |
if (!PrPass) {
|
|
Packit |
6f02de |
if ((len = strlen(cp)) > FsColW)
|
|
Packit |
6f02de |
FsColW = len;
|
|
Packit |
6f02de |
} else
|
|
Packit |
6f02de |
(void) printf(" %*.*s", FsColW, FsColW, cp);
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
# endif /* !defined(HASNOFSADDR) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
# if !defined(HASNOFSCOUNT)
|
|
Packit |
6f02de |
if (Fsv & FSV_CT) {
|
|
Packit |
6f02de |
if (Lf->fsv & FSV_CT) {
|
|
Packit |
6f02de |
(void) snpf(buf, sizeof(buf), "%ld", Lf->fct);
|
|
Packit |
6f02de |
cp = buf;
|
|
Packit |
6f02de |
} else
|
|
Packit |
6f02de |
cp = "";
|
|
Packit |
6f02de |
if (!PrPass) {
|
|
Packit |
6f02de |
if ((len = strlen(cp)) > FcColW)
|
|
Packit |
6f02de |
FcColW = len;
|
|
Packit |
6f02de |
} else
|
|
Packit |
6f02de |
(void) printf(" %*.*s", FcColW, FcColW, cp);
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
# endif /* !defined(HASNOFSCOUNT) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
# if !defined(HASNOFSFLAGS)
|
|
Packit |
6f02de |
if (Fsv & FSV_FG) {
|
|
Packit |
6f02de |
if ((Lf->fsv & FSV_FG) && (FsvFlagX || Lf->ffg || Lf->pof))
|
|
Packit |
6f02de |
cp = print_fflags(Lf->ffg, Lf->pof);
|
|
Packit |
6f02de |
else
|
|
Packit |
6f02de |
cp = "";
|
|
Packit |
6f02de |
if (!PrPass) {
|
|
Packit |
6f02de |
if ((len = strlen(cp)) > FgColW)
|
|
Packit |
6f02de |
FgColW = len;
|
|
Packit |
6f02de |
} else
|
|
Packit |
6f02de |
(void) printf(" %*.*s", FgColW, FgColW, cp);
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
# endif /* !defined(HASNOFSFLAGS) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
# if !defined(HASNOFSNADDR)
|
|
Packit |
6f02de |
if (Fsv & FSV_NI) {
|
|
Packit |
6f02de |
cp = (Lf->fsv & FSV_NI) ? print_kptr(Lf->fna, buf, sizeof(buf))
|
|
Packit |
6f02de |
: "";
|
|
Packit |
6f02de |
if (!PrPass) {
|
|
Packit |
6f02de |
if ((len = strlen(cp)) > NiColW)
|
|
Packit |
6f02de |
NiColW = len;
|
|
Packit |
6f02de |
} else
|
|
Packit |
6f02de |
(void) printf(" %*.*s", NiColW, NiColW, cp);
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
# endif /* !defined(HASNOFSNADDR) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
#endif /* defined(HASFSTRUCT) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
/*
|
|
Packit |
6f02de |
* Size or print the device information.
|
|
Packit |
6f02de |
*/
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
if (Lf->rdev_def) {
|
|
Packit |
6f02de |
dev = Lf->rdev;
|
|
Packit |
6f02de |
devs = 1;
|
|
Packit |
6f02de |
} else if (Lf->dev_def) {
|
|
Packit |
6f02de |
dev = Lf->dev;
|
|
Packit |
6f02de |
devs = 1;
|
|
Packit |
6f02de |
} else
|
|
Packit |
6f02de |
devs = 0;
|
|
Packit |
6f02de |
if (devs) {
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(HASPRINTDEV)
|
|
Packit |
6f02de |
cp = HASPRINTDEV(Lf, &dev;;
|
|
Packit |
6f02de |
#else /* !defined(HASPRINTDEV) */
|
|
Packit |
6f02de |
(void) snpf(buf, sizeof(buf), "%u,%u", GET_MAJ_DEV(dev),
|
|
Packit |
6f02de |
GET_MIN_DEV(dev));
|
|
Packit |
6f02de |
cp = buf;
|
|
Packit |
6f02de |
#endif /* defined(HASPRINTDEV) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
if (!PrPass) {
|
|
Packit |
6f02de |
if (devs)
|
|
Packit |
6f02de |
len = strlen(cp);
|
|
Packit |
6f02de |
else if (Lf->dev_ch)
|
|
Packit |
6f02de |
len = strlen(Lf->dev_ch);
|
|
Packit |
6f02de |
else
|
|
Packit |
6f02de |
len = 0;
|
|
Packit |
6f02de |
if (len > DevColW)
|
|
Packit |
6f02de |
DevColW = len;
|
|
Packit |
6f02de |
} else {
|
|
Packit |
6f02de |
if (devs)
|
|
Packit |
6f02de |
(void) printf(" %*.*s", DevColW, DevColW, cp);
|
|
Packit |
6f02de |
else {
|
|
Packit |
6f02de |
if (Lf->dev_ch)
|
|
Packit |
6f02de |
(void) printf(" %*.*s", DevColW, DevColW, Lf->dev_ch);
|
|
Packit |
6f02de |
else
|
|
Packit |
6f02de |
(void) printf(" %*.*s", DevColW, DevColW, "");
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
/*
|
|
Packit |
6f02de |
* Size or print the size or offset.
|
|
Packit |
6f02de |
*/
|
|
Packit |
6f02de |
if (!PrPass) {
|
|
Packit |
6f02de |
if (Lf->sz_def) {
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(HASPRINTSZ)
|
|
Packit |
6f02de |
cp = HASPRINTSZ(Lf);
|
|
Packit |
6f02de |
#else /* !defined(HASPRINTSZ) */
|
|
Packit |
6f02de |
(void) snpf(buf, sizeof(buf), SzOffFmt_d, Lf->sz);
|
|
Packit |
6f02de |
cp = buf;
|
|
Packit |
6f02de |
#endif /* defined(HASPRINTSZ) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
len = strlen(cp);
|
|
Packit |
6f02de |
} else if (Lf->off_def) {
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(HASPRINTOFF)
|
|
Packit |
6f02de |
cp = HASPRINTOFF(Lf, 0);
|
|
Packit |
6f02de |
#else /* !defined(HASPRINTOFF) */
|
|
Packit |
6f02de |
(void) snpf(buf, sizeof(buf), SzOffFmt_0t, Lf->off);
|
|
Packit |
6f02de |
cp = buf;
|
|
Packit |
6f02de |
#endif /* defined(HASPRINTOFF) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
len = strlen(cp);
|
|
Packit |
6f02de |
if (OffDecDig && len > (OffDecDig + 2)) {
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(HASPRINTOFF)
|
|
Packit |
6f02de |
cp = HASPRINTOFF(Lf, 1);
|
|
Packit |
6f02de |
#else /* !defined(HASPRINTOFF) */
|
|
Packit |
6f02de |
(void) snpf(buf, sizeof(buf), SzOffFmt_x, Lf->off);
|
|
Packit |
6f02de |
cp = buf;
|
|
Packit |
6f02de |
#endif /* defined(HASPRINTOFF) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
len = strlen(cp);
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
} else
|
|
Packit |
6f02de |
len = 0;
|
|
Packit |
6f02de |
if (len > SzOffColW)
|
|
Packit |
6f02de |
SzOffColW = len;
|
|
Packit |
6f02de |
} else {
|
|
Packit |
6f02de |
putchar(' ');
|
|
Packit |
6f02de |
if (Lf->sz_def)
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(HASPRINTSZ)
|
|
Packit |
6f02de |
(void) printf("%*.*s", SzOffColW, SzOffColW, HASPRINTSZ(Lf));
|
|
Packit |
6f02de |
#else /* !defined(HASPRINTSZ) */
|
|
Packit |
6f02de |
(void) printf(SzOffFmt_dv, SzOffColW, Lf->sz);
|
|
Packit |
6f02de |
#endif /* defined(HASPRINTSZ) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
else if (Lf->off_def) {
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(HASPRINTOFF)
|
|
Packit |
6f02de |
cp = HASPRINTOFF(Lf, 0);
|
|
Packit |
6f02de |
#else /* !defined(HASPRINTOFF) */
|
|
Packit |
6f02de |
(void) snpf(buf, sizeof(buf), SzOffFmt_0t, Lf->off);
|
|
Packit |
6f02de |
cp = buf;
|
|
Packit |
6f02de |
#endif /* defined(HASPRINTOFF) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
if (OffDecDig && (int)strlen(cp) > (OffDecDig + 2)) {
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(HASPRINTOFF)
|
|
Packit |
6f02de |
cp = HASPRINTOFF(Lf, 1);
|
|
Packit |
6f02de |
#else /* !defined(HASPRINTOFF) */
|
|
Packit |
6f02de |
(void) snpf(buf, sizeof(buf), SzOffFmt_x, Lf->off);
|
|
Packit |
6f02de |
cp = buf;
|
|
Packit |
6f02de |
#endif /* defined(HASPRINTOFF) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
(void) printf("%*.*s", SzOffColW, SzOffColW, cp);
|
|
Packit |
6f02de |
} else
|
|
Packit |
6f02de |
(void) printf("%*.*s", SzOffColW, SzOffColW, "");
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
/*
|
|
Packit |
6f02de |
* Size or print the link count.
|
|
Packit |
6f02de |
*/
|
|
Packit |
6f02de |
if (Fnlink) {
|
|
Packit |
6f02de |
if (Lf->nlink_def) {
|
|
Packit |
6f02de |
(void) snpf(buf, sizeof(buf), " %ld", Lf->nlink);
|
|
Packit |
6f02de |
cp = buf;
|
|
Packit |
6f02de |
} else
|
|
Packit |
6f02de |
cp = "";
|
|
Packit |
6f02de |
if (!PrPass) {
|
|
Packit |
6f02de |
if ((len = strlen(cp)) > NlColW)
|
|
Packit |
6f02de |
NlColW = len;
|
|
Packit |
6f02de |
} else
|
|
Packit |
6f02de |
(void) printf(" %*s", NlColW, cp);
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
/*
|
|
Packit |
6f02de |
* Size or print the inode information.
|
|
Packit |
6f02de |
*/
|
|
Packit |
6f02de |
switch (Lf->inp_ty) {
|
|
Packit |
6f02de |
case 1:
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(HASPRINTINO)
|
|
Packit |
6f02de |
cp = HASPRINTINO(Lf);
|
|
Packit |
6f02de |
#else /* !defined(HASPRINTINO) */
|
|
Packit |
6f02de |
(void) snpf(buf, sizeof(buf), InodeFmt_d, Lf->inode);
|
|
Packit |
6f02de |
cp = buf;
|
|
Packit |
6f02de |
#endif /* defined(HASPRINTINO) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
case 2:
|
|
Packit |
6f02de |
if (Lf->iproto[0])
|
|
Packit |
6f02de |
cp = Lf->iproto;
|
|
Packit |
6f02de |
else
|
|
Packit |
6f02de |
cp = "";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
case 3:
|
|
Packit |
6f02de |
(void) snpf(buf, sizeof(buf), InodeFmt_x, Lf->inode);
|
|
Packit |
6f02de |
cp = buf;
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
default:
|
|
Packit |
6f02de |
cp = "";
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
if (!PrPass) {
|
|
Packit |
6f02de |
if ((len = strlen(cp)) > NodeColW)
|
|
Packit |
6f02de |
NodeColW = len;
|
|
Packit |
6f02de |
} else {
|
|
Packit |
6f02de |
(void) printf(" %*.*s", NodeColW, NodeColW, cp);
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
/*
|
|
Packit |
6f02de |
* If this is the second pass, print the name column. (It doesn't need
|
|
Packit |
6f02de |
* to be sized.)
|
|
Packit |
6f02de |
*/
|
|
Packit |
6f02de |
if (PrPass) {
|
|
Packit |
6f02de |
putchar(' ');
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(HASPRINTNM)
|
|
Packit |
6f02de |
HASPRINTNM(Lf);
|
|
Packit |
6f02de |
#else /* !defined(HASPRINTNM) */
|
|
Packit |
6f02de |
printname(1);
|
|
Packit |
6f02de |
#endif /* defined(HASPRINTNM) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
/*
|
|
Packit |
6f02de |
* printinaddr() - print Internet addresses
|
|
Packit |
6f02de |
*/
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
static int
|
|
Packit |
6f02de |
printinaddr()
|
|
Packit |
6f02de |
{
|
|
Packit |
6f02de |
int i, len, src;
|
|
Packit |
6f02de |
char *host, *port;
|
|
Packit |
6f02de |
int nl = Namechl - 1;
|
|
Packit |
6f02de |
char *np = Namech;
|
|
Packit |
6f02de |
char pbuf[32];
|
|
Packit |
6f02de |
/*
|
|
Packit |
6f02de |
* Process local network address first. If there's a foreign address,
|
|
Packit |
6f02de |
* separate it from the local address with "->".
|
|
Packit |
6f02de |
*/
|
|
Packit |
6f02de |
for (i = 0, *np = '\0'; i < 2; i++) {
|
|
Packit |
6f02de |
if (!Lf->li[i].af)
|
|
Packit |
6f02de |
continue;
|
|
Packit |
6f02de |
host = port = (char *)NULL;
|
|
Packit |
6f02de |
if (i) {
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
/*
|
|
Packit |
6f02de |
* If this is the foreign address, insert the separator.
|
|
Packit |
6f02de |
*/
|
|
Packit |
6f02de |
if (nl < 2)
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
addr_too_long:
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
{
|
|
Packit |
6f02de |
(void) snpf(Namech, Namechl,
|
|
Packit |
6f02de |
"network addresses too long");
|
|
Packit |
6f02de |
return(1);
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
(void) snpf(np, nl, "->");
|
|
Packit |
6f02de |
np += 2;
|
|
Packit |
6f02de |
nl -= 2;
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
/*
|
|
Packit |
6f02de |
* Convert the address to a host name.
|
|
Packit |
6f02de |
*/
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(HASIPv6)
|
|
Packit |
6f02de |
if ((Lf->li[i].af == AF_INET6
|
|
Packit |
6f02de |
&& IN6_IS_ADDR_UNSPECIFIED(&Lf->li[i].ia.a6))
|
|
Packit |
6f02de |
|| (Lf->li[i].af == AF_INET
|
|
Packit |
6f02de |
&& Lf->li[i].ia.a4.s_addr == INADDR_ANY))
|
|
Packit |
6f02de |
host ="*";
|
|
Packit |
6f02de |
else
|
|
Packit |
6f02de |
host = gethostnm((unsigned char *)&Lf->li[i].ia, Lf->li[i].af);
|
|
Packit |
6f02de |
#else /* !defined(HASIPv6) */
|
|
Packit |
6f02de |
if (Lf->li[i].ia.a4.s_addr == INADDR_ANY)
|
|
Packit |
6f02de |
host ="*";
|
|
Packit |
6f02de |
else
|
|
Packit |
6f02de |
host = gethostnm((unsigned char *)&Lf->li[i].ia, Lf->li[i].af);
|
|
Packit |
6f02de |
#endif /* defined(HASIPv6) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
/*
|
|
Packit |
6f02de |
* Process the port number.
|
|
Packit |
6f02de |
*/
|
|
Packit |
6f02de |
if (Lf->li[i].p > 0) {
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
if (Fport
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if !defined(HASNORPC_H)
|
|
Packit |
6f02de |
|| FportMap
|
|
Packit |
6f02de |
#endif /* defined(HASNORPC_H) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
) {
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
/*
|
|
Packit |
6f02de |
* If converting port numbers to service names, or looking
|
|
Packit |
6f02de |
* up portmap program names and numbers, do so by protocol.
|
|
Packit |
6f02de |
*
|
|
Packit |
6f02de |
* Identify the port source as local if: 1) it comes from the
|
|
Packit |
6f02de |
* local entry (0) of the file's Internet address array; or
|
|
Packit |
6f02de |
* 2) it comes from the foreign entry (1), and the foreign
|
|
Packit |
6f02de |
* Internet address matches the local one; or 3) it is the
|
|
Packit |
6f02de |
* loopback address 127.0.0.1. (Test 2 may not always work
|
|
Packit |
6f02de |
* -- e.g., on hosts with multiple interfaces.)
|
|
Packit |
6f02de |
*/
|
|
Packit |
6f02de |
#if !defined(HASNORPC_H)
|
|
Packit |
6f02de |
if ((src = i) && FportMap) {
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
# if defined(HASIPv6)
|
|
Packit |
6f02de |
if (Lf->li[0].af == AF_INET6) {
|
|
Packit |
6f02de |
if (IN6_IS_ADDR_LOOPBACK(&Lf->li[i].ia.a6)
|
|
Packit |
6f02de |
|| IN6_ARE_ADDR_EQUAL(&Lf->li[0].ia.a6,
|
|
Packit |
6f02de |
&Lf->li[1].ia.a6)
|
|
Packit |
6f02de |
)
|
|
Packit |
6f02de |
src = 0;
|
|
Packit |
6f02de |
} else
|
|
Packit |
6f02de |
# endif /* defined(HASIPv6) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
if (Lf->li[0].af == AF_INET) {
|
|
Packit |
6f02de |
if (Lf->li[i].ia.a4.s_addr == htonl(INADDR_LOOPBACK)
|
|
Packit |
6f02de |
|| Lf->li[0].ia.a4.s_addr == Lf->li[1].ia.a4.s_addr
|
|
Packit |
6f02de |
)
|
|
Packit |
6f02de |
src = 0;
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
#endif /* !defined(HASNORPC_H) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
if (strcasecmp(Lf->iproto, "TCP") == 0)
|
|
Packit |
6f02de |
port = lkup_port(Lf->li[i].p, 0, src);
|
|
Packit |
6f02de |
else if (strcasecmp(Lf->iproto, "UDP") == 0)
|
|
Packit |
6f02de |
port = lkup_port(Lf->li[i].p, 1, src);
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
if (!port) {
|
|
Packit |
6f02de |
(void) snpf(pbuf, sizeof(pbuf), "%d", Lf->li[i].p);
|
|
Packit |
6f02de |
port = pbuf;
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
} else if (Lf->li[i].p == 0)
|
|
Packit |
6f02de |
port = "*";
|
|
Packit |
6f02de |
/*
|
|
Packit |
6f02de |
* Enter the host name.
|
|
Packit |
6f02de |
*/
|
|
Packit |
6f02de |
if (host) {
|
|
Packit |
6f02de |
if ((len = strlen(host)) > nl)
|
|
Packit |
6f02de |
goto addr_too_long;
|
|
Packit |
6f02de |
if (len) {
|
|
Packit |
6f02de |
(void) snpf(np, nl, "%s", host);
|
|
Packit |
6f02de |
np += len;
|
|
Packit |
6f02de |
nl -= len;
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
/*
|
|
Packit |
6f02de |
* Enter the port number, preceded by a colon.
|
|
Packit |
6f02de |
*/
|
|
Packit |
6f02de |
if (port) {
|
|
Packit |
6f02de |
if (((len = strlen(port)) + 1) >= nl)
|
|
Packit |
6f02de |
goto addr_too_long;
|
|
Packit |
6f02de |
(void) snpf(np, nl, ":%s", port);
|
|
Packit |
6f02de |
np += len + 1;
|
|
Packit |
6f02de |
nl -= len - 1;
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
if (Namech[0]) {
|
|
Packit |
6f02de |
safestrprt(Namech, stdout, 0);
|
|
Packit |
6f02de |
return(1);
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
return(0);
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
/*
|
|
Packit |
6f02de |
* print_init() - initialize for printing
|
|
Packit |
6f02de |
*/
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
void
|
|
Packit |
6f02de |
print_init()
|
|
Packit |
6f02de |
{
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
/*
|
|
Packit |
6f02de |
* Preset standard values.
|
|
Packit |
6f02de |
*/
|
|
Packit |
6f02de |
PrPass = (Ffield || Fterse) ? 1 : 0;
|
|
Packit |
6f02de |
LastPid = -1;
|
|
Packit |
6f02de |
TaskPrtCmd = TaskPrtTid = 0;
|
|
Packit |
6f02de |
/*
|
|
Packit |
6f02de |
* Size columns by their titles.
|
|
Packit |
6f02de |
*/
|
|
Packit |
6f02de |
CmdColW = strlen(CMDTTL);
|
|
Packit |
6f02de |
DevColW = strlen(DEVTTL);
|
|
Packit |
6f02de |
FdColW = strlen(FDTTL);
|
|
Packit |
6f02de |
if (Fnlink)
|
|
Packit |
6f02de |
NlColW = strlen(NLTTL);
|
|
Packit |
6f02de |
NmColW = strlen(NMTTL);
|
|
Packit |
6f02de |
NodeColW = strlen(NODETTL);
|
|
Packit |
6f02de |
PgidColW = strlen(PGIDTTL);
|
|
Packit |
6f02de |
PidColW = strlen(PIDTTL);
|
|
Packit |
6f02de |
PpidColW = strlen(PPIDTTL);
|
|
Packit |
6f02de |
if (Fsize)
|
|
Packit |
6f02de |
SzOffColW = strlen(SZTTL);
|
|
Packit |
6f02de |
else if (Foffset)
|
|
Packit |
6f02de |
SzOffColW = strlen(OFFTTL);
|
|
Packit |
6f02de |
else
|
|
Packit |
6f02de |
SzOffColW = strlen(SZOFFTTL);
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(HASTASKS)
|
|
Packit |
6f02de |
TaskCmdColW = strlen(TASKCMDTTL);
|
|
Packit |
6f02de |
TaskTidColW = strlen(TASKTIDTTL);
|
|
Packit |
6f02de |
#endif /* defined(HASTASKS) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
TypeColW = strlen(TYPETTL);
|
|
Packit |
6f02de |
UserColW = strlen(USERTTL);
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(HASFSTRUCT)
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
# if !defined(HASNOFSADDR)
|
|
Packit |
6f02de |
FsColW = strlen(FSTTL);
|
|
Packit |
6f02de |
# endif /* !defined(HASNOFSADDR) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
# if !defined(HASNOFSCOUNT)
|
|
Packit |
6f02de |
FcColW = strlen(FCTTL);
|
|
Packit |
6f02de |
# endif /* !defined(HASNOFSCOUNT) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
# if !defined(HASNOFSFLAGS)
|
|
Packit |
6f02de |
FgColW = strlen(FGTTL);
|
|
Packit |
6f02de |
# endif /* !defined(HASNOFSFLAGS) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
# if !defined(HASNOFSNADDR)
|
|
Packit |
6f02de |
NiColW = strlen(NiTtl);
|
|
Packit |
6f02de |
# endif /* !defined(HASNOFSNADDR) */
|
|
Packit |
6f02de |
#endif /* defined(HASFSTRUCT) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(HASSELINUX)
|
|
Packit |
6f02de |
if (Fcntx)
|
|
Packit |
6f02de |
CntxColW = strlen(CNTXTTL);
|
|
Packit |
6f02de |
#endif /* defined(HASSELINUX) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(HASZONES)
|
|
Packit |
6f02de |
if (Fzone)
|
|
Packit |
6f02de |
ZoneColW = strlen(ZONETTL);
|
|
Packit |
6f02de |
#endif /* defined(HASZONES) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if !defined(HASPRIVPRIPP)
|
|
Packit |
6f02de |
/*
|
|
Packit |
6f02de |
* printiproto() - print Internet protocol name
|
|
Packit |
6f02de |
*/
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
void
|
|
Packit |
6f02de |
printiproto(p)
|
|
Packit |
6f02de |
int p; /* protocol number */
|
|
Packit |
6f02de |
{
|
|
Packit |
6f02de |
int i;
|
|
Packit |
6f02de |
static int m = -1;
|
|
Packit |
6f02de |
char *s;
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
switch (p) {
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(IPPROTO_TCP)
|
|
Packit |
6f02de |
case IPPROTO_TCP:
|
|
Packit |
6f02de |
s = "TCP";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(IPPROTO_TCP) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(IPPROTO_UDP)
|
|
Packit |
6f02de |
case IPPROTO_UDP:
|
|
Packit |
6f02de |
s = "UDP";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(IPPROTO_UDP) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(IPPROTO_IP)
|
|
Packit |
6f02de |
# if !defined(IPPROTO_HOPOPTS) || IPPROTO_IP!=IPPROTO_HOPOPTS
|
|
Packit |
6f02de |
case IPPROTO_IP:
|
|
Packit |
6f02de |
s = "IP";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
# endif /* !defined(IPPROTO_HOPOPTS) || IPPROTO_IP!=IPPROTO_HOPOPTS */
|
|
Packit |
6f02de |
#endif /* defined(IPPROTO_IP) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(IPPROTO_ICMP)
|
|
Packit |
6f02de |
case IPPROTO_ICMP:
|
|
Packit |
6f02de |
s = "ICMP";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(IPPROTO_ICMP) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(IPPROTO_ICMPV6)
|
|
Packit |
6f02de |
case IPPROTO_ICMPV6:
|
|
Packit |
6f02de |
s = "ICMPV6";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(IPPROTO_ICMPV6) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(IPPROTO_IGMP)
|
|
Packit |
6f02de |
case IPPROTO_IGMP:
|
|
Packit |
6f02de |
s = "IGMP";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(IPPROTO_IGMP) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(IPPROTO_GGP)
|
|
Packit |
6f02de |
case IPPROTO_GGP:
|
|
Packit |
6f02de |
s = "GGP";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(IPPROTO_GGP) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(IPPROTO_EGP)
|
|
Packit |
6f02de |
case IPPROTO_EGP:
|
|
Packit |
6f02de |
s = "EGP";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(IPPROTO_EGP) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(IPPROTO_PUP)
|
|
Packit |
6f02de |
case IPPROTO_PUP:
|
|
Packit |
6f02de |
s = "PUP";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(IPPROTO_PUP) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(IPPROTO_IDP)
|
|
Packit |
6f02de |
case IPPROTO_IDP:
|
|
Packit |
6f02de |
s = "IDP";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(IPPROTO_IDP) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(IPPROTO_ND)
|
|
Packit |
6f02de |
case IPPROTO_ND:
|
|
Packit |
6f02de |
s = "ND";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(IPPROTO_ND) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(IPPROTO_RAW)
|
|
Packit |
6f02de |
case IPPROTO_RAW:
|
|
Packit |
6f02de |
s = "RAW";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(IPPROTO_RAW) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(IPPROTO_HELLO)
|
|
Packit |
6f02de |
case IPPROTO_HELLO:
|
|
Packit |
6f02de |
s = "HELLO";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(IPPROTO_HELLO) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(IPPROTO_PXP)
|
|
Packit |
6f02de |
case IPPROTO_PXP:
|
|
Packit |
6f02de |
s = "PXP";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(IPPROTO_PXP) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(IPPROTO_RAWIP)
|
|
Packit |
6f02de |
case IPPROTO_RAWIP:
|
|
Packit |
6f02de |
s = "RAWIP";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(IPPROTO_RAWIP) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(IPPROTO_RAWIF)
|
|
Packit |
6f02de |
case IPPROTO_RAWIF:
|
|
Packit |
6f02de |
s = "RAWIF";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(IPPROTO_RAWIF) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(IPPROTO_HOPOPTS)
|
|
Packit |
6f02de |
case IPPROTO_HOPOPTS:
|
|
Packit |
6f02de |
s = "HOPOPTS";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(IPPROTO_HOPOPTS) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(IPPROTO_IPIP)
|
|
Packit |
6f02de |
case IPPROTO_IPIP:
|
|
Packit |
6f02de |
s = "IPIP";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(IPPROTO_IPIP) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(IPPROTO_ST)
|
|
Packit |
6f02de |
case IPPROTO_ST:
|
|
Packit |
6f02de |
s = "ST";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(IPPROTO_ST) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(IPPROTO_PIGP)
|
|
Packit |
6f02de |
case IPPROTO_PIGP:
|
|
Packit |
6f02de |
s = "PIGP";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(IPPROTO_PIGP) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(IPPROTO_RCCMON)
|
|
Packit |
6f02de |
case IPPROTO_RCCMON:
|
|
Packit |
6f02de |
s = "RCCMON";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(IPPROTO_RCCMON) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(IPPROTO_NVPII)
|
|
Packit |
6f02de |
case IPPROTO_NVPII:
|
|
Packit |
6f02de |
s = "NVPII";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(IPPROTO_NVPII) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(IPPROTO_ARGUS)
|
|
Packit |
6f02de |
case IPPROTO_ARGUS:
|
|
Packit |
6f02de |
s = "ARGUS";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(IPPROTO_ARGUS) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(IPPROTO_EMCON)
|
|
Packit |
6f02de |
case IPPROTO_EMCON:
|
|
Packit |
6f02de |
s = "EMCON";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(IPPROTO_EMCON) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(IPPROTO_XNET)
|
|
Packit |
6f02de |
case IPPROTO_XNET:
|
|
Packit |
6f02de |
s = "XNET";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(IPPROTO_XNET) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(IPPROTO_CHAOS)
|
|
Packit |
6f02de |
case IPPROTO_CHAOS:
|
|
Packit |
6f02de |
s = "CHAOS";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(IPPROTO_CHAOS) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(IPPROTO_MUX)
|
|
Packit |
6f02de |
case IPPROTO_MUX:
|
|
Packit |
6f02de |
s = "MUX";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(IPPROTO_MUX) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(IPPROTO_MEAS)
|
|
Packit |
6f02de |
case IPPROTO_MEAS:
|
|
Packit |
6f02de |
s = "MEAS";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(IPPROTO_MEAS) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(IPPROTO_HMP)
|
|
Packit |
6f02de |
case IPPROTO_HMP:
|
|
Packit |
6f02de |
s = "HMP";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(IPPROTO_HMP) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(IPPROTO_PRM)
|
|
Packit |
6f02de |
case IPPROTO_PRM:
|
|
Packit |
6f02de |
s = "PRM";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(IPPROTO_PRM) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(IPPROTO_TRUNK1)
|
|
Packit |
6f02de |
case IPPROTO_TRUNK1:
|
|
Packit |
6f02de |
s = "TRUNK1";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(IPPROTO_TRUNK1) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(IPPROTO_TRUNK2)
|
|
Packit |
6f02de |
case IPPROTO_TRUNK2:
|
|
Packit |
6f02de |
s = "TRUNK2";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(IPPROTO_TRUNK2) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(IPPROTO_LEAF1)
|
|
Packit |
6f02de |
case IPPROTO_LEAF1:
|
|
Packit |
6f02de |
s = "LEAF1";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(IPPROTO_LEAF1) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(IPPROTO_LEAF2)
|
|
Packit |
6f02de |
case IPPROTO_LEAF2:
|
|
Packit |
6f02de |
s = "LEAF2";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(IPPROTO_LEAF2) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(IPPROTO_RDP)
|
|
Packit |
6f02de |
case IPPROTO_RDP:
|
|
Packit |
6f02de |
s = "RDP";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(IPPROTO_RDP) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(IPPROTO_IRTP)
|
|
Packit |
6f02de |
case IPPROTO_IRTP:
|
|
Packit |
6f02de |
s = "IRTP";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(IPPROTO_IRTP) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(IPPROTO_TP)
|
|
Packit |
6f02de |
case IPPROTO_TP:
|
|
Packit |
6f02de |
s = "TP";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(IPPROTO_TP) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(IPPROTO_BLT)
|
|
Packit |
6f02de |
case IPPROTO_BLT:
|
|
Packit |
6f02de |
s = "BLT";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(IPPROTO_BLT) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(IPPROTO_NSP)
|
|
Packit |
6f02de |
case IPPROTO_NSP:
|
|
Packit |
6f02de |
s = "NSP";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(IPPROTO_NSP) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(IPPROTO_INP)
|
|
Packit |
6f02de |
case IPPROTO_INP:
|
|
Packit |
6f02de |
s = "INP";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(IPPROTO_INP) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(IPPROTO_SEP)
|
|
Packit |
6f02de |
case IPPROTO_SEP:
|
|
Packit |
6f02de |
s = "SEP";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(IPPROTO_SEP) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(IPPROTO_3PC)
|
|
Packit |
6f02de |
case IPPROTO_3PC:
|
|
Packit |
6f02de |
s = "3PC";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(IPPROTO_3PC) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(IPPROTO_IDPR)
|
|
Packit |
6f02de |
case IPPROTO_IDPR:
|
|
Packit |
6f02de |
s = "IDPR";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(IPPROTO_IDPR) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(IPPROTO_XTP)
|
|
Packit |
6f02de |
case IPPROTO_XTP:
|
|
Packit |
6f02de |
s = "XTP";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(IPPROTO_XTP) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(IPPROTO_DDP)
|
|
Packit |
6f02de |
case IPPROTO_DDP:
|
|
Packit |
6f02de |
s = "DDP";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(IPPROTO_DDP) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(IPPROTO_CMTP)
|
|
Packit |
6f02de |
case IPPROTO_CMTP:
|
|
Packit |
6f02de |
s = "CMTP";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(IPPROTO_CMTP) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(IPPROTO_TPXX)
|
|
Packit |
6f02de |
case IPPROTO_TPXX:
|
|
Packit |
6f02de |
s = "TPXX";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(IPPROTO_TPXX) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(IPPROTO_IL)
|
|
Packit |
6f02de |
case IPPROTO_IL:
|
|
Packit |
6f02de |
s = "IL";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(IPPROTO_IL) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(IPPROTO_IPV6)
|
|
Packit |
6f02de |
case IPPROTO_IPV6:
|
|
Packit |
6f02de |
s = "IPV6";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(IPPROTO_IPV6) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(IPPROTO_SDRP)
|
|
Packit |
6f02de |
case IPPROTO_SDRP:
|
|
Packit |
6f02de |
s = "SDRP";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(IPPROTO_SDRP) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(IPPROTO_ROUTING)
|
|
Packit |
6f02de |
case IPPROTO_ROUTING:
|
|
Packit |
6f02de |
s = "ROUTING";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(IPPROTO_ROUTING) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(IPPROTO_FRAGMENT)
|
|
Packit |
6f02de |
case IPPROTO_FRAGMENT:
|
|
Packit |
6f02de |
s = "FRAGMNT";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(IPPROTO_FRAGMENT) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(IPPROTO_IDRP)
|
|
Packit |
6f02de |
case IPPROTO_IDRP:
|
|
Packit |
6f02de |
s = "IDRP";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(IPPROTO_IDRP) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(IPPROTO_RSVP)
|
|
Packit |
6f02de |
case IPPROTO_RSVP:
|
|
Packit |
6f02de |
s = "RSVP";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(IPPROTO_RSVP) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(IPPROTO_GRE)
|
|
Packit |
6f02de |
case IPPROTO_GRE:
|
|
Packit |
6f02de |
s = "GRE";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(IPPROTO_GRE) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(IPPROTO_MHRP)
|
|
Packit |
6f02de |
case IPPROTO_MHRP:
|
|
Packit |
6f02de |
s = "MHRP";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(IPPROTO_MHRP) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(IPPROTO_BHA)
|
|
Packit |
6f02de |
case IPPROTO_BHA:
|
|
Packit |
6f02de |
s = "BHA";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(IPPROTO_BHA) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(IPPROTO_ESP)
|
|
Packit |
6f02de |
case IPPROTO_ESP:
|
|
Packit |
6f02de |
s = "ESP";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(IPPROTO_ESP) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(IPPROTO_AH)
|
|
Packit |
6f02de |
case IPPROTO_AH:
|
|
Packit |
6f02de |
s = "AH";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(IPPROTO_AH) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(IPPROTO_INLSP)
|
|
Packit |
6f02de |
case IPPROTO_INLSP:
|
|
Packit |
6f02de |
s = "INLSP";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(IPPROTO_INLSP) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(IPPROTO_SWIPE)
|
|
Packit |
6f02de |
case IPPROTO_SWIPE:
|
|
Packit |
6f02de |
s = "SWIPE";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(IPPROTO_SWIPE) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(IPPROTO_NHRP)
|
|
Packit |
6f02de |
case IPPROTO_NHRP:
|
|
Packit |
6f02de |
s = "NHRP";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(IPPROTO_NHRP) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(IPPROTO_NONE)
|
|
Packit |
6f02de |
case IPPROTO_NONE:
|
|
Packit |
6f02de |
s = "NONE";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(IPPROTO_NONE) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(IPPROTO_DSTOPTS)
|
|
Packit |
6f02de |
case IPPROTO_DSTOPTS:
|
|
Packit |
6f02de |
s = "DSTOPTS";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(IPPROTO_DSTOPTS) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(IPPROTO_AHIP)
|
|
Packit |
6f02de |
case IPPROTO_AHIP:
|
|
Packit |
6f02de |
s = "AHIP";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(IPPROTO_AHIP) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(IPPROTO_CFTP)
|
|
Packit |
6f02de |
case IPPROTO_CFTP:
|
|
Packit |
6f02de |
s = "CFTP";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(IPPROTO_CFTP) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(IPPROTO_SATEXPAK)
|
|
Packit |
6f02de |
case IPPROTO_SATEXPAK:
|
|
Packit |
6f02de |
s = "SATEXPK";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(IPPROTO_SATEXPAK) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(IPPROTO_KRYPTOLAN)
|
|
Packit |
6f02de |
case IPPROTO_KRYPTOLAN:
|
|
Packit |
6f02de |
s = "KRYPTOL";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(IPPROTO_KRYPTOLAN) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(IPPROTO_RVD)
|
|
Packit |
6f02de |
case IPPROTO_RVD:
|
|
Packit |
6f02de |
s = "RVD";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(IPPROTO_RVD) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(IPPROTO_IPPC)
|
|
Packit |
6f02de |
case IPPROTO_IPPC:
|
|
Packit |
6f02de |
s = "IPPC";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(IPPROTO_IPPC) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(IPPROTO_ADFS)
|
|
Packit |
6f02de |
case IPPROTO_ADFS:
|
|
Packit |
6f02de |
s = "ADFS";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(IPPROTO_ADFS) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(IPPROTO_SATMON)
|
|
Packit |
6f02de |
case IPPROTO_SATMON:
|
|
Packit |
6f02de |
s = "SATMON";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(IPPROTO_SATMON) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(IPPROTO_VISA)
|
|
Packit |
6f02de |
case IPPROTO_VISA:
|
|
Packit |
6f02de |
s = "VISA";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(IPPROTO_VISA) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(IPPROTO_IPCV)
|
|
Packit |
6f02de |
case IPPROTO_IPCV:
|
|
Packit |
6f02de |
s = "IPCV";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(IPPROTO_IPCV) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(IPPROTO_CPNX)
|
|
Packit |
6f02de |
case IPPROTO_CPNX:
|
|
Packit |
6f02de |
s = "CPNX";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(IPPROTO_CPNX) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(IPPROTO_CPHB)
|
|
Packit |
6f02de |
case IPPROTO_CPHB:
|
|
Packit |
6f02de |
s = "CPHB";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(IPPROTO_CPHB) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(IPPROTO_WSN)
|
|
Packit |
6f02de |
case IPPROTO_WSN:
|
|
Packit |
6f02de |
s = "WSN";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(IPPROTO_WSN) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(IPPROTO_PVP)
|
|
Packit |
6f02de |
case IPPROTO_PVP:
|
|
Packit |
6f02de |
s = "PVP";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(IPPROTO_PVP) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(IPPROTO_BRSATMON)
|
|
Packit |
6f02de |
case IPPROTO_BRSATMON:
|
|
Packit |
6f02de |
s = "BRSATMN";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(IPPROTO_BRSATMON) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(IPPROTO_WBMON)
|
|
Packit |
6f02de |
case IPPROTO_WBMON:
|
|
Packit |
6f02de |
s = "WBMON";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(IPPROTO_WBMON) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(IPPROTO_WBEXPAK)
|
|
Packit |
6f02de |
case IPPROTO_WBEXPAK:
|
|
Packit |
6f02de |
s = "WBEXPAK";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(IPPROTO_WBEXPAK) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(IPPROTO_EON)
|
|
Packit |
6f02de |
case IPPROTO_EON:
|
|
Packit |
6f02de |
s = "EON";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(IPPROTO_EON) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(IPPROTO_VMTP)
|
|
Packit |
6f02de |
case IPPROTO_VMTP:
|
|
Packit |
6f02de |
s = "VMTP";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(IPPROTO_VMTP) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(IPPROTO_SVMTP)
|
|
Packit |
6f02de |
case IPPROTO_SVMTP:
|
|
Packit |
6f02de |
s = "SVMTP";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(IPPROTO_SVMTP) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(IPPROTO_VINES)
|
|
Packit |
6f02de |
case IPPROTO_VINES:
|
|
Packit |
6f02de |
s = "VINES";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(IPPROTO_VINES) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(IPPROTO_TTP)
|
|
Packit |
6f02de |
case IPPROTO_TTP:
|
|
Packit |
6f02de |
s = "TTP";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(IPPROTO_TTP) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(IPPROTO_IGP)
|
|
Packit |
6f02de |
case IPPROTO_IGP:
|
|
Packit |
6f02de |
s = "IGP";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(IPPROTO_IGP) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(IPPROTO_DGP)
|
|
Packit |
6f02de |
case IPPROTO_DGP:
|
|
Packit |
6f02de |
s = "DGP";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(IPPROTO_DGP) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(IPPROTO_TCF)
|
|
Packit |
6f02de |
case IPPROTO_TCF:
|
|
Packit |
6f02de |
s = "TCF";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(IPPROTO_TCF) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(IPPROTO_IGRP)
|
|
Packit |
6f02de |
case IPPROTO_IGRP:
|
|
Packit |
6f02de |
s = "IGRP";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(IPPROTO_IGRP) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(IPPROTO_OSPFIGP)
|
|
Packit |
6f02de |
case IPPROTO_OSPFIGP:
|
|
Packit |
6f02de |
s = "OSPFIGP";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(IPPROTO_OSPFIGP) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(IPPROTO_SRPC)
|
|
Packit |
6f02de |
case IPPROTO_SRPC:
|
|
Packit |
6f02de |
s = "SRPC";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(IPPROTO_SRPC) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(IPPROTO_LARP)
|
|
Packit |
6f02de |
case IPPROTO_LARP:
|
|
Packit |
6f02de |
s = "LARP";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(IPPROTO_LARP) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(IPPROTO_MTP)
|
|
Packit |
6f02de |
case IPPROTO_MTP:
|
|
Packit |
6f02de |
s = "MTP";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(IPPROTO_MTP) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(IPPROTO_AX25)
|
|
Packit |
6f02de |
case IPPROTO_AX25:
|
|
Packit |
6f02de |
s = "AX25";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(IPPROTO_AX25) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(IPPROTO_IPEIP)
|
|
Packit |
6f02de |
case IPPROTO_IPEIP:
|
|
Packit |
6f02de |
s = "IPEIP";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(IPPROTO_IPEIP) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(IPPROTO_MICP)
|
|
Packit |
6f02de |
case IPPROTO_MICP:
|
|
Packit |
6f02de |
s = "MICP";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(IPPROTO_MICP) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(IPPROTO_SCCSP)
|
|
Packit |
6f02de |
case IPPROTO_SCCSP:
|
|
Packit |
6f02de |
s = "SCCSP";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(IPPROTO_SCCSP) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(IPPROTO_ETHERIP)
|
|
Packit |
6f02de |
case IPPROTO_ETHERIP:
|
|
Packit |
6f02de |
s = "ETHERIP";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(IPPROTO_ETHERIP) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(IPPROTO_ENCAP)
|
|
Packit |
6f02de |
# if !defined(IPPROTO_IPIP) || IPPROTO_IPIP!=IPPROTO_ENCAP
|
|
Packit |
6f02de |
case IPPROTO_ENCAP:
|
|
Packit |
6f02de |
s = "ENCAP";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
# endif /* !defined(IPPROTO_IPIP) || IPPROTO_IPIP!=IPPROTO_ENCAP */
|
|
Packit |
6f02de |
#endif /* defined(IPPROTO_ENCAP) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(IPPROTO_APES)
|
|
Packit |
6f02de |
case IPPROTO_APES:
|
|
Packit |
6f02de |
s = "APES";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(IPPROTO_APES) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(IPPROTO_GMTP)
|
|
Packit |
6f02de |
case IPPROTO_GMTP:
|
|
Packit |
6f02de |
s = "GMTP";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(IPPROTO_GMTP) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(IPPROTO_DIVERT)
|
|
Packit |
6f02de |
case IPPROTO_DIVERT:
|
|
Packit |
6f02de |
s = "DIVERT";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(IPPROTO_DIVERT) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
default:
|
|
Packit |
6f02de |
s = (char *)NULL;
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
if (s)
|
|
Packit |
6f02de |
(void) snpf(Lf->iproto, sizeof(Lf->iproto), "%.*s", IPROTOL-1, s);
|
|
Packit |
6f02de |
else {
|
|
Packit |
6f02de |
if (m < 0) {
|
|
Packit |
6f02de |
for (i = 0, m = 1; i < IPROTOL-2; i++)
|
|
Packit |
6f02de |
m *= 10;
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
if (m > p)
|
|
Packit |
6f02de |
(void) snpf(Lf->iproto, sizeof(Lf->iproto), "%d?", p);
|
|
Packit |
6f02de |
else
|
|
Packit |
6f02de |
(void) snpf(Lf->iproto, sizeof(Lf->iproto), "*%d?", p % (m/10));
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
#endif /* !defined(HASPRIVPRIPP) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
/*
|
|
Packit |
6f02de |
* printname() - print output name field
|
|
Packit |
6f02de |
*/
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
void
|
|
Packit |
6f02de |
printname(nl)
|
|
Packit |
6f02de |
int nl; /* NL status */
|
|
Packit |
6f02de |
{
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(HASNCACHE)
|
|
Packit |
6f02de |
char buf[MAXPATHLEN];
|
|
Packit |
6f02de |
char *cp;
|
|
Packit |
6f02de |
int fp;
|
|
Packit |
6f02de |
#endif /* defined(HASNCACHE) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
int ps = 0;
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
if (Lf->nm && Lf->nm[0]) {
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
/*
|
|
Packit |
6f02de |
* Print the name characters, if there are some.
|
|
Packit |
6f02de |
*/
|
|
Packit |
6f02de |
safestrprt(Lf->nm, stdout, 0);
|
|
Packit |
6f02de |
ps++;
|
|
Packit |
6f02de |
if (!Lf->li[0].af && !Lf->li[1].af)
|
|
Packit |
6f02de |
goto print_nma;
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
if (Lf->li[0].af || Lf->li[1].af) {
|
|
Packit |
6f02de |
if (ps)
|
|
Packit |
6f02de |
putchar(' ');
|
|
Packit |
6f02de |
/*
|
|
Packit |
6f02de |
* If the file has Internet addresses, print them.
|
|
Packit |
6f02de |
*/
|
|
Packit |
6f02de |
if (printinaddr())
|
|
Packit |
6f02de |
ps++;
|
|
Packit |
6f02de |
goto print_nma;
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
if (((Lf->ntype == N_BLK) || (Lf->ntype == N_CHR))
|
|
Packit |
6f02de |
&& Lf->dev_def && Lf->rdev_def
|
|
Packit |
6f02de |
&& printdevname(&Lf->dev, &Lf->rdev, 0, Lf->ntype))
|
|
Packit |
6f02de |
{
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
/*
|
|
Packit |
6f02de |
* If this is a block or character device and it has a name, print it.
|
|
Packit |
6f02de |
*/
|
|
Packit |
6f02de |
ps++;
|
|
Packit |
6f02de |
goto print_nma;
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
if (Lf->is_com) {
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
/*
|
|
Packit |
6f02de |
* If this is a common node, print that fact.
|
|
Packit |
6f02de |
*/
|
|
Packit |
6f02de |
(void) fputs("COMMON: ", stdout);
|
|
Packit |
6f02de |
ps++;
|
|
Packit |
6f02de |
goto print_nma;
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(HASPRIVNMCACHE)
|
|
Packit |
6f02de |
if (HASPRIVNMCACHE(Lf)) {
|
|
Packit |
6f02de |
ps++;
|
|
Packit |
6f02de |
goto print_nma;
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
#endif /* defined(HASPRIVNMCACHE) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
if (Lf->lmi_srch) {
|
|
Packit |
6f02de |
struct mounts *mp;
|
|
Packit |
6f02de |
/*
|
|
Packit |
6f02de |
* Do a deferred local mount info table search for the file system
|
|
Packit |
6f02de |
* (mounted) directory name and inode number, and mounted device name.
|
|
Packit |
6f02de |
*/
|
|
Packit |
6f02de |
for (mp = readmnt(); mp; mp = mp->next) {
|
|
Packit |
6f02de |
if (Lf->dev == mp->dev) {
|
|
Packit |
6f02de |
Lf->fsdir = mp->dir;
|
|
Packit |
6f02de |
Lf->fsdev = mp->fsname;
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(HASFSINO)
|
|
Packit |
6f02de |
Lf->fs_ino = mp->inode;
|
|
Packit |
6f02de |
#endif /* defined(HASFSINO) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
Lf->lmi_srch = 0;
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
if (Lf->fsdir || Lf->fsdev) {
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
/*
|
|
Packit |
6f02de |
* Print the file system directory name, device name, and
|
|
Packit |
6f02de |
* possible path name components.
|
|
Packit |
6f02de |
*/
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if !defined(HASNCACHE) || HASNCACHE<2
|
|
Packit |
6f02de |
if (Lf->fsdir) {
|
|
Packit |
6f02de |
safestrprt(Lf->fsdir, stdout, 0);
|
|
Packit |
6f02de |
ps++;
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
#endif /* !defined(HASNCACHE) || HASNCACHE<2 */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(HASNCACHE)
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
# if HASNCACHE<2
|
|
Packit |
6f02de |
if (Lf->na) {
|
|
Packit |
6f02de |
if (NcacheReload) {
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
# if defined(NCACHELDPFX)
|
|
Packit |
6f02de |
NCACHELDPFX
|
|
Packit |
6f02de |
# endif /* defined(NCACHELDPFX) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
(void) ncache_load();
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
# if defined(NCACHELDSFX)
|
|
Packit |
6f02de |
NCACHELDSFX
|
|
Packit |
6f02de |
# endif /* defined(NCACHELDSFX) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
NcacheReload = 0;
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
if ((cp = ncache_lookup(buf, sizeof(buf), &fp))) {
|
|
Packit |
6f02de |
char *cp1;
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
if (*cp == '\0')
|
|
Packit |
6f02de |
goto print_nma;
|
|
Packit |
6f02de |
if (fp && Lf->fsdir) {
|
|
Packit |
6f02de |
if (*cp != '/') {
|
|
Packit |
6f02de |
cp1 = strrchr(Lf->fsdir, '/');
|
|
Packit |
6f02de |
if (cp1 == (char *)NULL || *(cp1 + 1) != '\0')
|
|
Packit |
6f02de |
putchar('/');
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
} else
|
|
Packit |
6f02de |
(void) fputs(" -- ", stdout);
|
|
Packit |
6f02de |
safestrprt(cp, stdout, 0);
|
|
Packit |
6f02de |
ps++;
|
|
Packit |
6f02de |
goto print_nma;
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
# else /* HASNCACHE>1 */
|
|
Packit |
6f02de |
if (NcacheReload) {
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
# if defined(NCACHELDPFX)
|
|
Packit |
6f02de |
NCACHELDPFX
|
|
Packit |
6f02de |
# endif /* defined(NCACHELDPFX) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
(void) ncache_load();
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
# if defined(NCACHELDSFX)
|
|
Packit |
6f02de |
NCACHELDSFX
|
|
Packit |
6f02de |
# endif /* defined(NCACHELDSFX) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
NcacheReload = 0;
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
if ((cp = ncache_lookup(buf, sizeof(buf), &fp))) {
|
|
Packit |
6f02de |
if (fp) {
|
|
Packit |
6f02de |
safestrprt(cp, stdout, 0);
|
|
Packit |
6f02de |
ps++;
|
|
Packit |
6f02de |
} else {
|
|
Packit |
6f02de |
if (Lf->fsdir) {
|
|
Packit |
6f02de |
safestrprt(Lf->fsdir, stdout, 0);
|
|
Packit |
6f02de |
ps++;
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
if (*cp) {
|
|
Packit |
6f02de |
(void) fputs(" -- ", stdout);
|
|
Packit |
6f02de |
safestrprt(cp, stdout, 0);
|
|
Packit |
6f02de |
ps++;
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
goto print_nma;
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
if (Lf->fsdir) {
|
|
Packit |
6f02de |
safestrprt(Lf->fsdir, stdout, 0);
|
|
Packit |
6f02de |
ps++;
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
# endif /* HASNCACHE<2 */
|
|
Packit |
6f02de |
#endif /* defined(HASNCACHE) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
if (Lf->fsdev) {
|
|
Packit |
6f02de |
if (Lf->fsdir)
|
|
Packit |
6f02de |
(void) fputs(" (", stdout);
|
|
Packit |
6f02de |
else
|
|
Packit |
6f02de |
(void) putchar('(');
|
|
Packit |
6f02de |
safestrprt(Lf->fsdev, stdout, 0);
|
|
Packit |
6f02de |
(void) putchar(')');
|
|
Packit |
6f02de |
ps++;
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
/*
|
|
Packit |
6f02de |
* Print the NAME column addition, if there is one. If there isn't
|
|
Packit |
6f02de |
* make sure a NL is printed, as requested.
|
|
Packit |
6f02de |
*/
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
print_nma:
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
if (Lf->nma) {
|
|
Packit |
6f02de |
if (ps)
|
|
Packit |
6f02de |
putchar(' ');
|
|
Packit |
6f02de |
safestrprt(Lf->nma, stdout, 0);
|
|
Packit |
6f02de |
ps++;
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
/*
|
|
Packit |
6f02de |
* If this file has TCP/IP state information, print it.
|
|
Packit |
6f02de |
*/
|
|
Packit |
6f02de |
if (!Ffield && Ftcptpi
|
|
Packit |
6f02de |
&& (Lf->lts.type >= 0
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(HASTCPTPIQ)
|
|
Packit |
6f02de |
|| ((Ftcptpi & TCPTPI_QUEUES) && (Lf->lts.rqs || Lf->lts.sqs))
|
|
Packit |
6f02de |
#endif /* defined(HASTCPTPIQ) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(HASTCPTPIW)
|
|
Packit |
6f02de |
|| ((Ftcptpi & TCPTPI_WINDOWS) && (Lf->lts.rws || Lf->lts.wws))
|
|
Packit |
6f02de |
#endif /* defined(HASTCPTPIW) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
)) {
|
|
Packit |
6f02de |
if (ps)
|
|
Packit |
6f02de |
putchar(' ');
|
|
Packit |
6f02de |
(void) print_tcptpi(0);
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
if (nl)
|
|
Packit |
6f02de |
putchar('\n');
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
/*
|
|
Packit |
6f02de |
* printrawaddr() - print raw socket address
|
|
Packit |
6f02de |
*/
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
void
|
|
Packit |
6f02de |
printrawaddr(sa)
|
|
Packit |
6f02de |
struct sockaddr *sa; /* socket address */
|
|
Packit |
6f02de |
{
|
|
Packit |
6f02de |
char *ep;
|
|
Packit |
6f02de |
size_t sz;
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
ep = endnm(&sz);
|
|
Packit |
6f02de |
(void) snpf(ep, sz, "%u/%u,%u,%u,%u,%u,%u,%u,%u,%u,%u,%u,%u,%u,%u",
|
|
Packit |
6f02de |
sa->sa_family,
|
|
Packit |
6f02de |
(unsigned char)sa->sa_data[0],
|
|
Packit |
6f02de |
(unsigned char)sa->sa_data[1],
|
|
Packit |
6f02de |
(unsigned char)sa->sa_data[2],
|
|
Packit |
6f02de |
(unsigned char)sa->sa_data[3],
|
|
Packit |
6f02de |
(unsigned char)sa->sa_data[4],
|
|
Packit |
6f02de |
(unsigned char)sa->sa_data[5],
|
|
Packit |
6f02de |
(unsigned char)sa->sa_data[6],
|
|
Packit |
6f02de |
(unsigned char)sa->sa_data[7],
|
|
Packit |
6f02de |
(unsigned char)sa->sa_data[8],
|
|
Packit |
6f02de |
(unsigned char)sa->sa_data[9],
|
|
Packit |
6f02de |
(unsigned char)sa->sa_data[10],
|
|
Packit |
6f02de |
(unsigned char)sa->sa_data[11],
|
|
Packit |
6f02de |
(unsigned char)sa->sa_data[12],
|
|
Packit |
6f02de |
(unsigned char)sa->sa_data[13]);
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
/*
|
|
Packit |
6f02de |
* printsockty() - print socket type
|
|
Packit |
6f02de |
*/
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
char *
|
|
Packit |
6f02de |
printsockty(ty)
|
|
Packit |
6f02de |
int ty; /* socket type -- e.g., from so_type */
|
|
Packit |
6f02de |
{
|
|
Packit |
6f02de |
static char buf[64];
|
|
Packit |
6f02de |
char *cp;
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
switch (ty) {
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(SOCK_STREAM)
|
|
Packit |
6f02de |
case SOCK_STREAM:
|
|
Packit |
6f02de |
cp = "STREAM";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(SOCK_STREAM) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(SOCK_STREAM)
|
|
Packit |
6f02de |
case SOCK_DGRAM:
|
|
Packit |
6f02de |
cp = "DGRAM";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(SOCK_DGRAM) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(SOCK_RAW)
|
|
Packit |
6f02de |
case SOCK_RAW:
|
|
Packit |
6f02de |
cp = "RAW";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(SOCK_RAW) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(SOCK_RDM)
|
|
Packit |
6f02de |
case SOCK_RDM:
|
|
Packit |
6f02de |
cp = "RDM";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(SOCK_RDM) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(SOCK_SEQPACKET)
|
|
Packit |
6f02de |
case SOCK_SEQPACKET:
|
|
Packit |
6f02de |
cp = "SEQPACKET";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(SOCK_SEQPACKET) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
default:
|
|
Packit |
6f02de |
(void) snpf(buf, sizeof(buf), "SOCK_%#x", ty);
|
|
Packit |
6f02de |
return(buf);
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
(void) snpf(buf, sizeof(buf), "SOCK_%s", cp);
|
|
Packit |
6f02de |
return(buf);
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
/*
|
|
Packit |
6f02de |
* printuid() - print User ID or login name
|
|
Packit |
6f02de |
*/
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
char *
|
|
Packit |
6f02de |
printuid(uid, ty)
|
|
Packit |
6f02de |
UID_ARG uid; /* User IDentification number */
|
|
Packit |
6f02de |
int *ty; /* returned UID type pointer (NULL
|
|
Packit |
6f02de |
* (if none wanted). If non-NULL
|
|
Packit |
6f02de |
* then: *ty = 0 = login name
|
|
Packit |
6f02de |
* = 1 = UID number */
|
|
Packit |
6f02de |
{
|
|
Packit |
6f02de |
int i;
|
|
Packit |
6f02de |
struct passwd *pw;
|
|
Packit |
6f02de |
struct stat sb;
|
|
Packit |
6f02de |
static struct stat sbs;
|
|
Packit |
6f02de |
static struct uidcache {
|
|
Packit |
6f02de |
uid_t uid;
|
|
Packit |
6f02de |
char nm[LOGINML+1];
|
|
Packit |
6f02de |
struct uidcache *next;
|
|
Packit |
6f02de |
} **uc = (struct uidcache **)NULL;
|
|
Packit |
6f02de |
struct uidcache *up, *upn;
|
|
Packit |
6f02de |
static char user[USERPRTL+1];
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
if (Futol) {
|
|
Packit |
6f02de |
if (CkPasswd) {
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
/*
|
|
Packit |
6f02de |
* Get the mtime and ctime of /etc/passwd, as required.
|
|
Packit |
6f02de |
*/
|
|
Packit |
6f02de |
if (stat("/etc/passwd", &sb) != 0) {
|
|
Packit |
6f02de |
(void) fprintf(stderr, "%s: can't stat(/etc/passwd): %s\n",
|
|
Packit |
6f02de |
Pn, strerror(errno));
|
|
Packit |
6f02de |
Exit(1);
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
/*
|
|
Packit |
6f02de |
* Define the UID cache, if necessary.
|
|
Packit |
6f02de |
*/
|
|
Packit |
6f02de |
if (!uc) {
|
|
Packit |
6f02de |
if (!(uc = (struct uidcache **)calloc(UIDCACHEL,
|
|
Packit |
6f02de |
sizeof(struct uidcache *))))
|
|
Packit |
6f02de |
{
|
|
Packit |
6f02de |
(void) fprintf(stderr,
|
|
Packit |
6f02de |
"%s: no space for %d byte UID cache hash buckets\n",
|
|
Packit |
6f02de |
Pn, (int)(UIDCACHEL * (sizeof(struct uidcache *))));
|
|
Packit |
6f02de |
Exit(1);
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
if (CkPasswd) {
|
|
Packit |
6f02de |
sbs = sb;
|
|
Packit |
6f02de |
CkPasswd = 0;
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
/*
|
|
Packit |
6f02de |
* If it's time to check /etc/passwd and if its the mtime/ctime has
|
|
Packit |
6f02de |
* changed, destroy the existing UID cache.
|
|
Packit |
6f02de |
*/
|
|
Packit |
6f02de |
if (CkPasswd) {
|
|
Packit |
6f02de |
if (sbs.st_mtime != sb.st_mtime || sbs.st_ctime != sb.st_ctime)
|
|
Packit |
6f02de |
{
|
|
Packit |
6f02de |
for (i = 0; i < UIDCACHEL; i++) {
|
|
Packit |
6f02de |
if ((up = uc[i])) {
|
|
Packit |
6f02de |
do {
|
|
Packit |
6f02de |
upn = up->next;
|
|
Packit |
6f02de |
(void) free((FREE_P *)up);
|
|
Packit |
6f02de |
} while ((up = upn) != (struct uidcache *)NULL);
|
|
Packit |
6f02de |
uc[i] = (struct uidcache *)NULL;
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
sbs = sb;
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
CkPasswd = 0;
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
/*
|
|
Packit |
6f02de |
* Search the UID cache.
|
|
Packit |
6f02de |
*/
|
|
Packit |
6f02de |
i = (int)((((unsigned long)uid * 31415L) >> 7) & (UIDCACHEL - 1));
|
|
Packit |
6f02de |
for (up = uc[i]; up; up = up->next) {
|
|
Packit |
6f02de |
if (up->uid == (uid_t)uid) {
|
|
Packit |
6f02de |
if (ty)
|
|
Packit |
6f02de |
*ty = 0;
|
|
Packit |
6f02de |
return(up->nm);
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
/*
|
|
Packit |
6f02de |
* The UID is not in the cache.
|
|
Packit |
6f02de |
*
|
|
Packit |
6f02de |
* Look up the login name from the UID for a new cache entry.
|
|
Packit |
6f02de |
*/
|
|
Packit |
6f02de |
if (!(pw = getpwuid((uid_t)uid))) {
|
|
Packit |
6f02de |
if (!Fwarn) {
|
|
Packit |
6f02de |
(void) fprintf(stderr, "%s: no pwd entry for UID %lu\n",
|
|
Packit |
6f02de |
Pn, (unsigned long)uid);
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
} else {
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
/*
|
|
Packit |
6f02de |
* Allocate and fill a new cache entry. Link it to its hash bucket.
|
|
Packit |
6f02de |
*/
|
|
Packit |
6f02de |
if (!(upn = (struct uidcache *)malloc(sizeof(struct uidcache))))
|
|
Packit |
6f02de |
{
|
|
Packit |
6f02de |
(void) fprintf(stderr,
|
|
Packit |
6f02de |
"%s: no space for UID cache entry for: %lu, %s)\n",
|
|
Packit |
6f02de |
Pn, (unsigned long)uid, pw->pw_name);
|
|
Packit |
6f02de |
Exit(1);
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
(void) strncpy(upn->nm, pw->pw_name, LOGINML);
|
|
Packit |
6f02de |
upn->nm[LOGINML] = '\0';
|
|
Packit |
6f02de |
upn->uid = (uid_t)uid;
|
|
Packit |
6f02de |
upn->next = uc[i];
|
|
Packit |
6f02de |
uc[i] = upn;
|
|
Packit |
6f02de |
if (ty)
|
|
Packit |
6f02de |
*ty = 0;
|
|
Packit |
6f02de |
return(upn->nm);
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
/*
|
|
Packit |
6f02de |
* Produce a numeric conversion of the UID.
|
|
Packit |
6f02de |
*/
|
|
Packit |
6f02de |
(void) snpf(user, sizeof(user), "%*lu", USERPRTL, (unsigned long)uid);
|
|
Packit |
6f02de |
if (ty)
|
|
Packit |
6f02de |
*ty = 1;
|
|
Packit |
6f02de |
return(user);
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
/*
|
|
Packit |
6f02de |
* printunkaf() - print unknown address family
|
|
Packit |
6f02de |
*/
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
void
|
|
Packit |
6f02de |
printunkaf(fam, ty)
|
|
Packit |
6f02de |
int fam; /* unknown address family */
|
|
Packit |
6f02de |
int ty; /* output type: 0 = terse; 1 = full */
|
|
Packit |
6f02de |
{
|
|
Packit |
6f02de |
char *p, *s;
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
p = "";
|
|
Packit |
6f02de |
switch (fam) {
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(AF_UNSPEC)
|
|
Packit |
6f02de |
case AF_UNSPEC:
|
|
Packit |
6f02de |
s = "UNSPEC";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(AF_UNSPEC) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(AF_UNIX)
|
|
Packit |
6f02de |
case AF_UNIX:
|
|
Packit |
6f02de |
s = "UNIX";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(AF_UNIX) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(AF_INET)
|
|
Packit |
6f02de |
case AF_INET:
|
|
Packit |
6f02de |
s = "INET";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(AF_INET) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(AF_INET6)
|
|
Packit |
6f02de |
case AF_INET6:
|
|
Packit |
6f02de |
s = "INET6";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(AF_INET6) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(AF_IMPLINK)
|
|
Packit |
6f02de |
case AF_IMPLINK:
|
|
Packit |
6f02de |
s = "IMPLINK";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(AF_IMPLINK) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(AF_PUP)
|
|
Packit |
6f02de |
case AF_PUP:
|
|
Packit |
6f02de |
s = "PUP";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(AF_PUP) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(AF_CHAOS)
|
|
Packit |
6f02de |
case AF_CHAOS:
|
|
Packit |
6f02de |
s = "CHAOS";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(AF_CHAOS) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(AF_NS)
|
|
Packit |
6f02de |
case AF_NS:
|
|
Packit |
6f02de |
s = "NS";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(AF_NS) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(AF_ISO)
|
|
Packit |
6f02de |
case AF_ISO:
|
|
Packit |
6f02de |
s = "ISO";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(AF_ISO) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(AF_NBS)
|
|
Packit |
6f02de |
# if !defined(AF_ISO) || AF_NBS!=AF_ISO
|
|
Packit |
6f02de |
case AF_NBS:
|
|
Packit |
6f02de |
s = "NBS";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
# endif /* !defined(AF_ISO) || AF_NBS!=AF_ISO */
|
|
Packit |
6f02de |
#endif /* defined(AF_NBS) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(AF_ECMA)
|
|
Packit |
6f02de |
case AF_ECMA:
|
|
Packit |
6f02de |
s = "ECMA";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(AF_ECMA) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(AF_DATAKIT)
|
|
Packit |
6f02de |
case AF_DATAKIT:
|
|
Packit |
6f02de |
s = "DATAKIT";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(AF_DATAKIT) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(AF_CCITT)
|
|
Packit |
6f02de |
case AF_CCITT:
|
|
Packit |
6f02de |
s = "CCITT";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(AF_CCITT) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(AF_SNA)
|
|
Packit |
6f02de |
case AF_SNA:
|
|
Packit |
6f02de |
s = "SNA";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(AF_SNA) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(AF_DECnet)
|
|
Packit |
6f02de |
case AF_DECnet:
|
|
Packit |
6f02de |
s = "DECnet";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(AF_DECnet) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(AF_DLI)
|
|
Packit |
6f02de |
case AF_DLI:
|
|
Packit |
6f02de |
s = "DLI";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(AF_DLI) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(AF_LAT)
|
|
Packit |
6f02de |
case AF_LAT:
|
|
Packit |
6f02de |
s = "LAT";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(AF_LAT) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(AF_HYLINK)
|
|
Packit |
6f02de |
case AF_HYLINK:
|
|
Packit |
6f02de |
s = "HYLINK";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(AF_HYLINK) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(AF_APPLETALK)
|
|
Packit |
6f02de |
case AF_APPLETALK:
|
|
Packit |
6f02de |
s = "APPLETALK";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(AF_APPLETALK) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(AF_BSC)
|
|
Packit |
6f02de |
case AF_BSC:
|
|
Packit |
6f02de |
s = "BSC";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(AF_BSC) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(AF_DSS)
|
|
Packit |
6f02de |
case AF_DSS:
|
|
Packit |
6f02de |
s = "DSS";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(AF_DSS) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(AF_ROUTE)
|
|
Packit |
6f02de |
case AF_ROUTE:
|
|
Packit |
6f02de |
s = "ROUTE";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(AF_ROUTE) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(AF_RAW)
|
|
Packit |
6f02de |
case AF_RAW:
|
|
Packit |
6f02de |
s = "RAW";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(AF_RAW) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(AF_LINK)
|
|
Packit |
6f02de |
case AF_LINK:
|
|
Packit |
6f02de |
s = "LINK";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(AF_LINK) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(pseudo_AF_XTP)
|
|
Packit |
6f02de |
case pseudo_AF_XTP:
|
|
Packit |
6f02de |
p = "pseudo_";
|
|
Packit |
6f02de |
s = "XTP";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(pseudo_AF_XTP) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(AF_RMP)
|
|
Packit |
6f02de |
case AF_RMP:
|
|
Packit |
6f02de |
s = "RMP";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(AF_RMP) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(AF_COIP)
|
|
Packit |
6f02de |
case AF_COIP:
|
|
Packit |
6f02de |
s = "COIP";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(AF_COIP) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(AF_CNT)
|
|
Packit |
6f02de |
case AF_CNT:
|
|
Packit |
6f02de |
s = "CNT";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(AF_CNT) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(pseudo_AF_RTIP)
|
|
Packit |
6f02de |
case pseudo_AF_RTIP:
|
|
Packit |
6f02de |
p = "pseudo_";
|
|
Packit |
6f02de |
s = "RTIP";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(pseudo_AF_RTIP) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(AF_NETMAN)
|
|
Packit |
6f02de |
case AF_NETMAN:
|
|
Packit |
6f02de |
s = "NETMAN";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(AF_NETMAN) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(AF_INTF)
|
|
Packit |
6f02de |
case AF_INTF:
|
|
Packit |
6f02de |
s = "INTF";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(AF_INTF) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(AF_NETWARE)
|
|
Packit |
6f02de |
case AF_NETWARE:
|
|
Packit |
6f02de |
s = "NETWARE";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(AF_NETWARE) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(AF_NDD)
|
|
Packit |
6f02de |
case AF_NDD:
|
|
Packit |
6f02de |
s = "NDD";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(AF_NDD) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(AF_NIT)
|
|
Packit |
6f02de |
# if !defined(AF_ROUTE) || AF_ROUTE!=AF_NIT
|
|
Packit |
6f02de |
case AF_NIT:
|
|
Packit |
6f02de |
s = "NIT";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
# endif /* !defined(AF_ROUTE) || AF_ROUTE!=AF_NIT */
|
|
Packit |
6f02de |
#endif /* defined(AF_NIT) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(AF_802)
|
|
Packit |
6f02de |
# if !defined(AF_RAW) || AF_RAW!=AF_802
|
|
Packit |
6f02de |
case AF_802:
|
|
Packit |
6f02de |
s = "802";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
# endif /* !defined(AF_RAW) || AF_RAW!=AF_802 */
|
|
Packit |
6f02de |
#endif /* defined(AF_802) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(AF_X25)
|
|
Packit |
6f02de |
case AF_X25:
|
|
Packit |
6f02de |
s = "X25";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(AF_X25) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(AF_CTF)
|
|
Packit |
6f02de |
case AF_CTF:
|
|
Packit |
6f02de |
s = "CTF";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(AF_CTF) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(AF_WAN)
|
|
Packit |
6f02de |
case AF_WAN:
|
|
Packit |
6f02de |
s = "WAN";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(AF_WAN) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(AF_OSINET)
|
|
Packit |
6f02de |
# if defined(AF_INET) && AF_INET!=AF_OSINET
|
|
Packit |
6f02de |
case AF_OSINET:
|
|
Packit |
6f02de |
s = "OSINET";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
# endif /* defined(AF_INET) && AF_INET!=AF_OSINET */
|
|
Packit |
6f02de |
#endif /* defined(AF_OSINET) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(AF_GOSIP)
|
|
Packit |
6f02de |
case AF_GOSIP:
|
|
Packit |
6f02de |
s = "GOSIP";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(AF_GOSIP) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(AF_SDL)
|
|
Packit |
6f02de |
case AF_SDL:
|
|
Packit |
6f02de |
s = "SDL";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(AF_SDL) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(AF_IPX)
|
|
Packit |
6f02de |
case AF_IPX:
|
|
Packit |
6f02de |
s = "IPX";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(AF_IPX) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(AF_SIP)
|
|
Packit |
6f02de |
case AF_SIP:
|
|
Packit |
6f02de |
s = "SIP";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(AF_SIP) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(psuedo_AF_PIP)
|
|
Packit |
6f02de |
case psuedo_AF_PIP:
|
|
Packit |
6f02de |
p = "pseudo_";
|
|
Packit |
6f02de |
s = "PIP";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(psuedo_AF_PIP) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(AF_OTS)
|
|
Packit |
6f02de |
case AF_OTS:
|
|
Packit |
6f02de |
s = "OTS";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(AF_OTS) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(pseudo_AF_BLUE)
|
|
Packit |
6f02de |
case pseudo_AF_BLUE: /* packets for Blue box */
|
|
Packit |
6f02de |
p = "pseudo_";
|
|
Packit |
6f02de |
s = "BLUE";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(pseudo_AF_BLUE) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(AF_NDRV) /* network driver raw access */
|
|
Packit |
6f02de |
case AF_NDRV:
|
|
Packit |
6f02de |
s = "NDRV";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(AF_NDRV) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(AF_SYSTEM) /* kernel event messages */
|
|
Packit |
6f02de |
case AF_SYSTEM:
|
|
Packit |
6f02de |
s = "SYSTEM";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(AF_SYSTEM) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(AF_USER)
|
|
Packit |
6f02de |
case AF_USER:
|
|
Packit |
6f02de |
s = "USER";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(AF_USER) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(pseudo_AF_KEY)
|
|
Packit |
6f02de |
case pseudo_AF_KEY:
|
|
Packit |
6f02de |
p = "pseudo_";
|
|
Packit |
6f02de |
s = "KEY";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(pseudo_AF_KEY) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(AF_KEY) /* Security Association DB socket */
|
|
Packit |
6f02de |
case AF_KEY:
|
|
Packit |
6f02de |
s = "KEY";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(AF_KEY) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(AF_NCA) /* NCA socket */
|
|
Packit |
6f02de |
case AF_NCA:
|
|
Packit |
6f02de |
s = "NCA";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(AF_NCA) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(AF_POLICY) /* Security Policy DB socket */
|
|
Packit |
6f02de |
case AF_POLICY:
|
|
Packit |
6f02de |
s = "POLICY";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(AF_POLICY) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if defined(AF_PPP) /* PPP socket */
|
|
Packit |
6f02de |
case AF_PPP:
|
|
Packit |
6f02de |
s = "PPP";
|
|
Packit |
6f02de |
break;
|
|
Packit |
6f02de |
#endif /* defined(AF_PPP) */
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
default:
|
|
Packit |
6f02de |
if (!ty)
|
|
Packit |
6f02de |
(void) snpf(Namech, Namechl, "%#x", fam);
|
|
Packit |
6f02de |
else
|
|
Packit |
6f02de |
(void) snpf(Namech, Namechl,
|
|
Packit |
6f02de |
"no further information on family %#x", fam);
|
|
Packit |
6f02de |
return;
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
if (!ty)
|
|
Packit |
6f02de |
(void) snpf(Namech, Namechl, "%sAF_%s", p, s);
|
|
Packit |
6f02de |
else
|
|
Packit |
6f02de |
(void) snpf(Namech, Namechl, "no further information on %sAF_%s",
|
|
Packit |
6f02de |
p, s);
|
|
Packit |
6f02de |
return;
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
#if !defined(HASNORPC_H)
|
|
Packit |
6f02de |
/*
|
|
Packit |
6f02de |
* update_portmap() - update a portmap entry with its port number or service
|
|
Packit |
6f02de |
* name
|
|
Packit |
6f02de |
*/
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
static void
|
|
Packit |
6f02de |
update_portmap(pt, pn)
|
|
Packit |
6f02de |
struct porttab *pt; /* porttab entry */
|
|
Packit |
6f02de |
char *pn; /* port name */
|
|
Packit |
6f02de |
{
|
|
Packit |
6f02de |
MALLOC_S al, nl;
|
|
Packit |
6f02de |
char *cp;
|
|
Packit |
6f02de |
|
|
Packit |
6f02de |
if (pt->ss)
|
|
Packit |
6f02de |
return;
|
|
Packit |
6f02de |
if (!(al = strlen(pn))) {
|
|
Packit |
6f02de |
pt->ss = 1;
|
|
Packit |
6f02de |
return;
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
nl = al + pt->nl + 2;
|
|
Packit |
6f02de |
if (!(cp = (char *)malloc(nl + 1))) {
|
|
Packit |
6f02de |
(void) fprintf(stderr,
|
|
Packit |
6f02de |
"%s: can't allocate %d bytes for portmap name: %s[%s]\n",
|
|
Packit |
6f02de |
Pn, (int)(nl + 1), pn, pt->name);
|
|
Packit |
6f02de |
Exit(1);
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
(void) snpf(cp, nl + 1, "%s[%s]", pn, pt->name);
|
|
Packit |
6f02de |
(void) free((FREE_P *)pt->name);
|
|
Packit |
6f02de |
pt->name = cp;
|
|
Packit |
6f02de |
pt->nl = nl;
|
|
Packit |
6f02de |
pt->ss = 1;
|
|
Packit |
6f02de |
}
|
|
Packit |
6f02de |
#endif /* !defined(HASNORPC_H) */
|