1/*
2 * CDDL HEADER START
3 *
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License, Version 1.0 only
6 * (the "License").  You may not use this file except in compliance
7 * with the License.
8 *
9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10 * or http://www.opensolaris.org/os/licensing.
11 * See the License for the specific language governing permissions
12 * and limitations under the License.
13 *
14 * When distributing Covered Code, include this CDDL HEADER in each
15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16 * If applicable, add the following below this CDDL HEADER, with the
17 * fields enclosed by brackets "[]" replaced with your own identifying
18 * information: Portions Copyright [yyyy] [name of copyright owner]
19 *
20 * CDDL HEADER END
21 */
22#ident	"%Z%%M%	%I%	%E% SMI"
23
24/*
25 * Copyright (c) 1994, by Sun Microsystems, Inc.
26 */
27
28#include <stdio.h>
29#include <stdlib.h>
30#include <sys/types.h>
31#include <sys/socket.h>
32#include <netinet/in.h>
33#include <netdb.h>
34#include "getent.h"
35
36static int
37putprotoent(const struct protoent *pp, FILE *fp)
38{
39	char **p;
40	int rc = 0;
41
42	if (pp == NULL) {
43		return (1);
44	}
45
46	if (fprintf(fp, "%-20s %d",
47		    pp->p_name, pp->p_proto) == EOF)
48		rc = 1;
49	for (p = pp->p_aliases; *p != 0; p++) {
50		if (fprintf(fp, " %s", *p) == EOF)
51			rc = 1;
52	}
53	if (putc('\n', fp) == EOF)
54		rc = 1;
55	return (rc);
56}
57
58/*
59 * getprotobyname/addr - get entries from protocols database
60 */
61int
62dogetproto(const char **list)
63{
64	struct protoent *pp;
65	int rc = EXC_SUCCESS;
66
67	if (list == NULL || *list == NULL) {
68		while ((pp = getprotoent()) != NULL)
69			(void) putprotoent(pp, stdout);
70	} else {
71		for (; *list != NULL; list++) {
72			int protocol = atoi(*list);
73			if (protocol != 0)
74				pp = getprotobynumber(protocol);
75			else
76				pp = getprotobyname(*list);
77			if (pp == NULL)
78				rc = EXC_NAME_NOT_FOUND;
79			else
80				(void) putprotoent(pp, stdout);
81		}
82	}
83
84	return (rc);
85}
86