aboutsummaryrefslogtreecommitdiff
path: root/usr.bin
diff options
context:
space:
mode:
authorEmmanuel Vadot <manu@FreeBSD.org>2025-01-22 17:00:09 +0000
committerEmmanuel Vadot <manu@FreeBSD.org>2025-01-22 17:04:26 +0000
commit9dcb984251b35ab1959bcaafcb3f129c8ae2f25b (patch)
tree84225e08df54a2d5e8f748f80fd40b5fef1837ff /usr.bin
parent723425f837270dd3b22098168ae9464a1ebe38c6 (diff)
Remove publickey(5) stuff
This uses DES and it's likely that nobody uses that in 2025. If somebody uses this we help them by deprecating and removing this. Reviewed by: bapt, emaste Differential Revision: https://reviews.freebsd.org/D30683
Diffstat (limited to 'usr.bin')
-rw-r--r--usr.bin/Makefile4
-rw-r--r--usr.bin/chkey/Makefile13
-rw-r--r--usr.bin/chkey/Makefile.depend16
-rw-r--r--usr.bin/chkey/Makefile.depend.options7
-rw-r--r--usr.bin/chkey/chkey.132
-rw-r--r--usr.bin/chkey/chkey.c267
-rw-r--r--usr.bin/keylogin/Makefile5
-rw-r--r--usr.bin/keylogin/Makefile.depend18
-rw-r--r--usr.bin/keylogin/keylogin.137
-rw-r--r--usr.bin/keylogin/keylogin.c81
-rw-r--r--usr.bin/keylogout/Makefile3
-rw-r--r--usr.bin/keylogout/Makefile.depend17
-rw-r--r--usr.bin/keylogout/keylogout.149
-rw-r--r--usr.bin/keylogout/keylogout.c68
-rw-r--r--usr.bin/newkey/Makefile11
-rw-r--r--usr.bin/newkey/Makefile.depend20
-rw-r--r--usr.bin/newkey/extern.h45
-rw-r--r--usr.bin/newkey/generic.c124
-rw-r--r--usr.bin/newkey/newkey.866
-rw-r--r--usr.bin/newkey/newkey.c228
-rw-r--r--usr.bin/newkey/update.c332
21 files changed, 0 insertions, 1443 deletions
diff --git a/usr.bin/Makefile b/usr.bin/Makefile
index 9baa90aab499..bca7896e5a17 100644
--- a/usr.bin/Makefile
+++ b/usr.bin/Makefile
@@ -61,8 +61,6 @@ SUBDIR= alias \
ipcs \
join \
jot \
- keylogin \
- keylogout \
killall \
ktrace \
ktrdump \
@@ -236,8 +234,6 @@ SUBDIR.${MK_NIS}+= ypcat
SUBDIR.${MK_NIS}+= ypmatch
SUBDIR.${MK_NIS}+= ypwhich
SUBDIR.${MK_OPENSSH}+= ssh-copy-id
-SUBDIR.${MK_OPENSSL}+= chkey
-SUBDIR.${MK_OPENSSL}+= newkey
SUBDIR.${MK_QUOTAS}+= quota
SUBDIR.${MK_SENDMAIL}+= vacation
SUBDIR.${MK_TALK}+= talk
diff --git a/usr.bin/chkey/Makefile b/usr.bin/chkey/Makefile
deleted file mode 100644
index 4b734787c0a3..000000000000
--- a/usr.bin/chkey/Makefile
+++ /dev/null
@@ -1,13 +0,0 @@
-.include <src.opts.mk>
-
-.PATH: ${SRCTOP}/usr.bin/newkey
-
-PROG= chkey
-SRCS= chkey.c generic.c update.c
-CFLAGS+= -I${SRCTOP}/usr.bin/newkey
-.if ${MK_NIS} != "no"
-CFLAGS+= -DYP
-.endif
-LIBADD+= rpcsvc mp
-
-.include <bsd.prog.mk>
diff --git a/usr.bin/chkey/Makefile.depend b/usr.bin/chkey/Makefile.depend
deleted file mode 100644
index 341f44c61163..000000000000
--- a/usr.bin/chkey/Makefile.depend
+++ /dev/null
@@ -1,16 +0,0 @@
-# Autogenerated - do NOT edit!
-
-DIRDEPS = \
- include \
- include/xlocale \
- lib/${CSU_DIR} \
- lib/libc \
- lib/libcompiler_rt \
- secure/lib/libcrypto \
-
-
-.include <dirdeps.mk>
-
-.if ${DEP_RELDIR} == ${_DEP_RELDIR}
-# local dependencies - needed for -jN in clean tree
-.endif
diff --git a/usr.bin/chkey/Makefile.depend.options b/usr.bin/chkey/Makefile.depend.options
deleted file mode 100644
index da5bb6f2ea36..000000000000
--- a/usr.bin/chkey/Makefile.depend.options
+++ /dev/null
@@ -1,7 +0,0 @@
-# This file is not autogenerated - take care!
-
-DIRDEPS_OPTIONS= NIS
-
-DIRDEPS.NIS.yes= lib/libmp
-
-.include <dirdeps-options.mk>
diff --git a/usr.bin/chkey/chkey.1 b/usr.bin/chkey/chkey.1
deleted file mode 100644
index 556d6c281d21..000000000000
--- a/usr.bin/chkey/chkey.1
+++ /dev/null
@@ -1,32 +0,0 @@
-.\" Copyright (c) 1988 Sun Microsystems, Inc. - All Rights Reserved.
-.\"
-.Dd July 5, 1989
-.Dt CHKEY 1
-.Os
-.Sh NAME
-.Nm chkey
-.Nd change your encryption key
-.Sh SYNOPSIS
-.Nm
-.Sh DEPRECATION NOTICE
-.Nm
-is deprecated and is not available as of
-.Fx 15.0.
-.Sh DESCRIPTION
-The
-.Nm
-utility prompts the user for their login password,
-and uses it to encrypt a new encryption key
-for the user to be stored in the
-.Xr publickey 5
-database.
-.Sh "SEE ALSO"
-.Xr keylogin 1 ,
-.Xr publickey 5 ,
-.Xr keyserv 8 ,
-.Xr newkey 8
-.Sh HISTORY
-The
-.Nm
-utility was removed from
-.Fx 15.0 .
diff --git a/usr.bin/chkey/chkey.c b/usr.bin/chkey/chkey.c
deleted file mode 100644
index 24cb3ec3b0b5..000000000000
--- a/usr.bin/chkey/chkey.c
+++ /dev/null
@@ -1,267 +0,0 @@
-/*
- * Sun RPC is a product of Sun Microsystems, Inc. and is provided for
- * unrestricted use provided that this legend is included on all tape
- * media and as a part of the software program in whole or part. Users
- * 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 or with the express written consent of
- * Sun Microsystems, Inc.
- *
- * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
- * WARRANTIES OF DESIGN, MERCHANTABILITY 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.
- *
- * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
- * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
- * OR ANY PART THEREOF.
- *
- * In no event will Sun Microsystems, Inc. be liable for any lost revenue
- * or profits or other special, indirect and consequential damages, even if
- * Sun has been advised of the possibility of such damages.
- *
- * Sun Microsystems, Inc.
- * 2550 Garcia Avenue
- * Mountain View, California 94043
- */
-
-#include <sys/cdefs.h>
-/*
- * Copyright (C) 1986, Sun Microsystems, Inc.
- */
-
-/*
- * Command to change one's public key in the public key database
- */
-#include <rpc/rpc.h>
-#include <rpc/key_prot.h>
-#ifdef YP
-#include <rpcsvc/yp_prot.h>
-#include <rpcsvc/ypclnt.h>
-#else
-#define YPOP_STORE 4
-#endif
-#include <sys/fcntl.h>
-#include <err.h>
-#include <pwd.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-#include "extern.h"
-
-#ifdef YPPASSWD
-struct passwd *ypgetpwuid(uid_t);
-#endif
-
-#ifdef YP
-static char *domain;
-static char PKMAP[] = "publickey.byname";
-#else
-static char PKFILE[] = "/etc/publickey";
-#endif /* YP */
-static char ROOTKEY[] = "/etc/.rootkey";
-
-static void usage(void) __dead2;
-extern int yp_update(char *, char *, int, char *, size_t, char *, size_t);
-
-int
-main(int argc, char **argv)
-{
- char name[MAXNETNAMELEN+1];
- char public[HEXKEYBYTES + 1];
- char secret[HEXKEYBYTES + 1];
- char crypt1[HEXKEYBYTES + KEYCHECKSUMSIZE + 1];
- char crypt2[HEXKEYBYTES + KEYCHECKSUMSIZE + 1];
- int status;
- char *pass;
- struct passwd *pw;
- uid_t uid;
- int force = 0;
- int ch;
-#ifdef YP
- char *master;
-#endif
-#ifdef YPPASSWD
- char *cryptpw;
-#endif
-
- fprintf(stderr, "chkey is deprecated and removed from FreeBSD 15.\n");
- while ((ch = getopt(argc, argv, "f")) != -1)
- switch(ch) {
- case 'f':
- force = 1;
- break;
- default:
- usage();
- }
- argc -= optind;
- argv += optind;
-
- if (argc != 0)
- usage();
-
-#ifdef YP
- (void)yp_get_default_domain(&domain);
- if (yp_master(domain, PKMAP, &master) != 0)
- errx(1, "can't find master of publickey database");
-#endif
- uid = getuid() /*geteuid()*/;
- if (uid == 0) {
- if (host2netname(name, NULL, NULL) == 0)
- errx(1, "cannot convert hostname to netname");
- } else {
- if (user2netname(name, uid, NULL) == 0)
- errx(1, "cannot convert username to netname");
- }
- (void)printf("Generating new key for %s.\n", name);
-
- if (!force) {
- if (uid != 0) {
-#ifdef YPPASSWD
- pw = ypgetpwuid(uid);
-#else
- pw = getpwuid(uid);
-#endif
- if (pw == NULL) {
-#ifdef YPPASSWD
- errx(1,
- "no NIS password entry found: can't change key");
-#else
- errx(1,
- "no password entry found: can't change key");
-#endif
- }
- } else {
- pw = getpwuid(0);
- if (pw == NULL)
- errx(1, "no password entry found: can't change key");
- }
- }
- pass = getpass("Password:");
-#ifdef YPPASSWD
- if (!force) {
- cryptpw = crypt(pass, pw->pw_passwd);
- if (cryptpw == NULL || strcmp(cryptpw, pw->pw_passwd) != 0)
- errx(1, "invalid password");
- }
-#else
- force = 1; /* Make this mandatory */
-#endif
- genkeys(public, secret, pass);
-
- memcpy(crypt1, secret, HEXKEYBYTES);
- memcpy(crypt1 + HEXKEYBYTES, secret, KEYCHECKSUMSIZE);
- crypt1[HEXKEYBYTES + KEYCHECKSUMSIZE] = 0;
- xencrypt(crypt1, pass);
-
- if (force) {
- memcpy(crypt2, crypt1, HEXKEYBYTES + KEYCHECKSUMSIZE + 1);
- xdecrypt(crypt2, getpass("Retype password:"));
- if (memcmp(crypt2, crypt2 + HEXKEYBYTES, KEYCHECKSUMSIZE) != 0
- || memcmp(crypt2, secret, HEXKEYBYTES) != 0)
- errx(1, "password incorrect");
- }
-
-#ifdef YP
- (void)printf("Sending key change request to %s...\n", master);
-#endif
- status = setpublicmap(name, public, crypt1);
- if (status != 0) {
-#ifdef YP
- errx(1, "unable to update NIS database (%u): %s",
- status, yperr_string(status));
-#else
- errx(1, "unable to update publickey database");
-#endif
- }
-
- if (uid == 0) {
- /*
- * Root users store their key in /etc/$ROOTKEY so
- * that they can auto reboot without having to be
- * around to type a password. Storing this in a file
- * is rather dubious: it should really be in the EEPROM
- * so it does not go over the net.
- */
- int fd;
-
- fd = open(ROOTKEY, O_WRONLY|O_TRUNC|O_CREAT, 0);
- if (fd < 0) {
- warn("%s", ROOTKEY);
- } else {
- char newline = '\n';
-
- if (write(fd, secret, strlen(secret)) < 0 ||
- write(fd, &newline, sizeof(newline)) < 0)
- warn("%s: write", ROOTKEY);
- }
- close(fd);
- }
-
- if (key_setsecret(secret) < 0)
- errx(1, "unable to login with new secret key");
- (void)printf("Done.\n");
- exit(0);
- /* NOTREACHED */
-}
-
-static void
-usage(void)
-{
- (void)fprintf(stderr, "usage: chkey [-f]\n");
- exit(1);
- /* NOTREACHED */
-}
-
-
-/*
- * Set the entry in the public key file
- */
-int
-setpublicmap(char *name, char *public, char *secret)
-{
- char pkent[1024];
-
- (void)sprintf(pkent,"%s:%s", public, secret);
-#ifdef YP
- return (yp_update(domain, PKMAP, YPOP_STORE,
- name, strlen(name), pkent, strlen(pkent)));
-#else
- return (localupdate(name, PKFILE, YPOP_STORE,
- strlen(name), name, strlen(pkent), pkent));
-#endif
-}
-
-#ifdef YPPASSWD
-struct passwd *
-ypgetpwuid(uid_t uid)
-{
- char uidstr[10];
- char *val;
- int vallen;
- static struct passwd pw;
- char *p;
-
- (void)sprintf(uidstr, "%d", uid);
- if (yp_match(domain, "passwd.byuid", uidstr, strlen(uidstr),
- &val, &vallen) != 0) {
- return (NULL);
- }
- p = strchr(val, ':');
- if (p == NULL) {
- return (NULL);
- }
- pw.pw_passwd = p + 1;
- p = strchr(pw.pw_passwd, ':');
- if (p == NULL) {
- return (NULL);
- }
- *p = 0;
- return (&pw);
-}
-#endif /* YPPASSWD */
diff --git a/usr.bin/keylogin/Makefile b/usr.bin/keylogin/Makefile
deleted file mode 100644
index 7a267e4c5a72..000000000000
--- a/usr.bin/keylogin/Makefile
+++ /dev/null
@@ -1,5 +0,0 @@
-PROG= keylogin
-
-LIBADD= rpcsvc
-
-.include <bsd.prog.mk>
diff --git a/usr.bin/keylogin/Makefile.depend b/usr.bin/keylogin/Makefile.depend
deleted file mode 100644
index 352a225b19c6..000000000000
--- a/usr.bin/keylogin/Makefile.depend
+++ /dev/null
@@ -1,18 +0,0 @@
-# Autogenerated - do NOT edit!
-
-DIRDEPS = \
- include \
- include/rpc \
- include/rpcsvc \
- include/xlocale \
- lib/${CSU_DIR} \
- lib/libc \
- lib/libcompiler_rt \
- lib/librpcsvc \
-
-
-.include <dirdeps.mk>
-
-.if ${DEP_RELDIR} == ${_DEP_RELDIR}
-# local dependencies - needed for -jN in clean tree
-.endif
diff --git a/usr.bin/keylogin/keylogin.1 b/usr.bin/keylogin/keylogin.1
deleted file mode 100644
index 550d670afbe7..000000000000
--- a/usr.bin/keylogin/keylogin.1
+++ /dev/null
@@ -1,37 +0,0 @@
-.\" Copyright (c) 1988 Sun Microsystems, Inc. - All Rights Reserved.
-.\"
-.Dd September 9, 1987
-.Dt KEYLOGIN 1
-.Os
-.Sh NAME
-.Nm keylogin
-.Nd decrypt and store secret key
-.Sh SYNOPSIS
-.Nm
-.Sh DEPRECATION NOTICE
-.Nm
-is deprecated and is not available as of
-.Fx 15.0.
-.Sh DESCRIPTION
-The
-.Nm
-utility prompts the user for their login password, and uses it to decrypt
-the user's secret key stored in the
-.Xr publickey 5
-database.
-Once decrypted, the user's key is stored by the local
-key server process
-.Xr keyserv 8
-to be used by any secure network services, such as NFS.
-.Sh SEE ALSO
-.Xr chkey 1 ,
-.Xr keylogout 1 ,
-.Xr login 1 ,
-.Xr publickey 5 ,
-.Xr keyserv 8 ,
-.Xr newkey 8
-.Sh HISTORY
-The
-.Nm
-utility was removed from
-.Fx 15.0 .
diff --git a/usr.bin/keylogin/keylogin.c b/usr.bin/keylogin/keylogin.c
deleted file mode 100644
index c64afa4846bc..000000000000
--- a/usr.bin/keylogin/keylogin.c
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * Sun RPC is a product of Sun Microsystems, Inc. and is provided for
- * unrestricted use provided that this legend is included on all tape
- * media and as a part of the software program in whole or part. Users
- * 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 or with the express written consent of
- * Sun Microsystems, Inc.
- *
- * 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.
- *
- * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
- * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
- * OR ANY PART THEREOF.
- *
- * In no event will Sun Microsystems, Inc. be liable for any lost revenue
- * or profits or other special, indirect and consequential damages, even if
- * Sun has been advised of the possibility of such damages.
- *
- * Sun Microsystems, Inc.
- * 2550 Garcia Avenue
- * Mountain View, California 94043
- */
-#include <sys/cdefs.h>
-/*
- * Copyright (C) 1986, Sun Microsystems, Inc.
- */
-
-/*
- * Set secret key on local machine
- */
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <pwd.h>
-#include <unistd.h>
-#include <rpc/rpc.h>
-#include <rpc/key_prot.h>
-
-extern int key_setnet(struct key_netstarg *);
-
-int
-main(void)
-{
- char fullname[MAXNETNAMELEN + 1];
- struct key_netstarg netst;
-
- fprintf(stderr, "keylogin is deprecated and removed from FreeBSD 15.\n");
- if (!getnetname(fullname)) {
- fprintf(stderr, "netname lookup failed -- make sure the ");
- fprintf(stderr, "system domain name is set.\n");
- exit(1);
- }
-
- if (! getsecretkey(fullname, (char *)&(netst.st_priv_key),
- getpass("Password:"))) {
- fprintf(stderr, "Can't find %s's secret key\n", fullname);
- exit(1);
- }
- if (netst.st_priv_key[0] == 0) {
- fprintf(stderr, "Password incorrect for %s\n", fullname);
- exit(1);
- }
-
- netst.st_pub_key[0] = 0;
- netst.st_netname = strdup(fullname);
-
- if (key_setnet(&netst) < 0) {
- fprintf(stderr, "Could not set %s's secret key\n", fullname);
- fprintf(stderr, "Maybe the keyserver is down?\n");
- exit(1);
- }
- exit(0);
- /* NOTREACHED */
-}
diff --git a/usr.bin/keylogout/Makefile b/usr.bin/keylogout/Makefile
deleted file mode 100644
index 244d6d2d0be7..000000000000
--- a/usr.bin/keylogout/Makefile
+++ /dev/null
@@ -1,3 +0,0 @@
-PROG= keylogout
-
-.include <bsd.prog.mk>
diff --git a/usr.bin/keylogout/Makefile.depend b/usr.bin/keylogout/Makefile.depend
deleted file mode 100644
index a2d89550fa2b..000000000000
--- a/usr.bin/keylogout/Makefile.depend
+++ /dev/null
@@ -1,17 +0,0 @@
-# Autogenerated - do NOT edit!
-
-DIRDEPS = \
- include \
- include/rpc \
- include/rpcsvc \
- include/xlocale \
- lib/${CSU_DIR} \
- lib/libc \
- lib/libcompiler_rt \
-
-
-.include <dirdeps.mk>
-
-.if ${DEP_RELDIR} == ${_DEP_RELDIR}
-# local dependencies - needed for -jN in clean tree
-.endif
diff --git a/usr.bin/keylogout/keylogout.1 b/usr.bin/keylogout/keylogout.1
deleted file mode 100644
index 348d7e380ea0..000000000000
--- a/usr.bin/keylogout/keylogout.1
+++ /dev/null
@@ -1,49 +0,0 @@
-.Dd April 15, 1989
-.Dt KEYLOGOUT 1
-.Os
-.Sh NAME
-.Nm keylogout
-.Nd delete stored secret key
-.Sh SYNOPSIS
-.Nm
-.Op Fl f
-.Sh DEPRECATION NOTICE
-.Nm
-is deprecated and is not available as of
-.Fx 15.0.
-.Sh DESCRIPTION
-The
-.Nm
-utility deletes the key stored by the key server process
-.Xr keyserv 8
-to be used by any secure network services, such as NFS.
-Further access to the key is revoked,
-however current session keys may remain valid till they expire,
-or are refreshed.
-This option will cause any background jobs that need secure RPC
-services to fail, and any scheduled
-.Nm at
-jobs that need the key to fail.
-Also since only one copy is kept on a machine of the key,
-it is a bad idea to place this in your
-.Pa .logout
-file since it will affect other sessions on the same machine.
-.Pp
-The following option is available:
-.Bl -tag -width indent
-.It Fl f
-Forget the rootkey.
-This will break secure NFS if it is done on a server.
-.El
-.Sh SEE ALSO
-.Xr chkey 1 ,
-.Xr keylogin 1 ,
-.Xr login 1 ,
-.Xr publickey 5 ,
-.Xr keyserv 8 ,
-.Xr newkey 8
-.Sh HISTORY
-The
-.Nm
-utility was removed from
-.Fx 15.0 .
diff --git a/usr.bin/keylogout/keylogout.c b/usr.bin/keylogout/keylogout.c
deleted file mode 100644
index faad41462340..000000000000
--- a/usr.bin/keylogout/keylogout.c
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Sun RPC is a product of Sun Microsystems, Inc. and is provided for
- * unrestricted use provided that this legend is included on all tape
- * media and as a part of the software program in whole or part. Users
- * 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 or with the express written consent of
- * Sun Microsystems, Inc.
- *
- * 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.
- *
- * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
- * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
- * OR ANY PART THEREOF.
- *
- * In no event will Sun Microsystems, Inc. be liable for any lost revenue
- * or profits or other special, indirect and consequential damages, even if
- * Sun has been advised of the possibility of such damages.
- *
- * Sun Microsystems, Inc.
- * 2550 Garcia Avenue
- * Mountain View, California 94043
- */
-/*
- * Copyright (C) 1986, Sun Microsystems, Inc.
- */
-
-#include <sys/cdefs.h>
-/*
- * unset the secret key on local machine
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <rpc/key_prot.h>
-
-int
-main(int argc, char **argv)
-{
- static char secret[HEXKEYBYTES + 1];
-
- fprintf(stderr, "keylogin is deprecated and removed from FreeBSD 15.\n");
- if (geteuid() == 0) {
- if ((argc != 2 ) || (strcmp(argv[1], "-f") != 0)) {
- fprintf(stderr,
-"keylogout by root would break all servers that use secure rpc!\n");
- fprintf(stderr,
-"root may use keylogout -f to do this (at your own risk)!\n");
- exit(1);
- }
- }
-
- if (key_setsecret(secret) < 0) {
- fprintf(stderr, "Could not unset your secret key.\n");
- fprintf(stderr, "Maybe the keyserver is down?\n");
- exit(1);
- }
- exit(0);
- /* NOTREACHED */
-}
diff --git a/usr.bin/newkey/Makefile b/usr.bin/newkey/Makefile
deleted file mode 100644
index a081774288ac..000000000000
--- a/usr.bin/newkey/Makefile
+++ /dev/null
@@ -1,11 +0,0 @@
-.include <src.opts.mk>
-
-PROG= newkey
-SRCS= newkey.c generic.c update.c
-.if ${MK_NIS} != "no"
-CFLAGS+= -DYP
-.endif
-MAN= newkey.8
-LIBADD= rpcsvc mp
-
-.include <bsd.prog.mk>
diff --git a/usr.bin/newkey/Makefile.depend b/usr.bin/newkey/Makefile.depend
deleted file mode 100644
index 67fb1e963614..000000000000
--- a/usr.bin/newkey/Makefile.depend
+++ /dev/null
@@ -1,20 +0,0 @@
-# Autogenerated - do NOT edit!
-
-DIRDEPS = \
- include \
- include/rpc \
- include/rpcsvc \
- include/xlocale \
- lib/${CSU_DIR} \
- lib/libc \
- lib/libcompiler_rt \
- lib/libmp \
- lib/librpcsvc \
- secure/lib/libcrypto \
-
-
-.include <dirdeps.mk>
-
-.if ${DEP_RELDIR} == ${_DEP_RELDIR}
-# local dependencies - needed for -jN in clean tree
-.endif
diff --git a/usr.bin/newkey/extern.h b/usr.bin/newkey/extern.h
deleted file mode 100644
index 2e8573b4c78c..000000000000
--- a/usr.bin/newkey/extern.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Sun RPC is a product of Sun Microsystems, Inc. and is provided for
- * unrestricted use provided that this legend is included on all tape
- * media and as a part of the software program in whole or part. Users
- * 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 or with the express written consent of
- * Sun Microsystems, Inc.
- *
- * 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.
- *
- * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
- * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
- * OR ANY PART THEREOF.
- *
- * In no event will Sun Microsystems, Inc. be liable for any lost revenue
- * or profits or other special, indirect and consequential damages, even if
- * Sun has been advised of the possibility of such damages.
- *
- * Sun Microsystems, Inc.
- * 2550 Garcia Avenue
- * Mountain View, California 94043
- */
-
-#ifdef YP
-#define MAXMAPNAMELEN 256
-#else
-#define YPOP_CHANGE 1 /* change, do not add */
-#define YPOP_INSERT 2 /* add, do not change */
-#define YPOP_DELETE 3 /* delete this entry */
-#define YPOP_STORE 4 /* add, or change */
-#endif
-
-void genkeys(char *, char *, char *);
-int setpublicmap(char *, char *, char *);
-int mapupdate(char *, char *, u_int, u_int, char *, u_int, char *);
-void xencrypt(char *, char *);
-void xdecrypt(char *, char *);
-int localupdate(char *, char *, u_int, u_int, char *, u_int, char *);
diff --git a/usr.bin/newkey/generic.c b/usr.bin/newkey/generic.c
deleted file mode 100644
index faf2247376b0..000000000000
--- a/usr.bin/newkey/generic.c
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- * Sun RPC is a product of Sun Microsystems, Inc. and is provided for
- * unrestricted use provided that this legend is included on all tape
- * media and as a part of the software program in whole or part. Users
- * 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 or with the express written consent of
- * Sun Microsystems, Inc.
- *
- * 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.
- *
- * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
- * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
- * OR ANY PART THEREOF.
- *
- * In no event will Sun Microsystems, Inc. be liable for any lost revenue
- * or profits or other special, indirect and consequential damages, even if
- * Sun has been advised of the possibility of such damages.
- *
- * Sun Microsystems, Inc.
- * 2550 Garcia Avenue
- * Mountain View, California 94043
- */
-
-/*
- * Copyright (C) 1986, Sun Microsystems, Inc.
- */
-
-#include <sys/cdefs.h>
-#include <sys/file.h>
-
-#include <rpc/rpc.h>
-#include <rpc/key_prot.h>
-
-#include <mp.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-#include "extern.h"
-
-static void adjust(char[HEXKEYBYTES + 1], char *);
-static void getseed(char *, int, unsigned char *);
-
-/*
- * Generate a seed
- */
-static void
-getseed(char *seed, int seedsize, unsigned char *pass)
-{
- int i;
-
- for (i = 0; i < seedsize; i++) {
- seed[i] = (arc4random() & 0xff) ^ pass[i % 8];
- }
-}
-
-/*
- * Generate a random public/secret key pair
- */
-void
-genkeys(char *public, char *secret, char *pass)
-{
- unsigned int i;
-
-# define BASEBITS (8*sizeof (short) - 1)
-# define BASE (1 << BASEBITS)
-
- MINT *pk = mp_itom(0);
- MINT *sk = mp_itom(0);
- MINT *tmp;
- MINT *base = mp_itom((short)BASE);
- MINT *root = mp_itom(PROOT);
- MINT *modulus = mp_xtom(HEXMODULUS);
- short r;
- unsigned short seed[KEYSIZE/BASEBITS + 1];
- char *xkey;
-
- getseed((char *)seed, sizeof (seed), (u_char *)pass);
- for (i = 0; i < KEYSIZE/BASEBITS + 1; i++) {
- r = seed[i] % BASE;
- tmp = mp_itom(r);
- mp_mult(sk, base, sk);
- mp_madd(sk, tmp, sk);
- mp_mfree(tmp);
- }
- tmp = mp_itom(0);
- mp_mdiv(sk, modulus, tmp, sk);
- mp_mfree(tmp);
- mp_pow(root, sk, modulus, pk);
- xkey = mp_mtox(sk);
- adjust(secret, xkey);
- xkey = mp_mtox(pk);
- adjust(public, xkey);
- mp_mfree(sk);
- mp_mfree(base);
- mp_mfree(pk);
- mp_mfree(root);
- mp_mfree(modulus);
-}
-
-/*
- * Adjust the input key so that it is 0-filled on the left
- */
-static void
-adjust(char keyout[HEXKEYBYTES+1], char *keyin)
-{
- char *p;
- char *s;
-
- for (p = keyin; *p; p++)
- ;
- for (s = keyout + HEXKEYBYTES; p >= keyin; p--, s--) {
- *s = *p;
- }
- while (s >= keyout) {
- *s-- = '0';
- }
-}
diff --git a/usr.bin/newkey/newkey.8 b/usr.bin/newkey/newkey.8
deleted file mode 100644
index c92a4b8ff208..000000000000
--- a/usr.bin/newkey/newkey.8
+++ /dev/null
@@ -1,66 +0,0 @@
-.Dd October 12, 1987
-.Dt NEWKEY 8
-.Os
-.Sh NAME
-.Nm newkey
-.Nd create a new key in the publickey database
-.Sh SYNOPSIS
-.Nm
-.Fl h Ar hostname
-.Nm
-.Fl u Ar username
-.Sh DEPRECATION NOTICE
-.Nm
-is deprecated and is not available as of
-.Fx 15.0.
-.Sh DESCRIPTION
-The
-.Nm
-utility is normally run by the network administrator on the
-Network Interface Service
-.Pq NIS
-master machine in order to establish public keys for
-users and super-users on the network.
-These keys are needed for using secure
-RPC
-or secure
-NFS .
-.Pp
-The
-.Nm
-utility will prompt for the login password of the given username and then
-create a new public/secret key pair in
-.Pa /etc/publickey
-encrypted with the login password of the given user.
-.Pp
-Use of this program is
-not required: users may create their own keys using
-.Xr chkey 1 .
-.Sh OPTIONS
-.Bl -tag -width indent
-.It Fl h Ar hostname
-Create a new public key for the super-user at the given hostname.
-Prompts for the root password of the given hostname.
-.It Fl u Ar username
-Create a new public key for the given username.
-Prompts for the
-NIS
-password of the given username.
-.El
-.Sh SEE ALSO
-.Xr chkey 1 ,
-.Xr keylogin 1 ,
-.Xr publickey 5 ,
-.Xr keyserv 8
-.Sh HISTORY
-The
-.Nm
-utility was removed from
-.Fx 15.0 .
-.Sh NOTES
-The Network Information Service
-.Pq NIS
-was formerly known as Sun Yellow Pages
-.Pq YP .
-The functionality of the two remains the same;
-only the name has changed.
diff --git a/usr.bin/newkey/newkey.c b/usr.bin/newkey/newkey.c
deleted file mode 100644
index ddeaee6914d4..000000000000
--- a/usr.bin/newkey/newkey.c
+++ /dev/null
@@ -1,228 +0,0 @@
-/*
- * Sun RPC is a product of Sun Microsystems, Inc. and is provided for
- * unrestricted use provided that this legend is included on all tape
- * media and as a part of the software program in whole or part. Users
- * 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 or with the express written consent of
- * Sun Microsystems, Inc.
- *
- * 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.
- *
- * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
- * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
- * OR ANY PART THEREOF.
- *
- * In no event will Sun Microsystems, Inc. be liable for any lost revenue
- * or profits or other special, indirect and consequential damages, even if
- * Sun has been advised of the possibility of such damages.
- *
- * Sun Microsystems, Inc.
- * 2550 Garcia Avenue
- * Mountain View, California 94043
- */
-
-/*
- * Copyright (C) 1986, Sun Microsystems, Inc.
- */
-
-/*
- * Administrative tool to add a new user to the publickey database
- */
-
-#include <sys/types.h>
-#include <sys/time.h>
-#include <sys/resource.h>
-
-#include <rpc/rpc.h>
-#include <rpc/key_prot.h>
-
-#ifdef YP
-#include <sys/wait.h>
-#include <rpcsvc/yp_prot.h>
-#include <rpcsvc/ypclnt.h>
-#include <netdb.h>
-#endif /* YP */
-
-#include <err.h>
-#include <pwd.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-#include "extern.h"
-
-#ifdef YP
-#define MAXMAPNAMELEN 256
-#else
-#define YPOP_CHANGE 1 /* change, do not add */
-#define YPOP_INSERT 2 /* add, do not change */
-#define YPOP_DELETE 3 /* delete this entry */
-#define YPOP_STORE 4 /* add, or change */
-#define ERR_ACCESS 1
-#define ERR_MALLOC 2
-#define ERR_READ 3
-#define ERR_WRITE 4
-#define ERR_DBASE 5
-#define ERR_KEY 6
-#endif
-
-#ifdef YP
-static char YPDBPATH[]="/var/yp";
-static char PKMAP[] = "publickey.byname";
-#else
-static char PKFILE[] = "/etc/publickey";
-static const char *err_string(int);
-#endif /* YP */
-
-static void usage(void) __dead2;
-
-int
-main(int argc, char *argv[])
-{
- char name[MAXNETNAMELEN + 1];
- char public[HEXKEYBYTES + 1];
- char secret[HEXKEYBYTES + 1];
- char crypt1[HEXKEYBYTES + KEYCHECKSUMSIZE + 1];
- char crypt2[HEXKEYBYTES + KEYCHECKSUMSIZE + 1];
- int status;
- char *pass;
- struct passwd *pw;
-#ifdef undef
- struct hostent *h;
-#endif
-
- fprintf(stderr, "newkey is deprecated and removed from FreeBSD 15.\n");
- if (argc != 3 || !(strcmp(argv[1], "-u") == 0 ||
- strcmp(argv[1], "-h") == 0)) {
- usage();
- }
- if (geteuid() != 0)
- errx(1, "must be superuser");
-
-#ifdef YP
- if (chdir(YPDBPATH) < 0)
- warn("cannot chdir to %s", YPDBPATH);
-#endif /* YP */
- if (strcmp(argv[1], "-u") == 0) {
- pw = getpwnam(argv[2]);
- if (pw == NULL)
- errx(1, "unknown user: %s", argv[2]);
- (void)user2netname(name, (int)pw->pw_uid, (char *)NULL);
- } else {
-#ifdef undef
- h = gethostbyname(argv[2]);
- if (h == NULL)
- errx(1, "unknown host: %s", argv[1]);
- (void)host2netname(name, h->h_name, (char *)NULL);
-#else
- (void)host2netname(name, argv[2], (char *)NULL);
-#endif
- }
-
- (void)printf("Adding new key for %s.\n", name);
- pass = getpass("New password:");
- genkeys(public, secret, pass);
-
- memcpy(crypt1, secret, HEXKEYBYTES);
- memcpy(crypt1 + HEXKEYBYTES, secret, KEYCHECKSUMSIZE);
- crypt1[HEXKEYBYTES + KEYCHECKSUMSIZE] = 0;
- xencrypt(crypt1, pass);
-
- memcpy(crypt2, crypt1, HEXKEYBYTES + KEYCHECKSUMSIZE + 1);
- xdecrypt(crypt2, getpass("Retype password:"));
- if (memcmp(crypt2, crypt2 + HEXKEYBYTES, KEYCHECKSUMSIZE) != 0 ||
- memcmp(crypt2, secret, HEXKEYBYTES) != 0)
- errx(1, "password incorrect");
-
-#ifdef YP
- (void)printf("Please wait for the database to get updated...\n");
-#endif
- if ((status = setpublicmap(name, public, crypt1))) {
-#ifdef YP
- errx(1, "unable to update NIS database (%u): %s",
- status, yperr_string(status));
-#else
- errx(1, "unable to update publickey database (%u): %s",
- status, err_string(status));
-#endif
- }
- (void)printf("Your new key has been successfully stored away.\n");
- exit(0);
- /* NOTREACHED */
-}
-
-static void
-usage(void)
-{
- (void)fprintf(stderr, "%s\n%s\n",
- "usage: newkey -h hostname",
- " newkey -u username");
- exit(1);
-}
-
-/*
- * Set the entry in the public key file
- */
-int
-setpublicmap(char *name, char *public, char *secret)
-{
- char pkent[1024];
-
- (void)sprintf(pkent, "%s:%s", public, secret);
-#ifdef YP
- return (mapupdate(name, PKMAP, YPOP_STORE,
- strlen(name), name, strlen(pkent), pkent));
-#else
- return (localupdate(name, PKFILE, YPOP_STORE,
- strlen(name), name, strlen(pkent), pkent));
-#endif
- }
-
-#ifndef YP
- /*
- * This returns a pointer to an error message string appropriate
- * to an input error code. An input value of zero will return
- * a success message.
- */
-static const char *
-err_string(int code)
-{
- const char *pmesg;
-
- switch (code) {
- case 0:
- pmesg = "update operation succeeded";
- break;
- case ERR_KEY:
- pmesg = "no such key in file";
- break;
- case ERR_READ:
- pmesg = "cannot read the database";
- break;
- case ERR_WRITE:
- pmesg = "cannot write to the database";
- break;
- case ERR_DBASE:
- pmesg = "cannot update database";
- break;
- case ERR_ACCESS:
- pmesg = "permission denied";
- break;
- case ERR_MALLOC:
- pmesg = "malloc failed";
- break;
- default:
- pmesg = "unknown error";
- break;
- }
- return (pmesg);
-}
-#endif
diff --git a/usr.bin/newkey/update.c b/usr.bin/newkey/update.c
deleted file mode 100644
index 2d2b1b8f8d0e..000000000000
--- a/usr.bin/newkey/update.c
+++ /dev/null
@@ -1,332 +0,0 @@
-/*
- * Sun RPC is a product of Sun Microsystems, Inc. and is provided for
- * unrestricted use provided that this legend is included on all tape
- * media and as a part of the software program in whole or part. Users
- * 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 or with the express written consent of
- * Sun Microsystems, Inc.
- *
- * 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.
- *
- * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
- * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
- * OR ANY PART THEREOF.
- *
- * In no event will Sun Microsystems, Inc. be liable for any lost revenue
- * or profits or other special, indirect and consequential damages, even if
- * Sun has been advised of the possibility of such damages.
- *
- * Sun Microsystems, Inc.
- * 2550 Garcia Avenue
- * Mountain View, California 94043
- */
-
-/*
- * Copyright (C) 1986, 1989, Sun Microsystems, Inc.
- */
-
-/*
- * Administrative tool to add a new user to the publickey database
- */
-
-#include <sys/types.h>
-#include <sys/time.h>
-#include <sys/resource.h>
-
-#include <rpc/rpc.h>
-#include <rpc/key_prot.h>
-
-#ifdef YP
-#include <sys/wait.h>
-#include <rpcsvc/yp_prot.h>
-#include <rpcsvc/ypclnt.h>
-#include <netdb.h>
-#endif /* YP */
-
-#include <pwd.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-#include "extern.h"
-
-#ifdef YP
-static char SHELL[] = "/bin/sh";
-static char YPDBPATH[]="/var/yp"; /* This is defined but not used! */
-static char UPDATEFILE[] = "updaters";
-
-static int _openchild(char *, FILE **, FILE **);
-static char *basename(char *path);
-
-/*
- * Determine if requester is allowed to update the given map,
- * and update it if so. Returns the yp status, which is zero
- * if there is no access violation.
- */
-int
-mapupdate(char *requester, char *mapname, u_int op, u_int keylen,
- char *key, u_int datalen, char *data)
-{
- char updater[MAXMAPNAMELEN + 40];
- FILE *childargs;
- FILE *childrslt;
-#ifdef WEXITSTATUS
- int status;
-#else
- union wait status;
-#endif
- pid_t pid;
- u_int yperrno;
-
-
-#ifdef DEBUG
- printf("%s %s\n", key, data);
-#endif
- (void)sprintf(updater, "make -s -f %s/%s %s", YPDBPATH, /* !!! */
- UPDATEFILE, mapname);
- pid = _openchild(updater, &childargs, &childrslt);
- if (pid < 0) {
- return (YPERR_YPERR);
- }
-
- /*
- * Write to child
- */
- (void)fprintf(childargs, "%s\n", requester);
- (void)fprintf(childargs, "%u\n", op);
- (void)fprintf(childargs, "%u\n", keylen);
- (void)fwrite(key, (int)keylen, 1, childargs);
- (void)fprintf(childargs, "\n");
- (void)fprintf(childargs, "%u\n", datalen);
- (void)fwrite(data, (int)datalen, 1, childargs);
- (void)fprintf(childargs, "\n");
- (void)fclose(childargs);
-
- /*
- * Read from child
- */
- (void)fscanf(childrslt, "%d", &yperrno);
- (void)fclose(childrslt);
-
- (void)wait(&status);
-#ifdef WEXITSTATUS
- if (WEXITSTATUS(status) != 0) {
-#else
- if (status.w_retcode != 0) {
-#endif
- return (YPERR_YPERR);
- }
- return (yperrno);
-}
-
-/*
- * returns pid, or -1 for failure
- */
-static pid_t
-_openchild(char *command, FILE **fto, FILE **ffrom)
-{
- int i;
- pid_t pid;
- int pdto[2];
- int pdfrom[2];
- char *com;
- struct rlimit rl;
-
- if (pipe(pdto) < 0) {
- goto error1;
- }
- if (pipe(pdfrom) < 0) {
- goto error2;
- }
- switch (pid = fork()) {
- case -1:
- goto error3;
-
- case 0:
- /*
- * child: read from pdto[0], write into pdfrom[1]
- */
- (void)close(0);
- (void)dup(pdto[0]);
- (void)close(1);
- (void)dup(pdfrom[1]);
- getrlimit(RLIMIT_NOFILE, &rl);
- for (i = rl.rlim_max - 1; i >= 3; i--) {
- (void) close(i);
- }
- com = malloc((unsigned) strlen(command) + 6);
- if (com == NULL) {
- _exit(~0);
- }
- (void)sprintf(com, "exec %s", command);
- execl(SHELL, basename(SHELL), "-c", com, (char *)NULL);
- _exit(~0);
-
- default:
- /*
- * parent: write into pdto[1], read from pdfrom[0]
- */
- *fto = fdopen(pdto[1], "w");
- (void)close(pdto[0]);
- *ffrom = fdopen(pdfrom[0], "r");
- (void)close(pdfrom[1]);
- break;
- }
- return (pid);
-
- /*
- * error cleanup and return
- */
-error3:
- (void)close(pdfrom[0]);
- (void)close(pdfrom[1]);
-error2:
- (void)close(pdto[0]);
- (void)close(pdto[1]);
-error1:
- return (-1);
-}
-
-static char *
-basename(char *path)
-{
- char *p;
-
- p = strrchr(path, '/');
- if (p == NULL) {
- return (path);
- } else {
- return (p + 1);
- }
-}
-
-#else /* YP */
-
-#define ERR_ACCESS 1
-#define ERR_MALLOC 2
-#define ERR_READ 3
-#define ERR_WRITE 4
-#define ERR_DBASE 5
-#define ERR_KEY 6
-
-static int match(char *, char *);
-
-/*
- * Determine if requester is allowed to update the given map,
- * and update it if so. Returns the status, which is zero
- * if there is no access violation. This function updates
- * the local file and then shuts up.
- */
-int
-localupdate(char *name, char *filename, u_int op, u_int keylen __unused,
- char *key, u_int datalen __unused, char *data)
-{
- char line[256];
- FILE *rf;
- FILE *wf;
- char *tmpname;
- int err;
-
- /*
- * Check permission
- */
- if (strcmp(name, key) != 0) {
- return (ERR_ACCESS);
- }
- if (strcmp(name, "nobody") == 0) {
- /*
- * Can't change "nobody"s key.
- */
- return (ERR_ACCESS);
- }
-
- /*
- * Open files
- */
- tmpname = malloc(strlen(filename) + 4);
- if (tmpname == NULL) {
- return (ERR_MALLOC);
- }
- sprintf(tmpname, "%s.tmp", filename);
- rf = fopen(filename, "r");
- if (rf == NULL) {
- err = ERR_READ;
- goto cleanup;
- }
- wf = fopen(tmpname, "w");
- if (wf == NULL) {
- fclose(rf);
- err = ERR_WRITE;
- goto cleanup;
- }
- err = -1;
- while (fgets(line, sizeof (line), rf)) {
- if (err < 0 && match(line, name)) {
- switch (op) {
- case YPOP_INSERT:
- err = ERR_KEY;
- break;
- case YPOP_STORE:
- case YPOP_CHANGE:
- fprintf(wf, "%s %s\n", key, data);
- err = 0;
- break;
- case YPOP_DELETE:
- /* do nothing */
- err = 0;
- break;
- }
- } else {
- fputs(line, wf);
- }
- }
- if (err < 0) {
- switch (op) {
- case YPOP_CHANGE:
- case YPOP_DELETE:
- err = ERR_KEY;
- break;
- case YPOP_INSERT:
- case YPOP_STORE:
- err = 0;
- fprintf(wf, "%s %s\n", key, data);
- break;
- }
- }
- fclose(wf);
- fclose(rf);
- if (err == 0) {
- if (rename(tmpname, filename) < 0) {
- err = ERR_DBASE;
- goto cleanup;
- }
- } else {
- if (unlink(tmpname) < 0) {
- err = ERR_DBASE;
- goto cleanup;
- }
- }
-
-cleanup:
- free(tmpname);
- return (err);
-}
-
-static int
-match(char *line, char *name)
-{
- int len;
-
- len = strlen(name);
- return (strncmp(line, name, len) == 0 &&
- (line[len] == ' ' || line[len] == '\t'));
-}
-#endif /* !YP */