1*41edb306SCy Schubert
2*41edb306SCy Schubert /*
3*41edb306SCy Schubert * Copyright (C) 2012 by Darren Reed.
4*41edb306SCy Schubert *
5*41edb306SCy Schubert * See the IPFILTER.LICENCE file for details on licencing.
6*41edb306SCy Schubert *
7*41edb306SCy Schubert * $Id$
8*41edb306SCy Schubert */
9*41edb306SCy Schubert #include "ipf.h"
10*41edb306SCy Schubert
11*41edb306SCy Schubert
12*41edb306SCy Schubert char *
portname(int pr,int port)13*41edb306SCy Schubert portname(int pr, int port)
14*41edb306SCy Schubert {
15*41edb306SCy Schubert static char buf[32];
16*41edb306SCy Schubert struct protoent *p = NULL;
17*41edb306SCy Schubert struct servent *sv = NULL;
18*41edb306SCy Schubert struct servent *sv1 = NULL;
19*41edb306SCy Schubert
20*41edb306SCy Schubert if ((opts & OPT_NORESOLVE) == 0) {
21*41edb306SCy Schubert if (pr == -1) {
22*41edb306SCy Schubert if ((sv = getservbyport(htons(port), "tcp"))) {
23*41edb306SCy Schubert strncpy(buf, sv->s_name, sizeof(buf)-1);
24*41edb306SCy Schubert buf[sizeof(buf)-1] = '\0';
25*41edb306SCy Schubert sv1 = getservbyport(htons(port), "udp");
26*41edb306SCy Schubert sv = strncasecmp(buf, sv->s_name, strlen(buf)) ?
27*41edb306SCy Schubert NULL : sv1;
28*41edb306SCy Schubert }
29*41edb306SCy Schubert if (sv)
30*41edb306SCy Schubert return (buf);
31*41edb306SCy Schubert } else if ((pr != -2) && (p = getprotobynumber(pr))) {
32*41edb306SCy Schubert if ((sv = getservbyport(htons(port), p->p_name))) {
33*41edb306SCy Schubert strncpy(buf, sv->s_name, sizeof(buf)-1);
34*41edb306SCy Schubert buf[sizeof(buf)-1] = '\0';
35*41edb306SCy Schubert return (buf);
36*41edb306SCy Schubert }
37*41edb306SCy Schubert }
38*41edb306SCy Schubert }
39*41edb306SCy Schubert
40*41edb306SCy Schubert (void) snprintf(buf, sizeof(buf), "%d", port);
41*41edb306SCy Schubert return (buf);
42*41edb306SCy Schubert }
43