12490Sjkh/* $FreeBSD$ */ 22490Sjkh 32490Sjkh/* 42490Sjkh * Copyright (C) 2012 by Darren Reed. 52490Sjkh * 62490Sjkh * See the IPFILTER.LICENCE file for details on licencing. 72490Sjkh * 82490Sjkh * $Id$ 92490Sjkh */ 102490Sjkh 112490Sjkh#include <ctype.h> 12216239Suqs#include "ipf.h" 132490Sjkh 142490Sjkhint getportproto(name, proto) 152490Sjkh char *name; 162490Sjkh int proto; 172490Sjkh{ 182490Sjkh struct servent *s; 192490Sjkh struct protoent *p; 202490Sjkh 212490Sjkh if (ISDIGIT(*name)) { 222490Sjkh int number; 232490Sjkh char *s; 242490Sjkh 252490Sjkh for (s = name; *s != '\0'; s++) 262490Sjkh if (!ISDIGIT(*s)) 272490Sjkh return -1; 282490Sjkh 2950472Speter number = atoi(name); 302490Sjkh if (number < 0 || number > 65535) 31210089Semaste return -1; 32201613Sedwin return htons(number); 33208732Suqs } 34201613Sedwin 35201613Sedwin p = getprotobynumber(proto); 36201613Sedwin s = getservbyname(name, p ? p->p_name : NULL); 37201613Sedwin if (s != NULL) 38237216Seadler return s->s_port; 39210089Semaste return -1; 40201613Sedwin} 41201613Sedwin