summaryrefslogtreecommitdiff
path: root/usr/src/lib/nsswitch/files/common/getprotoent.c
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/lib/nsswitch/files/common/getprotoent.c')
-rw-r--r--usr/src/lib/nsswitch/files/common/getprotoent.c59
1 files changed, 28 insertions, 31 deletions
diff --git a/usr/src/lib/nsswitch/files/common/getprotoent.c b/usr/src/lib/nsswitch/files/common/getprotoent.c
index 25659b2e92..2f3578d13b 100644
--- a/usr/src/lib/nsswitch/files/common/getprotoent.c
+++ b/usr/src/lib/nsswitch/files/common/getprotoent.c
@@ -2,9 +2,8 @@
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
- * Common Development and Distribution License, Version 1.0 only
- * (the "License"). You may not use this file except in compliance
- * with the License.
+ * Common Development and Distribution License (the "License").
+ * You may not use this file except in compliance with the License.
*
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
* or http://www.opensolaris.org/os/licensing.
@@ -20,10 +19,10 @@
* CDDL HEADER END
*/
/*
- * Copyright (c) 1988-1995 Sun Microsystems Inc
- * All Rights Reserved.
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms.
*
- * files/getprotoent.c -- "files" backend for nsswitch "protocols" database
+ * files/getprotoent.c -- "files" backend for nsswitch "protocols" database
*/
#pragma ident "%Z%%M% %I% %E% SMI"
@@ -31,41 +30,39 @@
#include <netdb.h>
#include "files_common.h"
#include <strings.h>
-
-static int
-check_name(args)
- nss_XbyY_args_t *args;
-{
- struct protoent *proto = (struct protoent *)args->returnval;
- const char *name = args->key.name;
- char **aliasp;
-
- if (strcmp(proto->p_name, name) == 0)
- return (1);
- for (aliasp = proto->p_aliases; *aliasp != 0; aliasp++) {
- if (strcmp(*aliasp, name) == 0)
- return (1);
- }
- return (0);
-}
+#include <ctype.h>
+#include <stdlib.h>
static nss_status_t
getbyname(be, a)
files_backend_ptr_t be;
void *a;
{
- nss_XbyY_args_t *argp = (nss_XbyY_args_t *) a;
+ nss_XbyY_args_t *argp = (nss_XbyY_args_t *)a;
- return (_nss_files_XY_all(be, argp, 1, argp->key.name, check_name));
+ return (_nss_files_XY_all(be, argp, 1, argp->key.name,
+ _nss_files_check_name_aliases));
}
static int
-check_addr(args)
- nss_XbyY_args_t *args;
+check_addr(nss_XbyY_args_t *argp, const char *line, int linelen)
{
- struct protoent *proto = (struct protoent *)args->returnval;
+ int proto;
+ const char *limit, *linep;
+
+ linep = line;
+ limit = line + linelen;
- return (proto->p_proto == args->key.number);
+ /* skip name */
+ while (linep < limit && !isspace(*linep))
+ linep++;
+ /* skip the delimiting spaces */
+ while (linep < limit && isspace(*linep))
+ linep++;
+ if (linep == limit)
+ return (0);
+ proto = (int)strtol(linep, NULL, 10);
+ return (proto == argp->key.number);
}
static nss_status_t
@@ -73,10 +70,10 @@ getbynumber(be, a)
files_backend_ptr_t be;
void *a;
{
- nss_XbyY_args_t *argp = (nss_XbyY_args_t *) a;
+ nss_XbyY_args_t *argp = (nss_XbyY_args_t *)a;
char numstr[12];
- sprintf(numstr, "%d", argp->key.number);
+ (void) snprintf(numstr, 12, "%d", argp->key.number);
return (_nss_files_XY_all(be, argp, 1, 0, check_addr));
}