From e0aba351e5f5cf95d028a7d0fbfab9ab45d2f580 Mon Sep 17 00:00:00 2001 From: wpaul Date: Tue, 29 Jul 1997 15:45:36 +0000 Subject: Modify passwd and chpass to use new AF_LOCAL RPC interface instead of old kludged-up 'yppasswd_comm' support. --- usr.bin/chpass/Makefile | 7 +++++-- usr.bin/chpass/pw_yp.c | 33 ++++++++++++++++++--------------- usr.bin/passwd/Makefile | 11 +++++++---- usr.bin/passwd/yp_passwd.c | 34 ++++++++++++++++++---------------- 4 files changed, 48 insertions(+), 37 deletions(-) (limited to 'usr.bin') diff --git a/usr.bin/chpass/Makefile b/usr.bin/chpass/Makefile index cef2d57..ffd577f 100644 --- a/usr.bin/chpass/Makefile +++ b/usr.bin/chpass/Makefile @@ -20,10 +20,10 @@ COPTS+= -DYP -I. -I${.CURDIR}/../../libexec/ypxfr \ #Some people need this, uncomment to activate #COPTS+= -DRESTRICT_FULLNAME_CHANGE -SRCS+= yppasswd_private_xdr.c yppasswd_comm.c yp_clnt.c \ +SRCS+= yppasswd_private_xdr.c yppasswd_private_clnt.c yp_clnt.c \ yppasswd_clnt.c pw_yp.c ypxfr_misc.c CLEANFILES= yp_clnt.c yp.h yppasswd_clnt.c yppasswd.h \ - yppasswd_private_xdr.c yppasswd_private.h + yppasswd_private_xdr.c yppasswd_private_clnt.c yppasswd_private.h DPADD= ${LIBRPCSVC} ${LIBCRYPT} LDADD+= -lrpcsvc -lcrypt @@ -51,6 +51,9 @@ yppasswd_private.h: ${RPCSRC_PRIV} yppasswd_private_xdr.c: ${RPCSRC_PRIV} yppasswd_private.h ${RPCGEN} -c -o ${.TARGET} ${RPCSRC_PRIV} +yppasswd_private_clnt.c: ${RPCSRC_PRIV} yppasswd_private.h + ${RPCGEN} -l -o ${.TARGET} ${RPCSRC_PRIV} + beforeinstall: .for i in chpass chfn chsh ypchpass ypchfn ypchsh [ ! -e ${DESTDIR}${BINDIR}/$i ] || \ diff --git a/usr.bin/chpass/pw_yp.c b/usr.bin/chpass/pw_yp.c index 0080e85..23c8715 100644 --- a/usr.bin/chpass/pw_yp.c +++ b/usr.bin/chpass/pw_yp.c @@ -35,7 +35,7 @@ * Center for Telecommunications Research * Columbia University, New York City * - * $Id: pw_yp.c,v 1.9 1997/02/22 19:54:26 peter Exp $ + * $Id: pw_yp.c,v 1.2 1997/07/28 18:32:05 wpaul Exp $ */ #ifdef YP @@ -65,7 +65,6 @@ struct dom_binding {}; #include #include "pw_yp.h" #include "ypxfr_extern.h" -#include "yppasswd_comm.h" #include "yppasswd_private.h" #define PERM_SECURE (S_IRUSR|S_IWUSR) @@ -339,6 +338,7 @@ char *get_yp_master(getserver) char *mastername; int rval, localport; struct stat st; + char *sockname = YP_SOCKNAME; /* * Sometimes we are called just to probe for rpc.yppasswdd and @@ -421,6 +421,7 @@ void yp_submit(pw) char *master, *password; int *status = NULL; struct rpc_err err; + char *sockname = YP_SOCKNAME; _use_yp = 1; @@ -473,12 +474,13 @@ void yp_submit(pw) if (suser_override) { /* Talk to server via AF_UNIX socket. */ - if (senddat(&master_yppasswd)) { - warnx("failed to contact local rpc.yppasswdd"); + clnt = clnt_create(sockname, MASTER_YPPASSWDPROG, + MASTER_YPPASSWDVERS, "unix"); + if (clnt == NULL) { + warnx("failed to contact rpc.yppasswdd: %s", + clnt_spcreateerror(master)); pw_error(tempname, 0, 1); } - /* Get return code. */ - status = getresp(); } else { /* Create a handle to yppasswdd. */ @@ -488,23 +490,24 @@ void yp_submit(pw) master, clnt_spcreateerror(master)); pw_error(tempname, 0, 1); } + } - clnt->cl_auth = authunix_create_default(); + clnt->cl_auth = authunix_create_default(); + if (suser_override) + status = yppasswdproc_update_master_1(&master_yppasswd, clnt); + else status = yppasswdproc_update_1(&yppasswd, clnt); - clnt_geterr(clnt, &err); + clnt_geterr(clnt, &err); - auth_destroy(clnt->cl_auth); - clnt_destroy(clnt); - } + auth_destroy(clnt->cl_auth); + clnt_destroy(clnt); /* Call failed: signal the error. */ - if ((!suser_override && err.re_status) != RPC_SUCCESS || status == NULL || *status) { - warnx("NIS update failed: %s", (err.re_status != RPC_SUCCESS && - !suser_override) ? clnt_sperrno(err.re_status) : - "rpc.yppasswdd returned error status"); + if (err.re_status != RPC_SUCCESS || status == NULL || *status) { + warnx("NIS update failed: %s", clnt_sperrno(err.re_status)); pw_error(NULL, 0, 1); } diff --git a/usr.bin/passwd/Makefile b/usr.bin/passwd/Makefile index 49c303c..b2346b2 100644 --- a/usr.bin/passwd/Makefile +++ b/usr.bin/passwd/Makefile @@ -1,8 +1,8 @@ # From: @(#)Makefile 8.3 (Berkeley) 4/2/94 -# $Id: Makefile,v 1.23 1997/02/22 19:56:34 peter Exp $ +# $Id: Makefile,v 1.2 1997/07/28 18:31:45 wpaul Exp $ PROG= passwd -SRCS= local_passwd.c yppasswd_private_xdr.c yppasswd_comm.c yp_passwd.c \ +SRCS= local_passwd.c yppasswd_private_xdr.c yp_passwd.c \ passwd.c pw_copy.c pw_util.c pw_yp.c DPADD= ${LIBCRYPT} ${LIBRPCSVC} ${LIBUTIL} @@ -18,10 +18,10 @@ CFLAGS+= -DLOGIN_CAP -DCRYPT -DYP -I. -I${.CURDIR} \ -I${.CURDIR}/../../usr.sbin/rpc.yppasswdd \ -Dyp_error=warnx -DLOGGING -SRCS+= ypxfr_misc.c yp_clnt.c yppasswd_clnt.c +SRCS+= ypxfr_misc.c yp_clnt.c yppasswd_clnt.c yppasswd_private_clnt.c CLEANFILES= yp.h yp_clnt.c yppasswd.h yppasswd_clnt.c \ - yppasswd_private.h yppasswd_private_xdr.c + yppasswd_private.h yppasswd_private_xdr.c yppasswd_private_clnt.c RPCGEN= rpcgen -C RPCSRC= ${DESTDIR}/usr/include/rpcsvc/yp.x @@ -46,6 +46,9 @@ yppasswd_private.h: ${RPCSRC_PRIV} yppasswd_private_xdr.c: ${RPCSRC_PRIV} yppasswd_private.h ${RPCGEN} -c -o ${.TARGET} ${RPCSRC_PRIV} +yppasswd_private_clnt.c: ${RPCSRC_PRIV} yppasswd_private.h + ${RPCGEN} -l -o ${.TARGET} ${RPCSRC_PRIV} + BINOWN= root BINMODE=4555 MAN1=passwd.1 diff --git a/usr.bin/passwd/yp_passwd.c b/usr.bin/passwd/yp_passwd.c index 3eab43a..8d9a648 100644 --- a/usr.bin/passwd/yp_passwd.c +++ b/usr.bin/passwd/yp_passwd.c @@ -45,7 +45,7 @@ #include #include #include -#include "yppasswd_comm.h" +#include "yppasswd_private.h" extern char *getnewpasswd __P(( struct passwd * , int )); @@ -61,6 +61,7 @@ yp_passwd(char *user) char *master; int *status = NULL; uid_t uid; + char *sockname = YP_SOCKNAME; _use_yp = 1; @@ -143,11 +144,12 @@ for other users"); } if (suser_override) { - if (senddat(&master_yppasswd)) { - warnx("failed to send request to rpc.yppasswdd"); + if ((clnt = clnt_create(sockname, MASTER_YPPASSWDPROG, + MASTER_YPPASSWDVERS, "unix")) == NULL) { + warnx("failed to contact rpc.yppasswdd on host %s: %s", + master, clnt_spcreateerror("")); return(1); } - status = getresp(); } else { if ((clnt = clnt_create(master, YPPASSWDPROG, YPPASSWDVERS, "udp")) == NULL) { @@ -155,32 +157,32 @@ for other users"); master, clnt_spcreateerror("")); return(1); } + } /* * The yppasswd.x file said `unix authentication required', * so I added it. This is the only reason it is in here. * My yppasswdd doesn't use it, but maybe some others out there * do. --okir */ - clnt->cl_auth = authunix_create_default(); + clnt->cl_auth = authunix_create_default(); + if (suser_override) + status = yppasswdproc_update_master_1(&master_yppasswd, clnt); + else status = yppasswdproc_update_1(&yppasswd, clnt); - clnt_geterr(clnt, &err); - auth_destroy(clnt->cl_auth); - clnt_destroy(clnt); - } + clnt_geterr(clnt, &err); + + auth_destroy(clnt->cl_auth); + clnt_destroy(clnt); - if ((!suser_override && err.re_status != RPC_SUCCESS) || - status == NULL || *status) { + if (err.re_status != RPC_SUCCESS || status == NULL || *status) { errx(1, "Failed to change NIS password: %s", - (err.re_status != RPC_SUCCESS && !suser_override) ? - clnt_sperrno(err.re_status) : - "rpc.yppasswdd returned error status"); + clnt_sperrno(err.re_status)); } printf("\nNIS password has%s been changed on %s.\n", - ((err.re_status != RPC_SUCCESS && !suser_override) - || status == NULL || *status) ? + (err.re_status != RPC_SUCCESS || status == NULL || *status) ? " not" : "", master); return ((err.re_status || status == NULL || *status)); -- cgit v1.1