xref: /illumos-gate/usr/src/cmd/ipf/lib/getportproto.c (revision f3ac678143127d4c6c1793fadabb5ded04e127b6)
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 Soome int 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