diff --git a/CMakeLists.txt b/CMakeLists.txt index 5be774d9..9e9d994b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -24,6 +24,15 @@ if(ENABLE_TESTS) endif() include(cmake/Macros.cmake) + +if(IOS) + find_package(GSSAPI) + + if(GSSAPI_FOUND) + add_definitions(-DHAVE_LIBKRB5) + endif() +endif() + include(cmake/ConfigureChecks.cmake) include_directories(${CMAKE_CURRENT_BINARY_DIR} diff --git a/README b/README index 9a8204ca..0e72fee8 100644 --- a/README +++ b/README @@ -57,7 +57,7 @@ URL-FORMAT: Libnfs uses RFC2224 style URLs extended with some minor libnfs extensions. The basic syntax of these URLs is : -nfs://<server|ipv4|ipv6>[:<port>]/path[?arg=val[&arg=val]*] +nfs://[<username>@]<server|ipv4|ipv6>[:<port>]/path[?arg=val[&arg=val]*] Special characters in 'path' are escaped using %-hex-hex syntax. @@ -77,6 +77,7 @@ Arguments supported by libnfs are : default it 65534 on Windows and getuid() on unixen. gid=<int> : GID value to use when talking to the server. default it 65534 on Windows and getgid() on unixen. + sec=<krb5> : Specify the security mode. auto-traverse-mounts=<0|1> : Should libnfs try to traverse across nested mounts automatically or not. Default is 1 == enabled. diff --git a/configure.ac b/configure.ac index 3dedf1ee..c335c26a 100755 --- a/configure.ac +++ b/configure.ac @@ -41,6 +41,22 @@ AC_ARG_ENABLE([examples], [ENABLE_EXAMPLES=$enableval], [ENABLE_EXAMPLES="no"]) +AC_ARG_WITH([libkrb5], + [AS_HELP_STRING([--without-libkrb5], + [Do not link with libkrb5 even if available.])]) +AS_IF([test "x$with_libkrb5" != "xno"], [ + MAYBE_LIBKRB5="-lgssapi_krb5" + AC_DEFINE([HAVE_LIBKRB5], [1], [Whether we use gssapi_krb5 or not]) + AC_MSG_NOTICE([Build with gssapi_krb5 support]) + dnl Check for gssapi/gssapi.h + AC_CHECK_HEADERS([gssapi/gssapi.h], [], [ + AC_MSG_ERROR([You need gssapi development files to compile libsmb2.]) + ]) +], [ + MAYBE_LIBKRB5="" + AC_MSG_NOTICE([Build WITHOUT gssapi_krb5 support]) +]) + # We need popt to compile the examples if test x$ENABLE_EXAMPLES = xyes; then AC_MSG_CHECKING(whether libpopt is available) @@ -119,6 +135,8 @@ else AC_MSG_NOTICE(Compiling without getpwnam() support.) fi +AC_SUBST([MAYBE_LIBKRB5]) + AC_ARG_ENABLE([werror], [AS_HELP_STRING([--disable-werror], [Disables building with -Werror by default])]) diff --git a/include/libnfs-private.h b/include/libnfs-private.h index 0e5340ee..eb16cd1f 100644 --- a/include/libnfs-private.h +++ b/include/libnfs-private.h @@ -137,6 +137,7 @@ enum input_state { READ_UNKNOWN = 5, }; +struct gss_ctx_id_struct; struct rpc_context { uint32_t magic; int fd; @@ -194,6 +195,18 @@ struct rpc_context { char ifname[IFNAMSIZ]; int poll_timeout; +#ifdef HAVE_LIBKRB5 + const char *username; + enum rpc_sec wanted_sec; + enum rpc_sec sec; + uint32_t gss_seqno; + int context_len; + char *context; + + void *auth_data; /* for krb5 */ + struct gss_ctx_id_struct *gss_context; +#endif /* HAVE_LIBKRB5 */ + /* Is a server context ? */ int is_server_context; struct rpc_endpoint *endpoints; @@ -235,6 +248,10 @@ struct rpc_pdu { uint32_t flags; uint64_t timeout; +#ifdef HAVE_LIBKRB5 + uint32_t gss_seqno; + char creds[64]; +#endif }; void rpc_reset_queue(struct rpc_queue *q); diff --git a/include/nfsc/libnfs-raw.h b/include/nfsc/libnfs-raw.h index 0ce77592..769c4187 100644 --- a/include/nfsc/libnfs-raw.h +++ b/include/nfsc/libnfs-raw.h @@ -124,6 +124,11 @@ EXTERN void rpc_set_uid(struct rpc_context *rpc, int uid); EXTERN void rpc_set_gid(struct rpc_context *rpc, int gid); EXTERN void rpc_set_auxiliary_gids(struct rpc_context *rpc, uint32_t len, uint32_t* gids); +/* + * Used in GSSAPI mode + */ +EXTERN int rpc_set_username(struct rpc_context *rpc, const char *username); + /* * Create a server context. */ @@ -2480,7 +2485,6 @@ EXTERN struct rpc_pdu * rpc_null_task(struct rpc_context *rpc, int program, int version, rpc_cb cb, void *private_data); - #ifdef __cplusplus } #endif diff --git a/include/nfsc/libnfs-zdr.h b/include/nfsc/libnfs-zdr.h index 9e290794..2ddf3957 100644 --- a/include/nfsc/libnfs-zdr.h +++ b/include/nfsc/libnfs-zdr.h @@ -106,17 +106,28 @@ typedef uint32_t (*zdrproc_t) (ZDR *, void *,...); #define AUTH_NULL 0 #define AUTH_SYS 1 #define AUTH_UNIX 1 +#define AUTH_GSS 6 -struct opaque_auth { +struct opaque_cred { uint32_t oa_flavor; caddr_t oa_base; uint32_t oa_length; }; -extern struct opaque_auth _null_auth; + +struct gss_ctx_id_struct; +struct opaque_verf { + uint32_t oa_flavor; + caddr_t oa_base; + uint32_t oa_length; + + /* GSS */ + struct gss_ctx_id_struct *gss_context; +}; +extern struct opaque_verf _null_auth; struct AUTH { - struct opaque_auth ah_cred; - struct opaque_auth ah_verf; + struct opaque_cred ah_cred; + struct opaque_verf ah_verf; caddr_t ah_private; }; @@ -168,13 +179,13 @@ struct call_body { uint32_t prog; uint32_t vers; uint32_t proc; - struct opaque_auth cred; - struct opaque_auth verf; + struct opaque_cred cred; + struct opaque_verf verf; void *args; }; struct accepted_reply { - struct opaque_auth verf; + struct opaque_verf verf; uint32_t stat; union { struct { @@ -267,6 +278,9 @@ bool_t libnfs_zdr_setpos(ZDR *zdrs, uint32_t pos); #define zdr_getpos libnfs_zdr_getpos uint32_t libnfs_zdr_getpos(ZDR *zdrs); +#define zdr_getptr libnfs_zdr_getptr +char *libnfs_zdr_getptr(ZDR *zdrs); + #define zdr_free libnfs_zdr_free void libnfs_zdr_free(zdrproc_t proc, char *objp); @@ -287,6 +301,9 @@ struct AUTH *libnfs_authunix_create(const char *host, uint32_t uid, uint32_t gid #define authunix_create_default libnfs_authunix_create_default struct AUTH *libnfs_authunix_create_default(void); +int libnfs_authgss_init(struct rpc_context *rpc); +int libnfs_authgss_gen_creds(struct rpc_context *rpc, ZDR *zdr); + #define auth_destroy libnfs_auth_destroy void libnfs_auth_destroy(struct AUTH *auth); diff --git a/include/nfsc/libnfs.h b/include/nfsc/libnfs.h index fddb4f83..0ba72aaa 100755 --- a/include/nfsc/libnfs.h +++ b/include/nfsc/libnfs.h @@ -138,6 +138,18 @@ EXTERN int nfs_queue_length(struct nfs_context *nfs); struct AUTH; EXTERN void nfs_set_auth(struct nfs_context *nfs, struct AUTH *auth); +/* + * Used to set which security to use. + */ +enum rpc_sec { + RPC_SEC_UNDEFINED = 0, + RPC_SEC_KRB5, + //RPC_SEC_KRB5I, + //RPC_SEC_KRB5P, +}; +EXTERN void nfs_set_security(struct nfs_context *nfs, enum rpc_sec sec); + + /* * Used if you need to bind to a specific interface. * Only available on platforms that support SO_BINDTODEVICE. diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt index 88ba7b8d..e75d44f3 100644 --- a/lib/CMakeLists.txt +++ b/lib/CMakeLists.txt @@ -1,4 +1,5 @@ set(SOURCES init.c + krb5-wrapper.c libnfs.c libnfs-sync.c libnfs-zdr.c diff --git a/lib/Makefile.am b/lib/Makefile.am index 4e3d0815..28251570 100644 --- a/lib/Makefile.am +++ b/lib/Makefile.am @@ -16,6 +16,7 @@ libnfs_la_CPPFLAGS = -I$(abs_top_srcdir)/include \ libnfs_la_SOURCES = \ init.c \ + krb5-wrapper.c \ libnfs.c \ libnfs-sync.c \ libnfs-zdr.c \ @@ -29,7 +30,8 @@ libnfs_la_SOURCES = \ SOCURRENT=14 SOREVISION=0 SOAGE=0 -libnfs_la_LDFLAGS = -version-info $(SOCURRENT):$(SOREVISION):$(SOAGE) +libnfs_la_LDFLAGS = -version-info $(SOCURRENT):$(SOREVISION):$(SOAGE) \ + $(MAYBE_LIBKRB5) if HAVE_WIN32 libnfs_la_LDFLAGS += -no-undefined endif diff --git a/lib/init.c b/lib/init.c index 68b52c21..8d43aad4 100644 --- a/lib/init.c +++ b/lib/init.c @@ -59,6 +59,14 @@ #include "libnfs-raw.h" #include "libnfs-private.h" +#ifdef HAVE_LIBKRB5 +#include "krb5-wrapper.h" +#endif + +#ifndef discard_const +#define discard_const(ptr) ((void *)((intptr_t)(ptr))) +#endif + uint64_t rpc_current_time(void) { #ifdef HAVE_CLOCK_GETTIME @@ -220,6 +228,15 @@ struct rpc_context *rpc_init_udp_context(void) return rpc; } +int rpc_set_username(struct rpc_context *rpc, const char *username) +{ +#ifdef HAVE_LIBKRB5 + free(discard_const(rpc->username)); + rpc->username = strdup(username); +#endif + return 0; +} + void rpc_set_auth(struct rpc_context *rpc, struct AUTH *auth) { assert(rpc->magic == RPC_CONTEXT_MAGIC); @@ -431,6 +448,12 @@ void rpc_destroy_context(struct rpc_context *rpc) #ifdef HAVE_MULTITHREADING nfs_mt_mutex_destroy(&rpc->rpc_mutex); #endif /* HAVE_MULTITHREADING */ +#ifdef HAVE_LIBKRB5 + if (rpc->auth_data) { + krb5_free_auth_data(rpc->auth_data); + } + free(discard_const(rpc->username)); +#endif free(rpc); } diff --git a/lib/krb5-wrapper.c b/lib/krb5-wrapper.c new file mode 100644 index 00000000..305b4c76 --- /dev/null +++ b/lib/krb5-wrapper.c @@ -0,0 +1,330 @@ +/* -*- mode:c; tab-width:8; c-basic-offset:8; indent-tabs-mode:nil; -*- */ +/* + Copyright (C) 2024 by Ronnie Sahlberg <ronniesahlberg@gmail.com> + + This program 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. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see <http://www.gnu.org/licenses/>. +*/ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#ifdef HAVE_LIBKRB5 + +#ifndef _GNU_SOURCE +#define _GNU_SOURCE +#endif + +#ifdef HAVE_STDINT_H +#include <stdint.h> +#endif + +#ifdef HAVE_STDLIB_H +#include <stdlib.h> +#endif + +#ifdef HAVE_STRING_H +#include <string.h> +#endif + +#ifdef STDC_HEADERS +#include <stddef.h> +#endif + +#ifdef HAVE_SYS_TYPES_H +#include <sys/types.h> +#endif + +#ifdef HAVE_SYS_STAT_H +#include <sys/stat.h> +#endif + +#ifdef HAVE_UNISTD_H +#include <unistd.h> +#endif + +#ifdef HAVE_SYS_UNISTD_H +#include <sys/unistd.h> +#endif + +#include <krb5/krb5.h> +#if __APPLE__ +#include <GSS/GSS.h> +#else +#include <gssapi/gssapi_krb5.h> +#include <gssapi/gssapi.h> +#endif +#include <stdio.h> + +#include "slist.h" +#include "libnfs.h" +#include "libnfs-raw.h" +#include "libnfs-raw-mount.h" +#include "libnfs-raw-portmap.h" +#include "libnfs-private.h" + +#include "krb5-wrapper.h" + +#ifndef discard_const +#define discard_const(ptr) ((void *)((intptr_t)(ptr))) +#endif + +void +krb5_free_auth_data(struct private_auth_data *auth) +{ + uint32_t maj, min; + + /* Delete context */ + if (auth->context) { + maj = gss_delete_sec_context(&min, &auth->context, + &auth->output_token); + if (maj != GSS_S_COMPLETE) { + /* No logging, yet. Do we care? */ + } + } + + gss_release_buffer(&min, &auth->output_token); + + if (auth->target_name) { + gss_release_name(&min, &auth->target_name); + } + + if (auth->user_name) { + gss_release_name(&min, &auth->user_name); + } + + free(auth->g_server); + free(auth); +} + +static char * +display_status(int type, uint32_t err) +{ + gss_buffer_desc text; + uint32_t msg_ctx; + char *msg, *tmp; + uint32_t maj, min; + + msg = NULL; + msg_ctx = 0; + do { + maj = gss_display_status(&min, err, type, + GSS_C_NO_OID, &msg_ctx, &text); + if (maj != GSS_S_COMPLETE) { + return msg; + } + + tmp = NULL; + if (msg) { + tmp = msg; + min = asprintf(&msg, "%s, %*s", msg, + (int)text.length, (char *)text.value); + } else { + min = asprintf(&msg, "%*s", (int)text.length, + (char *)text.value); + } + if (min == -1) return tmp; + free(tmp); + gss_release_buffer(&min, &text); + } while (msg_ctx != 0); + + return msg; +} + +//qqq add back use_cached_credentials +struct private_auth_data * +krb5_auth_init(struct rpc_context *rpc, + const char *server, + const char *user_name) +{ + struct private_auth_data *auth_data; + gss_buffer_desc target = GSS_C_EMPTY_BUFFER; + uint32_t maj, min; + gss_buffer_desc user; + //char user_principal[2048]; + char *nc_password = NULL; + //gss_buffer_desc passwd; + gss_OID_set_desc mechOidSet; + gss_OID_set_desc wantMech; + + auth_data = calloc(1, sizeof(struct private_auth_data)); + if (auth_data == NULL) { + rpc_set_error(rpc, "Failed to allocate private_auth_data"); + return NULL; + } + auth_data->context = GSS_C_NO_CONTEXT; + + if (asprintf(&auth_data->g_server, "nfs@%s", server) < 0) { + rpc_set_error(rpc, "Failed to allocate server string"); + return NULL; + } + + target.value = auth_data->g_server; + target.length = strlen(auth_data->g_server); + + maj = gss_import_name(&min, &target, GSS_C_NT_HOSTBASED_SERVICE, + &auth_data->target_name); + + if (maj != GSS_S_COMPLETE) { + krb5_set_gss_error(rpc, "gss_import_name", maj, min); + return NULL; + } + + user.value = discard_const(user_name); + user.length = strlen(user_name); + + /* create a name for the user */ + maj = gss_import_name(&min, &user, GSS_C_NT_USER_NAME, + &auth_data->user_name); + + if (maj != GSS_S_COMPLETE) { + krb5_set_gss_error(rpc, "gss_import_name", maj, min); + return NULL; + } + + /* TODO: the proper mechanism (SPNEGO vs NTLM vs KRB5) should be + * selected based on the SMB negotiation flags */ + #ifdef __APPLE__ + auth_data->mech_type = GSS_SPNEGO_MECHANISM; + #else + auth_data->mech_type = &spnego_mech_krb5; + #endif + auth_data->cred = GSS_C_NO_CREDENTIAL; + + /* Create creds for the user */ + mechOidSet.count = 1; + #ifdef __APPLE__ + mechOidSet.elements = discard_const(GSS_SPNEGO_MECHANISM); + #else + mechOidSet.elements = discard_const(&gss_mech_spnego); + #endif + + maj = gss_acquire_cred(&min, auth_data->user_name, 0, + &mechOidSet, GSS_C_INITIATE, + &auth_data->cred, NULL, NULL); + + if (maj != GSS_S_COMPLETE) { + krb5_set_gss_error(rpc, "gss_acquire_cred", maj, min); + return NULL; + } + + #ifndef __APPLE__ /* gss_set_neg_mechs is not defined on macOS/iOS. */ + if (rpc->sec != RPC_SEC_UNDEFINED) { + wantMech.count = 1; + + switch (rpc->sec) { + case RPC_SEC_KRB5: + //case RPC_SEC_KRB5I: + //case RPC_SEC_KRB5P: + wantMech.elements = discard_const(&spnego_mech_krb5); + break; + case RPC_SEC_UNDEFINED: + ; + } + + maj = gss_set_neg_mechs(&min, auth_data->cred, &wantMech); + if (GSS_ERROR(maj)) { + krb5_set_gss_error(rpc, "gss_set_neg_mechs", maj, min); + return NULL; + } + } + #endif + + if (nc_password) { + free(nc_password); + nc_password = NULL; + } + return auth_data; +} + +void +krb5_set_gss_error(struct rpc_context *rpc, char *func, + uint32_t maj, uint32_t min) +{ + char *err_maj = display_status(GSS_C_GSS_CODE, maj); + char *err_min = display_status(GSS_C_MECH_CODE, min); + rpc_set_error(rpc, "%s: (%s, %s)", func, err_maj, err_min); + free(err_min); + free(err_maj); +} + +int +krb5_auth_request(struct rpc_context *rpc, + struct private_auth_data *auth_data, + unsigned char *buf, int len) +{ + uint32_t maj, min; + gss_buffer_desc *input_token = NULL; + gss_buffer_desc token = GSS_C_EMPTY_BUFFER; + + if (buf) { + /* release the previous token */ + gss_release_buffer(&min, &auth_data->output_token); + auth_data->output_token.length = 0; + auth_data->output_token.value = NULL; + + token.value = buf; + token.length = len; + input_token = &token; + } + + /* TODO return -errno instead of just -1 */ + /* NOTE: this call is not async, a helper thread should be used if that + * is an issue */ + auth_data->req_flags = GSS_C_SEQUENCE_FLAG | GSS_C_MUTUAL_FLAG | + GSS_C_REPLAY_FLAG; + if (auth_data->cred == GSS_C_NO_CREDENTIAL) { + input_token=GSS_C_NO_BUFFER; + } + maj = gss_init_sec_context(&min, auth_data->cred, + &auth_data->context, + auth_data->target_name, + discard_const(auth_data->mech_type), + auth_data->req_flags, + GSS_C_INDEFINITE, + GSS_C_NO_CHANNEL_BINDINGS, + input_token, + NULL, + &auth_data->output_token, + NULL, + NULL); + + /* GSS_C_MUTUAL_FLAG expects the acceptor to send a token so + * a second call to gss_init_sec_context is required to complete the session. + * A second call is required even if the first call returns GSS_S_COMPLETE + */ + if (maj & GSS_S_CONTINUE_NEEDED) { + return 0; + } + if (GSS_ERROR(maj)) { + krb5_set_gss_error(rpc, "gss_init_sec_context", maj, min); + return -1; + } + + rpc->gss_context = auth_data->context; + return 0; +} + +int +krb5_get_output_token_length(struct private_auth_data *auth_data) +{ + return auth_data->output_token.length; +} + +unsigned char * +krb5_get_output_token_buffer(struct private_auth_data *auth_data) +{ + return auth_data->output_token.value; +} + +#endif /* HAVE_LIBKRB5 */ diff --git a/lib/krb5-wrapper.h b/lib/krb5-wrapper.h new file mode 100644 index 00000000..5377177c --- /dev/null +++ b/lib/krb5-wrapper.h @@ -0,0 +1,89 @@ +/* -*- mode:c; tab-width:8; c-basic-offset:8; indent-tabs-mode:nil; -*- */ +#ifndef _KRB5_WRAPPER_H_ +#define _KRB5_WRAPPER_H_ + +/* + Copyright (C) 2024 by Ronnie Sahlberg <ronniesahlberg@gmail.com> + + This program 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. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see <http://www.gnu.org/licenses/>. +*/ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#ifdef HAVE_LIBKRB5 + +#ifndef _GNU_SOURCE +#define _GNU_SOURCE +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +#if __APPLE__ +#import <GSS/GSS.h> +#else +#include <gssapi/gssapi.h> + +static const gss_OID_desc gss_mech_spnego = { + 6, "\x2b\x06\x01\x05\x05\x02" +}; +#endif + +static const gss_OID_desc spnego_mech_krb5 = { + 9, "\x2a\x86\x48\x86\xf7\x12\x01\x02\x02" +}; + +struct private_auth_data { + gss_ctx_id_t context; + gss_cred_id_t cred; + gss_name_t user_name; + gss_name_t target_name; + gss_const_OID mech_type; + uint32_t req_flags; + gss_buffer_desc output_token; + char *g_server; +}; + +void +krb5_free_auth_data(struct private_auth_data *auth); + +struct private_auth_data * +krb5_auth_init(struct rpc_context *rpc, + const char *server, + const char *user_name); + +void +krb5_set_gss_error(struct rpc_context *rpc, char *func, + uint32_t maj, uint32_t min); + +int +krb5_auth_request(struct rpc_context *rpc, + struct private_auth_data *auth_data, + unsigned char *buf, int len); + +unsigned char * +krb5_get_output_token_buffer(struct private_auth_data *auth_data); + +int +krb5_get_output_token_length(struct private_auth_data *auth_data); + +#ifdef __cplusplus +} +#endif + +#endif /* HAVE_LIBKRB5 */ + +#endif /* _KRB5_WRAPPER_H_ */ diff --git a/lib/libnfs-win32.def b/lib/libnfs-win32.def index 10d6f982..410dc178 100644 --- a/lib/libnfs-win32.def +++ b/lib/libnfs-win32.def @@ -95,9 +95,11 @@ nfs_set_mountport nfs_set_nfsport nfs_set_readdir_max_buffer_size nfs_set_readmax +nfs_set_security nfs_set_tcp_syncnt nfs_set_timeout nfs_set_uid +rpc_set_username nfs_set_version nfs_set_writemax nfs_stat diff --git a/lib/libnfs-zdr.c b/lib/libnfs-zdr.c index 18968518..c61fb71d 100644 --- a/lib/libnfs-zdr.c +++ b/lib/libnfs-zdr.c @@ -21,6 +21,12 @@ * i.e. zdrmem_create() buffers. * It aims to be compatible with normal rpcgen generated functions. */ + +/* + RFC2203: 5.2.3.1 struct rpc_gss_init_res is what the NULL reply contains + Credentials type, len + struct rpc_gss_cred_vers_1_t +*/ + #ifdef HAVE_CONFIG_H #include "config.h" #endif @@ -57,6 +63,11 @@ #include "libnfs.h" #include "libnfs-raw.h" #include "libnfs-private.h" +#include "libnfs-raw-nfs4.h" + +#ifdef HAVE_LIBKRB5 +#include "krb5-wrapper.h" +#endif struct zdr_mem { struct zdr_mem *next; @@ -64,7 +75,7 @@ struct zdr_mem { char buf[1]; }; -struct opaque_auth _null_auth; +struct opaque_verf _null_auth; bool_t libnfs_zdr_setpos(ZDR *zdrs, uint32_t pos) { @@ -78,6 +89,11 @@ uint32_t libnfs_zdr_getpos(ZDR *zdrs) return zdrs->pos; } +char *libnfs_zdr_getptr(ZDR *zdrs) +{ + return zdrs->buf; +} + void libnfs_zdrmem_create(ZDR *zdrs, const caddr_t addr, uint32_t size, enum zdr_op xop) { zdrs->x_op = xop; @@ -352,15 +368,61 @@ void libnfs_zdr_free(zdrproc_t proc, char *objp) { } -static bool_t libnfs_opaque_auth(ZDR *zdrs, struct opaque_auth *auth) +static bool_t libnfs_opaque_cred(ZDR *zdrs, struct opaque_cred *cred) { - if (!libnfs_zdr_u_int(zdrs, &auth->oa_flavor)) { + if (!libnfs_zdr_u_int(zdrs, &cred->oa_flavor)) { return FALSE; } - if (!libnfs_zdr_bytes(zdrs, &auth->oa_base, &auth->oa_length, auth->oa_length)) { - return FALSE; - } + if (!libnfs_zdr_bytes(zdrs, &cred->oa_base, &cred->oa_length, cred->oa_length)) { + return FALSE; + } + + return TRUE; +} + +static bool_t libnfs_opaque_verf(ZDR *zdrs, struct opaque_verf *verf) +{ +#ifdef HAVE_LIBKRB5 + uint32_t maj, min; + gss_buffer_desc message_buffer, output_token; + char *buf; + uint32_t len; + +#endif + switch (verf->oa_flavor) { +#ifdef HAVE_LIBKRB5 + case AUTH_GSS: + if (zdrs->x_op ==ZDR_ENCODE && verf->gss_context) { + message_buffer.length = zdr_getpos(zdrs); + message_buffer.value = zdr_getptr(zdrs); + maj = gss_get_mic(&min, verf->gss_context, + GSS_C_QOP_DEFAULT, + &message_buffer, + &output_token); + if (maj != GSS_S_COMPLETE) { + return FALSE; + } + buf = output_token.value; + len = output_token.length; + if (!libnfs_zdr_u_int(zdrs, &verf->oa_flavor)) { + return FALSE; + } + if (!libnfs_zdr_bytes(zdrs, &buf, &len, len)) { + return FALSE; + } + gss_release_buffer(&min, &output_token); + } + // fallthrough +#endif + default: + if (!libnfs_zdr_u_int(zdrs, &verf->oa_flavor)) { + return FALSE; + } + if (!libnfs_zdr_bytes(zdrs, &verf->oa_base, &verf->oa_length, verf->oa_length)) { + return FALSE; + } + } return TRUE; } @@ -391,13 +453,13 @@ static bool_t libnfs_rpc_call_body(struct rpc_context *rpc, ZDR *zdrs, struct ca return FALSE; } - if (!libnfs_opaque_auth(zdrs, &cmb->cred)) { + if (!libnfs_opaque_cred(zdrs, &cmb->cred)) { rpc_set_error(rpc, "libnfs_rpc_call_body failed to encode " "CRED"); return FALSE; } - if (!libnfs_opaque_auth(zdrs, &cmb->verf)) { + if (!libnfs_opaque_verf(zdrs, &cmb->verf)) { rpc_set_error(rpc, "libnfs_rpc_call_body failed to encode " "VERF"); return FALSE; @@ -408,7 +470,7 @@ static bool_t libnfs_rpc_call_body(struct rpc_context *rpc, ZDR *zdrs, struct ca static bool_t libnfs_accepted_reply(ZDR *zdrs, struct accepted_reply *ar) { - if (!libnfs_opaque_auth(zdrs, &ar->verf)) { + if (!libnfs_opaque_verf(zdrs, &ar->verf)) { return FALSE; } @@ -597,6 +659,47 @@ struct AUTH *libnfs_authunix_create(const char *host, uint32_t uid, uint32_t gid return auth; } +#ifdef HAVE_LIBKRB5 +int libnfs_authgss_init(struct rpc_context *rpc) +{ + rpc->gss_seqno = 0; + rpc->context_len = 0; + free(rpc->context); + rpc->context = NULL; + + free(rpc->auth->ah_cred.oa_base); + rpc->auth->ah_cred.oa_base = NULL; + + rpc->auth->ah_cred.oa_flavor = AUTH_GSS; + + return 0; +} + +int libnfs_authgss_gen_creds(struct rpc_context *rpc, ZDR *zdr) +{ + struct rpc_gss_cred_t gss; + struct rpc_gss_cred_vers_1_t *gss_v1; + + gss.vers = 1; + gss_v1 = &gss.rpc_gss_cred_t_u.rpc_gss_cred_vers_1_t; + if (rpc->gss_seqno == 0) { + gss_v1->gss_proc = RPCSEC_GSS_INIT; + } else { + gss_v1->gss_proc = RPCSEC_GSS_DATA; + } + gss_v1->seq_num = rpc->gss_seqno; + gss_v1->service = RPC_GSS_SVC_NONE; + gss_v1->handle.handle_val = rpc->context; + gss_v1->handle.handle_len = rpc->context_len; + + if (!zdr_rpc_gss_cred_t(zdr, &gss)) { + return -1; + } + + return 0; +} +#endif /* HAVE_LIBKRB5 */ + struct AUTH *libnfs_authunix_create_default(void) { #if defined(WIN32) || defined(PS3_PPU) diff --git a/lib/libnfs.c b/lib/libnfs.c index bec5a032..bcddf7f5 100755 --- a/lib/libnfs.c +++ b/lib/libnfs.c @@ -26,22 +26,6 @@ #include "config.h" #endif -#ifdef AROS -#include "aros_compat.h" -#endif - -#ifdef PS2_EE -#include "ps2_compat.h" -#endif - -#ifdef PS3_PPU -#include "ps3_compat.h" -#endif - -#ifdef WIN32 -#include <win32/win32_compat.h> -#endif - #ifdef HAVE_UTIME_H #include <utime.h> #endif @@ -90,6 +74,10 @@ #include "libnfs-raw-portmap.h" #include "libnfs-private.h" +#ifdef HAVE_LIBKRB5 +#include "krb5-wrapper.h" +#endif + void nfs_free_nfsdir(struct nfsdir *nfsdir) { @@ -173,6 +161,14 @@ nfs_set_auth(struct nfs_context *nfs, struct AUTH *auth) rpc_set_auth(nfs->rpc, auth); } +void +nfs_set_security(struct nfs_context *nfs, enum rpc_sec sec) +{ +#ifdef HAVE_LIBKRB5 + nfs->rpc->wanted_sec = RPC_SEC_KRB5; +#endif +} + int nfs_get_fd(struct nfs_context *nfs) { @@ -263,6 +259,15 @@ nfs_set_context_args(struct nfs_context *nfs, const char *arg, const char *val) } else { nfs_set_readdir_max_buffer_size(nfs, atoi(val), atoi(val)); } +#ifdef HAVE_LIBKRB5 + } else if (nfs->rpc && !strcmp(arg, "sec")) { + /* + * We switch to AUTH_GSS after the first call to NFS/NULL call. + */ + if (!strcmp(val, "krb5")) { + nfs_set_security(nfs, RPC_SEC_KRB5); + } +#endif } return 0; } @@ -420,6 +425,12 @@ nfs_parse_url(struct nfs_context *nfs, const char *url, int dir, int incomplete) } } + strp =strchr(urls->server, '@'); + if (strp && nfs->rpc) { + *strp++ = '\0'; + rpc_set_username(nfs->rpc, urls->server); + urls->server = strdup(strp); + } if (urls->server && strlen(urls->server) <= 1) { free(urls->server); urls->server = NULL; @@ -489,7 +500,9 @@ nfs_init_context(void) free(nfs); return NULL; } - +#ifdef HAVE_LIBKRB5 + rpc_set_username(nfs->rpc, cuserid(NULL)); +#endif nfs->nfsi->cwd = strdup("/"); nfs->nfsi->mask = 022; nfs->nfsi->auto_traverse_mounts = 1; @@ -556,7 +569,6 @@ nfs_destroy_context(struct nfs_context *nfs) free(nfs->nfsi->cwd); free(nfs->nfsi->rootfh.val); free(nfs->nfsi->client_name); - while (nfs->nfsi->dircache) { struct nfsdir *nfsdir = nfs->nfsi->dircache; LIBNFS_LIST_REMOVE(&nfs->nfsi->dircache, nfsdir); @@ -597,6 +609,76 @@ void free_rpc_cb_data(struct rpc_cb_data *data) static int rpc_connect_port_internal(struct rpc_context *rpc, int port, struct rpc_cb_data *data); +#ifdef HAVE_LIBKRB5 +struct rpc_pdu * +rpc_null_task_gss(struct rpc_context *rpc, int program, int version, + rpc_gss_init_arg *arg, + rpc_cb cb, void *private_data) +{ + struct rpc_pdu *pdu; + + pdu = rpc_allocate_pdu(rpc, program, version, 0, cb, private_data, + (zdrproc_t)zdr_rpc_gss_init_res, sizeof(struct rpc_gss_init_res)); + if (pdu == NULL) { + rpc_set_error(rpc, "Out of memory. Failed to allocate pdu " + "for NULL call"); + return NULL; + } + + /* add the krb5 blob */ + if (zdr_rpc_gss_init_arg(&pdu->zdr, arg) == 0) { + rpc_set_error(rpc, "ZDR error: Failed to encode blob"); + rpc_free_pdu(rpc, pdu); + return NULL; + } + + if (rpc_queue_pdu(rpc, pdu) != 0) { + rpc_set_error(rpc, "Out of memory. Failed to queue pdu " + "for NULL call"); + return NULL; + } + + return pdu; +} + +static void +rpc_connect_program_6_cb(struct rpc_context *rpc, int status, + void *command_data, void *private_data) +{ + struct rpc_cb_data *data = private_data; + struct rpc_gss_init_res *gir = command_data; + + assert(rpc->magic == RPC_CONTEXT_MAGIC); + + if (status != RPC_STATUS_SUCCESS) { + data->cb(rpc, status, command_data, data->private_data); + free_rpc_cb_data(data); + return; + } + + rpc->context_len = gir->handle.handle_len; + free(rpc->context); + rpc->context = malloc(rpc->context_len); + if (rpc->context == NULL) { + data->cb(rpc, -ENOMEM, NULL, data->private_data); + free_rpc_cb_data(data); + } + memcpy(rpc->context, gir->handle.handle_val, rpc->context_len); + + if (krb5_auth_request(rpc, rpc->auth_data, + (unsigned char *)gir->gss_token.gss_token_val, + gir->gss_token.gss_token_len) < 0) { + data->cb(rpc, RPC_STATUS_ERROR, rpc_get_error(rpc), + data->private_data); + free_rpc_cb_data(data); + return; + } + + data->cb(rpc, status, NULL, data->private_data); + free_rpc_cb_data(data); +} +#endif /* HAVE_LIBKRB5 */ + static void rpc_connect_program_5_cb(struct rpc_context *rpc, int status, void *command_data, void *private_data) @@ -614,6 +696,44 @@ rpc_connect_program_5_cb(struct rpc_context *rpc, int status, return; } +#ifdef HAVE_LIBKRB5 + if (data->program == 100003 && rpc->wanted_sec != RPC_SEC_UNDEFINED) { + rpc_gss_init_arg gia; + + rpc->sec = rpc->wanted_sec; + + libnfs_authgss_init(rpc); + rpc->auth_data = krb5_auth_init(rpc, + data->server, + rpc->username); + if (rpc->auth_data == NULL) { + data->cb(rpc, RPC_STATUS_ERROR, rpc_get_error(rpc), + data->private_data); + free_rpc_cb_data(data); + return; + } + + if (krb5_auth_request(rpc, rpc->auth_data, + NULL, 0) < 0) { + data->cb(rpc, RPC_STATUS_ERROR, rpc_get_error(rpc), + data->private_data); + free_rpc_cb_data(data); + return; + } + + + gia.gss_token.gss_token_len = krb5_get_output_token_length(rpc->auth_data); + gia.gss_token.gss_token_val = (char *)krb5_get_output_token_buffer(rpc->auth_data); + if (rpc_null_task_gss(rpc, data->program, data->version, + &gia, + rpc_connect_program_6_cb, data) == NULL) { + data->cb(rpc, RPC_STATUS_ERROR, command_data, data->private_data); + free_rpc_cb_data(data); + return; + } + return; + } +#endif data->cb(rpc, status, NULL, data->private_data); free_rpc_cb_data(data); } diff --git a/lib/pdu.c b/lib/pdu.c index bf6e70b1..52162b0b 100644 --- a/lib/pdu.c +++ b/lib/pdu.c @@ -62,6 +62,10 @@ #include "libnfs-raw.h" #include "libnfs-private.h" +#ifdef HAVE_LIBKRB5 +#include "krb5-wrapper.h" +#endif + void rpc_reset_queue(struct rpc_queue *q) { q->head = NULL; @@ -196,6 +200,42 @@ struct rpc_pdu *rpc_allocate_pdu2(struct rpc_context *rpc, int program, int vers msg.body.cbody.proc = procedure; msg.body.cbody.cred = rpc->auth->ah_cred; msg.body.cbody.verf = rpc->auth->ah_verf; +#ifdef HAVE_LIBKRB5 +#ifdef HAVE_MULTITHREADING + if (rpc->multithreading_enabled) { + nfs_mt_mutex_lock(&rpc->rpc_mutex); + } +#endif /* HAVE_MULTITHREADING */ + if (rpc->sec != RPC_SEC_UNDEFINED) { + ZDR tmpzdr; + pdu->gss_seqno = rpc->gss_seqno; + + zdrmem_create(&tmpzdr, pdu->creds, 64, ZDR_ENCODE); + if (libnfs_authgss_gen_creds(rpc, &tmpzdr) < 0) { + zdr_destroy(&tmpzdr); + rpc_set_error(rpc, "zdr_callmsg failed with %s", + rpc_get_error(rpc)); + zdr_destroy(&pdu->zdr); + free(pdu); + return NULL; + } + msg.body.cbody.cred.oa_flavor = AUTH_GSS; + msg.body.cbody.cred.oa_length = tmpzdr.pos; + msg.body.cbody.cred.oa_base = pdu->creds; + zdr_destroy(&tmpzdr); + + rpc->gss_seqno++; + if (rpc->gss_seqno > 1) { + msg.body.cbody.verf.oa_flavor = AUTH_GSS; + msg.body.cbody.verf.gss_context = rpc->gss_context; + } + } +#ifdef HAVE_MULTITHREADING + if (rpc->multithreading_enabled) { + nfs_mt_mutex_unlock(&rpc->rpc_mutex); + } +#endif /* HAVE_MULTITHREADING */ +#endif /* HAVE_LIBKRB5 */ if (zdr_callmsg(rpc, &pdu->zdr, &msg) == 0) { rpc_set_error(rpc, "zdr_callmsg failed with %s", @@ -204,7 +244,7 @@ struct rpc_pdu *rpc_allocate_pdu2(struct rpc_context *rpc, int program, int vers free(pdu); return NULL; } - + /* Add an iovector for the header */ rpc_add_iovector(rpc, &pdu->out, &pdu->outdata.data[4], zdr_getpos(&pdu->zdr), NULL); @@ -379,6 +419,11 @@ static int rpc_process_reply(struct rpc_context *rpc, ZDR *zdr) } msg.body.rbody.reply.areply.reply_data.results.where = pdu->zdr_decode_buf; msg.body.rbody.reply.areply.reply_data.results.proc = pdu->zdr_decode_fn; +#ifdef HAVE_LIBKRB5 + if (rpc->sec != RPC_SEC_UNDEFINED) { + msg.body.rbody.reply.areply.verf.gss_context = rpc->gss_context; + } +#endif if (zdr_replymsg(rpc, zdr, &msg) == 0) { rpc_set_error(rpc, "zdr_replymsg failed in rpc_process_reply: " "%s", rpc_get_error(rpc)); @@ -399,6 +444,30 @@ static int rpc_process_reply(struct rpc_context *rpc, ZDR *zdr) rpc->pdu->free_pdu = 1; break; } +#ifdef HAVE_LIBKRB5 + if (msg.body.rbody.reply.areply.verf.oa_length && + pdu->gss_seqno > 0) { + uint32_t maj, min; + gss_buffer_desc message_buffer, token_buffer; + uint32_t seqno; + + seqno = htonl(pdu->gss_seqno); + message_buffer.value = (char *)&seqno; + message_buffer.length = 4; + + token_buffer.value = msg.body.rbody.reply.areply.verf.oa_base; + token_buffer.length = msg.body.rbody.reply.areply.verf.oa_length; + maj = gss_verify_mic(&min, + rpc->gss_context, + &message_buffer, + &token_buffer, + GSS_C_QOP_DEFAULT); + if (maj && maj != 16) { + pdu->cb(rpc, RPC_STATUS_ERROR, "gss_verify_mic failed for the verifier", pdu->private_data); + break; + } + } +#endif pdu->cb(rpc, RPC_STATUS_SUCCESS, pdu->zdr_decode_buf, pdu->private_data); break; case PROG_UNAVAIL: diff --git a/nfs/nfs.x b/nfs/nfs.x index ab874a00..5f7afe57 100644 --- a/nfs/nfs.x +++ b/nfs/nfs.x @@ -1288,3 +1288,4 @@ program NFSACL_PROGRAM { NFSACL3_SETACL(SETACL3args) = 2; } = 3; } = 100227; + diff --git a/nfs4/Makefile.am b/nfs4/Makefile.am index f7aa05f5..e4122dc4 100644 --- a/nfs4/Makefile.am +++ b/nfs4/Makefile.am @@ -36,7 +36,7 @@ compile_rpc: -e "s/xdr/zdr/g" \ -e "s/XDR/ZDR/g" \ -e "s/bool_t/uint32_t/g" \ --e "s/register int32_t \*buf;//" \ +-e "s/register int32_t \*buf;/register int32_t *buf;\n buf = NULL;/" \ -e "s/int i;//" >> libnfs-raw-nfs4.c sed -z -i -e "s/zdr_READ4resok/zzdr_READ4resok/" libnfs-raw-nfs4.c sed -z -i -e "s/zdr_WRITE4args/zzdr_WRITE4args/" libnfs-raw-nfs4.c diff --git a/nfs4/libnfs-raw-nfs4.c b/nfs4/libnfs-raw-nfs4.c index 5d47c201..abd0075a 100644 --- a/nfs4/libnfs-raw-nfs4.c +++ b/nfs4/libnfs-raw-nfs4.c @@ -25,7 +25,8 @@ uint32_t zdr_nfs_ftype4 (ZDR *zdrs, nfs_ftype4 *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_enum (zdrs, (enum_t *) objp)) return FALSE; @@ -35,7 +36,8 @@ zdr_nfs_ftype4 (ZDR *zdrs, nfs_ftype4 *objp) uint32_t zdr_nfsstat4 (ZDR *zdrs, nfsstat4 *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_enum (zdrs, (enum_t *) objp)) return FALSE; @@ -45,7 +47,8 @@ zdr_nfsstat4 (ZDR *zdrs, nfsstat4 *objp) uint32_t zdr_bitmap4 (ZDR *zdrs, bitmap4 *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_array (zdrs, (char **)&objp->bitmap4_val, (u_int *) &objp->bitmap4_len, ~0, sizeof (uint32_t), (zdrproc_t) zdr_uint32_t)) @@ -56,7 +59,8 @@ zdr_bitmap4 (ZDR *zdrs, bitmap4 *objp) uint32_t zdr_offset4 (ZDR *zdrs, offset4 *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_uint64_t (zdrs, objp)) return FALSE; @@ -66,7 +70,8 @@ zdr_offset4 (ZDR *zdrs, offset4 *objp) uint32_t zdr_count4 (ZDR *zdrs, count4 *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_uint32_t (zdrs, objp)) return FALSE; @@ -76,7 +81,8 @@ zdr_count4 (ZDR *zdrs, count4 *objp) uint32_t zdr_length4 (ZDR *zdrs, length4 *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_uint64_t (zdrs, objp)) return FALSE; @@ -86,7 +92,8 @@ zdr_length4 (ZDR *zdrs, length4 *objp) uint32_t zdr_clientid4 (ZDR *zdrs, clientid4 *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_uint64_t (zdrs, objp)) return FALSE; @@ -96,7 +103,8 @@ zdr_clientid4 (ZDR *zdrs, clientid4 *objp) uint32_t zdr_sequenceid4 (ZDR *zdrs, sequenceid4 *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_uint32_t (zdrs, objp)) return FALSE; @@ -106,7 +114,8 @@ zdr_sequenceid4 (ZDR *zdrs, sequenceid4 *objp) uint32_t zdr_seqid4 (ZDR *zdrs, seqid4 *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_uint32_t (zdrs, objp)) return FALSE; @@ -116,7 +125,8 @@ zdr_seqid4 (ZDR *zdrs, seqid4 *objp) uint32_t zdr_slotid4 (ZDR *zdrs, slotid4 *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_uint32_t (zdrs, objp)) return FALSE; @@ -126,7 +136,8 @@ zdr_slotid4 (ZDR *zdrs, slotid4 *objp) uint32_t zdr_utf8string (ZDR *zdrs, utf8string *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_bytes (zdrs, (char **)&objp->utf8string_val, (u_int *) &objp->utf8string_len, ~0)) return FALSE; @@ -136,7 +147,8 @@ zdr_utf8string (ZDR *zdrs, utf8string *objp) uint32_t zdr_utf8str_cis (ZDR *zdrs, utf8str_cis *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_utf8string (zdrs, objp)) return FALSE; @@ -146,7 +158,8 @@ zdr_utf8str_cis (ZDR *zdrs, utf8str_cis *objp) uint32_t zdr_utf8str_cs (ZDR *zdrs, utf8str_cs *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_utf8string (zdrs, objp)) return FALSE; @@ -156,7 +169,8 @@ zdr_utf8str_cs (ZDR *zdrs, utf8str_cs *objp) uint32_t zdr_utf8str_mixed (ZDR *zdrs, utf8str_mixed *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_utf8string (zdrs, objp)) return FALSE; @@ -166,7 +180,8 @@ zdr_utf8str_mixed (ZDR *zdrs, utf8str_mixed *objp) uint32_t zdr_component4 (ZDR *zdrs, component4 *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_utf8str_cs (zdrs, objp)) return FALSE; @@ -176,7 +191,8 @@ zdr_component4 (ZDR *zdrs, component4 *objp) uint32_t zdr_pathname4 (ZDR *zdrs, pathname4 *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_array (zdrs, (char **)&objp->pathname4_val, (u_int *) &objp->pathname4_len, ~0, sizeof (component4), (zdrproc_t) zdr_component4)) @@ -187,7 +203,8 @@ zdr_pathname4 (ZDR *zdrs, pathname4 *objp) uint32_t zdr_nfs_lockid4 (ZDR *zdrs, nfs_lockid4 *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_uint64_t (zdrs, objp)) return FALSE; @@ -197,7 +214,8 @@ zdr_nfs_lockid4 (ZDR *zdrs, nfs_lockid4 *objp) uint32_t zdr_nfs_cookie4 (ZDR *zdrs, nfs_cookie4 *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_uint64_t (zdrs, objp)) return FALSE; @@ -207,7 +225,8 @@ zdr_nfs_cookie4 (ZDR *zdrs, nfs_cookie4 *objp) uint32_t zdr_linktext4 (ZDR *zdrs, linktext4 *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_utf8str_cs (zdrs, objp)) return FALSE; @@ -217,7 +236,8 @@ zdr_linktext4 (ZDR *zdrs, linktext4 *objp) uint32_t zdr_sec_oid4 (ZDR *zdrs, sec_oid4 *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_bytes (zdrs, (char **)&objp->sec_oid4_val, (u_int *) &objp->sec_oid4_len, ~0)) return FALSE; @@ -227,7 +247,8 @@ zdr_sec_oid4 (ZDR *zdrs, sec_oid4 *objp) uint32_t zdr_qop4 (ZDR *zdrs, qop4 *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_uint32_t (zdrs, objp)) return FALSE; @@ -237,7 +258,8 @@ zdr_qop4 (ZDR *zdrs, qop4 *objp) uint32_t zdr_mode4 (ZDR *zdrs, mode4 *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_uint32_t (zdrs, objp)) return FALSE; @@ -247,7 +269,8 @@ zdr_mode4 (ZDR *zdrs, mode4 *objp) uint32_t zdr_changeid4 (ZDR *zdrs, changeid4 *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_uint64_t (zdrs, objp)) return FALSE; @@ -257,7 +280,8 @@ zdr_changeid4 (ZDR *zdrs, changeid4 *objp) uint32_t zdr_verifier4 (ZDR *zdrs, verifier4 objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_opaque (zdrs, objp, NFS4_VERIFIER_SIZE)) return FALSE; @@ -267,7 +291,8 @@ zdr_verifier4 (ZDR *zdrs, verifier4 objp) uint32_t zdr_sessionid4 (ZDR *zdrs, sessionid4 objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_opaque (zdrs, objp, NFS4_SESSIONID_SIZE)) return FALSE; @@ -277,7 +302,8 @@ zdr_sessionid4 (ZDR *zdrs, sessionid4 objp) uint32_t zdr_authsys_parms (ZDR *zdrs, authsys_parms *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_u_int (zdrs, &objp->stamp)) return FALSE; @@ -296,7 +322,8 @@ zdr_authsys_parms (ZDR *zdrs, authsys_parms *objp) uint32_t zdr_deviceid4 (ZDR *zdrs, deviceid4 objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_opaque (zdrs, objp, NFS4_DEVICEID4_SIZE)) return FALSE; @@ -306,7 +333,8 @@ zdr_deviceid4 (ZDR *zdrs, deviceid4 objp) uint32_t zdr_layouttype4 (ZDR *zdrs, layouttype4 *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_enum (zdrs, (enum_t *) objp)) return FALSE; @@ -316,7 +344,8 @@ zdr_layouttype4 (ZDR *zdrs, layouttype4 *objp) uint32_t zdr_layoutupdate4 (ZDR *zdrs, layoutupdate4 *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_layouttype4 (zdrs, &objp->lou_type)) return FALSE; @@ -328,7 +357,8 @@ zdr_layoutupdate4 (ZDR *zdrs, layoutupdate4 *objp) uint32_t zdr_device_addr4 (ZDR *zdrs, device_addr4 *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_layouttype4 (zdrs, &objp->da_layout_type)) return FALSE; @@ -340,7 +370,8 @@ zdr_device_addr4 (ZDR *zdrs, device_addr4 *objp) uint32_t zdr_nfstime4 (ZDR *zdrs, nfstime4 *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_int64_t (zdrs, &objp->seconds)) return FALSE; @@ -352,7 +383,8 @@ zdr_nfstime4 (ZDR *zdrs, nfstime4 *objp) uint32_t zdr_time_how4 (ZDR *zdrs, time_how4 *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_enum (zdrs, (enum_t *) objp)) return FALSE; @@ -362,7 +394,8 @@ zdr_time_how4 (ZDR *zdrs, time_how4 *objp) uint32_t zdr_layoutiomode4 (ZDR *zdrs, layoutiomode4 *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_enum (zdrs, (enum_t *) objp)) return FALSE; @@ -372,7 +405,8 @@ zdr_layoutiomode4 (ZDR *zdrs, layoutiomode4 *objp) uint32_t zdr_layout_content4 (ZDR *zdrs, layout_content4 *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_layouttype4 (zdrs, &objp->loc_type)) return FALSE; @@ -384,7 +418,8 @@ zdr_layout_content4 (ZDR *zdrs, layout_content4 *objp) uint32_t zdr_layout4 (ZDR *zdrs, layout4 *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_offset4 (zdrs, &objp->lo_offset)) return FALSE; @@ -400,7 +435,8 @@ zdr_layout4 (ZDR *zdrs, layout4 *objp) uint32_t zdr_settime4 (ZDR *zdrs, settime4 *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_time_how4 (zdrs, &objp->set_it)) return FALSE; @@ -418,7 +454,8 @@ zdr_settime4 (ZDR *zdrs, settime4 *objp) uint32_t zdr_nfs_fh4 (ZDR *zdrs, nfs_fh4 *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_bytes (zdrs, (char **)&objp->nfs_fh4_val, (u_int *) &objp->nfs_fh4_len, NFS4_FHSIZE)) return FALSE; @@ -428,7 +465,8 @@ zdr_nfs_fh4 (ZDR *zdrs, nfs_fh4 *objp) uint32_t zdr_fsid4 (ZDR *zdrs, fsid4 *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_uint64_t (zdrs, &objp->major)) return FALSE; @@ -440,7 +478,8 @@ zdr_fsid4 (ZDR *zdrs, fsid4 *objp) uint32_t zdr_fs_location4 (ZDR *zdrs, fs_location4 *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_array (zdrs, (char **)&objp->server.server_val, (u_int *) &objp->server.server_len, ~0, sizeof (utf8str_cis), (zdrproc_t) zdr_utf8str_cis)) @@ -453,7 +492,8 @@ zdr_fs_location4 (ZDR *zdrs, fs_location4 *objp) uint32_t zdr_fs_locations4 (ZDR *zdrs, fs_locations4 *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_pathname4 (zdrs, &objp->fs_root)) return FALSE; @@ -466,7 +506,8 @@ zdr_fs_locations4 (ZDR *zdrs, fs_locations4 *objp) uint32_t zdr_acetype4 (ZDR *zdrs, acetype4 *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_uint32_t (zdrs, objp)) return FALSE; @@ -476,7 +517,8 @@ zdr_acetype4 (ZDR *zdrs, acetype4 *objp) uint32_t zdr_aceflag4 (ZDR *zdrs, aceflag4 *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_uint32_t (zdrs, objp)) return FALSE; @@ -486,7 +528,8 @@ zdr_aceflag4 (ZDR *zdrs, aceflag4 *objp) uint32_t zdr_acemask4 (ZDR *zdrs, acemask4 *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_uint32_t (zdrs, objp)) return FALSE; @@ -496,7 +539,8 @@ zdr_acemask4 (ZDR *zdrs, acemask4 *objp) uint32_t zdr_nfsace4 (ZDR *zdrs, nfsace4 *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_acetype4 (zdrs, &objp->type)) return FALSE; @@ -512,7 +556,8 @@ zdr_nfsace4 (ZDR *zdrs, nfsace4 *objp) uint32_t zdr_specdata4 (ZDR *zdrs, specdata4 *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_uint32_t (zdrs, &objp->specdata1)) return FALSE; @@ -524,7 +569,8 @@ zdr_specdata4 (ZDR *zdrs, specdata4 *objp) uint32_t zdr_fattr4_supported_attrs (ZDR *zdrs, fattr4_supported_attrs *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_bitmap4 (zdrs, objp)) return FALSE; @@ -534,7 +580,8 @@ zdr_fattr4_supported_attrs (ZDR *zdrs, fattr4_supported_attrs *objp) uint32_t zdr_fattr4_type (ZDR *zdrs, fattr4_type *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_nfs_ftype4 (zdrs, objp)) return FALSE; @@ -544,7 +591,8 @@ zdr_fattr4_type (ZDR *zdrs, fattr4_type *objp) uint32_t zdr_fattr4_fh_expire_type (ZDR *zdrs, fattr4_fh_expire_type *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_uint32_t (zdrs, objp)) return FALSE; @@ -554,7 +602,8 @@ zdr_fattr4_fh_expire_type (ZDR *zdrs, fattr4_fh_expire_type *objp) uint32_t zdr_fattr4_change (ZDR *zdrs, fattr4_change *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_changeid4 (zdrs, objp)) return FALSE; @@ -564,7 +613,8 @@ zdr_fattr4_change (ZDR *zdrs, fattr4_change *objp) uint32_t zdr_fattr4_size (ZDR *zdrs, fattr4_size *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_uint64_t (zdrs, objp)) return FALSE; @@ -574,7 +624,8 @@ zdr_fattr4_size (ZDR *zdrs, fattr4_size *objp) uint32_t zdr_fattr4_link_support (ZDR *zdrs, fattr4_link_support *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_bool (zdrs, objp)) return FALSE; @@ -584,7 +635,8 @@ zdr_fattr4_link_support (ZDR *zdrs, fattr4_link_support *objp) uint32_t zdr_fattr4_symlink_support (ZDR *zdrs, fattr4_symlink_support *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_bool (zdrs, objp)) return FALSE; @@ -594,7 +646,8 @@ zdr_fattr4_symlink_support (ZDR *zdrs, fattr4_symlink_support *objp) uint32_t zdr_fattr4_named_attr (ZDR *zdrs, fattr4_named_attr *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_bool (zdrs, objp)) return FALSE; @@ -604,7 +657,8 @@ zdr_fattr4_named_attr (ZDR *zdrs, fattr4_named_attr *objp) uint32_t zdr_fattr4_fsid (ZDR *zdrs, fattr4_fsid *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_fsid4 (zdrs, objp)) return FALSE; @@ -614,7 +668,8 @@ zdr_fattr4_fsid (ZDR *zdrs, fattr4_fsid *objp) uint32_t zdr_fattr4_unique_handles (ZDR *zdrs, fattr4_unique_handles *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_bool (zdrs, objp)) return FALSE; @@ -624,7 +679,8 @@ zdr_fattr4_unique_handles (ZDR *zdrs, fattr4_unique_handles *objp) uint32_t zdr_fattr4_lease_time (ZDR *zdrs, fattr4_lease_time *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_uint32_t (zdrs, objp)) return FALSE; @@ -634,7 +690,8 @@ zdr_fattr4_lease_time (ZDR *zdrs, fattr4_lease_time *objp) uint32_t zdr_fattr4_rdattr_error (ZDR *zdrs, fattr4_rdattr_error *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_nfsstat4 (zdrs, objp)) return FALSE; @@ -644,7 +701,8 @@ zdr_fattr4_rdattr_error (ZDR *zdrs, fattr4_rdattr_error *objp) uint32_t zdr_fattr4_acl (ZDR *zdrs, fattr4_acl *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_array (zdrs, (char **)&objp->fattr4_acl_val, (u_int *) &objp->fattr4_acl_len, ~0, sizeof (nfsace4), (zdrproc_t) zdr_nfsace4)) @@ -655,7 +713,8 @@ zdr_fattr4_acl (ZDR *zdrs, fattr4_acl *objp) uint32_t zdr_fattr4_aclsupport (ZDR *zdrs, fattr4_aclsupport *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_uint32_t (zdrs, objp)) return FALSE; @@ -665,7 +724,8 @@ zdr_fattr4_aclsupport (ZDR *zdrs, fattr4_aclsupport *objp) uint32_t zdr_fattr4_archive (ZDR *zdrs, fattr4_archive *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_bool (zdrs, objp)) return FALSE; @@ -675,7 +735,8 @@ zdr_fattr4_archive (ZDR *zdrs, fattr4_archive *objp) uint32_t zdr_fattr4_cansettime (ZDR *zdrs, fattr4_cansettime *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_bool (zdrs, objp)) return FALSE; @@ -685,7 +746,8 @@ zdr_fattr4_cansettime (ZDR *zdrs, fattr4_cansettime *objp) uint32_t zdr_fattr4_case_insensitive (ZDR *zdrs, fattr4_case_insensitive *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_bool (zdrs, objp)) return FALSE; @@ -695,7 +757,8 @@ zdr_fattr4_case_insensitive (ZDR *zdrs, fattr4_case_insensitive *objp) uint32_t zdr_fattr4_case_preserving (ZDR *zdrs, fattr4_case_preserving *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_bool (zdrs, objp)) return FALSE; @@ -705,7 +768,8 @@ zdr_fattr4_case_preserving (ZDR *zdrs, fattr4_case_preserving *objp) uint32_t zdr_fattr4_chown_restricted (ZDR *zdrs, fattr4_chown_restricted *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_bool (zdrs, objp)) return FALSE; @@ -715,7 +779,8 @@ zdr_fattr4_chown_restricted (ZDR *zdrs, fattr4_chown_restricted *objp) uint32_t zdr_fattr4_fileid (ZDR *zdrs, fattr4_fileid *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_uint64_t (zdrs, objp)) return FALSE; @@ -725,7 +790,8 @@ zdr_fattr4_fileid (ZDR *zdrs, fattr4_fileid *objp) uint32_t zdr_fattr4_files_avail (ZDR *zdrs, fattr4_files_avail *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_uint64_t (zdrs, objp)) return FALSE; @@ -735,7 +801,8 @@ zdr_fattr4_files_avail (ZDR *zdrs, fattr4_files_avail *objp) uint32_t zdr_fattr4_filehandle (ZDR *zdrs, fattr4_filehandle *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_nfs_fh4 (zdrs, objp)) return FALSE; @@ -745,7 +812,8 @@ zdr_fattr4_filehandle (ZDR *zdrs, fattr4_filehandle *objp) uint32_t zdr_fattr4_files_free (ZDR *zdrs, fattr4_files_free *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_uint64_t (zdrs, objp)) return FALSE; @@ -755,7 +823,8 @@ zdr_fattr4_files_free (ZDR *zdrs, fattr4_files_free *objp) uint32_t zdr_fattr4_files_total (ZDR *zdrs, fattr4_files_total *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_uint64_t (zdrs, objp)) return FALSE; @@ -765,7 +834,8 @@ zdr_fattr4_files_total (ZDR *zdrs, fattr4_files_total *objp) uint32_t zdr_fattr4_fs_locations (ZDR *zdrs, fattr4_fs_locations *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_fs_locations4 (zdrs, objp)) return FALSE; @@ -775,7 +845,8 @@ zdr_fattr4_fs_locations (ZDR *zdrs, fattr4_fs_locations *objp) uint32_t zdr_fattr4_hidden (ZDR *zdrs, fattr4_hidden *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_bool (zdrs, objp)) return FALSE; @@ -785,7 +856,8 @@ zdr_fattr4_hidden (ZDR *zdrs, fattr4_hidden *objp) uint32_t zdr_fattr4_homogeneous (ZDR *zdrs, fattr4_homogeneous *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_bool (zdrs, objp)) return FALSE; @@ -795,7 +867,8 @@ zdr_fattr4_homogeneous (ZDR *zdrs, fattr4_homogeneous *objp) uint32_t zdr_fattr4_maxfilesize (ZDR *zdrs, fattr4_maxfilesize *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_uint64_t (zdrs, objp)) return FALSE; @@ -805,7 +878,8 @@ zdr_fattr4_maxfilesize (ZDR *zdrs, fattr4_maxfilesize *objp) uint32_t zdr_fattr4_maxlink (ZDR *zdrs, fattr4_maxlink *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_uint32_t (zdrs, objp)) return FALSE; @@ -815,7 +889,8 @@ zdr_fattr4_maxlink (ZDR *zdrs, fattr4_maxlink *objp) uint32_t zdr_fattr4_maxname (ZDR *zdrs, fattr4_maxname *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_uint32_t (zdrs, objp)) return FALSE; @@ -825,7 +900,8 @@ zdr_fattr4_maxname (ZDR *zdrs, fattr4_maxname *objp) uint32_t zdr_fattr4_maxread (ZDR *zdrs, fattr4_maxread *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_uint64_t (zdrs, objp)) return FALSE; @@ -835,7 +911,8 @@ zdr_fattr4_maxread (ZDR *zdrs, fattr4_maxread *objp) uint32_t zdr_fattr4_maxwrite (ZDR *zdrs, fattr4_maxwrite *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_uint64_t (zdrs, objp)) return FALSE; @@ -845,7 +922,8 @@ zdr_fattr4_maxwrite (ZDR *zdrs, fattr4_maxwrite *objp) uint32_t zdr_fattr4_mimetype (ZDR *zdrs, fattr4_mimetype *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_utf8str_cs (zdrs, objp)) return FALSE; @@ -855,7 +933,8 @@ zdr_fattr4_mimetype (ZDR *zdrs, fattr4_mimetype *objp) uint32_t zdr_fattr4_mode (ZDR *zdrs, fattr4_mode *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_mode4 (zdrs, objp)) return FALSE; @@ -865,7 +944,8 @@ zdr_fattr4_mode (ZDR *zdrs, fattr4_mode *objp) uint32_t zdr_fattr4_mounted_on_fileid (ZDR *zdrs, fattr4_mounted_on_fileid *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_uint64_t (zdrs, objp)) return FALSE; @@ -875,7 +955,8 @@ zdr_fattr4_mounted_on_fileid (ZDR *zdrs, fattr4_mounted_on_fileid *objp) uint32_t zdr_fattr4_no_trunc (ZDR *zdrs, fattr4_no_trunc *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_bool (zdrs, objp)) return FALSE; @@ -885,7 +966,8 @@ zdr_fattr4_no_trunc (ZDR *zdrs, fattr4_no_trunc *objp) uint32_t zdr_fattr4_numlinks (ZDR *zdrs, fattr4_numlinks *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_uint32_t (zdrs, objp)) return FALSE; @@ -895,7 +977,8 @@ zdr_fattr4_numlinks (ZDR *zdrs, fattr4_numlinks *objp) uint32_t zdr_fattr4_owner (ZDR *zdrs, fattr4_owner *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_utf8str_mixed (zdrs, objp)) return FALSE; @@ -905,7 +988,8 @@ zdr_fattr4_owner (ZDR *zdrs, fattr4_owner *objp) uint32_t zdr_fattr4_owner_group (ZDR *zdrs, fattr4_owner_group *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_utf8str_mixed (zdrs, objp)) return FALSE; @@ -915,7 +999,8 @@ zdr_fattr4_owner_group (ZDR *zdrs, fattr4_owner_group *objp) uint32_t zdr_fattr4_quota_avail_hard (ZDR *zdrs, fattr4_quota_avail_hard *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_uint64_t (zdrs, objp)) return FALSE; @@ -925,7 +1010,8 @@ zdr_fattr4_quota_avail_hard (ZDR *zdrs, fattr4_quota_avail_hard *objp) uint32_t zdr_fattr4_quota_avail_soft (ZDR *zdrs, fattr4_quota_avail_soft *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_uint64_t (zdrs, objp)) return FALSE; @@ -935,7 +1021,8 @@ zdr_fattr4_quota_avail_soft (ZDR *zdrs, fattr4_quota_avail_soft *objp) uint32_t zdr_fattr4_quota_used (ZDR *zdrs, fattr4_quota_used *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_uint64_t (zdrs, objp)) return FALSE; @@ -945,7 +1032,8 @@ zdr_fattr4_quota_used (ZDR *zdrs, fattr4_quota_used *objp) uint32_t zdr_fattr4_rawdev (ZDR *zdrs, fattr4_rawdev *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_specdata4 (zdrs, objp)) return FALSE; @@ -955,7 +1043,8 @@ zdr_fattr4_rawdev (ZDR *zdrs, fattr4_rawdev *objp) uint32_t zdr_fattr4_space_avail (ZDR *zdrs, fattr4_space_avail *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_uint64_t (zdrs, objp)) return FALSE; @@ -965,7 +1054,8 @@ zdr_fattr4_space_avail (ZDR *zdrs, fattr4_space_avail *objp) uint32_t zdr_fattr4_space_free (ZDR *zdrs, fattr4_space_free *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_uint64_t (zdrs, objp)) return FALSE; @@ -975,7 +1065,8 @@ zdr_fattr4_space_free (ZDR *zdrs, fattr4_space_free *objp) uint32_t zdr_fattr4_space_total (ZDR *zdrs, fattr4_space_total *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_uint64_t (zdrs, objp)) return FALSE; @@ -985,7 +1076,8 @@ zdr_fattr4_space_total (ZDR *zdrs, fattr4_space_total *objp) uint32_t zdr_fattr4_space_used (ZDR *zdrs, fattr4_space_used *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_uint64_t (zdrs, objp)) return FALSE; @@ -995,7 +1087,8 @@ zdr_fattr4_space_used (ZDR *zdrs, fattr4_space_used *objp) uint32_t zdr_fattr4_system (ZDR *zdrs, fattr4_system *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_bool (zdrs, objp)) return FALSE; @@ -1005,7 +1098,8 @@ zdr_fattr4_system (ZDR *zdrs, fattr4_system *objp) uint32_t zdr_fattr4_time_access (ZDR *zdrs, fattr4_time_access *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_nfstime4 (zdrs, objp)) return FALSE; @@ -1015,7 +1109,8 @@ zdr_fattr4_time_access (ZDR *zdrs, fattr4_time_access *objp) uint32_t zdr_fattr4_time_access_set (ZDR *zdrs, fattr4_time_access_set *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_settime4 (zdrs, objp)) return FALSE; @@ -1025,7 +1120,8 @@ zdr_fattr4_time_access_set (ZDR *zdrs, fattr4_time_access_set *objp) uint32_t zdr_fattr4_time_backup (ZDR *zdrs, fattr4_time_backup *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_nfstime4 (zdrs, objp)) return FALSE; @@ -1035,7 +1131,8 @@ zdr_fattr4_time_backup (ZDR *zdrs, fattr4_time_backup *objp) uint32_t zdr_fattr4_time_create (ZDR *zdrs, fattr4_time_create *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_nfstime4 (zdrs, objp)) return FALSE; @@ -1045,7 +1142,8 @@ zdr_fattr4_time_create (ZDR *zdrs, fattr4_time_create *objp) uint32_t zdr_fattr4_time_delta (ZDR *zdrs, fattr4_time_delta *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_nfstime4 (zdrs, objp)) return FALSE; @@ -1055,7 +1153,8 @@ zdr_fattr4_time_delta (ZDR *zdrs, fattr4_time_delta *objp) uint32_t zdr_fattr4_time_metadata (ZDR *zdrs, fattr4_time_metadata *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_nfstime4 (zdrs, objp)) return FALSE; @@ -1065,7 +1164,8 @@ zdr_fattr4_time_metadata (ZDR *zdrs, fattr4_time_metadata *objp) uint32_t zdr_fattr4_time_modify (ZDR *zdrs, fattr4_time_modify *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_nfstime4 (zdrs, objp)) return FALSE; @@ -1075,7 +1175,8 @@ zdr_fattr4_time_modify (ZDR *zdrs, fattr4_time_modify *objp) uint32_t zdr_fattr4_time_modify_set (ZDR *zdrs, fattr4_time_modify_set *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_settime4 (zdrs, objp)) return FALSE; @@ -1085,7 +1186,8 @@ zdr_fattr4_time_modify_set (ZDR *zdrs, fattr4_time_modify_set *objp) uint32_t zdr_attrlist4 (ZDR *zdrs, attrlist4 *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_bytes (zdrs, (char **)&objp->attrlist4_val, (u_int *) &objp->attrlist4_len, ~0)) return FALSE; @@ -1095,7 +1197,8 @@ zdr_attrlist4 (ZDR *zdrs, attrlist4 *objp) uint32_t zdr_fattr4 (ZDR *zdrs, fattr4 *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_bitmap4 (zdrs, &objp->attrmask)) return FALSE; @@ -1107,7 +1210,8 @@ zdr_fattr4 (ZDR *zdrs, fattr4 *objp) uint32_t zdr_change_info4 (ZDR *zdrs, change_info4 *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_bool (zdrs, &objp->atomic)) return FALSE; @@ -1121,7 +1225,8 @@ zdr_change_info4 (ZDR *zdrs, change_info4 *objp) uint32_t zdr_clientaddr4 (ZDR *zdrs, clientaddr4 *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_string (zdrs, &objp->r_netid, ~0)) return FALSE; @@ -1133,7 +1238,8 @@ zdr_clientaddr4 (ZDR *zdrs, clientaddr4 *objp) uint32_t zdr_cb_client4 (ZDR *zdrs, cb_client4 *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_uint32_t (zdrs, &objp->cb_program)) return FALSE; @@ -1145,7 +1251,8 @@ zdr_cb_client4 (ZDR *zdrs, cb_client4 *objp) uint32_t zdr_stateid4 (ZDR *zdrs, stateid4 *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_uint32_t (zdrs, &objp->seqid)) @@ -1158,7 +1265,8 @@ zdr_stateid4 (ZDR *zdrs, stateid4 *objp) uint32_t zdr_nfs_client_id4 (ZDR *zdrs, nfs_client_id4 *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_verifier4 (zdrs, objp->verifier)) return FALSE; @@ -1170,7 +1278,8 @@ zdr_nfs_client_id4 (ZDR *zdrs, nfs_client_id4 *objp) uint32_t zdr_open_owner4 (ZDR *zdrs, open_owner4 *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_clientid4 (zdrs, &objp->clientid)) return FALSE; @@ -1182,7 +1291,8 @@ zdr_open_owner4 (ZDR *zdrs, open_owner4 *objp) uint32_t zdr_lock_owner4 (ZDR *zdrs, lock_owner4 *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_clientid4 (zdrs, &objp->clientid)) return FALSE; @@ -1194,7 +1304,8 @@ zdr_lock_owner4 (ZDR *zdrs, lock_owner4 *objp) uint32_t zdr_nfs_lock_type4 (ZDR *zdrs, nfs_lock_type4 *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_enum (zdrs, (enum_t *) objp)) return FALSE; @@ -1204,7 +1315,8 @@ zdr_nfs_lock_type4 (ZDR *zdrs, nfs_lock_type4 *objp) uint32_t zdr_client_owner4 (ZDR *zdrs, client_owner4 *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_verifier4 (zdrs, objp->co_verifier)) return FALSE; @@ -1216,7 +1328,8 @@ zdr_client_owner4 (ZDR *zdrs, client_owner4 *objp) uint32_t zdr_server_owner4 (ZDR *zdrs, server_owner4 *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_uint64_t (zdrs, &objp->so_minor_id)) return FALSE; @@ -1228,7 +1341,8 @@ zdr_server_owner4 (ZDR *zdrs, server_owner4 *objp) uint32_t zdr_nfs_impl_id4 (ZDR *zdrs, nfs_impl_id4 *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_utf8str_cis (zdrs, &objp->nii_domain)) return FALSE; @@ -1242,7 +1356,8 @@ zdr_nfs_impl_id4 (ZDR *zdrs, nfs_impl_id4 *objp) uint32_t zdr_ACCESS4args (ZDR *zdrs, ACCESS4args *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_uint32_t (zdrs, &objp->access)) return FALSE; @@ -1252,7 +1367,8 @@ zdr_ACCESS4args (ZDR *zdrs, ACCESS4args *objp) uint32_t zdr_ACCESS4resok (ZDR *zdrs, ACCESS4resok *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_uint32_t (zdrs, &objp->supported)) return FALSE; @@ -1264,7 +1380,8 @@ zdr_ACCESS4resok (ZDR *zdrs, ACCESS4resok *objp) uint32_t zdr_ACCESS4res (ZDR *zdrs, ACCESS4res *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_nfsstat4 (zdrs, &objp->status)) return FALSE; @@ -1282,7 +1399,8 @@ zdr_ACCESS4res (ZDR *zdrs, ACCESS4res *objp) uint32_t zdr_CLOSE4args (ZDR *zdrs, CLOSE4args *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_seqid4 (zdrs, &objp->seqid)) return FALSE; @@ -1294,7 +1412,8 @@ zdr_CLOSE4args (ZDR *zdrs, CLOSE4args *objp) uint32_t zdr_CLOSE4res (ZDR *zdrs, CLOSE4res *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_nfsstat4 (zdrs, &objp->status)) return FALSE; @@ -1312,7 +1431,8 @@ zdr_CLOSE4res (ZDR *zdrs, CLOSE4res *objp) uint32_t zdr_COMMIT4args (ZDR *zdrs, COMMIT4args *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_offset4 (zdrs, &objp->offset)) return FALSE; @@ -1324,7 +1444,8 @@ zdr_COMMIT4args (ZDR *zdrs, COMMIT4args *objp) uint32_t zdr_COMMIT4resok (ZDR *zdrs, COMMIT4resok *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_verifier4 (zdrs, objp->writeverf)) return FALSE; @@ -1334,7 +1455,8 @@ zdr_COMMIT4resok (ZDR *zdrs, COMMIT4resok *objp) uint32_t zdr_COMMIT4res (ZDR *zdrs, COMMIT4res *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_nfsstat4 (zdrs, &objp->status)) return FALSE; @@ -1352,7 +1474,8 @@ zdr_COMMIT4res (ZDR *zdrs, COMMIT4res *objp) uint32_t zdr_createtype4 (ZDR *zdrs, createtype4 *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_nfs_ftype4 (zdrs, &objp->type)) return FALSE; @@ -1379,7 +1502,8 @@ zdr_createtype4 (ZDR *zdrs, createtype4 *objp) uint32_t zdr_CREATE4args (ZDR *zdrs, CREATE4args *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_createtype4 (zdrs, &objp->objtype)) return FALSE; @@ -1393,7 +1517,8 @@ zdr_CREATE4args (ZDR *zdrs, CREATE4args *objp) uint32_t zdr_CREATE4resok (ZDR *zdrs, CREATE4resok *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_change_info4 (zdrs, &objp->cinfo)) return FALSE; @@ -1405,7 +1530,8 @@ zdr_CREATE4resok (ZDR *zdrs, CREATE4resok *objp) uint32_t zdr_CREATE4res (ZDR *zdrs, CREATE4res *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_nfsstat4 (zdrs, &objp->status)) return FALSE; @@ -1423,7 +1549,8 @@ zdr_CREATE4res (ZDR *zdrs, CREATE4res *objp) uint32_t zdr_DELEGPURGE4args (ZDR *zdrs, DELEGPURGE4args *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_clientid4 (zdrs, &objp->clientid)) return FALSE; @@ -1433,7 +1560,8 @@ zdr_DELEGPURGE4args (ZDR *zdrs, DELEGPURGE4args *objp) uint32_t zdr_DELEGPURGE4res (ZDR *zdrs, DELEGPURGE4res *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_nfsstat4 (zdrs, &objp->status)) return FALSE; @@ -1443,7 +1571,8 @@ zdr_DELEGPURGE4res (ZDR *zdrs, DELEGPURGE4res *objp) uint32_t zdr_DELEGRETURN4args (ZDR *zdrs, DELEGRETURN4args *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_stateid4 (zdrs, &objp->deleg_stateid)) return FALSE; @@ -1453,7 +1582,8 @@ zdr_DELEGRETURN4args (ZDR *zdrs, DELEGRETURN4args *objp) uint32_t zdr_DELEGRETURN4res (ZDR *zdrs, DELEGRETURN4res *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_nfsstat4 (zdrs, &objp->status)) return FALSE; @@ -1463,7 +1593,8 @@ zdr_DELEGRETURN4res (ZDR *zdrs, DELEGRETURN4res *objp) uint32_t zdr_GETATTR4args (ZDR *zdrs, GETATTR4args *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_bitmap4 (zdrs, &objp->attr_request)) return FALSE; @@ -1473,7 +1604,8 @@ zdr_GETATTR4args (ZDR *zdrs, GETATTR4args *objp) uint32_t zdr_GETATTR4resok (ZDR *zdrs, GETATTR4resok *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_fattr4 (zdrs, &objp->obj_attributes)) return FALSE; @@ -1483,7 +1615,8 @@ zdr_GETATTR4resok (ZDR *zdrs, GETATTR4resok *objp) uint32_t zdr_GETATTR4res (ZDR *zdrs, GETATTR4res *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_nfsstat4 (zdrs, &objp->status)) return FALSE; @@ -1501,7 +1634,8 @@ zdr_GETATTR4res (ZDR *zdrs, GETATTR4res *objp) uint32_t zdr_GETFH4resok (ZDR *zdrs, GETFH4resok *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_nfs_fh4 (zdrs, &objp->object)) return FALSE; @@ -1511,7 +1645,8 @@ zdr_GETFH4resok (ZDR *zdrs, GETFH4resok *objp) uint32_t zdr_GETFH4res (ZDR *zdrs, GETFH4res *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_nfsstat4 (zdrs, &objp->status)) return FALSE; @@ -1529,7 +1664,8 @@ zdr_GETFH4res (ZDR *zdrs, GETFH4res *objp) uint32_t zdr_LINK4args (ZDR *zdrs, LINK4args *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_component4 (zdrs, &objp->newname)) return FALSE; @@ -1539,7 +1675,8 @@ zdr_LINK4args (ZDR *zdrs, LINK4args *objp) uint32_t zdr_LINK4resok (ZDR *zdrs, LINK4resok *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_change_info4 (zdrs, &objp->cinfo)) return FALSE; @@ -1549,7 +1686,8 @@ zdr_LINK4resok (ZDR *zdrs, LINK4resok *objp) uint32_t zdr_LINK4res (ZDR *zdrs, LINK4res *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_nfsstat4 (zdrs, &objp->status)) return FALSE; @@ -1567,7 +1705,8 @@ zdr_LINK4res (ZDR *zdrs, LINK4res *objp) uint32_t zdr_open_to_lock_owner4 (ZDR *zdrs, open_to_lock_owner4 *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_seqid4 (zdrs, &objp->open_seqid)) return FALSE; @@ -1583,7 +1722,8 @@ zdr_open_to_lock_owner4 (ZDR *zdrs, open_to_lock_owner4 *objp) uint32_t zdr_exist_lock_owner4 (ZDR *zdrs, exist_lock_owner4 *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_stateid4 (zdrs, &objp->lock_stateid)) return FALSE; @@ -1595,7 +1735,8 @@ zdr_exist_lock_owner4 (ZDR *zdrs, exist_lock_owner4 *objp) uint32_t zdr_locker4 (ZDR *zdrs, locker4 *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_bool (zdrs, &objp->new_lock_owner)) return FALSE; @@ -1617,7 +1758,8 @@ zdr_locker4 (ZDR *zdrs, locker4 *objp) uint32_t zdr_LOCK4args (ZDR *zdrs, LOCK4args *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_nfs_lock_type4 (zdrs, &objp->locktype)) return FALSE; @@ -1635,7 +1777,8 @@ zdr_LOCK4args (ZDR *zdrs, LOCK4args *objp) uint32_t zdr_LOCK4denied (ZDR *zdrs, LOCK4denied *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_offset4 (zdrs, &objp->offset)) return FALSE; @@ -1651,7 +1794,8 @@ zdr_LOCK4denied (ZDR *zdrs, LOCK4denied *objp) uint32_t zdr_LOCK4resok (ZDR *zdrs, LOCK4resok *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_stateid4 (zdrs, &objp->lock_stateid)) return FALSE; @@ -1661,7 +1805,8 @@ zdr_LOCK4resok (ZDR *zdrs, LOCK4resok *objp) uint32_t zdr_LOCK4res (ZDR *zdrs, LOCK4res *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_nfsstat4 (zdrs, &objp->status)) return FALSE; @@ -1683,7 +1828,8 @@ zdr_LOCK4res (ZDR *zdrs, LOCK4res *objp) uint32_t zdr_LOCKT4args (ZDR *zdrs, LOCKT4args *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_nfs_lock_type4 (zdrs, &objp->locktype)) return FALSE; @@ -1699,7 +1845,8 @@ zdr_LOCKT4args (ZDR *zdrs, LOCKT4args *objp) uint32_t zdr_LOCKT4res (ZDR *zdrs, LOCKT4res *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_nfsstat4 (zdrs, &objp->status)) return FALSE; @@ -1719,7 +1866,8 @@ zdr_LOCKT4res (ZDR *zdrs, LOCKT4res *objp) uint32_t zdr_LOCKU4args (ZDR *zdrs, LOCKU4args *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_nfs_lock_type4 (zdrs, &objp->locktype)) return FALSE; @@ -1737,7 +1885,8 @@ zdr_LOCKU4args (ZDR *zdrs, LOCKU4args *objp) uint32_t zdr_LOCKU4res (ZDR *zdrs, LOCKU4res *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_nfsstat4 (zdrs, &objp->status)) return FALSE; @@ -1755,7 +1904,8 @@ zdr_LOCKU4res (ZDR *zdrs, LOCKU4res *objp) uint32_t zdr_LOOKUP4args (ZDR *zdrs, LOOKUP4args *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_component4 (zdrs, &objp->objname)) return FALSE; @@ -1765,7 +1915,8 @@ zdr_LOOKUP4args (ZDR *zdrs, LOOKUP4args *objp) uint32_t zdr_LOOKUP4res (ZDR *zdrs, LOOKUP4res *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_nfsstat4 (zdrs, &objp->status)) return FALSE; @@ -1775,7 +1926,8 @@ zdr_LOOKUP4res (ZDR *zdrs, LOOKUP4res *objp) uint32_t zdr_LOOKUPP4res (ZDR *zdrs, LOOKUPP4res *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_nfsstat4 (zdrs, &objp->status)) return FALSE; @@ -1785,7 +1937,8 @@ zdr_LOOKUPP4res (ZDR *zdrs, LOOKUPP4res *objp) uint32_t zdr_NVERIFY4args (ZDR *zdrs, NVERIFY4args *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_fattr4 (zdrs, &objp->obj_attributes)) return FALSE; @@ -1795,7 +1948,8 @@ zdr_NVERIFY4args (ZDR *zdrs, NVERIFY4args *objp) uint32_t zdr_NVERIFY4res (ZDR *zdrs, NVERIFY4res *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_nfsstat4 (zdrs, &objp->status)) return FALSE; @@ -1805,7 +1959,8 @@ zdr_NVERIFY4res (ZDR *zdrs, NVERIFY4res *objp) uint32_t zdr_createmode4 (ZDR *zdrs, createmode4 *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_enum (zdrs, (enum_t *) objp)) return FALSE; @@ -1815,7 +1970,8 @@ zdr_createmode4 (ZDR *zdrs, createmode4 *objp) uint32_t zdr_createhow4 (ZDR *zdrs, createhow4 *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_createmode4 (zdrs, &objp->mode)) return FALSE; @@ -1838,7 +1994,8 @@ zdr_createhow4 (ZDR *zdrs, createhow4 *objp) uint32_t zdr_opentype4 (ZDR *zdrs, opentype4 *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_enum (zdrs, (enum_t *) objp)) return FALSE; @@ -1848,7 +2005,8 @@ zdr_opentype4 (ZDR *zdrs, opentype4 *objp) uint32_t zdr_openflag4 (ZDR *zdrs, openflag4 *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_opentype4 (zdrs, &objp->opentype)) return FALSE; @@ -1866,7 +2024,8 @@ zdr_openflag4 (ZDR *zdrs, openflag4 *objp) uint32_t zdr_limit_by4 (ZDR *zdrs, limit_by4 *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_enum (zdrs, (enum_t *) objp)) return FALSE; @@ -1876,7 +2035,8 @@ zdr_limit_by4 (ZDR *zdrs, limit_by4 *objp) uint32_t zdr_nfs_modified_limit4 (ZDR *zdrs, nfs_modified_limit4 *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_uint32_t (zdrs, &objp->num_blocks)) return FALSE; @@ -1888,7 +2048,8 @@ zdr_nfs_modified_limit4 (ZDR *zdrs, nfs_modified_limit4 *objp) uint32_t zdr_nfs_space_limit4 (ZDR *zdrs, nfs_space_limit4 *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_limit_by4 (zdrs, &objp->limitby)) return FALSE; @@ -1910,7 +2071,8 @@ zdr_nfs_space_limit4 (ZDR *zdrs, nfs_space_limit4 *objp) uint32_t zdr_open_delegation_type4 (ZDR *zdrs, open_delegation_type4 *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_enum (zdrs, (enum_t *) objp)) return FALSE; @@ -1920,7 +2082,8 @@ zdr_open_delegation_type4 (ZDR *zdrs, open_delegation_type4 *objp) uint32_t zdr_open_claim_type4 (ZDR *zdrs, open_claim_type4 *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_enum (zdrs, (enum_t *) objp)) return FALSE; @@ -1930,7 +2093,8 @@ zdr_open_claim_type4 (ZDR *zdrs, open_claim_type4 *objp) uint32_t zdr_open_claim_delegate_cur4 (ZDR *zdrs, open_claim_delegate_cur4 *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_stateid4 (zdrs, &objp->delegate_stateid)) return FALSE; @@ -1942,7 +2106,8 @@ zdr_open_claim_delegate_cur4 (ZDR *zdrs, open_claim_delegate_cur4 *objp) uint32_t zdr_open_claim4 (ZDR *zdrs, open_claim4 *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_open_claim_type4 (zdrs, &objp->claim)) return FALSE; @@ -1980,7 +2145,8 @@ zdr_open_claim4 (ZDR *zdrs, open_claim4 *objp) uint32_t zdr_OPEN4args (ZDR *zdrs, OPEN4args *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_seqid4 (zdrs, &objp->seqid)) return FALSE; @@ -2000,7 +2166,8 @@ zdr_OPEN4args (ZDR *zdrs, OPEN4args *objp) uint32_t zdr_open_read_delegation4 (ZDR *zdrs, open_read_delegation4 *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_stateid4 (zdrs, &objp->stateid)) return FALSE; @@ -2014,7 +2181,8 @@ zdr_open_read_delegation4 (ZDR *zdrs, open_read_delegation4 *objp) uint32_t zdr_open_write_delegation4 (ZDR *zdrs, open_write_delegation4 *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_stateid4 (zdrs, &objp->stateid)) return FALSE; @@ -2030,7 +2198,8 @@ zdr_open_write_delegation4 (ZDR *zdrs, open_write_delegation4 *objp) uint32_t zdr_open_delegation4 (ZDR *zdrs, open_delegation4 *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_open_delegation_type4 (zdrs, &objp->delegation_type)) return FALSE; @@ -2054,7 +2223,8 @@ zdr_open_delegation4 (ZDR *zdrs, open_delegation4 *objp) uint32_t zdr_OPEN4resok (ZDR *zdrs, OPEN4resok *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_stateid4 (zdrs, &objp->stateid)) return FALSE; @@ -2072,7 +2242,8 @@ zdr_OPEN4resok (ZDR *zdrs, OPEN4resok *objp) uint32_t zdr_OPEN4res (ZDR *zdrs, OPEN4res *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_nfsstat4 (zdrs, &objp->status)) return FALSE; @@ -2090,7 +2261,8 @@ zdr_OPEN4res (ZDR *zdrs, OPEN4res *objp) uint32_t zdr_OPENATTR4args (ZDR *zdrs, OPENATTR4args *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_bool (zdrs, &objp->createdir)) return FALSE; @@ -2100,7 +2272,8 @@ zdr_OPENATTR4args (ZDR *zdrs, OPENATTR4args *objp) uint32_t zdr_OPENATTR4res (ZDR *zdrs, OPENATTR4res *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_nfsstat4 (zdrs, &objp->status)) return FALSE; @@ -2110,7 +2283,8 @@ zdr_OPENATTR4res (ZDR *zdrs, OPENATTR4res *objp) uint32_t zdr_OPEN_CONFIRM4args (ZDR *zdrs, OPEN_CONFIRM4args *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_stateid4 (zdrs, &objp->open_stateid)) return FALSE; @@ -2122,7 +2296,8 @@ zdr_OPEN_CONFIRM4args (ZDR *zdrs, OPEN_CONFIRM4args *objp) uint32_t zdr_OPEN_CONFIRM4resok (ZDR *zdrs, OPEN_CONFIRM4resok *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_stateid4 (zdrs, &objp->open_stateid)) return FALSE; @@ -2132,7 +2307,8 @@ zdr_OPEN_CONFIRM4resok (ZDR *zdrs, OPEN_CONFIRM4resok *objp) uint32_t zdr_OPEN_CONFIRM4res (ZDR *zdrs, OPEN_CONFIRM4res *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_nfsstat4 (zdrs, &objp->status)) return FALSE; @@ -2150,7 +2326,8 @@ zdr_OPEN_CONFIRM4res (ZDR *zdrs, OPEN_CONFIRM4res *objp) uint32_t zdr_OPEN_DOWNGRADE4args (ZDR *zdrs, OPEN_DOWNGRADE4args *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_stateid4 (zdrs, &objp->open_stateid)) return FALSE; @@ -2166,7 +2343,8 @@ zdr_OPEN_DOWNGRADE4args (ZDR *zdrs, OPEN_DOWNGRADE4args *objp) uint32_t zdr_OPEN_DOWNGRADE4resok (ZDR *zdrs, OPEN_DOWNGRADE4resok *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_stateid4 (zdrs, &objp->open_stateid)) return FALSE; @@ -2176,7 +2354,8 @@ zdr_OPEN_DOWNGRADE4resok (ZDR *zdrs, OPEN_DOWNGRADE4resok *objp) uint32_t zdr_OPEN_DOWNGRADE4res (ZDR *zdrs, OPEN_DOWNGRADE4res *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_nfsstat4 (zdrs, &objp->status)) return FALSE; @@ -2194,7 +2373,8 @@ zdr_OPEN_DOWNGRADE4res (ZDR *zdrs, OPEN_DOWNGRADE4res *objp) uint32_t zdr_PUTFH4args (ZDR *zdrs, PUTFH4args *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_nfs_fh4 (zdrs, &objp->object)) return FALSE; @@ -2204,7 +2384,8 @@ zdr_PUTFH4args (ZDR *zdrs, PUTFH4args *objp) uint32_t zdr_PUTFH4res (ZDR *zdrs, PUTFH4res *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_nfsstat4 (zdrs, &objp->status)) return FALSE; @@ -2214,7 +2395,8 @@ zdr_PUTFH4res (ZDR *zdrs, PUTFH4res *objp) uint32_t zdr_PUTPUBFH4res (ZDR *zdrs, PUTPUBFH4res *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_nfsstat4 (zdrs, &objp->status)) return FALSE; @@ -2224,7 +2406,8 @@ zdr_PUTPUBFH4res (ZDR *zdrs, PUTPUBFH4res *objp) uint32_t zdr_PUTROOTFH4res (ZDR *zdrs, PUTROOTFH4res *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_nfsstat4 (zdrs, &objp->status)) return FALSE; @@ -2234,7 +2417,8 @@ zdr_PUTROOTFH4res (ZDR *zdrs, PUTROOTFH4res *objp) uint32_t zdr_READ4args (ZDR *zdrs, READ4args *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_stateid4 (zdrs, &objp->stateid)) return FALSE; @@ -2248,7 +2432,8 @@ zdr_READ4args (ZDR *zdrs, READ4args *objp) uint32_t zzdr_READ4resok (ZDR *zdrs, READ4resok *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_bool (zdrs, &objp->eof)) return FALSE; @@ -2260,7 +2445,8 @@ zzdr_READ4resok (ZDR *zdrs, READ4resok *objp) uint32_t zdr_READ4res (ZDR *zdrs, READ4res *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_nfsstat4 (zdrs, &objp->status)) return FALSE; @@ -2278,7 +2464,8 @@ zdr_READ4res (ZDR *zdrs, READ4res *objp) uint32_t zdr_READDIR4args (ZDR *zdrs, READDIR4args *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_nfs_cookie4 (zdrs, &objp->cookie)) return FALSE; @@ -2296,7 +2483,8 @@ zdr_READDIR4args (ZDR *zdrs, READDIR4args *objp) uint32_t zdr_entry4 (ZDR *zdrs, entry4 *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_nfs_cookie4 (zdrs, &objp->cookie)) return FALSE; @@ -2312,7 +2500,8 @@ zdr_entry4 (ZDR *zdrs, entry4 *objp) uint32_t zdr_dirlist4 (ZDR *zdrs, dirlist4 *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_pointer (zdrs, (char **)&objp->entries, sizeof (entry4), (zdrproc_t) zdr_entry4)) return FALSE; @@ -2324,7 +2513,8 @@ zdr_dirlist4 (ZDR *zdrs, dirlist4 *objp) uint32_t zdr_READDIR4resok (ZDR *zdrs, READDIR4resok *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_verifier4 (zdrs, objp->cookieverf)) return FALSE; @@ -2336,7 +2526,8 @@ zdr_READDIR4resok (ZDR *zdrs, READDIR4resok *objp) uint32_t zdr_READDIR4res (ZDR *zdrs, READDIR4res *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_nfsstat4 (zdrs, &objp->status)) return FALSE; @@ -2354,7 +2545,8 @@ zdr_READDIR4res (ZDR *zdrs, READDIR4res *objp) uint32_t zdr_READLINK4resok (ZDR *zdrs, READLINK4resok *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_linktext4 (zdrs, &objp->link)) return FALSE; @@ -2364,7 +2556,8 @@ zdr_READLINK4resok (ZDR *zdrs, READLINK4resok *objp) uint32_t zdr_READLINK4res (ZDR *zdrs, READLINK4res *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_nfsstat4 (zdrs, &objp->status)) return FALSE; @@ -2382,7 +2575,8 @@ zdr_READLINK4res (ZDR *zdrs, READLINK4res *objp) uint32_t zdr_REMOVE4args (ZDR *zdrs, REMOVE4args *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_component4 (zdrs, &objp->target)) return FALSE; @@ -2392,7 +2586,8 @@ zdr_REMOVE4args (ZDR *zdrs, REMOVE4args *objp) uint32_t zdr_REMOVE4resok (ZDR *zdrs, REMOVE4resok *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_change_info4 (zdrs, &objp->cinfo)) return FALSE; @@ -2402,7 +2597,8 @@ zdr_REMOVE4resok (ZDR *zdrs, REMOVE4resok *objp) uint32_t zdr_REMOVE4res (ZDR *zdrs, REMOVE4res *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_nfsstat4 (zdrs, &objp->status)) return FALSE; @@ -2420,7 +2616,8 @@ zdr_REMOVE4res (ZDR *zdrs, REMOVE4res *objp) uint32_t zdr_RENAME4args (ZDR *zdrs, RENAME4args *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_component4 (zdrs, &objp->oldname)) return FALSE; @@ -2432,7 +2629,8 @@ zdr_RENAME4args (ZDR *zdrs, RENAME4args *objp) uint32_t zdr_RENAME4resok (ZDR *zdrs, RENAME4resok *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_change_info4 (zdrs, &objp->source_cinfo)) return FALSE; @@ -2444,7 +2642,8 @@ zdr_RENAME4resok (ZDR *zdrs, RENAME4resok *objp) uint32_t zdr_RENAME4res (ZDR *zdrs, RENAME4res *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_nfsstat4 (zdrs, &objp->status)) return FALSE; @@ -2462,7 +2661,8 @@ zdr_RENAME4res (ZDR *zdrs, RENAME4res *objp) uint32_t zdr_RENEW4args (ZDR *zdrs, RENEW4args *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_clientid4 (zdrs, &objp->clientid)) return FALSE; @@ -2472,7 +2672,8 @@ zdr_RENEW4args (ZDR *zdrs, RENEW4args *objp) uint32_t zdr_RENEW4res (ZDR *zdrs, RENEW4res *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_nfsstat4 (zdrs, &objp->status)) return FALSE; @@ -2482,7 +2683,8 @@ zdr_RENEW4res (ZDR *zdrs, RENEW4res *objp) uint32_t zdr_RESTOREFH4res (ZDR *zdrs, RESTOREFH4res *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_nfsstat4 (zdrs, &objp->status)) return FALSE; @@ -2492,7 +2694,8 @@ zdr_RESTOREFH4res (ZDR *zdrs, RESTOREFH4res *objp) uint32_t zdr_SAVEFH4res (ZDR *zdrs, SAVEFH4res *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_nfsstat4 (zdrs, &objp->status)) return FALSE; @@ -2502,7 +2705,8 @@ zdr_SAVEFH4res (ZDR *zdrs, SAVEFH4res *objp) uint32_t zdr_SECINFO4args (ZDR *zdrs, SECINFO4args *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_component4 (zdrs, &objp->name)) return FALSE; @@ -2512,7 +2716,8 @@ zdr_SECINFO4args (ZDR *zdrs, SECINFO4args *objp) uint32_t zdr_rpc_gss_svc_t (ZDR *zdrs, rpc_gss_svc_t *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_enum (zdrs, (enum_t *) objp)) return FALSE; @@ -2522,7 +2727,8 @@ zdr_rpc_gss_svc_t (ZDR *zdrs, rpc_gss_svc_t *objp) uint32_t zdr_rpcsec_gss_info (ZDR *zdrs, rpcsec_gss_info *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_sec_oid4 (zdrs, &objp->oid)) return FALSE; @@ -2536,7 +2742,8 @@ zdr_rpcsec_gss_info (ZDR *zdrs, rpcsec_gss_info *objp) uint32_t zdr_secinfo4 (ZDR *zdrs, secinfo4 *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_uint32_t (zdrs, &objp->flavor)) return FALSE; @@ -2554,7 +2761,8 @@ zdr_secinfo4 (ZDR *zdrs, secinfo4 *objp) uint32_t zdr_SECINFO4resok (ZDR *zdrs, SECINFO4resok *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_array (zdrs, (char **)&objp->SECINFO4resok_val, (u_int *) &objp->SECINFO4resok_len, ~0, sizeof (secinfo4), (zdrproc_t) zdr_secinfo4)) @@ -2565,7 +2773,8 @@ zdr_SECINFO4resok (ZDR *zdrs, SECINFO4resok *objp) uint32_t zdr_SECINFO4res (ZDR *zdrs, SECINFO4res *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_nfsstat4 (zdrs, &objp->status)) return FALSE; @@ -2583,7 +2792,8 @@ zdr_SECINFO4res (ZDR *zdrs, SECINFO4res *objp) uint32_t zdr_SETATTR4args (ZDR *zdrs, SETATTR4args *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_stateid4 (zdrs, &objp->stateid)) return FALSE; @@ -2595,7 +2805,8 @@ zdr_SETATTR4args (ZDR *zdrs, SETATTR4args *objp) uint32_t zdr_SETATTR4res (ZDR *zdrs, SETATTR4res *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_nfsstat4 (zdrs, &objp->status)) return FALSE; @@ -2607,7 +2818,8 @@ zdr_SETATTR4res (ZDR *zdrs, SETATTR4res *objp) uint32_t zdr_SETCLIENTID4args (ZDR *zdrs, SETCLIENTID4args *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_nfs_client_id4 (zdrs, &objp->client)) return FALSE; @@ -2621,7 +2833,8 @@ zdr_SETCLIENTID4args (ZDR *zdrs, SETCLIENTID4args *objp) uint32_t zdr_SETCLIENTID4resok (ZDR *zdrs, SETCLIENTID4resok *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_clientid4 (zdrs, &objp->clientid)) return FALSE; @@ -2633,7 +2846,8 @@ zdr_SETCLIENTID4resok (ZDR *zdrs, SETCLIENTID4resok *objp) uint32_t zdr_SETCLIENTID4res (ZDR *zdrs, SETCLIENTID4res *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_nfsstat4 (zdrs, &objp->status)) return FALSE; @@ -2655,7 +2869,8 @@ zdr_SETCLIENTID4res (ZDR *zdrs, SETCLIENTID4res *objp) uint32_t zdr_SETCLIENTID_CONFIRM4args (ZDR *zdrs, SETCLIENTID_CONFIRM4args *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_clientid4 (zdrs, &objp->clientid)) return FALSE; @@ -2667,7 +2882,8 @@ zdr_SETCLIENTID_CONFIRM4args (ZDR *zdrs, SETCLIENTID_CONFIRM4args *objp) uint32_t zdr_SETCLIENTID_CONFIRM4res (ZDR *zdrs, SETCLIENTID_CONFIRM4res *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_nfsstat4 (zdrs, &objp->status)) return FALSE; @@ -2677,7 +2893,8 @@ zdr_SETCLIENTID_CONFIRM4res (ZDR *zdrs, SETCLIENTID_CONFIRM4res *objp) uint32_t zdr_VERIFY4args (ZDR *zdrs, VERIFY4args *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_fattr4 (zdrs, &objp->obj_attributes)) return FALSE; @@ -2687,7 +2904,8 @@ zdr_VERIFY4args (ZDR *zdrs, VERIFY4args *objp) uint32_t zdr_VERIFY4res (ZDR *zdrs, VERIFY4res *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_nfsstat4 (zdrs, &objp->status)) return FALSE; @@ -2697,7 +2915,8 @@ zdr_VERIFY4res (ZDR *zdrs, VERIFY4res *objp) uint32_t zdr_stable_how4 (ZDR *zdrs, stable_how4 *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_enum (zdrs, (enum_t *) objp)) return FALSE; @@ -2707,7 +2926,8 @@ zdr_stable_how4 (ZDR *zdrs, stable_how4 *objp) uint32_t zzdr_WRITE4args (ZDR *zdrs, WRITE4args *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_stateid4 (zdrs, &objp->stateid)) return FALSE; @@ -2723,7 +2943,8 @@ zzdr_WRITE4args (ZDR *zdrs, WRITE4args *objp) uint32_t zdr_WRITE4resok (ZDR *zdrs, WRITE4resok *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_count4 (zdrs, &objp->count)) return FALSE; @@ -2737,7 +2958,8 @@ zdr_WRITE4resok (ZDR *zdrs, WRITE4resok *objp) uint32_t zdr_WRITE4res (ZDR *zdrs, WRITE4res *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_nfsstat4 (zdrs, &objp->status)) return FALSE; @@ -2755,7 +2977,8 @@ zdr_WRITE4res (ZDR *zdrs, WRITE4res *objp) uint32_t zdr_RELEASE_LOCKOWNER4args (ZDR *zdrs, RELEASE_LOCKOWNER4args *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_lock_owner4 (zdrs, &objp->lock_owner)) return FALSE; @@ -2765,7 +2988,8 @@ zdr_RELEASE_LOCKOWNER4args (ZDR *zdrs, RELEASE_LOCKOWNER4args *objp) uint32_t zdr_RELEASE_LOCKOWNER4res (ZDR *zdrs, RELEASE_LOCKOWNER4res *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_nfsstat4 (zdrs, &objp->status)) return FALSE; @@ -2775,7 +2999,8 @@ zdr_RELEASE_LOCKOWNER4res (ZDR *zdrs, RELEASE_LOCKOWNER4res *objp) uint32_t zdr_gsshandle4_t (ZDR *zdrs, gsshandle4_t *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_bytes (zdrs, (char **)&objp->gsshandle4_t_val, (u_int *) &objp->gsshandle4_t_len, ~0)) return FALSE; @@ -2785,7 +3010,8 @@ zdr_gsshandle4_t (ZDR *zdrs, gsshandle4_t *objp) uint32_t zdr_callback_sec_parms4 (ZDR *zdrs, callback_sec_parms4 *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_uint32_t (zdrs, &objp->cb_secflavor)) return FALSE; @@ -2805,7 +3031,8 @@ zdr_callback_sec_parms4 (ZDR *zdrs, callback_sec_parms4 *objp) uint32_t zdr_channel_dir_from_client4 (ZDR *zdrs, channel_dir_from_client4 *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_enum (zdrs, (enum_t *) objp)) return FALSE; @@ -2815,7 +3042,8 @@ zdr_channel_dir_from_client4 (ZDR *zdrs, channel_dir_from_client4 *objp) uint32_t zdr_BIND_CONN_TO_SESSION4args (ZDR *zdrs, BIND_CONN_TO_SESSION4args *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_sessionid4 (zdrs, objp->bctsa_sessid)) return FALSE; @@ -2829,7 +3057,8 @@ zdr_BIND_CONN_TO_SESSION4args (ZDR *zdrs, BIND_CONN_TO_SESSION4args *objp) uint32_t zdr_channel_dir_from_server4 (ZDR *zdrs, channel_dir_from_server4 *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_enum (zdrs, (enum_t *) objp)) return FALSE; @@ -2839,7 +3068,8 @@ zdr_channel_dir_from_server4 (ZDR *zdrs, channel_dir_from_server4 *objp) uint32_t zdr_BIND_CONN_TO_SESSION4resok (ZDR *zdrs, BIND_CONN_TO_SESSION4resok *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_sessionid4 (zdrs, objp->bctsr_sessid)) return FALSE; @@ -2853,7 +3083,8 @@ zdr_BIND_CONN_TO_SESSION4resok (ZDR *zdrs, BIND_CONN_TO_SESSION4resok *objp) uint32_t zdr_BIND_CONN_TO_SESSION4res (ZDR *zdrs, BIND_CONN_TO_SESSION4res *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_nfsstat4 (zdrs, &objp->bctsr_status)) return FALSE; @@ -2871,7 +3102,8 @@ zdr_BIND_CONN_TO_SESSION4res (ZDR *zdrs, BIND_CONN_TO_SESSION4res *objp) uint32_t zdr_state_protect_ops4 (ZDR *zdrs, state_protect_ops4 *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_bitmap4 (zdrs, &objp->spo_must_enforce)) return FALSE; @@ -2883,7 +3115,8 @@ zdr_state_protect_ops4 (ZDR *zdrs, state_protect_ops4 *objp) uint32_t zdr_ssv_sp_parms4 (ZDR *zdrs, ssv_sp_parms4 *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_state_protect_ops4 (zdrs, &objp->ssp_ops)) return FALSE; @@ -2903,7 +3136,8 @@ zdr_ssv_sp_parms4 (ZDR *zdrs, ssv_sp_parms4 *objp) uint32_t zdr_state_protect_how4 (ZDR *zdrs, state_protect_how4 *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_enum (zdrs, (enum_t *) objp)) return FALSE; @@ -2913,7 +3147,8 @@ zdr_state_protect_how4 (ZDR *zdrs, state_protect_how4 *objp) uint32_t zdr_state_protect4_a (ZDR *zdrs, state_protect4_a *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_state_protect_how4 (zdrs, &objp->spa_how)) return FALSE; @@ -2937,7 +3172,8 @@ zdr_state_protect4_a (ZDR *zdrs, state_protect4_a *objp) uint32_t zdr_EXCHANGE_ID4args (ZDR *zdrs, EXCHANGE_ID4args *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_client_owner4 (zdrs, &objp->eia_clientowner)) return FALSE; @@ -2954,7 +3190,8 @@ zdr_EXCHANGE_ID4args (ZDR *zdrs, EXCHANGE_ID4args *objp) uint32_t zdr_ssv_prot_info4 (ZDR *zdrs, ssv_prot_info4 *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_state_protect_ops4 (zdrs, &objp->spi_ops)) return FALSE; @@ -2975,7 +3212,8 @@ zdr_ssv_prot_info4 (ZDR *zdrs, ssv_prot_info4 *objp) uint32_t zdr_state_protect4_r (ZDR *zdrs, state_protect4_r *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_state_protect_how4 (zdrs, &objp->spr_how)) return FALSE; @@ -2999,7 +3237,8 @@ zdr_state_protect4_r (ZDR *zdrs, state_protect4_r *objp) uint32_t zdr_EXCHANGE_ID4resok (ZDR *zdrs, EXCHANGE_ID4resok *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_clientid4 (zdrs, &objp->eir_clientid)) return FALSE; @@ -3022,7 +3261,8 @@ zdr_EXCHANGE_ID4resok (ZDR *zdrs, EXCHANGE_ID4resok *objp) uint32_t zdr_EXCHANGE_ID4res (ZDR *zdrs, EXCHANGE_ID4res *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_nfsstat4 (zdrs, &objp->eir_status)) return FALSE; @@ -3040,7 +3280,8 @@ zdr_EXCHANGE_ID4res (ZDR *zdrs, EXCHANGE_ID4res *objp) uint32_t zdr_channel_attrs4 (ZDR *zdrs, channel_attrs4 *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_count4 (zdrs, &objp->ca_headerpadsize)) return FALSE; @@ -3063,7 +3304,8 @@ zdr_channel_attrs4 (ZDR *zdrs, channel_attrs4 *objp) uint32_t zdr_CREATE_SESSION4args (ZDR *zdrs, CREATE_SESSION4args *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_clientid4 (zdrs, &objp->csa_clientid)) return FALSE; @@ -3086,7 +3328,8 @@ zdr_CREATE_SESSION4args (ZDR *zdrs, CREATE_SESSION4args *objp) uint32_t zdr_CREATE_SESSION4resok (ZDR *zdrs, CREATE_SESSION4resok *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_sessionid4 (zdrs, objp->csr_sessionid)) return FALSE; @@ -3104,7 +3347,8 @@ zdr_CREATE_SESSION4resok (ZDR *zdrs, CREATE_SESSION4resok *objp) uint32_t zdr_CREATE_SESSION4res (ZDR *zdrs, CREATE_SESSION4res *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_nfsstat4 (zdrs, &objp->csr_status)) return FALSE; @@ -3122,7 +3366,8 @@ zdr_CREATE_SESSION4res (ZDR *zdrs, CREATE_SESSION4res *objp) uint32_t zdr_DESTROY_SESSION4args (ZDR *zdrs, DESTROY_SESSION4args *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_sessionid4 (zdrs, objp->dsa_sessionid)) return FALSE; @@ -3132,7 +3377,8 @@ zdr_DESTROY_SESSION4args (ZDR *zdrs, DESTROY_SESSION4args *objp) uint32_t zdr_DESTROY_SESSION4res (ZDR *zdrs, DESTROY_SESSION4res *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_nfsstat4 (zdrs, &objp->dsr_status)) return FALSE; @@ -3142,7 +3388,8 @@ zdr_DESTROY_SESSION4res (ZDR *zdrs, DESTROY_SESSION4res *objp) uint32_t zdr_FREE_STATEID4args (ZDR *zdrs, FREE_STATEID4args *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_stateid4 (zdrs, &objp->fsa_stateid)) return FALSE; @@ -3152,7 +3399,8 @@ zdr_FREE_STATEID4args (ZDR *zdrs, FREE_STATEID4args *objp) uint32_t zdr_FREE_STATEID4res (ZDR *zdrs, FREE_STATEID4res *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_nfsstat4 (zdrs, &objp->fsr_status)) return FALSE; @@ -3162,7 +3410,8 @@ zdr_FREE_STATEID4res (ZDR *zdrs, FREE_STATEID4res *objp) uint32_t zdr_attr_notice4 (ZDR *zdrs, attr_notice4 *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_nfstime4 (zdrs, objp)) return FALSE; @@ -3172,7 +3421,8 @@ zdr_attr_notice4 (ZDR *zdrs, attr_notice4 *objp) uint32_t zdr_GET_DIR_DELEGATION4args (ZDR *zdrs, GET_DIR_DELEGATION4args *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_bool (zdrs, &objp->gdda_signal_deleg_avail)) return FALSE; @@ -3192,7 +3442,8 @@ zdr_GET_DIR_DELEGATION4args (ZDR *zdrs, GET_DIR_DELEGATION4args *objp) uint32_t zdr_GET_DIR_DELEGATION4resok (ZDR *zdrs, GET_DIR_DELEGATION4resok *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_verifier4 (zdrs, objp->gddr_cookieverf)) return FALSE; @@ -3210,7 +3461,8 @@ zdr_GET_DIR_DELEGATION4resok (ZDR *zdrs, GET_DIR_DELEGATION4resok *objp) uint32_t zdr_gddrnf4_status (ZDR *zdrs, gddrnf4_status *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_enum (zdrs, (enum_t *) objp)) return FALSE; @@ -3220,7 +3472,8 @@ zdr_gddrnf4_status (ZDR *zdrs, gddrnf4_status *objp) uint32_t zdr_GET_DIR_DELEGATION4res_non_fatal (ZDR *zdrs, GET_DIR_DELEGATION4res_non_fatal *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_gddrnf4_status (zdrs, &objp->gddrnf_status)) return FALSE; @@ -3242,7 +3495,8 @@ zdr_GET_DIR_DELEGATION4res_non_fatal (ZDR *zdrs, GET_DIR_DELEGATION4res_non_fata uint32_t zdr_GET_DIR_DELEGATION4res (ZDR *zdrs, GET_DIR_DELEGATION4res *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_nfsstat4 (zdrs, &objp->gddr_status)) return FALSE; @@ -3260,7 +3514,8 @@ zdr_GET_DIR_DELEGATION4res (ZDR *zdrs, GET_DIR_DELEGATION4res *objp) uint32_t zdr_GETDEVICEINFO4args (ZDR *zdrs, GETDEVICEINFO4args *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_deviceid4 (zdrs, objp->gdia_device_id)) return FALSE; @@ -3276,7 +3531,8 @@ zdr_GETDEVICEINFO4args (ZDR *zdrs, GETDEVICEINFO4args *objp) uint32_t zdr_GETDEVICEINFO4resok (ZDR *zdrs, GETDEVICEINFO4resok *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_device_addr4 (zdrs, &objp->gdir_device_addr)) return FALSE; @@ -3288,7 +3544,8 @@ zdr_GETDEVICEINFO4resok (ZDR *zdrs, GETDEVICEINFO4resok *objp) uint32_t zdr_GETDEVICEINFO4res (ZDR *zdrs, GETDEVICEINFO4res *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_nfsstat4 (zdrs, &objp->gdir_status)) return FALSE; @@ -3310,7 +3567,8 @@ zdr_GETDEVICEINFO4res (ZDR *zdrs, GETDEVICEINFO4res *objp) uint32_t zdr_GETDEVICELIST4args (ZDR *zdrs, GETDEVICELIST4args *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_layouttype4 (zdrs, &objp->gdla_layout_type)) return FALSE; @@ -3326,7 +3584,8 @@ zdr_GETDEVICELIST4args (ZDR *zdrs, GETDEVICELIST4args *objp) uint32_t zdr_GETDEVICELIST4resok (ZDR *zdrs, GETDEVICELIST4resok *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_nfs_cookie4 (zdrs, &objp->gdlr_cookie)) return FALSE; @@ -3343,7 +3602,8 @@ zdr_GETDEVICELIST4resok (ZDR *zdrs, GETDEVICELIST4resok *objp) uint32_t zdr_GETDEVICELIST4res (ZDR *zdrs, GETDEVICELIST4res *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_nfsstat4 (zdrs, &objp->gdlr_status)) return FALSE; @@ -3361,7 +3621,8 @@ zdr_GETDEVICELIST4res (ZDR *zdrs, GETDEVICELIST4res *objp) uint32_t zdr_newtime4 (ZDR *zdrs, newtime4 *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_bool (zdrs, &objp->nt_timechanged)) return FALSE; @@ -3381,7 +3642,8 @@ zdr_newtime4 (ZDR *zdrs, newtime4 *objp) uint32_t zdr_newoffset4 (ZDR *zdrs, newoffset4 *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_bool (zdrs, &objp->no_newoffset)) return FALSE; @@ -3401,7 +3663,8 @@ zdr_newoffset4 (ZDR *zdrs, newoffset4 *objp) uint32_t zdr_LAYOUTCOMMIT4args (ZDR *zdrs, LAYOUTCOMMIT4args *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_offset4 (zdrs, &objp->loca_offset)) return FALSE; @@ -3423,7 +3686,8 @@ zdr_LAYOUTCOMMIT4args (ZDR *zdrs, LAYOUTCOMMIT4args *objp) uint32_t zdr_newsize4 (ZDR *zdrs, newsize4 *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_bool (zdrs, &objp->ns_sizechanged)) return FALSE; @@ -3443,7 +3707,8 @@ zdr_newsize4 (ZDR *zdrs, newsize4 *objp) uint32_t zdr_LAYOUTCOMMIT4resok (ZDR *zdrs, LAYOUTCOMMIT4resok *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_newsize4 (zdrs, &objp->locr_newsize)) return FALSE; @@ -3453,7 +3718,8 @@ zdr_LAYOUTCOMMIT4resok (ZDR *zdrs, LAYOUTCOMMIT4resok *objp) uint32_t zdr_LAYOUTCOMMIT4res (ZDR *zdrs, LAYOUTCOMMIT4res *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_nfsstat4 (zdrs, &objp->locr_status)) return FALSE; @@ -3471,7 +3737,8 @@ zdr_LAYOUTCOMMIT4res (ZDR *zdrs, LAYOUTCOMMIT4res *objp) uint32_t zdr_LAYOUTGET4args (ZDR *zdrs, LAYOUTGET4args *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_bool (zdrs, &objp->loga_signal_layout_avail)) return FALSE; @@ -3495,7 +3762,8 @@ zdr_LAYOUTGET4args (ZDR *zdrs, LAYOUTGET4args *objp) uint32_t zdr_LAYOUTGET4resok (ZDR *zdrs, LAYOUTGET4resok *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_bool (zdrs, &objp->logr_return_on_close)) return FALSE; @@ -3510,7 +3778,8 @@ zdr_LAYOUTGET4resok (ZDR *zdrs, LAYOUTGET4resok *objp) uint32_t zdr_LAYOUTGET4res (ZDR *zdrs, LAYOUTGET4res *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_nfsstat4 (zdrs, &objp->logr_status)) return FALSE; @@ -3532,7 +3801,8 @@ zdr_LAYOUTGET4res (ZDR *zdrs, LAYOUTGET4res *objp) uint32_t zdr_layoutreturn_type4 (ZDR *zdrs, layoutreturn_type4 *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_enum (zdrs, (enum_t *) objp)) return FALSE; @@ -3542,7 +3812,8 @@ zdr_layoutreturn_type4 (ZDR *zdrs, layoutreturn_type4 *objp) uint32_t zdr_layoutreturn_file4 (ZDR *zdrs, layoutreturn_file4 *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_offset4 (zdrs, &objp->lrf_offset)) return FALSE; @@ -3558,7 +3829,8 @@ zdr_layoutreturn_file4 (ZDR *zdrs, layoutreturn_file4 *objp) uint32_t zdr_layoutreturn4 (ZDR *zdrs, layoutreturn4 *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_layoutreturn_type4 (zdrs, &objp->lr_returntype)) return FALSE; @@ -3576,7 +3848,8 @@ zdr_layoutreturn4 (ZDR *zdrs, layoutreturn4 *objp) uint32_t zdr_LAYOUTRETURN4args (ZDR *zdrs, LAYOUTRETURN4args *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_bool (zdrs, &objp->lora_reclaim)) return FALSE; @@ -3592,7 +3865,8 @@ zdr_LAYOUTRETURN4args (ZDR *zdrs, LAYOUTRETURN4args *objp) uint32_t zdr_layoutreturn_stateid (ZDR *zdrs, layoutreturn_stateid *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_bool (zdrs, &objp->lrs_present)) return FALSE; @@ -3612,7 +3886,8 @@ zdr_layoutreturn_stateid (ZDR *zdrs, layoutreturn_stateid *objp) uint32_t zdr_LAYOUTRETURN4res (ZDR *zdrs, LAYOUTRETURN4res *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_nfsstat4 (zdrs, &objp->lorr_status)) return FALSE; @@ -3630,7 +3905,8 @@ zdr_LAYOUTRETURN4res (ZDR *zdrs, LAYOUTRETURN4res *objp) uint32_t zdr_secinfo_style4 (ZDR *zdrs, secinfo_style4 *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_enum (zdrs, (enum_t *) objp)) return FALSE; @@ -3640,7 +3916,8 @@ zdr_secinfo_style4 (ZDR *zdrs, secinfo_style4 *objp) uint32_t zdr_SECINFO_NO_NAME4args (ZDR *zdrs, SECINFO_NO_NAME4args *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_secinfo_style4 (zdrs, objp)) return FALSE; @@ -3650,7 +3927,8 @@ zdr_SECINFO_NO_NAME4args (ZDR *zdrs, SECINFO_NO_NAME4args *objp) uint32_t zdr_SECINFO_NO_NAME4res (ZDR *zdrs, SECINFO_NO_NAME4res *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_SECINFO4res (zdrs, objp)) return FALSE; @@ -3660,7 +3938,8 @@ zdr_SECINFO_NO_NAME4res (ZDR *zdrs, SECINFO_NO_NAME4res *objp) uint32_t zdr_SEQUENCE4args (ZDR *zdrs, SEQUENCE4args *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_sessionid4 (zdrs, objp->sa_sessionid)) return FALSE; @@ -3678,7 +3957,8 @@ zdr_SEQUENCE4args (ZDR *zdrs, SEQUENCE4args *objp) uint32_t zdr_SEQUENCE4resok (ZDR *zdrs, SEQUENCE4resok *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_sessionid4 (zdrs, objp->sr_sessionid)) return FALSE; @@ -3698,7 +3978,8 @@ zdr_SEQUENCE4resok (ZDR *zdrs, SEQUENCE4resok *objp) uint32_t zdr_SEQUENCE4res (ZDR *zdrs, SEQUENCE4res *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_nfsstat4 (zdrs, &objp->sr_status)) return FALSE; @@ -3716,7 +3997,8 @@ zdr_SEQUENCE4res (ZDR *zdrs, SEQUENCE4res *objp) uint32_t zdr_ssa_digest_input4 (ZDR *zdrs, ssa_digest_input4 *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_SEQUENCE4args (zdrs, &objp->sdi_seqargs)) return FALSE; @@ -3726,7 +4008,8 @@ zdr_ssa_digest_input4 (ZDR *zdrs, ssa_digest_input4 *objp) uint32_t zdr_SET_SSV4args (ZDR *zdrs, SET_SSV4args *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_bytes (zdrs, (char **)&objp->ssa_ssv.ssa_ssv_val, (u_int *) &objp->ssa_ssv.ssa_ssv_len, ~0)) return FALSE; @@ -3738,7 +4021,8 @@ zdr_SET_SSV4args (ZDR *zdrs, SET_SSV4args *objp) uint32_t zdr_ssr_digest_input4 (ZDR *zdrs, ssr_digest_input4 *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_SEQUENCE4res (zdrs, &objp->sdi_seqres)) return FALSE; @@ -3748,7 +4032,8 @@ zdr_ssr_digest_input4 (ZDR *zdrs, ssr_digest_input4 *objp) uint32_t zdr_SET_SSV4resok (ZDR *zdrs, SET_SSV4resok *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_bytes (zdrs, (char **)&objp->ssr_digest.ssr_digest_val, (u_int *) &objp->ssr_digest.ssr_digest_len, ~0)) return FALSE; @@ -3758,7 +4043,8 @@ zdr_SET_SSV4resok (ZDR *zdrs, SET_SSV4resok *objp) uint32_t zdr_SET_SSV4res (ZDR *zdrs, SET_SSV4res *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_nfsstat4 (zdrs, &objp->ssr_status)) return FALSE; @@ -3776,7 +4062,8 @@ zdr_SET_SSV4res (ZDR *zdrs, SET_SSV4res *objp) uint32_t zdr_TEST_STATEID4args (ZDR *zdrs, TEST_STATEID4args *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_array (zdrs, (char **)&objp->ts_stateids.ts_stateids_val, (u_int *) &objp->ts_stateids.ts_stateids_len, ~0, sizeof (stateid4), (zdrproc_t) zdr_stateid4)) @@ -3787,7 +4074,8 @@ zdr_TEST_STATEID4args (ZDR *zdrs, TEST_STATEID4args *objp) uint32_t zdr_TEST_STATEID4resok (ZDR *zdrs, TEST_STATEID4resok *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_array (zdrs, (char **)&objp->tsr_status_codes.tsr_status_codes_val, (u_int *) &objp->tsr_status_codes.tsr_status_codes_len, ~0, sizeof (nfsstat4), (zdrproc_t) zdr_nfsstat4)) @@ -3798,7 +4086,8 @@ zdr_TEST_STATEID4resok (ZDR *zdrs, TEST_STATEID4resok *objp) uint32_t zdr_TEST_STATEID4res (ZDR *zdrs, TEST_STATEID4res *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_nfsstat4 (zdrs, &objp->tsr_status)) return FALSE; @@ -3816,7 +4105,8 @@ zdr_TEST_STATEID4res (ZDR *zdrs, TEST_STATEID4res *objp) uint32_t zdr_deleg_claim4 (ZDR *zdrs, deleg_claim4 *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_open_claim_type4 (zdrs, &objp->dc_claim)) return FALSE; @@ -3838,7 +4128,8 @@ zdr_deleg_claim4 (ZDR *zdrs, deleg_claim4 *objp) uint32_t zdr_WANT_DELEGATION4args (ZDR *zdrs, WANT_DELEGATION4args *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_uint32_t (zdrs, &objp->wda_want)) return FALSE; @@ -3850,7 +4141,8 @@ zdr_WANT_DELEGATION4args (ZDR *zdrs, WANT_DELEGATION4args *objp) uint32_t zdr_WANT_DELEGATION4res (ZDR *zdrs, WANT_DELEGATION4res *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_nfsstat4 (zdrs, &objp->wdr_status)) return FALSE; @@ -3868,7 +4160,8 @@ zdr_WANT_DELEGATION4res (ZDR *zdrs, WANT_DELEGATION4res *objp) uint32_t zdr_DESTROY_CLIENTID4args (ZDR *zdrs, DESTROY_CLIENTID4args *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_clientid4 (zdrs, &objp->dca_clientid)) return FALSE; @@ -3878,7 +4171,8 @@ zdr_DESTROY_CLIENTID4args (ZDR *zdrs, DESTROY_CLIENTID4args *objp) uint32_t zdr_DESTROY_CLIENTID4res (ZDR *zdrs, DESTROY_CLIENTID4res *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_nfsstat4 (zdrs, &objp->dcr_status)) return FALSE; @@ -3888,7 +4182,8 @@ zdr_DESTROY_CLIENTID4res (ZDR *zdrs, DESTROY_CLIENTID4res *objp) uint32_t zdr_RECLAIM_COMPLETE4args (ZDR *zdrs, RECLAIM_COMPLETE4args *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_bool (zdrs, &objp->rca_one_fs)) return FALSE; @@ -3898,7 +4193,8 @@ zdr_RECLAIM_COMPLETE4args (ZDR *zdrs, RECLAIM_COMPLETE4args *objp) uint32_t zdr_RECLAIM_COMPLETE4res (ZDR *zdrs, RECLAIM_COMPLETE4res *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_nfsstat4 (zdrs, &objp->rcr_status)) return FALSE; @@ -3908,7 +4204,8 @@ zdr_RECLAIM_COMPLETE4res (ZDR *zdrs, RECLAIM_COMPLETE4res *objp) uint32_t zdr_ILLEGAL4res (ZDR *zdrs, ILLEGAL4res *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_nfsstat4 (zdrs, &objp->status)) return FALSE; @@ -3918,7 +4215,8 @@ zdr_ILLEGAL4res (ZDR *zdrs, ILLEGAL4res *objp) uint32_t zdr_nfs_opnum4 (ZDR *zdrs, nfs_opnum4 *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_enum (zdrs, (enum_t *) objp)) return FALSE; @@ -3928,7 +4226,8 @@ zdr_nfs_opnum4 (ZDR *zdrs, nfs_opnum4 *objp) uint32_t zdr_nfs_argop4 (ZDR *zdrs, nfs_argop4 *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_nfs_opnum4 (zdrs, &objp->argop)) return FALSE; @@ -4150,7 +4449,8 @@ zdr_nfs_argop4 (ZDR *zdrs, nfs_argop4 *objp) uint32_t zdr_nfs_resop4 (ZDR *zdrs, nfs_resop4 *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_nfs_opnum4 (zdrs, &objp->resop)) return FALSE; @@ -4388,7 +4688,8 @@ zdr_nfs_resop4 (ZDR *zdrs, nfs_resop4 *objp) uint32_t zdr_COMPOUND4args (ZDR *zdrs, COMPOUND4args *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_utf8str_cs (zdrs, &objp->tag)) return FALSE; @@ -4403,7 +4704,8 @@ zdr_COMPOUND4args (ZDR *zdrs, COMPOUND4args *objp) uint32_t zdr_COMPOUND4res (ZDR *zdrs, COMPOUND4res *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_nfsstat4 (zdrs, &objp->status)) return FALSE; @@ -4418,7 +4720,8 @@ zdr_COMPOUND4res (ZDR *zdrs, COMPOUND4res *objp) uint32_t zdr_CB_GETATTR4args (ZDR *zdrs, CB_GETATTR4args *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_nfs_fh4 (zdrs, &objp->fh)) return FALSE; @@ -4430,7 +4733,8 @@ zdr_CB_GETATTR4args (ZDR *zdrs, CB_GETATTR4args *objp) uint32_t zdr_CB_GETATTR4resok (ZDR *zdrs, CB_GETATTR4resok *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_fattr4 (zdrs, &objp->obj_attributes)) return FALSE; @@ -4440,7 +4744,8 @@ zdr_CB_GETATTR4resok (ZDR *zdrs, CB_GETATTR4resok *objp) uint32_t zdr_CB_GETATTR4res (ZDR *zdrs, CB_GETATTR4res *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_nfsstat4 (zdrs, &objp->status)) return FALSE; @@ -4458,7 +4763,8 @@ zdr_CB_GETATTR4res (ZDR *zdrs, CB_GETATTR4res *objp) uint32_t zdr_CB_RECALL4args (ZDR *zdrs, CB_RECALL4args *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_stateid4 (zdrs, &objp->stateid)) return FALSE; @@ -4472,7 +4778,8 @@ zdr_CB_RECALL4args (ZDR *zdrs, CB_RECALL4args *objp) uint32_t zdr_CB_RECALL4res (ZDR *zdrs, CB_RECALL4res *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_nfsstat4 (zdrs, &objp->status)) return FALSE; @@ -4482,7 +4789,8 @@ zdr_CB_RECALL4res (ZDR *zdrs, CB_RECALL4res *objp) uint32_t zdr_CB_ILLEGAL4res (ZDR *zdrs, CB_ILLEGAL4res *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_nfsstat4 (zdrs, &objp->status)) return FALSE; @@ -4492,7 +4800,8 @@ zdr_CB_ILLEGAL4res (ZDR *zdrs, CB_ILLEGAL4res *objp) uint32_t zdr_nfs_cb_opnum4 (ZDR *zdrs, nfs_cb_opnum4 *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_enum (zdrs, (enum_t *) objp)) return FALSE; @@ -4502,7 +4811,8 @@ zdr_nfs_cb_opnum4 (ZDR *zdrs, nfs_cb_opnum4 *objp) uint32_t zdr_nfs_cb_argop4 (ZDR *zdrs, nfs_cb_argop4 *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_u_int (zdrs, &objp->argop)) return FALSE; @@ -4526,7 +4836,8 @@ zdr_nfs_cb_argop4 (ZDR *zdrs, nfs_cb_argop4 *objp) uint32_t zdr_nfs_cb_resop4 (ZDR *zdrs, nfs_cb_resop4 *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_u_int (zdrs, &objp->resop)) return FALSE; @@ -4552,7 +4863,8 @@ zdr_nfs_cb_resop4 (ZDR *zdrs, nfs_cb_resop4 *objp) uint32_t zdr_CB_COMPOUND4args (ZDR *zdrs, CB_COMPOUND4args *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_utf8str_cs (zdrs, &objp->tag)) return FALSE; @@ -4569,7 +4881,8 @@ zdr_CB_COMPOUND4args (ZDR *zdrs, CB_COMPOUND4args *objp) uint32_t zdr_CB_COMPOUND4res (ZDR *zdrs, CB_COMPOUND4res *objp) { - + register int32_t *buf; + buf = NULL; if (!zdr_nfsstat4 (zdrs, &objp->status)) return FALSE; @@ -4580,6 +4893,139 @@ zdr_CB_COMPOUND4res (ZDR *zdrs, CB_COMPOUND4res *objp) return FALSE; return TRUE; } + +uint32_t +zdr_rpc_gss_proc_t (ZDR *zdrs, rpc_gss_proc_t *objp) +{ + register int32_t *buf; + buf = NULL; + + if (!zdr_enum (zdrs, (enum_t *) objp)) + return FALSE; + return TRUE; +} + +uint32_t +zdr_rpc_gss_cred_vers_1_t (ZDR *zdrs, rpc_gss_cred_vers_1_t *objp) +{ + register int32_t *buf; + buf = NULL; + + if (!zdr_rpc_gss_proc_t (zdrs, &objp->gss_proc)) + return FALSE; + if (!zdr_u_int (zdrs, &objp->seq_num)) + return FALSE; + if (!zdr_rpc_gss_svc_t (zdrs, &objp->service)) + return FALSE; + if (!zdr_bytes (zdrs, (char **)&objp->handle.handle_val, (u_int *) &objp->handle.handle_len, ~0)) + return FALSE; + return TRUE; +} + +uint32_t +zdr_rpc_gss_cred_t (ZDR *zdrs, rpc_gss_cred_t *objp) +{ + register int32_t *buf; + buf = NULL; + + if (!zdr_u_int (zdrs, &objp->vers)) + return FALSE; + switch (objp->vers) { + case RPCSEC_GSS_VERS_1: + if (!zdr_rpc_gss_cred_vers_1_t (zdrs, &objp->rpc_gss_cred_t_u.rpc_gss_cred_vers_1_t)) + return FALSE; + break; + default: + return FALSE; + } + return TRUE; +} + +uint32_t +zdr_rpc_gss_init_arg (ZDR *zdrs, rpc_gss_init_arg *objp) +{ + register int32_t *buf; + buf = NULL; + + if (!zdr_bytes (zdrs, (char **)&objp->gss_token.gss_token_val, (u_int *) &objp->gss_token.gss_token_len, ~0)) + return FALSE; + return TRUE; +} + +uint32_t +zdr_rpc_gss_init_res (ZDR *zdrs, rpc_gss_init_res *objp) +{ + register int32_t *buf; + buf = NULL; + + + if (zdrs->x_op == ZDR_ENCODE) { + if (!zdr_bytes (zdrs, (char **)&objp->handle.handle_val, (u_int *) &objp->handle.handle_len, ~0)) + return FALSE; + buf = ZDR_INLINE (zdrs, 3 * BYTES_PER_ZDR_UNIT); + if (buf == NULL) { + if (!zdr_u_int (zdrs, &objp->gss_major)) + return FALSE; + if (!zdr_u_int (zdrs, &objp->gss_minor)) + return FALSE; + if (!zdr_u_int (zdrs, &objp->seq_window)) + return FALSE; + + } else { + IZDR_PUT_U_LONG(buf, objp->gss_major); + IZDR_PUT_U_LONG(buf, objp->gss_minor); + IZDR_PUT_U_LONG(buf, objp->seq_window); + } + if (!zdr_bytes (zdrs, (char **)&objp->gss_token.gss_token_val, (u_int *) &objp->gss_token.gss_token_len, ~0)) + return FALSE; + return TRUE; + } else if (zdrs->x_op == ZDR_DECODE) { + if (!zdr_bytes (zdrs, (char **)&objp->handle.handle_val, (u_int *) &objp->handle.handle_len, ~0)) + return FALSE; + buf = ZDR_INLINE (zdrs, 3 * BYTES_PER_ZDR_UNIT); + if (buf == NULL) { + if (!zdr_u_int (zdrs, &objp->gss_major)) + return FALSE; + if (!zdr_u_int (zdrs, &objp->gss_minor)) + return FALSE; + if (!zdr_u_int (zdrs, &objp->seq_window)) + return FALSE; + + } else { + objp->gss_major = IZDR_GET_U_LONG(buf); + objp->gss_minor = IZDR_GET_U_LONG(buf); + objp->seq_window = IZDR_GET_U_LONG(buf); + } + if (!zdr_bytes (zdrs, (char **)&objp->gss_token.gss_token_val, (u_int *) &objp->gss_token.gss_token_len, ~0)) + return FALSE; + return TRUE; + } + + if (!zdr_bytes (zdrs, (char **)&objp->handle.handle_val, (u_int *) &objp->handle.handle_len, ~0)) + return FALSE; + if (!zdr_u_int (zdrs, &objp->gss_major)) + return FALSE; + if (!zdr_u_int (zdrs, &objp->gss_minor)) + return FALSE; + if (!zdr_u_int (zdrs, &objp->seq_window)) + return FALSE; + if (!zdr_bytes (zdrs, (char **)&objp->gss_token.gss_token_val, (u_int *) &objp->gss_token.gss_token_len, ~0)) + return FALSE; + return TRUE; +} + +uint32_t +zdr_rpc_gss_integ_data (ZDR *zdrs, rpc_gss_integ_data *objp) +{ + register int32_t *buf; + buf = NULL; + + if (!zdr_bytes (zdrs, (char **)&objp->databody_integ.databody_integ_val, (u_int *) &objp->databody_integ.databody_integ_len, ~0)) + return FALSE; + if (!zdr_bytes (zdrs, (char **)&objp->checksum.checksum_val, (u_int *) &objp->checksum.checksum_len, ~0)) + return FALSE; + return TRUE; +} uint32_t zdr_READ4resok (ZDR *zdrs, READ4resok *objp) { diff --git a/nfs4/libnfs-raw-nfs4.h b/nfs4/libnfs-raw-nfs4.h index cacfeaf6..ce493189 100644 --- a/nfs4/libnfs-raw-nfs4.h +++ b/nfs4/libnfs-raw-nfs4.h @@ -2285,6 +2285,69 @@ struct CB_COMPOUND4res { }; typedef struct CB_COMPOUND4res CB_COMPOUND4res; +enum rpc_gss_proc_t { + RPCSEC_GSS_DATA = 0, + RPCSEC_GSS_INIT = 1, + RPCSEC_GSS_CONTINUE_INIT = 2, + RPCSEC_GSS_DESTROY = 3, +}; +typedef enum rpc_gss_proc_t rpc_gss_proc_t; + +struct rpc_gss_cred_vers_1_t { + rpc_gss_proc_t gss_proc; + u_int seq_num; + rpc_gss_svc_t service; + struct { + u_int handle_len; + char *handle_val; + } handle; +}; +typedef struct rpc_gss_cred_vers_1_t rpc_gss_cred_vers_1_t; +#define RPCSEC_GSS_VERS_1 1 + +struct rpc_gss_cred_t { + u_int vers; + union { + rpc_gss_cred_vers_1_t rpc_gss_cred_vers_1_t; + } rpc_gss_cred_t_u; +}; +typedef struct rpc_gss_cred_t rpc_gss_cred_t; + +struct rpc_gss_init_arg { + struct { + u_int gss_token_len; + char *gss_token_val; + } gss_token; +}; +typedef struct rpc_gss_init_arg rpc_gss_init_arg; + +struct rpc_gss_init_res { + struct { + u_int handle_len; + char *handle_val; + } handle; + u_int gss_major; + u_int gss_minor; + u_int seq_window; + struct { + u_int gss_token_len; + char *gss_token_val; + } gss_token; +}; +typedef struct rpc_gss_init_res rpc_gss_init_res; + +struct rpc_gss_integ_data { + struct { + u_int databody_integ_len; + char *databody_integ_val; + } databody_integ; + struct { + u_int checksum_len; + char *checksum_val; + } checksum; +}; +typedef struct rpc_gss_integ_data rpc_gss_integ_data; + #define NFS4_PROGRAM 100003 #define NFS_V4 4 @@ -2645,6 +2708,12 @@ extern uint32_t zdr_nfs_cb_argop4 (ZDR *, nfs_cb_argop4*); extern uint32_t zdr_nfs_cb_resop4 (ZDR *, nfs_cb_resop4*); extern uint32_t zdr_CB_COMPOUND4args (ZDR *, CB_COMPOUND4args*); extern uint32_t zdr_CB_COMPOUND4res (ZDR *, CB_COMPOUND4res*); +extern uint32_t zdr_rpc_gss_proc_t (ZDR *, rpc_gss_proc_t*); +extern uint32_t zdr_rpc_gss_cred_vers_1_t (ZDR *, rpc_gss_cred_vers_1_t*); +extern uint32_t zdr_rpc_gss_cred_t (ZDR *, rpc_gss_cred_t*); +extern uint32_t zdr_rpc_gss_init_arg (ZDR *, rpc_gss_init_arg*); +extern uint32_t zdr_rpc_gss_init_res (ZDR *, rpc_gss_init_res*); +extern uint32_t zdr_rpc_gss_integ_data (ZDR *, rpc_gss_integ_data*); #else /* K&R C */ extern uint32_t zdr_nfs_ftype4 (); @@ -2960,6 +3029,12 @@ extern uint32_t zdr_nfs_cb_argop4 (); extern uint32_t zdr_nfs_cb_resop4 (); extern uint32_t zdr_CB_COMPOUND4args (); extern uint32_t zdr_CB_COMPOUND4res (); +extern uint32_t zdr_rpc_gss_proc_t (); +extern uint32_t zdr_rpc_gss_cred_vers_1_t (); +extern uint32_t zdr_rpc_gss_cred_t (); +extern uint32_t zdr_rpc_gss_init_arg (); +extern uint32_t zdr_rpc_gss_init_res (); +extern uint32_t zdr_rpc_gss_integ_data (); #endif /* K&R C */ diff --git a/nfs4/nfs4.x b/nfs4/nfs4.x index b4cd02fe..8d941ad2 100644 --- a/nfs4/nfs4.x +++ b/nfs4/nfs4.x @@ -2370,3 +2370,45 @@ program NFS4_CALLBACK { CB_COMPOUND(CB_COMPOUND4args) = 1; } = 1; } = 0x40000000; + +/* + * GSS definitions + */ +/* RPCSEC_GSS control procedures */ +enum rpc_gss_proc_t { + RPCSEC_GSS_DATA = 0, + RPCSEC_GSS_INIT = 1, + RPCSEC_GSS_CONTINUE_INIT = 2, + RPCSEC_GSS_DESTROY = 3 +}; + +struct rpc_gss_cred_vers_1_t { + rpc_gss_proc_t gss_proc; /* control procedure */ + unsigned int seq_num; /* sequence number */ + rpc_gss_svc_t service; /* service used */ + opaque handle<>; /* context handle */ +}; + +const RPCSEC_GSS_VERS_1 = 1; + +union rpc_gss_cred_t switch (unsigned int vers) { /* version of RPCSEC_GSS */ + case RPCSEC_GSS_VERS_1: + rpc_gss_cred_vers_1_t rpc_gss_cred_vers_1_t; +}; + +struct rpc_gss_init_arg { + opaque gss_token<>; +}; + +struct rpc_gss_init_res { + opaque handle<>; + unsigned int gss_major; + unsigned int gss_minor; + unsigned int seq_window; + opaque gss_token<>; +}; + +struct rpc_gss_integ_data { + opaque databody_integ<>; + opaque checksum<>; +};