update from main archive 961110

Sun Nov 10 23:28:16 1996  Ulrich Drepper  <drepper@cygnus.com>

	* inet/getprtname_r.c: Reformat copyright.

	* nss/Makefile (databases): Add key.
	(libnss_files-routines): Exclude key database.
	(libnss_db-routines): Likewise.
	* nss/key-lookup.c: New file.

	* nss/getXXent_r.c (last_nip): Remember last service used since
	last setXXent call.
	(SETFUNC): Don't force to work through whole list of services in
	call to __nss_next.
	Update last_nip if necessary.
	(ENDFUNC): Only process endXXent function up to currently used
	last service.
	(GETFUNC): Update last_nip if necessary.

	* nss/nss_files/files-netgrp.c (_nss_netgroup_parseline): Don't
	make static.

	* rpc/auth_des.h: New file.
	* sunrpc/Makefile (headers): Add auth_des.h.
	(routines): Add publickey.
	* sunrpc/publickey.c: New file.  Interface to public key handling.
	* sunrpc/rpc/auth_des.h: New file.
	* sunrpc/rpc/netdb.h: Really include <rpc/auth_des.h>.
This commit is contained in:
Ulrich Drepper 1996-11-11 00:59:33 +00:00
parent 2303f5fdd9
commit d4a089cf19
11 changed files with 242 additions and 32 deletions

View File

@ -1,3 +1,31 @@
Sun Nov 10 23:28:16 1996 Ulrich Drepper <drepper@cygnus.com>
* inet/getprtname_r.c: Reformat copyright.
* nss/Makefile (databases): Add key.
(libnss_files-routines): Exclude key database.
(libnss_db-routines): Likewise.
* nss/key-lookup.c: New file.
* nss/getXXent_r.c (last_nip): Remember last service used since
last setXXent call.
(SETFUNC): Don't force to work through whole list of services in
call to __nss_next.
Update last_nip if necessary.
(ENDFUNC): Only process endXXent function up to currently used
last service.
(GETFUNC): Update last_nip if necessary.
* nss/nss_files/files-netgrp.c (_nss_netgroup_parseline): Don't
make static.
* rpc/auth_des.h: New file.
* sunrpc/Makefile (headers): Add auth_des.h.
(routines): Add publickey.
* sunrpc/publickey.c: New file. Interface to public key handling.
* sunrpc/rpc/auth_des.h: New file.
* sunrpc/rpc/netdb.h: Really include <rpc/auth_des.h>.
Sun Nov 10 02:37:15 1996 Ulrich Drepper <drepper@cygnus.com>
* inet/gethstent_r.c: Update copyright.

View File

