diff options
-rw-r--r-- | gnu/libexec/ypxfr/Makefile | 8 | ||||
-rw-r--r-- | gnu/libexec/ypxfr/log.c | 84 | ||||
-rw-r--r-- | gnu/libexec/ypxfr/yp.h | 288 | ||||
-rw-r--r-- | gnu/libexec/ypxfr/yp_clnt.c | 264 | ||||
-rw-r--r-- | gnu/libexec/ypxfr/yp_svc.c | 272 | ||||
-rw-r--r-- | gnu/libexec/ypxfr/yp_xdr.c | 145 | ||||
-rw-r--r-- | gnu/libexec/ypxfr/ypclnt.c | 233 | ||||
-rw-r--r-- | gnu/libexec/ypxfr/ypxfr.8 | 199 | ||||
-rw-r--r-- | gnu/libexec/ypxfr/ypxfr.c | 379 |
9 files changed, 0 insertions, 1872 deletions
diff --git a/gnu/libexec/ypxfr/Makefile b/gnu/libexec/ypxfr/Makefile deleted file mode 100644 index 460d070..0000000 --- a/gnu/libexec/ypxfr/Makefile +++ /dev/null @@ -1,8 +0,0 @@ -# $Id: Makefile,v 1.2 1995/02/06 22:15:20 wpaul Exp $ - -PROG= ypxfr -MAN8= ypxfr.8 - -SRCS= ypxfr.c ypclnt.c yp_clnt.c yp_xdr.c log.c - -.include <bsd.prog.mk> diff --git a/gnu/libexec/ypxfr/log.c b/gnu/libexec/ypxfr/log.c deleted file mode 100644 index 7b76a2a..0000000 --- a/gnu/libexec/ypxfr/log.c +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Copyright (c) 1995 - * Bill Paul <wpaul@ctr.columbia.edu>. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by Bill Paul. - * 4. Neither the name of the author nor the names of any co-contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY Bill Paul AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - */ -/* - * error logging/reporting facilities - * stolen from /usr/libexec/mail.local via ypserv - * - * $Id$ - */ - -#include <stdio.h> -#include <sys/types.h> -#include <syslog.h> - -extern int logflag; -extern char *progname; - -#if __STDC__ -#include <stdarg.h> -#else -#include <varargs.h> -#endif - -void verr(fmt, ap) - const char *fmt; - _BSD_VA_LIST_ ap; - -{ - if (logflag) - vsyslog(LOG_NOTICE, fmt, ap); - else - { - fprintf(stderr,"%s: ",progname); - vfprintf(stderr, fmt, ap); - } -} - -void -#ifdef __STDC__ -Perror(const char *fmt, ...) -#else -Perror(fmt, va_list) - const char *fmt; - va_dcl -#endif -{ - va_list ap; -#ifdef __STDC__ - va_start(ap, fmt); -#else - va_start(ap); -#endif - verr(fmt,ap); - va_end(ap); -} diff --git a/gnu/libexec/ypxfr/yp.h b/gnu/libexec/ypxfr/yp.h deleted file mode 100644 index 899a1ab..0000000 --- a/gnu/libexec/ypxfr/yp.h +++ /dev/null @@ -1,288 +0,0 @@ -#define YPMAXRECORD 1024 -#define YPMAXDOMAIN 64 -#define YPMAXMAP 64 -#define YPMAXPEER 64 - -enum ypstat { - YP_TRUE = 1, - YP_NOMORE = 2, - YP_FALSE = 0, - YP_NOMAP = -1, - YP_NODOM = -2, - YP_NOKEY = -3, - YP_BADOP = -4, - YP_BADDB = -5, - YP_YPERR = -6, - YP_BADARGS = -7, - YP_VERS = -8, -}; -typedef enum ypstat ypstat; -bool_t xdr_ypstat(); - - -enum ypxfrstat { - YPXFR_SUCC = 1, - YPXFR_AGE = 2, - YPXFR_NOMAP = -1, - YPXFR_NODOM = -2, - YPXFR_RSRC = -3, - YPXFR_RPC = -4, - YPXFR_MADDR = -5, - YPXFR_YPERR = -6, - YPXFR_BADARGS = -7, - YPXFR_DBM = -8, - YPXFR_FILE = -9, - YPXFR_SKEW = -10, - YPXFR_CLEAR = -11, - YPXFR_FORCE = -12, - YPXFR_XFRERR = -13, - YPXFR_REFUSED = -14, -}; -typedef enum ypxfrstat ypxfrstat; -bool_t xdr_ypxfrstat(); - - -typedef char *domainname; -bool_t xdr_domainname(); - - -typedef char *mapname; -bool_t xdr_mapname(); - - -typedef char *peername; -bool_t xdr_peername(); - - -typedef struct { - u_int keydat_len; - char *keydat_val; -} keydat; -bool_t xdr_keydat(); - - -typedef struct { - u_int valdat_len; - char *valdat_val; -} valdat; -bool_t xdr_valdat(); - - -struct ypmap_parms { - domainname domain; - mapname map; - u_int ordernum; - peername peer; -}; -typedef struct ypmap_parms ypmap_parms; -bool_t xdr_ypmap_parms(); - - -struct ypreq_key { - domainname domain; - mapname map; - keydat key; -}; -typedef struct ypreq_key ypreq_key; -bool_t xdr_ypreq_key(); - - -struct ypreq_nokey { - domainname domain; - mapname map; -}; -typedef struct ypreq_nokey ypreq_nokey; -bool_t xdr_ypreq_nokey(); - - -struct ypreq_xfr { - ypmap_parms map_parms; - u_int transid; - u_int prog; - u_int port; -}; -typedef struct ypreq_xfr ypreq_xfr; -bool_t xdr_ypreq_xfr(); - - -struct ypresp_val { - ypstat stat; - valdat val; -}; -typedef struct ypresp_val ypresp_val; -bool_t xdr_ypresp_val(); - - -struct ypresp_key_val { - ypstat stat; - keydat key; - valdat val; -}; -typedef struct ypresp_key_val ypresp_key_val; -bool_t xdr_ypresp_key_val(); - - -struct ypresp_master { - ypstat stat; - peername peer; -}; -typedef struct ypresp_master ypresp_master; -bool_t xdr_ypresp_master(); - - -struct ypresp_order { - ypstat stat; - u_int ordernum; -}; -typedef struct ypresp_order ypresp_order; -bool_t xdr_ypresp_order(); - - -struct ypresp_all { - bool_t more; - union { - ypresp_key_val val; - } ypresp_all_u; -}; -typedef struct ypresp_all ypresp_all; -bool_t __xdr_ypresp_all(); - - -struct ypresp_xfr { - u_int transid; - ypxfrstat xfrstat; -}; -typedef struct ypresp_xfr ypresp_xfr; -bool_t xdr_ypresp_xfr(); - - -struct ypmaplist { - mapname map; - struct ypmaplist *next; -}; -typedef struct ypmaplist ypmaplist; -bool_t xdr_ypmaplist(); - - -struct ypresp_maplist { - ypstat stat; - ypmaplist *maps; -}; -typedef struct ypresp_maplist ypresp_maplist; -bool_t xdr_ypresp_maplist(); - - -enum yppush_status { - YPPUSH_SUCC = 1, - YPPUSH_AGE = 2, - YPPUSH_NOMAP = -1, - YPPUSH_NODOM = -2, - YPPUSH_RSRC = -3, - YPPUSH_RPC = -4, - YPPUSH_MADDR = -5, - YPPUSH_YPERR = -6, - YPPUSH_BADARGS = -7, - YPPUSH_DBM = -8, - YPPUSH_FILE = -9, - YPPUSH_SKEW = -10, - YPPUSH_CLEAR = -11, - YPPUSH_FORCE = -12, - YPPUSH_XFRERR = -13, - YPPUSH_REFUSED = -14, -}; -typedef enum yppush_status yppush_status; -bool_t xdr_yppush_status(); - - -struct yppushresp_xfr { - u_int transid; - yppush_status status; -}; -typedef struct yppushresp_xfr yppushresp_xfr; -bool_t xdr_yppushresp_xfr(); - - -enum ypbind_resptype { - YPBIND_SUCC_VAL = 1, - YPBIND_FAIL_VAL = 2, -}; -typedef enum ypbind_resptype ypbind_resptype; -bool_t xdr_ypbind_resptype(); - - -struct ypbind_binding { - char ypbind_binding_addr[4]; - char ypbind_binding_port[2]; -}; -typedef struct ypbind_binding ypbind_binding; -bool_t xdr_ypbind_binding(); - - -struct ypbind_resp { - ypbind_resptype ypbind_status; - union { - u_int ypbind_error; - ypbind_binding ypbind_bindinfo; - } ypbind_resp_u; -}; -typedef struct ypbind_resp ypbind_resp; -bool_t xdr_ypbind_resp(); - -#define YPBIND_ERR_ERR 1 -#define YPBIND_ERR_NOSERV 2 -#define YPBIND_ERR_RESC 3 - -struct ypbind_setdom { - domainname ypsetdom_domain; - ypbind_binding ypsetdom_binding; - u_int ypsetdom_vers; -}; -typedef struct ypbind_setdom ypbind_setdom; -bool_t xdr_ypbind_setdom(); - - -#define YPPROG ((u_long)100004) -#define YPVERS ((u_long)2) -#define YPPROC_NULL ((u_long)0) -extern void *ypproc_null_2(); -#define YPPROC_DOMAIN ((u_long)1) -extern bool_t *ypproc_domain_2(); -#define YPPROC_DOMAIN_NONACK ((u_long)2) -extern bool_t *ypproc_domain_nonack_2(); -#define YPPROC_MATCH ((u_long)3) -extern ypresp_val *ypproc_match_2(); -#define YPPROC_FIRST ((u_long)4) -extern ypresp_key_val *ypproc_first_2(); -#define YPPROC_NEXT ((u_long)5) -extern ypresp_key_val *ypproc_next_2(); -#define YPPROC_XFR ((u_long)6) -extern ypresp_xfr *ypproc_xfr_2(); -#define YPPROC_CLEAR ((u_long)7) -extern void *ypproc_clear_2(); -#define YPPROC_ALL ((u_long)8) -extern ypresp_all *ypproc_all_2(); -#define YPPROC_MASTER ((u_long)9) -extern ypresp_master *ypproc_master_2(); -#define YPPROC_ORDER ((u_long)10) -extern ypresp_order *ypproc_order_2(); -#define YPPROC_MAPLIST ((u_long)11) -extern ypresp_maplist *ypproc_maplist_2(); - - -#define YPPUSH_XFRRESPPROG ((u_long)0x40000000) -#define YPPUSH_XFRRESPVERS ((u_long)1) -#define YPPUSHPROC_NULL ((u_long)0) -extern void *yppushproc_null_1(); -#define YPPUSHPROC_XFRRESP ((u_long)1) -extern yppushresp_xfr *yppushproc_xfrresp_1(); - - -#define YPBINDPROG ((u_long)100007) -#define YPBINDVERS ((u_long)2) -#define YPBINDPROC_NULL ((u_long)0) -extern void *ypbindproc_null_2(); -#define YPBINDPROC_DOMAIN ((u_long)1) -extern ypbind_resp *ypbindproc_domain_2(); -#define YPBINDPROC_SETDOM ((u_long)2) -extern void *ypbindproc_setdom_2(); - diff --git a/gnu/libexec/ypxfr/yp_clnt.c b/gnu/libexec/ypxfr/yp_clnt.c deleted file mode 100644 index 290a5f7..0000000 --- a/gnu/libexec/ypxfr/yp_clnt.c +++ /dev/null @@ -1,264 +0,0 @@ -#include <rpc/rpc.h> -#include "yp.h" -#ifndef lint -/*static char sccsid[] = "from: @(#)yp.x 2.1 88/08/01 4.0 RPCSRC";*/ -static char rcsid[] = "yp.x,v 1.1 1994/08/04 19:01:55 wollman Exp"; -#endif /* not lint */ - -/* Default timeout can be changed using clnt_control() */ -static struct timeval TIMEOUT = { 25, 0 }; - -void * -ypproc_null_2(argp, clnt) - void *argp; - CLIENT *clnt; -{ - static char res; - - bzero((char *)&res, sizeof(res)); - if (clnt_call(clnt, YPPROC_NULL, xdr_void, argp, xdr_void, &res, TIMEOUT) != RPC_SUCCESS) { - return (NULL); - } - return ((void *)&res); -} - - -bool_t * -ypproc_domain_2(argp, clnt) - domainname *argp; - CLIENT *clnt; -{ - static bool_t res; - - bzero((char *)&res, sizeof(res)); - if (clnt_call(clnt, YPPROC_DOMAIN, xdr_domainname, argp, xdr_bool, &res, TIMEOUT) != RPC_SUCCESS) { - return (NULL); - } - return (&res); -} - - -bool_t * -ypproc_domain_nonack_2(argp, clnt) - domainname *argp; - CLIENT *clnt; -{ - static bool_t res; - - bzero((char *)&res, sizeof(res)); - if (clnt_call(clnt, YPPROC_DOMAIN_NONACK, xdr_domainname, argp, xdr_bool, &res, TIMEOUT) != RPC_SUCCESS) { - return (NULL); - } - return (&res); -} - - -ypresp_val * -ypproc_match_2(argp, clnt) - ypreq_key *argp; - CLIENT *clnt; -{ - static ypresp_val res; - - bzero((char *)&res, sizeof(res)); - if (clnt_call(clnt, YPPROC_MATCH, xdr_ypreq_key, argp, xdr_ypresp_val, &res, TIMEOUT) != RPC_SUCCESS) { - return (NULL); - } - return (&res); -} - - -ypresp_key_val * -ypproc_first_2(argp, clnt) - ypreq_key *argp; - CLIENT *clnt; -{ - static ypresp_key_val res; - - bzero((char *)&res, sizeof(res)); - if (clnt_call(clnt, YPPROC_FIRST, xdr_ypreq_key, argp, xdr_ypresp_key_val, &res, TIMEOUT) != RPC_SUCCESS) { - return (NULL); - } - return (&res); -} - - -ypresp_key_val * -ypproc_next_2(argp, clnt) - ypreq_key *argp; - CLIENT *clnt; -{ - static ypresp_key_val res; - - bzero((char *)&res, sizeof(res)); - if (clnt_call(clnt, YPPROC_NEXT, xdr_ypreq_key, argp, xdr_ypresp_key_val, &res, TIMEOUT) != RPC_SUCCESS) { - return (NULL); - } - return (&res); -} - - -ypresp_xfr * -ypproc_xfr_2(argp, clnt) - ypreq_xfr *argp; - CLIENT *clnt; -{ - static ypresp_xfr res; - - bzero((char *)&res, sizeof(res)); - if (clnt_call(clnt, YPPROC_XFR, xdr_ypreq_xfr, argp, xdr_ypresp_xfr, &res, TIMEOUT) != RPC_SUCCESS) { - return (NULL); - } - return (&res); -} - - -void * -ypproc_clear_2(argp, clnt) - void *argp; - CLIENT *clnt; -{ - static char res; - - bzero((char *)&res, sizeof(res)); - if (clnt_call(clnt, YPPROC_CLEAR, xdr_void, argp, xdr_void, &res, TIMEOUT) != RPC_SUCCESS) { - return (NULL); - } - return ((void *)&res); -} - - -ypresp_all * -ypproc_all_2(argp, clnt) - ypreq_nokey *argp; - CLIENT *clnt; -{ - static ypresp_all res; - - bzero((char *)&res, sizeof(res)); - if (clnt_call(clnt, YPPROC_ALL, xdr_ypreq_nokey, argp, __xdr_ypresp_all, &res, TIMEOUT) != RPC_SUCCESS) { - return (NULL); - } - return (&res); -} - - -ypresp_master * -ypproc_master_2(argp, clnt) - ypreq_nokey *argp; - CLIENT *clnt; -{ - static ypresp_master res; - - bzero((char *)&res, sizeof(res)); - if (clnt_call(clnt, YPPROC_MASTER, xdr_ypreq_nokey, argp, xdr_ypresp_master, &res, TIMEOUT) != RPC_SUCCESS) { - return (NULL); - } - return (&res); -} - - -ypresp_order * -ypproc_order_2(argp, clnt) - ypreq_nokey *argp; - CLIENT *clnt; -{ - static ypresp_order res; - - bzero((char *)&res, sizeof(res)); - if (clnt_call(clnt, YPPROC_ORDER, xdr_ypreq_nokey, argp, xdr_ypresp_order, &res, TIMEOUT) != RPC_SUCCESS) { - return (NULL); - } - return (&res); -} - - -ypresp_maplist * -ypproc_maplist_2(argp, clnt) - domainname *argp; - CLIENT *clnt; -{ - static ypresp_maplist res; - - bzero((char *)&res, sizeof(res)); - if (clnt_call(clnt, YPPROC_MAPLIST, xdr_domainname, argp, xdr_ypresp_maplist, &res, TIMEOUT) != RPC_SUCCESS) { - return (NULL); - } - return (&res); -} - - -void * -yppushproc_null_1(argp, clnt) - void *argp; - CLIENT *clnt; -{ - static char res; - - bzero((char *)&res, sizeof(res)); - if (clnt_call(clnt, YPPUSHPROC_NULL, xdr_void, argp, xdr_void, &res, TIMEOUT) != RPC_SUCCESS) { - return (NULL); - } - return ((void *)&res); -} - - -yppushresp_xfr * -yppushproc_xfrresp_1(argp, clnt) - void *argp; - CLIENT *clnt; -{ - static yppushresp_xfr res; - - bzero((char *)&res, sizeof(res)); - if (clnt_call(clnt, YPPUSHPROC_XFRRESP, xdr_void, argp, xdr_yppushresp_xfr, &res, TIMEOUT) != RPC_SUCCESS) { - return (NULL); - } - return (&res); -} - - -void * -ypbindproc_null_2(argp, clnt) - void *argp; - CLIENT *clnt; -{ - static char res; - - bzero((char *)&res, sizeof(res)); - if (clnt_call(clnt, YPBINDPROC_NULL, xdr_void, argp, xdr_void, &res, TIMEOUT) != RPC_SUCCESS) { - return (NULL); - } - return ((void *)&res); -} - - -ypbind_resp * -ypbindproc_domain_2(argp, clnt) - domainname *argp; - CLIENT *clnt; -{ - static ypbind_resp res; - - bzero((char *)&res, sizeof(res)); - if (clnt_call(clnt, YPBINDPROC_DOMAIN, xdr_domainname, argp, xdr_ypbind_resp, &res, TIMEOUT) != RPC_SUCCESS) { - return (NULL); - } - return (&res); -} - - -void * -ypbindproc_setdom_2(argp, clnt) - ypbind_setdom *argp; - CLIENT *clnt; -{ - static char res; - - bzero((char *)&res, sizeof(res)); - if (clnt_call(clnt, YPBINDPROC_SETDOM, xdr_ypbind_setdom, argp, xdr_void, &res, TIMEOUT) != RPC_SUCCESS) { - return (NULL); - } - return ((void *)&res); -} - diff --git a/gnu/libexec/ypxfr/yp_svc.c b/gnu/libexec/ypxfr/yp_svc.c deleted file mode 100644 index a8638f2..0000000 --- a/gnu/libexec/ypxfr/yp_svc.c +++ /dev/null @@ -1,272 +0,0 @@ -#include <stdio.h> -#include <sys/types.h> -#include <rpc/rpc.h> -#include "yp.h" -#ifndef lint -/*static char sccsid[] = "from: @(#)yp.x 2.1 88/08/01 4.0 RPCSRC";*/ -static char rcsid[] = "yp.x,v 1.1 1994/08/04 19:01:55 wollman Exp"; -#endif /* not lint */ - -static void ypprog_2(); -static void yppush_xfrrespprog_1(); -static void ypbindprog_2(); -extern void Perror __P((const char *, ...)); - -main() -{ - SVCXPRT *transp; - - (void)pmap_unset(YPPROG, YPVERS); - (void)pmap_unset(YPPUSH_XFRRESPPROG, YPPUSH_XFRRESPVERS); - (void)pmap_unset(YPBINDPROG, YPBINDVERS); - - transp = svcudp_create(RPC_ANYSOCK); - if (transp == NULL) { - Perror("cannot create udp service.\n"); - exit(1); - } - if (!svc_register(transp, YPPROG, YPVERS, ypprog_2, IPPROTO_UDP)) { - Perror("unable to register (YPPROG, YPVERS, udp).\n"); - exit(1); - } - if (!svc_register(transp, YPPUSH_XFRRESPPROG, YPPUSH_XFRRESPVERS, yppush_xfrrespprog_1, IPPROTO_UDP)) { - Perror("unable to register (YPPUSH_XFRRESPPROG, YPPUSH_XFRRESPVERS, udp).\n"); - exit(1); - } - if (!svc_register(transp, YPBINDPROG, YPBINDVERS, ypbindprog_2, IPPROTO_UDP)) { - Perror("unable to register (YPBINDPROG, YPBINDVERS, udp).\n"); - exit(1); - } - - transp = svctcp_create(RPC_ANYSOCK, 0, 0); - if (transp == NULL) { - Perror("cannot create tcp service.\n"); - exit(1); - } - if (!svc_register(transp, YPPROG, YPVERS, ypprog_2, IPPROTO_TCP)) { - Perror("unable to register (YPPROG, YPVERS, tcp).\n"); - exit(1); - } - if (!svc_register(transp, YPPUSH_XFRRESPPROG, YPPUSH_XFRRESPVERS, yppush_xfrrespprog_1, IPPROTO_TCP)) { - Perror("unable to register (YPPUSH_XFRRESPPROG, YPPUSH_XFRRESPVERS, tcp).\n"); - exit(1); - } - if (!svc_register(transp, YPBINDPROG, YPBINDVERS, ypbindprog_2, IPPROTO_TCP)) { - Perror("unable to register (YPBINDPROG, YPBINDVERS, tcp).\n"); - exit(1); - } - svc_run(); - Perror("svc_run returned\n"); - exit(1); -} - -static void -ypprog_2(rqstp, transp) - struct svc_req *rqstp; - SVCXPRT *transp; -{ - union { - domainname ypproc_domain_2_arg; - domainname ypproc_domain_nonack_2_arg; - ypreq_key ypproc_match_2_arg; - ypreq_key ypproc_first_2_arg; - ypreq_key ypproc_next_2_arg; - ypreq_xfr ypproc_xfr_2_arg; - ypreq_nokey ypproc_all_2_arg; - ypreq_nokey ypproc_master_2_arg; - ypreq_nokey ypproc_order_2_arg; - domainname ypproc_maplist_2_arg; - } argument; - char *result; - bool_t (*xdr_argument)(), (*xdr_result)(); - char *(*local)(); - - switch (rqstp->rq_proc) { - case YPPROC_NULL: - xdr_argument = xdr_void; - xdr_result = xdr_void; - local = (char *(*)()) ypproc_null_2; - break; - - case YPPROC_DOMAIN: - xdr_argument = xdr_domainname; - xdr_result = xdr_bool; - local = (char *(*)()) ypproc_domain_2; - break; - - case YPPROC_DOMAIN_NONACK: - xdr_argument = xdr_domainname; - xdr_result = xdr_bool; - local = (char *(*)()) ypproc_domain_nonack_2; - break; - - case YPPROC_MATCH: - xdr_argument = xdr_ypreq_key; - xdr_result = xdr_ypresp_val; - local = (char *(*)()) ypproc_match_2; - break; - - case YPPROC_FIRST: - xdr_argument = xdr_ypreq_key; - xdr_result = xdr_ypresp_key_val; - local = (char *(*)()) ypproc_first_2; - break; - - case YPPROC_NEXT: - xdr_argument = xdr_ypreq_key; - xdr_result = xdr_ypresp_key_val; - local = (char *(*)()) ypproc_next_2; - break; - - case YPPROC_XFR: - xdr_argument = xdr_ypreq_xfr; - xdr_result = xdr_ypresp_xfr; - local = (char *(*)()) ypproc_xfr_2; - break; - - case YPPROC_CLEAR: - xdr_argument = xdr_void; - xdr_result = xdr_void; - local = (char *(*)()) ypproc_clear_2; - break; - - case YPPROC_ALL: - xdr_argument = xdr_ypreq_nokey; - xdr_result = __xdr_ypresp_all; - local = (char *(*)()) ypproc_all_2; - break; - - case YPPROC_MASTER: - xdr_argument = xdr_ypreq_nokey; - xdr_result = xdr_ypresp_master; - local = (char *(*)()) ypproc_master_2; - break; - - case YPPROC_ORDER: - xdr_argument = xdr_ypreq_nokey; - xdr_result = xdr_ypresp_order; - local = (char *(*)()) ypproc_order_2; - break; - - case YPPROC_MAPLIST: - xdr_argument = xdr_domainname; - xdr_result = xdr_ypresp_maplist; - local = (char *(*)()) ypproc_maplist_2; - break; - - default: - svcerr_noproc(transp); - return; - } - bzero((char *)&argument, sizeof(argument)); - if (!svc_getargs(transp, xdr_argument, &argument)) { - svcerr_decode(transp); - return; - } - result = (*local)(&argument, rqstp); - if (result != NULL && !svc_sendreply(transp, xdr_result, result)) { - svcerr_systemerr(transp); - } - if (!svc_freeargs(transp, xdr_argument, &argument)) { - Perror("unable to free arguments\n"); - exit(1); - } -} - - -static void -yppush_xfrrespprog_1(rqstp, transp) - struct svc_req *rqstp; - SVCXPRT *transp; -{ - union { - int fill; - } argument; - char *result; - bool_t (*xdr_argument)(), (*xdr_result)(); - char *(*local)(); - - switch (rqstp->rq_proc) { - case YPPUSHPROC_NULL: - xdr_argument = xdr_void; - xdr_result = xdr_void; - local = (char *(*)()) yppushproc_null_1; - break; - - case YPPUSHPROC_XFRRESP: - xdr_argument = xdr_void; - xdr_result = xdr_yppushresp_xfr; - local = (char *(*)()) yppushproc_xfrresp_1; - break; - - default: - svcerr_noproc(transp); - return; - } - bzero((char *)&argument, sizeof(argument)); - if (!svc_getargs(transp, xdr_argument, &argument)) { - svcerr_decode(transp); - return; - } - result = (*local)(&argument, rqstp); - if (result != NULL && !svc_sendreply(transp, xdr_result, result)) { - svcerr_systemerr(transp); - } - if (!svc_freeargs(transp, xdr_argument, &argument)) { - Perror("unable to free arguments\n"); - exit(1); - } -} - - -static void -ypbindprog_2(rqstp, transp) - struct svc_req *rqstp; - SVCXPRT *transp; -{ - union { - domainname ypbindproc_domain_2_arg; - ypbind_setdom ypbindproc_setdom_2_arg; - } argument; - char *result; - bool_t (*xdr_argument)(), (*xdr_result)(); - char *(*local)(); - - switch (rqstp->rq_proc) { - case YPBINDPROC_NULL: - xdr_argument = xdr_void; - xdr_result = xdr_void; - local = (char *(*)()) ypbindproc_null_2; - break; - - case YPBINDPROC_DOMAIN: - xdr_argument = xdr_domainname; - xdr_result = xdr_ypbind_resp; - local = (char *(*)()) ypbindproc_domain_2; - break; - - case YPBINDPROC_SETDOM: - xdr_argument = xdr_ypbind_setdom; - xdr_result = xdr_void; - local = (char *(*)()) ypbindproc_setdom_2; - break; - - default: - svcerr_noproc(transp); - return; - } - bzero((char *)&argument, sizeof(argument)); - if (!svc_getargs(transp, xdr_argument, &argument)) { - svcerr_decode(transp); - return; - } - result = (*local)(&argument, rqstp); - if (result != NULL && !svc_sendreply(transp, xdr_result, result)) { - svcerr_systemerr(transp); - } - if (!svc_freeargs(transp, xdr_argument, &argument)) { - Perror("unable to free arguments\n"); - exit(1); - } -} - diff --git a/gnu/libexec/ypxfr/yp_xdr.c b/gnu/libexec/ypxfr/yp_xdr.c deleted file mode 100644 index 850d62e..0000000 --- a/gnu/libexec/ypxfr/yp_xdr.c +++ /dev/null @@ -1,145 +0,0 @@ -#include <rpc/rpc.h> -#include "yp.h" -#ifndef lint -/*static char sccsid[] = "from: @(#)yp.x 2.1 88/08/01 4.0 RPCSRC";*/ -static char rcsid[] = "yp.x,v 1.1 1994/08/04 19:01:55 wollman Exp"; -#endif /* not lint */ - -extern void Perror __P((const char *, ...)); - -struct { - union { - int (*encoder)(char *, int, char **, int *, char **, int *); - int (*decoder)(int, char *, int, char *, int, char *); - } foreach; - char *data; -} *xdr_ypall_callback; - -bool_t -__xdr_ypstat(XDR *xdrs, ypstat *objp) -{ - - if (!xdr_enum(xdrs, (enum_t *)objp)) { - return (FALSE); - } - return (TRUE); -} - -bool_t -__xdr_valdat(XDR *xdrs, valdat *objp) -{ - - if (!xdr_bytes(xdrs, (char **)&objp->valdat_val, (u_int *)&objp->valdat_len, YPMAXRECORD)) { - return (FALSE); - } - return (TRUE); -} - -bool_t -__xdr_keydat(XDR *xdrs, keydat *objp) -{ - - if (!xdr_bytes(xdrs, (char **)&objp->keydat_val, (u_int *)&objp->keydat_len, YPMAXRECORD)) { - return (FALSE); - } - return (TRUE); -} - -bool_t -__xdr_ypresp_key_val(XDR *xdrs, ypresp_key_val *objp) -{ - - if (!__xdr_ypstat(xdrs, &objp->stat)) { - return (FALSE); - } - if (!__xdr_valdat(xdrs, &objp->val)) { - return (FALSE); - } - if (!__xdr_keydat(xdrs, &objp->key)) { - return (FALSE); - } - return (TRUE); -} -bool_t -__xdr_ypresp_all(XDR *xdrs, ypresp_all *objp) -{ - int CallAgain = 0; - if (xdrs->x_op == XDR_DECODE) { - while(1) { -#if 1 - int s=objp->ypresp_all_u.val.stat; - bzero((char *)objp, sizeof (*objp)); - objp->ypresp_all_u.val.stat=s; -#endif - if (!xdr_bool(xdrs, &objp->more)) { - return (FALSE); - } - switch (objp->more) { - case TRUE: - if (!__xdr_ypresp_key_val(xdrs, &objp->ypresp_all_u.val)) { - return (FALSE); - } - if (CallAgain==0) { - CallAgain=(*(xdr_ypall_callback->foreach.decoder))( - objp->ypresp_all_u.val.stat, - objp->ypresp_all_u.val.key.keydat_val, - objp->ypresp_all_u.val.key.keydat_len, - objp->ypresp_all_u.val.val.valdat_val, - objp->ypresp_all_u.val.val.valdat_len, - xdr_ypall_callback->data); - } - break; - case FALSE: - return TRUE; - } -#if 0 - xdrs->x_op=XDR_FREE; - if (!__xdr_ypresp_all(xdrs, objp)) { - return FALSE; - } - xdrs->x_op=XDR_DECODE; -#else - xdr_free(__xdr_ypresp_all, (char *)objp); -#endif - } - } else if (xdrs->x_op == XDR_ENCODE) { - while(1) { - if (!xdr_bool(xdrs, &(objp->more))) { - return (FALSE); - } - if (!__xdr_ypresp_key_val(xdrs, &objp->ypresp_all_u.val)) { - Perror("__xdr_ypresp_key_val failed\n"); - return (FALSE); - } - if (objp->ypresp_all_u.val.stat!=YP_TRUE) { - objp->more=FALSE; - if (!xdr_bool(xdrs, &(objp->more))) { - return (FALSE); - } - return(TRUE); - } - objp->ypresp_all_u.val.stat = - (enum ypstat)(*(xdr_ypall_callback->foreach.encoder))( - objp->ypresp_all_u.val.key.keydat_val, - objp->ypresp_all_u.val.key.keydat_len, - &(objp->ypresp_all_u.val.key.keydat_val), - &(objp->ypresp_all_u.val.key.keydat_len), - &(objp->ypresp_all_u.val.val.valdat_val), - &(objp->ypresp_all_u.val.val.valdat_len)); - } - } else { -#if 0 - bool_t more=objp->more; - if (more==TRUE) { - if (!xdr_bool(xdrs, &objp->more)) { - return FALSE; - } - if (!__xdr_ypresp_key_val(xdrs, &objp->ypresp_all_u.val)) { - return (FALSE); - } - } -#endif - - return(TRUE); - } -} diff --git a/gnu/libexec/ypxfr/ypclnt.c b/gnu/libexec/ypxfr/ypclnt.c deleted file mode 100644 index 04e58b9..0000000 --- a/gnu/libexec/ypxfr/ypclnt.c +++ /dev/null @@ -1,233 +0,0 @@ -/* - YPS-0.2, NIS-Server for Linux - Copyright (C) 1994 Tobias Reber - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program 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 General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - - Modified for use with FreeBSD 2.x by Bill Paul (wpaul@ctr.columbia.edu) - - $Id: ypclnt.c,v 1.3 1995/03/31 05:45:21 wpaul Exp $ -*/ - -#include <stdio.h> -#include <stdlib.h> -#include <unistd.h> -#include <string.h> -#include <sys/socket.h> -#include <sys/types.h> -#include <sys/time.h> -#include <rpc/rpc.h> -#include <rpc/pmap_clnt.h> -#include <rpcsvc/yp.h> -/* - * ypclnt.h does not have a definition for struct dom_binding, - * although it is used there. It is defined in yp_prot.h, but - * we cannot use it here. - */ -struct dom_binding { - void * m; -}; -#include <rpcsvc/ypclnt.h> - -static struct sockaddr_in ServerAddress; -static CLIENT *UdpClient=NULL, *TcpClient=NULL; -extern void Perror __P((const char *, ...)); - -#ifdef YPBROADCAST -static bool_t -eachresult( caddr_t resultsp, struct sockaddr_in *raddr) -{ - bcopy(raddr, &ServerAddress, sizeof(ServerAddress)); - return((bool_t) TRUE); -} -#endif - -static struct sockaddr_in * -__do_ypbind(domainname d) -{ - static struct sockaddr_in resp; - int rc; - ypbind_resp r; - CLIENT *localBindClient; - struct sockaddr_in localAddr; - int s; - struct timeval t={5,0}, tott={25,0}; - - s=RPC_ANYSOCK; - bzero(&localAddr, sizeof localAddr); - localAddr.sin_addr.s_addr=htonl(INADDR_LOOPBACK); - localBindClient=clntudp_create(&localAddr, YPBINDPROG, YPBINDVERS, tott, &s); - if (!localBindClient) { - clnt_pcreateerror(""); - return NULL; - } - - rc=clnt_call(localBindClient, YPBINDPROC_DOMAIN, - xdr_domainname, (char *)&d, xdr_ypbind_resp, (char *)&r, t); - if (rc) { - clnt_perrno(rc); - return NULL; - } - - switch (r.ypbind_status) { - case YPBIND_FAIL_VAL: - switch(r.ypbind_resp_u.ypbind_error) { - case YPBIND_ERR_ERR: - Perror("YPBINDPROC_DOMAIN: Internal error\n"); - break; - case YPBIND_ERR_NOSERV: - Perror("YPBINDPROC_DOMAIN: No bound server for passed domain\n"); - break; - case YPBIND_ERR_RESC: - Perror("YPBINDPROC_DOMAIN: System resource allocation failure\n"); - break; - default: - Perror("YPBINDPROC_DOMAIN: Unknown error\n"); - break; - } - return NULL; - case YPBIND_SUCC_VAL: - { - struct ypbind_binding *y=&r.ypbind_resp_u.ypbind_bindinfo; - bzero(&resp, sizeof resp); - resp.sin_family=AF_INET; - resp.sin_addr=*(struct in_addr *)(y->ypbind_binding_addr); - return &resp; - } - } - return NULL; -} - -void -__yp_unbind(char *DomainName) -{ - if (UdpClient) clnt_destroy(UdpClient); - UdpClient=NULL; - if (TcpClient) clnt_destroy(TcpClient); - TcpClient=NULL; -} - -int -_yp_bind(struct sockaddr_in *ServerAddress, char *DomainName) -{ - struct sockaddr_in UdpServerAddress, TcpServerAddress; - int UdpSockp, TcpSockp; - static struct timeval Wait = { 5, 0 }; - - if (UdpClient || TcpClient) __yp_unbind(DomainName); - - bcopy(ServerAddress, &UdpServerAddress, sizeof(*ServerAddress)); - UdpServerAddress.sin_port=0; - UdpSockp=(RPC_ANYSOCK); - bcopy(ServerAddress, &TcpServerAddress, sizeof(*ServerAddress)); - TcpServerAddress.sin_port=0; - TcpSockp=(RPC_ANYSOCK); - if ((UdpClient=clntudp_create(&UdpServerAddress, YPPROG, YPVERS, - Wait, &UdpSockp))==NULL) { - clnt_pcreateerror("UdpClient"); - return(YPERR_RPC); - } - if ((TcpClient=clnttcp_create(&TcpServerAddress, YPPROG, YPVERS, - &TcpSockp, 0, 0))==NULL) { - clnt_pcreateerror("TcpClient"); - return(YPERR_RPC); - } - return(0); - -} - -int -__yp_bind(char *DomainName) -{ -# ifdef YPBROADCAST - enum clnt_stat clnt_stat; - static bool_t res; -# endif - static domainname domain; - - domain=DomainName; -# ifndef SOCKSERVER -# ifdef YPBROADCAST - bzero(&ServerAddress, sizeof ServerAddress); - if ((clnt_stat=clnt_broadcast(YPPROG, YPVERS, - YPPROC_DOMAIN_NONACK, xdr_domainname, (char *)&domain, xdr_bool, - (char *)&res, eachresult))!=RPC_SUCCESS) { - clnt_perrno(clnt_stat); - return(YPERR_DOMAIN); - } -# else - { - struct sockaddr_in *s=__do_ypbind(DomainName); - if (!s) return(YPERR_DOMAIN); - ServerAddress=*s; - } -# endif -# else - bzero(&ServerAddress, sizeof ServerAddress); - ServerAddress.sin_family=AF_INET; - ServerAddress.sin_addr.s_addr=htonl(SOCKSERVER); -# endif SOCKSERVER - return (_yp_bind(&ServerAddress, DomainName)); -} - -int -__yp_all( char *DomainName, char *MapName, struct ypall_callback *CallBack) -{ - static ypreq_nokey req; - ypresp_all *resp; - extern struct ypall_callback *xdr_ypall_callback; - int Status; - - do { - if (TcpClient==NULL) - if ((Status=__yp_bind(DomainName))) return(Status); - - req.domain=DomainName; - req.map=MapName; - xdr_ypall_callback=CallBack; - if ((resp=ypproc_all_2(&req, TcpClient))==NULL) { - clnt_perror(TcpClient, "ypall"); - __yp_unbind(DomainName); - } - } while(resp==NULL); - switch (resp->ypresp_all_u.val.stat) { - case YP_TRUE: - case YP_NOMORE: - Status=0; - break; - default: - Status=ypprot_err(resp->ypresp_all_u.val.stat); - } - clnt_freeres(TcpClient, xdr_ypresp_all, resp); - return(Status); -} - -int -_yp_clear(char *DomainName) -{ - void *resp; - int Status; - - do { - if (UdpClient==NULL) - if ((Status=yp_bind(DomainName))) return(Status); - if ((resp=ypproc_clear_2(NULL, UdpClient))==NULL) { - clnt_perror(UdpClient, "_yp_clear"); - __yp_unbind(DomainName); - } - } while(resp==NULL); - return 0; -} - diff --git a/gnu/libexec/ypxfr/ypxfr.8 b/gnu/libexec/ypxfr/ypxfr.8 deleted file mode 100644 index 9b021e5..0000000 --- a/gnu/libexec/ypxfr/ypxfr.8 +++ /dev/null @@ -1,199 +0,0 @@ -.\" Copyright (c) 1991, 1993, 1995 -.\" The Regents of the University of California. All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" 3. All advertising materials mentioning features or use of this software -.\" must display the following acknowledgement: -.\" This product includes software developed by the University of -.\" California, Berkeley and its contributors. -.\" 4. Neither the name of the University nor the names of its contributors -.\" may be used to endorse or promote products derived from this software -.\" without specific prior written permission. -.\" -.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND -.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE -.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -.\" SUCH DAMAGE. -.\" -.\" $Id: ypxfr.8,v 1.2 1995/03/30 04:14:45 wpaul Exp $ -.\" -.Dd February 5, 1995 -.Dt YPXFR 8 -.Os -.Sh NAME -.Nm ypxfr -.Nd "transfer NIS database from remote server to local host" -.Sh SYNOPSIS -.Nm ypxfr -.Op Fl f -.Op Fl c -.Op Fl d Ar target domain -.Op Fl h Ar source host -.Op Fl s Ar source domain -.Op Fl C Ar taskid program-number ipaddr port -.Ar mapname -.Sh DESCRIPTION -.Nm ypxfr -copies an NIS database (or -.Pa map ) -from one NIS server to another using NIS services. In FreeBSD, -.Nm ypxfr -is generally invoked by -.Xr ypserv 8 -when it receives a map transfer request from -.Xr yppush 8 . -.Nm ypxfr -is used primarily in environments where several NIS servers -are in use in a single domain. One server, the NIS master, maintains -the canonical copies of all NIS maps, and all the other servers, -the NIS slaves, copy new versions of the maps from the master whenever -any updates are made (i.e. when a user updates their password via -.Xr yppasswd 1 -). -.Pp -When run, -.Nm ypxfr -creates a temporary database file in -.Pa /var/yp/[domainmame] , -and fills it with the contents of -.Ar mapname -as supplied by the specified -.Ar source host . -When the entire map has been transfered, -.Nm ypxfr -deletes the original copy of -.Ar mapname -and moves the temporary copy into its place. When the transfer is -complete, -.Nm ypxfr -will attempt to send a 'clear current map' request to the local -.Xr ypserv 8 -process to clear any possible references it may still have to the -stale map. -.Pp -Note that all files created by -.Nm ypxfr -are owner readable and writable only for security reasons. Since the -NIS maps and the directory in which they reside are normally owned by -root, this prevents non-privleged users from making unauthorized -modifications. -.Pp -In order to maintain consistency across all NIS servers, -.Nm ypxfr -can be run periodically in a -.Xr cron 8 -job. Maps which change infrequently -need only be updated once a day (preferably late at night when system -usage is lowest), whereas those that are subject to frequent changes -(such a -.Pa passwd.byname -and -.Pa passwd.byuid ) -should be updated perhaps once every hour. Using -.Xr cron 8 -to automatically -update the NIS maps is not strictly mandatory since all updates should -be propagated by -.Xr yppush 8 -when -.Pa /var/yp/Makefile -is run on the NIS master server, however it is good practice -on large networks where possible outages could cause NIS servers to -fall out of sync with each other. -.Pp -When -.Nm ypxfr -is invoked without a controlling terminal, e.g. from inside -.Xr ypserv 8 , -it logs all its output using the -.Xr syslog 3 -facility. -.Sh OPTIONS -The following options and flags are supported by -.Nm ypxfr : -.Bl -tag -width flag -.It Fl f -Force a map transfer. Normally, -.Nm ypxfr -will not transfer a map if it determines that the NIS master's copy -is not newer than the existing copy already on the local host: the -.Fl f -flag forces a transfer regardless of which server's version is more recent. -.It Fl c -Do not send a 'clear current map' request to the -.Xr ypserv 8 -process running on the local host. This flag is normally used when -invoking -.Nm ypxfr -manually on a machine that is not yet running -.Xr ypserv 8 . -Without this flag, failure to contact the local NIS server will cause -.Nm ypxfr -to abort the transfer. -.It Fl d Ar target domain -Specify a target domain other than the current NIS domain. -.It Fl h Ar source host -Specify the name of the host from which to copy the NIS maps. This option -is used to insure that -.Nm ypxfr -only copies maps from the NIS master server. -.It Fl s Ar source domain -Specify the domain from which to transfer a map, in the event that -the transfer is being done across two different NIS domains. -.It Fl C Ar taskid program-number ipaddr port -These options are used only when -.Nm ypxfr -is invoked by -.Xr ypserv 8 -in response to a map transfer request initiated by -.Xr yppush 8 . -In this instance, -.Nm ypxfr -needs to 'callback' to the -.Xr yppush 8 -process and interact with it, so -.Xr yppush 8 -passes to it an IP address -.Ar ipaddr , -port number -.Ar port , -registered program number -.Ar program-number -and a transaction ID -.Ar taskid -that it can use to contact the waiting -.Xr yppush 8 -process on the master server. -.It Ar mapname -The name of the map to transfer. -.El -.Sh FILES -.Bl -tag -width Pa -compact -.It Pa /var/yp/[domainname]/[maps] -The NIS maps for a particular NIS domain. -.El -.Sh SEE ALSO -.Xr ypserv 8 , -.Xr ypxfr 8 , -.Xr yp 8 -.Sh LICENSE -This program is covered by the GNU Public License version 2. -.Sh AUTHOR -Tobias Reber (original Linux version) -.br -Bill Paul <wpaul@ctr.columbia.edu> (port to FreeBSD and various -changes) diff --git a/gnu/libexec/ypxfr/ypxfr.c b/gnu/libexec/ypxfr/ypxfr.c deleted file mode 100644 index e3a4734..0000000 --- a/gnu/libexec/ypxfr/ypxfr.c +++ /dev/null @@ -1,379 +0,0 @@ -/* - YPS-0.2, NIS-Server for Linux - Copyright (C) 1994 Tobias Reber - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program 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 General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - - Modified for use with FreeBSD 2.x by Bill Paul (wpaul@ctr.columbia.edu) - - $Id: ypxfr.c,v 1.5 1995/03/31 05:45:23 wpaul Exp $ -*/ - -#include <stdio.h> -#include <stdlib.h> -#include <unistd.h> -#include <string.h> -#include <sys/socket.h> -#include <paths.h> -#include <rpc/rpc.h> -#include <sys/types.h> -#include <sys/param.h> -#include <db.h> -#include <limits.h> -#include <sys/stat.h> - -DB *db; - -#ifndef _PATH_YP -#define _PATH_YP "/var/yp/" -#endif - -#define PERM_SECURE (S_IRUSR|S_IWUSR) -HASHINFO openinfo = { - 4096, /* bsize */ - 32, /* ffactor */ - 256, /* nelem */ - 2048 * 1024, /* cachesize */ - NULL, /* hash */ - 0 /* lorder */ -}; - -#include <rpcsvc/yp.h> - -struct dom_binding { - struct dom_binding *dom_pnext; - char dom_domain[YPMAXDOMAIN + 1]; - struct sockaddr_in dom_server_addr; - u_short dom_server_port; - int dom_socket; - CLIENT *dom_client; - u_short dom_local_port; - long dom_vers; -}; - -#define DATUM /* Otherwise ypclnt.h redefines datum */ -#include <rpcsvc/ypclnt.h> -/* - * These are hooks to the ypclnt library in ../lib - */ -extern int _yp_bind(struct sockaddr_in *, char *); -extern int _yp_clear( char *); -extern void Perror __P((const char *, ...)); -int logflag = 0; -char *progname; -#include <errno.h> -#include <syslog.h> -#include <netdb.h> -#include <fcntl.h> -#include <ctype.h> -#include <arpa/inet.h> - -extern int optind; -extern char *optarg; - -static char *SourceHost=NULL, *TargetDomain=NULL, *SourceDomain=NULL; -static struct in_addr IpAddress; -static int Force=0, NoClear=0, TaskId=0, ProgramNumber=0, - PortNumber=0; - -static char * -ypxfr_err_string(enum ypxfrstat y) { - switch(y) { - case YPXFR_SUCC: return "Success"; - case YPXFR_AGE: return "Master's version not newer"; - case YPXFR_NOMAP: return "Can't find server for map"; - case YPXFR_NODOM: return "Domain not supported"; - case YPXFR_RSRC: return "Local resource alloc failure"; - case YPXFR_RPC: return "RPC failure talking to server"; - case YPXFR_MADDR: return "Can't get master address"; - case YPXFR_YPERR: return "YP server/map db error"; - case YPXFR_BADARGS: return "Request arguments bad"; - case YPXFR_DBM: return "Local dbm operation failed"; - case YPXFR_FILE: return "Local file I/O operation failed"; - case YPXFR_SKEW: return "Map version skew during transfer"; - case YPXFR_CLEAR: return "Can't send \"Clear\" req to local ypserv"; - case YPXFR_FORCE: return "No local order number in map use -f flag."; - case YPXFR_XFRERR: return "ypxfr error"; - case YPXFR_REFUSED: return "Transfer request refused by ypserv"; - } -} - -ypxfr_foreach(int status, char *key, int keylen, char *val, int vallen, - int *data) -{ - - DBT outKey, outData; - - if (status==YP_NOMORE) - return 0; - if (status!=YP_TRUE) { - int s=ypprot_err(status); - Perror("%s\n",yperr_string(s)); - return 1; - } - - outKey.data=key; outKey.size=(size_t)keylen; - outData.data=val; outData.size=(size_t)vallen; - (db->put)(db,&outKey,&outData,0); - - return 0; -} - -static enum ypxfrstat -ypxfr(char *mapName) { - - int localOrderNum=0; - int masterOrderNum=0; - char *masterName; - struct sockaddr_in localHost; - struct sockaddr_in masterHost; - struct ypall_callback callback; - char dbName[1024]; - char dbName2[1024]; - int y, masterSock; - CLIENT *masterClient; - - memset(&localHost, '\0', sizeof localHost); - localHost.sin_family=AF_INET; - localHost.sin_addr.s_addr=htonl(INADDR_LOOPBACK); - - - if (!SourceHost) { - if ((y=yp_master(SourceDomain, mapName, &masterName))) - return YPXFR_MADDR; - SourceHost=masterName; - } - - memset(&masterHost, '\0', sizeof masterHost); - masterHost.sin_family=AF_INET; - { - struct hostent *h=gethostbyname(SourceHost); - if (!h) { - return YPXFR_MADDR; - } - memcpy(&masterHost.sin_addr, h->h_addr, - sizeof masterHost.sin_addr); - } - - if ((y=_yp_bind(&masterHost, SourceDomain))) return YPXFR_RPC; - - masterSock=RPC_ANYSOCK; - masterClient=clnttcp_create(&masterHost, YPPROG, YPVERS, &masterSock, 0, 0); - if (masterClient==NULL) { - clnt_pcreateerror(""); - return YPXFR_RPC; - } - { - static struct timeval tv = { 25, 0 }; - struct ypreq_nokey req; - struct ypresp_order resp; - int y; - - req.domain=SourceDomain; - req.map=mapName; - y=clnt_call(masterClient, YPPROC_ORDER, xdr_ypreq_nokey, - &req, xdr_ypresp_order, &resp, tv); - if (y!=RPC_SUCCESS) { - clnt_perror(masterClient, "masterOrderNum"); - masterOrderNum=0x7fffffff; - } else { - masterOrderNum=resp.ordernum; - } - xdr_free(xdr_ypresp_order, (char *)&resp); - } - - if (!Force) { - DBT inKey, inVal; - sprintf(dbName, "%s%s/%s", _PATH_YP, TargetDomain, mapName); - if ((db = dbopen(dbName,O_RDWR|O_EXCL, PERM_SECURE, - DB_HASH, &openinfo)) == NULL) { - Perror("dbopen: %s\n", strerror(errno)); - Perror("%s: cannot open - ignored.\n", dbName); - localOrderNum=0; - } else { - inKey.data="YP_LAST_MODIFIED"; inKey.size=strlen(inKey.data); - (db->get)(db,&inKey,&inVal,0); - if (inVal.data) { - int i; - char *d=inVal.data; - for (i=0; i<inVal.size; i++, d++) { - if (!isdigit(*d)) { - (void)(db->close)(db); - return YPXFR_SKEW; - } - } - localOrderNum=atoi(inVal.data); - } - (void)(db->close)(db); - } - if (localOrderNum>=masterOrderNum) return YPXFR_AGE; - } - - sprintf(dbName, "%s%s/%s~", _PATH_YP, TargetDomain, mapName); - if ((db = dbopen(dbName,O_RDWR|O_EXCL|O_CREAT, PERM_SECURE, DB_HASH, - &openinfo)) == NULL) { - Perror("%s: Cannot open\n", dbName); - return YPXFR_DBM; - } - - { - DBT outKey, outData; - char orderNum[12]; - outKey.data="YP_MASTER_NAME"; outKey.size=strlen(outKey.data); - outData.data=SourceHost; outData.size=strlen(outData.data); - (db->put)(db,&outKey,&outData,0); - sprintf(orderNum, "%d", masterOrderNum); - outKey.data="YP_LAST_MODIFIED"; outKey.size=strlen(outKey.data); - outData.data=orderNum; outData.size=strlen(outData.data); - (db->put)(db,&outKey,&outData,0); - } - - - callback.foreach = ypxfr_foreach; - callback.data = NULL; - - /* - * We have to use our own private version of yp_all() here since - * the yp_all() in libc doesn't allow us to specify the server that - * we want to talk to: it's imperative that we transfer data from - * the NIS master server and no one else. - */ - y=__yp_all(SourceDomain, mapName, &callback); - - (void)(db->close)(db); - sprintf(dbName, "%s%s/%s~", _PATH_YP, TargetDomain, mapName); - sprintf(dbName2, "%s%s/%s", _PATH_YP, TargetDomain, mapName); - unlink(dbName2); - rename(dbName, dbName2); - - if (!NoClear) { - memset(&localHost, '\0', sizeof localHost); - localHost.sin_family=AF_INET; - localHost.sin_addr.s_addr=htonl(INADDR_LOOPBACK); - if (_yp_bind(&localHost, TargetDomain) || - _yp_clear(TargetDomain)) return YPXFR_CLEAR; - } - return y==0?YPXFR_SUCC:YPXFR_YPERR; -} - -void usage(progname) -char *progname; -{ - fprintf(stderr,"usage: %s [-f] [-c] [-d target domain] \ -[-h source host]\n [-s source domain] \ -[-C taskid program-number ipaddr port] mapname\n", progname); -} - -void -main (int argc, char **argv) -{ - - progname = argv[0]; - - if (!isatty(2)) { - openlog(argv[0], LOG_PID, LOG_DAEMON); - logflag = 1; - } - - if (argc < 2) - { - usage(argv[0]); - exit(1); - } - - while(1) { - int c=getopt(argc, argv, "fcd:h:s:C:S"); - if (c==EOF) break; - switch (c) { - case 'f': - Force++; - break; - case 'c': - NoClear++; - break; - case 'd': - TargetDomain=optarg; - break; - case 'h': - SourceHost=optarg; - break; - case 's': - SourceDomain=optarg; - break; - case 'C': - TaskId=atoi(optarg); - ProgramNumber=atoi(argv[optind++]); - IpAddress.s_addr=inet_addr(argv[optind++]); - PortNumber=atoi(argv[optind++]); - break; - default: - usage(argv[0]); - exit(1); - } - } - argc-=optind; - argv+=optind; - - if (!TargetDomain) { - yp_get_default_domain(&TargetDomain); - } - if (!SourceDomain) { - SourceDomain=TargetDomain; - } - - for (; *argv; argv++) { - enum ypxfrstat y; - if ((y=ypxfr(*argv))!=YPXFR_SUCC) { - Perror("%s\n", ypxfr_err_string(y)); - } - if (TaskId) { - struct sockaddr_in addr; - struct timeval wait; - CLIENT *clnt; - int s; - ypresp_xfr resp; - static struct timeval tv={0,0}; - - memset(&addr, '\0', sizeof addr); - addr.sin_addr=IpAddress; - addr.sin_port=htons(PortNumber); - addr.sin_family=AF_INET; - wait.tv_sec=25; wait.tv_usec=0; - s=RPC_ANYSOCK; - - clnt=clntudp_create(&addr, ProgramNumber, 1, wait, &s); - if (!clnt) { - clnt_pcreateerror("ypxfr_callback"); - continue; - } - - resp.transid=TaskId; - resp.xfrstat=y; - switch (clnt_call(clnt, 1, xdr_ypresp_xfr, &resp, - xdr_void, NULL, tv)) { - case RPC_SUCCESS: - case RPC_TIMEDOUT: - break; - default: - clnt_perror(clnt, "ypxfr_callback"); - } - - clnt_destroy(clnt); - } - } - - exit(0); - -} |