Fixed NFS so it supports 2.4.x kernels and NFSv3. Should close bug #1009.

-Erik
This commit is contained in:
Eric Andersen 2000-07-10 23:39:44 +00:00
parent cc54d12ef7
commit da1d1e763d
8 changed files with 1242 additions and 1801 deletions

View File

@ -41,6 +41,7 @@
couldn't maintain it very well, so including it was not really couldn't maintain it very well, so including it was not really
very appropriate. Those wanting an fdisk are invited to very appropriate. Those wanting an fdisk are invited to
grab a copy from util-linux. grab a copy from util-linux.
* Fixed NFS so it supports 2.4.x kernels and NFSv3.
-Erik Andersen -Erik Andersen

View File

@ -195,14 +195,14 @@
// Enable support for a real /etc/mtab file instead of /proc/mounts // Enable support for a real /etc/mtab file instead of /proc/mounts
//#define BB_FEATURE_MOUNT_MTAB_SUPPORT //#define BB_FEATURE_MOUNT_MTAB_SUPPORT
// //
// Enable support for mounting remote NFS volumes
// (This does not yet work with Linux 2.[34].x kernels)
#define BB_FEATURE_NFSMOUNT
//
// Enable support forced filesystem unmounting // Enable support forced filesystem unmounting
// (i.e. in case of an unreachable NFS system). // (i.e. in case of an unreachable NFS system).
#define BB_FEATURE_MOUNT_FORCE #define BB_FEATURE_MOUNT_FORCE
// //
// Enable support for mounting remote NFS volumes
// (This does not yet work with Linux 2.[34].x kernels)
//#define BB_FEATURE_NFSMOUNT
//
// Enable support for creation of tar files. // Enable support for creation of tar files.
#define BB_FEATURE_TAR_CREATE #define BB_FEATURE_TAR_CREATE
// //

View File

@ -255,12 +255,16 @@ extern char *mtab_getinfo(const char *match, const char which);
extern int check_wildcard_match(const char* text, const char* pattern); extern int check_wildcard_match(const char* text, const char* pattern);
extern long getNum (const char *cp); extern long getNum (const char *cp);
extern pid_t* findPidByName( char* pidName); extern pid_t* findPidByName( char* pidName);
extern void *xmalloc (size_t size);
extern int find_real_root_device_name(char* name); extern int find_real_root_device_name(char* name);
extern char *get_line_from_file(FILE *file); extern char *get_line_from_file(FILE *file);
extern char process_escape_sequence(char **ptr); extern char process_escape_sequence(char **ptr);
extern char *get_last_path_component(char *path); extern char *get_last_path_component(char *path);
extern void *xmalloc (size_t size);
extern char *xstrdup (const char *s);
extern char *xstrndup (const char *s, int n);
/* These parse entries in /etc/passwd and /etc/group. This is desirable /* These parse entries in /etc/passwd and /etc/group. This is desirable
* for BusyBox since we want to avoid using the glibc NSS stuff, which * for BusyBox since we want to avoid using the glibc NSS stuff, which
* increases target size and is often not needed embedded systems. */ * increases target size and is often not needed embedded systems. */

1189
nfsmount.c

File diff suppressed because it is too large Load Diff

View File

