Hold onto your hats folks, here it comes: the first stage of the
Secure RPC import I've been threatening. This step adds some necessary protocol definition files and headers to rpcsvc, including the ones needed for NIS+. Reviewed by: Mark Murray
This commit is contained in:
parent
0cc3916673
commit
3b0f74670a
@ -1,37 +1,33 @@
|
||||
# from: @(#)Makefile 2.3 88/08/11 4.0 RPCSRC
|
||||
# $Id: Makefile,v 1.2 1994/06/07 15:53:21 guido Exp $
|
||||
# $Id: Makefile,v 1.12 1996/08/30 22:36:45 peter Exp $
|
||||
|
||||
.SUFFIXES: .x
|
||||
|
||||
RPCCOM = rpcgen
|
||||
|
||||
HDRS= klm_prot.h mount.h nfs_prot.h nlm_prot.h rex.h rnusers.h\
|
||||
rquota.h rstat.h rwall.h sm_inter.h spray.h yppasswd.h yp.h
|
||||
XFILES= bootparam_prot.x klm_prot.x mount.x nfs_prot.x nlm_prot.x \
|
||||
HDRS= key_prot.h klm_prot.h mount.h nfs_prot.h nlm_prot.h rex.h rnusers.h \
|
||||
rquota.h rstat.h rwall.h sm_inter.h spray.h yppasswd.h yp.h \
|
||||
ypxfrd.h ypupdate_prot.h nis.h nis_cache.h nis_callback.h \
|
||||
bootparam_prot.h crypt.h
|
||||
XFILES= bootparam_prot.x key_prot.x klm_prot.x mount.x nfs_prot.x nlm_prot.x \
|
||||
rex.x rnusers.x rquota.x rstat.x rwall.x sm_inter.x spray.x \
|
||||
yppasswd.x yp.x
|
||||
HFILES= yp_prot.h ypclnt.h
|
||||
yppasswd.x yp.x ypxfrd.x ypupdate_prot.x nis.x nis_cache.x nis_object.x \
|
||||
nis_callback.x crypt.x
|
||||
HFILES= yp_prot.h ypclnt.h nis_db.h nis_tags.h nislib.h
|
||||
|
||||
CLEANFILES+= ${HDRS}
|
||||
|
||||
all: ${HDRS}
|
||||
|
||||
install: all
|
||||
@echo "Creating RPC service headers directory"
|
||||
@/bin/rm -rf ${DESTDIR}/usr/include/rpcsvc
|
||||
@-mkdir ${DESTDIR}/usr/include/rpcsvc
|
||||
@echo "Installing RPC service header and definition files"
|
||||
@for i in $(XFILES); do \
|
||||
(install -c -m 644 ${.CURDIR}/$$i ${DESTDIR}/usr/include/rpcsvc) done
|
||||
@for i in $(HDRS); do \
|
||||
(install ${COPY} -m 644 $$i ${DESTDIR}/usr/include/rpcsvc) done
|
||||
@for i in $(HFILES); do \
|
||||
(install -c -m 644 ${.CURDIR}/$$i ${DESTDIR}/usr/include/rpcsvc) done
|
||||
@chown -R ${BINOWN}.${BINGRP} ${DESTDIR}/usr/include/rpcsvc
|
||||
@chmod -R a-w ${DESTDIR}/usr/include/rpcsvc
|
||||
# ${INSTALL} -C -o ${BINOWN} -g ${BINGRP} -m 444 \
|
||||
beforeinstall:
|
||||
${INSTALL} -C -m 444 \
|
||||
${HFILES:S;^;${.CURDIR}/;} \
|
||||
${XFILES:S;^;${.CURDIR}/;} \
|
||||
${HDRS} \
|
||||
${DESTDIR}/usr/include/rpcsvc
|
||||
|
||||
.x.h:
|
||||
@echo generating $@...
|
||||
@CURPWD=`pwd` ; cd ${.CURDIR} ; ${RPCCOM} -h $*.x -o $$CURPWD/$@
|
||||
${RPCCOM} -h ${.IMPSRC} -o ${.TARGET}
|
||||
|
||||
.include <bsd.prog.mk>
|
||||
|
@ -41,12 +41,14 @@
|
||||
%#include <rpc/types.h>
|
||||
%#include <sys/time.h>
|
||||
%#include <sys/errno.h>
|
||||
%#include <nfs/nfs.h>
|
||||
%#include <sys/param.h>
|
||||
%#include <sys/syslimits.h>
|
||||
%#include <sys/ucred.h>
|
||||
#else
|
||||
%#ifndef lint
|
||||
%/*static char sccsid[] = "from: @(#)bootparam_prot.x 1.2 87/06/24 Copyr 1987 Sun Micro";*/
|
||||
%/*static char sccsid[] = "from: @(#)bootparam_prot.x 2.1 88/08/01 4.0 RPCSRC";*/
|
||||
%static char rcsid[] = "$Id: bootparam_prot.x,v 1.1 1993/09/14 17:42:42 jtc Exp $";
|
||||
%static char rcsid[] = "bootparam_prot.x,v 1.1 1994/08/04 19:01:44 wollman Exp";
|
||||
%#endif /* not lint */
|
||||
#endif
|
||||
|
||||
|
90
include/rpcsvc/crypt.x
Normal file
90
include/rpcsvc/crypt.x
Normal file
@ -0,0 +1,90 @@
|
||||
/*
|
||||
* Copyright (c) 1996
|
||||
* 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 Bill Paul 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$
|
||||
*/
|
||||
|
||||
#ifndef RPC_HDR
|
||||
%#ifndef lint
|
||||
%static const char rcsid[] = "$Id$";
|
||||
%#endif
|
||||
#endif
|
||||
|
||||
/*
|
||||
* This protocol definition exists because of the U.S. government and
|
||||
* its stupid export laws. We can't export DES code from the United
|
||||
* States to other countries (even though the code already exists
|
||||
* outside the U.S. -- go figure that one out) but we need to make
|
||||
* Secure RPC work. The normal way around this is to break the DES
|
||||
* code out into a shared library; we can then provide a dummy lib
|
||||
* in the base OS and provide the real lib in the secure dist, which
|
||||
* the user can install later. But we need Secure RPC for NIS+, and
|
||||
* there are several system programs that use NIS+ which are statically
|
||||
* linked. We would have to provide replacements for these programs
|
||||
* in the secure dist, but there are a lot, and this is a pain. The
|
||||
* shared lib trick won't work for these programs, and we can't change
|
||||
* them once they're compiled.
|
||||
*
|
||||
* One solution for this problem is to do the DES encryption as a system
|
||||
* call; no programs need to be changed and we can even supply the DES
|
||||
* support as an LKM. But this bloats the kernel. Maybe if we have
|
||||
* Secure NFS one day this will be worth it, but for now we should keep
|
||||
* this mess in user space.
|
||||
*
|
||||
* So we have this second solution: we provide a server that does the
|
||||
* DES encryption for us. In this case, the server is keyserv (we need
|
||||
* it to make Secure RPC work anyway) and we use this protocol to ship
|
||||
* the data back and forth between keyserv and the application.
|
||||
*/
|
||||
|
||||
enum des_dir { ENCRYPT_DES, DECRYPT_DES };
|
||||
enum des_mode { CBC_DES, ECB_DES };
|
||||
|
||||
struct desargs {
|
||||
u_char des_key[8]; /* key (with low bit parity) */
|
||||
des_dir des_dir; /* direction */
|
||||
des_mode des_mode; /* mode */
|
||||
u_char des_ivec[8]; /* input vector */
|
||||
opaque desbuf<>;
|
||||
};
|
||||
|
||||
struct desresp {
|
||||
opaque desbuf<>;
|
||||
u_char des_ivec[8];
|
||||
int stat;
|
||||
};
|
||||
|
||||
program CRYPT_PROG {
|
||||
version CRYPT_VERS {
|
||||
desresp
|
||||
DES_CRYPT(desargs) = 1;
|
||||
} = 1;
|
||||
} = 600100029;
|
284
include/rpcsvc/key_prot.x
Normal file
284
include/rpcsvc/key_prot.x
Normal file
@ -0,0 +1,284 @@
|
||||
%/*
|
||||
% * 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.
|
||||
% *
|
||||
% * 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
|
||||
% */
|
||||
/*
|
||||
* Key server protocol definition
|
||||
* Copyright (C) 1990, 1991 Sun Microsystems, Inc.
|
||||
*
|
||||
* The keyserver is a public key storage/encryption/decryption service
|
||||
* The encryption method used is based on the Diffie-Hellman exponential
|
||||
* key exchange technology.
|
||||
*
|
||||
* The key server is local to each machine, akin to the portmapper.
|
||||
* Under TI-RPC, communication with the keyserver is through the
|
||||
* loopback transport.
|
||||
*
|
||||
* NOTE: This .x file generates the USER level headers for the keyserver.
|
||||
* the KERNEL level headers are created by hand as they kernel has special
|
||||
* requirements.
|
||||
*/
|
||||
|
||||
%#pragma ident "@(#)key_prot.x 1.7 94/04/29 SMI"
|
||||
%
|
||||
%/* Copyright (c) 1990, 1991 Sun Microsystems, Inc. */
|
||||
%
|
||||
%/*
|
||||
% * Compiled from key_prot.x using rpcgen.
|
||||
% * DO NOT EDIT THIS FILE!
|
||||
% * This is NOT source code!
|
||||
% */
|
||||
|
||||
/*
|
||||
* PROOT and MODULUS define the way the Diffie-Hellman key is generated.
|
||||
*
|
||||
* MODULUS should be chosen as a prime of the form: MODULUS == 2*p + 1,
|
||||
* where p is also prime.
|
||||
*
|
||||
* PROOT satisfies the following two conditions:
|
||||
* (1) (PROOT ** 2) % MODULUS != 1
|
||||
* (2) (PROOT ** p) % MODULUS != 1
|
||||
*
|
||||
*/
|
||||
|
||||
const PROOT = 3;
|
||||
const HEXMODULUS = "d4a0ba0250b6fd2ec626e7efd637df76c716e22d0944b88b";
|
||||
|
||||
const HEXKEYBYTES = 48; /* HEXKEYBYTES == strlen(HEXMODULUS) */
|
||||
const KEYSIZE = 192; /* KEYSIZE == bit length of key */
|
||||
const KEYBYTES = 24; /* byte length of key */
|
||||
|
||||
/*
|
||||
* The first 16 hex digits of the encrypted secret key are used as
|
||||
* a checksum in the database.
|
||||
*/
|
||||
const KEYCHECKSUMSIZE = 16;
|
||||
|
||||
/*
|
||||
* status of operation
|
||||
*/
|
||||
enum keystatus {
|
||||
KEY_SUCCESS, /* no problems */
|
||||
KEY_NOSECRET, /* no secret key stored */
|
||||
KEY_UNKNOWN, /* unknown netname */
|
||||
KEY_SYSTEMERR /* system error (out of memory, encryption failure) */
|
||||
};
|
||||
|
||||
typedef opaque keybuf[HEXKEYBYTES]; /* store key in hex */
|
||||
|
||||
typedef string netnamestr<MAXNETNAMELEN>;
|
||||
|
||||
/*
|
||||
* Argument to ENCRYPT or DECRYPT
|
||||
*/
|
||||
struct cryptkeyarg {
|
||||
netnamestr remotename;
|
||||
des_block deskey;
|
||||
};
|
||||
|
||||
/*
|
||||
* Argument to ENCRYPT_PK or DECRYPT_PK
|
||||
*/
|
||||
struct cryptkeyarg2 {
|
||||
netnamestr remotename;
|
||||
netobj remotekey; /* Contains a length up to 1024 bytes */
|
||||
des_block deskey;
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
* Result of ENCRYPT, DECRYPT, ENCRYPT_PK, and DECRYPT_PK
|
||||
*/
|
||||
union cryptkeyres switch (keystatus status) {
|
||||
case KEY_SUCCESS:
|
||||
des_block deskey;
|
||||
default:
|
||||
void;
|
||||
};
|
||||
|
||||
const MAXGIDS = 16; /* max number of gids in gid list */
|
||||
|
||||
/*
|
||||
* Unix credential
|
||||
*/
|
||||
struct unixcred {
|
||||
u_int uid;
|
||||
u_int gid;
|
||||
u_int gids<MAXGIDS>;
|
||||
};
|
||||
|
||||
/*
|
||||
* Result returned from GETCRED
|
||||
*/
|
||||
union getcredres switch (keystatus status) {
|
||||
case KEY_SUCCESS:
|
||||
unixcred cred;
|
||||
default:
|
||||
void;
|
||||
};
|
||||
/*
|
||||
* key_netstarg;
|
||||
*/
|
||||
|
||||
struct key_netstarg {
|
||||
keybuf st_priv_key;
|
||||
keybuf st_pub_key;
|
||||
netnamestr st_netname;
|
||||
};
|
||||
|
||||
union key_netstres switch (keystatus status){
|
||||
case KEY_SUCCESS:
|
||||
key_netstarg knet;
|
||||
default:
|
||||
void;
|
||||
};
|
||||
|
||||
#ifdef RPC_HDR
|
||||
%
|
||||
%#ifndef opaque
|
||||
%#define opaque char
|
||||
%#endif
|
||||
%
|
||||
#endif
|
||||
program KEY_PROG {
|
||||
version KEY_VERS {
|
||||
|
||||
/*
|
||||
* This is my secret key.
|
||||
* Store it for me.
|
||||
*/
|
||||
keystatus
|
||||
KEY_SET(keybuf) = 1;
|
||||
|
||||
/*
|
||||
* I want to talk to X.
|
||||
* Encrypt a conversation key for me.
|
||||
*/
|
||||
cryptkeyres
|
||||
KEY_ENCRYPT(cryptkeyarg) = 2;
|
||||
|
||||
/*
|
||||
* X just sent me a message.
|
||||
* Decrypt the conversation key for me.
|
||||
*/
|
||||
cryptkeyres
|
||||
KEY_DECRYPT(cryptkeyarg) = 3;
|
||||
|
||||
/*
|
||||
* Generate a secure conversation key for me
|
||||
*/
|
||||
des_block
|
||||
KEY_GEN(void) = 4;
|
||||
|
||||
/*
|
||||
* Get me the uid, gid and group-access-list associated
|
||||
* with this netname (for kernel which cannot use NIS)
|
||||
*/
|
||||
getcredres
|
||||
KEY_GETCRED(netnamestr) = 5;
|
||||
} = 1;
|
||||
version KEY_VERS2 {
|
||||
|
||||
/*
|
||||
* #######
|
||||
* Procedures 1-5 are identical to version 1
|
||||
* #######
|
||||
*/
|
||||
|
||||
/*
|
||||
* This is my secret key.
|
||||
* Store it for me.
|
||||
*/
|
||||
keystatus
|
||||
KEY_SET(keybuf) = 1;
|
||||
|
||||
/*
|
||||
* I want to talk to X.
|
||||
* Encrypt a conversation key for me.
|
||||
*/
|
||||
cryptkeyres
|
||||
KEY_ENCRYPT(cryptkeyarg) = 2;
|
||||
|
||||
/*
|
||||
* X just sent me a message.
|
||||
* Decrypt the conversation key for me.
|
||||
*/
|
||||
cryptkeyres
|
||||
KEY_DECRYPT(cryptkeyarg) = 3;
|
||||
|
||||
/*
|
||||
* Generate a secure conversation key for me
|
||||
*/
|
||||
des_block
|
||||
KEY_GEN(void) = 4;
|
||||
|
||||
/*
|
||||
* Get me the uid, gid and group-access-list associated
|
||||
* with this netname (for kernel which cannot use NIS)
|
||||
*/
|
||||
getcredres
|
||||
KEY_GETCRED(netnamestr) = 5;
|
||||
|
||||
/*
|
||||
* I want to talk to X. and I know X's public key
|
||||
* Encrypt a conversation key for me.
|
||||
*/
|
||||
cryptkeyres
|
||||
KEY_ENCRYPT_PK(cryptkeyarg2) = 6;
|
||||
|
||||
/*
|
||||
* X just sent me a message. and I know X's public key
|
||||
* Decrypt the conversation key for me.
|
||||
*/
|
||||
cryptkeyres
|
||||
KEY_DECRYPT_PK(cryptkeyarg2) = 7;
|
||||
|
||||
/*
|
||||
* Store my public key, netname and private key.
|
||||
*/
|
||||
keystatus
|
||||
KEY_NET_PUT(key_netstarg) = 8;
|
||||
|
||||
/*
|
||||
* Retrieve my public key, netname and private key.
|
||||
*/
|
||||
key_netstres
|
||||
KEY_NET_GET(void) = 9;
|
||||
|
||||
/*
|
||||
* Return me the conversation key that is constructed
|
||||
* from my secret key and this publickey.
|
||||
*/
|
||||
|
||||
cryptkeyres
|
||||
KEY_GET_CONV(keybuf) = 10;
|
||||
|
||||
|
||||
} = 2;
|
||||
} = 100029;
|
||||
|
||||
|
@ -40,7 +40,7 @@
|
||||
%#ifndef lint
|
||||
%/*static char sccsid[] = "from: @(#)klm_prot.x 1.7 87/07/08 Copyr 1987 Sun Micro";*/
|
||||
%/*static char sccsid[] = "from: @(#)klm_prot.x 2.1 88/08/01 4.0 RPCSRC";*/
|
||||
%static char rcsid[] = "$Id: klm_prot.x,v 1.1 1993/09/14 17:42:42 jtc Exp $";
|
||||
%static char rcsid[] = "$Id: klm_prot.x,v 1.1 1994/08/04 19:01:45 wollman Exp $";
|
||||
%#endif /* not lint */
|
||||
#endif
|
||||
|
||||
|
@ -35,13 +35,16 @@
|
||||
%#ifndef lint
|
||||
%/*static char sccsid[] = "from: @(#)mount.x 1.2 87/09/18 Copyr 1987 Sun Micro";*/
|
||||
%/*static char sccsid[] = "from: @(#)mount.x 2.1 88/08/01 4.0 RPCSRC";*/
|
||||
%static char rcsid[] = "$Id: mount.x,v 1.1 1993/09/14 17:42:43 jtc Exp $";
|
||||
%static char rcsid[] = "$Id: mount.x,v 1.4 1997/04/18 12:31:26 dfr Exp $";
|
||||
%#endif /* not lint */
|
||||
#endif
|
||||
|
||||
const MNTPATHLEN = 1024; /* maximum bytes in a pathname argument */
|
||||
const MNTNAMLEN = 255; /* maximum bytes in a name argument */
|
||||
const FHSIZE = 32; /* size in bytes of a file handle */
|
||||
#ifdef WANT_NFS3
|
||||
const FHSIZE3 = 64; /* size in bytes of a file handle (v3) */
|
||||
#endif
|
||||
|
||||
/*
|
||||
* The fhandle is the file handle that the server passes to the client.
|
||||
@ -50,6 +53,9 @@ const FHSIZE = 32; /* size in bytes of a file handle */
|
||||
* server needs to distinguish an individual file.
|
||||
*/
|
||||
typedef opaque fhandle[FHSIZE];
|
||||
#ifdef WANT_NFS3
|
||||
typedef opaque fhandle3<FHSIZE3>;
|
||||
#endif
|
||||
|
||||
/*
|
||||
* If a status of zero is returned, the call completed successfully, and
|
||||
@ -63,6 +69,36 @@ default:
|
||||
void;
|
||||
};
|
||||
|
||||
#ifdef WANT_NFS3
|
||||
/*
|
||||
* Status codes returned by the version 3 mount call.
|
||||
*/
|
||||
enum mountstat3 {
|
||||
MNT3_OK = 0, /* no error */
|
||||
MNT3ERR_PERM = 1, /* Not owner */
|
||||
MNT3ERR_NOENT = 2, /* No such file or directory */
|
||||
MNT3ERR_IO = 5, /* I/O error */
|
||||
MNT3ERR_ACCES = 13, /* Permission denied */
|
||||
MNT3ERR_NOTDIR = 20, /* Not a directory */
|
||||
MNT3ERR_INVAL = 22, /* Invalid argument */
|
||||
MNT3ERR_NAMETOOLONG = 63, /* Filename too long */
|
||||
MNT3ERR_NOTSUPP = 10004, /* Operation not supported */
|
||||
MNT3ERR_SERVERFAULT = 10006 /* A failure on the server */
|
||||
};
|
||||
|
||||
struct mountres3_ok {
|
||||
fhandle3 fhandle;
|
||||
int auth_flavors<>;
|
||||
};
|
||||
|
||||
union mountres3 switch (mountstat3 fhs_status) {
|
||||
case 0:
|
||||
mountres3_ok mountinfo;
|
||||
default:
|
||||
void;
|
||||
};
|
||||
#endif
|
||||
|
||||
/*
|
||||
* The type dirpath is the pathname of a directory
|
||||
*/
|
||||
@ -105,8 +141,10 @@ struct exportnode {
|
||||
program MOUNTPROG {
|
||||
/*
|
||||
* Version one of the mount protocol communicates with version two
|
||||
* of the NFS protocol. The only connecting point is the fhandle
|
||||
* structure, which is the same for both protocols.
|
||||
* of the NFS protocol. Version three communicates with
|
||||
* version three of the NFS protocol. The only connecting
|
||||
* point is the fhandle structure, which is the same for both
|
||||
* protocols.
|
||||
*/
|
||||
version MOUNTVERS {
|
||||
/*
|
||||
@ -162,4 +200,57 @@ program MOUNTPROG {
|
||||
exports
|
||||
MOUNTPROC_EXPORTALL(void) = 6;
|
||||
} = 1;
|
||||
#ifdef WANT_NFS3
|
||||
version MOUNTVERS3 {
|
||||
/*
|
||||
* Does no work. It is made available in all RPC services
|
||||
* to allow server reponse testing and timing
|
||||
*/
|
||||
void
|
||||
MOUNTPROC_NULL(void) = 0;
|
||||
|
||||
/*
|
||||
* If mountres3.fhs_status is MNT3_OK, then
|
||||
* mountres3.mountinfo contains the file handle for
|
||||
* the directory and a list of acceptable
|
||||
* authentication flavors. This file handle may only
|
||||
* be used in the NFS version 3 protocol. This
|
||||
* procedure also results in the server adding a new
|
||||
* entry to its mount list recording that this client
|
||||
* has mounted the directory. AUTH_UNIX authentication
|
||||
* or better is required.
|
||||
*/
|
||||
mountres3
|
||||
MOUNTPROC_MNT(dirpath) = 1;
|
||||
|
||||
/*
|
||||
* Returns the list of remotely mounted filesystems. The
|
||||
* mountlist contains one entry for each hostname and
|
||||
* directory pair.
|
||||
*/
|
||||
mountlist
|
||||
MOUNTPROC_DUMP(void) = 2;
|
||||
|
||||
/*
|
||||
* Removes the mount list entry for the directory
|
||||
* Unix authentication required.
|
||||
*/
|
||||
void
|
||||
MOUNTPROC_UMNT(dirpath) = 3;
|
||||
|
||||
/*
|
||||
* Removes all of the mount list entries for this client
|
||||
* Unix authentication required.
|
||||
*/
|
||||
void
|
||||
MOUNTPROC_UMNTALL(void) = 4;
|
||||
|
||||
/*
|
||||
* Returns a list of all the exported filesystems, and which
|
||||
* machines are allowed to import it.
|
||||
*/
|
||||
exports
|
||||
MOUNTPROC_EXPORT(void) = 5;
|
||||
} = 3;
|
||||
#endif
|
||||
} = 100005;
|
||||
|
@ -31,7 +31,7 @@
|
||||
%#ifndef lint
|
||||
%/*static char sccsid[] = "from: @(#)nfs_prot.x 1.2 87/10/12 Copyr 1987 Sun Micro";*/
|
||||
%/*static char sccsid[] = "from: @(#)nfs_prot.x 2.1 88/08/01 4.0 RPCSRC";*/
|
||||
%static char rcsid[] = "$Id: nfs_prot.x,v 1.1 1993/09/14 17:42:44 jtc Exp $";
|
||||
%static char rcsid[] = "$Id: nfs_prot.x,v 1.4 1997/04/18 12:31:27 dfr Exp $";
|
||||
%#endif /* not lint */
|
||||
#endif
|
||||
|
||||
@ -294,6 +294,842 @@ default:
|
||||
void;
|
||||
};
|
||||
|
||||
#ifdef WANT_NFS3
|
||||
|
||||
/*
|
||||
* NFSv3 constants and types
|
||||
*/
|
||||
const NFS3_FHSIZE = 64; /* maximum size in bytes of a file handle */
|
||||
const NFS3_COOKIEVERFSIZE = 8; /* size of a cookie verifier for READDIR */
|
||||
const NFS3_CREATEVERFSIZE = 8; /* size of the verifier used for CREATE */
|
||||
const NFS3_WRITEVERFSIZE = 8; /* size of the verifier used for WRITE */
|
||||
|
||||
typedef unsigned hyper uint64;
|
||||
typedef hyper int64;
|
||||
typedef unsigned long uint32;
|
||||
typedef long int32;
|
||||
typedef string filename3<>;
|
||||
typedef string nfspath3<>;
|
||||
typedef uint64 fileid3;
|
||||
typedef uint64 cookie3;
|
||||
typedef opaque cookieverf3[NFS3_COOKIEVERFSIZE];
|
||||
typedef opaque createverf3[NFS3_CREATEVERFSIZE];
|
||||
typedef opaque writeverf3[NFS3_WRITEVERFSIZE];
|
||||
typedef uint32 uid3;
|
||||
typedef uint32 gid3;
|
||||
typedef uint64 size3;
|
||||
typedef uint64 offset3;
|
||||
typedef uint32 mode3;
|
||||
typedef uint32 count3;
|
||||
|
||||
/*
|
||||
* Error status (v3)
|
||||
*/
|
||||
enum nfsstat3 {
|
||||
NFS3_OK = 0,
|
||||
NFS3ERR_PERM = 1,
|
||||
NFS3ERR_NOENT = 2,
|
||||
NFS3ERR_IO = 5,
|
||||
NFS3ERR_NXIO = 6,
|
||||
NFS3ERR_ACCES = 13,
|
||||
NFS3ERR_EXIST = 17,
|
||||
NFS3ERR_XDEV = 18,
|
||||
NFS3ERR_NODEV = 19,
|
||||
NFS3ERR_NOTDIR = 20,
|
||||
NFS3ERR_ISDIR = 21,
|
||||
NFS3ERR_INVAL = 22,
|
||||
NFS3ERR_FBIG = 27,
|
||||
NFS3ERR_NOSPC = 28,
|
||||
NFS3ERR_ROFS = 30,
|
||||
NFS3ERR_MLINK = 31,
|
||||
NFS3ERR_NAMETOOLONG = 63,
|
||||
NFS3ERR_NOTEMPTY = 66,
|
||||
NFS3ERR_DQUOT = 69,
|
||||
NFS3ERR_STALE = 70,
|
||||
NFS3ERR_REMOTE = 71,
|
||||
NFS3ERR_BADHANDLE = 10001,
|
||||
NFS3ERR_NOT_SYNC = 10002,
|
||||
NFS3ERR_BAD_COOKIE = 10003,
|
||||
NFS3ERR_NOTSUPP = 10004,
|
||||
NFS3ERR_TOOSMALL = 10005,
|
||||
NFS3ERR_SERVERFAULT = 10006,
|
||||
NFS3ERR_BADTYPE = 10007,
|
||||
NFS3ERR_JUKEBOX = 10008
|
||||
};
|
||||
|
||||
/*
|
||||
* File types (v3)
|
||||
*/
|
||||
enum ftype3 {
|
||||
NF3REG = 1, /* regular file */
|
||||
NF3DIR = 2, /* directory */
|
||||
NF3BLK = 3, /* block special */
|
||||
NF3CHR = 4, /* character special */
|
||||
NF3LNK = 5, /* symbolic link */
|
||||
NF3SOCK = 6, /* unix domain sockets */
|
||||
NF3FIFO = 7 /* named pipe */
|
||||
};
|
||||
|
||||
struct specdata3 {
|
||||
uint32 specdata1;
|
||||
uint32 specdata2;
|
||||
};
|
||||
|
||||
/*
|
||||
* File access handle (v3)
|
||||
*/
|
||||
struct nfs_fh3 {
|
||||
opaque data<NFS3_FHSIZE>;
|
||||
};
|
||||
|
||||
/*
|
||||
* Timeval (v3)
|
||||
*/
|
||||
struct nfstime3 {
|
||||
uint32 seconds;
|
||||
uint32 nseconds;
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
* File attributes (v3)
|
||||
*/
|
||||
struct fattr3 {
|
||||
ftype3 type; /* file type */
|
||||
mode3 mode; /* protection mode bits */
|
||||
uint32 nlink; /* # hard links */
|
||||
uid3 uid; /* owner user id */
|
||||
gid3 gid; /* owner group id */
|
||||
size3 size; /* file size in bytes */
|
||||
size3 used; /* prefered block size */
|
||||
specdata3 rdev; /* special device # */
|
||||
uint64 fsid; /* device # */
|
||||
fileid3 fileid; /* inode # */
|
||||
nfstime3 atime; /* time of last access */
|
||||
nfstime3 mtime; /* time of last modification */
|
||||
nfstime3 ctime; /* time of last change */
|
||||
};
|
||||
|
||||
union post_op_attr switch (bool attributes_follow) {
|
||||
case TRUE:
|
||||
fattr3 attributes;
|
||||
case FALSE:
|
||||
void;
|
||||
};
|
||||
|
||||
struct wcc_attr {
|
||||
size3 size;
|
||||
nfstime3 mtime;
|
||||
nfstime3 ctime;
|
||||
};
|
||||
|
||||
union pre_op_attr switch (bool attributes_follow) {
|
||||
case TRUE:
|
||||
wcc_attr attributes;
|
||||
case FALSE:
|
||||
void;
|
||||
};
|
||||
|
||||
struct wcc_data {
|
||||
pre_op_attr before;
|
||||
post_op_attr after;
|
||||
};
|
||||
|
||||
union post_op_fh3 switch (bool handle_follows) {
|
||||
case TRUE:
|
||||
nfs_fh3 handle;
|
||||
case FALSE:
|
||||
void;
|
||||
};
|
||||
|
||||
/*
|
||||
* File attributes which can be set (v3)
|
||||
*/
|
||||
enum time_how {
|
||||
DONT_CHANGE = 0,
|
||||
SET_TO_SERVER_TIME = 1,
|
||||
SET_TO_CLIENT_TIME = 2
|
||||
};
|
||||
|
||||
union set_mode3 switch (bool set_it) {
|
||||
case TRUE:
|
||||
mode3 mode;
|
||||
default:
|
||||
void;
|
||||
};
|
||||
|
||||
union set_uid3 switch (bool set_it) {
|
||||
case TRUE:
|
||||
uid3 mode;
|
||||
default:
|
||||
void;
|
||||
};
|
||||
|
||||
union set_gid3 switch (bool set_it) {
|
||||
case TRUE:
|
||||
gid3 mode;
|
||||
default:
|
||||
void;
|
||||
};
|
||||
|
||||
union set_size3 switch (bool set_it) {
|
||||
case TRUE:
|
||||
size3 mode;
|
||||
default:
|
||||
void;
|
||||
};
|
||||
|
||||
union set_atime switch (time_how set_it) {
|
||||
case SET_TO_CLIENT_TIME:
|
||||
atime mode;
|
||||
default:
|
||||
void;
|
||||
};
|
||||
|
||||
union set_mtime switch (time_how set_it) {
|
||||
case SET_TO_CLIENT_TIME:
|
||||
mtime mode;
|
||||
default:
|
||||
void;
|
||||
};
|
||||
|
||||
struct sattr3 {
|
||||
set_mode3 mode;
|
||||
set_uid3 uid;
|
||||
set_gid3 gid;
|
||||
set_size3 size;
|
||||
set_atime atime;
|
||||
set_mtime mtime;
|
||||
};
|
||||
|
||||
/*
|
||||
* Arguments for directory operations (v3)
|
||||
*/
|
||||
struct diropargs3 {
|
||||
nfs_fh3 dir; /* directory file handle */
|
||||
filename3 name; /* name (up to NFS_MAXNAMLEN bytes) */
|
||||
};
|
||||
|
||||
/*
|
||||
* Arguments to getattr (v3).
|
||||
*/
|
||||
struct GETATTR3args {
|
||||
nfs_fh3 object;
|
||||
};
|
||||
|
||||
struct GETATTR3resok {
|
||||
fattr3 obj_attributes;
|
||||
};
|
||||
|
||||
union GETATTR3res switch (nfsstat3 status) {
|
||||
case NFS3_OK:
|
||||
GETATTR3resok resok;
|
||||
default:
|
||||
void;
|
||||
};
|
||||
|
||||
/*
|
||||
* Arguments to setattr (v3).
|
||||
*/
|
||||
union sattrguard3 switch (bool check) {
|
||||
case TRUE:
|
||||
nfstime3 obj_ctime;
|
||||
case FALSE:
|
||||
void;
|
||||
};
|
||||
|
||||
struct SETATTR3args {
|
||||
nfs_fh3 object;
|
||||
sattr3 new_attributes;
|
||||
sattrguard3 guard;
|
||||
};
|
||||
|
||||
struct SETATTR3resok {
|
||||
wcc_data obj_wcc;
|
||||
};
|
||||
|
||||
struct SETATTR3resfail {
|
||||
wcc_data obj_wcc;
|
||||
};
|
||||
|
||||
union SETATTR3res switch (nfsstat3 status) {
|
||||
case NFS3_OK:
|
||||
SETATTR3resok resok;
|
||||
default:
|
||||
SETATTR3resfail resfail;
|
||||
};
|
||||
|
||||
/*
|
||||
* Arguments to lookup (v3).
|
||||
*/
|
||||
struct LOOKUP3args {
|
||||
diropargs3 what;
|
||||
};
|
||||
|
||||
struct LOOKUP3resok {
|
||||
nfs_fh3 object;
|
||||
post_op_attr obj_attributes;
|
||||
post_op_attr dir_attributes;
|
||||
};
|
||||
|
||||
struct LOOKUP3resfail {
|
||||
post_op_attr dir_attributes;
|
||||
};
|
||||
|
||||
union LOOKUP3res switch (nfsstat3 status) {
|
||||
case NFS3_OK:
|
||||
LOOKUP3resok resok;
|
||||
default:
|
||||
LOOKUP3resfail resfail;
|
||||
};
|
||||
|
||||
/*
|
||||
* Arguments to access (v3).
|
||||
*/
|
||||
const ACCESS3_READ = 0x0001;
|
||||
const ACCESS3_LOOKUP = 0x0002;
|
||||
const ACCESS3_MODIFY = 0x0004;
|
||||
const ACCESS3_EXTEND = 0x0008;
|
||||
const ACCESS3_DELETE = 0x0010;
|
||||
const ACCESS3_EXECUTE = 0x0020;
|
||||
|
||||
struct ACCESS3args {
|
||||
nfs_fh3 object;
|
||||
uint32 access;
|
||||
};
|
||||
|
||||
struct ACCESS3resok {
|
||||
post_op_attr obj_attributes;
|
||||
uint32 access;
|
||||
};
|
||||
|
||||
struct ACCESS3resfail {
|
||||
post_op_attr obj_attributes;
|
||||
};
|
||||
|
||||
union ACCESS3res switch (nfsstat3 status) {
|
||||
case NFS3_OK:
|
||||
ACCESS3resok resok;
|
||||
default:
|
||||
ACCESS3resfail resfail;
|
||||
};
|
||||
|
||||
/*
|
||||
* Arguments to readlink (v3).
|
||||
*/
|
||||
struct READLINK3args {
|
||||
nfs_fh3 symlink;
|
||||
};
|
||||
|
||||
struct READLINK3resok {
|
||||
post_op_attr symlink_attributes;
|
||||
nfspath3 data;
|
||||
};
|
||||
|
||||
struct READLINK3resfail {
|
||||
post_op_attr symlink_attributes;
|
||||
};
|
||||
|
||||
union READLINK3res switch (nfsstat3 status) {
|
||||
case NFS3_OK:
|
||||
READLINK3resok resok;
|
||||
default:
|
||||
READLINK3resfail resfail;
|
||||
};
|
||||
|
||||
/*
|
||||
* Arguments to read (v3).
|
||||
*/
|
||||
struct READ3args {
|
||||
nfs_fh3 file;
|
||||
offset3 offset;
|
||||
count3 count;
|
||||
};
|
||||
|
||||
struct READ3resok {
|
||||
post_op_attr file_attributes;
|
||||
count3 count;
|
||||
bool eof;
|
||||
opaque data<>;
|
||||
};
|
||||
|
||||
struct READ3resfail {
|
||||
post_op_attr file_attributes;
|
||||
};
|
||||
|
||||
union READ3res switch (nfsstat3 status) {
|
||||
case NFS3_OK:
|
||||
READ3resok resok;
|
||||
default:
|
||||
READ3resfail resfail;
|
||||
};
|
||||
|
||||
/*
|
||||
* Arguments to write (v3).
|
||||
*/
|
||||
enum stable_how {
|
||||
UNSTABLE = 0,
|
||||
DATA_SYNC = 1,
|
||||
FILE_SYNC = 2
|
||||
};
|
||||
|
||||
struct WRITE3args {
|
||||
nfs_fh3 file;
|
||||
offset3 offset;
|
||||
count3 count;
|
||||
stable_how stable;
|
||||
opaque data<>;
|
||||
};
|
||||
|
||||
struct WRITE3resok {
|
||||
wcc_data file_wcc;
|
||||
count3 count;
|
||||
stable_how comitted;
|
||||
writeverf3 verf;
|
||||
};
|
||||
|
||||
struct WRITE3resfail {
|
||||
wcc_data file_wcc;
|
||||
};
|
||||
|
||||
union WRITE3res switch (nfsstat3 status) {
|
||||
case NFS3_OK:
|
||||
WRITE3resok resok;
|
||||
default:
|
||||
WRITE3resfail resfail;
|
||||
};
|
||||
|
||||
/*
|
||||
* Arguments to create (v3).
|
||||
*/
|
||||
enum createmode3 {
|
||||
UNCHECKED = 0,
|
||||
GUARDED = 1,
|
||||
EXCLUSIVE = 2
|
||||
};
|
||||
|
||||
union createhow3 switch (createmode3 mode) {
|
||||
case UNCHECKED:
|
||||
case GUARDED:
|
||||
sattr3 obj_attributes;
|
||||
case EXCLUSIVE:
|
||||
createverf3 verf;
|
||||
};
|
||||
|
||||
struct CREATE3args {
|
||||
diropargs3 where;
|
||||
createhow3 how;
|
||||
};
|
||||
|
||||
struct CREATE3resok {
|
||||
post_op_fh3 obj;
|
||||
post_op_attr obj_attributes;
|
||||
wcc_data dir_wcc;
|
||||
};
|
||||
|
||||
struct CREATE3resfail {
|
||||
wcc_data dir_wcc;
|
||||
};
|
||||
|
||||
union CREATE3res switch (nfsstat3 status) {
|
||||
case NFS3_OK:
|
||||
CREATE3resok resok;
|
||||
default:
|
||||
CREATE3resfail resfail;
|
||||
};
|
||||
|
||||
/*
|
||||
* Arguments to mkdir (v3).
|
||||
*/
|
||||
struct MKDIR3args {
|
||||
diropargs3 where;
|
||||
sattr3 attributes;
|
||||
};
|
||||
|
||||
struct MKDIR3resok {
|
||||
post_op_fh3 obj;
|
||||
post_op_attr obj_attributes;
|
||||
wcc_data dir_wcc;
|
||||
};
|
||||
|
||||
struct MKDIR3resfail {
|
||||
wcc_data dir_wcc;
|
||||
};
|
||||
|
||||
union MKDIR3res switch (nfsstat3 status) {
|
||||
case NFS3_OK:
|
||||
MKDIR3resok resok;
|
||||
default:
|
||||
MKDIR3resfail resfail;
|
||||
};
|
||||
|
||||
/*
|
||||
* Arguments to symlink (v3).
|
||||
*/
|
||||
struct symlinkdata3 {
|
||||
sattr3 symlink_attributes;
|
||||
nfspath3 symlink_data;
|
||||
};
|
||||
|
||||
struct SYMLINK3args {
|
||||
diropargs3 where;
|
||||
symlinkdata3 symlink;
|
||||
};
|
||||
|
||||
struct SYMLINK3resok {
|
||||
post_op_fh3 obj;
|
||||
post_op_attr obj_attributes;
|
||||
wcc_data dir_wcc;
|
||||
};
|
||||
|
||||
struct SYMLINK3resfail {
|
||||
wcc_data dir_wcc;
|
||||
};
|
||||
|
||||
union SYMLINK3res switch (nfsstat3 status) {
|
||||
case NFS3_OK:
|
||||
SYMLINK3resok resok;
|
||||
default:
|
||||
SYMLINK3resfail resfail;
|
||||
};
|
||||
|
||||
/*
|
||||
* Arguments to mknod (v3).
|
||||
*/
|
||||
struct devicedata3 {
|
||||
sattr3 dev_attributes;
|
||||
specdata3 spec;
|
||||
};
|
||||
|
||||
union mknoddata3 switch (ftype3 type) {
|
||||
case NF3CHR:
|
||||
case NF3BLK:
|
||||
devicedata3 device;
|
||||
case NF3SOCK:
|
||||
case NF3FIFO:
|
||||
sattr3 pipe_attributes;
|
||||
default:
|
||||
void;
|
||||
};
|
||||
|
||||
struct MKNOD3args {
|
||||
diropargs3 where;
|
||||
mknoddata3 what;
|
||||
};
|
||||
|
||||
struct MKNOD3resok {
|
||||
post_op_fh3 obj;
|
||||
post_op_attr obj_attributes;
|
||||
wcc_data dir_wcc;
|
||||
};
|
||||
|
||||
struct MKNOD3resfail {
|
||||
wcc_data dir_wcc;
|
||||
};
|
||||
|
||||
union MKNOD3res switch (nfsstat3 status) {
|
||||
case NFS3_OK:
|
||||
MKNOD3resok resok;
|
||||
default:
|
||||
MKNOD3resfail resfail;
|
||||
};
|
||||
|
||||
/*
|
||||
* Arguments to remove (v3).
|
||||
*/
|
||||
struct REMOVE3args {
|
||||
diropargs3 object;
|
||||
};
|
||||
|
||||
struct REMOVE3resok {
|
||||
wcc_data dir_wcc;
|
||||
};
|
||||
|
||||
struct REMOVE3resfail {
|
||||
wcc_data dir_wcc;
|
||||
};
|
||||
|
||||
union REMOVE3res switch (nfsstat3 status) {
|
||||
case NFS3_OK:
|
||||
REMOVE3resok resok;
|
||||
default:
|
||||
REMOVE3resfail resfail;
|
||||
};
|
||||
|
||||
/*
|
||||
* Arguments to rmdir (v3).
|
||||
*/
|
||||
struct RMDIR3args {
|
||||
diropargs3 object;
|
||||
};
|
||||
|
||||
struct RMDIR3resok {
|
||||
wcc_data dir_wcc;
|
||||
};
|
||||
|
||||
struct RMDIR3resfail {
|
||||
wcc_data dir_wcc;
|
||||
};
|
||||
|
||||
union RMDIR3res switch (nfsstat3 status) {
|
||||
case NFS3_OK:
|
||||
RMDIR3resok resok;
|
||||
default:
|
||||
RMDIR3resfail resfail;
|
||||
};
|
||||
|
||||
/*
|
||||
* Arguments to rename (v3).
|
||||
*/
|
||||
struct RENAME3args {
|
||||
diropargs3 from;
|
||||
diropargs3 to;
|
||||
};
|
||||
|
||||
struct RENAME3resok {
|
||||
wcc_data fromdir_wcc;
|
||||
wcc_data todir_wcc;
|
||||
};
|
||||
|
||||
struct RENAME3resfail {
|
||||
wcc_data fromdir_wcc;
|
||||
wcc_data todir_wcc;
|
||||
};
|
||||
|
||||
union RENAME3res switch (nfsstat3 status) {
|
||||
case NFS3_OK:
|
||||
RENAME3resok resok;
|
||||
default:
|
||||
RENAME3resfail resfail;
|
||||
};
|
||||
|
||||
/*
|
||||
* Arguments to link (v3).
|
||||
*/
|
||||
struct LINK3args {
|
||||
nfs_fh3 file;
|
||||
diropargs3 link;
|
||||
};
|
||||
|
||||
struct LINK3resok {
|
||||
post_op_attr file_attributes;
|
||||
wcc_data linkdir_wcc;
|
||||
};
|
||||
|
||||
struct LINK3resfail {
|
||||
post_op_attr file_attributes;
|
||||
wcc_data linkdir_wcc;
|
||||
};
|
||||
|
||||
union LINK3res switch (nfsstat3 status) {
|
||||
case NFS3_OK:
|
||||
LINK3resok resok;
|
||||
default:
|
||||
LINK3resfail resfail;
|
||||
};
|
||||
|
||||
/*
|
||||
* Arguments to readdir (v3).
|
||||
*/
|
||||
struct READDIR3args {
|
||||
nfs_fh3 dir;
|
||||
cookie3 cookie;
|
||||
cookieverf3 cookieverf;
|
||||
count3 count;
|
||||
};
|
||||
|
||||
struct entry3 {
|
||||
fileid3 fileid;
|
||||
filename3 name;
|
||||
cookie3 cookie;
|
||||
entry3 *nextentry;
|
||||
};
|
||||
|
||||
struct dirlist3 {
|
||||
entry3 *entries;
|
||||
bool eof;
|
||||
};
|
||||
|
||||
struct READDIR3resok {
|
||||
post_op_attr dir_attributes;
|
||||
cookieverf3 cookieverf;
|
||||
dirlist3 reply;
|
||||
};
|
||||
|
||||
struct READDIR3resfail {
|
||||
post_op_attr dir_attributes;
|
||||
};
|
||||
|
||||
union READDIR3res switch (nfsstat3 status) {
|
||||
case NFS3_OK:
|
||||
READDIR3resok resok;
|
||||
default:
|
||||
READDIR3resfail resfail;
|
||||
};
|
||||
|
||||
/*
|
||||
* Arguments to readdirplus (v3).
|
||||
*/
|
||||
struct READDIRPLUS3args {
|
||||
nfs_fh3 dir;
|
||||
cookie3 cookie;
|
||||
cookieverf3 cookieverf;
|
||||
count3 dircount;
|
||||
count3 maxcount;
|
||||
};
|
||||
|
||||
struct entryplus3 {
|
||||
fileid3 fileid;
|
||||
filename3 name;
|
||||
cookie3 cookie;
|
||||
post_op_attr name_attributes;
|
||||
post_op_fh3 name_handle;
|
||||
entryplus3 *nextentry;
|
||||
};
|
||||
|
||||
struct dirlistplus3 {
|
||||
entryplus3 *entries;
|
||||
bool eof;
|
||||
};
|
||||
|
||||
struct READDIRPLUS3resok {
|
||||
post_op_attr dir_attributes;
|
||||
cookieverf3 cookieverf;
|
||||
dirlistplus3 reply;
|
||||
};
|
||||
|
||||
struct READDIRPLUS3resfail {
|
||||
post_op_attr dir_attributes;
|
||||
};
|
||||
|
||||
union READDIRPLUS3res switch (nfsstat3 status) {
|
||||
case NFS3_OK:
|
||||
READDIRPLUS3resok resok;
|
||||
default:
|
||||
READDIRPLUS3resfail resfail;
|
||||
};
|
||||
|
||||
/*
|
||||
* Arguments to fsstat (v3).
|
||||
*/
|
||||
struct FSSTAT3args {
|
||||
nfs_fh3 fsroot;
|
||||
};
|
||||
|
||||
struct FSSTAT3resok {
|
||||
post_op_attr obj_attributes;
|
||||
size3 tbytes;
|
||||
size3 fbytes;
|
||||
size3 abytes;
|
||||
size3 tfiles;
|
||||
size3 ffiles;
|
||||
size3 afiles;
|
||||
uint32 invarsec;
|
||||
};
|
||||
|
||||
struct FSSTAT3resfail {
|
||||
post_op_attr obj_attributes;
|
||||
};
|
||||
|
||||
union FSSTAT3res switch (nfsstat3 status) {
|
||||
case NFS3_OK:
|
||||
FSSTAT3resok resok;
|
||||
default:
|
||||
FSSTAT3resfail resfail;
|
||||
};
|
||||
|
||||
/*
|
||||
* Arguments to fsinfo (v3).
|
||||
*/
|
||||
const FSF3_LINK = 0x0001;
|
||||
const FSF3_SYMLINK = 0x0002;
|
||||
const FSF3_HOMOGENEOUS = 0x0008;
|
||||
const FSF3_CANSETTIME = 0x0010;
|
||||
|
||||
struct FSINFO3args {
|
||||
nfs_fh3 fsroot;
|
||||
};
|
||||
|
||||
struct FSINFO3resok {
|
||||
post_op_attr obj_attributes;
|
||||
uint32 rtmax;
|
||||
uint32 rtpref;
|
||||
uint32 rtmult;
|
||||
uint32 wtmax;
|
||||
uint32 wtpref;
|
||||
uint32 wtmult;
|
||||
uint32 dtpref;
|
||||
size3 maxfilesize;
|
||||
nfstime3 time_delta;
|
||||
uint32 properties;
|
||||
};
|
||||
|
||||
struct FSINFO3resfail {
|
||||
post_op_attr obj_attributes;
|
||||
};
|
||||
|
||||
union FSINFO3res switch (nfsstat3 status) {
|
||||
case NFS3_OK:
|
||||
FSINFO3resok resok;
|
||||
default:
|
||||
FSINFO3resfail resfail;
|
||||
};
|
||||
|
||||
/*
|
||||
* Arguments to pathconf (v3).
|
||||
*/
|
||||
struct PATHCONF3args {
|
||||
nfs_fh3 object;
|
||||
};
|
||||
|
||||
struct PATHCONF3resok {
|
||||
post_op_attr obj_attributes;
|
||||
uint32 linkmax;
|
||||
uint32 name_max;
|
||||
bool no_trunc;
|
||||
bool chown_restricted;
|
||||
bool case_insensitive;
|
||||
bool case_preserving;
|
||||
};
|
||||
|
||||
struct PATHCONF3resfail {
|
||||
post_op_attr obj_attributes;
|
||||
};
|
||||
|
||||
union PATHCONF3res switch (nfsstat3 status) {
|
||||
case NFS3_OK:
|
||||
FSINFO3resok resok;
|
||||
default:
|
||||
FSINFO3resfail resfail;
|
||||
};
|
||||
|
||||
/*
|
||||
* Arguments to commit (v3).
|
||||
*/
|
||||
struct COMMIT3args {
|
||||
nfs_fh3 file;
|
||||
offset3 offset;
|
||||
count3 count;
|
||||
};
|
||||
|
||||
struct COMMIT3resok {
|
||||
wcc_data file_wcc;
|
||||
writeverf3 verf;
|
||||
};
|
||||
|
||||
struct COMMIT3resfail {
|
||||
wcc_data file_wcc;
|
||||
};
|
||||
|
||||
union COMMIT3res switch (nfsstat3 status) {
|
||||
case NFS3_OK:
|
||||
FSINFO3resok resok;
|
||||
default:
|
||||
FSINFO3resfail resfail;
|
||||
};
|
||||
|
||||
#endif /* WANT_NFS3 */
|
||||
|
||||
/*
|
||||
* Remote file service routines
|
||||
*/
|
||||
@ -353,5 +1189,75 @@ program NFS_PROGRAM {
|
||||
statfsres
|
||||
NFSPROC_STATFS(nfs_fh) = 17;
|
||||
} = 2;
|
||||
#ifdef WANT_NFS3
|
||||
version NFS_V3 {
|
||||
void
|
||||
NFSPROC3_NULL(void) = 0;
|
||||
|
||||
GETATTR3res
|
||||
NFSPROC3_GETATTR(GETATTR3args) = 1;
|
||||
|
||||
SETATTR3res
|
||||
NFSPROC3_SETATTR(SETATTR3args) = 2;
|
||||
|
||||
LOOKUP3res
|
||||
NFSPROC3_LOOKUP(LOOKUP3args) = 3;
|
||||
|
||||
ACCESS3res
|
||||
NFSPROC3_ACCESS(ACCESS3args) = 4;
|
||||
|
||||
READLINK3res
|
||||
NFSPROC3_READLINK(READLINK3args) = 5;
|
||||
|
||||
READ3res
|
||||
NFSPROC3_READ(READ3args) = 6;
|
||||
|
||||
WRITE3res
|
||||
NFSPROC3_WRITE(WRITE3args) = 7;
|
||||
|
||||
CREATE3res
|
||||
NFSPROC3_CREATE(CREATE3args) = 8;
|
||||
|
||||
MKDIR3res
|
||||
NFSPROC3_MKDIR(MKDIR3args) = 9;
|
||||
|
||||
SYMLINK3res
|
||||
NFSPROC3_SYMLINK(SYMLINK3args) = 10;
|
||||
|
||||
MKNOD3res
|
||||
NFSPROC3_MKNOD(MKNOD3args) = 11;
|
||||
|
||||
REMOVE3res
|
||||
NFSPROC3_REMOVE(REMOVE3args) = 12;
|
||||
|
||||
RMDIR3res
|
||||
NFSPROC3_RMDIR(RMDIR3args) = 13;
|
||||
|
||||
RENAME3res
|
||||
NFSPROC3_RENAME(RENAME3args) = 14;
|
||||
|
||||
LINK3res
|
||||
NFSPROC3_LINK(LINK3args) = 15;
|
||||
|
||||
READDIR3res
|
||||
NFSPROC3_READDIR(READDIR3args) = 16;
|
||||
|
||||
READDIRPLUS3res
|
||||
NFSPROC3_READDIRPLUS(READDIRPLUS3args) = 17;
|
||||
|
||||
FSSTAT3res
|
||||
NFSPROC3_FSSTAT(FSSTAT3args) = 18;
|
||||
|
||||
FSINFO3res
|
||||
NFSPROC3_FSINFO(FSINFO3args) = 19;
|
||||
|
||||
PATHCONF3res
|
||||
NFSPROC3_PATHCONF(PATHCONF3args) = 20;
|
||||
|
||||
COMMIT3res
|
||||
NFSPROC3_COMMIT(COMMIT3args) = 21;
|
||||
|
||||
} = 3;
|
||||
#endif
|
||||
} = 100003;
|
||||
|
||||
|
465
include/rpcsvc/nis.x
Normal file
465
include/rpcsvc/nis.x
Normal file
@ -0,0 +1,465 @@
|
||||
%/*
|
||||
% * 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
|
||||
% */
|
||||
|
||||
#ifndef RPC_HDR
|
||||
%#ifndef lint
|
||||
%static const char rcsid[] = "$Id: nis.x,v 1.5 1996/12/05 06:13:41 wpaul Exp $";
|
||||
%#endif /* not lint */
|
||||
#endif
|
||||
|
||||
/*
|
||||
* From 4.1 : @(#)nis.x 1.61 Copyright 1989 Sun Microsystems
|
||||
*
|
||||
* RPC Language Protocol description file for NIS Plus
|
||||
* This version : 1.61
|
||||
* Last Modified : 3/19/91
|
||||
*/
|
||||
#ifdef RPC_HDR
|
||||
%/*
|
||||
% * nis.h
|
||||
% *
|
||||
% * This file is the main include file for NIS clients. It contains
|
||||
% * both the client library function defines and the various data
|
||||
% * structures used by the NIS service. It includes the file nis_tags.h
|
||||
% * which defines the tag values. This allows the tags to change without
|
||||
% * having to change the nis.x file.
|
||||
% *
|
||||
% * NOTE : DO NOT EDIT THIS FILE! It is automatically generated when
|
||||
% * rpcgen is run on the nis.x file. Note that there is a
|
||||
% * simple sed script to remove some unneeded lines. (See the
|
||||
% * Makefile target nis.h)
|
||||
% *
|
||||
% */
|
||||
%#include <rpcsvc/nis_tags.h>
|
||||
#endif
|
||||
|
||||
/* This gets stuffed into the source files. */
|
||||
#if RPC_HDR
|
||||
%#include <rpc/xdr.h>
|
||||
#endif
|
||||
/*
|
||||
* This is just pointless.
|
||||
*/
|
||||
#ifdef SUN_STUPIDITY
|
||||
#if RPC_SVC
|
||||
%#include "nis_svc.h"
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/* Include the RPC Language description of NIS objects */
|
||||
#include "nis_object.x"
|
||||
|
||||
/* Errors that can be returned by the service */
|
||||
enum nis_error {
|
||||
NIS_SUCCESS = 0, /* A-ok, let's rock n roll */
|
||||
NIS_S_SUCCESS = 1, /* Name found (maybe) */
|
||||
NIS_NOTFOUND = 2, /* Name definitely not found */
|
||||
NIS_S_NOTFOUND = 3, /* Name maybe not found */
|
||||
NIS_CACHEEXPIRED = 4, /* Name exists but cache out of date */
|
||||
NIS_NAMEUNREACHABLE = 5, /* Can't get there from here */
|
||||
NIS_UNKNOWNOBJ = 6, /* Object type is bogus */
|
||||
NIS_TRYAGAIN = 7, /* I'm busy, call back */
|
||||
NIS_SYSTEMERROR = 8, /* Out of band failure */
|
||||
NIS_CHAINBROKEN = 9, /* First/Next warning */
|
||||
NIS_PERMISSION = 10, /* Not enough permission to access */
|
||||
NIS_NOTOWNER = 11, /* You don't own it, sorry */
|
||||
NIS_NOT_ME = 12, /* I don't serve this name */
|
||||
NIS_NOMEMORY = 13, /* Outta VM! Help! */
|
||||
NIS_NAMEEXISTS = 14, /* Can't create over another name */
|
||||
NIS_NOTMASTER = 15, /* I'm justa secondaray, don't ask me */
|
||||
NIS_INVALIDOBJ = 16, /* Object is broken somehow */
|
||||
NIS_BADNAME = 17, /* Unparsable name */
|
||||
NIS_NOCALLBACK = 18, /* Couldn't talk to call back proc */
|
||||
NIS_CBRESULTS = 19, /* Results being called back to you */
|
||||
NIS_NOSUCHNAME = 20, /* Name unknown */
|
||||
NIS_NOTUNIQUE = 21, /* Value is not uniques (entry) */
|
||||
NIS_IBMODERROR = 22, /* Inf. Base. Modify error. */
|
||||
NIS_NOSUCHTABLE = 23, /* Name for table was wrong */
|
||||
NIS_TYPEMISMATCH = 24, /* Entry and table type mismatch */
|
||||
NIS_LINKNAMEERROR = 25, /* Link points to bogus name */
|
||||
NIS_PARTIAL = 26, /* Partial success, found table */
|
||||
NIS_TOOMANYATTRS = 27, /* Too many attributes */
|
||||
NIS_RPCERROR = 28, /* RPC error encountered */
|
||||
NIS_BADATTRIBUTE = 29, /* Bad or invalid attribute */
|
||||
NIS_NOTSEARCHABLE = 30, /* Non-searchable object searched */
|
||||
NIS_CBERROR = 31, /* Error during callback (svc crash) */
|
||||
NIS_FOREIGNNS = 32, /* Foreign Namespace */
|
||||
NIS_BADOBJECT = 33, /* Malformed object structure */
|
||||
NIS_NOTSAMEOBJ = 34, /* Object swapped during deletion */
|
||||
NIS_MODFAIL = 35, /* Failure during a Modify. */
|
||||
NIS_BADREQUEST = 36, /* Illegal query for table */
|
||||
NIS_NOTEMPTY = 37, /* Attempt to remove a non-empty tbl */
|
||||
NIS_COLDSTART_ERR = 38, /* Error accesing the cold start file */
|
||||
NIS_RESYNC = 39, /* Transaction log too far out of date */
|
||||
NIS_FAIL = 40, /* NIS operation failed. */
|
||||
NIS_UNAVAIL = 41, /* NIS+ service is unavailable (client) */
|
||||
NIS_RES2BIG = 42, /* NIS+ result too big for datagram */
|
||||
NIS_SRVAUTH = 43, /* NIS+ server wasn't authenticated. */
|
||||
NIS_CLNTAUTH = 44, /* NIS+ Client wasn't authenticated. */
|
||||
NIS_NOFILESPACE = 45, /* NIS+ server ran out of disk space */
|
||||
NIS_NOPROC = 46, /* NIS+ server couldn't create new proc */
|
||||
NIS_DUMPLATER = 47 /* NIS+ server already has dump child */
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
* Structure definitions for the parameters and results of the actual
|
||||
* NIS RPC calls.
|
||||
*
|
||||
* This is the standard result (in the protocol) of most of the nis
|
||||
* requests.
|
||||
*/
|
||||
|
||||
struct nis_result {
|
||||
nis_error status; /* Status of the response */
|
||||
nis_object objects<>; /* objects found */
|
||||
netobj cookie; /* Cookie Data */
|
||||
u_long zticks; /* server ticks */
|
||||
u_long dticks; /* DBM ticks. */
|
||||
u_long aticks; /* Cache (accel) ticks */
|
||||
u_long cticks; /* Client ticks */
|
||||
};
|
||||
|
||||
/*
|
||||
* A Name Service request
|
||||
* This request is used to access the name space, ns_name is the name
|
||||
* of the object within the namespace and the object is it's value, for
|
||||
* add/modify, a copy of the original for remove.
|
||||
*/
|
||||
|
||||
struct ns_request {
|
||||
nis_name ns_name; /* Name in the NIS name space */
|
||||
nis_object ns_object<1>; /* Optional Object (add/remove) */
|
||||
};
|
||||
|
||||
/*
|
||||
* An information base request
|
||||
* This request includes the NIS name of the table we wish to search, the
|
||||
* search criteria in the form of attribute/value pairs and an optional
|
||||
* callback program number. If the callback program number is provided
|
||||
* the server will send back objects one at a time, otherwise it will
|
||||
* return them all in the response.
|
||||
*/
|
||||
|
||||
struct ib_request {
|
||||
nis_name ibr_name; /* The name of the Table */
|
||||
nis_attr ibr_srch<>; /* The search critereia */
|
||||
u_long ibr_flags; /* Optional flags */
|
||||
nis_object ibr_obj<1>; /* optional object (add/modify) */
|
||||
nis_server ibr_cbhost<1>; /* Optional callback info */
|
||||
u_long ibr_bufsize; /* Optional first/next bufsize */
|
||||
netobj ibr_cookie; /* The first/next cookie */
|
||||
};
|
||||
|
||||
/*
|
||||
* This argument to the PING call notifies the replicas that something in
|
||||
* a directory has changed and this is it's timestamp. The replica will use
|
||||
* the timestamp to determine if its resync operation was successful.
|
||||
*/
|
||||
struct ping_args {
|
||||
nis_name dir; /* Directory that had the change */
|
||||
u_long stamp; /* timestamp of the transaction */
|
||||
};
|
||||
|
||||
/*
|
||||
* These are the type of entries that are stored in the transaction log,
|
||||
* note that modifications will appear as two entries, for names, they have
|
||||
* a "OLD" entry followed by a "NEW" entry. For entries in tables, there
|
||||
* is a remove followed by an add. It is done this way so that we can read
|
||||
* the log backwards to back out transactions and forwards to propogate
|
||||
* updated.
|
||||
*/
|
||||
enum log_entry_t {
|
||||
LOG_NOP = 0,
|
||||
ADD_NAME = 1, /* Name Added to name space */
|
||||
REM_NAME = 2, /* Name removed from name space */
|
||||
MOD_NAME_OLD = 3, /* Name was modified in the name space */
|
||||
MOD_NAME_NEW = 4, /* Name was modified in the name space */
|
||||
ADD_IBASE = 5, /* Entry added to information base */
|
||||
REM_IBASE = 6, /* Entry removed from information base */
|
||||
MOD_IBASE = 7, /* Entry was modified in information base */
|
||||
UPD_STAMP = 8 /* Update timestamp (used as fenceposts) */
|
||||
};
|
||||
|
||||
/*
|
||||
* This result is returned from the name service when it is requested to
|
||||
* dump logged entries from its transaction log. Information base updates
|
||||
* will have the name of the information base in the le_name field and
|
||||
* a canonical set of attribute/value pairs to fully specify the entry's
|
||||
* 'name'.
|
||||
*/
|
||||
struct log_entry {
|
||||
u_long le_time; /* Time in seconds */
|
||||
log_entry_t le_type; /* Type of log entry */
|
||||
nis_name le_princp; /* Principal making the change */
|
||||
nis_name le_name; /* Name of table/dir involved */
|
||||
nis_attr le_attrs<>; /* List of AV pairs. */
|
||||
nis_object le_object; /* Actual object value */
|
||||
};
|
||||
|
||||
struct log_result {
|
||||
nis_error lr_status; /* The status itself */
|
||||
netobj lr_cookie; /* Used by the dump callback */
|
||||
log_entry lr_entries<>; /* zero or more entries */
|
||||
};
|
||||
|
||||
struct cp_result {
|
||||
nis_error cp_status; /* Status of the checkpoint */
|
||||
u_long cp_zticks; /* Service 'ticks' */
|
||||
u_long cp_dticks; /* Database 'ticks' */
|
||||
};
|
||||
|
||||
/*
|
||||
* This structure defines a generic NIS tag list. The taglist contains
|
||||
* zero or tags, each of which is a type and a value. (u_long).
|
||||
* These are used to report statistics (see tag definitions below)
|
||||
* and to set or reset state variables.
|
||||
*/
|
||||
struct nis_tag {
|
||||
u_long tag_type; /* Statistic tag (may vary) */
|
||||
string tag_val<1024>; /* Statistic value may also vary */
|
||||
};
|
||||
|
||||
struct nis_taglist {
|
||||
nis_tag tags<>; /* List of tags */
|
||||
};
|
||||
|
||||
struct dump_args {
|
||||
nis_name da_dir; /* Directory to dump */
|
||||
u_long da_time; /* From this timestamp */
|
||||
nis_server da_cbhost<1>; /* Callback to use. */
|
||||
};
|
||||
|
||||
struct fd_args {
|
||||
nis_name dir_name; /* The directory we're looking for */
|
||||
nis_name requester; /* Host principal name for signature */
|
||||
};
|
||||
|
||||
struct fd_result {
|
||||
nis_error status; /* Status returned by function */
|
||||
nis_name source; /* Source of this answer */
|
||||
opaque dir_data<>; /* Directory Data (XDR'ed) */
|
||||
opaque signature<>; /* Signature of the source */
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
* What's going on here? Well, it's like this. When the service
|
||||
* is being compiled it wants to have the service definition specific
|
||||
* info included, and when the client is being compiled it wants that
|
||||
* info. This includes the appropriate file which was generated by
|
||||
* make in the protocols directory (probably /usr/include/rpcsvc).
|
||||
*
|
||||
* Uhm... guys? With RPC, you aren't supposed to have seperate
|
||||
* server-specific and client-specific header files. You have one header
|
||||
* file that's suitable for both. If your code doesn't work using just
|
||||
* the one header file, I submit to you that it's broken.
|
||||
* -Bill
|
||||
*/
|
||||
#ifdef SUN_STUPIDITY
|
||||
#ifdef RPC_SVC
|
||||
%#include "nis_svc.h"
|
||||
#endif
|
||||
#ifdef RPC_CLNT
|
||||
%#include "nis_clnt.h"
|
||||
#endif
|
||||
#endif
|
||||
|
||||
program NIS_PROG {
|
||||
|
||||
/* RPC Language description of the NIS+ protocol */
|
||||
version NIS_VERSION {
|
||||
/* The name service functions */
|
||||
nis_result NIS_LOOKUP(ns_request) = 1;
|
||||
nis_result NIS_ADD(ns_request) = 2;
|
||||
nis_result NIS_MODIFY(ns_request) = 3;
|
||||
nis_result NIS_REMOVE(ns_request) = 4;
|
||||
|
||||
/* The information base functions */
|
||||
nis_result NIS_IBLIST(ib_request) = 5;
|
||||
nis_result NIS_IBADD(ib_request) = 6;
|
||||
nis_result NIS_IBMODIFY(ib_request) = 7;
|
||||
nis_result NIS_IBREMOVE(ib_request) = 8;
|
||||
nis_result NIS_IBFIRST(ib_request) = 9;
|
||||
nis_result NIS_IBNEXT(ib_request) = 10;
|
||||
|
||||
/* NIS Administrative functions */
|
||||
fd_result NIS_FINDDIRECTORY(fd_args) = 12;
|
||||
|
||||
/* If fetch and optionally reset statistics */
|
||||
nis_taglist NIS_STATUS(nis_taglist) = 14;
|
||||
|
||||
/* Dump changes to directory since time in da_time */
|
||||
log_result NIS_DUMPLOG(dump_args) = 15;
|
||||
|
||||
/* Dump contents of directory named */
|
||||
log_result NIS_DUMP(dump_args) = 16;
|
||||
|
||||
/* Check status of callback thread */
|
||||
bool NIS_CALLBACK(netobj) = 17;
|
||||
|
||||
/* Return last update time for named dir */
|
||||
u_long NIS_CPTIME(nis_name) = 18;
|
||||
|
||||
/* Checkpoint directory or table named */
|
||||
cp_result NIS_CHECKPOINT(nis_name) = 19;
|
||||
|
||||
/* Send 'status changed' ping to replicates */
|
||||
void NIS_PING(ping_args) = 20;
|
||||
|
||||
/* Modify server behaviour (such as debugging) */
|
||||
nis_taglist NIS_SERVSTATE(nis_taglist) = 21;
|
||||
|
||||
/* Create a Directory */
|
||||
nis_error NIS_MKDIR(nis_name) = 22;
|
||||
|
||||
/* Remove a Directory */
|
||||
nis_error NIS_RMDIR(nis_name) = 23;
|
||||
|
||||
/* Update public keys of a directory object */
|
||||
nis_error NIS_UPDKEYS(nis_name) = 24;
|
||||
} = 3;
|
||||
} = 100300;
|
||||
|
||||
/*
|
||||
* Included below are the defines that become part of nis.h,
|
||||
* they are technically not part of the protocol, but do define
|
||||
* key aspects of the implementation and are therefore useful
|
||||
* in building a conforming server or client.
|
||||
*/
|
||||
#if RPC_HDR
|
||||
%/*
|
||||
% * Generic "hash" datastructures, used by all types of hashed data.
|
||||
% */
|
||||
%struct nis_hash_data {
|
||||
% nis_name name; /* NIS name of hashed item */
|
||||
% int keychain; /* It's hash key (for pop) */
|
||||
% struct nis_hash_data *next; /* Hash collision pointer */
|
||||
% struct nis_hash_data *prv_item; /* A serial, doubly linked list */
|
||||
% struct nis_hash_data *nxt_item; /* of items in the hash table */
|
||||
%};
|
||||
%typedef struct nis_hash_data NIS_HASH_ITEM;
|
||||
%
|
||||
%struct nis_hash_table {
|
||||
% NIS_HASH_ITEM *keys[64]; /* A hash table of items */
|
||||
% NIS_HASH_ITEM *first; /* The first "item" in serial list */
|
||||
%};
|
||||
%typedef struct nis_hash_table NIS_HASH_TABLE;
|
||||
%
|
||||
%/* Structure for storing dynamically allocated static data */
|
||||
%struct nis_sdata {
|
||||
% void *buf; /* Memory allocation pointer */
|
||||
% u_long size; /* Buffer size */
|
||||
%};
|
||||
%
|
||||
%/* Generic client creating flags */
|
||||
%#define ZMH_VC 1
|
||||
%#define ZMH_DG 2
|
||||
%#define ZMH_AUTH 4
|
||||
%
|
||||
%/* Testing Access rights for objects */
|
||||
%
|
||||
%#define NIS_READ_ACC 1
|
||||
%#define NIS_MODIFY_ACC 2
|
||||
%#define NIS_CREATE_ACC 4
|
||||
%#define NIS_DESTROY_ACC 8
|
||||
%/* Test macros. a == access rights, m == desired rights. */
|
||||
%#define WORLD(a, m) (((a) & (m)) != 0)
|
||||
%#define GROUP(a, m) (((a) & ((m) << 8)) != 0)
|
||||
%#define OWNER(a, m) (((a) & ((m) << 16)) != 0)
|
||||
%#define NOBODY(a, m) (((a) & ((m) << 24)) != 0)
|
||||
%
|
||||
%#define OATYPE(d, n) (((d)->do_armask.do_armask_val+n)->oa_otype)
|
||||
%#define OARIGHTS(d, n) (((d)->do_armask.do_armask_val+n)->oa_rights)
|
||||
%#define WORLD_DEFAULT (NIS_READ_ACC)
|
||||
%#define GROUP_DEFAULT (NIS_READ_ACC << 8)
|
||||
%#define OWNER_DEFAULT ((NIS_READ_ACC +\
|
||||
NIS_MODIFY_ACC +\
|
||||
NIS_CREATE_ACC +\
|
||||
NIS_DESTROY_ACC) << 16)
|
||||
%#define DEFAULT_RIGHTS (WORLD_DEFAULT | GROUP_DEFAULT | OWNER_DEFAULT)
|
||||
%
|
||||
%/* Result manipulation defines ... */
|
||||
%#define NIS_RES_NUMOBJ(x) ((x)->objects.objects_len)
|
||||
%#define NIS_RES_OBJECT(x) ((x)->objects.objects_val)
|
||||
%#define NIS_RES_COOKIE(x) ((x)->cookie)
|
||||
%#define NIS_RES_STATUS(x) ((x)->status)
|
||||
%
|
||||
%/* These defines make getting at the variant part of the object easier. */
|
||||
%#define TA_data zo_data.objdata_u.ta_data
|
||||
%#define EN_data zo_data.objdata_u.en_data
|
||||
%#define DI_data zo_data.objdata_u.di_data
|
||||
%#define LI_data zo_data.objdata_u.li_data
|
||||
%#define GR_data zo_data.objdata_u.gr_data
|
||||
%
|
||||
%#define __type_of(o) ((o)->zo_data.zo_type)
|
||||
%
|
||||
%/* Declarations for the internal subroutines in nislib.c */
|
||||
%enum name_pos {SAME_NAME, HIGHER_NAME, LOWER_NAME, NOT_SEQUENTIAL, BAD_NAME};
|
||||
%typedef enum name_pos name_pos;
|
||||
%
|
||||
%/*
|
||||
% * Defines for getting at column data in entry objects. Because RPCGEN
|
||||
% * generates some rather wordy structures, we create some defines that
|
||||
% * collapse the needed keystrokes to access a particular value using
|
||||
% * these definitions they take an nis_object *, and an int and return
|
||||
% * a u_char * for Value, and an int for length.
|
||||
% */
|
||||
%#define ENTRY_VAL(obj, col) \
|
||||
(obj)->EN_data.en_cols.en_cols_val[col].ec_value.ec_value_val
|
||||
%#define ENTRY_LEN(obj, col) \
|
||||
(obj)->EN_data.en_cols.en_cols_val[col].ec_value.ec_value_len
|
||||
%
|
||||
%#ifdef __cplusplus
|
||||
%}
|
||||
%#endif
|
||||
%
|
||||
%/* Prototypes, and extern declarations for the NIS library functions. */
|
||||
%#include <rpcsvc/nislib.h>
|
||||
%#endif /* __NIS_RPCGEN_H */
|
||||
%/* EDIT_START */
|
||||
%
|
||||
%/*
|
||||
% * nis_3.h
|
||||
% *
|
||||
% * This file contains definitions that are only of interest to the actual
|
||||
% * service daemon and client stubs. Normal users of NIS will not include
|
||||
% * this file.
|
||||
% *
|
||||
% * NOTE : This include file is automatically created by a combination
|
||||
% * of rpcgen and sed. DO NOT EDIT IT, change the nis.x file instead
|
||||
% * and then remake this file.
|
||||
% */
|
||||
%#ifndef __nis_3_h
|
||||
%#define __nis_3_h
|
||||
%#ifdef __cplusplus
|
||||
%extern "C" {
|
||||
%#endif
|
||||
#endif
|
86
include/rpcsvc/nis_cache.x
Normal file
86
include/rpcsvc/nis_cache.x
Normal file
@ -0,0 +1,86 @@
|
||||
%/*
|
||||
% * 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
|
||||
% */
|
||||
|
||||
/*
|
||||
* nis_cache.x
|
||||
*
|
||||
* Copyright (c) 1988-1992 Sun Microsystems Inc
|
||||
* All Rights Reserved.
|
||||
*/
|
||||
|
||||
/* From: %#pragma ident "@(#)nis_cache.x 1.11 94/05/03 SMI" */
|
||||
|
||||
#ifndef RPC_HDR
|
||||
%#ifndef lint
|
||||
%static const char rcsid[] = "$Id: nis_cache.x,v 1.4 1996/07/29 14:32:44 wpaul Exp $";
|
||||
%#endif /* not lint */
|
||||
#endif
|
||||
|
||||
#ifdef RPC_HDR
|
||||
%#include <rpc/types.h>
|
||||
%#include <rpcsvc/nis.h>
|
||||
%
|
||||
%/* default cache file */
|
||||
%#define CACHEFILE "/var/nis/NIS_SHARED_DIRCACHE"
|
||||
%
|
||||
%/* clients have to read-lock the cache file, and SVR4 locking requires that */
|
||||
%/* the file be writable, but we don't want a world-writable cache file. */
|
||||
%/* So... everyone agrees to use a different, world-writable file for the */
|
||||
%/* locking operations, but the data is in CACHEFILE. */
|
||||
%#define CACHELOCK "/usr/tmp/.NIS_DIR_CACHELOCK"
|
||||
%
|
||||
%/* the file containing one trusted XDR'ed directory object.
|
||||
% * This has to be present for the system to work.
|
||||
% */
|
||||
%#define COLD_START_FILE "/var/nis/NIS_COLD_START"
|
||||
%
|
||||
%enum pc_status {HIT, MISS, NEAR_MISS};
|
||||
%
|
||||
%extern int __nis_debuglevel;
|
||||
%
|
||||
%
|
||||
#endif
|
||||
|
||||
#ifdef RPC_CLNT
|
||||
#ifdef SOLARIS
|
||||
%#include "../gen/nis_clnt.h"
|
||||
#else
|
||||
%#include "nis.h"
|
||||
#endif
|
||||
#endif
|
||||
|
||||
program CACHEPROG {
|
||||
version CACHE_VER_1 {
|
||||
void NIS_CACHE_ADD_ENTRY(fd_result) = 1;
|
||||
void NIS_CACHE_REMOVE_ENTRY(directory_obj) = 2;
|
||||
void NIS_CACHE_READ_COLDSTART(void) = 3;
|
||||
void NIS_CACHE_REFRESH_ENTRY(string<>) = 4;
|
||||
} = 1;
|
||||
} = 100301;
|
75
include/rpcsvc/nis_callback.x
Normal file
75
include/rpcsvc/nis_callback.x
Normal file
@ -0,0 +1,75 @@
|
||||
%/*
|
||||
% * 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
|
||||
% */
|
||||
|
||||
/*
|
||||
* nis_callback.x
|
||||
*
|
||||
* Copyright (c) 1988-1992 Sun Microsystems Inc
|
||||
* All Rights Reserved.
|
||||
*/
|
||||
|
||||
/* From: %#pragma ident "@(#)nis_callback.x 1.7 94/05/03 SMI" */
|
||||
|
||||
#ifndef RPC_HDR
|
||||
%#ifndef lint
|
||||
%static const char rcsid[] = "$Id: nis_callback.x,v 1.3 1996/07/29 14:32:56 wpaul Exp $";
|
||||
%#endif /* not lint */
|
||||
#endif
|
||||
|
||||
/*
|
||||
* "@(#)zns_cback.x 1.2 90/09/10 Copyr 1990 Sun Micro"
|
||||
*
|
||||
* RPCL description of the Callback Service.
|
||||
*/
|
||||
|
||||
#ifdef RPC_HDR
|
||||
%#include <rpcsvc/nis.h>
|
||||
#endif
|
||||
#ifdef RPC_XDR
|
||||
#ifdef SOLARIS
|
||||
%#include "nis_clnt.h"
|
||||
#else
|
||||
%#include "nis.h"
|
||||
#endif
|
||||
#endif
|
||||
|
||||
typedef nis_object *obj_p;
|
||||
|
||||
struct cback_data {
|
||||
obj_p entries<>; /* List of objects */
|
||||
};
|
||||
|
||||
program CB_PROG {
|
||||
version CB_VERS {
|
||||
bool CBPROC_RECEIVE(cback_data) = 1;
|
||||
void CBPROC_FINISH(void) = 2;
|
||||
void CBPROC_ERROR(nis_error) = 3;
|
||||
} = 1;
|
||||
} = 100302;
|
161
include/rpcsvc/nis_db.h
Normal file
161
include/rpcsvc/nis_db.h
Normal file
@ -0,0 +1,161 @@
|
||||
/*
|
||||
* 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.
|
||||
*
|
||||
* 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) 1991, by Sun Microsystems Inc.
|
||||
*/
|
||||
|
||||
/*
|
||||
* This header file defines the interface to the NIS database. All
|
||||
* implementations of the database must export at least these routines.
|
||||
* They must also follow the conventions set herein. See the implementors
|
||||
* guide for specific semantics that are required.
|
||||
*/
|
||||
|
||||
#ifndef _RPCSVC_NIS_DB_H
|
||||
#define _RPCSVC_NIS_DB_H
|
||||
|
||||
|
||||
/* From: #pragma ident "@(#)nis_db.h 1.8 94/05/03 SMI" */
|
||||
#pragma ident "$Id: nis_db.h,v 1.3 1996/07/29 13:59:13 wpaul Exp $"
|
||||
|
||||
/*
|
||||
* Note: although the version of <rpcsvc/nis_db.h> shipped with Solaris
|
||||
* 2.5/2.5.x is actually older than this one (according to the ident
|
||||
* string), it contains changes and a few added functions. Those changes
|
||||
* have been hand merged into this file to bring it up to date.
|
||||
*/
|
||||
|
||||
#include <rpc/rpc.h>
|
||||
#include <rpcsvc/nis.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
enum db_status {
|
||||
DB_SUCCESS = 0,
|
||||
DB_NOTFOUND = 1,
|
||||
DB_NOTUNIQUE = 2,
|
||||
DB_BADTABLE = 3,
|
||||
DB_BADQUERY = 4,
|
||||
DB_BADOBJECT = 5,
|
||||
DB_MEMORY_LIMIT = 6,
|
||||
DB_STORAGE_LIMIT = 7,
|
||||
DB_INTERNAL_ERROR = 8
|
||||
};
|
||||
typedef enum db_status db_status;
|
||||
|
||||
enum db_action {
|
||||
DB_LOOKUP = 0,
|
||||
DB_REMOVE = 1,
|
||||
DB_ADD = 2,
|
||||
DB_FIRST = 3,
|
||||
DB_NEXT = 4,
|
||||
DB_ALL = 5,
|
||||
DB_RESET_NEXT = 6,
|
||||
};
|
||||
typedef enum db_action db_action;
|
||||
|
||||
typedef entry_obj *entry_object_p;
|
||||
|
||||
typedef struct {
|
||||
u_int db_next_desc_len;
|
||||
char *db_next_desc_val;
|
||||
} db_next_desc;
|
||||
|
||||
struct db_result {
|
||||
db_status status;
|
||||
db_next_desc nextinfo;
|
||||
struct {
|
||||
u_int objects_len;
|
||||
entry_object_p *objects_val;
|
||||
} objects;
|
||||
long ticks;
|
||||
};
|
||||
typedef struct db_result db_result;
|
||||
|
||||
/*
|
||||
* Prototypes for the database functions.
|
||||
*/
|
||||
|
||||
#if (__STDC__)
|
||||
|
||||
extern bool_t db_initialize(char *);
|
||||
#ifdef ORIGINAL_DECLS
|
||||
extern bool_t db_create_table(char *, table_obj *);
|
||||
extern bool_t db_destroy_table(char *);
|
||||
#else
|
||||
extern db_status db_create_table(char *, table_obj *);
|
||||
extern db_status db_destroy_table(char *);
|
||||
#endif
|
||||
extern db_result *db_first_entry(char *, int, nis_attr *);
|
||||
extern db_result *db_next_entry(char *, db_next_desc *);
|
||||
extern db_result *db_reset_next_entry(char *, db_next_desc *);
|
||||
extern db_result *db_list_entries(char *, int, nis_attr *);
|
||||
extern db_result *db_add_entry(char *, int, nis_attr *, entry_obj *);
|
||||
extern db_result *db_remove_entry(char *, int, nis_attr *);
|
||||
extern db_status db_checkpoint(char *);
|
||||
extern db_status db_standby(char *);
|
||||
#ifndef ORIGINAL_DECLS
|
||||
extern db_status db_table_exists(char *);
|
||||
extern db_status db_unload_table(char *);
|
||||
extern void db_free_result(db_result *);
|
||||
#endif
|
||||
|
||||
#else /* Non-prototype definitions */
|
||||
|
||||
extern bool_t db_initialize();
|
||||
#ifdef ORIGINAL_DECLS
|
||||
extern bool_t db_create_table();
|
||||
extern bool_t db_destroy_table();
|
||||
#else
|
||||
extern db_status db_create_table();
|
||||
extern db_status db_destroy_table();
|
||||
#endif
|
||||
extern db_result *db_first_entry();
|
||||
extern db_result *db_next_entry();
|
||||
extern db_result *db_reset_next_entry();
|
||||
extern db_result *db_list_entries();
|
||||
extern db_result *db_add_entry();
|
||||
extern db_result *db_remove_entry();
|
||||
extern db_status db_checkpoint();
|
||||
extern db_status db_standby();
|
||||
#ifndef ORIGINAL_DECLS
|
||||
extern db_status db_table_exists();
|
||||
extern db_status db_unload_table();
|
||||
extern void db_free_result();
|
||||
#endif
|
||||
#endif /* __STDC__ */
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* _RPCSVC_NIS_DB_H */
|
318
include/rpcsvc/nis_object.x
Normal file
318
include/rpcsvc/nis_object.x
Normal file
@ -0,0 +1,318 @@
|
||||
%/*
|
||||
% * 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
|
||||
% */
|
||||
|
||||
/*
|
||||
* nis_object.x
|
||||
*
|
||||
* Copyright (c) 1988-1992 Sun Microsystems Inc
|
||||
* All Rights Reserved.
|
||||
*/
|
||||
|
||||
/* From: %#pragma ident "@(#)nis_object.x 1.10 94/05/03 SMI" */
|
||||
%#pragma ident "$Id: nis_object.x,v 1.2 1996/07/29 14:31:02 wpaul Exp $"
|
||||
|
||||
#if RPC_HDR
|
||||
%
|
||||
%#ifndef __nis_object_h
|
||||
%#define __nis_object_h
|
||||
%
|
||||
#endif
|
||||
/*
|
||||
* This file defines the format for a NIS object in RPC language.
|
||||
* It is included by the main .x file and the database access protocol
|
||||
* file. It is common because both of them need to deal with the same
|
||||
* type of object. Generating the actual code though is a bit messy because
|
||||
* the nis.x file and the nis_dba.x file will generate xdr routines to
|
||||
* encode/decode objects when only one set is needed. Such is life when
|
||||
* one is using rpcgen.
|
||||
*
|
||||
* Note, the protocol doesn't specify any limits on such things as
|
||||
* maximum name length, number of attributes, etc. These are enforced
|
||||
* by the database backend. When you hit them you will no. Also see
|
||||
* the db_getlimits() function for fetching the limit values.
|
||||
*
|
||||
*/
|
||||
|
||||
/* Some manifest constants, chosen to maximize flexibility without
|
||||
* plugging the wire full of data.
|
||||
*/
|
||||
const NIS_MAXSTRINGLEN = 255;
|
||||
const NIS_MAXNAMELEN = 1024;
|
||||
const NIS_MAXATTRNAME = 32;
|
||||
const NIS_MAXATTRVAL = 2048;
|
||||
const NIS_MAXCOLUMNS = 64;
|
||||
const NIS_MAXATTR = 16;
|
||||
const NIS_MAXPATH = 1024;
|
||||
const NIS_MAXREPLICAS = 128;
|
||||
const NIS_MAXLINKS = 16;
|
||||
|
||||
const NIS_PK_NONE = 0; /* no public key (unix/sys auth) */
|
||||
const NIS_PK_DH = 1; /* Public key is Diffie-Hellman type */
|
||||
const NIS_PK_RSA = 2; /* Public key if RSA type */
|
||||
const NIS_PK_KERB = 3; /* Use kerberos style authentication */
|
||||
|
||||
/*
|
||||
* The fundamental name type of NIS. The name may consist of two parts,
|
||||
* the first being the fully qualified name, and the second being an
|
||||
* optional set of attribute/value pairs.
|
||||
*/
|
||||
struct nis_attr {
|
||||
string zattr_ndx<>; /* name of the index */
|
||||
opaque zattr_val<>; /* Value for the attribute. */
|
||||
};
|
||||
|
||||
typedef string nis_name<>; /* The NIS name itself. */
|
||||
|
||||
/* NIS object types are defined by the following enumeration. The numbers
|
||||
* they use are based on the following scheme :
|
||||
* 0 - 1023 are reserved for Sun,
|
||||
* 1024 - 2047 are defined to be private to a particular tree.
|
||||
* 2048 - 4095 are defined to be user defined.
|
||||
* 4096 - ... are reserved for future use.
|
||||
*/
|
||||
|
||||
enum zotypes {
|
||||
BOGUS_OBJ = 0, /* Uninitialized object structure */
|
||||
NO_OBJ = 1, /* NULL object (no data) */
|
||||
DIRECTORY_OBJ = 2, /* Directory object describing domain */
|
||||
GROUP_OBJ = 3, /* Group object (a list of names) */
|
||||
TABLE_OBJ = 4, /* Table object (a database schema) */
|
||||
ENTRY_OBJ = 5, /* Entry object (a database record) */
|
||||
LINK_OBJ = 6, /* A name link. */
|
||||
PRIVATE_OBJ = 7 /* Private object (all opaque data) */
|
||||
};
|
||||
|
||||
/*
|
||||
* The types of Name services NIS knows about. They are enumerated
|
||||
* here. The Binder code will use this type to determine if it has
|
||||
* a set of library routines that will access the indicated name service.
|
||||
*/
|
||||
enum nstype {
|
||||
UNKNOWN = 0,
|
||||
NIS = 1, /* Nis Plus Service */
|
||||
SUNYP = 2, /* Old NIS Service */
|
||||
IVY = 3, /* Nis Plus Plus Service */
|
||||
DNS = 4, /* Domain Name Service */
|
||||
X500 = 5, /* ISO/CCCIT X.500 Service */
|
||||
DNANS = 6, /* Digital DECNet Name Service */
|
||||
XCHS = 7, /* Xerox ClearingHouse Service */
|
||||
CDS= 8
|
||||
};
|
||||
|
||||
/*
|
||||
* DIRECTORY - The name service object. These objects identify other name
|
||||
* servers that are serving some portion of the name space. Each has a
|
||||
* type associated with it. The resolver library will note whether or not
|
||||
* is has the needed routines to access that type of service.
|
||||
* The oarmask structure defines an access rights mask on a per object
|
||||
* type basis for the name spaces. The only bits currently used are
|
||||
* create and destroy. By enabling or disabling these access rights for
|
||||
* a specific object type for a one of the accessor entities (owner,
|
||||
* group, world) the administrator can control what types of objects
|
||||
* may be freely added to the name space and which require the
|
||||
* administrator's approval.
|
||||
*/
|
||||
struct oar_mask {
|
||||
u_long oa_rights; /* Access rights mask */
|
||||
zotypes oa_otype; /* Object type */
|
||||
};
|
||||
|
||||
struct endpoint {
|
||||
string uaddr<>;
|
||||
string family<>; /* Transport family (INET, OSI, etc) */
|
||||
string proto<>; /* Protocol (TCP, UDP, CLNP, etc) */
|
||||
};
|
||||
|
||||
/*
|
||||
* Note: pkey is a netobj which is limited to 1024 bytes which limits the
|
||||
* keysize to 8192 bits. This is consider to be a reasonable limit for
|
||||
* the expected lifetime of this service.
|
||||
*/
|
||||
struct nis_server {
|
||||
nis_name name; /* Principal name of the server */
|
||||
endpoint ep<>; /* Universal addr(s) for server */
|
||||
u_long key_type; /* Public key type */
|
||||
netobj pkey; /* server's public key */
|
||||
};
|
||||
|
||||
struct directory_obj {
|
||||
nis_name do_name; /* Name of the directory being served */
|
||||
nstype do_type; /* one of NIS, DNS, IVY, YP, or X.500 */
|
||||
nis_server do_servers<>; /* <0> == Primary name server */
|
||||
u_long do_ttl; /* Time To Live (for caches) */
|
||||
oar_mask do_armask<>; /* Create/Destroy rights by object type */
|
||||
};
|
||||
|
||||
/*
|
||||
* ENTRY - This is one row of data from an information base.
|
||||
* The type value is used by the client library to convert the entry to
|
||||
* it's internal structure representation. The Table name is a back pointer
|
||||
* to the table where the entry is stored. This allows the client library
|
||||
* to determine where to send a request if the client wishes to change this
|
||||
* entry but got to it through a LINK rather than directly.
|
||||
* If the entry is a "standalone" entry then this field is void.
|
||||
*/
|
||||
const EN_BINARY = 1; /* Indicates value is binary data */
|
||||
const EN_CRYPT = 2; /* Indicates the value is encrypted */
|
||||
const EN_XDR = 4; /* Indicates the value is XDR encoded */
|
||||
const EN_MODIFIED = 8; /* Indicates entry is modified. */
|
||||
const EN_ASN1 = 64; /* Means contents use ASN.1 encoding */
|
||||
|
||||
struct entry_col {
|
||||
u_long ec_flags; /* Flags for this value */
|
||||
opaque ec_value<>; /* It's textual value */
|
||||
};
|
||||
|
||||
struct entry_obj {
|
||||
string en_type<>; /* Type of entry such as "passwd" */
|
||||
entry_col en_cols<>; /* Value for the entry */
|
||||
};
|
||||
|
||||
/*
|
||||
* GROUP - The group object contains a list of NIS principal names. Groups
|
||||
* are used to authorize principals. Each object has a set of access rights
|
||||
* for members of its group. Principal names in groups are in the form
|
||||
* name.directory and recursive groups are expressed as @groupname.directory
|
||||
*/
|
||||
struct group_obj {
|
||||
u_long gr_flags; /* Flags controlling group */
|
||||
nis_name gr_members<>; /* List of names in group */
|
||||
};
|
||||
|
||||
/*
|
||||
* LINK - This is the LINK object. It is quite similar to a symbolic link
|
||||
* in the UNIX filesystem. The attributes in the main object structure are
|
||||
* relative to the LINK data and not what it points to (like the file system)
|
||||
* "modify" privleges here indicate the right to modify what the link points
|
||||
* at and not to modify that actual object pointed to by the link.
|
||||
*/
|
||||
struct link_obj {
|
||||
zotypes li_rtype; /* Real type of the object */
|
||||
nis_attr li_attrs<>; /* Attribute/Values for tables */
|
||||
nis_name li_name; /* The object's real NIS name */
|
||||
};
|
||||
|
||||
/*
|
||||
* TABLE - This is the table object. It implements a simple
|
||||
* data base that applications and use for configuration or
|
||||
* administration purposes. The role of the table is to group together
|
||||
* a set of related entries. Tables are the simple database component
|
||||
* of NIS. Like many databases, tables are logically divided into columns
|
||||
* and rows. The columns are labeled with indexes and each ENTRY makes
|
||||
* up a row. Rows may be addressed within the table by selecting one
|
||||
* or more indexes, and values for those indexes. Each row which has
|
||||
* a value for the given index that matches the desired value is returned.
|
||||
* Within the definition of each column there is a flags variable, this
|
||||
* variable contains flags which determine whether or not the column is
|
||||
* searchable, contains binary data, and access rights for the entry objects
|
||||
* column value.
|
||||
*/
|
||||
|
||||
const TA_BINARY = 1; /* Means table data is binary */
|
||||
const TA_CRYPT = 2; /* Means value should be encrypted */
|
||||
const TA_XDR = 4; /* Means value is XDR encoded */
|
||||
const TA_SEARCHABLE = 8; /* Means this column is searchable */
|
||||
const TA_CASE = 16; /* Means this column is Case Sensitive */
|
||||
const TA_MODIFIED = 32; /* Means this columns attrs are modified*/
|
||||
const TA_ASN1 = 64; /* Means contents use ASN.1 encoding */
|
||||
|
||||
struct table_col {
|
||||
string tc_name<64>; /* Column Name */
|
||||
u_long tc_flags; /* control flags */
|
||||
u_long tc_rights; /* Access rights mask */
|
||||
};
|
||||
|
||||
struct table_obj {
|
||||
string ta_type<64>; /* Table type such as "passwd" */
|
||||
int ta_maxcol; /* Total number of columns */
|
||||
u_char ta_sep; /* Separator character */
|
||||
table_col ta_cols<>; /* The number of table indexes */
|
||||
string ta_path<>; /* A search path for this table */
|
||||
};
|
||||
|
||||
/*
|
||||
* This union joins together all of the currently known objects.
|
||||
*/
|
||||
union objdata switch (zotypes zo_type) {
|
||||
case DIRECTORY_OBJ :
|
||||
struct directory_obj di_data;
|
||||
case GROUP_OBJ :
|
||||
struct group_obj gr_data;
|
||||
case TABLE_OBJ :
|
||||
struct table_obj ta_data;
|
||||
case ENTRY_OBJ:
|
||||
struct entry_obj en_data;
|
||||
case LINK_OBJ :
|
||||
struct link_obj li_data;
|
||||
case PRIVATE_OBJ :
|
||||
opaque po_data<>;
|
||||
case NO_OBJ :
|
||||
void;
|
||||
case BOGUS_OBJ :
|
||||
void;
|
||||
default :
|
||||
void;
|
||||
};
|
||||
|
||||
/*
|
||||
* This is the basic NIS object data type. It consists of a generic part
|
||||
* which all objects contain, and a specialized part which varies depending
|
||||
* on the type of the object. All of the specialized sections have been
|
||||
* described above. You might have wondered why they all start with an
|
||||
* integer size, followed by the useful data. The answer is, when the
|
||||
* server doesn't recognize the type returned it treats it as opaque data.
|
||||
* And the definition for opaque data is {int size; char *data;}. In this
|
||||
* way, servers and utility routines that do not understand a given type
|
||||
* may still pass it around. One has to be careful in setting
|
||||
* this variable accurately, it must take into account such things as
|
||||
* XDR padding of structures etc. The best way to set it is to note one's
|
||||
* position in the XDR encoding stream, encode the structure, look at the
|
||||
* new position and calculate the size.
|
||||
*/
|
||||
struct nis_oid {
|
||||
u_long ctime; /* Time of objects creation */
|
||||
u_long mtime; /* Time of objects modification */
|
||||
};
|
||||
|
||||
struct nis_object {
|
||||
nis_oid zo_oid; /* object identity verifier. */
|
||||
nis_name zo_name; /* The NIS name for this object */
|
||||
nis_name zo_owner; /* NIS name of object owner. */
|
||||
nis_name zo_group; /* NIS name of access group. */
|
||||
nis_name zo_domain; /* The administrator for the object */
|
||||
u_long zo_access; /* Access rights (owner, group, world) */
|
||||
u_long zo_ttl; /* Object's time to live in seconds. */
|
||||
objdata zo_data; /* Data structure for this type */
|
||||
};
|
||||
#if RPC_HDR
|
||||
%
|
||||
%#endif /* if __nis_object_h */
|
||||
%
|
||||
#endif
|
138
include/rpcsvc/nis_tags.h
Normal file
138
include/rpcsvc/nis_tags.h
Normal file
@ -0,0 +1,138 @@
|
||||
/*
|
||||
* 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.
|
||||
*
|
||||
* 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) 1991, Sun Microsystems Inc.
|
||||
*/
|
||||
|
||||
/*
|
||||
* nis_tags.h
|
||||
*
|
||||
* This file contains the tags and statistics definitions. It is
|
||||
* automatically included by nis.h
|
||||
*/
|
||||
|
||||
#ifndef _RPCSVC_NIS_TAGS_H
|
||||
#define _RPCSVC_NIS_TAGS_H
|
||||
|
||||
/* From: #pragma ident "@(#)nis_tags.h 1.10 94/05/03 SMI" */
|
||||
/* from file: zns_tags.h 1.7 Copyright (c) 1990 Sun Microsystems */
|
||||
#pragma ident "$Id: nis_tags.h,v 1.2 1996/07/29 14:26:03 wpaul Exp $"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#ifndef ORIGINAL_DECLS
|
||||
#define NIS_DIR "data"
|
||||
#endif
|
||||
|
||||
/* Lookup and List function flags */
|
||||
#define FOLLOW_LINKS (1<<0) /* Follow link objects */
|
||||
#define FOLLOW_PATH (1<<1) /* Follow the path in a table */
|
||||
#define HARD_LOOKUP (1<<2) /* Block until successful */
|
||||
#define ALL_RESULTS (1<<3) /* Retrieve all results */
|
||||
#define NO_CACHE (1<<4) /* Do not return 'cached' results */
|
||||
#define MASTER_ONLY (1<<5) /* Get value only from master server */
|
||||
#define EXPAND_NAME (1<<6) /* Expand partitially qualified names */
|
||||
|
||||
/* Semantic modification for table operations flags */
|
||||
#define RETURN_RESULT (1<<7) /* Return resulting object to client */
|
||||
#define ADD_OVERWRITE (1<<8) /* Allow overwrites on ADD */
|
||||
#define REM_MULTIPLE (1<<9) /* Allow wildcard deletes */
|
||||
#define MOD_SAMEOBJ (1<<10) /* Check modified object before write */
|
||||
#define ADD_RESERVED (1<<11) /* Spare ADD semantic */
|
||||
#define REM_RESERVED (1<<12) /* Spare REM semantic */
|
||||
#ifdef ORIGINAL_DECLS
|
||||
#define MOD_RESERVED (1<<13) /* Spare MOD semantic */
|
||||
#else
|
||||
#define MOD_EXCLUSIVE (1<<13) /* Modify no overwrite on modified keys */
|
||||
#endif
|
||||
|
||||
/* Transport specific modifications to the operation */
|
||||
#define USE_DGRAM (1<<16) /* Use a datagram transport */
|
||||
#define NO_AUTHINFO (1<<17) /* Don't bother attaching auth info */
|
||||
|
||||
/*
|
||||
* Declarations for "standard" NIS+ tags
|
||||
* State variable tags have values 0 - 2047
|
||||
* Statistic tags have values 2048 - 65535
|
||||
* User Tags have values >2^16
|
||||
*/
|
||||
#define TAG_DEBUG 1 /* set debug level */
|
||||
#define TAG_STATS 2 /* Enable/disable statistics */
|
||||
#define TAG_GCACHE 3 /* Flush the Group Cache */
|
||||
#ifndef ORIGINAL_DECLS
|
||||
#define TAG_GCACHE_ALL TAG_GCACHE
|
||||
#endif
|
||||
#define TAG_DCACHE 4 /* Flush the directory cache */
|
||||
#ifndef ORIGINAL_DECLS
|
||||
#define TAG_DCACHE_ONE TAG_DCACHE
|
||||
#endif
|
||||
#define TAG_OCACHE 5 /* Flush the Object Cache */
|
||||
#define TAG_SECURE 6 /* Set the security level */
|
||||
#ifndef ORIGINAL_DECLS
|
||||
#define TAG_TCACHE_ONE 7 /* Flush the table cache */
|
||||
#define TAG_DCACHE_ALL 8 /* Flush entire directory cache */
|
||||
#define TAG_TCACHE_ALL 9 /* Flush entire table cache */
|
||||
#define TAG_GCACHE_ONE 10 /* Flush one group object */
|
||||
#define TAG_DCACHE_ONE_REFRESH 11 /* Flush and refresh one DO */
|
||||
#endif
|
||||
|
||||
#define TAG_OPSTATS 2048 /* NIS+ operations statistics */
|
||||
#define TAG_THREADS 2049 /* Child process/thread status */
|
||||
#define TAG_HEAP 2050 /* Heap usage statistics */
|
||||
#define TAG_UPDATES 2051 /* Updates to this service */
|
||||
#define TAG_VISIBLE 2052 /* First update that isn't replicated */
|
||||
#define TAG_S_DCACHE 2053 /* Directory cache statistics */
|
||||
#define TAG_S_OCACHE 2054 /* Object cache statistics */
|
||||
#define TAG_S_GCACHE 2055 /* Group cache statistics */
|
||||
#define TAG_S_STORAGE 2056 /* Group cache statistics */
|
||||
#define TAG_UPTIME 2057 /* Time that server has been up */
|
||||
#ifndef ORIGINAL_DECLS
|
||||
#define TAG_DIRLIST 2058 /* Dir served by this server */
|
||||
#define TAG_NISCOMPAT 2059 /* Whether supports NIS compat mode */
|
||||
#define TAG_DNSFORWARDING 2060 /* Whether DNS forwarding supported*/
|
||||
#define TAG_SECURITY_LEVEL 2061 /* Security level of the server */
|
||||
#define TAG_ROOTSERVER 2062 /* Whether root server */
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Declarations for the Group object flags. Currently
|
||||
* there are only 3.
|
||||
*/
|
||||
#define IMPMEM_GROUPS 1 /* Implicit Membership allowed */
|
||||
#define RECURS_GROUPS 2 /* Recursive Groups allowed */
|
||||
#define NEGMEM_GROUPS 4 /* Negative Groups allowed */
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* _RPCSVC_NIS_TAGS_H */
|
318
include/rpcsvc/nislib.h
Normal file
318
include/rpcsvc/nislib.h
Normal file
@ -0,0 +1,318 @@
|
||||
/*
|
||||
* 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.
|
||||
*
|
||||
* 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) 1991, Sun Microsystems Inc.
|
||||
*/
|
||||
|
||||
/*
|
||||
* This file contains the interfaces that are visible in the SunOS 5.x
|
||||
* implementation of NIS Plus. When using C++ the defined __cplusplus and
|
||||
* __STDC__ should both be true.
|
||||
*/
|
||||
|
||||
#ifndef _RPCSVC_NISLIB_H
|
||||
#define _RPCSVC_NISLIB_H
|
||||
|
||||
/* From: #pragma ident "@(#)nislib.h 1.16 94/05/03 SMI" */
|
||||
#pragma ident "$Id: nislib.h,v 1.3 1996/09/19 19:37:07 wpaul Exp wpaul $"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
struct signature {
|
||||
int signature_len;
|
||||
char *signature_val;
|
||||
};
|
||||
|
||||
#ifdef __STDC__
|
||||
extern void nis_freeresult(nis_result *);
|
||||
extern nis_result * nis_lookup(nis_name, u_long);
|
||||
extern nis_result * nis_list(nis_name, u_long,
|
||||
int (*)(nis_name, nis_object *, void *), void *);
|
||||
extern nis_result * nis_add(nis_name, nis_object *);
|
||||
extern nis_result * nis_remove(nis_name, nis_object *);
|
||||
extern nis_result * nis_modify(nis_name, nis_object *);
|
||||
|
||||
extern nis_result * nis_add_entry(nis_name, nis_object *, u_long);
|
||||
extern nis_result * nis_remove_entry(nis_name, nis_object *, u_long);
|
||||
extern nis_result * nis_modify_entry(nis_name, nis_object *, u_long);
|
||||
extern nis_result * nis_first_entry(nis_name);
|
||||
extern nis_result * nis_next_entry(nis_name, netobj *);
|
||||
|
||||
extern nis_error nis_mkdir(nis_name, nis_server *);
|
||||
extern nis_error nis_rmdir(nis_name, nis_server *);
|
||||
extern name_pos nis_dir_cmp(nis_name, nis_name);
|
||||
|
||||
extern nis_name * nis_getnames(nis_name);
|
||||
extern void nis_freenames(nis_name *);
|
||||
extern nis_name nis_domain_of(nis_name);
|
||||
extern nis_name nis_leaf_of(nis_name);
|
||||
extern nis_name nis_leaf_of_r(const nis_name, char *, size_t);
|
||||
extern nis_name nis_name_of(nis_name);
|
||||
extern nis_name nis_local_group(void);
|
||||
extern nis_name nis_local_directory(void);
|
||||
extern nis_name nis_local_principal(void);
|
||||
extern nis_name nis_local_host(void);
|
||||
|
||||
extern void nis_destroy_object(nis_object *);
|
||||
extern nis_object * nis_clone_object(nis_object *, nis_object *);
|
||||
extern void nis_print_object(nis_object *);
|
||||
|
||||
extern char * nis_sperrno(nis_error);
|
||||
extern void nis_perror(nis_error, char *);
|
||||
extern char * nis_sperror(nis_error, char *);
|
||||
extern void nis_lerror(nis_error, char *);
|
||||
|
||||
extern void nis_print_group_entry(nis_name);
|
||||
extern bool_t nis_ismember(nis_name, nis_name);
|
||||
extern nis_error nis_creategroup(nis_name, u_long);
|
||||
extern nis_error nis_destroygroup(nis_name);
|
||||
extern nis_error nis_addmember(nis_name, nis_name);
|
||||
extern nis_error nis_removemember(nis_name, nis_name);
|
||||
extern nis_error nis_verifygroup(nis_name);
|
||||
|
||||
extern void nis_freeservlist(nis_server **);
|
||||
extern nis_server ** nis_getservlist(nis_name);
|
||||
extern nis_error nis_stats(nis_server *, nis_tag *, int, nis_tag **);
|
||||
extern nis_error nis_servstate(nis_server *, nis_tag *, int, nis_tag **);
|
||||
extern void nis_freetags(nis_tag *, int);
|
||||
|
||||
extern nis_result * nis_checkpoint(nis_name);
|
||||
extern void nis_ping(nis_name, u_long, nis_object *);
|
||||
|
||||
/*
|
||||
* XXX: PLEASE NOTE THAT THE FOLLOWING FUNCTIONS ARE INTERNAL
|
||||
* TO NIS+ AND SHOULD NOT BE USED BY ANY APPLICATION PROGRAM.
|
||||
* THEIR SEMANTICS AND/OR SIGNATURE CAN CHANGE WITHOUT NOTICE.
|
||||
* SO, PLEASE DO NOT USE THEM. YOU ARE WARNED!!!!
|
||||
*/
|
||||
|
||||
extern char ** __break_name(nis_name, int *);
|
||||
extern int __name_distance(char **, char **);
|
||||
extern nis_result * nis_make_error(nis_error, u_long, u_long, u_long, u_long);
|
||||
extern nis_attr * __cvt2attr(int *, char **);
|
||||
extern void nis_free_request(ib_request *);
|
||||
extern nis_error nis_get_request(nis_name, nis_object *, netobj*, ib_request*);
|
||||
extern nis_object * nis_read_obj(char *);
|
||||
extern int nis_write_obj(char *, nis_object *);
|
||||
extern int nis_in_table(nis_name, NIS_HASH_TABLE *, int *);
|
||||
extern int nis_insert_item(NIS_HASH_ITEM *, NIS_HASH_TABLE *);
|
||||
extern NIS_HASH_ITEM * nis_find_item(nis_name, NIS_HASH_TABLE *);
|
||||
extern NIS_HASH_ITEM * nis_remove_item(nis_name, NIS_HASH_TABLE *);
|
||||
extern void nis_insert_name(nis_name, NIS_HASH_TABLE *);
|
||||
extern void nis_remove_name(nis_name, NIS_HASH_TABLE *);
|
||||
extern CLIENT * nis_make_rpchandle(nis_server *, int, u_long, u_long, u_long,
|
||||
int, int);
|
||||
extern void * nis_get_static_storage(struct nis_sdata *, u_long, u_long);
|
||||
extern char * nis_data(char *);
|
||||
extern void nis_print_rights(u_long);
|
||||
extern void nis_print_directory(directory_obj *);
|
||||
extern void nis_print_group(group_obj *);
|
||||
extern void nis_print_table(table_obj *);
|
||||
extern void nis_print_link(link_obj *);
|
||||
extern void nis_print_entry(entry_obj *);
|
||||
extern nis_object * nis_get_object(char *, char *, char *, u_long, u_long,
|
||||
zotypes);
|
||||
extern nis_server * __nis_init_callback(CLIENT *,
|
||||
int (*)(nis_name, nis_object *, void *), void *);
|
||||
extern int nis_getdtblsize(void);
|
||||
extern int __nis_run_callback(netobj *, u_long, struct timeval *, CLIENT *);
|
||||
|
||||
extern log_result *nis_dumplog(nis_server *, nis_name, u_long);
|
||||
extern log_result *nis_dump(nis_server *, nis_name,
|
||||
int (*)(nis_name, nis_object *, void *));
|
||||
|
||||
extern bool_t __do_ismember(nis_name, nis_name,
|
||||
nis_result *(*)(nis_name, u_long));
|
||||
extern nis_name __nis_map_group(nis_name);
|
||||
extern nis_name __nis_map_group_r(nis_name, char*, size_t);
|
||||
|
||||
extern nis_error __nis_CacheBind(char *, directory_obj *);
|
||||
extern nis_error __nis_CacheSearch(char *, directory_obj *);
|
||||
extern bool_t __nis_CacheRemoveEntry(directory_obj *);
|
||||
extern void __nis_CacheRestart(void);
|
||||
extern void __nis_CachePrint(void);
|
||||
extern void __nis_CacheDumpStatistics(void);
|
||||
extern bool_t writeColdStartFile(directory_obj *);
|
||||
|
||||
extern CLIENT * __get_ti_clnt(char *, CLIENT *, char **, pid_t *);
|
||||
extern int __strcmp_case_insens(char *, char *);
|
||||
extern int __strncmp_case_insens(char *, char *);
|
||||
|
||||
extern fd_result * nis_finddirectory(directory_obj *, nis_name);
|
||||
extern int __start_clock(int);
|
||||
extern u_long __stop_clock(int);
|
||||
|
||||
/*
|
||||
* This particular function is part of the FreeBSD NIS+ implementation
|
||||
* only. Ideally it should be somewhere else, but it is used by both
|
||||
* rpc.nisd and nis_cachemgr, and there aren't that many headers common
|
||||
* to both programs.
|
||||
*/
|
||||
|
||||
extern struct signature *__nis_calculate_encrypted_cksum(unsigned char *, unsigned int, char *, int);
|
||||
|
||||
#else
|
||||
|
||||
/* Non-prototype definitions (old fashioned C) */
|
||||
|
||||
extern void nis_freeresult();
|
||||
extern nis_result * nis_lookup();
|
||||
extern nis_result * nis_list();
|
||||
extern nis_result * nis_add();
|
||||
extern nis_result * nis_remove();
|
||||
extern nis_result * nis_modify();
|
||||
|
||||
extern nis_result * nis_add_entry();
|
||||
extern nis_result * nis_remove_entry();
|
||||
extern nis_result * nis_modify_entry();
|
||||
extern nis_result * nis_first_entry();
|
||||
extern nis_result * nis_next_entry();
|
||||
|
||||
extern nis_error nis_mkdir();
|
||||
extern nis_error nis_rmdir();
|
||||
extern name_pos nis_dir_cmp();
|
||||
|
||||
extern nis_name *nis_getnames();
|
||||
extern void nis_freenames();
|
||||
extern nis_name nis_domain_of();
|
||||
extern nis_name nis_leaf_of();
|
||||
extern nis_name nis_leaf_of_r();
|
||||
extern nis_name nis_name_of();
|
||||
extern nis_name nis_local_group();
|
||||
extern nis_name nis_local_directory();
|
||||
extern nis_name nis_local_principal();
|
||||
extern nis_name nis_local_host();
|
||||
|
||||
extern void nis_destroy_object();
|
||||
extern nis_object * nis_clone_object();
|
||||
extern void nis_print_object();
|
||||
|
||||
extern char * nis_sperrno();
|
||||
extern void nis_perror();
|
||||
extern char * nis_sperror();
|
||||
extern void nis_lerror();
|
||||
|
||||
extern void nis_print_group_entry();
|
||||
extern bool_t nis_ismember();
|
||||
extern nis_error nis_creategroup();
|
||||
extern nis_error nis_destroygroup();
|
||||
extern nis_error nis_addmember();
|
||||
extern nis_error nis_removemember();
|
||||
extern nis_error nis_verifygroup();
|
||||
|
||||
extern void nis_freeservlist();
|
||||
extern nis_server ** nis_getservlist();
|
||||
extern nis_error nis_stats();
|
||||
extern nis_error nis_servstate();
|
||||
extern void nis_freetags();
|
||||
|
||||
extern nis_result * nis_checkpoint();
|
||||
extern void nis_ping();
|
||||
|
||||
/*
|
||||
* XXX: PLEASE NOTE THAT THE FOLLOWING FUNCTIONS ARE INTERNAL
|
||||
* TO NIS+ AND SHOULD NOT BE USED BY ANY APPLICATION PROGRAM.
|
||||
* THEIR SEMANTICS AND/OR SIGNATURE CAN CHANGE WITHOUT NOTICE.
|
||||
* SO, PLEASE DO NOT USE THEM. YOU ARE WARNED!!!!
|
||||
*/
|
||||
extern char ** __break_name();
|
||||
extern int __name_distance();
|
||||
extern nis_result * nis_make_error();
|
||||
extern nis_attr * __cvt2attr();
|
||||
extern void nis_free_request();
|
||||
extern nis_error nis_get_request();
|
||||
extern nis_object * nis_read_obj();
|
||||
extern int nis_write_obj();
|
||||
extern int nis_in_table();
|
||||
extern int nis_insert_item();
|
||||
extern NIS_HASH_ITEM * nis_find_item();
|
||||
extern NIS_HASH_ITEM * nis_remove_item();
|
||||
extern void nis_insert_name();
|
||||
extern void nis_remove_name();
|
||||
extern CLIENT * nis_make_rpchandle();
|
||||
extern void * nis_get_static_storage();
|
||||
extern char * nis_data();
|
||||
|
||||
extern void nis_print_rights();
|
||||
extern void nis_print_directory();
|
||||
extern void nis_print_group();
|
||||
extern void nis_print_table();
|
||||
extern void nis_print_link();
|
||||
extern void nis_print_entry();
|
||||
extern nis_object * nis_get_object();
|
||||
|
||||
extern nis_server * __nis_init_callback();
|
||||
extern int nis_getdtblsize();
|
||||
extern int __nis_run_callback();
|
||||
|
||||
extern log_result * nis_dump();
|
||||
extern log_result * nis_dumplog();
|
||||
|
||||
extern bool_t __do_ismember();
|
||||
extern nis_name __nis_map_group();
|
||||
extern nis_name __nis_map_group_r();
|
||||
|
||||
|
||||
extern nis_error __nis_CacheBind();
|
||||
extern directory_obj * __nis_CacheSearch();
|
||||
extern bool_t __nis_CacheRemoveEntry();
|
||||
extern void __nis_CacheRestart();
|
||||
extern void __nis_CachePrint();
|
||||
extern void __nis_CacheDumpStatistics();
|
||||
extern bool_t writeColdStartFile();
|
||||
|
||||
extern CLIENT * __get_ti_clnt();
|
||||
extern int __strcmp_case_insens();
|
||||
extern int __strncmp_case_insens();
|
||||
|
||||
extern fd_result * nis_finddirectory();
|
||||
extern int __start_clock();
|
||||
extern u_long __stop_clock();
|
||||
|
||||
/*
|
||||
* This particular function is part of the FreeBSD NIS+ implementation
|
||||
* only. Ideally it should be somewhere else, but it is used by both
|
||||
* rpc.nisd and nis_cachemgr, and there aren't that many headers common
|
||||
* to both programs.
|
||||
*/
|
||||
|
||||
extern struct signature *__nis_calculate_encrypted_cksum();
|
||||
|
||||
#endif
|
||||
|
||||
#define NUL '\0'
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* _RPCSVC_NISLIB_H */
|
@ -12,7 +12,7 @@
|
||||
%#ifndef lint
|
||||
%/*static char sccsid[] = "from: @(#)nlm_prot.x 1.8 87/09/21 Copyr 1987 Sun Micro";*/
|
||||
%/*static char sccsid[] = "from: * @(#)nlm_prot.x 2.1 88/08/01 4.0 RPCSRC";*/
|
||||
%static char rcsid[] = "$Id: nlm_prot.x,v 1.1 1993/09/14 17:42:45 jtc Exp $";
|
||||
%static char rcsid[] = "$Id: nlm_prot.x,v 1.1 1994/08/04 19:01:48 wollman Exp $";
|
||||
%#endif /* not lint */
|
||||
#endif
|
||||
|
||||
|
285
include/rpcsvc/pmap_prot.x
Normal file
285
include/rpcsvc/pmap_prot.x
Normal file
@ -0,0 +1,285 @@
|
||||
%/*
|
||||
% * 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.
|
||||
% *
|
||||
% * 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) 1984,1989 by Sun Microsystems, Inc.
|
||||
% */
|
||||
|
||||
%/* from pmap_prot.x */
|
||||
|
||||
#ifdef RPC_HDR
|
||||
%
|
||||
%#pragma ident "@(#)pmap_prot.x 1.6 94/04/29 SMI"
|
||||
%
|
||||
%#ifndef _KERNEL
|
||||
%
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Port Mapper Protocol Specification (in RPC Language)
|
||||
* derived from RFC 1057
|
||||
*/
|
||||
|
||||
%/*
|
||||
% * Protocol for the local binder service, or pmap.
|
||||
% *
|
||||
% * Copyright (C) 1984, Sun Microsystems, Inc.
|
||||
% *
|
||||
% * The following procedures are supported by the protocol:
|
||||
% *
|
||||
% * PMAPPROC_NULL() returns ()
|
||||
% * takes nothing, returns nothing
|
||||
% *
|
||||
% * PMAPPROC_SET(struct pmap) returns (bool_t)
|
||||
% * TRUE is success, FALSE is failure. Registers the tuple
|
||||
% * [prog, vers, prot, port].
|
||||
% *
|
||||
% * PMAPPROC_UNSET(struct pmap) returns (bool_t)
|
||||
% * TRUE is success, FALSE is failure. Un-registers pair
|
||||
% * [prog, vers]. prot and port are ignored.
|
||||
% *
|
||||
% * PMAPPROC_GETPORT(struct pmap) returns (long unsigned).
|
||||
% * 0 is failure. Otherwise returns the port number where the pair
|
||||
% * [prog, vers] is registered. It may lie!
|
||||
% *
|
||||
% * PMAPPROC_DUMP() RETURNS (struct pmaplist_ptr)
|
||||
% *
|
||||
% * PMAPPROC_CALLIT(unsigned, unsigned, unsigned, string<>)
|
||||
% * RETURNS (port, string<>);
|
||||
% * usage: encapsulatedresults = PMAPPROC_CALLIT(prog, vers, proc,
|
||||
% * encapsulatedargs);
|
||||
% * Calls the procedure on the local machine. If it is not registered,
|
||||
% * this procedure is quite; ie it does not return error information!!!
|
||||
% * This procedure only is supported on rpc/udp and calls via
|
||||
% * rpc/udp. This routine only passes null authentication parameters.
|
||||
% * This file has no interface to xdr routines for PMAPPROC_CALLIT.
|
||||
% *
|
||||
% * The service supports remote procedure calls on udp/ip or tcp/ip socket 111.
|
||||
% */
|
||||
%
|
||||
const PMAPPORT = 111; /* portmapper port number */
|
||||
%
|
||||
%
|
||||
%/*
|
||||
% * A mapping of (program, version, protocol) to port number
|
||||
% */
|
||||
|
||||
struct pmap {
|
||||
unsigned long pm_prog;
|
||||
unsigned long pm_vers;
|
||||
unsigned long pm_prot;
|
||||
unsigned long pm_port;
|
||||
};
|
||||
#ifdef RPC_HDR
|
||||
%
|
||||
%typedef pmap PMAP;
|
||||
%
|
||||
#endif
|
||||
%
|
||||
%/*
|
||||
% * Supported values for the "prot" field
|
||||
% */
|
||||
%
|
||||
const PMAP_IPPROTO_TCP = 6; /* protocol number for TCP/IP */
|
||||
const PMAP_IPPROTO_UDP = 17; /* protocol number for UDP/IP */
|
||||
%
|
||||
%
|
||||
%/*
|
||||
% * A list of mappings
|
||||
% *
|
||||
% * Below are two definitions for the pmaplist structure. This is done because
|
||||
% * xdr_pmaplist() is specified to take a struct pmaplist **, rather than a
|
||||
% * struct pmaplist * that rpcgen would produce. One version of the pmaplist
|
||||
% * structure (actually called pm__list) is used with rpcgen, and the other is
|
||||
% * defined only in the header file for compatibility with the specified
|
||||
% * interface.
|
||||
% */
|
||||
|
||||
struct pm__list {
|
||||
pmap pml_map;
|
||||
struct pm__list *pml_next;
|
||||
};
|
||||
|
||||
typedef pm__list *pmaplist_ptr; /* results of PMAPPROC_DUMP */
|
||||
|
||||
#ifdef RPC_HDR
|
||||
%
|
||||
%typedef struct pm__list pmaplist;
|
||||
%typedef struct pm__list PMAPLIST;
|
||||
%
|
||||
%#ifndef __cplusplus
|
||||
%struct pmaplist {
|
||||
% PMAP pml_map;
|
||||
% struct pmaplist *pml_next;
|
||||
%};
|
||||
%#endif
|
||||
%
|
||||
%#ifdef __cplusplus
|
||||
%extern "C" {
|
||||
%#endif
|
||||
%#ifdef __STDC__
|
||||
%extern bool_t xdr_pmaplist(XDR *, pmaplist**);
|
||||
%#else /* K&R C */
|
||||
%bool_t xdr_pmaplist();
|
||||
%#endif
|
||||
%#ifdef __cplusplus
|
||||
%}
|
||||
%#endif
|
||||
%
|
||||
#endif
|
||||
|
||||
%
|
||||
%/*
|
||||
% * Arguments to callit
|
||||
% */
|
||||
|
||||
struct rmtcallargs {
|
||||
unsigned long prog;
|
||||
unsigned long vers;
|
||||
unsigned long proc;
|
||||
opaque args<>;
|
||||
};
|
||||
#ifdef RPC_HDR
|
||||
%
|
||||
%/*
|
||||
% * Client-side only representation of rmtcallargs structure.
|
||||
% *
|
||||
% * The routine that XDRs the rmtcallargs structure must deal with the
|
||||
% * opaque arguments in the "args" structure. xdr_rmtcall_args() needs to be
|
||||
% * passed the XDR routine that knows the args' structure. This routine
|
||||
% * doesn't need to go over-the-wire (and it wouldn't make sense anyway) since
|
||||
% * the application being called knows the args structure already. So we use a
|
||||
% * different "XDR" structure on the client side, p_rmtcallargs, which includes
|
||||
% * the args' XDR routine.
|
||||
% */
|
||||
%struct p_rmtcallargs {
|
||||
% u_long prog;
|
||||
% u_long vers;
|
||||
% u_long proc;
|
||||
% struct {
|
||||
% u_int args_len;
|
||||
% char *args_val;
|
||||
% } args;
|
||||
% xdrproc_t xdr_args; /* encodes args */
|
||||
%};
|
||||
%
|
||||
#endif /* def RPC_HDR */
|
||||
%
|
||||
%
|
||||
%/*
|
||||
% * Results of callit
|
||||
% */
|
||||
|
||||
struct rmtcallres {
|
||||
unsigned long port;
|
||||
opaque res<>;
|
||||
};
|
||||
#ifdef RPC_HDR
|
||||
%
|
||||
%/*
|
||||
% * Client-side only representation of rmtcallres structure.
|
||||
% */
|
||||
%struct p_rmtcallres {
|
||||
% u_long port;
|
||||
% struct {
|
||||
% u_int res_len;
|
||||
% char *res_val;
|
||||
% } res;
|
||||
% xdrproc_t xdr_res; /* decodes res */
|
||||
%};
|
||||
%
|
||||
#endif /* def RPC_HDR */
|
||||
|
||||
/*
|
||||
* Port mapper procedures
|
||||
*/
|
||||
|
||||
program PMAPPROG {
|
||||
version PMAPVERS {
|
||||
void
|
||||
PMAPPROC_NULL(void) = 0;
|
||||
|
||||
bool
|
||||
PMAPPROC_SET(pmap) = 1;
|
||||
|
||||
bool
|
||||
PMAPPROC_UNSET(pmap) = 2;
|
||||
|
||||
unsigned long
|
||||
PMAPPROC_GETPORT(pmap) = 3;
|
||||
|
||||
pmaplist_ptr
|
||||
PMAPPROC_DUMP(void) = 4;
|
||||
|
||||
rmtcallres
|
||||
PMAPPROC_CALLIT(rmtcallargs) = 5;
|
||||
} = 2;
|
||||
} = 100000;
|
||||
%
|
||||
#ifdef RPC_HDR
|
||||
%#define PMAPVERS_PROTO ((u_long)2)
|
||||
%#define PMAPVERS_ORIG ((u_long)1)
|
||||
%
|
||||
%#else /* ndef _KERNEL */
|
||||
%
|
||||
%#include <rpc/pmap_rmt.h>
|
||||
%
|
||||
%#ifdef __cplusplus
|
||||
%extern "C" {
|
||||
%#endif
|
||||
%
|
||||
%#define PMAPPORT 111
|
||||
%
|
||||
%struct pmap {
|
||||
% long unsigned pm_prog;
|
||||
% long unsigned pm_vers;
|
||||
% long unsigned pm_prot;
|
||||
% long unsigned pm_port;
|
||||
%};
|
||||
%typedef struct pmap PMAP;
|
||||
%#ifdef __STDC__
|
||||
%extern bool_t xdr_pmap (XDR *, struct pmap *);
|
||||
%#else
|
||||
%extern bool_t xdr_pmap ();
|
||||
%#endif
|
||||
%
|
||||
%struct pmaplist {
|
||||
% struct pmap pml_map;
|
||||
% struct pmaplist *pml_next;
|
||||
%};
|
||||
%typedef struct pmaplist PMAPLIST;
|
||||
%typedef struct pmaplist *pmaplist_ptr;
|
||||
%
|
||||
%
|
||||
%#ifdef __cplusplus
|
||||
%}
|
||||
%#endif
|
||||
%
|
||||
%#endif /* ndef _KERNEL */
|
||||
#endif
|
||||
|
@ -35,7 +35,7 @@
|
||||
%#ifndef lint
|
||||
%/*static char sccsid[] = "from: @(#)rex.x 1.3 87/09/18 Copyr 1987 Sun Micro";*/
|
||||
%/*static char sccsid[] = "from: @(#)rex.x 2.1 88/08/01 4.0 RPCSRC";*/
|
||||
%static char rcsid[] = "$Id: rex.x,v 1.1 1993/09/14 17:42:46 jtc Exp $";
|
||||
%static char rcsid[] = "$Id: rex.x,v 1.1 1994/08/04 19:01:49 wollman Exp $";
|
||||
%#endif /* not lint */
|
||||
#endif
|
||||
|
||||
|
@ -35,7 +35,7 @@
|
||||
%#ifndef lint
|
||||
%/*static char sccsid[] = "from: @(#)rnusers.x 1.2 87/09/20 Copyr 1987 Sun Micro";*/
|
||||
%/*static char sccsid[] = "from: @(#)rnusers.x 2.1 88/08/01 4.0 RPCSRC";*/
|
||||
%static char rcsid[] = "$Id: rnusers.x,v 1.1 1993/09/14 17:42:46 jtc Exp $";
|
||||
%static char rcsid[] = "$Id: rnusers.x,v 1.1 1994/08/04 19:01:50 wollman Exp $";
|
||||
%#endif /* not lint */
|
||||
#endif
|
||||
|
||||
@ -59,6 +59,21 @@ typedef utmp utmparr<MAXUSERS>;
|
||||
|
||||
typedef utmpidle utmpidlearr<MAXUSERS>;
|
||||
|
||||
const RUSERS_MAXUSERLEN = 32;
|
||||
const RUSERS_MAXLINELEN = 32;
|
||||
const RUSERS_MAXHOSTLEN = 257;
|
||||
|
||||
struct rusers_utmp {
|
||||
string ut_user<RUSERS_MAXUSERLEN>; /* aka ut_name */
|
||||
string ut_line<RUSERS_MAXLINELEN>; /* device */
|
||||
string ut_host<RUSERS_MAXHOSTLEN>; /* host user logged on from */
|
||||
int ut_type; /* type of entry */
|
||||
int ut_time; /* time entry was made */
|
||||
unsigned int ut_idle; /* minutes idle */
|
||||
};
|
||||
|
||||
typedef rusers_utmp utmp_array<>;
|
||||
|
||||
program RUSERSPROG {
|
||||
/*
|
||||
* Old version does not include idle information
|
||||
@ -87,5 +102,21 @@ program RUSERSPROG {
|
||||
utmpidlearr
|
||||
RUSERSPROC_ALLNAMES(void) = 3;
|
||||
} = 2;
|
||||
|
||||
/*
|
||||
* Version 3 rusers procedures (from Solaris).
|
||||
* (Thanks a lot Sun.)
|
||||
*/
|
||||
version RUSERSVERS_3 {
|
||||
int
|
||||
RUSERSPROC_NUM(void) = 1;
|
||||
|
||||
utmp_array
|
||||
RUSERSPROC_NAMES(void) = 2;
|
||||
|
||||
utmp_array
|
||||
RUSERSPROC_ALLNAMES(void) = 3;
|
||||
} = 3;
|
||||
|
||||
} = 100002;
|
||||
|
||||
|
||||
|
@ -7,7 +7,7 @@
|
||||
%#ifndef lint
|
||||
%/*static char sccsid[] = "from: @(#)rquota.x 1.2 87/09/20 Copyr 1987 Sun Micro";*/
|
||||
%/*static char sccsid[] = "from: @(#)rquota.x 2.1 88/08/01 4.0 RPCSRC";*/
|
||||
%static char rcsid[] = "$Id: rquota.x,v 1.1 1993/09/14 17:42:49 jtc Exp $";
|
||||
%static char rcsid[] = "$Id: rquota.x,v 1.1 1994/08/04 19:01:50 wollman Exp $";
|
||||
%#endif /* not lint */
|
||||
#endif
|
||||
|
||||
|
@ -47,7 +47,7 @@
|
||||
%#ifndef lint
|
||||
%/*static char sccsid[] = "from: @(#)rstat.x 1.2 87/09/18 Copyr 1987 Sun Micro";*/
|
||||
%/*static char sccsid[] = "from: @(#)rstat.x 2.2 88/08/01 4.0 RPCSRC";*/
|
||||
%static char rcsid[] = "$Id: rstat.x,v 1.3 1993/11/30 20:31:41 ats Exp $";
|
||||
%static char rcsid[] = "$Id: rstat.x,v 1.1 1994/08/04 19:01:51 wollman Exp $";
|
||||
%#endif /* not lint */
|
||||
|
||||
#endif /* def RPC_HDR */
|
||||
|
@ -1,46 +1,57 @@
|
||||
/*
|
||||
* Copyright (c) 1993 Christopher G. Demetriou
|
||||
* 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. The name of the author may not be used to endorse or promote
|
||||
* products derived from this software without specific prior written
|
||||
* permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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.
|
||||
*/
|
||||
%/*
|
||||
% * 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
|
||||
% */
|
||||
|
||||
/*
|
||||
* rpc protocol definition for (remote) wall protocol
|
||||
*
|
||||
* this has to be compatible with sun's definition
|
||||
*/
|
||||
%/*
|
||||
% * Copyright (c) 1984, 1990 by Sun Microsystems, Inc.
|
||||
% */
|
||||
%
|
||||
%/* from @(#)rwall.x 1.6 91/03/11 TIRPC 1.0 */
|
||||
|
||||
#ifndef RPC_HDR
|
||||
%#ifndef lint
|
||||
%static char rcsid[] = "$Id: rwall.x,v 1.1 1993/09/14 17:42:50 jtc Exp $";
|
||||
%#endif /* not lint */
|
||||
#ifdef RPC_HDR
|
||||
%
|
||||
%#ifndef _rpcsvc_rwall_h
|
||||
%#define _rpcsvc_rwall_h
|
||||
%
|
||||
%typedef char *wrapstring;
|
||||
%
|
||||
#endif
|
||||
|
||||
program WALLPROG {
|
||||
version WALLVERS {
|
||||
void WALLPROC_WALL(string) = 2;
|
||||
void
|
||||
WALLPROC_WALL(wrapstring) = 2;
|
||||
|
||||
} = 1;
|
||||
} = 100008;
|
||||
|
||||
#ifdef RPC_HDR
|
||||
%
|
||||
%#endif /* ! _rpcsvc_rwall_h */
|
||||
#endif
|
||||
|
@ -37,7 +37,7 @@
|
||||
%#ifndef lint
|
||||
%/*static char sccsid[] = "from: @(#)sm_inter.x 1.7 87/06/24 Copyr 1987 Sun Micro";*/
|
||||
%/*static char sccsid[] = "from: @(#)sm_inter.x 2.2 88/08/01 4.0 RPCSRC";*/
|
||||
%static char rcsid[] = "$Id: sm_inter.x,v 1.1 1993/09/14 17:42:51 jtc Exp $";
|
||||
%static char rcsid[] = "$Id: sm_inter.x,v 1.1 1994/08/04 19:01:53 wollman Exp $";
|
||||
%#endif /* not lint */
|
||||
#endif
|
||||
|
||||
|
@ -36,7 +36,7 @@
|
||||
%#ifndef lint
|
||||
%/*static char sccsid[] = "from: @(#)spray.x 1.2 87/09/18 Copyr 1987 Sun Micro";*/
|
||||
%/*static char sccsid[] = "from: @(#)spray.x 2.1 88/08/01 4.0 RPCSRC";*/
|
||||
%static char rcsid[] = "$Id: spray.x,v 1.1 1993/09/14 17:42:52 jtc Exp $";
|
||||
%static char rcsid[] = "$Id: spray.x,v 1.1 1994/08/04 19:01:54 wollman Exp $";
|
||||
%#endif /* not lint */
|
||||
#endif
|
||||
|
||||
|
@ -34,7 +34,7 @@
|
||||
#ifndef RPC_HDR
|
||||
%#ifndef lint
|
||||
%/*static char sccsid[] = "from: @(#)yp.x 2.1 88/08/01 4.0 RPCSRC";*/
|
||||
%static char rcsid[] = "$Id: yp.x,v 1.1 1993/09/14 17:42:53 jtc Exp $";
|
||||
%static char rcsid[] = "$Id: yp.x,v 1.5 1996/02/26 02:22:53 wpaul Exp $";
|
||||
%#endif /* not lint */
|
||||
#endif
|
||||
|
||||
@ -119,8 +119,13 @@ struct ypresp_val {
|
||||
|
||||
struct ypresp_key_val {
|
||||
ypstat stat;
|
||||
#ifdef STUPID_SUN_BUG /* These are backwards */
|
||||
keydat key;
|
||||
valdat val;
|
||||
#else
|
||||
valdat val;
|
||||
keydat key;
|
||||
#endif
|
||||
};
|
||||
|
||||
|
||||
@ -219,10 +224,79 @@ struct ypbind_setdom {
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
* NIS v1 support for backwards compatibility
|
||||
*/
|
||||
enum ypreqtype {
|
||||
YPREQ_KEY = 1,
|
||||
YPREQ_NOKEY = 2,
|
||||
YPREQ_MAP_PARMS = 3
|
||||
};
|
||||
|
||||
enum ypresptype {
|
||||
YPRESP_VAL = 1,
|
||||
YPRESP_KEY_VAL = 2,
|
||||
YPRESP_MAP_PARMS = 3
|
||||
};
|
||||
|
||||
union yprequest switch (ypreqtype yp_reqtype) {
|
||||
case YPREQ_KEY:
|
||||
ypreq_key yp_req_keytype;
|
||||
case YPREQ_NOKEY:
|
||||
ypreq_nokey yp_req_nokeytype;
|
||||
case YPREQ_MAP_PARMS:
|
||||
ypmap_parms yp_req_map_parmstype;
|
||||
};
|
||||
|
||||
union ypresponse switch (ypresptype yp_resptype) {
|
||||
case YPRESP_VAL:
|
||||
ypresp_val yp_resp_valtype;
|
||||
case YPRESP_KEY_VAL:
|
||||
ypresp_key_val yp_resp_key_valtype;
|
||||
case YPRESP_MAP_PARMS:
|
||||
ypmap_parms yp_resp_map_parmstype;
|
||||
};
|
||||
|
||||
#if !defined(YPBIND_ONLY) && !defined(YPPUSH_ONLY)
|
||||
/*
|
||||
* YP access protocol
|
||||
*/
|
||||
program YPPROG {
|
||||
/*
|
||||
* NIS v1 support for backwards compatibility
|
||||
*/
|
||||
version YPOLDVERS {
|
||||
void
|
||||
YPOLDPROC_NULL(void) = 0;
|
||||
|
||||
bool
|
||||
YPOLDPROC_DOMAIN(domainname) = 1;
|
||||
|
||||
bool
|
||||
YPOLDPROC_DOMAIN_NONACK(domainname) = 2;
|
||||
|
||||
ypresponse
|
||||
YPOLDPROC_MATCH(yprequest) = 3;
|
||||
|
||||
ypresponse
|
||||
YPOLDPROC_FIRST(yprequest) = 4;
|
||||
|
||||
ypresponse
|
||||
YPOLDPROC_NEXT(yprequest) = 5;
|
||||
|
||||
ypresponse
|
||||
YPOLDPROC_POLL(yprequest) = 6;
|
||||
|
||||
ypresponse
|
||||
YPOLDPROC_PUSH(yprequest) = 7;
|
||||
|
||||
ypresponse
|
||||
YPOLDPROC_PULL(yprequest) = 8;
|
||||
|
||||
ypresponse
|
||||
YPOLDPROC_GET(yprequest) = 9;
|
||||
} = 1;
|
||||
|
||||
version YPVERS {
|
||||
void
|
||||
YPPROC_NULL(void) = 0;
|
||||
@ -237,8 +311,11 @@ program YPPROG {
|
||||
YPPROC_MATCH(ypreq_key) = 3;
|
||||
|
||||
ypresp_key_val
|
||||
#ifdef STUPID_SUN_BUG /* should be ypreq_nokey */
|
||||
YPPROC_FIRST(ypreq_key) = 4;
|
||||
|
||||
#else
|
||||
YPPROC_FIRST(ypreq_nokey) = 4;
|
||||
#endif
|
||||
ypresp_key_val
|
||||
YPPROC_NEXT(ypreq_key) = 5;
|
||||
|
||||
@ -261,8 +338,8 @@ program YPPROG {
|
||||
YPPROC_MAPLIST(domainname) = 11;
|
||||
} = 2;
|
||||
} = 100004;
|
||||
|
||||
|
||||
#endif
|
||||
#if !defined(YPSERV_ONLY) && !defined(YPBIND_ONLY)
|
||||
/*
|
||||
* YPPUSHPROC_XFRRESP is the callback routine for result of YPPROC_XFR
|
||||
*/
|
||||
@ -270,13 +347,17 @@ program YPPUSH_XFRRESPPROG {
|
||||
version YPPUSH_XFRRESPVERS {
|
||||
void
|
||||
YPPUSHPROC_NULL(void) = 0;
|
||||
|
||||
#ifdef STUPID_SUN_BUG /* argument and return value are backwards */
|
||||
yppushresp_xfr
|
||||
YPPUSHPROC_XFRRESP(void) = 1;
|
||||
#else
|
||||
void
|
||||
YPPUSHPROC_XFRRESP(yppushresp_xfr) = 1;
|
||||
#endif
|
||||
} = 1;
|
||||
} = 0x40000000; /* transient: could be anything up to 0x5fffffff */
|
||||
|
||||
|
||||
#endif
|
||||
#if !defined(YPSERV_ONLY) && !defined(YPPUSH_ONLY)
|
||||
/*
|
||||
* YP binding protocol
|
||||
*/
|
||||
@ -293,4 +374,4 @@ program YPBINDPROG {
|
||||
} = 2;
|
||||
} = 100007;
|
||||
|
||||
|
||||
#endif
|
||||
|
@ -26,17 +26,17 @@
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* $Id: yp_prot.h,v 1.1 1993/09/14 17:42:54 jtc Exp $
|
||||
* $Id: yp_prot.h,v 1.4 1996/12/30 14:01:08 peter Exp $
|
||||
*/
|
||||
|
||||
#ifndef _YP_PROT_H_
|
||||
#define _YP_PROT_H_
|
||||
#ifndef _RPCSVC_YP_PROT_H_
|
||||
#define _RPCSVC_YP_PROT_H_
|
||||
|
||||
/*
|
||||
* YPSERV PROTOCOL:
|
||||
*
|
||||
*
|
||||
* ypserv supports the following procedures:
|
||||
*
|
||||
*
|
||||
* YPPROC_NULL takes (void), returns (void).
|
||||
* called to check if server is alive.
|
||||
* YPPROC_DOMAIN takes (char *), returns (bool_t).
|
||||
@ -72,25 +72,6 @@ typedef u_int bool;
|
||||
#define BOOL_DEFINED
|
||||
#endif
|
||||
|
||||
bool_t xdr_datum();
|
||||
bool_t xdr_ypdomain_wrap_string();
|
||||
bool_t xdr_ypmap_wrap_string();
|
||||
bool_t xdr_ypreq_key();
|
||||
bool_t xdr_ypreq_nokey();
|
||||
bool_t xdr_ypreq_xfr();
|
||||
bool_t xdr_ypresp_val();
|
||||
bool_t xdr_ypresp_key_val();
|
||||
bool_t xdr_ypbind_resp();
|
||||
bool_t xdr_ypbind_setdom();
|
||||
bool_t xdr_yp_inaddr();
|
||||
bool_t xdr_ypmap_parms();
|
||||
bool_t xdr_ypowner_wrap_string();
|
||||
bool_t xdr_yppushresp_xfr();
|
||||
bool_t xdr_ypresp_order();
|
||||
bool_t xdr_ypresp_master();
|
||||
bool_t xdr_ypall();
|
||||
bool_t xdr_ypresp_maplist();
|
||||
|
||||
/* Program and version symbols, magic numbers */
|
||||
|
||||
#define YPPROG ((u_long)100004)
|
||||
@ -209,7 +190,7 @@ struct ypresp_maplist {
|
||||
* Users of the ypclnt package (or of this protocol) don't HAVE to know about
|
||||
* it, but it must be available to users because _yp_dobind is a public
|
||||
* interface."
|
||||
*
|
||||
*
|
||||
* This is totally bogus! Nowhere else does Sun state that _yp_dobind() is
|
||||
* a public interface, and I don't know any reason anyone would want to call
|
||||
* it. But, just in case anyone does actually expect it to be available..
|
||||
@ -228,7 +209,7 @@ struct dom_binding {
|
||||
|
||||
/*
|
||||
* YPBIND PROTOCOL:
|
||||
*
|
||||
*
|
||||
* ypbind supports the following procedures:
|
||||
*
|
||||
* YPBINDPROC_NULL takes (void), returns (void).
|
||||
@ -239,7 +220,7 @@ struct dom_binding {
|
||||
* YPBINDPROC_SETDOM takes (struct ypbind_setdom), returns (void).
|
||||
* used by ypset.
|
||||
*/
|
||||
|
||||
|
||||
#define YPBINDPROG ((u_long)100007)
|
||||
#define YPBINDVERS ((u_long)2)
|
||||
#define YPBINDVERS_ORIG ((u_long)1)
|
||||
@ -287,15 +268,15 @@ struct ypbind_setdom {
|
||||
|
||||
/*
|
||||
* YPPUSH PROTOCOL:
|
||||
*
|
||||
*
|
||||
* Sun says:
|
||||
* "Protocol between clients (ypxfr, only) and yppush
|
||||
* yppush speaks a protocol in the transient range, which
|
||||
* is supplied to ypxfr as a command-line parameter when it
|
||||
* is activated by ypserv."
|
||||
*
|
||||
* This protocol is not implimented, naturally, because this YP
|
||||
* implimentation only does the client side.
|
||||
*
|
||||
* This protocol is not implemented, naturally, because this YP
|
||||
* implementation only does the client side.
|
||||
*/
|
||||
#define YPPUSHVERS ((u_long)1)
|
||||
#define YPPUSHVERS_ORIG ((u_long)1)
|
||||
@ -314,7 +295,7 @@ struct yppushresp_xfr {
|
||||
#define YPPUSH_AGE ((long)2) /* Master's version not newer */
|
||||
#define YPPUSH_NOMAP ((long)-1) /* Can't find server for map */
|
||||
#define YPPUSH_NODOM ((long)-2) /* Domain not supported */
|
||||
#define YPPUSH_RSRC ((long)-3) /* Local resouce alloc failure */
|
||||
#define YPPUSH_RSRC ((long)-3) /* Local resource alloc failure */
|
||||
#define YPPUSH_RPC ((long)-4) /* RPC failure talking to server */
|
||||
#define YPPUSH_MADDR ((long)-5) /* Can't get master address */
|
||||
#define YPPUSH_YPERR ((long)-6) /* YP server/map db error */
|
||||
@ -327,4 +308,22 @@ struct yppushresp_xfr {
|
||||
#define YPPUSH_XFRERR ((long)-13) /* ypxfr error */
|
||||
#define YPPUSH_REFUSED ((long)-14) /* Transfer request refused by ypserv */
|
||||
|
||||
#endif /* _YP_PROT_H_ */
|
||||
struct inaddr;
|
||||
__BEGIN_DECLS
|
||||
bool_t xdr_datum __P((XDR *, datum *));
|
||||
bool_t xdr_ypreq_key __P((XDR *, struct ypreq_key *));
|
||||
bool_t xdr_ypreq_nokey __P((XDR *, struct ypreq_nokey *));
|
||||
bool_t xdr_ypreq_xfr __P((XDR *, struct ypreq_xfr *));
|
||||
bool_t xdr_ypresp_val __P((XDR *, struct ypresp_val *));
|
||||
bool_t xdr_ypresp_key_val __P((XDR *, struct ypresp_key_val *));
|
||||
bool_t xdr_ypbind_resp __P((XDR *, struct ypbind_resp *));
|
||||
bool_t xdr_ypbind_setdom __P((XDR *, struct ypbind_setdom *));
|
||||
bool_t xdr_yp_inaddr __P((XDR *, struct inaddr *));
|
||||
bool_t xdr_ypmap_parms __P((XDR *, struct ypmap_parms *));
|
||||
bool_t xdr_yppushresp_xfr __P((XDR *, struct yppushresp_xfr *));
|
||||
bool_t xdr_ypresp_order __P((XDR *, struct ypresp_order *));
|
||||
bool_t xdr_ypresp_master __P((XDR *, struct ypresp_master *));
|
||||
bool_t xdr_ypresp_maplist __P((XDR *, struct ypresp_maplist *));
|
||||
__END_DECLS
|
||||
|
||||
#endif /* _RPCSVC_YP_PROT_H_ */
|
||||
|
@ -26,11 +26,11 @@
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* $Id: ypclnt.h,v 1.1 1993/09/14 17:42:54 jtc Exp $
|
||||
* $Id: ypclnt.h,v 1.4 1996/12/30 14:01:12 peter Exp $
|
||||
*/
|
||||
|
||||
#ifndef _YPCLNT_H_
|
||||
#define _YPCLNT_H_
|
||||
#ifndef _RPCSVC_YPCLNT_H_
|
||||
#define _RPCSVC_YPCLNT_H_
|
||||
|
||||
#define YPERR_BADARGS 1 /* args to function are bad */
|
||||
#define YPERR_RPC 2 /* RPC failure */
|
||||
@ -56,12 +56,14 @@
|
||||
#define YPOP_INSERT 2 /* add, do not change */
|
||||
#define YPOP_DELETE 3 /* delete this entry */
|
||||
#define YPOP_STORE 4 /* add, or change */
|
||||
|
||||
|
||||
struct ypall_callback {
|
||||
int (*foreach)(); /* return non-0 to stop getting called */
|
||||
/* return non-0 to stop getting called */
|
||||
int (*foreach) __P((u_long, char *, int, char *, int, void *));
|
||||
char *data; /* opaque pointer for use of callback fn */
|
||||
};
|
||||
|
||||
__BEGIN_DECLS
|
||||
int yp_bind __P((char *dom));
|
||||
int _yp_dobind __P((char *dom, struct dom_binding **ypdb));
|
||||
void yp_unbind __P((char *dom));
|
||||
@ -80,7 +82,9 @@ int yp_order __P((char *indomain, char *inmap, int *outorder));
|
||||
int yp_all __P((char *indomain, char *inmap,
|
||||
struct ypall_callback *incallback));
|
||||
char * yperr_string __P((int incode));
|
||||
char * ypbinderr_string __P((int incode));
|
||||
int ypprot_err __P((unsigned int incode));
|
||||
__END_DECLS
|
||||
|
||||
#endif /* _YPCLNT_H_ */
|
||||
#endif /* _RPCSVC_YPCLNT_H_ */
|
||||
|
||||
|
@ -36,7 +36,7 @@
|
||||
%#ifndef lint
|
||||
%/*static char sccsid[] = "from: @(#)yppasswd.x 1.1 87/04/13 Copyr 1987 Sun Micro";*/
|
||||
%/*static char sccsid[] = "from: @(#)yppasswd.x 2.1 88/08/01 4.0 RPCSRC";*/
|
||||
%static char rcsid[] = "$Id: yppasswd.x,v 1.1 1993/09/14 17:42:55 jtc Exp $";
|
||||
%static char rcsid[] = "$Id: yppasswd.x,v 1.1 1994/08/04 19:01:57 wollman Exp $";
|
||||
%#endif /* not lint */
|
||||
#endif
|
||||
|
||||
@ -67,3 +67,8 @@ struct yppasswd {
|
||||
};
|
||||
|
||||
|
||||
#ifdef RPC_HDR
|
||||
%#include <sys/cdefs.h>
|
||||
%extern int _yppasswd __P(( char * , struct x_passwd * ));
|
||||
%#define yppasswd(x,y) _yppasswd(x,y)
|
||||
#endif
|
||||
|
87
include/rpcsvc/ypupdate_prot.x
Normal file
87
include/rpcsvc/ypupdate_prot.x
Normal file
@ -0,0 +1,87 @@
|
||||
%/*
|
||||
% * 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, 1990 by Sun Microsystems, Inc.
|
||||
% */
|
||||
%
|
||||
%/* from @(#)ypupdate_prot.x 1.3 91/03/11 TIRPC 1.0 */
|
||||
#ifndef RPC_HDR
|
||||
%#ifndef lint
|
||||
%static const char rcsid[] = "$Id$";
|
||||
%#endif
|
||||
#endif
|
||||
%
|
||||
%/*
|
||||
% * Compiled from ypupdate_prot.x using rpcgen
|
||||
% * This is NOT source code!
|
||||
% * DO NOT EDIT THIS FILE!
|
||||
% */
|
||||
|
||||
/*
|
||||
* YP update service protocol
|
||||
*/
|
||||
#ifdef RPC_HDR
|
||||
%
|
||||
%#ifndef _rpcsvc_ypupdate_prot_h
|
||||
%#define _rpcsvc_ypupdate_prot_h
|
||||
%
|
||||
#endif
|
||||
|
||||
const MAXMAPNAMELEN = 255;
|
||||
const MAXYPDATALEN = 1023;
|
||||
const MAXERRMSGLEN = 255;
|
||||
|
||||
program YPU_PROG {
|
||||
version YPU_VERS {
|
||||
u_int YPU_CHANGE(ypupdate_args) = 1;
|
||||
u_int YPU_INSERT(ypupdate_args) = 2;
|
||||
u_int YPU_DELETE(ypdelete_args) = 3;
|
||||
u_int YPU_STORE(ypupdate_args) = 4;
|
||||
} = 1;
|
||||
} = 100028;
|
||||
|
||||
typedef opaque yp_buf<MAXYPDATALEN>;
|
||||
|
||||
struct ypupdate_args {
|
||||
string mapname<MAXMAPNAMELEN>;
|
||||
yp_buf key;
|
||||
yp_buf datum;
|
||||
};
|
||||
|
||||
struct ypdelete_args {
|
||||
string mapname<MAXMAPNAMELEN>;
|
||||
yp_buf key;
|
||||
};
|
||||
|
||||
#ifdef RPC_HDR
|
||||
%
|
||||
%#endif /* !_rpcsvc_ypupdate_prot_h */
|
||||
#endif
|
175
include/rpcsvc/ypxfrd.x
Normal file
175
include/rpcsvc/ypxfrd.x
Normal file
@ -0,0 +1,175 @@
|
||||
/*
|
||||
* Copyright (c) 1995, 1996
|
||||
* 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 Bill Paul 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: ypxfrd.x,v 1.2 1996/07/04 02:08:17 wpaul Exp $
|
||||
*/
|
||||
|
||||
/*
|
||||
* This protocol definition file describes a file transfer
|
||||
* system used to very quickly move NIS maps from one host to
|
||||
* another. This is similar to what Sun does with their ypxfrd
|
||||
* protocol, but it must be stressed that this protocol is _NOT_
|
||||
* compatible with Sun's. There are a couple of reasons for this:
|
||||
*
|
||||
* 1) Sun's protocol is proprietary. The protocol definition is
|
||||
* not freely available in any of the SunRPC source distributions,
|
||||
* even though the NIS v2 protocol is.
|
||||
*
|
||||
* 2) The idea here is to transfer entire raw files rather than
|
||||
* sending just the records. Sun uses ndbm for its NIS map files,
|
||||
* while FreeBSD uses Berkeley DB. Both are hash databases, but the
|
||||
* formats are incompatible, making it impossible for them to
|
||||
* use each others' files. Even if FreeBSD adopted ndbm for its
|
||||
* database format, FreeBSD/i386 is a little-endian OS and
|
||||
* SunOS/SPARC is big-endian; ndbm is byte-order sensitive and
|
||||
* not very smart about it, which means an attempt to read a
|
||||
* database on a little-endian box that was created on a big-endian
|
||||
* box (or vice-versa) can cause the ndbm code to eat itself.
|
||||
* Luckily, Berkeley DB is able to deal with this situation in
|
||||
* a more graceful manner.
|
||||
*
|
||||
* While the protocol is incompatible, the idea is the same: we just open
|
||||
* up a TCP pipe to the client and transfer the raw map database
|
||||
* from the master server to the slave. This is many times faster than
|
||||
* the standard yppush/ypxfr transfer method since it saves us from
|
||||
* having to recreate the map databases via the DB library each time.
|
||||
* For example: creating a passwd database with 30,000 entries with yp_mkdb
|
||||
* can take a couple of minutes, but to just copy the file takes only a few
|
||||
* seconds.
|
||||
*/
|
||||
|
||||
#ifndef RPC_HDR
|
||||
%#ifndef lint
|
||||
%static const char rcsid[] = "$Id: ypxfrd.x,v 1.2 1996/07/04 02:08:17 wpaul Exp $";
|
||||
%#endif /* not lint */
|
||||
#endif
|
||||
|
||||
/* XXX cribbed from yp.x */
|
||||
const _YPMAXRECORD = 1024;
|
||||
const _YPMAXDOMAIN = 64;
|
||||
const _YPMAXMAP = 64;
|
||||
const _YPMAXPEER = 64;
|
||||
|
||||
/* Suggested default -- not necesarrily the one used. */
|
||||
const YPXFRBLOCK = 32767;
|
||||
|
||||
/*
|
||||
* Possible return codes from the remote server.
|
||||
*/
|
||||
enum xfrstat {
|
||||
XFR_REQUEST_OK = 1, /* Transfer request granted */
|
||||
XFR_DENIED = 2, /* Transfer request denied */
|
||||
XFR_NOFILE = 3, /* Requested map file doesn't exist */
|
||||
XFR_ACCESS = 4, /* File exists, but I couldn't access it */
|
||||
XFR_BADDB = 5, /* File is not a hash database */
|
||||
XFR_READ_OK = 6, /* Block read successfully */
|
||||
XFR_READ_ERR = 7, /* Read error during transfer */
|
||||
XFR_DONE = 8, /* Transfer completed */
|
||||
XFR_DB_ENDIAN_MISMATCH = 9, /* Database byte order mismatch */
|
||||
XFR_DB_TYPE_MISMATCH = 10 /* Database type mismatch */
|
||||
};
|
||||
|
||||
/*
|
||||
* Database type specifications. The client can use this to ask
|
||||
* the server for a particular type of database or just take whatever
|
||||
* the server has to offer.
|
||||
*/
|
||||
enum xfr_db_type {
|
||||
XFR_DB_ASCII = 1, /* Flat ASCII text */
|
||||
XFR_DB_BSD_HASH = 2, /* Berkeley DB, hash method */
|
||||
XFR_DB_BSD_BTREE = 3, /* Berkeley DB, btree method */
|
||||
XFR_DB_BSD_RECNO = 4, /* Berkeley DB, recno method */
|
||||
XFR_DB_BSD_MPOOL = 5, /* Berkeley DB, mpool method */
|
||||
XFR_DB_BSD_NDBM = 6, /* Berkeley DB, hash, ndbm compat */
|
||||
XFR_DB_GNU_GDBM = 7, /* GNU GDBM */
|
||||
XFR_DB_DBM = 8, /* Old, deprecated dbm format */
|
||||
XFR_DB_NDBM = 9, /* ndbm format (used by Sun's NISv2) */
|
||||
XFR_DB_OPAQUE = 10, /* Mystery format -- just pass along */
|
||||
XFR_DB_ANY = 11, /* I'll take any format you've got */
|
||||
XFR_DB_UNKNOWN = 12 /* Unknown format */
|
||||
};
|
||||
|
||||
/*
|
||||
* Machine byte order specification. This allows the client to check
|
||||
* that it's copying a map database from a machine of similar byte sex.
|
||||
* This is necessary for handling database libraries that are fatally
|
||||
* byte order sensitive.
|
||||
*
|
||||
* The XFR_ENDIAN_ANY type is for use with the Berkeley DB database
|
||||
* formats; Berkeley DB is smart enough to make up for byte order
|
||||
* differences, so byte sex isn't important.
|
||||
*/
|
||||
enum xfr_byte_order {
|
||||
XFR_ENDIAN_BIG = 1, /* We want big endian */
|
||||
XFR_ENDIAN_LITTLE = 2, /* We want little endian */
|
||||
XFR_ENDIAN_ANY = 3 /* We'll take whatever you got */
|
||||
};
|
||||
|
||||
typedef string xfrdomain<_YPMAXDOMAIN>;
|
||||
typedef string xfrmap<_YPMAXMAP>;
|
||||
typedef string xfrmap_filename<_YPMAXMAP>; /* actual name of map file */
|
||||
typedef enum xfrstat xfrstat;
|
||||
typedef enum xfr_db_type xfr_db_type;
|
||||
typedef enum xfr_byte_order xfr_byte_order;
|
||||
|
||||
/*
|
||||
* Ask the remote ypxfrd for a map using this structure.
|
||||
* Note: we supply both a map name and a map file name. These are not
|
||||
* the same thing. In the case of ndbm, maps are stored in two files:
|
||||
* map.bykey.pag and may.bykey.dir. We may also have to deal with
|
||||
* file extensions (on the off chance that the remote server is supporting
|
||||
* multiple DB formats). To handle this, we tell the remote server both
|
||||
* what map we want and, in the case of ndbm, whether we want the .dir
|
||||
* or the .pag part. This name should not be a fully qualified path:
|
||||
* it's up to the remote server to decide which directories to look in.
|
||||
*/
|
||||
struct ypxfr_mapname {
|
||||
xfrmap xfrmap;
|
||||
xfrdomain xfrdomain;
|
||||
xfrmap_filename xfrmap_filename;
|
||||
xfr_db_type xfr_db_type;
|
||||
xfr_byte_order xfr_byte_order;
|
||||
};
|
||||
|
||||
/* Read response using this structure. */
|
||||
union xfr switch (bool ok) {
|
||||
case TRUE:
|
||||
opaque xfrblock_buf<>;
|
||||
case FALSE:
|
||||
xfrstat xfrstat;
|
||||
};
|
||||
|
||||
program YPXFRD_FREEBSD_PROG {
|
||||
version YPXFRD_FREEBSD_VERS {
|
||||
union xfr
|
||||
YPXFRD_GETMAP(ypxfr_mapname) = 1;
|
||||
} = 1;
|
||||
} = 600100069; /* 100069 + 60000000 -- 100069 is the Sun ypxfrd prog number */
|
Loading…
Reference in New Issue
Block a user