1145519Sdarrenr/* $FreeBSD$ */ 2145510Sdarrenr 3145510Sdarrenr/* 4255332Scy * Copyright (C) 2012 by Darren Reed. 5145510Sdarrenr * 6145510Sdarrenr * See the IPFILTER.LICENCE file for details on licencing. 7145510Sdarrenr * 8255332Scy * $Id$ 9145510Sdarrenr */ 10145510Sdarrenr#include "ipf.h" 11145510Sdarrenr 12145510Sdarrenr 13255332Scychar *portname(pr, port) 14255332Scy int pr, port; 15145510Sdarrenr{ 16255332Scy static char buf[32]; 17255332Scy struct protoent *p = NULL; 18255332Scy struct servent *sv = NULL; 19255332Scy struct servent *sv1 = NULL; 20145510Sdarrenr 21145510Sdarrenr if ((opts & OPT_NORESOLVE) == 0) { 22145510Sdarrenr if (pr == -1) { 23145510Sdarrenr if ((sv = getservbyport(htons(port), "tcp"))) { 24145510Sdarrenr strncpy(buf, sv->s_name, sizeof(buf)-1); 25145510Sdarrenr buf[sizeof(buf)-1] = '\0'; 26145510Sdarrenr sv1 = getservbyport(htons(port), "udp"); 27145510Sdarrenr sv = strncasecmp(buf, sv->s_name, strlen(buf)) ? 28145510Sdarrenr NULL : sv1; 29145510Sdarrenr } 30145510Sdarrenr if (sv) 31145510Sdarrenr return buf; 32145510Sdarrenr } else if ((pr != -2) && (p = getprotobynumber(pr))) { 33145510Sdarrenr if ((sv = getservbyport(htons(port), p->p_name))) { 34145510Sdarrenr strncpy(buf, sv->s_name, sizeof(buf)-1); 35145510Sdarrenr buf[sizeof(buf)-1] = '\0'; 36145510Sdarrenr return buf; 37145510Sdarrenr } 38145510Sdarrenr } 39145510Sdarrenr } 40145510Sdarrenr 41145510Sdarrenr (void) sprintf(buf, "%d", port); 42145510Sdarrenr return buf; 43145510Sdarrenr} 44