@ -1,21 +1,21 @@
/* Copyright (C) 1996 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with the GNU C Library; see the file COPYING.LIB. If
not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
You should have received a copy of the GNU Library General Public
License along with the GNU C Library; see the file COPYING.LIB. If not,
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#include <netdb.h>

View File

@ -33,7 +33,7 @@ routines = nsswitch $(addsuffix -lookup,$(databases))
# Caution: if you add a database here, you must add its real name
# in databases.def, too.
databases = proto service hosts network grp pwd rpc ethers \
spwd netgrp
spwd netgrp key
# Specify rules for the nss_* modules. We have some services.
services := files dns db
@ -48,12 +48,12 @@ subdir-dirs = $(services:%=nss_%)
vpath %.c $(subdir-dirs)
libnss_files-routines := $(addprefix files-,$(databases))
libnss_files-routines := $(addprefix files-,$(filter-out key, $(databases)))
distribute += files-XXX.c files-parse.c
libnss_dns-routines := dns-host dns-network
libnss_db-routines := $(addprefix db-,$(filter-out hosts network,\
libnss_db-routines := $(addprefix db-,$(filter-out hosts network key,\
$(databases)))
generated += $(filter-out db-netgrp.c, \
$(addsuffix .c,$(libnss_db-routines)))

View File

@ -96,6 +96,8 @@ typedef int (*get_function) (LOOKUP_TYPE *, char *, int H_ERRNO_PARM);
/* This handle for the NSS data base is shared between all
set/get/endXXXent functions. */
static service_user *nip;
/* Remember the last service used since the last call to `endXXent'. */
static service_user *last_nip;
/* Remember the first service_entry, it's always the same. */
static service_user *startp;
@ -159,12 +161,14 @@ SETFUNC_NAME (STAYOPEN)
no_more = setup ((void **) &fct, SETFUNC_NAME_STRING, 1);
while (! no_more)
{
int is_last_nip = nip == last_nip;
enum nss_status status = (*fct) (STAYOPEN_VAR);
no_more = __nss_next (&nip, SETFUNC_NAME_STRING, (void **) &fct,
status, 1);
status, 0);
if (is_last_nip)
last_nip = nip;
}
nip = NULL;
#ifdef STAYOPEN_TMP
STAYOPEN_TMPVAR = STAYOPEN_VAR;
@ -197,9 +201,13 @@ ENDFUNC_NAME (void)
/* Ignore status, we force check in __NSS_NEXT. */
(void) (*fct) ();
if (nip == last_nip)
/* We have processed all services which were used. */
break;
no_more = __nss_next (&nip, ENDFUNC_NAME_STRING, (void **) &fct, 0, 1);
}
nip = NULL;
last_nip = nip = NULL;
__libc_lock_unlock (lock);
}
@ -232,6 +240,7 @@ INTERNAL (REENTRANT_GETNAME) (LOOKUP_TYPE *resbuf, char *buffer, size_t buflen,
no_more = setup ((void **) &fct, GETFUNC_NAME_STRING, 0);
while (! no_more)
{
int is_last_nip = nip == last_nip;
service_user *current_nip = nip;
status = (*fct) (resbuf, buffer, buflen H_ERRNO_VAR);
@ -239,11 +248,14 @@ INTERNAL (REENTRANT_GETNAME) (LOOKUP_TYPE *resbuf, char *buffer, size_t buflen,
no_more = __nss_next (&nip, GETFUNC_NAME_STRING, (void **) &fct,
status, 0);
if (is_last_nip)
last_nip = nip;
if (! no_more && current_nip != nip)
/* Call the `setXXent' function. This wasn't done before. */
do
{
set_function *sfct;
set_function sfct;
no_more = __nss_lookup (&nip, SETFUNC_NAME_STRING,
(void **) &sfct);

23
nss/key-lookup.c Normal file
View File

@ -0,0 +1,23 @@
/* Copyright (C) 1996 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with the GNU C Library; see the file COPYING.LIB. If not,
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#define DATABASE_NAME publickey
#define DEFAULT_CONFIG "nis nisplus"
#include "XXX-lookup.c"

View File

@ -160,7 +160,7 @@ _nss_files_endnetgrent (struct __netgrent *result)
}
static enum nss_status
enum nss_status
_nss_netgroup_parseline (char **cursor, struct __netgrent *result,
char *buffer, int buflen)
{

1
rpc/auth_des.h Normal file
View File

@ -0,0 +1 @@
#include <sunrpc/rpc/auth_des.h>

View File

@ -48,7 +48,7 @@ subdir := sunrpc
headers = $(addprefix rpc/,auth.h auth_unix.h clnt.h netdb.h pmap_clnt.h \
pmap_prot.h pmap_rmt.h rpc.h rpc_msg.h svc.h \
svc_auth.h types.h xdr.h) \
svc_auth.h types.h xdr.h auth_des.h) \
$(rpcsvc:%=rpcsvc/%) $(rpcsvc:%.x=rpcsvc/%.h)
rpcsvc = bootparam.x nlm_prot.x rstat.x \
yppasswd.x klm_prot.x rex.x sm_inter.x mount.x \
@ -64,7 +64,7 @@ routines := auth_none auth_unix authuxprot bindrsvprt \
pmap_prot2 pmap_rmt rpc_prot rpc_common rpc_cmsg \
svc svc_auth svc_authux svc_raw svc_run svc_simple \
svc_tcp svc_udp xdr xdr_array xdr_float xdr_mem \
xdr_rec xdr_ref xdr_stdio
xdr_rec xdr_ref xdr_stdio publickey
others := rpcinfo
install-bin := rpcgen

110
sunrpc/publickey.c Normal file
View File

@ -0,0 +1,110 @@
/* Get public or secret key from key server.
Copyright (C) 1996 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with the GNU C Library; see the file COPYING.LIB. If not,
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#include <rpc/netdb.h>
#include "nsswitch.h"
/* Type of the lookup function for the public key. */
typedef int (*public_function) (const char *, char *);
/* Type of the lookup function for the secret key. */
typedef int (*secret_function) (const char *, char *, const char *);
/* The lookup function for the first entry of this service. */
extern int __nss_publickey_lookup (service_user **nip, const char *name,
void **fctp);
int
getpublickey (const char *name, char *key)
{
static service_user *startp = NULL;
static public_function start_fct;
service_user *nip;
public_function fct;
enum nss_status status = NSS_STATUS_UNAVAIL;
int no_more;
if (startp == NULL)
{
no_more = __nss_publickey_lookup (&nip, "getpublickey", (void **) &fct);
if (no_more)
startp = (service_user *) -1;
else
{
startp = nip;
start_fct = fct;
}
}
else
{
fct = start_fct;
no_more = (nip = startp) == (service_user *) -1;
}
while (! no_more)
{
status = (*fct) (name, key);
no_more = __nss_next (&nip, "getpublickey", (void **) &fct, status, 0);
}
return status == NSS_STATUS_SUCCESS;
}
int
getsecretkey (const char *name, char *key, const char *passwd)
{
static service_user *startp = NULL;
static secret_function start_fct;
service_user *nip;
secret_function fct;
enum nss_status status = NSS_STATUS_UNAVAIL;
int no_more;
if (startp == NULL)
{
no_more = __nss_publickey_lookup (&nip, "getsecretkey", (void **) &fct);
if (no_more)
startp = (service_user *) -1;
else
{
startp = nip;
start_fct = fct;
}
}
else
{
fct = start_fct;
no_more = (nip = startp) == (service_user *) -1;
}
while (! no_more)
{
status = (*fct) (name, key, passwd);
no_more = __nss_next (&nip, "getsecretkey", (void **) &fct, status, 0);
}
return status == NSS_STATUS_SUCCESS;
}

42
sunrpc/rpc/auth_des.h Normal file
View File

@ -0,0 +1,42 @@
/* Copyright (C) 1996 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with the GNU C Library; see the file COPYING.LIB. If not,
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#ifndef _RPC_AUTH_DES_H
#define _RPC_AUTH_DES_H 1
#include <sys/cdefs.h>
/* This is no complete version of this header. More defintions with
the real authentification stuff will come in 1997. For now we only
need to define the function for handling public keys. */
/* Get the public key for NAME and place it in KEY. NAME can only be
up to MAXNETNAMELEN bytes long and the destination buffer KEY should
have HEXKEYBATES + 1 bytes long to fit all characters from the key. */
extern int getpublickey __P ((__const char *__name, char *__key));
/* Get the secret key for NAME and place it in KEY. PASSWD is used to
decrypt the encrypted key stored in the database. NAME can only be
up to MAXNETNAMELEN bytes long and the destination buffer KEY
should have HEXKEYBATES + 1 bytes long to fit all characters from
the key. */
extern int getsecretkey __P ((__const char *__name, char *__key,
__const char *__passwd));
#endif /* rpc/auth_des.h */

View File

@ -6,11 +6,11 @@
* may copy or modify Sun RPC without charge, but are not authorized
* to license or distribute it to anyone else except as part of a product or
* program developed by the user.
*
*
* SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
* WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
* PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
*
*
* Sun RPC is provided with no support and without any obligation on the
* part of Sun Microsystems, Inc. to assist in its use, correction,
* modification or enhancement.
@ -52,13 +52,7 @@
/* semi-private protocol headers */
#include <rpc/rpc_msg.h> /* protocol for rpc messages */
#include <rpc/auth_unix.h> /* protocol for unix style cred */
/*
* Uncomment-out the next line if you are building the rpc library with
* DES Authentication (see the README file in the secure_rpc/ directory).
*/
#if 0
#include <rpc/auth_des.h> /* protocol for des style cred */
#endif
/* Server side only remote procedure callee */
#include <rpc/svc.h> /* service manager and multiplexer */