From c96a766171b601d5061b566d5da3794d9df354d2 Mon Sep 17 00:00:00 2001 From: Nalin Dahyabhai Date: Fri, 13 May 2011 14:10:38 -0400 Subject: - don't assume that libc will provide yp headers -- build them ourselves --- Makefile.am | 2 +- configure.ac | 46 +++---- rpc/yp.x | 311 ---------------------------------------------- src/back-nis.c | 4 +- src/back-sch.c | 4 +- src/back-shr.c | 4 +- src/disp-nis.c | 4 +- src/format.c | 2 +- src/nis.c | 4 +- src/plug-nis.c | 4 +- src/plug-sch.c | 4 +- src/portmap.c | 4 +- tests/clients/Makefile.am | 6 +- tests/clients/yp.c | 5 +- yp/Makefile.am | 11 ++ yp/yp.x | 311 ++++++++++++++++++++++++++++++++++++++++++++++ 16 files changed, 364 insertions(+), 362 deletions(-) delete mode 100644 rpc/yp.x create mode 100644 yp/Makefile.am create mode 100644 yp/yp.x diff --git a/Makefile.am b/Makefile.am index 8900d48..b1ee711 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1,5 +1,5 @@ EXTRA_DIST = COPYING NEWS README STATUS slapi-nis.spec doc/*.txt doc/examples/*.ldif.in doc/devel doc/ipa src/nisserver-plugin-defs.1 -SUBDIRS = src tests +SUBDIRS = yp src tests ACLOCAL_AMFLAGS=-I m4 noinst_DATA = $(builddir)/doc/nis-known-maps.txt diff --git a/configure.ac b/configure.ac index 95e3ec4..dc77185 100644 --- a/configure.ac +++ b/configure.ac @@ -123,22 +123,19 @@ AC_SUBST(LIBPTHREAD) AC_ARG_WITH(tirpc, AS_HELP_STRING([--with-tirpc], [use libtirpc]), use_tirpc=$withval, - use_tirpc=no) -if pkg-config libtirpc 2> /dev/null ; then - if test $use_tirpc = yes ; then - AC_DEFINE(HAVE_LIBTIRPC,1,[Define if you have libtirpc.]) - PKG_CHECK_MODULES(TIRPC,libtirpc) - else - RPC_CFLAGS= - RPC_LIBS=-lnsl - fi + [ + AC_CHECK_HEADERS(rpc/xdr.h) + if test x$ac_cv_header_rpc_xdr_h = xno ; then + use_tirpc=yes + else + use_tirpc=no + fi + ]) +if test $use_tirpc = yes ; then + PKG_CHECK_MODULES(TIRPC,libtirpc) else - if test $use_tirpc = yes ; then - PKG_CHECK_MODULES(TIRPC,libtirpc) - else - RPC_CFLAGS= - RPC_LIBS=-lnsl - fi + RPC_CFLAGS= + RPC_LIBS=-lnsl fi AC_SUBST(RPC_CFLAGS) AC_SUBST(RPC_LIBS) @@ -193,14 +190,6 @@ AC_SUBST(mysuffix) myincludedir=`eval echo "$includedir" | sed "s,NONE,${ac_default_prefix},g"` myincludedir=`eval echo "$myincludedir" | sed "s,NONE,${ac_prefix},g"` -AC_MSG_CHECKING([for yp.x]) -if test -s $myincludedir/rpcsvc/yp.x ; then - yp_x_include_dir=$myincludedir -else - yp_x_include_dir=/usr/include -fi -AC_MSG_RESULT($yp_x_include_dir/rpcsvc/yp.x) -AC_SUBST(yp_x_include_dir) AC_ARG_WITH(users, AS_HELP_STRING([--with-users=cn=Users], @@ -309,11 +298,16 @@ AC_SUBST(schentryformatattr) AC_SUBST(groupattr) AC_SUBST(containerattr) +AC_PATH_PROG(RPCGEN,[rpcgen],no-rpcgen,[$PATH$PATH_SEPARATOR/usr/sbin$PATH_SEPARATOR/usr/libexec]) +if test x$RPCGEN = xno-rpcgen ; then + AC_MSG_ERROR([rpcgen needed but not found]) +fi + if test "$server" = dirsrv ; then AC_PATH_PROG(SLAPD,[ns-slapd],no-slapd,[$PATH$PATH_SEPARATOR/usr/sbin$PATH_SEPARATOR/usr/libexec]) - AC_PATH_PROG(RPCGEN,[rpcgen],no-rpcgen,[$PATH$PATH_SEPARATOR/usr/sbin$PATH_SEPARATOR/usr/libexec]) fi -AM_CONDITIONAL(CAN_TEST,[test "$server" = dirsrv && test "$SLAPD" != no-slapd && test "$RPCGEN" != no-rpcgen]) + +AM_CONDITIONAL(CAN_TEST,[test "$server" = dirsrv && test "$SLAPD" != no-slapd]) AC_SUBST(CAN_TEST) test_user=`id -un` AC_SUBST(test_user) @@ -339,7 +333,7 @@ AC_SUBST(NIS_PLUGIN_CONTINUE_WITHOUT_PORTMAP_ENV) AC_SUBST(TRACE_CMD) AC_CONFIG_HEADER(src/config.h) -AC_OUTPUT(Makefile src/Makefile +AC_OUTPUT(Makefile yp/Makefile src/Makefile doc/examples/nis-plugin-example.ldif doc/examples/sch-plugin-example.ldif tests/Makefile tests/clients/Makefile tests/slapd.sh tests/config/dse.ldif.initial diff --git a/rpc/yp.x b/rpc/yp.x deleted file mode 100644 index 269ae6f..0000000 --- a/rpc/yp.x +++ /dev/null @@ -1,311 +0,0 @@ -/* @(#)yp.x 2.1 88/08/01 4.0 RPCSRC */ - -/* - * Copyright (c) 2010, Oracle America, Inc. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * 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. - * * Neither the name of the "Oracle America, Inc." 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 COPYRIGHT HOLDERS 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 - * COPYRIGHT HOLDER 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. - */ - -/* - * Protocol description file for the Yellow Pages Service - */ - -const YPMAXRECORD = 1024; -const YPMAXDOMAIN = 64; -const YPMAXMAP = 64; -const 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 -}; - - -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 string domainname; -typedef string mapname; -typedef string peername; -typedef opaque keydat; -typedef opaque valdat; - - -struct ypmap_parms { - domainname domain; - mapname map; - unsigned int ordernum; - peername peer; -}; - -struct ypreq_key { - domainname domain; - mapname map; - keydat key; -}; - -struct ypreq_nokey { - domainname domain; - mapname map; -}; - -struct ypreq_xfr { - ypmap_parms map_parms; - unsigned int transid; - unsigned int prog; - unsigned int port; -}; - - -struct ypresp_val { - ypstat stat; - valdat val; -}; - -struct ypresp_key_val { - ypstat stat; -#ifdef STUPID_SUN_BUG - /* This is the form as distributed by Sun. But even the Sun NIS - servers expect the values in the other order. So their - implementation somehow must change the order internally. We - don't want to follow this bad example since the user should be - able to use rpcgen on this file. */ - keydat key; - valdat val; -#else - valdat val; - keydat key; -#endif -}; - - -struct ypresp_master { - ypstat stat; - peername peer; -}; - -struct ypresp_order { - ypstat stat; - unsigned int ordernum; -}; - -union ypresp_all switch (bool more) { -case TRUE: - ypresp_key_val val; -case FALSE: - void; -}; - -struct ypresp_xfr { - unsigned int transid; - ypxfrstat xfrstat; -}; - -struct ypmaplist { - mapname map; - ypmaplist *next; -}; - -struct ypresp_maplist { - ypstat stat; - ypmaplist *maps; -}; - -enum yppush_status { - YPPUSH_SUCC = 1, /* Success */ - YPPUSH_AGE = 2, /* Master's version not newer */ - YPPUSH_NOMAP = -1, /* Can't find server for map */ - YPPUSH_NODOM = -2, /* Domain not supported */ - YPPUSH_RSRC = -3, /* Local resource alloc failure */ - YPPUSH_RPC = -4, /* RPC failure talking to server */ - YPPUSH_MADDR = -5, /* Can't get master address */ - YPPUSH_YPERR = -6, /* YP server/map db error */ - YPPUSH_BADARGS = -7, /* Request arguments bad */ - YPPUSH_DBM = -8, /* Local dbm operation failed */ - YPPUSH_FILE = -9, /* Local file I/O operation failed */ - YPPUSH_SKEW = -10, /* Map version skew during transfer */ - YPPUSH_CLEAR = -11, /* Can't send "Clear" req to local ypserv */ - YPPUSH_FORCE = -12, /* No local order number in map use -f flag. */ - YPPUSH_XFRERR = -13, /* ypxfr error */ - YPPUSH_REFUSED = -14 /* Transfer request refused by ypserv */ -}; - -struct yppushresp_xfr { - unsigned transid; - yppush_status status; -}; - -/* - * Response structure and overall result status codes. Success and failure - * represent two separate response message types. - */ - -enum ypbind_resptype { - YPBIND_SUCC_VAL = 1, - YPBIND_FAIL_VAL = 2 -}; - -struct ypbind_binding { - opaque ypbind_binding_addr[4]; /* In network order */ - opaque ypbind_binding_port[2]; /* In network order */ -}; - -union ypbind_resp switch (ypbind_resptype ypbind_status) { -case YPBIND_FAIL_VAL: - unsigned ypbind_error; -case YPBIND_SUCC_VAL: - ypbind_binding ypbind_bindinfo; -}; - -/* Detailed failure reason codes for response field ypbind_error*/ - -const YPBIND_ERR_ERR = 1; /* Internal error */ -const YPBIND_ERR_NOSERV = 2; /* No bound server for passed domain */ -const YPBIND_ERR_RESC = 3; /* System resource allocation failure */ - - -/* - * Request data structure for ypbind "Set domain" procedure. - */ -struct ypbind_setdom { - domainname ypsetdom_domain; - ypbind_binding ypsetdom_binding; - unsigned ypsetdom_vers; -}; - - -/* - * YP access protocol - */ -program YPPROG { - version YPVERS { - void - YPPROC_NULL(void) = 0; - - bool - YPPROC_DOMAIN(domainname) = 1; - - bool - YPPROC_DOMAIN_NONACK(domainname) = 2; - - ypresp_val - YPPROC_MATCH(ypreq_key) = 3; - - ypresp_key_val - YPPROC_FIRST(ypreq_key) = 4; - - ypresp_key_val - YPPROC_NEXT(ypreq_key) = 5; - - ypresp_xfr - YPPROC_XFR(ypreq_xfr) = 6; - - void - YPPROC_CLEAR(void) = 7; - - ypresp_all - YPPROC_ALL(ypreq_nokey) = 8; - - ypresp_master - YPPROC_MASTER(ypreq_nokey) = 9; - - ypresp_order - YPPROC_ORDER(ypreq_nokey) = 10; - - ypresp_maplist - YPPROC_MAPLIST(domainname) = 11; - } = 2; -} = 100004; - - -/* - * YPPUSHPROC_XFRRESP is the callback routine for result of YPPROC_XFR - */ -program YPPUSH_XFRRESPPROG { - version YPPUSH_XFRRESPVERS { - void - YPPUSHPROC_NULL(void) = 0; - -#ifdef STUPID_SUN_BUG - /* This is the form as distributed by Sun. But even - the Sun NIS servers expect the values in the other - order. So their implementation somehow must change - the order internally. We don't want to follow this - bad example since the user should be able to use - rpcgen on this file. */ - yppushresp_xfr - YPPUSHPROC_XFRRESP(void) = 1; -#else - void - YPPUSHPROC_XFRRESP(yppushresp_xfr) = 1; -#endif - } = 1; -} = 0x40000000; /* transient: could be anything up to 0x5fffffff */ - -/* - * YP binding protocol - */ -program YPBINDPROG { - version YPBINDVERS { - void - YPBINDPROC_NULL(void) = 0; - - ypbind_resp - YPBINDPROC_DOMAIN(domainname) = 1; - - void - YPBINDPROC_SETDOM(ypbind_setdom) = 2; - } = 2; -} = 100007; diff --git a/src/back-nis.c b/src/back-nis.c index 360f9ac..906f25a 100644 --- a/src/back-nis.c +++ b/src/back-nis.c @@ -1,5 +1,5 @@ /* - * Copyright 2008 Red Hat, Inc. + * Copyright 2008,2011 Red Hat, Inc. * * 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 @@ -37,7 +37,7 @@ #endif #include -#include +#include "../yp/yp.h" #ifdef HAVE_TCPD_H #include diff --git a/src/back-sch.c b/src/back-sch.c index f9425fd..a6602c4 100644 --- a/src/back-sch.c +++ b/src/back-sch.c @@ -1,5 +1,5 @@ /* - * Copyright 2008,2009,2010 Red Hat, Inc. + * Copyright 2008,2009,2010,2011 Red Hat, Inc. * * 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 @@ -38,7 +38,7 @@ #endif #include -#include +#include "../yp/yp.h" #ifdef HAVE_TCPD_H #include diff --git a/src/back-shr.c b/src/back-shr.c index 1d700a7..355686b 100644 --- a/src/back-shr.c +++ b/src/back-shr.c @@ -1,5 +1,5 @@ /* - * Copyright 2008,2010 Red Hat, Inc. + * Copyright 2008,2010,2011 Red Hat, Inc. * * 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 @@ -37,7 +37,7 @@ #endif #include -#include +#include "../yp/yp.h" #ifdef HAVE_TCPD_H #include diff --git a/src/disp-nis.c b/src/disp-nis.c index 28b55fd..b381e0c 100644 --- a/src/disp-nis.c +++ b/src/disp-nis.c @@ -1,5 +1,5 @@ /* - * Copyright 2008 Red Hat, Inc. + * Copyright 2008,2011 Red Hat, Inc. * * 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 @@ -47,7 +47,7 @@ #endif #include -#include +#include "../yp/yp.h" #include "plugin.h" #include "disp-nis.h" diff --git a/src/format.c b/src/format.c index 0d3df33..51be5e9 100644 --- a/src/format.c +++ b/src/format.c @@ -40,7 +40,7 @@ #include #endif -#include +#include "../yp/yp.h" #include "backend.h" #include "back-shr.h" diff --git a/src/nis.c b/src/nis.c index 4629bb8..b7640c6 100644 --- a/src/nis.c +++ b/src/nis.c @@ -1,5 +1,5 @@ /* - * Copyright 2008 Red Hat, Inc. + * Copyright 2008,2011 Red Hat, Inc. * * 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 @@ -41,7 +41,7 @@ #endif #include -#include +#include "../yp/yp.h" #include "disp-nis.h" #include "map.h" diff --git a/src/plug-nis.c b/src/plug-nis.c index 4db1061..c6fa274 100644 --- a/src/plug-nis.c +++ b/src/plug-nis.c @@ -1,5 +1,5 @@ /* - * Copyright 2008,2009 Red Hat, Inc. + * Copyright 2008,2009,2011 Red Hat, Inc. * * 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 @@ -35,7 +35,7 @@ #include #include -#include +#include "../yp/yp.h" #ifdef HAVE_TCPD_H #include diff --git a/src/plug-sch.c b/src/plug-sch.c index 7bd121d..e7d4762 100644 --- a/src/plug-sch.c +++ b/src/plug-sch.c @@ -1,5 +1,5 @@ /* - * Copyright 2008 Red Hat, Inc. + * Copyright 2008,2011 Red Hat, Inc. * * 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 @@ -36,7 +36,7 @@ #include #include -#include +#include "../yp/yp.h" #ifdef HAVE_TCPD_H #include diff --git a/src/portmap.c b/src/portmap.c index 12bd34d..6b4a3cd 100644 --- a/src/portmap.c +++ b/src/portmap.c @@ -1,5 +1,5 @@ /* - * Copyright 2008,2009 Red Hat, Inc. + * Copyright 2008,2009,2011 Red Hat, Inc. * * 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 @@ -38,8 +38,8 @@ #include #endif -#include #include +#include "../yp/yp.h" #include #include "portmap.h" diff --git a/tests/clients/Makefile.am b/tests/clients/Makefile.am index 923f4dd..2a7dfde 100644 --- a/tests/clients/Makefile.am +++ b/tests/clients/Makefile.am @@ -1,11 +1,7 @@ EXTRA_DIST = ypmaplist.py AM_CFLAGS = @TIRPC_CFLAGS@ @RPC_CFLAGS@ -RPCGEN=@RPCGEN@ if CAN_TEST noinst_PROGRAMS = yp ldifsort -yp_SOURCES = yp.c yp_clnt.c +yp_SOURCES = yp.c ../../yp/yp_clnt.c ../../yp/yp_xdr.c yp_LDADD = @TIRPC_LIBS@ @RPC_LIBS@ -yp_clnt.c: @yp_x_include_dir@/rpcsvc/yp.x - $(RPCGEN) -l $< > $@ -CLEANFILES = yp_clnt.c endif diff --git a/tests/clients/yp.c b/tests/clients/yp.c index dc5c4d5..cdf7b38 100644 --- a/tests/clients/yp.c +++ b/tests/clients/yp.c @@ -25,14 +25,15 @@ #include #include #include -#include -#include #include #include #include #include #include +#include +#include "../../yp/yp.h" + static struct sockaddr_in server; static int connected; diff --git a/yp/Makefile.am b/yp/Makefile.am new file mode 100644 index 0000000..b24e958 --- /dev/null +++ b/yp/Makefile.am @@ -0,0 +1,11 @@ +EXTRA_FILES = yp.x +CLEANFILES = yp.h yp_xdr.c yp_clnt.c + +all: $(CLEANFILES) + +yp.h: yp.x + $(RPCGEN) -h -o $@ $^ +yp_xdr.c: yp.x + $(RPCGEN) -c -o $@ $^ +yp_clnt.c: yp.x + $(RPCGEN) -l -o $@ $^ diff --git a/yp/yp.x b/yp/yp.x new file mode 100644 index 0000000..269ae6f --- /dev/null +++ b/yp/yp.x @@ -0,0 +1,311 @@ +/* @(#)yp.x 2.1 88/08/01 4.0 RPCSRC */ + +/* + * Copyright (c) 2010, Oracle America, Inc. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * 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. + * * Neither the name of the "Oracle America, Inc." 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 COPYRIGHT HOLDERS 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 + * COPYRIGHT HOLDER 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. + */ + +/* + * Protocol description file for the Yellow Pages Service + */ + +const YPMAXRECORD = 1024; +const YPMAXDOMAIN = 64; +const YPMAXMAP = 64; +const 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 +}; + + +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 string domainname; +typedef string mapname; +typedef string peername; +typedef opaque keydat; +typedef opaque valdat; + + +struct ypmap_parms { + domainname domain; + mapname map; + unsigned int ordernum; + peername peer; +}; + +struct ypreq_key { + domainname domain; + mapname map; + keydat key; +}; + +struct ypreq_nokey { + domainname domain; + mapname map; +}; + +struct ypreq_xfr { + ypmap_parms map_parms; + unsigned int transid; + unsigned int prog; + unsigned int port; +}; + + +struct ypresp_val { + ypstat stat; + valdat val; +}; + +struct ypresp_key_val { + ypstat stat; +#ifdef STUPID_SUN_BUG + /* This is the form as distributed by Sun. But even the Sun NIS + servers expect the values in the other order. So their + implementation somehow must change the order internally. We + don't want to follow this bad example since the user should be + able to use rpcgen on this file. */ + keydat key; + valdat val; +#else + valdat val; + keydat key; +#endif +}; + + +struct ypresp_master { + ypstat stat; + peername peer; +}; + +struct ypresp_order { + ypstat stat; + unsigned int ordernum; +}; + +union ypresp_all switch (bool more) { +case TRUE: + ypresp_key_val val; +case FALSE: + void; +}; + +struct ypresp_xfr { + unsigned int transid; + ypxfrstat xfrstat; +}; + +struct ypmaplist { + mapname map; + ypmaplist *next; +}; + +struct ypresp_maplist { + ypstat stat; + ypmaplist *maps; +}; + +enum yppush_status { + YPPUSH_SUCC = 1, /* Success */ + YPPUSH_AGE = 2, /* Master's version not newer */ + YPPUSH_NOMAP = -1, /* Can't find server for map */ + YPPUSH_NODOM = -2, /* Domain not supported */ + YPPUSH_RSRC = -3, /* Local resource alloc failure */ + YPPUSH_RPC = -4, /* RPC failure talking to server */ + YPPUSH_MADDR = -5, /* Can't get master address */ + YPPUSH_YPERR = -6, /* YP server/map db error */ + YPPUSH_BADARGS = -7, /* Request arguments bad */ + YPPUSH_DBM = -8, /* Local dbm operation failed */ + YPPUSH_FILE = -9, /* Local file I/O operation failed */ + YPPUSH_SKEW = -10, /* Map version skew during transfer */ + YPPUSH_CLEAR = -11, /* Can't send "Clear" req to local ypserv */ + YPPUSH_FORCE = -12, /* No local order number in map use -f flag. */ + YPPUSH_XFRERR = -13, /* ypxfr error */ + YPPUSH_REFUSED = -14 /* Transfer request refused by ypserv */ +}; + +struct yppushresp_xfr { + unsigned transid; + yppush_status status; +}; + +/* + * Response structure and overall result status codes. Success and failure + * represent two separate response message types. + */ + +enum ypbind_resptype { + YPBIND_SUCC_VAL = 1, + YPBIND_FAIL_VAL = 2 +}; + +struct ypbind_binding { + opaque ypbind_binding_addr[4]; /* In network order */ + opaque ypbind_binding_port[2]; /* In network order */ +}; + +union ypbind_resp switch (ypbind_resptype ypbind_status) { +case YPBIND_FAIL_VAL: + unsigned ypbind_error; +case YPBIND_SUCC_VAL: + ypbind_binding ypbind_bindinfo; +}; + +/* Detailed failure reason codes for response field ypbind_error*/ + +const YPBIND_ERR_ERR = 1; /* Internal error */ +const YPBIND_ERR_NOSERV = 2; /* No bound server for passed domain */ +const YPBIND_ERR_RESC = 3; /* System resource allocation failure */ + + +/* + * Request data structure for ypbind "Set domain" procedure. + */ +struct ypbind_setdom { + domainname ypsetdom_domain; + ypbind_binding ypsetdom_binding; + unsigned ypsetdom_vers; +}; + + +/* + * YP access protocol + */ +program YPPROG { + version YPVERS { + void + YPPROC_NULL(void) = 0; + + bool + YPPROC_DOMAIN(domainname) = 1; + + bool + YPPROC_DOMAIN_NONACK(domainname) = 2; + + ypresp_val + YPPROC_MATCH(ypreq_key) = 3; + + ypresp_key_val + YPPROC_FIRST(ypreq_key) = 4; + + ypresp_key_val + YPPROC_NEXT(ypreq_key) = 5; + + ypresp_xfr + YPPROC_XFR(ypreq_xfr) = 6; + + void + YPPROC_CLEAR(void) = 7; + + ypresp_all + YPPROC_ALL(ypreq_nokey) = 8; + + ypresp_master + YPPROC_MASTER(ypreq_nokey) = 9; + + ypresp_order + YPPROC_ORDER(ypreq_nokey) = 10; + + ypresp_maplist + YPPROC_MAPLIST(domainname) = 11; + } = 2; +} = 100004; + + +/* + * YPPUSHPROC_XFRRESP is the callback routine for result of YPPROC_XFR + */ +program YPPUSH_XFRRESPPROG { + version YPPUSH_XFRRESPVERS { + void + YPPUSHPROC_NULL(void) = 0; + +#ifdef STUPID_SUN_BUG + /* This is the form as distributed by Sun. But even + the Sun NIS servers expect the values in the other + order. So their implementation somehow must change + the order internally. We don't want to follow this + bad example since the user should be able to use + rpcgen on this file. */ + yppushresp_xfr + YPPUSHPROC_XFRRESP(void) = 1; +#else + void + YPPUSHPROC_XFRRESP(yppushresp_xfr) = 1; +#endif + } = 1; +} = 0x40000000; /* transient: could be anything up to 0x5fffffff */ + +/* + * YP binding protocol + */ +program YPBINDPROG { + version YPBINDVERS { + void + YPBINDPROC_NULL(void) = 0; + + ypbind_resp + YPBINDPROC_DOMAIN(domainname) = 1; + + void + YPBINDPROC_SETDOM(ypbind_setdom) = 2; + } = 2; +} = 100007; -- cgit