@ -9,6 +9,11 @@
#include <rpc/rpc.h> #include <rpc/rpc.h>
#ifdef __cplusplus
extern "C" {
#endif
/* /*
* Sun RPC is a product of Sun Microsystems, Inc. and is provided for * Sun RPC is a product of Sun Microsystems, Inc. and is provided for
* unrestricted use provided that this legend is included on all tape * unrestricted use provided that this legend is included on all tape
@ -45,19 +50,33 @@
/* from @(#)mount.x 1.3 91/03/11 TIRPC 1.0 */ /* from @(#)mount.x 1.3 91/03/11 TIRPC 1.0 */
#ifndef _rpcsvc_mount_h #ifndef _rpcsvc_mount_h
#define _rpcsvc_mount_h #define _rpcsvc_mount_h
#include <asm/types.h>
#define MOUNTPORT 635
#define MNTPATHLEN 1024 #define MNTPATHLEN 1024
#define MNTNAMLEN 255 #define MNTNAMLEN 255
#define FHSIZE 32 #define FHSIZE 32
#define FHSIZE3 64
typedef char fhandle[FHSIZE]; typedef char fhandle[FHSIZE];
#ifdef __cplusplus
extern "C" bool_t xdr_fhandle(XDR *, fhandle);
#elif __STDC__
extern bool_t xdr_fhandle(XDR *, fhandle);
#else /* Old Style C */
bool_t xdr_fhandle();
#endif /* Old Style C */
typedef struct {
u_int fhandle3_len;
char *fhandle3_val;
} fhandle3;
enum mountstat3 {
MNT_OK = 0,
MNT3ERR_PERM = 1,
MNT3ERR_NOENT = 2,
MNT3ERR_IO = 5,
MNT3ERR_ACCES = 13,
MNT3ERR_NOTDIR = 20,
MNT3ERR_INVAL = 22,
MNT3ERR_NAMETOOLONG = 63,
MNT3ERR_NOTSUPP = 10004,
MNT3ERR_SERVERFAULT = 10006,
};
typedef enum mountstat3 mountstat3;
struct fhstatus { struct fhstatus {
u_int fhs_status; u_int fhs_status;
@ -66,44 +85,29 @@ struct fhstatus {
} fhstatus_u; } fhstatus_u;
}; };
typedef struct fhstatus fhstatus; typedef struct fhstatus fhstatus;
#ifdef __cplusplus
extern "C" bool_t xdr_fhstatus(XDR *, fhstatus*);
#elif __STDC__
extern bool_t xdr_fhstatus(XDR *, fhstatus*);
#else /* Old Style C */
bool_t xdr_fhstatus();
#endif /* Old Style C */
struct mountres3_ok {
fhandle3 fhandle;
struct {
u_int auth_flavours_len;
int *auth_flavours_val;
} auth_flavours;
};
typedef struct mountres3_ok mountres3_ok;
struct mountres3 {
mountstat3 fhs_status;
union {
mountres3_ok mountinfo;
} mountres3_u;
};
typedef struct mountres3 mountres3;
typedef char *dirpath; typedef char *dirpath;
#ifdef __cplusplus
extern "C" bool_t xdr_dirpath(XDR *, dirpath*);
#elif __STDC__
extern bool_t xdr_dirpath(XDR *, dirpath*);
#else /* Old Style C */
bool_t xdr_dirpath();
#endif /* Old Style C */
typedef char *name; typedef char *name;
#ifdef __cplusplus
extern "C" bool_t xdr_name(XDR *, name*);
#elif __STDC__
extern bool_t xdr_name(XDR *, name*);
#else /* Old Style C */
bool_t xdr_name();
#endif /* Old Style C */
typedef struct mountbody *mountlist; typedef struct mountbody *mountlist;
#ifdef __cplusplus
extern "C" bool_t xdr_mountlist(XDR *, mountlist*);
#elif __STDC__
extern bool_t xdr_mountlist(XDR *, mountlist*);
#else /* Old Style C */
bool_t xdr_mountlist();
#endif /* Old Style C */
struct mountbody { struct mountbody {
name ml_hostname; name ml_hostname;
@ -111,48 +115,16 @@ struct mountbody {
mountlist ml_next; mountlist ml_next;
}; };
typedef struct mountbody mountbody; typedef struct mountbody mountbody;
#ifdef __cplusplus
extern "C" bool_t xdr_mountbody(XDR *, mountbody*);
#elif __STDC__
extern bool_t xdr_mountbody(XDR *, mountbody*);
#else /* Old Style C */
bool_t xdr_mountbody();
#endif /* Old Style C */
typedef struct groupnode *groups; typedef struct groupnode *groups;
#ifdef __cplusplus
extern "C" bool_t xdr_groups(XDR *, groups*);
#elif __STDC__
extern bool_t xdr_groups(XDR *, groups*);
#else /* Old Style C */
bool_t xdr_groups();
#endif /* Old Style C */
struct groupnode { struct groupnode {
name gr_name; name gr_name;
groups gr_next; groups gr_next;
}; };
typedef struct groupnode groupnode; typedef struct groupnode groupnode;
#ifdef __cplusplus
extern "C" bool_t xdr_groupnode(XDR *, groupnode*);
#elif __STDC__
extern bool_t xdr_groupnode(XDR *, groupnode*);
#else /* Old Style C */
bool_t xdr_groupnode();
#endif /* Old Style C */
typedef struct exportnode *exports; typedef struct exportnode *exports;
#ifdef __cplusplus
extern "C" bool_t xdr_exports(XDR *, exports*);
#elif __STDC__
extern bool_t xdr_exports(XDR *, exports*);
#else /* Old Style C */
bool_t xdr_exports();
#endif /* Old Style C */
struct exportnode { struct exportnode {
dirpath ex_dir; dirpath ex_dir;
@ -160,14 +132,6 @@ struct exportnode {
exports ex_next; exports ex_next;
}; };
typedef struct exportnode exportnode; typedef struct exportnode exportnode;
#ifdef __cplusplus
extern "C" bool_t xdr_exportnode(XDR *, exportnode*);
#elif __STDC__
extern bool_t xdr_exportnode(XDR *, exportnode*);
#else /* Old Style C */
bool_t xdr_exportnode();
#endif /* Old Style C */
struct ppathcnf { struct ppathcnf {
int pc_link_max; int pc_link_max;
@ -181,110 +145,62 @@ struct ppathcnf {
short pc_mask[2]; short pc_mask[2];
}; };
typedef struct ppathcnf ppathcnf; typedef struct ppathcnf ppathcnf;
#ifdef __cplusplus
extern "C" bool_t xdr_ppathcnf(XDR *, ppathcnf*);
#elif __STDC__
extern bool_t xdr_ppathcnf(XDR *, ppathcnf*);
#else /* Old Style C */
bool_t xdr_ppathcnf();
#endif /* Old Style C */
#endif /*!_rpcsvc_mount_h*/ #endif /*!_rpcsvc_mount_h*/
#define MOUNTPROG ((u_long)100005) #define MOUNTPROG 100005
#define MOUNTVERS ((u_long)1) #define MOUNTVERS 1
#ifdef __cplusplus #if defined(__STDC__) || defined(__cplusplus)
#define MOUNTPROC_NULL ((u_long)0) #define MOUNTPROC_NULL 0
extern "C" void * mountproc_null_1(void *, CLIENT *);
extern "C" void * mountproc_null_1_svc(void *, struct svc_req *);
#define MOUNTPROC_MNT ((u_long)1)
extern "C" fhstatus * mountproc_mnt_1(dirpath *, CLIENT *);
extern "C" fhstatus * mountproc_mnt_1_svc(dirpath *, struct svc_req *);
#define MOUNTPROC_DUMP ((u_long)2)
extern "C" mountlist * mountproc_dump_1(void *, CLIENT *);
extern "C" mountlist * mountproc_dump_1_svc(void *, struct svc_req *);
#define MOUNTPROC_UMNT ((u_long)3)
extern "C" void * mountproc_umnt_1(dirpath *, CLIENT *);
extern "C" void * mountproc_umnt_1_svc(dirpath *, struct svc_req *);
#define MOUNTPROC_UMNTALL ((u_long)4)
extern "C" void * mountproc_umntall_1(void *, CLIENT *);
extern "C" void * mountproc_umntall_1_svc(void *, struct svc_req *);
#define MOUNTPROC_EXPORT ((u_long)5)
extern "C" exports * mountproc_export_1(void *, CLIENT *);
extern "C" exports * mountproc_export_1_svc(void *, struct svc_req *);
#define MOUNTPROC_EXPORTALL ((u_long)6)
extern "C" exports * mountproc_exportall_1(void *, CLIENT *);
extern "C" exports * mountproc_exportall_1_svc(void *, struct svc_req *);
#elif __STDC__
#define MOUNTPROC_NULL ((u_long)0)
extern void * mountproc_null_1(void *, CLIENT *); extern void * mountproc_null_1(void *, CLIENT *);
extern void * mountproc_null_1_svc(void *, struct svc_req *); extern void * mountproc_null_1_svc(void *, struct svc_req *);
#define MOUNTPROC_MNT ((u_long)1) #define MOUNTPROC_MNT 1
extern fhstatus * mountproc_mnt_1(dirpath *, CLIENT *); extern fhstatus * mountproc_mnt_1(dirpath *, CLIENT *);
extern fhstatus * mountproc_mnt_1_svc(dirpath *, struct svc_req *); extern fhstatus * mountproc_mnt_1_svc(dirpath *, struct svc_req *);
#define MOUNTPROC_DUMP ((u_long)2) #define MOUNTPROC_DUMP 2
extern mountlist * mountproc_dump_1(void *, CLIENT *); extern mountlist * mountproc_dump_1(void *, CLIENT *);
extern mountlist * mountproc_dump_1_svc(void *, struct svc_req *); extern mountlist * mountproc_dump_1_svc(void *, struct svc_req *);
#define MOUNTPROC_UMNT ((u_long)3) #define MOUNTPROC_UMNT 3
extern void * mountproc_umnt_1(dirpath *, CLIENT *); extern void * mountproc_umnt_1(dirpath *, CLIENT *);
extern void * mountproc_umnt_1_svc(dirpath *, struct svc_req *); extern void * mountproc_umnt_1_svc(dirpath *, struct svc_req *);
#define MOUNTPROC_UMNTALL ((u_long)4) #define MOUNTPROC_UMNTALL 4
extern void * mountproc_umntall_1(void *, CLIENT *); extern void * mountproc_umntall_1(void *, CLIENT *);
extern void * mountproc_umntall_1_svc(void *, struct svc_req *); extern void * mountproc_umntall_1_svc(void *, struct svc_req *);
#define MOUNTPROC_EXPORT ((u_long)5) #define MOUNTPROC_EXPORT 5
extern exports * mountproc_export_1(void *, CLIENT *); extern exports * mountproc_export_1(void *, CLIENT *);
extern exports * mountproc_export_1_svc(void *, struct svc_req *); extern exports * mountproc_export_1_svc(void *, struct svc_req *);
#define MOUNTPROC_EXPORTALL ((u_long)6) #define MOUNTPROC_EXPORTALL 6
extern exports * mountproc_exportall_1(void *, CLIENT *); extern exports * mountproc_exportall_1(void *, CLIENT *);
extern exports * mountproc_exportall_1_svc(void *, struct svc_req *); extern exports * mountproc_exportall_1_svc(void *, struct svc_req *);
extern int mountprog_1_freeresult (SVCXPRT *, xdrproc_t, caddr_t);
#else /* Old Style C */ #else /* K&R C */
#define MOUNTPROC_NULL ((u_long)0) #define MOUNTPROC_NULL 0
extern void * mountproc_null_1(); extern void * mountproc_null_1();
extern void * mountproc_null_1_svc(); extern void * mountproc_null_1_svc();
#define MOUNTPROC_MNT ((u_long)1) #define MOUNTPROC_MNT 1
extern fhstatus * mountproc_mnt_1(); extern fhstatus * mountproc_mnt_1();
extern fhstatus * mountproc_mnt_1_svc(); extern fhstatus * mountproc_mnt_1_svc();
#define MOUNTPROC_DUMP ((u_long)2) #define MOUNTPROC_DUMP 2
extern mountlist * mountproc_dump_1(); extern mountlist * mountproc_dump_1();
extern mountlist * mountproc_dump_1_svc(); extern mountlist * mountproc_dump_1_svc();
#define MOUNTPROC_UMNT ((u_long)3) #define MOUNTPROC_UMNT 3
extern void * mountproc_umnt_1(); extern void * mountproc_umnt_1();
extern void * mountproc_umnt_1_svc(); extern void * mountproc_umnt_1_svc();
#define MOUNTPROC_UMNTALL ((u_long)4) #define MOUNTPROC_UMNTALL 4
extern void * mountproc_umntall_1(); extern void * mountproc_umntall_1();
extern void * mountproc_umntall_1_svc(); extern void * mountproc_umntall_1_svc();
#define MOUNTPROC_EXPORT ((u_long)5) #define MOUNTPROC_EXPORT 5
extern exports * mountproc_export_1(); extern exports * mountproc_export_1();
extern exports * mountproc_export_1_svc(); extern exports * mountproc_export_1_svc();
#define MOUNTPROC_EXPORTALL ((u_long)6) #define MOUNTPROC_EXPORTALL 6
extern exports * mountproc_exportall_1(); extern exports * mountproc_exportall_1();
extern exports * mountproc_exportall_1_svc(); extern exports * mountproc_exportall_1_svc();
#endif /* Old Style C */ extern int mountprog_1_freeresult ();
#define MOUNTVERS_POSIX ((u_long)2) #endif /* K&R C */
#define MOUNTVERS_POSIX 2
#ifdef __cplusplus #if defined(__STDC__) || defined(__cplusplus)
extern "C" void * mountproc_null_2(void *, CLIENT *);
extern "C" void * mountproc_null_2_svc(void *, struct svc_req *);
extern "C" fhstatus * mountproc_mnt_2(dirpath *, CLIENT *);
extern "C" fhstatus * mountproc_mnt_2_svc(dirpath *, struct svc_req *);
extern "C" mountlist * mountproc_dump_2(void *, CLIENT *);
extern "C" mountlist * mountproc_dump_2_svc(void *, struct svc_req *);
extern "C" void * mountproc_umnt_2(dirpath *, CLIENT *);
extern "C" void * mountproc_umnt_2_svc(dirpath *, struct svc_req *);
extern "C" void * mountproc_umntall_2(void *, CLIENT *);
extern "C" void * mountproc_umntall_2_svc(void *, struct svc_req *);
extern "C" exports * mountproc_export_2(void *, CLIENT *);
extern "C" exports * mountproc_export_2_svc(void *, struct svc_req *);
extern "C" exports * mountproc_exportall_2(void *, CLIENT *);
extern "C" exports * mountproc_exportall_2_svc(void *, struct svc_req *);
#define MOUNTPROC_PATHCONF ((u_long)7)
extern "C" ppathcnf * mountproc_pathconf_2(dirpath *, CLIENT *);
extern "C" ppathcnf * mountproc_pathconf_2_svc(dirpath *, struct svc_req *);
#elif __STDC__
extern void * mountproc_null_2(void *, CLIENT *); extern void * mountproc_null_2(void *, CLIENT *);
extern void * mountproc_null_2_svc(void *, struct svc_req *); extern void * mountproc_null_2_svc(void *, struct svc_req *);
extern fhstatus * mountproc_mnt_2(dirpath *, CLIENT *); extern fhstatus * mountproc_mnt_2(dirpath *, CLIENT *);
@ -299,11 +215,12 @@ extern exports * mountproc_export_2(void *, CLIENT *);
extern exports * mountproc_export_2_svc(void *, struct svc_req *); extern exports * mountproc_export_2_svc(void *, struct svc_req *);
extern exports * mountproc_exportall_2(void *, CLIENT *); extern exports * mountproc_exportall_2(void *, CLIENT *);
extern exports * mountproc_exportall_2_svc(void *, struct svc_req *); extern exports * mountproc_exportall_2_svc(void *, struct svc_req *);
#define MOUNTPROC_PATHCONF ((u_long)7) #define MOUNTPROC_PATHCONF 7
extern ppathcnf * mountproc_pathconf_2(dirpath *, CLIENT *); extern ppathcnf * mountproc_pathconf_2(dirpath *, CLIENT *);
extern ppathcnf * mountproc_pathconf_2_svc(dirpath *, struct svc_req *); extern ppathcnf * mountproc_pathconf_2_svc(dirpath *, struct svc_req *);
extern int mountprog_2_freeresult (SVCXPRT *, xdrproc_t, caddr_t);
#else /* Old Style C */ #else /* K&R C */
extern void * mountproc_null_2(); extern void * mountproc_null_2();
extern void * mountproc_null_2_svc(); extern void * mountproc_null_2_svc();
extern fhstatus * mountproc_mnt_2(); extern fhstatus * mountproc_mnt_2();
@ -318,9 +235,96 @@ extern exports * mountproc_export_2();
extern exports * mountproc_export_2_svc(); extern exports * mountproc_export_2_svc();
extern exports * mountproc_exportall_2(); extern exports * mountproc_exportall_2();
extern exports * mountproc_exportall_2_svc(); extern exports * mountproc_exportall_2_svc();
#define MOUNTPROC_PATHCONF ((u_long)7) #define MOUNTPROC_PATHCONF 7
extern ppathcnf * mountproc_pathconf_2(); extern ppathcnf * mountproc_pathconf_2();
extern ppathcnf * mountproc_pathconf_2_svc(); extern ppathcnf * mountproc_pathconf_2_svc();
#endif /* Old Style C */ extern int mountprog_2_freeresult ();
#endif /* K&R C */
#define MOUNT_V3 3
#if defined(__STDC__) || defined(__cplusplus)
#define MOUNTPROC3_NULL 0
extern void * mountproc3_null_3(void *, CLIENT *);
extern void * mountproc3_null_3_svc(void *, struct svc_req *);
#define MOUNTPROC3_MNT 1
extern mountres3 * mountproc3_mnt_3(dirpath *, CLIENT *);
extern mountres3 * mountproc3_mnt_3_svc(dirpath *, struct svc_req *);
#define MOUNTPROC3_DUMP 2
extern mountlist * mountproc3_dump_3(void *, CLIENT *);
extern mountlist * mountproc3_dump_3_svc(void *, struct svc_req *);
#define MOUNTPROC3_UMNT 3
extern void * mountproc3_umnt_3(dirpath *, CLIENT *);
extern void * mountproc3_umnt_3_svc(dirpath *, struct svc_req *);
#define MOUNTPROC3_UMNTALL 4
extern void * mountproc3_umntall_3(void *, CLIENT *);
extern void * mountproc3_umntall_3_svc(void *, struct svc_req *);
#define MOUNTPROC3_EXPORT 5
extern exports * mountproc3_export_3(void *, CLIENT *);
extern exports * mountproc3_export_3_svc(void *, struct svc_req *);
extern int mountprog_3_freeresult (SVCXPRT *, xdrproc_t, caddr_t);
#else /* K&R C */
#define MOUNTPROC3_NULL 0
extern void * mountproc3_null_3();
extern void * mountproc3_null_3_svc();
#define MOUNTPROC3_MNT 1
extern mountres3 * mountproc3_mnt_3();
extern mountres3 * mountproc3_mnt_3_svc();
#define MOUNTPROC3_DUMP 2
extern mountlist * mountproc3_dump_3();
extern mountlist * mountproc3_dump_3_svc();
#define MOUNTPROC3_UMNT 3
extern void * mountproc3_umnt_3();
extern void * mountproc3_umnt_3_svc();
#define MOUNTPROC3_UMNTALL 4
extern void * mountproc3_umntall_3();
extern void * mountproc3_umntall_3_svc();
#define MOUNTPROC3_EXPORT 5
extern exports * mountproc3_export_3();
extern exports * mountproc3_export_3_svc();
extern int mountprog_3_freeresult ();
#endif /* K&R C */
/* the xdr functions */
#if defined(__STDC__) || defined(__cplusplus)
extern bool_t xdr_fhandle (XDR *, fhandle);
extern bool_t xdr_fhandle3 (XDR *, fhandle3*);
extern bool_t xdr_mountstat3 (XDR *, mountstat3*);
extern bool_t xdr_fhstatus (XDR *, fhstatus*);
extern bool_t xdr_mountres3_ok (XDR *, mountres3_ok*);
extern bool_t xdr_mountres3 (XDR *, mountres3*);
extern bool_t xdr_dirpath (XDR *, dirpath*);
extern bool_t xdr_name (XDR *, name*);
extern bool_t xdr_mountlist (XDR *, mountlist*);
extern bool_t xdr_mountbody (XDR *, mountbody*);
extern bool_t xdr_groups (XDR *, groups*);
extern bool_t xdr_groupnode (XDR *, groupnode*);
extern bool_t xdr_exports (XDR *, exports*);
extern bool_t xdr_exportnode (XDR *, exportnode*);
extern bool_t xdr_ppathcnf (XDR *, ppathcnf*);
#else /* K&R C */
extern bool_t xdr_fhandle ();
extern bool_t xdr_fhandle3 ();
extern bool_t xdr_mountstat3 ();
extern bool_t xdr_fhstatus ();
extern bool_t xdr_mountres3_ok ();
extern bool_t xdr_mountres3 ();
extern bool_t xdr_dirpath ();
extern bool_t xdr_name ();
extern bool_t xdr_mountlist ();
extern bool_t xdr_mountbody ();
extern bool_t xdr_groups ();
extern bool_t xdr_groupnode ();
extern bool_t xdr_exports ();
extern bool_t xdr_exportnode ();
extern bool_t xdr_ppathcnf ();
#endif /* K&R C */
#ifdef __cplusplus
}
#endif
#endif /* !_NFSMOUNT_H_RPCGEN */ #endif /* !_NFSMOUNT_H_RPCGEN */

File diff suppressed because it is too large Load Diff

View File

@ -9,6 +9,11 @@
#include <rpc/rpc.h> #include <rpc/rpc.h>
#ifdef __cplusplus
extern "C" {
#endif
/* /*
* Sun RPC is a product of Sun Microsystems, Inc. and is provided for * Sun RPC is a product of Sun Microsystems, Inc. and is provided for
* unrestricted use provided that this legend is included on all tape * unrestricted use provided that this legend is included on all tape
@ -45,19 +50,33 @@
/* from @(#)mount.x 1.3 91/03/11 TIRPC 1.0 */ /* from @(#)mount.x 1.3 91/03/11 TIRPC 1.0 */
#ifndef _rpcsvc_mount_h #ifndef _rpcsvc_mount_h
#define _rpcsvc_mount_h #define _rpcsvc_mount_h
#include <asm/types.h>
#define MOUNTPORT 635
#define MNTPATHLEN 1024 #define MNTPATHLEN 1024
#define MNTNAMLEN 255 #define MNTNAMLEN 255
#define FHSIZE 32 #define FHSIZE 32
#define FHSIZE3 64
typedef char fhandle[FHSIZE]; typedef char fhandle[FHSIZE];
#ifdef __cplusplus
extern "C" bool_t xdr_fhandle(XDR *, fhandle);
#elif __STDC__
extern bool_t xdr_fhandle(XDR *, fhandle);
#else /* Old Style C */
bool_t xdr_fhandle();
#endif /* Old Style C */
typedef struct {
u_int fhandle3_len;
char *fhandle3_val;
} fhandle3;
enum mountstat3 {
MNT_OK = 0,
MNT3ERR_PERM = 1,
MNT3ERR_NOENT = 2,
MNT3ERR_IO = 5,
MNT3ERR_ACCES = 13,
MNT3ERR_NOTDIR = 20,
MNT3ERR_INVAL = 22,
MNT3ERR_NAMETOOLONG = 63,
MNT3ERR_NOTSUPP = 10004,
MNT3ERR_SERVERFAULT = 10006,
};
typedef enum mountstat3 mountstat3;
struct fhstatus { struct fhstatus {
u_int fhs_status; u_int fhs_status;
@ -66,44 +85,29 @@ struct fhstatus {
} fhstatus_u; } fhstatus_u;
}; };
typedef struct fhstatus fhstatus; typedef struct fhstatus fhstatus;
#ifdef __cplusplus
extern "C" bool_t xdr_fhstatus(XDR *, fhstatus*);
#elif __STDC__
extern bool_t xdr_fhstatus(XDR *, fhstatus*);
#else /* Old Style C */
bool_t xdr_fhstatus();
#endif /* Old Style C */
struct mountres3_ok {
fhandle3 fhandle;
struct {
u_int auth_flavours_len;
int *auth_flavours_val;
} auth_flavours;
};
typedef struct mountres3_ok mountres3_ok;
struct mountres3 {
mountstat3 fhs_status;
union {
mountres3_ok mountinfo;
} mountres3_u;
};
typedef struct mountres3 mountres3;
typedef char *dirpath; typedef char *dirpath;
#ifdef __cplusplus
extern "C" bool_t xdr_dirpath(XDR *, dirpath*);
#elif __STDC__
extern bool_t xdr_dirpath(XDR *, dirpath*);
#else /* Old Style C */
bool_t xdr_dirpath();
#endif /* Old Style C */
typedef char *name; typedef char *name;
#ifdef __cplusplus
extern "C" bool_t xdr_name(XDR *, name*);
#elif __STDC__
extern bool_t xdr_name(XDR *, name*);
#else /* Old Style C */
bool_t xdr_name();
#endif /* Old Style C */
typedef struct mountbody *mountlist; typedef struct mountbody *mountlist;
#ifdef __cplusplus
extern "C" bool_t xdr_mountlist(XDR *, mountlist*);
#elif __STDC__
extern bool_t xdr_mountlist(XDR *, mountlist*);
#else /* Old Style C */
bool_t xdr_mountlist();
#endif /* Old Style C */
struct mountbody { struct mountbody {
name ml_hostname; name ml_hostname;
@ -111,48 +115,16 @@ struct mountbody {
mountlist ml_next; mountlist ml_next;
}; };
typedef struct mountbody mountbody; typedef struct mountbody mountbody;
#ifdef __cplusplus
extern "C" bool_t xdr_mountbody(XDR *, mountbody*);
#elif __STDC__
extern bool_t xdr_mountbody(XDR *, mountbody*);
#else /* Old Style C */
bool_t xdr_mountbody();
#endif /* Old Style C */
typedef struct groupnode *groups; typedef struct groupnode *groups;
#ifdef __cplusplus
extern "C" bool_t xdr_groups(XDR *, groups*);
#elif __STDC__
extern bool_t xdr_groups(XDR *, groups*);
#else /* Old Style C */
bool_t xdr_groups();
#endif /* Old Style C */
struct groupnode { struct groupnode {
name gr_name; name gr_name;
groups gr_next; groups gr_next;
}; };
typedef struct groupnode groupnode; typedef struct groupnode groupnode;
#ifdef __cplusplus
extern "C" bool_t xdr_groupnode(XDR *, groupnode*);
#elif __STDC__
extern bool_t xdr_groupnode(XDR *, groupnode*);
#else /* Old Style C */
bool_t xdr_groupnode();
#endif /* Old Style C */
typedef struct exportnode *exports; typedef struct exportnode *exports;
#ifdef __cplusplus
extern "C" bool_t xdr_exports(XDR *, exports*);
#elif __STDC__
extern bool_t xdr_exports(XDR *, exports*);
#else /* Old Style C */
bool_t xdr_exports();
#endif /* Old Style C */
struct exportnode { struct exportnode {
dirpath ex_dir; dirpath ex_dir;
@ -160,14 +132,6 @@ struct exportnode {
exports ex_next; exports ex_next;
}; };
typedef struct exportnode exportnode; typedef struct exportnode exportnode;
#ifdef __cplusplus
extern "C" bool_t xdr_exportnode(XDR *, exportnode*);
#elif __STDC__
extern bool_t xdr_exportnode(XDR *, exportnode*);
#else /* Old Style C */
bool_t xdr_exportnode();
#endif /* Old Style C */
struct ppathcnf { struct ppathcnf {
int pc_link_max; int pc_link_max;
@ -181,110 +145,62 @@ struct ppathcnf {
short pc_mask[2]; short pc_mask[2];
}; };
typedef struct ppathcnf ppathcnf; typedef struct ppathcnf ppathcnf;
#ifdef __cplusplus
extern "C" bool_t xdr_ppathcnf(XDR *, ppathcnf*);
#elif __STDC__
extern bool_t xdr_ppathcnf(XDR *, ppathcnf*);
#else /* Old Style C */
bool_t xdr_ppathcnf();
#endif /* Old Style C */
#endif /*!_rpcsvc_mount_h*/ #endif /*!_rpcsvc_mount_h*/
#define MOUNTPROG ((u_long)100005) #define MOUNTPROG 100005
#define MOUNTVERS ((u_long)1) #define MOUNTVERS 1
#ifdef __cplusplus #if defined(__STDC__) || defined(__cplusplus)
#define MOUNTPROC_NULL ((u_long)0) #define MOUNTPROC_NULL 0
extern "C" void * mountproc_null_1(void *, CLIENT *);
extern "C" void * mountproc_null_1_svc(void *, struct svc_req *);
#define MOUNTPROC_MNT ((u_long)1)
extern "C" fhstatus * mountproc_mnt_1(dirpath *, CLIENT *);
extern "C" fhstatus * mountproc_mnt_1_svc(dirpath *, struct svc_req *);
#define MOUNTPROC_DUMP ((u_long)2)
extern "C" mountlist * mountproc_dump_1(void *, CLIENT *);
extern "C" mountlist * mountproc_dump_1_svc(void *, struct svc_req *);
#define MOUNTPROC_UMNT ((u_long)3)
extern "C" void * mountproc_umnt_1(dirpath *, CLIENT *);
extern "C" void * mountproc_umnt_1_svc(dirpath *, struct svc_req *);
#define MOUNTPROC_UMNTALL ((u_long)4)
extern "C" void * mountproc_umntall_1(void *, CLIENT *);
extern "C" void * mountproc_umntall_1_svc(void *, struct svc_req *);
#define MOUNTPROC_EXPORT ((u_long)5)
extern "C" exports * mountproc_export_1(void *, CLIENT *);
extern "C" exports * mountproc_export_1_svc(void *, struct svc_req *);
#define MOUNTPROC_EXPORTALL ((u_long)6)
extern "C" exports * mountproc_exportall_1(void *, CLIENT *);
extern "C" exports * mountproc_exportall_1_svc(void *, struct svc_req *);
#elif __STDC__
#define MOUNTPROC_NULL ((u_long)0)
extern void * mountproc_null_1(void *, CLIENT *); extern void * mountproc_null_1(void *, CLIENT *);
extern void * mountproc_null_1_svc(void *, struct svc_req *); extern void * mountproc_null_1_svc(void *, struct svc_req *);
#define MOUNTPROC_MNT ((u_long)1) #define MOUNTPROC_MNT 1
extern fhstatus * mountproc_mnt_1(dirpath *, CLIENT *); extern fhstatus * mountproc_mnt_1(dirpath *, CLIENT *);
extern fhstatus * mountproc_mnt_1_svc(dirpath *, struct svc_req *); extern fhstatus * mountproc_mnt_1_svc(dirpath *, struct svc_req *);
#define MOUNTPROC_DUMP ((u_long)2) #define MOUNTPROC_DUMP 2
extern mountlist * mountproc_dump_1(void *, CLIENT *); extern mountlist * mountproc_dump_1(void *, CLIENT *);
extern mountlist * mountproc_dump_1_svc(void *, struct svc_req *); extern mountlist * mountproc_dump_1_svc(void *, struct svc_req *);
#define MOUNTPROC_UMNT ((u_long)3) #define MOUNTPROC_UMNT 3
extern void * mountproc_umnt_1(dirpath *, CLIENT *); extern void * mountproc_umnt_1(dirpath *, CLIENT *);
extern void * mountproc_umnt_1_svc(dirpath *, struct svc_req *); extern void * mountproc_umnt_1_svc(dirpath *, struct svc_req *);
#define MOUNTPROC_UMNTALL ((u_long)4) #define MOUNTPROC_UMNTALL 4
extern void * mountproc_umntall_1(void *, CLIENT *); extern void * mountproc_umntall_1(void *, CLIENT *);
extern void * mountproc_umntall_1_svc(void *, struct svc_req *); extern void * mountproc_umntall_1_svc(void *, struct svc_req *);
#define MOUNTPROC_EXPORT ((u_long)5) #define MOUNTPROC_EXPORT 5
extern exports * mountproc_export_1(void *, CLIENT *); extern exports * mountproc_export_1(void *, CLIENT *);
extern exports * mountproc_export_1_svc(void *, struct svc_req *); extern exports * mountproc_export_1_svc(void *, struct svc_req *);
#define MOUNTPROC_EXPORTALL ((u_long)6) #define MOUNTPROC_EXPORTALL 6
extern exports * mountproc_exportall_1(void *, CLIENT *); extern exports * mountproc_exportall_1(void *, CLIENT *);
extern exports * mountproc_exportall_1_svc(void *, struct svc_req *); extern exports * mountproc_exportall_1_svc(void *, struct svc_req *);
extern int mountprog_1_freeresult (SVCXPRT *, xdrproc_t, caddr_t);
#else /* Old Style C */ #else /* K&R C */
#define MOUNTPROC_NULL ((u_long)0) #define MOUNTPROC_NULL 0
extern void * mountproc_null_1(); extern void * mountproc_null_1();
extern void * mountproc_null_1_svc(); extern void * mountproc_null_1_svc();
#define MOUNTPROC_MNT ((u_long)1) #define MOUNTPROC_MNT 1
extern fhstatus * mountproc_mnt_1(); extern fhstatus * mountproc_mnt_1();
extern fhstatus * mountproc_mnt_1_svc(); extern fhstatus * mountproc_mnt_1_svc();
#define MOUNTPROC_DUMP ((u_long)2) #define MOUNTPROC_DUMP 2
extern mountlist * mountproc_dump_1(); extern mountlist * mountproc_dump_1();
extern mountlist * mountproc_dump_1_svc(); extern mountlist * mountproc_dump_1_svc();
#define MOUNTPROC_UMNT ((u_long)3) #define MOUNTPROC_UMNT 3
extern void * mountproc_umnt_1(); extern void * mountproc_umnt_1();
extern void * mountproc_umnt_1_svc(); extern void * mountproc_umnt_1_svc();
#define MOUNTPROC_UMNTALL ((u_long)4) #define MOUNTPROC_UMNTALL 4
extern void * mountproc_umntall_1(); extern void * mountproc_umntall_1();
extern void * mountproc_umntall_1_svc(); extern void * mountproc_umntall_1_svc();
#define MOUNTPROC_EXPORT ((u_long)5) #define MOUNTPROC_EXPORT 5
extern exports * mountproc_export_1(); extern exports * mountproc_export_1();
extern exports * mountproc_export_1_svc(); extern exports * mountproc_export_1_svc();
#define MOUNTPROC_EXPORTALL ((u_long)6) #define MOUNTPROC_EXPORTALL 6
extern exports * mountproc_exportall_1(); extern exports * mountproc_exportall_1();
extern exports * mountproc_exportall_1_svc(); extern exports * mountproc_exportall_1_svc();
#endif /* Old Style C */ extern int mountprog_1_freeresult ();
#define MOUNTVERS_POSIX ((u_long)2) #endif /* K&R C */
#define MOUNTVERS_POSIX 2
#ifdef __cplusplus #if defined(__STDC__) || defined(__cplusplus)
extern "C" void * mountproc_null_2(void *, CLIENT *);
extern "C" void * mountproc_null_2_svc(void *, struct svc_req *);
extern "C" fhstatus * mountproc_mnt_2(dirpath *, CLIENT *);
extern "C" fhstatus * mountproc_mnt_2_svc(dirpath *, struct svc_req *);
extern "C" mountlist * mountproc_dump_2(void *, CLIENT *);
extern "C" mountlist * mountproc_dump_2_svc(void *, struct svc_req *);
extern "C" void * mountproc_umnt_2(dirpath *, CLIENT *);
extern "C" void * mountproc_umnt_2_svc(dirpath *, struct svc_req *);
extern "C" void * mountproc_umntall_2(void *, CLIENT *);
extern "C" void * mountproc_umntall_2_svc(void *, struct svc_req *);
extern "C" exports * mountproc_export_2(void *, CLIENT *);
extern "C" exports * mountproc_export_2_svc(void *, struct svc_req *);
extern "C" exports * mountproc_exportall_2(void *, CLIENT *);
extern "C" exports * mountproc_exportall_2_svc(void *, struct svc_req *);
#define MOUNTPROC_PATHCONF ((u_long)7)
extern "C" ppathcnf * mountproc_pathconf_2(dirpath *, CLIENT *);
extern "C" ppathcnf * mountproc_pathconf_2_svc(dirpath *, struct svc_req *);
#elif __STDC__
extern void * mountproc_null_2(void *, CLIENT *); extern void * mountproc_null_2(void *, CLIENT *);
extern void * mountproc_null_2_svc(void *, struct svc_req *); extern void * mountproc_null_2_svc(void *, struct svc_req *);
extern fhstatus * mountproc_mnt_2(dirpath *, CLIENT *); extern fhstatus * mountproc_mnt_2(dirpath *, CLIENT *);
@ -299,11 +215,12 @@ extern exports * mountproc_export_2(void *, CLIENT *);
extern exports * mountproc_export_2_svc(void *, struct svc_req *); extern exports * mountproc_export_2_svc(void *, struct svc_req *);
extern exports * mountproc_exportall_2(void *, CLIENT *); extern exports * mountproc_exportall_2(void *, CLIENT *);
extern exports * mountproc_exportall_2_svc(void *, struct svc_req *); extern exports * mountproc_exportall_2_svc(void *, struct svc_req *);
#define MOUNTPROC_PATHCONF ((u_long)7) #define MOUNTPROC_PATHCONF 7
extern ppathcnf * mountproc_pathconf_2(dirpath *, CLIENT *); extern ppathcnf * mountproc_pathconf_2(dirpath *, CLIENT *);
extern ppathcnf * mountproc_pathconf_2_svc(dirpath *, struct svc_req *); extern ppathcnf * mountproc_pathconf_2_svc(dirpath *, struct svc_req *);
extern int mountprog_2_freeresult (SVCXPRT *, xdrproc_t, caddr_t);
#else /* Old Style C */ #else /* K&R C */
extern void * mountproc_null_2(); extern void * mountproc_null_2();
extern void * mountproc_null_2_svc(); extern void * mountproc_null_2_svc();
extern fhstatus * mountproc_mnt_2(); extern fhstatus * mountproc_mnt_2();
@ -318,9 +235,96 @@ extern exports * mountproc_export_2();
extern exports * mountproc_export_2_svc(); extern exports * mountproc_export_2_svc();
extern exports * mountproc_exportall_2(); extern exports * mountproc_exportall_2();
extern exports * mountproc_exportall_2_svc(); extern exports * mountproc_exportall_2_svc();
#define MOUNTPROC_PATHCONF ((u_long)7) #define MOUNTPROC_PATHCONF 7
extern ppathcnf * mountproc_pathconf_2(); extern ppathcnf * mountproc_pathconf_2();
extern ppathcnf * mountproc_pathconf_2_svc(); extern ppathcnf * mountproc_pathconf_2_svc();
#endif /* Old Style C */ extern int mountprog_2_freeresult ();
#endif /* K&R C */
#define MOUNT_V3 3
#if defined(__STDC__) || defined(__cplusplus)
#define MOUNTPROC3_NULL 0
extern void * mountproc3_null_3(void *, CLIENT *);
extern void * mountproc3_null_3_svc(void *, struct svc_req *);
#define MOUNTPROC3_MNT 1
extern mountres3 * mountproc3_mnt_3(dirpath *, CLIENT *);
extern mountres3 * mountproc3_mnt_3_svc(dirpath *, struct svc_req *);
#define MOUNTPROC3_DUMP 2
extern mountlist * mountproc3_dump_3(void *, CLIENT *);
extern mountlist * mountproc3_dump_3_svc(void *, struct svc_req *);
#define MOUNTPROC3_UMNT 3
extern void * mountproc3_umnt_3(dirpath *, CLIENT *);
extern void * mountproc3_umnt_3_svc(dirpath *, struct svc_req *);
#define MOUNTPROC3_UMNTALL 4
extern void * mountproc3_umntall_3(void *, CLIENT *);
extern void * mountproc3_umntall_3_svc(void *, struct svc_req *);
#define MOUNTPROC3_EXPORT 5
extern exports * mountproc3_export_3(void *, CLIENT *);
extern exports * mountproc3_export_3_svc(void *, struct svc_req *);
extern int mountprog_3_freeresult (SVCXPRT *, xdrproc_t, caddr_t);
#else /* K&R C */
#define MOUNTPROC3_NULL 0
extern void * mountproc3_null_3();
extern void * mountproc3_null_3_svc();
#define MOUNTPROC3_MNT 1
extern mountres3 * mountproc3_mnt_3();
extern mountres3 * mountproc3_mnt_3_svc();
#define MOUNTPROC3_DUMP 2
extern mountlist * mountproc3_dump_3();
extern mountlist * mountproc3_dump_3_svc();
#define MOUNTPROC3_UMNT 3
extern void * mountproc3_umnt_3();
extern void * mountproc3_umnt_3_svc();
#define MOUNTPROC3_UMNTALL 4
extern void * mountproc3_umntall_3();
extern void * mountproc3_umntall_3_svc();
#define MOUNTPROC3_EXPORT 5
extern exports * mountproc3_export_3();
extern exports * mountproc3_export_3_svc();
extern int mountprog_3_freeresult ();
#endif /* K&R C */
/* the xdr functions */
#if defined(__STDC__) || defined(__cplusplus)
extern bool_t xdr_fhandle (XDR *, fhandle);
extern bool_t xdr_fhandle3 (XDR *, fhandle3*);
extern bool_t xdr_mountstat3 (XDR *, mountstat3*);
extern bool_t xdr_fhstatus (XDR *, fhstatus*);
extern bool_t xdr_mountres3_ok (XDR *, mountres3_ok*);
extern bool_t xdr_mountres3 (XDR *, mountres3*);
extern bool_t xdr_dirpath (XDR *, dirpath*);
extern bool_t xdr_name (XDR *, name*);
extern bool_t xdr_mountlist (XDR *, mountlist*);
extern bool_t xdr_mountbody (XDR *, mountbody*);
extern bool_t xdr_groups (XDR *, groups*);
extern bool_t xdr_groupnode (XDR *, groupnode*);
extern bool_t xdr_exports (XDR *, exports*);
extern bool_t xdr_exportnode (XDR *, exportnode*);
extern bool_t xdr_ppathcnf (XDR *, ppathcnf*);
#else /* K&R C */
extern bool_t xdr_fhandle ();
extern bool_t xdr_fhandle3 ();
extern bool_t xdr_mountstat3 ();
extern bool_t xdr_fhstatus ();
extern bool_t xdr_mountres3_ok ();
extern bool_t xdr_mountres3 ();
extern bool_t xdr_dirpath ();
extern bool_t xdr_name ();
extern bool_t xdr_mountlist ();
extern bool_t xdr_mountbody ();
extern bool_t xdr_groups ();
extern bool_t xdr_groupnode ();
extern bool_t xdr_exports ();
extern bool_t xdr_exportnode ();
extern bool_t xdr_ppathcnf ();
#endif /* K&R C */
#ifdef __cplusplus
}
#endif
#endif /* !_NFSMOUNT_H_RPCGEN */ #endif /* !_NFSMOUNT_H_RPCGEN */

View File

@ -1456,6 +1456,36 @@ extern void *xmalloc(size_t size)
return cp; return cp;
} }
#if defined BB_FEATURE_NFSMOUNT
extern char * xstrdup (const char *s) {
char *t;
if (s == NULL)
return NULL;
t = strdup (s);
if (t == NULL)
fatalError(memory_exhausted, "");
return t;
}
extern char * xstrndup (const char *s, int n) {
char *t;
if (s == NULL)
fatalError("xstrndup bug");
t = xmalloc(n+1);
strncpy(t,s,n);
t[n] = 0;
return t;
}
#endif
#if (__GLIBC__ < 2) && (defined BB_SYSLOGD || defined BB_INIT) #if (__GLIBC__ < 2) && (defined BB_SYSLOGD || defined BB_INIT)
extern int vdprintf(int d, const char *format, va_list ap) extern int vdprintf(int d, const char *format, va_list ap)
{ {