1*f3ac6781SToomas Soome /* 2*f3ac6781SToomas Soome * Copyright (C) 1993-2005 by Darren Reed. 3*f3ac6781SToomas Soome * See the IPFILTER.LICENCE file for details on licencing. 4*f3ac6781SToomas Soome */ 5*f3ac6781SToomas Soome 6*f3ac6781SToomas Soome #include <ctype.h> 7*f3ac6781SToomas Soome #include "ipf.h" 8*f3ac6781SToomas Soome getportproto(name,proto)9*f3ac6781SToomas Soomeint getportproto(name, proto) 10*f3ac6781SToomas Soome char *name; 11*f3ac6781SToomas Soome int proto; 12*f3ac6781SToomas Soome { 13*f3ac6781SToomas Soome struct servent *s; 14*f3ac6781SToomas Soome struct protoent *p; 15*f3ac6781SToomas Soome 16*f3ac6781SToomas Soome if (ISDIGIT(*name)) { 17*f3ac6781SToomas Soome int number; 18*f3ac6781SToomas Soome char *s; 19*f3ac6781SToomas Soome 20*f3ac6781SToomas Soome for (s = name; *s != '\0'; s++) 21*f3ac6781SToomas Soome if (!ISDIGIT(*s)) 22*f3ac6781SToomas Soome return -1; 23*f3ac6781SToomas Soome 24*f3ac6781SToomas Soome number = atoi(name); 25*f3ac6781SToomas Soome if (number < 0 || number > 65535) 26*f3ac6781SToomas Soome return -1; 27*f3ac6781SToomas Soome return htons(number); 28*f3ac6781SToomas Soome } 29*f3ac6781SToomas Soome 30*f3ac6781SToomas Soome p = getprotobynumber(proto); 31*f3ac6781SToomas Soome s = getservbyname(name, p ? p->p_name : NULL); 32*f3ac6781SToomas Soome if (s != NULL) 33*f3ac6781SToomas Soome return s->s_port; 34*f3ac6781SToomas Soome return -1; 35*f3ac6781SToomas Soome } 36