1145519Sdarrenr/* $FreeBSD$ */ 2145510Sdarrenr 3170268Sdarrenr/* 4255332Scy * Copyright (C) 2012 by Darren Reed. 5255332Scy * 6255332Scy * See the IPFILTER.LICENCE file for details on licencing. 7255332Scy * 8255332Scy * $Id$ 9255332Scy */ 10170268Sdarrenr 11145510Sdarrenr#include <ctype.h> 12145510Sdarrenr#include "ipf.h" 13145510Sdarrenr 14145510Sdarrenrint getportproto(name, proto) 15255332Scy char *name; 16255332Scy int proto; 17145510Sdarrenr{ 18145510Sdarrenr struct servent *s; 19145510Sdarrenr struct protoent *p; 20145510Sdarrenr 21145510Sdarrenr if (ISDIGIT(*name)) { 22145510Sdarrenr int number; 23145510Sdarrenr char *s; 24145510Sdarrenr 25145510Sdarrenr for (s = name; *s != '\0'; s++) 26145510Sdarrenr if (!ISDIGIT(*s)) 27145510Sdarrenr return -1; 28145510Sdarrenr 29145510Sdarrenr number = atoi(name); 30145510Sdarrenr if (number < 0 || number > 65535) 31145510Sdarrenr return -1; 32145510Sdarrenr return htons(number); 33145510Sdarrenr } 34145510Sdarrenr 35145510Sdarrenr p = getprotobynumber(proto); 36145510Sdarrenr s = getservbyname(name, p ? p->p_name : NULL); 37145510Sdarrenr if (s != NULL) 38145510Sdarrenr return s->s_port; 39145510Sdarrenr return -1; 40145510Sdarrenr} 41