mirror of
https://github.com/Wind4/vlmcsd.git
synced 2025-05-22 02:45:06 -04:00
vlmcsd-svn1065-2016-10-12-Hotbird64
This commit is contained in:
parent
d413afbadf
commit
798675dc66
599 changed files with 72866 additions and 1999 deletions
|
@ -0,0 +1,210 @@
|
|||
/*
|
||||
* auth.h, Authentication interface.
|
||||
*
|
||||
* Copyright (c) 2010, Oracle America, Inc.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are
|
||||
* met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above
|
||||
* copyright notice, this list of conditions and the following
|
||||
* disclaimer in the documentation and/or other materials
|
||||
* provided with the distribution.
|
||||
* * Neither the name of the "Oracle America, Inc." nor the names of its
|
||||
* contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
* COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
||||
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* The data structures are completely opaque to the client. The client
|
||||
* is required to pass a AUTH * to routines that create rpc
|
||||
* "sessions".
|
||||
*/
|
||||
|
||||
#ifndef _RPC_AUTH_H
|
||||
|
||||
#define _RPC_AUTH_H 1
|
||||
#include <features.h>
|
||||
#include <rpc/xdr.h>
|
||||
|
||||
__BEGIN_DECLS
|
||||
|
||||
#define MAX_AUTH_BYTES 400
|
||||
#define MAXNETNAMELEN 255 /* maximum length of network user's name */
|
||||
|
||||
/*
|
||||
* Status returned from authentication check
|
||||
*/
|
||||
enum auth_stat {
|
||||
AUTH_OK=0,
|
||||
/*
|
||||
* failed at remote end
|
||||
*/
|
||||
AUTH_BADCRED=1, /* bogus credentials (seal broken) */
|
||||
AUTH_REJECTEDCRED=2, /* client should begin new session */
|
||||
AUTH_BADVERF=3, /* bogus verifier (seal broken) */
|
||||
AUTH_REJECTEDVERF=4, /* verifier expired or was replayed */
|
||||
AUTH_TOOWEAK=5, /* rejected due to security reasons */
|
||||
/*
|
||||
* failed locally
|
||||
*/
|
||||
AUTH_INVALIDRESP=6, /* bogus response verifier */
|
||||
AUTH_FAILED=7 /* some unknown reason */
|
||||
};
|
||||
|
||||
union des_block {
|
||||
struct {
|
||||
u_int32_t high;
|
||||
u_int32_t low;
|
||||
} key;
|
||||
char c[8];
|
||||
};
|
||||
typedef union des_block des_block;
|
||||
extern bool_t xdr_des_block (XDR *__xdrs, des_block *__blkp) __THROW;
|
||||
|
||||
/*
|
||||
* Authentication info. Opaque to client.
|
||||
*/
|
||||
struct opaque_auth {
|
||||
enum_t oa_flavor; /* flavor of auth */
|
||||
caddr_t oa_base; /* address of more auth stuff */
|
||||
u_int oa_length; /* not to exceed MAX_AUTH_BYTES */
|
||||
};
|
||||
|
||||
/*
|
||||
* Auth handle, interface to client side authenticators.
|
||||
*/
|
||||
typedef struct AUTH AUTH;
|
||||
struct AUTH {
|
||||
struct opaque_auth ah_cred;
|
||||
struct opaque_auth ah_verf;
|
||||
union des_block ah_key;
|
||||
struct auth_ops {
|
||||
void (*ah_nextverf) (AUTH *);
|
||||
int (*ah_marshal) (AUTH *, XDR *); /* nextverf & serialize */
|
||||
int (*ah_validate) (AUTH *, struct opaque_auth *);
|
||||
/* validate verifier */
|
||||
int (*ah_refresh) (AUTH *); /* refresh credentials */
|
||||
void (*ah_destroy) (AUTH *); /* destroy this structure */
|
||||
} *ah_ops;
|
||||
caddr_t ah_private;
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
* Authentication ops.
|
||||
* The ops and the auth handle provide the interface to the authenticators.
|
||||
*
|
||||
* AUTH *auth;
|
||||
* XDR *xdrs;
|
||||
* struct opaque_auth verf;
|
||||
*/
|
||||
#define AUTH_NEXTVERF(auth) \
|
||||
((*((auth)->ah_ops->ah_nextverf))(auth))
|
||||
#define auth_nextverf(auth) \
|
||||
((*((auth)->ah_ops->ah_nextverf))(auth))
|
||||
|
||||
#define AUTH_MARSHALL(auth, xdrs) \
|
||||
((*((auth)->ah_ops->ah_marshal))(auth, xdrs))
|
||||
#define auth_marshall(auth, xdrs) \
|
||||
((*((auth)->ah_ops->ah_marshal))(auth, xdrs))
|
||||
|
||||
#define AUTH_VALIDATE(auth, verfp) \
|
||||
((*((auth)->ah_ops->ah_validate))((auth), verfp))
|
||||
#define auth_validate(auth, verfp) \
|
||||
((*((auth)->ah_ops->ah_validate))((auth), verfp))
|
||||
|
||||
#define AUTH_REFRESH(auth) \
|
||||
((*((auth)->ah_ops->ah_refresh))(auth))
|
||||
#define auth_refresh(auth) \
|
||||
((*((auth)->ah_ops->ah_refresh))(auth))
|
||||
|
||||
#define AUTH_DESTROY(auth) \
|
||||
((*((auth)->ah_ops->ah_destroy))(auth))
|
||||
#define auth_destroy(auth) \
|
||||
((*((auth)->ah_ops->ah_destroy))(auth))
|
||||
|
||||
|
||||
extern struct opaque_auth _null_auth;
|
||||
|
||||
|
||||
/*
|
||||
* These are the various implementations of client side authenticators.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Unix style authentication
|
||||
* AUTH *authunix_create(machname, uid, gid, len, aup_gids)
|
||||
* char *machname;
|
||||
* int uid;
|
||||
* int gid;
|
||||
* int len;
|
||||
* int *aup_gids;
|
||||
*/
|
||||
extern AUTH *authunix_create (char *__machname, __uid_t __uid, __gid_t __gid,
|
||||
int __len, __gid_t *__aup_gids);
|
||||
extern AUTH *authunix_create_default (void);
|
||||
extern AUTH *authnone_create (void) __THROW;
|
||||
extern AUTH *authdes_create (const char *__servername, u_int __window,
|
||||
struct sockaddr *__syncaddr, des_block *__ckey)
|
||||
__THROW;
|
||||
extern AUTH *authdes_pk_create (const char *, netobj *, u_int,
|
||||
struct sockaddr *, des_block *) __THROW;
|
||||
|
||||
|
||||
#define AUTH_NONE 0 /* no authentication */
|
||||
#define AUTH_NULL 0 /* backward compatibility */
|
||||
#define AUTH_SYS 1 /* unix style (uid, gids) */
|
||||
#define AUTH_UNIX AUTH_SYS
|
||||
#define AUTH_SHORT 2 /* short hand unix style */
|
||||
#define AUTH_DES 3 /* des style (encrypted timestamps) */
|
||||
#define AUTH_DH AUTH_DES /* Diffie-Hellman (this is DES) */
|
||||
#define AUTH_KERB 4 /* kerberos style */
|
||||
|
||||
/*
|
||||
* Netname manipulating functions
|
||||
*
|
||||
*/
|
||||
extern int getnetname (char *) __THROW;
|
||||
extern int host2netname (char *, const char *, const char *) __THROW;
|
||||
extern int user2netname (char *, const uid_t, const char *) __THROW;
|
||||
extern int netname2user (const char *, uid_t *, gid_t *, int *, gid_t *)
|
||||
__THROW;
|
||||
extern int netname2host (const char *, char *, const int) __THROW;
|
||||
|
||||
/*
|
||||
*
|
||||
* These routines interface to the keyserv daemon
|
||||
*
|
||||
*/
|
||||
extern int key_decryptsession (char *, des_block *);
|
||||
extern int key_decryptsession_pk (char *, netobj *, des_block *);
|
||||
extern int key_encryptsession (char *, des_block *);
|
||||
extern int key_encryptsession_pk (char *, netobj *, des_block *);
|
||||
extern int key_gendes (des_block *);
|
||||
extern int key_setsecret (char *);
|
||||
extern int key_secretkey_is_set (void);
|
||||
extern int key_get_conv (char *, des_block *);
|
||||
|
||||
/*
|
||||
* XDR an opaque authentication struct.
|
||||
*/
|
||||
extern bool_t xdr_opaque_auth (XDR *, struct opaque_auth *) __THROW;
|
||||
|
||||
__END_DECLS
|
||||
|
||||
#endif /* rpc/auth.h */
|
|
@ -0,0 +1,111 @@
|
|||
/* Copyright (C) 1996-2016 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, see
|
||||
<http://www.gnu.org/licenses/>. */
|
||||
|
||||
#ifndef _RPC_AUTH_DES_H
|
||||
#define _RPC_AUTH_DES_H 1
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
#include <rpc/auth.h>
|
||||
|
||||
__BEGIN_DECLS
|
||||
|
||||
/* There are two kinds of "names": fullnames and nicknames */
|
||||
enum authdes_namekind
|
||||
{
|
||||
ADN_FULLNAME,
|
||||
ADN_NICKNAME
|
||||
};
|
||||
|
||||
/* A fullname contains the network name of the client,
|
||||
a conversation key and the window */
|
||||
struct authdes_fullname
|
||||
{
|
||||
char *name; /* network name of client, up to MAXNETNAMELEN */
|
||||
des_block key; /* conversation key */
|
||||
uint32_t window; /* associated window */
|
||||
};
|
||||
|
||||
/* A credential */
|
||||
struct authdes_cred
|
||||
{
|
||||
enum authdes_namekind adc_namekind;
|
||||
struct authdes_fullname adc_fullname;
|
||||
uint32_t adc_nickname;
|
||||
};
|
||||
|
||||
/* A timeval replacement for !32bit platforms */
|
||||
struct rpc_timeval
|
||||
{
|
||||
uint32_t tv_sec; /* Seconds. */
|
||||
uint32_t tv_usec; /* Microseconds. */
|
||||
};
|
||||
|
||||
/* A des authentication verifier */
|
||||
struct authdes_verf
|
||||
{
|
||||
union
|
||||
{
|
||||
struct rpc_timeval adv_ctime; /* clear time */
|
||||
des_block adv_xtime; /* crypt time */
|
||||
}
|
||||
adv_time_u;
|
||||
uint32_t adv_int_u;
|
||||
};
|
||||
|
||||
/* des authentication verifier: client variety
|
||||
|
||||
adv_timestamp is the current time.
|
||||
adv_winverf is the credential window + 1.
|
||||
Both are encrypted using the conversation key. */
|
||||
#define adv_timestamp adv_time_u.adv_ctime
|
||||
#define adv_xtimestamp adv_time_u.adv_xtime
|
||||
#define adv_winverf adv_int_u
|
||||
|
||||
/* des authentication verifier: server variety
|
||||
|
||||
adv_timeverf is the client's timestamp + client's window
|
||||
adv_nickname is the server's nickname for the client.
|
||||
adv_timeverf is encrypted using the conversation key. */
|
||||
#define adv_timeverf adv_time_u.adv_ctime
|
||||
#define adv_xtimeverf adv_time_u.adv_xtime
|
||||
#define adv_nickname adv_int_u
|
||||
|
||||
/* Map a des credential into a unix cred. */
|
||||
extern int authdes_getucred (const struct authdes_cred * __adc,
|
||||
uid_t * __uid, gid_t * __gid,
|
||||
short *__grouplen, gid_t * __groups) __THROW;
|
||||
|
||||
/* Get the public key for NAME and place it in KEY. NAME can only be
|
||||
up to MAXNETNAMELEN bytes long and the destination buffer KEY should
|
||||
have HEXKEYBYTES + 1 bytes long to fit all characters from the key. */
|
||||
extern int getpublickey (const char *__name, char *__key) __THROW;
|
||||
|
||||
/* Get the secret key for NAME and place it in KEY. PASSWD is used to
|
||||
decrypt the encrypted key stored in the database. NAME can only be
|
||||
up to MAXNETNAMELEN bytes long and the destination buffer KEY
|
||||
should have HEXKEYBYTES + 1 bytes long to fit all characters from
|
||||
the key. */
|
||||
extern int getsecretkey (const char *__name, char *__key,
|
||||
const char *__passwd) __THROW;
|
||||
|
||||
extern int rtime (struct sockaddr_in *__addrp, struct rpc_timeval *__timep,
|
||||
struct rpc_timeval *__timeout) __THROW;
|
||||
|
||||
__END_DECLS
|
||||
|
||||
|
||||
#endif /* rpc/auth_des.h */
|
|
@ -0,0 +1,86 @@
|
|||
/*
|
||||
* auth_unix.h, Protocol for UNIX style authentication parameters for RPC
|
||||
*
|
||||
* Copyright (c) 2010, Oracle America, Inc.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are
|
||||
* met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above
|
||||
* copyright notice, this list of conditions and the following
|
||||
* disclaimer in the documentation and/or other materials
|
||||
* provided with the distribution.
|
||||
* * Neither the name of the "Oracle America, Inc." nor the names of its
|
||||
* contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
* COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
||||
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/*
|
||||
* The system is very weak. The client uses no encryption for it
|
||||
* credentials and only sends null verifiers. The server sends backs
|
||||
* null verifiers or optionally a verifier that suggests a new short hand
|
||||
* for the credentials.
|
||||
*/
|
||||
|
||||
#ifndef _RPC_AUTH_UNIX_H
|
||||
#define _RPC_AUTH_UNIX_H 1
|
||||
|
||||
#include <features.h>
|
||||
#include <sys/types.h>
|
||||
#include <rpc/types.h>
|
||||
#include <rpc/auth.h>
|
||||
#include <rpc/xdr.h>
|
||||
|
||||
__BEGIN_DECLS
|
||||
|
||||
/* The machine name is part of a credential; it may not exceed 255 bytes */
|
||||
#define MAX_MACHINE_NAME 255
|
||||
|
||||
/* gids compose part of a credential; there may not be more than 16 of them */
|
||||
#define NGRPS 16
|
||||
|
||||
/*
|
||||
* Unix style credentials.
|
||||
*/
|
||||
struct authunix_parms
|
||||
{
|
||||
u_long aup_time;
|
||||
char *aup_machname;
|
||||
__uid_t aup_uid;
|
||||
__gid_t aup_gid;
|
||||
u_int aup_len;
|
||||
__gid_t *aup_gids;
|
||||
};
|
||||
|
||||
extern bool_t xdr_authunix_parms (XDR *__xdrs, struct authunix_parms *__p)
|
||||
__THROW;
|
||||
|
||||
/*
|
||||
* If a response verifier has flavor AUTH_SHORT,
|
||||
* then the body of the response verifier encapsulates the following structure;
|
||||
* again it is serialized in the obvious fashion.
|
||||
*/
|
||||
struct short_hand_verf
|
||||
{
|
||||
struct opaque_auth new_cred;
|
||||
};
|
||||
|
||||
__END_DECLS
|
||||
|
||||
#endif /* rpc/auth_unix.h */
|
|
@ -0,0 +1,418 @@
|
|||
/*
|
||||
* clnt.h - Client side remote procedure call interface.
|
||||
*
|
||||
* Copyright (c) 2010, Oracle America, Inc.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are
|
||||
* met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above
|
||||
* copyright notice, this list of conditions and the following
|
||||
* disclaimer in the documentation and/or other materials
|
||||
* provided with the distribution.
|
||||
* * Neither the name of the "Oracle America, Inc." nor the names of its
|
||||
* contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
* COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
||||
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef _RPC_CLNT_H
|
||||
#define _RPC_CLNT_H 1
|
||||
|
||||
#include <features.h>
|
||||
#include <sys/types.h>
|
||||
#include <rpc/types.h>
|
||||
#include <rpc/auth.h>
|
||||
#include <sys/un.h>
|
||||
|
||||
__BEGIN_DECLS
|
||||
|
||||
/*
|
||||
* Rpc calls return an enum clnt_stat. This should be looked at more,
|
||||
* since each implementation is required to live with this (implementation
|
||||
* independent) list of errors.
|
||||
*/
|
||||
enum clnt_stat {
|
||||
RPC_SUCCESS=0, /* call succeeded */
|
||||
/*
|
||||
* local errors
|
||||
*/
|
||||
RPC_CANTENCODEARGS=1, /* can't encode arguments */
|
||||
RPC_CANTDECODERES=2, /* can't decode results */
|
||||
RPC_CANTSEND=3, /* failure in sending call */
|
||||
RPC_CANTRECV=4, /* failure in receiving result */
|
||||
RPC_TIMEDOUT=5, /* call timed out */
|
||||
/*
|
||||
* remote errors
|
||||
*/
|
||||
RPC_VERSMISMATCH=6, /* rpc versions not compatible */
|
||||
RPC_AUTHERROR=7, /* authentication error */
|
||||
RPC_PROGUNAVAIL=8, /* program not available */
|
||||
RPC_PROGVERSMISMATCH=9, /* program version mismatched */
|
||||
RPC_PROCUNAVAIL=10, /* procedure unavailable */
|
||||
RPC_CANTDECODEARGS=11, /* decode arguments error */
|
||||
RPC_SYSTEMERROR=12, /* generic "other problem" */
|
||||
RPC_NOBROADCAST = 21, /* Broadcasting not supported */
|
||||
/*
|
||||
* callrpc & clnt_create errors
|
||||
*/
|
||||
RPC_UNKNOWNHOST=13, /* unknown host name */
|
||||
RPC_UNKNOWNPROTO=17, /* unknown protocol */
|
||||
RPC_UNKNOWNADDR = 19, /* Remote address unknown */
|
||||
|
||||
/*
|
||||
* rpcbind errors
|
||||
*/
|
||||
RPC_RPCBFAILURE=14, /* portmapper failed in its call */
|
||||
#define RPC_PMAPFAILURE RPC_RPCBFAILURE
|
||||
RPC_PROGNOTREGISTERED=15, /* remote program is not registered */
|
||||
RPC_N2AXLATEFAILURE = 22, /* Name to addr translation failed */
|
||||
/*
|
||||
* unspecified error
|
||||
*/
|
||||
RPC_FAILED=16,
|
||||
RPC_INTR=18,
|
||||
RPC_TLIERROR=20,
|
||||
RPC_UDERROR=23,
|
||||
/*
|
||||
* asynchronous errors
|
||||
*/
|
||||
RPC_INPROGRESS = 24,
|
||||
RPC_STALERACHANDLE = 25
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
* Error info.
|
||||
*/
|
||||
struct rpc_err {
|
||||
enum clnt_stat re_status;
|
||||
union {
|
||||
int RE_errno; /* related system error */
|
||||
enum auth_stat RE_why; /* why the auth error occurred */
|
||||
struct {
|
||||
u_long low; /* lowest verion supported */
|
||||
u_long high; /* highest verion supported */
|
||||
} RE_vers;
|
||||
struct { /* maybe meaningful if RPC_FAILED */
|
||||
long s1;
|
||||
long s2;
|
||||
} RE_lb; /* life boot & debugging only */
|
||||
} ru;
|
||||
#define re_errno ru.RE_errno
|
||||
#define re_why ru.RE_why
|
||||
#define re_vers ru.RE_vers
|
||||
#define re_lb ru.RE_lb
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
* Client rpc handle.
|
||||
* Created by individual implementations, see e.g. rpc_udp.c.
|
||||
* Client is responsible for initializing auth, see e.g. auth_none.c.
|
||||
*/
|
||||
typedef struct CLIENT CLIENT;
|
||||
struct CLIENT {
|
||||
AUTH *cl_auth; /* authenticator */
|
||||
struct clnt_ops {
|
||||
enum clnt_stat (*cl_call) (CLIENT *, u_long, xdrproc_t, caddr_t, xdrproc_t,
|
||||
caddr_t, struct timeval);
|
||||
/* call remote procedure */
|
||||
void (*cl_abort) (void); /* abort a call */
|
||||
void (*cl_geterr) (CLIENT *, struct rpc_err *);
|
||||
/* get specific error code */
|
||||
bool_t (*cl_freeres) (CLIENT *, xdrproc_t, caddr_t);
|
||||
/* frees results */
|
||||
void (*cl_destroy) (CLIENT *); /* destroy this structure */
|
||||
bool_t (*cl_control) (CLIENT *, int, char *);
|
||||
/* the ioctl() of rpc */
|
||||
} *cl_ops;
|
||||
caddr_t cl_private; /* private stuff */
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
* client side rpc interface ops
|
||||
*
|
||||
* Parameter types are:
|
||||
*
|
||||
*/
|
||||
|
||||
/*
|
||||
* enum clnt_stat
|
||||
* CLNT_CALL(rh, proc, xargs, argsp, xres, resp, timeout)
|
||||
* CLIENT *rh;
|
||||
* u_long proc;
|
||||
* xdrproc_t xargs;
|
||||
* caddr_t argsp;
|
||||
* xdrproc_t xres;
|
||||
* caddr_t resp;
|
||||
* struct timeval timeout;
|
||||
*/
|
||||
#define CLNT_CALL(rh, proc, xargs, argsp, xres, resp, secs) \
|
||||
((*(rh)->cl_ops->cl_call)(rh, proc, xargs, argsp, xres, resp, secs))
|
||||
#define clnt_call(rh, proc, xargs, argsp, xres, resp, secs) \
|
||||
((*(rh)->cl_ops->cl_call)(rh, proc, xargs, argsp, xres, resp, secs))
|
||||
|
||||
/*
|
||||
* void
|
||||
* CLNT_ABORT(rh);
|
||||
* CLIENT *rh;
|
||||
*/
|
||||
#define CLNT_ABORT(rh) ((*(rh)->cl_ops->cl_abort)(rh))
|
||||
#define clnt_abort(rh) ((*(rh)->cl_ops->cl_abort)(rh))
|
||||
|
||||
/*
|
||||
* struct rpc_err
|
||||
* CLNT_GETERR(rh);
|
||||
* CLIENT *rh;
|
||||
*/
|
||||
#define CLNT_GETERR(rh,errp) ((*(rh)->cl_ops->cl_geterr)(rh, errp))
|
||||
#define clnt_geterr(rh,errp) ((*(rh)->cl_ops->cl_geterr)(rh, errp))
|
||||
|
||||
|
||||
/*
|
||||
* bool_t
|
||||
* CLNT_FREERES(rh, xres, resp);
|
||||
* CLIENT *rh;
|
||||
* xdrproc_t xres;
|
||||
* caddr_t resp;
|
||||
*/
|
||||
#define CLNT_FREERES(rh,xres,resp) ((*(rh)->cl_ops->cl_freeres)(rh,xres,resp))
|
||||
#define clnt_freeres(rh,xres,resp) ((*(rh)->cl_ops->cl_freeres)(rh,xres,resp))
|
||||
|
||||
/*
|
||||
* bool_t
|
||||
* CLNT_CONTROL(cl, request, info)
|
||||
* CLIENT *cl;
|
||||
* u_int request;
|
||||
* char *info;
|
||||
*/
|
||||
#define CLNT_CONTROL(cl,rq,in) ((*(cl)->cl_ops->cl_control)(cl,rq,in))
|
||||
#define clnt_control(cl,rq,in) ((*(cl)->cl_ops->cl_control)(cl,rq,in))
|
||||
|
||||
/*
|
||||
* control operations that apply to all transports
|
||||
*
|
||||
* Note: options marked XXX are no-ops in this implementation of RPC.
|
||||
* The are present in TI-RPC but can't be implemented here since they
|
||||
* depend on the presence of STREAMS/TLI, which we don't have.
|
||||
*/
|
||||
#define CLSET_TIMEOUT 1 /* set timeout (timeval) */
|
||||
#define CLGET_TIMEOUT 2 /* get timeout (timeval) */
|
||||
#define CLGET_SERVER_ADDR 3 /* get server's address (sockaddr) */
|
||||
#define CLGET_FD 6 /* get connections file descriptor */
|
||||
#define CLGET_SVC_ADDR 7 /* get server's address (netbuf) XXX */
|
||||
#define CLSET_FD_CLOSE 8 /* close fd while clnt_destroy */
|
||||
#define CLSET_FD_NCLOSE 9 /* Do not close fd while clnt_destroy*/
|
||||
#define CLGET_XID 10 /* Get xid */
|
||||
#define CLSET_XID 11 /* Set xid */
|
||||
#define CLGET_VERS 12 /* Get version number */
|
||||
#define CLSET_VERS 13 /* Set version number */
|
||||
#define CLGET_PROG 14 /* Get program number */
|
||||
#define CLSET_PROG 15 /* Set program number */
|
||||
#define CLSET_SVC_ADDR 16 /* get server's address (netbuf) XXX */
|
||||
#define CLSET_PUSH_TIMOD 17 /* push timod if not already present XXX */
|
||||
#define CLSET_POP_TIMOD 18 /* pop timod XXX */
|
||||
/*
|
||||
* Connectionless only control operations
|
||||
*/
|
||||
#define CLSET_RETRY_TIMEOUT 4 /* set retry timeout (timeval) */
|
||||
#define CLGET_RETRY_TIMEOUT 5 /* get retry timeout (timeval) */
|
||||
|
||||
/*
|
||||
* void
|
||||
* CLNT_DESTROY(rh);
|
||||
* CLIENT *rh;
|
||||
*/
|
||||
#define CLNT_DESTROY(rh) ((*(rh)->cl_ops->cl_destroy)(rh))
|
||||
#define clnt_destroy(rh) ((*(rh)->cl_ops->cl_destroy)(rh))
|
||||
|
||||
|
||||
/*
|
||||
* RPCTEST is a test program which is accessible on every rpc
|
||||
* transport/port. It is used for testing, performance evaluation,
|
||||
* and network administration.
|
||||
*/
|
||||
|
||||
#define RPCTEST_PROGRAM ((u_long)1)
|
||||
#define RPCTEST_VERSION ((u_long)1)
|
||||
#define RPCTEST_NULL_PROC ((u_long)2)
|
||||
#define RPCTEST_NULL_BATCH_PROC ((u_long)3)
|
||||
|
||||
/*
|
||||
* By convention, procedure 0 takes null arguments and returns them
|
||||
*/
|
||||
|
||||
#define NULLPROC ((u_long)0)
|
||||
|
||||
/*
|
||||
* Below are the client handle creation routines for the various
|
||||
* implementations of client side rpc. They can return NULL if a
|
||||
* creation failure occurs.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Memory based rpc (for speed check and testing)
|
||||
* CLIENT *
|
||||
* clntraw_create(prog, vers)
|
||||
* u_long prog;
|
||||
* u_long vers;
|
||||
*/
|
||||
extern CLIENT *clntraw_create (const u_long __prog, const u_long __vers)
|
||||
__THROW;
|
||||
|
||||
|
||||
/*
|
||||
* Generic client creation routine. Supported protocols are "udp", "tcp" and
|
||||
* "unix"
|
||||
* CLIENT *
|
||||
* clnt_create(host, prog, vers, prot)
|
||||
* char *host; -- hostname
|
||||
* u_long prog; -- program number
|
||||
* u_ong vers; -- version number
|
||||
* char *prot; -- protocol
|
||||
*/
|
||||
extern CLIENT *clnt_create (const char *__host, const u_long __prog,
|
||||
const u_long __vers, const char *__prot)
|
||||
__THROW;
|
||||
|
||||
|
||||
/*
|
||||
* TCP based rpc
|
||||
* CLIENT *
|
||||
* clnttcp_create(raddr, prog, vers, sockp, sendsz, recvsz)
|
||||
* struct sockaddr_in *raddr;
|
||||
* u_long prog;
|
||||
* u_long version;
|
||||
* register int *sockp;
|
||||
* u_int sendsz;
|
||||
* u_int recvsz;
|
||||
*/
|
||||
extern CLIENT *clnttcp_create (struct sockaddr_in *__raddr, u_long __prog,
|
||||
u_long __version, int *__sockp, u_int __sendsz,
|
||||
u_int __recvsz) __THROW;
|
||||
|
||||
/*
|
||||
* UDP based rpc.
|
||||
* CLIENT *
|
||||
* clntudp_create(raddr, program, version, wait, sockp)
|
||||
* struct sockaddr_in *raddr;
|
||||
* u_long program;
|
||||
* u_long version;
|
||||
* struct timeval wait_resend;
|
||||
* int *sockp;
|
||||
*
|
||||
* Same as above, but you specify max packet sizes.
|
||||
* CLIENT *
|
||||
* clntudp_bufcreate(raddr, program, version, wait, sockp, sendsz, recvsz)
|
||||
* struct sockaddr_in *raddr;
|
||||
* u_long program;
|
||||
* u_long version;
|
||||
* struct timeval wait_resend;
|
||||
* int *sockp;
|
||||
* u_int sendsz;
|
||||
* u_int recvsz;
|
||||
*/
|
||||
extern CLIENT *clntudp_create (struct sockaddr_in *__raddr, u_long __program,
|
||||
u_long __version, struct timeval __wait_resend,
|
||||
int *__sockp) __THROW;
|
||||
extern CLIENT *clntudp_bufcreate (struct sockaddr_in *__raddr,
|
||||
u_long __program, u_long __version,
|
||||
struct timeval __wait_resend, int *__sockp,
|
||||
u_int __sendsz, u_int __recvsz) __THROW;
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* AF_UNIX based rpc
|
||||
* CLIENT *
|
||||
* clntunix_create(raddr, prog, vers, sockp, sendsz, recvsz)
|
||||
* struct sockaddr_un *raddr;
|
||||
* u_long prog;
|
||||
* u_long version;
|
||||
* register int *sockp;
|
||||
* u_int sendsz;
|
||||
* u_int recvsz;
|
||||
*/
|
||||
extern CLIENT *clntunix_create (struct sockaddr_un *__raddr, u_long __program,
|
||||
u_long __version, int *__sockp,
|
||||
u_int __sendsz, u_int __recvsz) __THROW;
|
||||
|
||||
|
||||
extern int callrpc (const char *__host, const u_long __prognum,
|
||||
const u_long __versnum, const u_long __procnum,
|
||||
const xdrproc_t __inproc, const char *__in,
|
||||
const xdrproc_t __outproc, char *__out) __THROW;
|
||||
extern int _rpc_dtablesize (void) __THROW;
|
||||
|
||||
/*
|
||||
* Print why creation failed
|
||||
*/
|
||||
extern void clnt_pcreateerror (const char *__msg); /* stderr */
|
||||
extern char *clnt_spcreateerror(const char *__msg) __THROW; /* string */
|
||||
|
||||
/*
|
||||
* Like clnt_perror(), but is more verbose in its output
|
||||
*/
|
||||
extern void clnt_perrno (enum clnt_stat __num); /* stderr */
|
||||
|
||||
/*
|
||||
* Print an English error message, given the client error code
|
||||
*/
|
||||
extern void clnt_perror (CLIENT *__clnt, const char *__msg);
|
||||
/* stderr */
|
||||
extern char *clnt_sperror (CLIENT *__clnt, const char *__msg) __THROW;
|
||||
/* string */
|
||||
|
||||
/*
|
||||
* If a creation fails, the following allows the user to figure out why.
|
||||
*/
|
||||
struct rpc_createerr {
|
||||
enum clnt_stat cf_stat;
|
||||
struct rpc_err cf_error; /* useful when cf_stat == RPC_PMAPFAILURE */
|
||||
};
|
||||
|
||||
extern struct rpc_createerr rpc_createerr;
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* Copy error message to buffer.
|
||||
*/
|
||||
extern char *clnt_sperrno (enum clnt_stat __num) __THROW; /* string */
|
||||
|
||||
/*
|
||||
* get the port number on the host for the rpc program,version and proto
|
||||
*/
|
||||
extern int getrpcport (const char * __host, u_long __prognum,
|
||||
u_long __versnum, u_int __proto) __THROW;
|
||||
|
||||
/*
|
||||
* get the local host's IP address without consulting
|
||||
* name service library functions
|
||||
*/
|
||||
extern void get_myaddress (struct sockaddr_in *) __THROW;
|
||||
|
||||
#define UDPMSGSIZE 8800 /* rpc imposed limit on udp msg size */
|
||||
#define RPCSMALLMSGSIZE 400 /* a more reasonable packet size */
|
||||
|
||||
__END_DECLS
|
||||
|
||||
#endif /* rpc/clnt.h */
|
|
@ -0,0 +1,96 @@
|
|||
/*
|
||||
* @(#)des_crypt.h 2.1 88/08/11 4.0 RPCSRC
|
||||
*
|
||||
* des_crypt.h, des library routine interface
|
||||
* Copyright (c) 2010, Oracle America, Inc.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are
|
||||
* met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above
|
||||
* copyright notice, this list of conditions and the following
|
||||
* disclaimer in the documentation and/or other materials
|
||||
* provided with the distribution.
|
||||
* * Neither the name of the "Oracle America, Inc." nor the names of its
|
||||
* contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
* COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
||||
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef __DES_CRYPT_H__
|
||||
#define __DES_CRYPT_H__ 1
|
||||
|
||||
#include <features.h>
|
||||
|
||||
__BEGIN_DECLS
|
||||
|
||||
#define DES_MAXDATA 8192 /* max bytes encrypted in one call */
|
||||
#define DES_DIRMASK (1 << 0)
|
||||
#define DES_ENCRYPT (0*DES_DIRMASK) /* Encrypt */
|
||||
#define DES_DECRYPT (1*DES_DIRMASK) /* Decrypt */
|
||||
|
||||
|
||||
#define DES_DEVMASK (1 << 1)
|
||||
#define DES_HW (0*DES_DEVMASK) /* Use hardware device */
|
||||
#define DES_SW (1*DES_DEVMASK) /* Use software device */
|
||||
|
||||
|
||||
#define DESERR_NONE 0 /* succeeded */
|
||||
#define DESERR_NOHWDEVICE 1 /* succeeded, but hw device not available */
|
||||
#define DESERR_HWERROR 2 /* failed, hardware/driver error */
|
||||
#define DESERR_BADPARAM 3 /* failed, bad parameter to call */
|
||||
|
||||
#define DES_FAILED(err) \
|
||||
((err) > DESERR_NOHWDEVICE)
|
||||
|
||||
/*
|
||||
* cbc_crypt()
|
||||
* ecb_crypt()
|
||||
*
|
||||
* Encrypt (or decrypt) len bytes of a buffer buf.
|
||||
* The length must be a multiple of eight.
|
||||
* The key should have odd parity in the low bit of each byte.
|
||||
* ivec is the input vector, and is updated to the new one (cbc only).
|
||||
* The mode is created by oring together the appropriate parameters.
|
||||
* DESERR_NOHWDEVICE is returned if DES_HW was specified but
|
||||
* there was no hardware to do it on (the data will still be
|
||||
* encrypted though, in software).
|
||||
*/
|
||||
|
||||
|
||||
/*
|
||||
* Cipher Block Chaining mode
|
||||
*/
|
||||
extern int cbc_crypt (char *__key, char *__buf, unsigned __len,
|
||||
unsigned __mode, char *__ivec) __THROW;
|
||||
|
||||
/*
|
||||
* Electronic Code Book mode
|
||||
*/
|
||||
extern int ecb_crypt (char *__key, char *__buf, unsigned __len,
|
||||
unsigned __mode) __THROW;
|
||||
|
||||
/*
|
||||
* Set des parity for a key.
|
||||
* DES parity is odd and in the low bit of each byte
|
||||
*/
|
||||
extern void des_setparity (char *__key) __THROW;
|
||||
|
||||
__END_DECLS
|
||||
|
||||
#endif
|
|
@ -0,0 +1,343 @@
|
|||
/*
|
||||
* Please do not edit this file.
|
||||
* It was generated using rpcgen.
|
||||
*/
|
||||
|
||||
#ifndef _KEY_PROT_H_RPCGEN
|
||||
#define _KEY_PROT_H_RPCGEN
|
||||
|
||||
#include <rpc/rpc.h>
|
||||
|
||||
/* Copyright (c) 2010, Oracle America, Inc.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are
|
||||
* met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above
|
||||
* copyright notice, this list of conditions and the following
|
||||
* disclaimer in the documentation and/or other materials
|
||||
* provided with the distribution.
|
||||
* * Neither the name of the "Oracle America, Inc." nor the names of its
|
||||
* contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
* COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
||||
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Compiled from key_prot.x using rpcgen.
|
||||
* DO NOT EDIT THIS FILE!
|
||||
* This is NOT source code!
|
||||
*/
|
||||
#define PROOT 3
|
||||
#define HEXMODULUS "d4a0ba0250b6fd2ec626e7efd637df76c716e22d0944b88b"
|
||||
#define HEXKEYBYTES 48
|
||||
#define KEYSIZE 192
|
||||
#define KEYBYTES 24
|
||||
#define KEYCHECKSUMSIZE 16
|
||||
|
||||
enum keystatus {
|
||||
KEY_SUCCESS = 0,
|
||||
KEY_NOSECRET = 1,
|
||||
KEY_UNKNOWN = 2,
|
||||
KEY_SYSTEMERR = 3,
|
||||
};
|
||||
typedef enum keystatus keystatus;
|
||||
#ifdef __cplusplus
|
||||
extern "C" bool_t xdr_keystatus(XDR *, keystatus*);
|
||||
#elif __STDC__
|
||||
extern bool_t xdr_keystatus(XDR *, keystatus*);
|
||||
#else /* Old Style C */
|
||||
bool_t xdr_keystatus();
|
||||
#endif /* Old Style C */
|
||||
|
||||
|
||||
typedef char keybuf[HEXKEYBYTES];
|
||||
#ifdef __cplusplus
|
||||
extern "C" bool_t xdr_keybuf(XDR *, keybuf);
|
||||
#elif __STDC__
|
||||
extern bool_t xdr_keybuf(XDR *, keybuf);
|
||||
#else /* Old Style C */
|
||||
bool_t xdr_keybuf();
|
||||
#endif /* Old Style C */
|
||||
|
||||
|
||||
typedef char *netnamestr;
|
||||
#ifdef __cplusplus
|
||||
extern "C" bool_t xdr_netnamestr(XDR *, netnamestr*);
|
||||
#elif __STDC__
|
||||
extern bool_t xdr_netnamestr(XDR *, netnamestr*);
|
||||
#else /* Old Style C */
|
||||
bool_t xdr_netnamestr();
|
||||
#endif /* Old Style C */
|
||||
|
||||
|
||||
struct cryptkeyarg {
|
||||
netnamestr remotename;
|
||||
des_block deskey;
|
||||
};
|
||||
typedef struct cryptkeyarg cryptkeyarg;
|
||||
#ifdef __cplusplus
|
||||
extern "C" bool_t xdr_cryptkeyarg(XDR *, cryptkeyarg*);
|
||||
#elif __STDC__
|
||||
extern bool_t xdr_cryptkeyarg(XDR *, cryptkeyarg*);
|
||||
#else /* Old Style C */
|
||||
bool_t xdr_cryptkeyarg();
|
||||
#endif /* Old Style C */
|
||||
|
||||
|
||||
struct cryptkeyarg2 {
|
||||
netnamestr remotename;
|
||||
netobj remotekey;
|
||||
des_block deskey;
|
||||
};
|
||||
typedef struct cryptkeyarg2 cryptkeyarg2;
|
||||
#ifdef __cplusplus
|
||||
extern "C" bool_t xdr_cryptkeyarg2(XDR *, cryptkeyarg2*);
|
||||
#elif __STDC__
|
||||
extern bool_t xdr_cryptkeyarg2(XDR *, cryptkeyarg2*);
|
||||
#else /* Old Style C */
|
||||
bool_t xdr_cryptkeyarg2();
|
||||
#endif /* Old Style C */
|
||||
|
||||
|
||||
struct cryptkeyres {
|
||||
keystatus status;
|
||||
union {
|
||||
des_block deskey;
|
||||
} cryptkeyres_u;
|
||||
};
|
||||
typedef struct cryptkeyres cryptkeyres;
|
||||
#ifdef __cplusplus
|
||||
extern "C" bool_t xdr_cryptkeyres(XDR *, cryptkeyres*);
|
||||
#elif __STDC__
|
||||
extern bool_t xdr_cryptkeyres(XDR *, cryptkeyres*);
|
||||
#else /* Old Style C */
|
||||
bool_t xdr_cryptkeyres();
|
||||
#endif /* Old Style C */
|
||||
|
||||
#define MAXGIDS 16
|
||||
|
||||
struct unixcred {
|
||||
u_int uid;
|
||||
u_int gid;
|
||||
struct {
|
||||
u_int gids_len;
|
||||
u_int *gids_val;
|
||||
} gids;
|
||||
};
|
||||
typedef struct unixcred unixcred;
|
||||
#ifdef __cplusplus
|
||||
extern "C" bool_t xdr_unixcred(XDR *, unixcred*);
|
||||
#elif __STDC__
|
||||
extern bool_t xdr_unixcred(XDR *, unixcred*);
|
||||
#else /* Old Style C */
|
||||
bool_t xdr_unixcred();
|
||||
#endif /* Old Style C */
|
||||
|
||||
|
||||
struct getcredres {
|
||||
keystatus status;
|
||||
union {
|
||||
unixcred cred;
|
||||
} getcredres_u;
|
||||
};
|
||||
typedef struct getcredres getcredres;
|
||||
#ifdef __cplusplus
|
||||
extern "C" bool_t xdr_getcredres(XDR *, getcredres*);
|
||||
#elif __STDC__
|
||||
extern bool_t xdr_getcredres(XDR *, getcredres*);
|
||||
#else /* Old Style C */
|
||||
bool_t xdr_getcredres();
|
||||
#endif /* Old Style C */
|
||||
|
||||
|
||||
struct key_netstarg {
|
||||
keybuf st_priv_key;
|
||||
keybuf st_pub_key;
|
||||
netnamestr st_netname;
|
||||
};
|
||||
typedef struct key_netstarg key_netstarg;
|
||||
#ifdef __cplusplus
|
||||
extern "C" bool_t xdr_key_netstarg(XDR *, key_netstarg*);
|
||||
#elif __STDC__
|
||||
extern bool_t xdr_key_netstarg(XDR *, key_netstarg*);
|
||||
#else /* Old Style C */
|
||||
bool_t xdr_key_netstarg();
|
||||
#endif /* Old Style C */
|
||||
|
||||
|
||||
struct key_netstres {
|
||||
keystatus status;
|
||||
union {
|
||||
key_netstarg knet;
|
||||
} key_netstres_u;
|
||||
};
|
||||
typedef struct key_netstres key_netstres;
|
||||
#ifdef __cplusplus
|
||||
extern "C" bool_t xdr_key_netstres(XDR *, key_netstres*);
|
||||
#elif __STDC__
|
||||
extern bool_t xdr_key_netstres(XDR *, key_netstres*);
|
||||
#else /* Old Style C */
|
||||
bool_t xdr_key_netstres();
|
||||
#endif /* Old Style C */
|
||||
|
||||
|
||||
#ifndef opaque
|
||||
#define opaque char
|
||||
#endif
|
||||
|
||||
|
||||
#define KEY_PROG ((u_long)100029)
|
||||
#define KEY_VERS ((u_long)1)
|
||||
|
||||
#ifdef __cplusplus
|
||||
#define KEY_SET ((u_long)1)
|
||||
extern "C" keystatus * key_set_1(opaque *, CLIENT *);
|
||||
extern "C" keystatus * key_set_1_svc(opaque *, struct svc_req *);
|
||||
#define KEY_ENCRYPT ((u_long)2)
|
||||
extern "C" cryptkeyres * key_encrypt_1(cryptkeyarg *, CLIENT *);
|
||||
extern "C" cryptkeyres * key_encrypt_1_svc(cryptkeyarg *, struct svc_req *);
|
||||
#define KEY_DECRYPT ((u_long)3)
|
||||
extern "C" cryptkeyres * key_decrypt_1(cryptkeyarg *, CLIENT *);
|
||||
extern "C" cryptkeyres * key_decrypt_1_svc(cryptkeyarg *, struct svc_req *);
|
||||
#define KEY_GEN ((u_long)4)
|
||||
extern "C" des_block * key_gen_1(void *, CLIENT *);
|
||||
extern "C" des_block * key_gen_1_svc(void *, struct svc_req *);
|
||||
#define KEY_GETCRED ((u_long)5)
|
||||
extern "C" getcredres * key_getcred_1(netnamestr *, CLIENT *);
|
||||
extern "C" getcredres * key_getcred_1_svc(netnamestr *, struct svc_req *);
|
||||
|
||||
#elif __STDC__
|
||||
#define KEY_SET ((u_long)1)
|
||||
extern keystatus * key_set_1(opaque *, CLIENT *);
|
||||
extern keystatus * key_set_1_svc(opaque *, struct svc_req *);
|
||||
#define KEY_ENCRYPT ((u_long)2)
|
||||
extern cryptkeyres * key_encrypt_1(cryptkeyarg *, CLIENT *);
|
||||
extern cryptkeyres * key_encrypt_1_svc(cryptkeyarg *, struct svc_req *);
|
||||
#define KEY_DECRYPT ((u_long)3)
|
||||
extern cryptkeyres * key_decrypt_1(cryptkeyarg *, CLIENT *);
|
||||
extern cryptkeyres * key_decrypt_1_svc(cryptkeyarg *, struct svc_req *);
|
||||
#define KEY_GEN ((u_long)4)
|
||||
extern des_block * key_gen_1(void *, CLIENT *);
|
||||
extern des_block * key_gen_1_svc(void *, struct svc_req *);
|
||||
#define KEY_GETCRED ((u_long)5)
|
||||
extern getcredres * key_getcred_1(netnamestr *, CLIENT *);
|
||||
extern getcredres * key_getcred_1_svc(netnamestr *, struct svc_req *);
|
||||
|
||||
#else /* Old Style C */
|
||||
#define KEY_SET ((u_long)1)
|
||||
extern keystatus * key_set_1();
|
||||
extern keystatus * key_set_1_svc();
|
||||
#define KEY_ENCRYPT ((u_long)2)
|
||||
extern cryptkeyres * key_encrypt_1();
|
||||
extern cryptkeyres * key_encrypt_1_svc();
|
||||
#define KEY_DECRYPT ((u_long)3)
|
||||
extern cryptkeyres * key_decrypt_1();
|
||||
extern cryptkeyres * key_decrypt_1_svc();
|
||||
#define KEY_GEN ((u_long)4)
|
||||
extern des_block * key_gen_1();
|
||||
extern des_block * key_gen_1_svc();
|
||||
#define KEY_GETCRED ((u_long)5)
|
||||
extern getcredres * key_getcred_1();
|
||||
extern getcredres * key_getcred_1_svc();
|
||||
#endif /* Old Style C */
|
||||
#define KEY_VERS2 ((u_long)2)
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" keystatus * key_set_2(opaque *, CLIENT *);
|
||||
extern "C" keystatus * key_set_2_svc(opaque *, struct svc_req *);
|
||||
extern "C" cryptkeyres * key_encrypt_2(cryptkeyarg *, CLIENT *);
|
||||
extern "C" cryptkeyres * key_encrypt_2_svc(cryptkeyarg *, struct svc_req *);
|
||||
extern "C" cryptkeyres * key_decrypt_2(cryptkeyarg *, CLIENT *);
|
||||
extern "C" cryptkeyres * key_decrypt_2_svc(cryptkeyarg *, struct svc_req *);
|
||||
extern "C" des_block * key_gen_2(void *, CLIENT *);
|
||||
extern "C" des_block * key_gen_2_svc(void *, struct svc_req *);
|
||||
extern "C" getcredres * key_getcred_2(netnamestr *, CLIENT *);
|
||||
extern "C" getcredres * key_getcred_2_svc(netnamestr *, struct svc_req *);
|
||||
#define KEY_ENCRYPT_PK ((u_long)6)
|
||||
extern "C" cryptkeyres * key_encrypt_pk_2(cryptkeyarg2 *, CLIENT *);
|
||||
extern "C" cryptkeyres * key_encrypt_pk_2_svc(cryptkeyarg2 *, struct svc_req *);
|
||||
#define KEY_DECRYPT_PK ((u_long)7)
|
||||
extern "C" cryptkeyres * key_decrypt_pk_2(cryptkeyarg2 *, CLIENT *);
|
||||
extern "C" cryptkeyres * key_decrypt_pk_2_svc(cryptkeyarg2 *, struct svc_req *);
|
||||
#define KEY_NET_PUT ((u_long)8)
|
||||
extern "C" keystatus * key_net_put_2(key_netstarg *, CLIENT *);
|
||||
extern "C" keystatus * key_net_put_2_svc(key_netstarg *, struct svc_req *);
|
||||
#define KEY_NET_GET ((u_long)9)
|
||||
extern "C" key_netstres * key_net_get_2(void *, CLIENT *);
|
||||
extern "C" key_netstres * key_net_get_2_svc(void *, struct svc_req *);
|
||||
#define KEY_GET_CONV ((u_long)10)
|
||||
extern "C" cryptkeyres * key_get_conv_2(opaque *, CLIENT *);
|
||||
extern "C" cryptkeyres * key_get_conv_2_svc(opaque *, struct svc_req *);
|
||||
|
||||
#elif __STDC__
|
||||
extern keystatus * key_set_2(opaque *, CLIENT *);
|
||||
extern keystatus * key_set_2_svc(opaque *, struct svc_req *);
|
||||
extern cryptkeyres * key_encrypt_2(cryptkeyarg *, CLIENT *);
|
||||
extern cryptkeyres * key_encrypt_2_svc(cryptkeyarg *, struct svc_req *);
|
||||
extern cryptkeyres * key_decrypt_2(cryptkeyarg *, CLIENT *);
|
||||
extern cryptkeyres * key_decrypt_2_svc(cryptkeyarg *, struct svc_req *);
|
||||
extern des_block * key_gen_2(void *, CLIENT *);
|
||||
extern des_block * key_gen_2_svc(void *, struct svc_req *);
|
||||
extern getcredres * key_getcred_2(netnamestr *, CLIENT *);
|
||||
extern getcredres * key_getcred_2_svc(netnamestr *, struct svc_req *);
|
||||
#define KEY_ENCRYPT_PK ((u_long)6)
|
||||
extern cryptkeyres * key_encrypt_pk_2(cryptkeyarg2 *, CLIENT *);
|
||||
extern cryptkeyres * key_encrypt_pk_2_svc(cryptkeyarg2 *, struct svc_req *);
|
||||
#define KEY_DECRYPT_PK ((u_long)7)
|
||||
extern cryptkeyres * key_decrypt_pk_2(cryptkeyarg2 *, CLIENT *);
|
||||
extern cryptkeyres * key_decrypt_pk_2_svc(cryptkeyarg2 *, struct svc_req *);
|
||||
#define KEY_NET_PUT ((u_long)8)
|
||||
extern keystatus * key_net_put_2(key_netstarg *, CLIENT *);
|
||||
extern keystatus * key_net_put_2_svc(key_netstarg *, struct svc_req *);
|
||||
#define KEY_NET_GET ((u_long)9)
|
||||
extern key_netstres * key_net_get_2(void *, CLIENT *);
|
||||
extern key_netstres * key_net_get_2_svc(void *, struct svc_req *);
|
||||
#define KEY_GET_CONV ((u_long)10)
|
||||
extern cryptkeyres * key_get_conv_2(opaque *, CLIENT *);
|
||||
extern cryptkeyres * key_get_conv_2_svc(opaque *, struct svc_req *);
|
||||
|
||||
#else /* Old Style C */
|
||||
extern keystatus * key_set_2();
|
||||
extern keystatus * key_set_2_svc();
|
||||
extern cryptkeyres * key_encrypt_2();
|
||||
extern cryptkeyres * key_encrypt_2_svc();
|
||||
extern cryptkeyres * key_decrypt_2();
|
||||
extern cryptkeyres * key_decrypt_2_svc();
|
||||
extern des_block * key_gen_2();
|
||||
extern des_block * key_gen_2_svc();
|
||||
extern getcredres * key_getcred_2();
|
||||
extern getcredres * key_getcred_2_svc();
|
||||
#define KEY_ENCRYPT_PK ((u_long)6)
|
||||
extern cryptkeyres * key_encrypt_pk_2();
|
||||
extern cryptkeyres * key_encrypt_pk_2_svc();
|
||||
#define KEY_DECRYPT_PK ((u_long)7)
|
||||
extern cryptkeyres * key_decrypt_pk_2();
|
||||
extern cryptkeyres * key_decrypt_pk_2_svc();
|
||||
#define KEY_NET_PUT ((u_long)8)
|
||||
extern keystatus * key_net_put_2();
|
||||
extern keystatus * key_net_put_2_svc();
|
||||
#define KEY_NET_GET ((u_long)9)
|
||||
extern key_netstres * key_net_get_2();
|
||||
extern key_netstres * key_net_get_2_svc();
|
||||
#define KEY_GET_CONV ((u_long)10)
|
||||
extern cryptkeyres * key_get_conv_2();
|
||||
extern cryptkeyres * key_get_conv_2_svc();
|
||||
#endif /* Old Style C */
|
||||
|
||||
#endif /* !_KEY_PROT_H_RPCGEN */
|
|
@ -0,0 +1,74 @@
|
|||
/* @(#)netdb.h 2.1 88/07/29 3.9 RPCSRC */
|
||||
/*
|
||||
* Copyright (c) 2010, Oracle America, Inc.
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are
|
||||
* met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above
|
||||
* copyright notice, this list of conditions and the following
|
||||
* disclaimer in the documentation and/or other materials
|
||||
* provided with the distribution.
|
||||
* * Neither the name of the "Oracle America, Inc." nor the names of its
|
||||
* contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
* COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
||||
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/* Cleaned up for GNU C library roland@gnu.ai.mit.edu:
|
||||
added multiple inclusion protection and use of <sys/cdefs.h>.
|
||||
In GNU this file is #include'd by <netdb.h>. */
|
||||
|
||||
#ifndef _RPC_NETDB_H
|
||||
#define _RPC_NETDB_H 1
|
||||
|
||||
#include <features.h>
|
||||
|
||||
#define __need_size_t
|
||||
#include <stddef.h>
|
||||
|
||||
__BEGIN_DECLS
|
||||
|
||||
struct rpcent
|
||||
{
|
||||
char *r_name; /* Name of server for this rpc program. */
|
||||
char **r_aliases; /* Alias list. */
|
||||
int r_number; /* RPC program number. */
|
||||
};
|
||||
|
||||
extern void setrpcent (int __stayopen) __THROW;
|
||||
extern void endrpcent (void) __THROW;
|
||||
extern struct rpcent *getrpcbyname (const char *__name) __THROW;
|
||||
extern struct rpcent *getrpcbynumber (int __number) __THROW;
|
||||
extern struct rpcent *getrpcent (void) __THROW;
|
||||
|
||||
#ifdef __USE_MISC
|
||||
extern int getrpcbyname_r (const char *__name, struct rpcent *__result_buf,
|
||||
char *__buffer, size_t __buflen,
|
||||
struct rpcent **__result) __THROW;
|
||||
|
||||
extern int getrpcbynumber_r (int __number, struct rpcent *__result_buf,
|
||||
char *__buffer, size_t __buflen,
|
||||
struct rpcent **__result) __THROW;
|
||||
|
||||
extern int getrpcent_r (struct rpcent *__result_buf, char *__buffer,
|
||||
size_t __buflen, struct rpcent **__result) __THROW;
|
||||
#endif
|
||||
|
||||
__END_DECLS
|
||||
|
||||
#endif /* rpc/netdb.h */
|
|
@ -0,0 +1,95 @@
|
|||
/*
|
||||
* pmap_clnt.h
|
||||
* Supplies C routines to get to portmap services.
|
||||
*
|
||||
* Copyright (c) 2010, Oracle America, Inc.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are
|
||||
* met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above
|
||||
* copyright notice, this list of conditions and the following
|
||||
* disclaimer in the documentation and/or other materials
|
||||
* provided with the distribution.
|
||||
* * Neither the name of the "Oracle America, Inc." nor the names of its
|
||||
* contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
* COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
||||
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef _RPC_PMAP_CLNT_H
|
||||
#define _RPC_PMAP_CLNT_H 1
|
||||
|
||||
#include <features.h>
|
||||
#include <rpc/types.h>
|
||||
#include <rpc/xdr.h>
|
||||
#include <rpc/clnt.h>
|
||||
|
||||
__BEGIN_DECLS
|
||||
|
||||
typedef bool_t (*resultproc_t) (caddr_t __resp, struct sockaddr_in *__raddr);
|
||||
|
||||
/*
|
||||
* Usage:
|
||||
* success = pmap_set(program, version, protocol, port);
|
||||
* success = pmap_unset(program, version);
|
||||
* port = pmap_getport(address, program, version, protocol);
|
||||
* head = pmap_getmaps(address);
|
||||
* clnt_stat = pmap_rmtcall(address, program, version, procedure,
|
||||
* xdrargs, argsp, xdrres, resp, tout, port_ptr)
|
||||
* (works for udp only.)
|
||||
* clnt_stat = clnt_broadcast(program, version, procedure,
|
||||
* xdrargs, argsp, xdrres, resp, eachresult)
|
||||
* (like pmap_rmtcall, except the call is broadcasted to all
|
||||
* locally connected nets. For each valid response received,
|
||||
* the procedure eachresult is called. Its form is:
|
||||
* done = eachresult(resp, raddr)
|
||||
* bool_t done;
|
||||
* caddr_t resp;
|
||||
* struct sockaddr_in raddr;
|
||||
* where resp points to the results of the call and raddr is the
|
||||
* address if the responder to the broadcast.
|
||||
*/
|
||||
|
||||
extern bool_t pmap_set (const u_long __program, const u_long __vers,
|
||||
int __protocol, u_short __port) __THROW;
|
||||
extern bool_t pmap_unset (const u_long __program, const u_long __vers)
|
||||
__THROW;
|
||||
extern struct pmaplist *pmap_getmaps (struct sockaddr_in *__address) __THROW;
|
||||
extern enum clnt_stat pmap_rmtcall (struct sockaddr_in *__addr,
|
||||
const u_long __prog,
|
||||
const u_long __vers,
|
||||
const u_long __proc,
|
||||
xdrproc_t __xdrargs,
|
||||
caddr_t __argsp, xdrproc_t __xdrres,
|
||||
caddr_t __resp, struct timeval __tout,
|
||||
u_long *__port_ptr) __THROW;
|
||||
extern enum clnt_stat clnt_broadcast (const u_long __prog,
|
||||
const u_long __vers,
|
||||
const u_long __proc, xdrproc_t __xargs,
|
||||
caddr_t __argsp, xdrproc_t __xresults,
|
||||
caddr_t __resultsp,
|
||||
resultproc_t __eachresult) __THROW;
|
||||
extern u_short pmap_getport (struct sockaddr_in *__address,
|
||||
const u_long __program,
|
||||
const u_long __version, u_int __protocol)
|
||||
__THROW;
|
||||
|
||||
__END_DECLS
|
||||
|
||||
#endif /* rpc/pmap_clnt.h */
|
|
@ -0,0 +1,105 @@
|
|||
/*
|
||||
* pmap_prot.h
|
||||
* Protocol for the local binder service, or pmap.
|
||||
*
|
||||
* Copyright (c) 2010, Oracle America, Inc.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are
|
||||
* met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above
|
||||
* copyright notice, this list of conditions and the following
|
||||
* disclaimer in the documentation and/or other materials
|
||||
* provided with the distribution.
|
||||
* * Neither the name of the "Oracle America, Inc." nor the names of its
|
||||
* contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
* COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
||||
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef _RPC_PMAP_PROT_H
|
||||
#define _RPC_PMAP_PROT_H 1
|
||||
|
||||
#include <features.h>
|
||||
|
||||
#include <rpc/xdr.h>
|
||||
|
||||
__BEGIN_DECLS
|
||||
|
||||
/* 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 *)
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#define PMAPPORT ((u_short)111)
|
||||
#define PMAPPROG ((u_long)100000)
|
||||
#define PMAPVERS ((u_long)2)
|
||||
#define PMAPVERS_PROTO ((u_long)2)
|
||||
#define PMAPVERS_ORIG ((u_long)1)
|
||||
#define PMAPPROC_NULL ((u_long)0)
|
||||
#define PMAPPROC_SET ((u_long)1)
|
||||
#define PMAPPROC_UNSET ((u_long)2)
|
||||
#define PMAPPROC_GETPORT ((u_long)3)
|
||||
#define PMAPPROC_DUMP ((u_long)4)
|
||||
#define PMAPPROC_CALLIT ((u_long)5)
|
||||
|
||||
struct pmap {
|
||||
long unsigned pm_prog;
|
||||
long unsigned pm_vers;
|
||||
long unsigned pm_prot;
|
||||
long unsigned pm_port;
|
||||
};
|
||||
|
||||
extern bool_t xdr_pmap (XDR *__xdrs, struct pmap *__regs) __THROW;
|
||||
|
||||
struct pmaplist {
|
||||
struct pmap pml_map;
|
||||
struct pmaplist *pml_next;
|
||||
};
|
||||
|
||||
extern bool_t xdr_pmaplist (XDR *__xdrs, struct pmaplist **__rp) __THROW;
|
||||
|
||||
__END_DECLS
|
||||
|
||||
#endif /* rpc/pmap_prot.h */
|
|
@ -0,0 +1,65 @@
|
|||
/*
|
||||
* Structures and XDR routines for parameters to and replies from
|
||||
* the portmapper remote-call-service.
|
||||
*
|
||||
* Copyright (c) 2010, Oracle America, Inc.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are
|
||||
* met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above
|
||||
* copyright notice, this list of conditions and the following
|
||||
* disclaimer in the documentation and/or other materials
|
||||
* provided with the distribution.
|
||||
* * Neither the name of the "Oracle America, Inc." nor the names of its
|
||||
* contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
* COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
||||
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef _RPC_PMAP_RMT_H
|
||||
#define _RPC_PMAP_RMT_H 1
|
||||
|
||||
#include <features.h>
|
||||
#include <sys/types.h>
|
||||
#include <rpc/types.h>
|
||||
#include <rpc/xdr.h>
|
||||
|
||||
__BEGIN_DECLS
|
||||
|
||||
struct rmtcallargs {
|
||||
u_long prog, vers, proc, arglen;
|
||||
caddr_t args_ptr;
|
||||
xdrproc_t xdr_args;
|
||||
};
|
||||
|
||||
extern bool_t xdr_rmtcall_args (XDR *__xdrs, struct rmtcallargs *__crp)
|
||||
__THROW;
|
||||
|
||||
struct rmtcallres {
|
||||
u_long *port_ptr;
|
||||
u_long resultslen;
|
||||
caddr_t results_ptr;
|
||||
xdrproc_t xdr_results;
|
||||
};
|
||||
|
||||
extern bool_t xdr_rmtcallres (XDR *__xdrs, struct rmtcallres *__crp) __THROW;
|
||||
|
||||
__END_DECLS
|
||||
|
||||
#endif /* rpc/pmap_rmt.h */
|
|
@ -0,0 +1,94 @@
|
|||
/*
|
||||
* rpc.h, Just includes the billions of rpc header files necessary to
|
||||
* do remote procedure calling.
|
||||
*
|
||||
* Copyright (c) 2010, Oracle America, Inc.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are
|
||||
* met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above
|
||||
* copyright notice, this list of conditions and the following
|
||||
* disclaimer in the documentation and/or other materials
|
||||
* provided with the distribution.
|
||||
* * Neither the name of the "Oracle America, Inc." nor the names of its
|
||||
* contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
* COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
||||
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef _RPC_RPC_H
|
||||
#define _RPC_RPC_H 1
|
||||
|
||||
#include <rpc/types.h> /* some typedefs */
|
||||
#include <netinet/in.h>
|
||||
|
||||
/* external data representation interfaces */
|
||||
#include <rpc/xdr.h> /* generic (de)serializer */
|
||||
|
||||
/* Client side only authentication */
|
||||
#include <rpc/auth.h> /* generic authenticator (client side) */
|
||||
|
||||
/* Client side (mostly) remote procedure call */
|
||||
#include <rpc/clnt.h> /* generic rpc stuff */
|
||||
|
||||
/* semi-private protocol headers */
|
||||
#include <rpc/rpc_msg.h> /* protocol for rpc messages */
|
||||
#include <rpc/auth_unix.h> /* protocol for unix style cred */
|
||||
#include <rpc/auth_des.h> /* protocol for des style cred */
|
||||
|
||||
/* Server side only remote procedure callee */
|
||||
#include <rpc/svc.h> /* service manager and multiplexer */
|
||||
#include <rpc/svc_auth.h> /* service side authenticator */
|
||||
|
||||
/*
|
||||
* COMMENT OUT THE NEXT INCLUDE IF RUNNING ON SUN OS OR ON A VERSION
|
||||
* OF UNIX BASED ON NFSSRC. These systems will already have the structures
|
||||
* defined by <rpc/netdb.h> included in <netdb.h>.
|
||||
*/
|
||||
/* routines for parsing /etc/rpc */
|
||||
#include <rpc/netdb.h> /* structures and routines to parse /etc/rpc */
|
||||
|
||||
__BEGIN_DECLS
|
||||
|
||||
/* Global variables, protected for multi-threaded applications. */
|
||||
extern fd_set *__rpc_thread_svc_fdset (void) __attribute__ ((__const__));
|
||||
#define svc_fdset (*__rpc_thread_svc_fdset ())
|
||||
|
||||
extern struct rpc_createerr *__rpc_thread_createerr (void)
|
||||
__attribute__ ((__const__));
|
||||
#define get_rpc_createerr() (*__rpc_thread_createerr ())
|
||||
/* The people who "engineered" RPC should bee punished for naming the
|
||||
data structure and the variable the same. We cannot always define the
|
||||
macro 'rpc_createerr' because this would prevent people from defining
|
||||
object of type 'struct rpc_createerr'. So we leave it up to the user
|
||||
to select transparent replacement also of this variable. */
|
||||
#ifdef _RPC_MT_VARS
|
||||
# define rpc_createerr (*__rpc_thread_createerr ())
|
||||
#endif
|
||||
|
||||
extern struct pollfd **__rpc_thread_svc_pollfd (void)
|
||||
__attribute__ ((__const__));
|
||||
#define svc_pollfd (*__rpc_thread_svc_pollfd ())
|
||||
|
||||
extern int *__rpc_thread_svc_max_pollfd (void) __attribute__ ((__const__));
|
||||
#define svc_max_pollfd (*__rpc_thread_svc_max_pollfd ())
|
||||
|
||||
__END_DECLS
|
||||
|
||||
#endif /* rpc/rpc.h */
|
|
@ -0,0 +1,71 @@
|
|||
/*
|
||||
* Generic DES driver interface
|
||||
* Keep this file hardware independent!
|
||||
* Copyright (c) 2010, Oracle America, Inc.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are
|
||||
* met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above
|
||||
* copyright notice, this list of conditions and the following
|
||||
* disclaimer in the documentation and/or other materials
|
||||
* provided with the distribution.
|
||||
* * Neither the name of the "Oracle America, Inc." nor the names of its
|
||||
* contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
* COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
||||
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef _DES_H
|
||||
#define _DES_H
|
||||
|
||||
#include <sys/types.h>
|
||||
|
||||
#define DES_MAXLEN 65536 /* maximum # of bytes to encrypt */
|
||||
#define DES_QUICKLEN 16 /* maximum # of bytes to encrypt quickly */
|
||||
|
||||
enum desdir
|
||||
{
|
||||
ENCRYPT, DECRYPT
|
||||
};
|
||||
enum desmode
|
||||
{
|
||||
CBC, ECB
|
||||
};
|
||||
|
||||
/*
|
||||
* parameters to ioctl call
|
||||
*/
|
||||
struct desparams
|
||||
{
|
||||
u_char des_key[8]; /* key (with low bit parity) */
|
||||
enum desdir des_dir; /* direction */
|
||||
enum desmode des_mode; /* mode */
|
||||
u_char des_ivec[8]; /* input vector */
|
||||
unsigned des_len; /* number of bytes to crypt */
|
||||
union
|
||||
{
|
||||
u_char UDES_data[DES_QUICKLEN];
|
||||
u_char *UDES_buf;
|
||||
}
|
||||
UDES;
|
||||
#define des_data UDES.UDES_data /* direct data here if quick */
|
||||
#define des_buf UDES.UDES_buf /* otherwise, pointer to data */
|
||||
};
|
||||
|
||||
#endif
|
|
@ -0,0 +1,198 @@
|
|||
/*
|
||||
* rpc_msg.h
|
||||
* rpc message definition
|
||||
*
|
||||
* Copyright (c) 2010, Oracle America, Inc.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are
|
||||
* met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above
|
||||
* copyright notice, this list of conditions and the following
|
||||
* disclaimer in the documentation and/or other materials
|
||||
* provided with the distribution.
|
||||
* * Neither the name of the "Oracle America, Inc." nor the names of its
|
||||
* contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
* COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
||||
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef _RPC_MSG_H
|
||||
#define _RPC_MSG_H 1
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
|
||||
#include <rpc/xdr.h>
|
||||
#include <rpc/clnt.h>
|
||||
|
||||
#define RPC_MSG_VERSION ((u_long) 2)
|
||||
#define RPC_SERVICE_PORT ((u_short) 2048)
|
||||
|
||||
__BEGIN_DECLS
|
||||
|
||||
/*
|
||||
* Bottom up definition of an rpc message.
|
||||
* NOTE: call and reply use the same overall struct but
|
||||
* different parts of unions within it.
|
||||
*/
|
||||
|
||||
enum msg_type {
|
||||
CALL=0,
|
||||
REPLY=1
|
||||
};
|
||||
|
||||
enum reply_stat {
|
||||
MSG_ACCEPTED=0,
|
||||
MSG_DENIED=1
|
||||
};
|
||||
|
||||
enum accept_stat {
|
||||
SUCCESS=0,
|
||||
PROG_UNAVAIL=1,
|
||||
PROG_MISMATCH=2,
|
||||
PROC_UNAVAIL=3,
|
||||
GARBAGE_ARGS=4,
|
||||
SYSTEM_ERR=5
|
||||
};
|
||||
|
||||
enum reject_stat {
|
||||
RPC_MISMATCH=0,
|
||||
AUTH_ERROR=1
|
||||
};
|
||||
|
||||
/*
|
||||
* Reply part of an rpc exchange
|
||||
*/
|
||||
|
||||
/*
|
||||
* Reply to an rpc request that was accepted by the server.
|
||||
* Note: there could be an error even though the request was
|
||||
* accepted.
|
||||
*/
|
||||
struct accepted_reply {
|
||||
struct opaque_auth ar_verf;
|
||||
enum accept_stat ar_stat;
|
||||
union {
|
||||
struct {
|
||||
u_long low;
|
||||
u_long high;
|
||||
} AR_versions;
|
||||
struct {
|
||||
caddr_t where;
|
||||
xdrproc_t proc;
|
||||
} AR_results;
|
||||
/* and many other null cases */
|
||||
} ru;
|
||||
#define ar_results ru.AR_results
|
||||
#define ar_vers ru.AR_versions
|
||||
};
|
||||
|
||||
/*
|
||||
* Reply to an rpc request that was rejected by the server.
|
||||
*/
|
||||
struct rejected_reply {
|
||||
enum reject_stat rj_stat;
|
||||
union {
|
||||
struct {
|
||||
u_long low;
|
||||
u_long high;
|
||||
} RJ_versions;
|
||||
enum auth_stat RJ_why; /* why authentication did not work */
|
||||
} ru;
|
||||
#define rj_vers ru.RJ_versions
|
||||
#define rj_why ru.RJ_why
|
||||
};
|
||||
|
||||
/*
|
||||
* Body of a reply to an rpc request.
|
||||
*/
|
||||
struct reply_body {
|
||||
enum reply_stat rp_stat;
|
||||
union {
|
||||
struct accepted_reply RP_ar;
|
||||
struct rejected_reply RP_dr;
|
||||
} ru;
|
||||
#define rp_acpt ru.RP_ar
|
||||
#define rp_rjct ru.RP_dr
|
||||
};
|
||||
|
||||
/*
|
||||
* Body of an rpc request call.
|
||||
*/
|
||||
struct call_body {
|
||||
u_long cb_rpcvers; /* must be equal to two */
|
||||
u_long cb_prog;
|
||||
u_long cb_vers;
|
||||
u_long cb_proc;
|
||||
struct opaque_auth cb_cred;
|
||||
struct opaque_auth cb_verf; /* protocol specific - provided by client */
|
||||
};
|
||||
|
||||
/*
|
||||
* The rpc message
|
||||
*/
|
||||
struct rpc_msg {
|
||||
u_long rm_xid;
|
||||
enum msg_type rm_direction;
|
||||
union {
|
||||
struct call_body RM_cmb;
|
||||
struct reply_body RM_rmb;
|
||||
} ru;
|
||||
#define rm_call ru.RM_cmb
|
||||
#define rm_reply ru.RM_rmb
|
||||
};
|
||||
#define acpted_rply ru.RM_rmb.ru.RP_ar
|
||||
#define rjcted_rply ru.RM_rmb.ru.RP_dr
|
||||
|
||||
|
||||
/*
|
||||
* XDR routine to handle a rpc message.
|
||||
* xdr_callmsg(xdrs, cmsg)
|
||||
* XDR *xdrs;
|
||||
* struct rpc_msg *cmsg;
|
||||
*/
|
||||
extern bool_t xdr_callmsg (XDR *__xdrs, struct rpc_msg *__cmsg) __THROW;
|
||||
|
||||
/*
|
||||
* XDR routine to pre-serialize the static part of a rpc message.
|
||||
* xdr_callhdr(xdrs, cmsg)
|
||||
* XDR *xdrs;
|
||||
* struct rpc_msg *cmsg;
|
||||
*/
|
||||
extern bool_t xdr_callhdr (XDR *__xdrs, struct rpc_msg *__cmsg) __THROW;
|
||||
|
||||
/*
|
||||
* XDR routine to handle a rpc reply.
|
||||
* xdr_replymsg(xdrs, rmsg)
|
||||
* XDR *xdrs;
|
||||
* struct rpc_msg *rmsg;
|
||||
*/
|
||||
extern bool_t xdr_replymsg (XDR *__xdrs, struct rpc_msg *__rmsg) __THROW;
|
||||
|
||||
/*
|
||||
* Fills in the error part of a reply message.
|
||||
* _seterr_reply(msg, error)
|
||||
* struct rpc_msg *msg;
|
||||
* struct rpc_err *error;
|
||||
*/
|
||||
extern void _seterr_reply (struct rpc_msg *__msg, struct rpc_err *__error)
|
||||
__THROW;
|
||||
|
||||
__END_DECLS
|
||||
|
||||
#endif /* rpc/rpc_msg.h */
|
|
@ -0,0 +1,336 @@
|
|||
/*
|
||||
* svc.h, Server-side remote procedure call interface.
|
||||
*
|
||||
* Copyright (C) 2012-2016 Free Software Foundation, Inc.
|
||||
* This file is part of the GNU C Library.
|
||||
*
|
||||
* The GNU C Library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* The GNU C Library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with the GNU C Library; if not, see
|
||||
* <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
* Copyright (c) 2010, Oracle America, Inc.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are
|
||||
* met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above
|
||||
* copyright notice, this list of conditions and the following
|
||||
* disclaimer in the documentation and/or other materials
|
||||
* provided with the distribution.
|
||||
* * Neither the name of the "Oracle America, Inc." nor the names of its
|
||||
* contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
* COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
||||
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef _RPC_SVC_H
|
||||
#define _RPC_SVC_H 1
|
||||
|
||||
#include <features.h>
|
||||
#include <rpc/rpc_msg.h>
|
||||
|
||||
__BEGIN_DECLS
|
||||
|
||||
/*
|
||||
* This interface must manage two items concerning remote procedure calling:
|
||||
*
|
||||
* 1) An arbitrary number of transport connections upon which rpc requests
|
||||
* are received. The two most notable transports are TCP and UDP; they are
|
||||
* created and registered by routines in svc_tcp.c and svc_udp.c, respectively;
|
||||
* they in turn call xprt_register and xprt_unregister.
|
||||
*
|
||||
* 2) An arbitrary number of locally registered services. Services are
|
||||
* described by the following four data: program number, version number,
|
||||
* "service dispatch" function, a transport handle, and a boolean that
|
||||
* indicates whether or not the exported program should be registered with a
|
||||
* local binder service; if true the program's number and version and the
|
||||
* port number from the transport handle are registered with the binder.
|
||||
* These data are registered with the rpc svc system via svc_register.
|
||||
*
|
||||
* A service's dispatch function is called whenever an rpc request comes in
|
||||
* on a transport. The request's program and version numbers must match
|
||||
* those of the registered service. The dispatch function is passed two
|
||||
* parameters, struct svc_req * and SVCXPRT *, defined below.
|
||||
*/
|
||||
|
||||
enum xprt_stat {
|
||||
XPRT_DIED,
|
||||
XPRT_MOREREQS,
|
||||
XPRT_IDLE
|
||||
};
|
||||
|
||||
/*
|
||||
* Server side transport handle
|
||||
*/
|
||||
typedef struct SVCXPRT SVCXPRT;
|
||||
struct SVCXPRT {
|
||||
int xp_sock;
|
||||
u_short xp_port; /* associated port number */
|
||||
const struct xp_ops {
|
||||
bool_t (*xp_recv) (SVCXPRT *__xprt, struct rpc_msg *__msg);
|
||||
/* receive incoming requests */
|
||||
enum xprt_stat (*xp_stat) (SVCXPRT *__xprt);
|
||||
/* get transport status */
|
||||
bool_t (*xp_getargs) (SVCXPRT *__xprt, xdrproc_t __xdr_args,
|
||||
caddr_t __args_ptr); /* get arguments */
|
||||
bool_t (*xp_reply) (SVCXPRT *__xprt, struct rpc_msg *__msg);
|
||||
/* send reply */
|
||||
bool_t (*xp_freeargs) (SVCXPRT *__xprt, xdrproc_t __xdr_args,
|
||||
caddr_t __args_ptr);
|
||||
/* free mem allocated for args */
|
||||
void (*xp_destroy) (SVCXPRT *__xprt);
|
||||
/* destroy this struct */
|
||||
} *xp_ops;
|
||||
int xp_addrlen; /* length of remote address */
|
||||
struct sockaddr_in xp_raddr; /* remote address */
|
||||
struct opaque_auth xp_verf; /* raw response verifier */
|
||||
caddr_t xp_p1; /* private */
|
||||
caddr_t xp_p2; /* private */
|
||||
char xp_pad [256]; /* padding, internal use */
|
||||
};
|
||||
|
||||
/*
|
||||
* Approved way of getting address of caller
|
||||
*/
|
||||
#define svc_getcaller(x) (&(x)->xp_raddr)
|
||||
|
||||
/*
|
||||
* Operations defined on an SVCXPRT handle
|
||||
*
|
||||
* SVCXPRT *xprt;
|
||||
* struct rpc_msg *msg;
|
||||
* xdrproc_t xargs;
|
||||
* caddr_t argsp;
|
||||
*/
|
||||
#define SVC_RECV(xprt, msg) \
|
||||
(*(xprt)->xp_ops->xp_recv)((xprt), (msg))
|
||||
#define svc_recv(xprt, msg) \
|
||||
(*(xprt)->xp_ops->xp_recv)((xprt), (msg))
|
||||
|
||||
#define SVC_STAT(xprt) \
|
||||
(*(xprt)->xp_ops->xp_stat)(xprt)
|
||||
#define svc_stat(xprt) \
|
||||
(*(xprt)->xp_ops->xp_stat)(xprt)
|
||||
|
||||
#define SVC_GETARGS(xprt, xargs, argsp) \
|
||||
(*(xprt)->xp_ops->xp_getargs)((xprt), (xargs), (argsp))
|
||||
#define svc_getargs(xprt, xargs, argsp) \
|
||||
(*(xprt)->xp_ops->xp_getargs)((xprt), (xargs), (argsp))
|
||||
|
||||
#define SVC_REPLY(xprt, msg) \
|
||||
(*(xprt)->xp_ops->xp_reply) ((xprt), (msg))
|
||||
#define svc_reply(xprt, msg) \
|
||||
(*(xprt)->xp_ops->xp_reply) ((xprt), (msg))
|
||||
|
||||
#define SVC_FREEARGS(xprt, xargs, argsp) \
|
||||
(*(xprt)->xp_ops->xp_freeargs)((xprt), (xargs), (argsp))
|
||||
#define svc_freeargs(xprt, xargs, argsp) \
|
||||
(*(xprt)->xp_ops->xp_freeargs)((xprt), (xargs), (argsp))
|
||||
|
||||
#define SVC_DESTROY(xprt) \
|
||||
(*(xprt)->xp_ops->xp_destroy)(xprt)
|
||||
#define svc_destroy(xprt) \
|
||||
(*(xprt)->xp_ops->xp_destroy)(xprt)
|
||||
|
||||
|
||||
/*
|
||||
* Service request
|
||||
*/
|
||||
struct svc_req {
|
||||
rpcprog_t rq_prog; /* service program number */
|
||||
rpcvers_t rq_vers; /* service protocol version */
|
||||
rpcproc_t rq_proc; /* the desired procedure */
|
||||
struct opaque_auth rq_cred; /* raw creds from the wire */
|
||||
caddr_t rq_clntcred; /* read only cooked cred */
|
||||
SVCXPRT *rq_xprt; /* associated transport */
|
||||
};
|
||||
|
||||
#ifndef __DISPATCH_FN_T
|
||||
#define __DISPATCH_FN_T
|
||||
typedef void (*__dispatch_fn_t) (struct svc_req*, SVCXPRT*);
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Service registration
|
||||
*
|
||||
* svc_register(xprt, prog, vers, dispatch, protocol)
|
||||
* SVCXPRT *xprt;
|
||||
* rpcprog_t prog;
|
||||
* rpcvers_t vers;
|
||||
* void (*dispatch)(struct svc_req*, SVCXPRT*);
|
||||
* rpcprot_t protocol; like TCP or UDP, zero means do not register
|
||||
*/
|
||||
extern bool_t svc_register (SVCXPRT *__xprt, rpcprog_t __prog,
|
||||
rpcvers_t __vers, __dispatch_fn_t __dispatch,
|
||||
rpcprot_t __protocol) __THROW;
|
||||
|
||||
/*
|
||||
* Service un-registration
|
||||
*
|
||||
* svc_unregister(prog, vers)
|
||||
* rpcprog_t prog;
|
||||
* rpcvers_t vers;
|
||||
*/
|
||||
extern void svc_unregister (rpcprog_t __prog, rpcvers_t __vers) __THROW;
|
||||
|
||||
/*
|
||||
* Transport registration.
|
||||
*
|
||||
* xprt_register(xprt)
|
||||
* SVCXPRT *xprt;
|
||||
*/
|
||||
extern void xprt_register (SVCXPRT *__xprt) __THROW;
|
||||
|
||||
/*
|
||||
* Transport un-register
|
||||
*
|
||||
* xprt_unregister(xprt)
|
||||
* SVCXPRT *xprt;
|
||||
*/
|
||||
extern void xprt_unregister (SVCXPRT *__xprt) __THROW;
|
||||
|
||||
|
||||
/*
|
||||
* When the service routine is called, it must first check to see if it
|
||||
* knows about the procedure; if not, it should call svcerr_noproc
|
||||
* and return. If so, it should deserialize its arguments via
|
||||
* SVC_GETARGS (defined above). If the deserialization does not work,
|
||||
* svcerr_decode should be called followed by a return. Successful
|
||||
* decoding of the arguments should be followed the execution of the
|
||||
* procedure's code and a call to svc_sendreply.
|
||||
*
|
||||
* Also, if the service refuses to execute the procedure due to too-
|
||||
* weak authentication parameters, svcerr_weakauth should be called.
|
||||
* Note: do not confuse access-control failure with weak authentication!
|
||||
*
|
||||
* NB: In pure implementations of rpc, the caller always waits for a reply
|
||||
* msg. This message is sent when svc_sendreply is called.
|
||||
* Therefore pure service implementations should always call
|
||||
* svc_sendreply even if the function logically returns void; use
|
||||
* xdr.h - xdr_void for the xdr routine. HOWEVER, tcp based rpc allows
|
||||
* for the abuse of pure rpc via batched calling or pipelining. In the
|
||||
* case of a batched call, svc_sendreply should NOT be called since
|
||||
* this would send a return message, which is what batching tries to avoid.
|
||||
* It is the service/protocol writer's responsibility to know which calls are
|
||||
* batched and which are not. Warning: responding to batch calls may
|
||||
* deadlock the caller and server processes!
|
||||
*/
|
||||
|
||||
extern bool_t svc_sendreply (SVCXPRT *__xprt, xdrproc_t __xdr_results,
|
||||
caddr_t __xdr_location) __THROW;
|
||||
|
||||
extern void svcerr_decode (SVCXPRT *__xprt) __THROW;
|
||||
|
||||
extern void svcerr_weakauth (SVCXPRT *__xprt) __THROW;
|
||||
|
||||
extern void svcerr_noproc (SVCXPRT *__xprt) __THROW;
|
||||
|
||||
extern void svcerr_progvers (SVCXPRT *__xprt, rpcvers_t __low_vers,
|
||||
rpcvers_t __high_vers) __THROW;
|
||||
|
||||
extern void svcerr_auth (SVCXPRT *__xprt, enum auth_stat __why) __THROW;
|
||||
|
||||
extern void svcerr_noprog (SVCXPRT *__xprt) __THROW;
|
||||
|
||||
extern void svcerr_systemerr (SVCXPRT *__xprt) __THROW;
|
||||
|
||||
/*
|
||||
* Lowest level dispatching -OR- who owns this process anyway.
|
||||
* Somebody has to wait for incoming requests and then call the correct
|
||||
* service routine. The routine svc_run does infinite waiting; i.e.,
|
||||
* svc_run never returns.
|
||||
* Since another (coexistent) package may wish to selectively wait for
|
||||
* incoming calls or other events outside of the rpc architecture, the
|
||||
* routine svc_getreq is provided. It must be passed readfds, the
|
||||
* "in-place" results of a select system call (see select, section 2).
|
||||
*/
|
||||
|
||||
/*
|
||||
* Global keeper of rpc service descriptors in use
|
||||
* dynamic; must be inspected before each call to select
|
||||
*/
|
||||
|
||||
extern struct pollfd *svc_pollfd;
|
||||
extern int svc_max_pollfd;
|
||||
extern fd_set svc_fdset;
|
||||
#define svc_fds svc_fdset.fds_bits[0] /* compatibility */
|
||||
|
||||
/*
|
||||
* a small program implemented by the svc_rpc implementation itself;
|
||||
* also see clnt.h for protocol numbers.
|
||||
*/
|
||||
extern void svc_getreq (int __rdfds) __THROW;
|
||||
extern void svc_getreq_common (const int __fd) __THROW;
|
||||
extern void svc_getreqset (fd_set *__readfds) __THROW;
|
||||
extern void svc_getreq_poll (struct pollfd *, const int) __THROW;
|
||||
extern void svc_exit (void) __THROW;
|
||||
extern void svc_run (void) __THROW;
|
||||
|
||||
/*
|
||||
* Socket to use on svcxxx_create call to get default socket
|
||||
*/
|
||||
#define RPC_ANYSOCK -1
|
||||
|
||||
/*
|
||||
* These are the existing service side transport implementations
|
||||
*/
|
||||
|
||||
/*
|
||||
* Memory based rpc for testing and timing.
|
||||
*/
|
||||
extern SVCXPRT *svcraw_create (void) __THROW;
|
||||
|
||||
/*
|
||||
* Udp based rpc.
|
||||
*/
|
||||
extern SVCXPRT *svcudp_create (int __sock) __THROW;
|
||||
extern SVCXPRT *svcudp_bufcreate (int __sock, u_int __sendsz, u_int __recvsz)
|
||||
__THROW;
|
||||
|
||||
/*
|
||||
* Tcp based rpc.
|
||||
*/
|
||||
extern SVCXPRT *svctcp_create (int __sock, u_int __sendsize, u_int __recvsize)
|
||||
__THROW;
|
||||
|
||||
/*
|
||||
* FD based rpc.
|
||||
*/
|
||||
extern SVCXPRT *svcfd_create (int __sock, u_int __sendsize, u_int __recvsize)
|
||||
__THROW;
|
||||
|
||||
/*
|
||||
* Unix based rpc.
|
||||
*/
|
||||
extern SVCXPRT *svcunix_create (int __sock, u_int __sendsize, u_int __recvsize,
|
||||
char *__path) __THROW;
|
||||
|
||||
|
||||
__END_DECLS
|
||||
|
||||
#endif /* rpc/svc.h */
|
|
@ -0,0 +1,50 @@
|
|||
/*
|
||||
* svc_auth.h, Service side of rpc authentication.
|
||||
*
|
||||
* Copyright (c) 2010, Oracle America, Inc.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are
|
||||
* met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above
|
||||
* copyright notice, this list of conditions and the following
|
||||
* disclaimer in the documentation and/or other materials
|
||||
* provided with the distribution.
|
||||
* * Neither the name of the "Oracle America, Inc." nor the names of its
|
||||
* contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
* COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
||||
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef _RPC_SVC_AUTH_H
|
||||
#define _RPC_SVC_AUTH_H 1
|
||||
|
||||
#include <features.h>
|
||||
#include <rpc/svc.h>
|
||||
|
||||
__BEGIN_DECLS
|
||||
|
||||
/*
|
||||
* Server side authenticator
|
||||
*/
|
||||
extern enum auth_stat _authenticate (struct svc_req *__rqst,
|
||||
struct rpc_msg *__msg) __THROW;
|
||||
|
||||
__END_DECLS
|
||||
|
||||
#endif /* rpc/svc_auth.h */
|
|
@ -0,0 +1,105 @@
|
|||
/*
|
||||
* Copyright (c) 2010, Oracle America, Inc.
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are
|
||||
* met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above
|
||||
* copyright notice, this list of conditions and the following
|
||||
* disclaimer in the documentation and/or other materials
|
||||
* provided with the distribution.
|
||||
* * Neither the name of the "Oracle America, Inc." nor the names of its
|
||||
* contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
* COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
||||
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
/* fixincludes should not add extern "C" to this file */
|
||||
/*
|
||||
* Rpc additions to <sys/types.h>
|
||||
*/
|
||||
#ifndef _RPC_TYPES_H
|
||||
#define _RPC_TYPES_H 1
|
||||
|
||||
typedef int bool_t;
|
||||
typedef int enum_t;
|
||||
/* This needs to be changed to uint32_t in the future */
|
||||
typedef unsigned long rpcprog_t;
|
||||
typedef unsigned long rpcvers_t;
|
||||
typedef unsigned long rpcproc_t;
|
||||
typedef unsigned long rpcprot_t;
|
||||
typedef unsigned long rpcport_t;
|
||||
|
||||
#define __dontcare__ -1
|
||||
|
||||
#ifndef FALSE
|
||||
# define FALSE (0)
|
||||
#endif
|
||||
|
||||
#ifndef TRUE
|
||||
# define TRUE (1)
|
||||
#endif
|
||||
|
||||
#ifndef NULL
|
||||
# define NULL 0
|
||||
#endif
|
||||
|
||||
#include <stdlib.h> /* For malloc decl. */
|
||||
#define mem_alloc(bsize) malloc(bsize)
|
||||
/*
|
||||
* XXX: This must not use the second argument, or code in xdr_array.c needs
|
||||
* to be modified.
|
||||
*/
|
||||
#define mem_free(ptr, bsize) free(ptr)
|
||||
|
||||
#ifndef makedev /* ie, we haven't already included it */
|
||||
#include <sys/types.h>
|
||||
#endif
|
||||
|
||||
#if defined __APPLE_CC__ || defined __FreeBSD__
|
||||
# define __u_char_defined
|
||||
# define __daddr_t_defined
|
||||
#endif
|
||||
|
||||
#ifndef __u_char_defined
|
||||
typedef __u_char u_char;
|
||||
typedef __u_short u_short;
|
||||
typedef __u_int u_int;
|
||||
typedef __u_long u_long;
|
||||
typedef __quad_t quad_t;
|
||||
typedef __u_quad_t u_quad_t;
|
||||
typedef __fsid_t fsid_t;
|
||||
# define __u_char_defined
|
||||
#endif
|
||||
#ifndef __daddr_t_defined
|
||||
typedef __daddr_t daddr_t;
|
||||
typedef __caddr_t caddr_t;
|
||||
# define __daddr_t_defined
|
||||
#endif
|
||||
|
||||
#include <sys/time.h>
|
||||
#include <sys/param.h>
|
||||
|
||||
#include <netinet/in.h>
|
||||
|
||||
#ifndef INADDR_LOOPBACK
|
||||
#define INADDR_LOOPBACK (u_long)0x7F000001
|
||||
#endif
|
||||
#ifndef MAXHOSTNAMELEN
|
||||
#define MAXHOSTNAMELEN 64
|
||||
#endif
|
||||
|
||||
#endif /* rpc/types.h */
|
|
@ -0,0 +1,377 @@
|
|||
/*
|
||||
* xdr.h, External Data Representation Serialization Routines.
|
||||
*
|
||||
* Copyright (c) 2010, 2012, Oracle America, Inc.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are
|
||||
* met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above
|
||||
* copyright notice, this list of conditions and the following
|
||||
* disclaimer in the documentation and/or other materials
|
||||
* provided with the distribution.
|
||||
* * Neither the name of the "Oracle America, Inc." nor the names of its
|
||||
* contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
* COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
|
||||
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef _RPC_XDR_H
|
||||
#define _RPC_XDR_H 1
|
||||
|
||||
#include <features.h>
|
||||
#include <sys/types.h>
|
||||
#include <rpc/types.h>
|
||||
|
||||
/* We need FILE. */
|
||||
#include <stdio.h>
|
||||
|
||||
__BEGIN_DECLS
|
||||
|
||||
/*
|
||||
* XDR provides a conventional way for converting between C data
|
||||
* types and an external bit-string representation. Library supplied
|
||||
* routines provide for the conversion on built-in C data types. These
|
||||
* routines and utility routines defined here are used to help implement
|
||||
* a type encode/decode routine for each user-defined type.
|
||||
*
|
||||
* Each data type provides a single procedure which takes two arguments:
|
||||
*
|
||||
* bool_t
|
||||
* xdrproc(xdrs, argresp)
|
||||
* XDR *xdrs;
|
||||
* <type> *argresp;
|
||||
*
|
||||
* xdrs is an instance of a XDR handle, to which or from which the data
|
||||
* type is to be converted. argresp is a pointer to the structure to be
|
||||
* converted. The XDR handle contains an operation field which indicates
|
||||
* which of the operations (ENCODE, DECODE * or FREE) is to be performed.
|
||||
*
|
||||
* XDR_DECODE may allocate space if the pointer argresp is null. This
|
||||
* data can be freed with the XDR_FREE operation.
|
||||
*
|
||||
* We write only one procedure per data type to make it easy
|
||||
* to keep the encode and decode procedures for a data type consistent.
|
||||
* In many cases the same code performs all operations on a user defined type,
|
||||
* because all the hard work is done in the component type routines.
|
||||
* decode as a series of calls on the nested data types.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Xdr operations. XDR_ENCODE causes the type to be encoded into the
|
||||
* stream. XDR_DECODE causes the type to be extracted from the stream.
|
||||
* XDR_FREE can be used to release the space allocated by an XDR_DECODE
|
||||
* request.
|
||||
*/
|
||||
enum xdr_op {
|
||||
XDR_ENCODE = 0,
|
||||
XDR_DECODE = 1,
|
||||
XDR_FREE = 2
|
||||
};
|
||||
|
||||
/*
|
||||
* This is the number of bytes per unit of external data.
|
||||
*/
|
||||
#define BYTES_PER_XDR_UNIT (4)
|
||||
/*
|
||||
* This only works if the above is a power of 2. But it's defined to be
|
||||
* 4 by the appropriate RFCs. So it will work. And it's normally quicker
|
||||
* than the old routine.
|
||||
*/
|
||||
#if 1
|
||||
#define RNDUP(x) (((x) + BYTES_PER_XDR_UNIT - 1) & ~(BYTES_PER_XDR_UNIT - 1))
|
||||
#else /* this is the old routine */
|
||||
#define RNDUP(x) ((((x) + BYTES_PER_XDR_UNIT - 1) / BYTES_PER_XDR_UNIT) \
|
||||
* BYTES_PER_XDR_UNIT)
|
||||
#endif
|
||||
|
||||
/*
|
||||
* The XDR handle.
|
||||
* Contains operation which is being applied to the stream,
|
||||
* an operations vector for the particular implementation (e.g. see xdr_mem.c),
|
||||
* and two private fields for the use of the particular implementation.
|
||||
*/
|
||||
typedef struct XDR XDR;
|
||||
struct XDR
|
||||
{
|
||||
enum xdr_op x_op; /* operation; fast additional param */
|
||||
struct xdr_ops
|
||||
{
|
||||
bool_t (*x_getlong) (XDR *__xdrs, long *__lp);
|
||||
/* get a long from underlying stream */
|
||||
bool_t (*x_putlong) (XDR *__xdrs, const long *__lp);
|
||||
/* put a long to " */
|
||||
bool_t (*x_getbytes) (XDR *__xdrs, caddr_t __addr, u_int __len);
|
||||
/* get some bytes from " */
|
||||
bool_t (*x_putbytes) (XDR *__xdrs, const char *__addr, u_int __len);
|
||||
/* put some bytes to " */
|
||||
u_int (*x_getpostn) (const XDR *__xdrs);
|
||||
/* returns bytes off from beginning */
|
||||
bool_t (*x_setpostn) (XDR *__xdrs, u_int __pos);
|
||||
/* lets you reposition the stream */
|
||||
int32_t *(*x_inline) (XDR *__xdrs, u_int __len);
|
||||
/* buf quick ptr to buffered data */
|
||||
void (*x_destroy) (XDR *__xdrs);
|
||||
/* free privates of this xdr_stream */
|
||||
bool_t (*x_getint32) (XDR *__xdrs, int32_t *__ip);
|
||||
/* get a int from underlying stream */
|
||||
bool_t (*x_putint32) (XDR *__xdrs, const int32_t *__ip);
|
||||
/* put a int to " */
|
||||
}
|
||||
*x_ops;
|
||||
caddr_t x_public; /* users' data */
|
||||
caddr_t x_private; /* pointer to private data */
|
||||
caddr_t x_base; /* private used for position info */
|
||||
u_int x_handy; /* extra private word */
|
||||
};
|
||||
|
||||
/*
|
||||
* A xdrproc_t exists for each data type which is to be encoded or decoded.
|
||||
*
|
||||
* The second argument to the xdrproc_t is a pointer to an opaque pointer.
|
||||
* The opaque pointer generally points to a structure of the data type
|
||||
* to be decoded. If this pointer is 0, then the type routines should
|
||||
* allocate dynamic storage of the appropriate size and return it.
|
||||
* bool_t (*xdrproc_t)(XDR *, caddr_t *);
|
||||
*/
|
||||
typedef bool_t (*xdrproc_t) (XDR *, void *,...);
|
||||
|
||||
|
||||
/*
|
||||
* Operations defined on a XDR handle
|
||||
*
|
||||
* XDR *xdrs;
|
||||
* int32_t *int32p;
|
||||
* long *longp;
|
||||
* caddr_t addr;
|
||||
* u_int len;
|
||||
* u_int pos;
|
||||
*/
|
||||
#define XDR_GETINT32(xdrs, int32p) \
|
||||
(*(xdrs)->x_ops->x_getint32)(xdrs, int32p)
|
||||
#define xdr_getint32(xdrs, int32p) \
|
||||
(*(xdrs)->x_ops->x_getint32)(xdrs, int32p)
|
||||
|
||||
#define XDR_PUTINT32(xdrs, int32p) \
|
||||
(*(xdrs)->x_ops->x_putint32)(xdrs, int32p)
|
||||
#define xdr_putint32(xdrs, int32p) \
|
||||
(*(xdrs)->x_ops->x_putint32)(xdrs, int32p)
|
||||
|
||||
#define XDR_GETLONG(xdrs, longp) \
|
||||
(*(xdrs)->x_ops->x_getlong)(xdrs, longp)
|
||||
#define xdr_getlong(xdrs, longp) \
|
||||
(*(xdrs)->x_ops->x_getlong)(xdrs, longp)
|
||||
|
||||
#define XDR_PUTLONG(xdrs, longp) \
|
||||
(*(xdrs)->x_ops->x_putlong)(xdrs, longp)
|
||||
#define xdr_putlong(xdrs, longp) \
|
||||
(*(xdrs)->x_ops->x_putlong)(xdrs, longp)
|
||||
|
||||
#define XDR_GETBYTES(xdrs, addr, len) \
|
||||
(*(xdrs)->x_ops->x_getbytes)(xdrs, addr, len)
|
||||
#define xdr_getbytes(xdrs, addr, len) \
|
||||
(*(xdrs)->x_ops->x_getbytes)(xdrs, addr, len)
|
||||
|
||||
#define XDR_PUTBYTES(xdrs, addr, len) \
|
||||
(*(xdrs)->x_ops->x_putbytes)(xdrs, addr, len)
|
||||
#define xdr_putbytes(xdrs, addr, len) \
|
||||
(*(xdrs)->x_ops->x_putbytes)(xdrs, addr, len)
|
||||
|
||||
#define XDR_GETPOS(xdrs) \
|
||||
(*(xdrs)->x_ops->x_getpostn)(xdrs)
|
||||
#define xdr_getpos(xdrs) \
|
||||
(*(xdrs)->x_ops->x_getpostn)(xdrs)
|
||||
|
||||
#define XDR_SETPOS(xdrs, pos) \
|
||||
(*(xdrs)->x_ops->x_setpostn)(xdrs, pos)
|
||||
#define xdr_setpos(xdrs, pos) \
|
||||
(*(xdrs)->x_ops->x_setpostn)(xdrs, pos)
|
||||
|
||||
#define XDR_INLINE(xdrs, len) \
|
||||
(*(xdrs)->x_ops->x_inline)(xdrs, len)
|
||||
#define xdr_inline(xdrs, len) \
|
||||
(*(xdrs)->x_ops->x_inline)(xdrs, len)
|
||||
|
||||
#define XDR_DESTROY(xdrs) \
|
||||
do { \
|
||||
if ((xdrs)->x_ops->x_destroy) \
|
||||
(*(xdrs)->x_ops->x_destroy)(xdrs); \
|
||||
} while (0)
|
||||
#define xdr_destroy(xdrs) \
|
||||
do { \
|
||||
if ((xdrs)->x_ops->x_destroy) \
|
||||
(*(xdrs)->x_ops->x_destroy)(xdrs); \
|
||||
} while (0)
|
||||
|
||||
/*
|
||||
* Support struct for discriminated unions.
|
||||
* You create an array of xdrdiscrim structures, terminated with
|
||||
* an entry with a null procedure pointer. The xdr_union routine gets
|
||||
* the discriminant value and then searches the array of structures
|
||||
* for a matching value. If a match is found the associated xdr routine
|
||||
* is called to handle that part of the union. If there is
|
||||
* no match, then a default routine may be called.
|
||||
* If there is no match and no default routine it is an error.
|
||||
*/
|
||||
#define NULL_xdrproc_t ((xdrproc_t)0)
|
||||
struct xdr_discrim
|
||||
{
|
||||
int value;
|
||||
xdrproc_t proc;
|
||||
};
|
||||
|
||||
/*
|
||||
* Inline routines for fast encode/decode of primitive data types.
|
||||
* Caveat emptor: these use single memory cycles to get the
|
||||
* data from the underlying buffer, and will fail to operate
|
||||
* properly if the data is not aligned. The standard way to use these
|
||||
* is to say:
|
||||
* if ((buf = XDR_INLINE(xdrs, count)) == NULL)
|
||||
* return (FALSE);
|
||||
* <<< macro calls >>>
|
||||
* where ``count'' is the number of bytes of data occupied
|
||||
* by the primitive data types.
|
||||
*
|
||||
* N.B. and frozen for all time: each data type here uses 4 bytes
|
||||
* of external representation.
|
||||
*/
|
||||
|
||||
#define IXDR_GET_INT32(buf) ((int32_t)ntohl((uint32_t)*(buf)++))
|
||||
#define IXDR_PUT_INT32(buf, v) (*(buf)++ = (int32_t)htonl((uint32_t)(v)))
|
||||
#define IXDR_GET_U_INT32(buf) ((uint32_t)IXDR_GET_INT32(buf))
|
||||
#define IXDR_PUT_U_INT32(buf, v) IXDR_PUT_INT32(buf, (int32_t)(v))
|
||||
|
||||
/* WARNING: The IXDR_*_LONG defines are removed by Sun for new platforms
|
||||
* and shouldn't be used any longer. Code which use this defines or longs
|
||||
* in the RPC code will not work on 64bit Solaris platforms !
|
||||
*/
|
||||
#define IXDR_GET_LONG(buf) ((long)IXDR_GET_U_INT32(buf))
|
||||
#define IXDR_PUT_LONG(buf, v) ((long)IXDR_PUT_INT32(buf, (long)(v)))
|
||||
#define IXDR_GET_U_LONG(buf) ((u_long)IXDR_GET_LONG(buf))
|
||||
#define IXDR_PUT_U_LONG(buf, v) IXDR_PUT_LONG(buf, (long)(v))
|
||||
|
||||
|
||||
#define IXDR_GET_BOOL(buf) ((bool_t)IXDR_GET_LONG(buf))
|
||||
#define IXDR_GET_ENUM(buf, t) ((t)IXDR_GET_LONG(buf))
|
||||
#define IXDR_GET_SHORT(buf) ((short)IXDR_GET_LONG(buf))
|
||||
#define IXDR_GET_U_SHORT(buf) ((u_short)IXDR_GET_LONG(buf))
|
||||
|
||||
#define IXDR_PUT_BOOL(buf, v) IXDR_PUT_LONG(buf, (long)(v))
|
||||
#define IXDR_PUT_ENUM(buf, v) IXDR_PUT_LONG(buf, (long)(v))
|
||||
#define IXDR_PUT_SHORT(buf, v) IXDR_PUT_LONG(buf, (long)(v))
|
||||
#define IXDR_PUT_U_SHORT(buf, v) IXDR_PUT_LONG(buf, (long)(v))
|
||||
|
||||
/*
|
||||
* These are the "generic" xdr routines.
|
||||
* None of these can have const applied because it's not possible to
|
||||
* know whether the call is a read or a write to the passed parameter
|
||||
* also, the XDR structure is always updated by some of these calls.
|
||||
*/
|
||||
extern bool_t xdr_void (void) __THROW;
|
||||
extern bool_t xdr_short (XDR *__xdrs, short *__sp) __THROW;
|
||||
extern bool_t xdr_u_short (XDR *__xdrs, u_short *__usp) __THROW;
|
||||
extern bool_t xdr_int (XDR *__xdrs, int *__ip) __THROW;
|
||||
extern bool_t xdr_u_int (XDR *__xdrs, u_int *__up) __THROW;
|
||||
extern bool_t xdr_long (XDR *__xdrs, long *__lp) __THROW;
|
||||
extern bool_t xdr_u_long (XDR *__xdrs, u_long *__ulp) __THROW;
|
||||
extern bool_t xdr_hyper (XDR *__xdrs, quad_t *__llp) __THROW;
|
||||
extern bool_t xdr_u_hyper (XDR *__xdrs, u_quad_t *__ullp) __THROW;
|
||||
extern bool_t xdr_longlong_t (XDR *__xdrs, quad_t *__llp) __THROW;
|
||||
extern bool_t xdr_u_longlong_t (XDR *__xdrs, u_quad_t *__ullp) __THROW;
|
||||
extern bool_t xdr_int8_t (XDR *__xdrs, int8_t *__ip) __THROW;
|
||||
extern bool_t xdr_uint8_t (XDR *__xdrs, uint8_t *__up) __THROW;
|
||||
extern bool_t xdr_int16_t (XDR *__xdrs, int16_t *__ip) __THROW;
|
||||
extern bool_t xdr_uint16_t (XDR *__xdrs, uint16_t *__up) __THROW;
|
||||
extern bool_t xdr_int32_t (XDR *__xdrs, int32_t *__ip) __THROW;
|
||||
extern bool_t xdr_uint32_t (XDR *__xdrs, uint32_t *__up) __THROW;
|
||||
extern bool_t xdr_int64_t (XDR *__xdrs, int64_t *__ip) __THROW;
|
||||
extern bool_t xdr_uint64_t (XDR *__xdrs, uint64_t *__up) __THROW;
|
||||
extern bool_t xdr_quad_t (XDR *__xdrs, quad_t *__ip) __THROW;
|
||||
extern bool_t xdr_u_quad_t (XDR *__xdrs, u_quad_t *__up) __THROW;
|
||||
extern bool_t xdr_bool (XDR *__xdrs, bool_t *__bp) __THROW;
|
||||
extern bool_t xdr_enum (XDR *__xdrs, enum_t *__ep) __THROW;
|
||||
extern bool_t xdr_array (XDR * _xdrs, caddr_t *__addrp, u_int *__sizep,
|
||||
u_int __maxsize, u_int __elsize, xdrproc_t __elproc)
|
||||
__THROW;
|
||||
extern bool_t xdr_bytes (XDR *__xdrs, char **__cpp, u_int *__sizep,
|
||||
u_int __maxsize) __THROW;
|
||||
extern bool_t xdr_opaque (XDR *__xdrs, caddr_t __cp, u_int __cnt) __THROW;
|
||||
extern bool_t xdr_string (XDR *__xdrs, char **__cpp, u_int __maxsize) __THROW;
|
||||
extern bool_t xdr_union (XDR *__xdrs, enum_t *__dscmp, char *__unp,
|
||||
const struct xdr_discrim *__choices,
|
||||
xdrproc_t __dfault) __THROW;
|
||||
extern bool_t xdr_char (XDR *__xdrs, char *__cp) __THROW;
|
||||
extern bool_t xdr_u_char (XDR *__xdrs, u_char *__cp) __THROW;
|
||||
extern bool_t xdr_vector (XDR *__xdrs, char *__basep, u_int __nelem,
|
||||
u_int __elemsize, xdrproc_t __xdr_elem) __THROW;
|
||||
extern bool_t xdr_float (XDR *__xdrs, float *__fp) __THROW;
|
||||
extern bool_t xdr_double (XDR *__xdrs, double *__dp) __THROW;
|
||||
extern bool_t xdr_reference (XDR *__xdrs, caddr_t *__xpp, u_int __size,
|
||||
xdrproc_t __proc) __THROW;
|
||||
extern bool_t xdr_pointer (XDR *__xdrs, char **__objpp,
|
||||
u_int __obj_size, xdrproc_t __xdr_obj) __THROW;
|
||||
extern bool_t xdr_wrapstring (XDR *__xdrs, char **__cpp) __THROW;
|
||||
extern u_long xdr_sizeof (xdrproc_t, void *) __THROW;
|
||||
|
||||
/*
|
||||
* Common opaque bytes objects used by many rpc protocols;
|
||||
* declared here due to commonality.
|
||||
*/
|
||||
#define MAX_NETOBJ_SZ 1024
|
||||
struct netobj
|
||||
{
|
||||
u_int n_len;
|
||||
char *n_bytes;
|
||||
};
|
||||
typedef struct netobj netobj;
|
||||
extern bool_t xdr_netobj (XDR *__xdrs, struct netobj *__np) __THROW;
|
||||
|
||||
/*
|
||||
* These are the public routines for the various implementations of
|
||||
* xdr streams.
|
||||
*/
|
||||
|
||||
/* XDR using memory buffers */
|
||||
extern void xdrmem_create (XDR *__xdrs, const caddr_t __addr,
|
||||
u_int __size, enum xdr_op __xop) __THROW;
|
||||
|
||||
/* XDR using stdio library */
|
||||
extern void xdrstdio_create (XDR *__xdrs, FILE *__file, enum xdr_op __xop)
|
||||
__THROW;
|
||||
|
||||
/* XDR pseudo records for tcp */
|
||||
extern void xdrrec_create (XDR *__xdrs, u_int __sendsize,
|
||||
u_int __recvsize, caddr_t __tcp_handle,
|
||||
int (*__readit) (char *, char *, int),
|
||||
int (*__writeit) (char *, char *, int)) __THROW;
|
||||
|
||||
/* make end of xdr record */
|
||||
extern bool_t xdrrec_endofrecord (XDR *__xdrs, bool_t __sendnow) __THROW;
|
||||
|
||||
/* move to beginning of next record */
|
||||
extern bool_t xdrrec_skiprecord (XDR *__xdrs) __THROW;
|
||||
|
||||
/* true if no more input */
|
||||
extern bool_t xdrrec_eof (XDR *__xdrs) __THROW;
|
||||
|
||||
/* free memory buffers for xdr */
|
||||
extern void xdr_free (xdrproc_t __proc, char *__objp) __THROW;
|
||||
|
||||
__END_DECLS
|
||||
|
||||
#endif /* rpc/xdr.h */
|
Loading…
Add table
Add a link
Reference in a new issue