1/* $FreeBSD: releng/11.0/contrib/ipfilter/lib/getportproto.c 255332 2013-09-06 23:11:19Z cy $ */ 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 11#include <ctype.h> 12#include "ipf.h" 13 14int getportproto(name, proto) 15 char *name; 16 int proto; 17{ 18 struct servent *s; 19 struct protoent *p; 20 21 if (ISDIGIT(*name)) { 22 int number; 23 char *s; 24 25 for (s = name; *s != '\0'; s++) 26 if (!ISDIGIT(*s)) 27 return -1; 28 29 number = atoi(name); 30 if (number < 0 || number > 65535) 31 return -1; 32 return htons(number); 33 } 34 35 p = getprotobynumber(proto); 36 s = getservbyname(name, p ? p->p_name : NULL); 37 if (s != NULL) 38 return s->s_port; 39 return -1; 40} 41