diff options
author | nectar <nectar@FreeBSD.org> | 2000-09-06 18:16:48 +0000 |
---|---|---|
committer | nectar <nectar@FreeBSD.org> | 2000-09-06 18:16:48 +0000 |
commit | 748554442d0ac4467fdac2ce9d42006588fd4481 (patch) | |
tree | aed2ddbcac97f46f60ee9c2063a3345553f6a1ee /usr.bin | |
parent | 59ffb36b778f8e629622726f6bd32dfa4fda7e35 (diff) | |
download | FreeBSD-src-748554442d0ac4467fdac2ce9d42006588fd4481.zip FreeBSD-src-748554442d0ac4467fdac2ce9d42006588fd4481.tar.gz |
Add nsswitch support. By creating an /etc/nsswitch.conf file, you can
configure FreeBSD so that various databases such as passwd and group can be
looked up using flat files, NIS, or Hesiod.
= Hesiod has been added to libc (see hesiod(3)).
= A library routine for parsing nsswitch.conf and invoking callback
functions as specified has been added to libc (see nsdispatch(3)).
= The following C library functions have been modified to use nsdispatch:
. getgrent, getgrnam, getgrgid
. getpwent, getpwnam, getpwuid
. getusershell
. getaddrinfo
. gethostbyname, gethostbyname2, gethostbyaddr
. getnetbyname, getnetbyaddr
. getipnodebyname, getipnodebyaddr, getnodebyname, getnodebyaddr
= host.conf has been removed from src/etc. rc.network has been modified
to warn that host.conf is no longer used at boot time. In addition, if
there is a host.conf but no nsswitch.conf, the latter is created at boot
time from the former.
Obtained from: NetBSD
Diffstat (limited to 'usr.bin')
-rw-r--r-- | usr.bin/chpass/Makefile | 5 | ||||
-rw-r--r-- | usr.bin/chpass/chpass.c | 2 | ||||
-rw-r--r-- | usr.bin/chpass/edit.c | 2 | ||||
-rw-r--r-- | usr.bin/hesinfo/Makefile | 5 | ||||
-rw-r--r-- | usr.bin/hesinfo/hesinfo.1 | 226 | ||||
-rw-r--r-- | usr.bin/hesinfo/hesinfo.c | 116 |
6 files changed, 352 insertions, 4 deletions
diff --git a/usr.bin/chpass/Makefile b/usr.bin/chpass/Makefile index 7966608..8b2db0b 100644 --- a/usr.bin/chpass/Makefile +++ b/usr.bin/chpass/Makefile @@ -10,8 +10,9 @@ GENSRCS=yp.h yp_clnt.c yppasswd.h yppasswd_clnt.c yppasswd_private.h \ BINMODE=4555 .PATH: ${.CURDIR}/../../usr.sbin/pwd_mkdb ${.CURDIR}/../../usr.sbin/vipw \ ${.CURDIR}/../../libexec/ypxfr \ - ${.CURDIR}/../../usr.sbin/rpc.yppasswdd -CFLAGS+=-I${.CURDIR}/../../usr.sbin/pwd_mkdb -I${.CURDIR}/../../usr.sbin/vipw + ${.CURDIR}/../../usr.sbin/rpc.yppasswdd \ + ${.CURDIR}/../../lib/libc/gen +CFLAGS+=-I${.CURDIR}/../../usr.sbin/pwd_mkdb -I${.CURDIR}/../../usr.sbin/vipw -I${.CURDIR}/../../lib/libc/gen LINKS= ${BINDIR}/chpass ${BINDIR}/chfn LINKS+= ${BINDIR}/chpass ${BINDIR}/chsh LINKS+= ${BINDIR}/chpass ${BINDIR}/ypchpass diff --git a/usr.bin/chpass/chpass.c b/usr.bin/chpass/chpass.c index 77f9f78..69e700f 100644 --- a/usr.bin/chpass/chpass.c +++ b/usr.bin/chpass/chpass.c @@ -204,7 +204,7 @@ main(argc, argv) if (uid) baduser(); pw = &lpw; - if (!pw_scan(arg, pw)) + if (!__pw_scan(arg, pw, _PWSCAN_WARN|_PWSCAN_MASTER)) exit(1); } username = pw->pw_name; diff --git a/usr.bin/chpass/edit.c b/usr.bin/chpass/edit.c index 6311d575..a5d3d5d 100644 --- a/usr.bin/chpass/edit.c +++ b/usr.bin/chpass/edit.c @@ -264,5 +264,5 @@ bad: (void)fclose(fp); return (0); } free(p); - return (pw_scan(buf, pw)); + return (__pw_scan(buf, pw, _PWSCAN_WARN|_PWSCAN_MASTER)); } diff --git a/usr.bin/hesinfo/Makefile b/usr.bin/hesinfo/Makefile new file mode 100644 index 0000000..870db28 --- /dev/null +++ b/usr.bin/hesinfo/Makefile @@ -0,0 +1,5 @@ +# $FreeBSD$ + +PROG= hesinfo + +.include <bsd.prog.mk> diff --git a/usr.bin/hesinfo/hesinfo.1 b/usr.bin/hesinfo/hesinfo.1 new file mode 100644 index 0000000..b43910c --- /dev/null +++ b/usr.bin/hesinfo/hesinfo.1 @@ -0,0 +1,226 @@ +.\" $NetBSD: hesinfo.1,v 1.1 1999/01/25 22:45:55 lukem Exp $ +.\" $FreeBSD$ +.\" +.\" from: #Id: hesinfo.1,v 1.9 1996/11/07 01:57:12 ghudson Exp # +.\" +.\" Copyright 1987, 1996 by the Massachusetts Institute of Technology. +.\" +.\" Permission to use, copy, modify, and distribute this +.\" software and its documentation for any purpose and without +.\" fee is hereby granted, provided that the above copyright +.\" notice appear in all copies and that both that copyright +.\" notice and this permission notice appear in supporting +.\" documentation, and that the name of M.I.T. not be used in +.\" advertising or publicity pertaining to distribution of the +.\" software without specific, written prior permission. +.\" M.I.T. makes no representations about the suitability of +.\" this software for any purpose. It is provided "as is" +.\" without express or implied warranty. +.TH HESINFO 1 "27 October 1996" +.FM mit +.SH NAME +hesinfo \- find out what is stored in the Hesiod database +.SH SYNOPSIS +.nf +hesinfo \fI[-bl]\fR \fIHesiodName\fR \fIHesiodNameType\fR +.SH DESCRIPTION +.I hesinfo +takes two arguments, a name to be resolved and a string, known +as a HesiodNameType. It then prints the information returned by +the Hesiod nameserver. +.PP +The value returned by +.B hesinfo +is of the type +.I HesiodNameType. +.PP +.I hesinfo +understands the following options: +.TP +.B -l +Selects long format. +.TP +.B -b +Prints the fully-qualified string passed to the nameserver. + +.PP +.SS VALID Hesiod_Names +The following types of identifiers may be used in the +.I HesiodName +argument to +.B hesinfo. +These values will be resolved by accessing the +.B hesiod +database. + +.TP +.B \<username> +the 8-character-or-less string used to identify users or classes +(e.g. joeuser, root, 1.00, etc). +Used with the +.I Hesiod_Name_Types +.BR passwd, +.BR pobox, +and +.BR filsys. + + +.TP +.B \<uid> +the id number assigned to a user. + +.TP +.B \<groupid> +the id number assigned to a group. + +.TP +.B \<groupname> +a name identifying a unique group. + +.TP +.B \<file-system-name> +the name of an athena file system. + +.TP +.B \<rvd server>:<pack> +the name of an rvd's server and pack seperated by a colon. + +.TP +.B \<nfs server>:<partition> +the name of an nfs server and its partition seperated by a colon. + +.TP +.B \<workstation-name> +the machine name of an Athena workstation (e.g. E40-343-3). + +.TP +.B \<service-name> +name of an Athena service (e.g. Zephyr). + +.TP +.B \<service-type> +name of Unix service (valid entries are defined in /etc/services). + +.TP +.B \<printer-name> +name of a printer. + +.TP +.B \<printer-cluster-name> +name of an Athena print cluster. + +.TP +.B \<foo> +some +.B hesinfo +calls (e.g. +.B prclusterlist +) do not require a specific +.I HesiodName +argument. However, you must include a dummy string (e.g. 'foo') for +.B hesinfo + to work properly. + + + + +.PP +.SS VALID Hesiod_Name_Types +The following symbols are valid substitutions for the +.I HesiodNameType +argument to +.B hesinfo. + +.TP +.B \ passwd +returns string suitable for inclusion in +.I /etc/passwd, +searching with +.B <username>. + +.TP +.B \ pobox +returns information on the pobox assigned to the user specified by +.I HesiodName, +searching with +.B <username>. + + +.TP +.B \ uid +returns string suitable for inclusion in +.I /etc/passwd, +searching with +.B <uid>. + +.TP +.B \ gid +returns string suitable for inclusion in +.I /etc/group, +searching with +.B <groupid>. + +.TP +.B \ group +returns string suitable for inclusion in +.I /etc/group, +searching with +.B <groupname>. + +.TP +.B \ grplist +returns subgroups included in superset +defined by +.B <groupname>. + +.TP +.B \ filsys +returns file system type, export point, server, mount mode, and import point +for the following valid +.I HesiodNames +(see above) +.B - <file system name>, <username>, <rvd server>:<pack>, +.B and <nfs server>:<partition> + +.TP +.B \ cluster +returns information about the local cluster the workstation, specified by +.B <workstation name>. +Included is information about the local file and print servers. This +information is accesses by +.B clusterinfo +at boot time. + +.TP +.B \ sloc +returns network name of service host for +.B <service-name>. + +.TP +.B \ service +returns Internet protocol type and protocol service port for +.B <service-type>. + +.TP +.B \ pcap +returns a valid entry for /etc/printcap for +.B <printer-name>. + +.TP +.B \ prcluserlist +returns a list of print clusters. + +.TP +.B \ prcluster +returns a list of printers in a cluster specified by +.B <printer-cluster-name>. + +.SH FILES +/etc/hesiod.conf +.SH "SEE ALSO" +`Hesiod - Project Athena Technical Plan -- Name Service', named(8), hesiod(3) +.SH AUTHOR +Steve Dyer, IBM/Project Athena +.br +Copyright 1987, 1988, 1996 by the Massachusetts Institute of Technology. +.br diff --git a/usr.bin/hesinfo/hesinfo.c b/usr.bin/hesinfo/hesinfo.c new file mode 100644 index 0000000..d0d9c2d --- /dev/null +++ b/usr.bin/hesinfo/hesinfo.c @@ -0,0 +1,116 @@ +/* $NetBSD: hesinfo.c,v 1.1 1999/01/25 22:45:55 lukem Exp $ */ + +/* Copyright 1988, 1996 by the Massachusetts Institute of Technology. + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + +/* This file is a simple driver for the Hesiod library. */ + + +#include <sys/cdefs.h> +#ifndef lint +static char rcsid[] = + "$FreeBSD$"; +#endif /* not lint */ + +#include <err.h> +#include <errno.h> +#include <hesiod.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> + +int main __P((int, char **)); +extern char *__progname; + +int +main(argc, argv) + int argc; + char **argv; +{ + char **list, **p, *bindname, *name, *type; + int lflag = 0, errflg = 0, bflag = 0, c; + void *context; + + while ((c = getopt(argc, argv, "lb")) != -1) { + switch (c) { + case 'l': + lflag = 1; + break; + case 'b': + bflag = 1; + break; + default: + errflg++; + break; + } + } + if (argc - optind != 2 || errflg) { + fprintf(stderr, "Usage: %s [-bl] name type\n", __progname); + fprintf(stderr, "\t-l selects long format\n"); + fprintf(stderr, "\t-b also does hes_to_bind conversion\n"); + exit(2); + } + name = argv[optind]; + type = argv[optind + 1]; + + if (hesiod_init(&context) < 0) { + if (errno == ENOEXEC) + warnx( + "hesiod_init: Invalid Hesiod configuration file."); + else + warn("hesiod_init"); + } + /* Display bind name if requested. */ + if (bflag) { + if (lflag) + printf("hes_to_bind(%s, %s) expands to\n", name, type); + bindname = hesiod_to_bind(context, name, type); + if (!bindname) { + if (lflag) + printf("nothing\n"); + if (errno == ENOENT) + warnx("hesiod_to_bind: Unknown rhs-extension."); + else + warn("hesiod_to_bind"); + exit(1); + } + printf("%s\n", bindname); + free(bindname); + if (lflag) + printf("which "); + } + if (lflag) + printf("resolves to\n"); + + /* Do the hesiod resolve and check for errors. */ + list = hesiod_resolve(context, name, type); + if (!list) { + if (lflag) + printf("nothing\n"); + if (errno == ENOENT) + warnx("hesiod_resolve: Hesiod name not found."); + else + warn("hesiod_resolve"); + exit(1); + } + /* Display the results. */ + for (p = list; *p; p++) + printf("%s\n", *p); + + hesiod_free_list(context, list); + hesiod_end(context); + exit(0); +} |