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