1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188
|
/* minimal spec for dsniff's decode_mountd(). */
/*
* Copyright (c) 1988,1990,1991,1992 by Sun Microsystems, Inc.
*/
/*
* Protocol description for the mount program
*/
const MNTPATHLEN = 1024; /* maximum bytes in a pathname argument */
const MNTNAMLEN = 255; /* maximum bytes in a name argument */
const FHSIZE = 32; /* size in bytes of a v2 file handle */
const FHSIZE3 = 64; /* " " " " " v3 " " */
/*
* The fhandle is the file handle that the server passes to the client.
* All file operations are done using the file handles to refer to a file
* or a directory. The file handle can contain whatever information the
* server needs to distinguish an individual file.
*
* Versions 1 and 2 of the protocol share a filehandle of 32 bytes.
*
* Version 3 supports a 64 byte filehandle that can be used only
* with version 3 of the NFS protocol.
*/
typedef opaque fhandle[FHSIZE];
typedef opaque fhandle3<FHSIZE3>;
/*
* If a V2 status of zero is returned, the call completed successfully, and
* a file handle for the directory follows. A non-zero status indicates
* some sort of error. The status corresponds with UNIX error numbers.
*/
union fhstatus switch (unsigned fhs_status) {
case 0:
fhandle fhs_fhandle;
default:
void;
};
/*
* This #define is added for backwards compatability with applications
* which reference the old style fhstatus. The second element of that
* structure was called fhs_fh, instead of the current fhs_fhandle.
*/
%
%#define fhs_fh fhstatus_u.fhs_fhandle
/*
* The following status codes are defined for the V3 mount service:
* Note that the precise enum encoding must be followed; the values
* are derived from existing implementation practice, and there is
* no good reason to disturb them.
*/
enum mountstat3 {
MNT_OK= 0, /* no error */
MNT3ERR_PERM=1, /* Not owner */
MNT3ERR_NOENT=2, /* No such file or directory */
MNT3ERR_IO=5, /* I/O error */
MNT3ERR_ACCES=13, /* Permission denied */
MNT3ERR_NOTDIR=20, /* Not a directory*/
MNT3ERR_INVAL=22, /* Invalid argument.*/
MNT3ERR_NAMETOOLONG=63, /* File name too long */
MNT3ERR_NOTSUPP=10004, /* operation not supported */
MNT3ERR_SERVERFAULT=10006 /* An i/o or similar failure caused */
/* the server to abandon the request */
/* No attributes can be returned. The */
/* client should translate this into EIO */
};
/*
* A V3 server returns a file handle and a list of the authentication
* flavors that the server will accept for this mount. If the list
* is empty, AUTH_UNIX is required. Otherwise, any of the flavors
* listed in auth_flavors<> may be used (but no others).
* The values of the authentication flavors are defined in the
* underlying RPC protocol.
*/
struct mountres3_ok {
fhandle3 fhandle;
int auth_flavors<>;
};
/*
* If a V3 status of MNT_OK is returned, the call completed successfully, and
* a file handle for the directory follows. Any other status indicates
* some sort of error.
*/
union mountres3 switch (mountstat3 fhs_status) {
case MNT_OK:
mountres3_ok mountinfo;
default:
void;
};
/*
* The type dirpath is the pathname of a directory
*/
typedef string dirpath<MNTPATHLEN>;
program MOUNTPROG {
/*
* Version one of the mount protocol communicates with version two
* of the NFS protocol. The only connecting point is the fhandle
* structure, which is the same for both protocols.
*/
version MOUNTVERS {
/*
* Does no work. It is made available in all RPC services
* to allow server reponse testing and timing
*/
void
MOUNTPROC_NULL(void) = 0;
/*
* If fhs_status is 0, then fhs_fhandle contains the
* file handle for the directory. This file handle may
* be used in the NFS protocol. This procedure also adds
* a new entry to the mount list for this client mounting
* the directory.
* Unix authentication required.
*/
fhstatus
MOUNTPROC_MNT(dirpath) = 1;
} = 1;
/*
* Version two of the mount protocol communicates with version two
* of the NFS protocol. It is identical to version one except for a
* new procedure call for posix.
*/
version MOUNTVERS_POSIX {
/*
* Does no work. It is made available in all RPC services
* to allow server reponse testing and timing
*/
void
MOUNTPROC_NULL(void) = 0;
/*
* If fhs_status is 0, then fhs_fhandle contains the
* file handle for the directory. This file handle may
* be used in the NFS protocol. This procedure also adds
* a new entry to the mount list for this client mounting
* the directory.
* Unix authentication required.
*/
fhstatus
MOUNTPROC_MNT(dirpath) = 1;
} = 2;
/*
* Version 3 of the mount protocol communicates with version 3
* of the NFS protocol. The only connecting point is the nfs_fh3
* structure, which is the same for both protocols.
*
* The only significant change over version 2 is that MOUNTPROC_MNT
* returns a longer filehandle (64 bytes instead of 32) as well
* as authentication information. MOUNTPROC_PATHCONF is subsumed
* into V3 of the NFS protocol and MOUNTPROC_EXPORTALL is eliminated.
*/
version MOUNTVERS3 {
/*
* Does no work. It is made available in all RPC services
* to allow server reponse testing and timing
*/
void
MOUNTPROC_NULL(void) = 0;
/*
* Mount a file system.
*
* If mountres.fhs_status is NFS_OK, then mountres.mountinfo
* contains the file handle for the directory and
* a list of acceptable authentication flavors. This file
* handle may only be used in version 3 of the NFS protocol.
* This procedure also results in the server adding a new
* entry to its mount list recording that this client has
* mounted the directory. Unix authentication or better
* is required.
*/
mountres3
MOUNTPROC_MNT(dirpath) = 1;
} = 3;
} = 100005;
|