xref: /titanic_44/usr/src/cmd/ipf/lib/common/getportproto.c (revision ab25eeb551a4be927a4b6ae2cf8aff7ed17decb4)
1*ab25eeb5Syz155240 /*
2*ab25eeb5Syz155240  * Copyright (C) 1993-2005  by Darren Reed.
3*ab25eeb5Syz155240  * See the IPFILTER.LICENCE file for details on licencing.
4*ab25eeb5Syz155240  */
5*ab25eeb5Syz155240 
67c478bd9Sstevel@tonic-gate #include <ctype.h>
77c478bd9Sstevel@tonic-gate #include "ipf.h"
87c478bd9Sstevel@tonic-gate 
getportproto(name,proto)97c478bd9Sstevel@tonic-gate int getportproto(name, proto)
107c478bd9Sstevel@tonic-gate char *name;
117c478bd9Sstevel@tonic-gate int proto;
127c478bd9Sstevel@tonic-gate {
137c478bd9Sstevel@tonic-gate 	struct servent *s;
147c478bd9Sstevel@tonic-gate 	struct protoent *p;
157c478bd9Sstevel@tonic-gate 
16*ab25eeb5Syz155240 	if (ISDIGIT(*name)) {
17*ab25eeb5Syz155240 		int number;
18*ab25eeb5Syz155240 		char *s;
19*ab25eeb5Syz155240 
20*ab25eeb5Syz155240 		for (s = name; *s != '\0'; s++)
21*ab25eeb5Syz155240 			if (!ISDIGIT(*s))
22*ab25eeb5Syz155240 				return -1;
23*ab25eeb5Syz155240 
24*ab25eeb5Syz155240 		number = atoi(name);
25*ab25eeb5Syz155240 		if (number < 0 || number > 65535)
26*ab25eeb5Syz155240 			return -1;
27*ab25eeb5Syz155240 		return htons(number);
28*ab25eeb5Syz155240 	}
297c478bd9Sstevel@tonic-gate 
307c478bd9Sstevel@tonic-gate 	p = getprotobynumber(proto);
31*ab25eeb5Syz155240 	s = getservbyname(name, p ? p->p_name : NULL);
327c478bd9Sstevel@tonic-gate 	if (s != NULL)
337c478bd9Sstevel@tonic-gate 		return s->s_port;
34*ab25eeb5Syz155240 	return -1;
357c478bd9Sstevel@tonic-gate }
36