diff options
Diffstat (limited to 'lib/portname.c')
-rw-r--r-- | lib/portname.c | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/lib/portname.c b/lib/portname.c new file mode 100644 index 0000000..d8bf1d9 --- /dev/null +++ b/lib/portname.c @@ -0,0 +1,40 @@ +/* + * Copyright (C) 2000-2003 by Darren Reed. + * + * See the IPFILTER.LICENCE file for details on licencing. + * + * $Id: portname.c,v 1.7.2.1 2006/06/16 17:21:09 darrenr Exp $ + */ +#include "ipf.h" + + +char *portname(pr, port) +int pr, port; +{ + static char buf[32]; + struct protoent *p = NULL; + struct servent *sv = NULL, *sv1 = NULL; + + if ((opts & OPT_NORESOLVE) == 0) { + if (pr == -1) { + if ((sv = getservbyport(htons(port), "tcp"))) { + strncpy(buf, sv->s_name, sizeof(buf)-1); + buf[sizeof(buf)-1] = '\0'; + sv1 = getservbyport(htons(port), "udp"); + sv = strncasecmp(buf, sv->s_name, strlen(buf)) ? + NULL : sv1; + } + if (sv) + return buf; + } else if ((pr != -2) && (p = getprotobynumber(pr))) { + if ((sv = getservbyport(htons(port), p->p_name))) { + strncpy(buf, sv->s_name, sizeof(buf)-1); + buf[sizeof(buf)-1] = '\0'; + return buf; + } + } + } + + (void) sprintf(buf, "%d", port); + return buf; +} |