nfs-ganesha 1.4
|
00001 /* 00002 * vim:expandtab:shiftwidth=8:tabstop=8: 00003 * 00004 * Copyright CEA/DAM/DIF (2008) 00005 * contributeur : Philippe DENIEL philippe.deniel@cea.fr 00006 * Thomas LEIBOVICI thomas.leibovici@cea.fr 00007 * 00008 * 00009 * This program is free software; you can redistribute it and/or 00010 * modify it under the terms of the GNU Lesser General Public 00011 * License as published by the Free Software Foundation; either 00012 * version 3 of the License, or (at your option) any later version. 00013 * 00014 * This program is distributed in the hope that it will be useful, 00015 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00016 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00017 * Lesser General Public License for more details. 00018 * 00019 * You should have received a copy of the GNU Lesser General Public 00020 * License along with this library; if not, write to the Free Software 00021 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 00022 * 00023 * --------------------------------------- 00024 * \file nfs_convert.c 00025 * \author $Author: deniel $ 00026 * \date $Date: 2005/11/28 17:03:02 $ 00027 * \version $Revision: 1.3 $ 00028 * \brief nfs conversion tools. 00029 * 00030 * $Log: nfs_convert.c,v $ 00031 * 00032 * Revision 1.2 2005/10/12 08:28:00 deniel 00033 * Format of the errror message. 00034 * 00035 * Revision 1.1 2005/08/05 08:46:35 leibovic 00036 * Convertion tools. 00037 * 00038 * 00039 */ 00040 #ifdef HAVE_CONFIG_H 00041 #include "config.h" 00042 #endif 00043 00044 #ifdef _SOLARIS 00045 #include "solaris_port.h" 00046 #endif 00047 00048 #include <string.h> 00049 #include "ganesha_rpc.h" 00050 #include "nfs_core.h" 00051 #include "nfs_tools.h" 00052 #include "mount.h" 00053 #include "nfs23.h" 00054 00055 #ifdef HAVE_GSSAPI 00056 OM_uint32 Gss_release_buffer(OM_uint32 * minor_status, gss_buffer_t buffer); 00057 #endif 00058 00059 char *nfsstat2_to_str(nfsstat2 code) 00060 { 00061 switch (code) 00062 { 00063 /* no nead for break statments, 00064 * because we "return". 00065 */ 00066 case NFS_OK: return "NFS_OK"; 00067 case NFSERR_PERM: return "NFSERR_PERM"; 00068 case NFSERR_NOENT: return "NFSERR_NOENT"; 00069 case NFSERR_IO: return "NFSERR_IO"; 00070 case NFSERR_NXIO: return "NFSERR_NXIO"; 00071 case NFSERR_ACCES: return "NFSERR_ACCES"; 00072 case NFSERR_EXIST: return "NFSERR_EXIST"; 00073 case NFSERR_NODEV: return "NFSERR_NODEV"; 00074 case NFSERR_NOTDIR: return "NFSERR_NOTDIR"; 00075 case NFSERR_ISDIR: return "NFSERR_ISDIR"; 00076 case NFSERR_FBIG: return "NFSERR_FBIG"; 00077 case NFSERR_NOSPC: return "NFSERR_NOSPC"; 00078 case NFSERR_ROFS: return "NFSERR_ROFS"; 00079 case NFSERR_NAMETOOLONG: return "NFSERR_NAMETOOLONG"; 00080 case NFSERR_NOTEMPTY: return "NFSERR_NOTEMPTY"; 00081 case NFSERR_DQUOT: return "NFSERR_DQUOT"; 00082 case NFSERR_STALE: return "NFSERR_STALE"; 00083 case NFSERR_WFLUSH: return "NFSERR_WFLUSH"; 00084 } 00085 return "UNKNOWN NFSv2 ERROR CODE"; 00086 } 00087 00088 char *nfsstat3_to_str(nfsstat3 code) 00089 { 00090 switch (code) 00091 { 00092 /* no nead for break statments, 00093 * because we "return". 00094 */ 00095 case NFS3_OK: return "NFS3_OK"; 00096 case NFS3ERR_PERM: return "NFS3ERR_PERM"; 00097 case NFS3ERR_NOENT: return "NFS3ERR_NOENT"; 00098 case NFS3ERR_IO: return "NFS3ERR_IO"; 00099 case NFS3ERR_NXIO: return "NFS3ERR_NXIO"; 00100 case NFS3ERR_ACCES: return "NFS3ERR_ACCES"; 00101 case NFS3ERR_EXIST: return "NFS3ERR_EXIST"; 00102 case NFS3ERR_XDEV: return "NFS3ERR_XDEV"; 00103 case NFS3ERR_NODEV: return "NFS3ERR_NODEV"; 00104 case NFS3ERR_NOTDIR: return "NFS3ERR_NOTDIR"; 00105 case NFS3ERR_ISDIR: return "NFS3ERR_ISDIR"; 00106 case NFS3ERR_INVAL: return "NFS3ERR_INVAL"; 00107 case NFS3ERR_FBIG: return "NFS3ERR_FBIG"; 00108 case NFS3ERR_NOSPC: return "NFS3ERR_NOSPC"; 00109 case NFS3ERR_ROFS: return "NFS3ERR_ROFS"; 00110 case NFS3ERR_MLINK: return "NFS3ERR_MLINK"; 00111 case NFS3ERR_NAMETOOLONG: return "NFS3ERR_NAMETOOLONG"; 00112 case NFS3ERR_NOTEMPTY: return "NFS3ERR_NOTEMPTY"; 00113 case NFS3ERR_DQUOT: return "NFS3ERR_DQUOT"; 00114 case NFS3ERR_STALE: return "NFS3ERR_STALE"; 00115 case NFS3ERR_REMOTE: return "NFS3ERR_REMOTE"; 00116 case NFS3ERR_BADHANDLE: return "NFS3ERR_BADHANDLE"; 00117 case NFS3ERR_NOT_SYNC: return "NFS3ERR_NOT_SYNC"; 00118 case NFS3ERR_BAD_COOKIE: return "NFS3ERR_BAD_COOKIE"; 00119 case NFS3ERR_NOTSUPP: return "NFS3ERR_NOTSUPP"; 00120 case NFS3ERR_TOOSMALL: return "NFS3ERR_TOOSMALL"; 00121 case NFS3ERR_SERVERFAULT: return "NFS3ERR_SERVERFAULT"; 00122 case NFS3ERR_BADTYPE: return "NFS3ERR_BADTYPE"; 00123 case NFS3ERR_JUKEBOX: return "NFS3ERR_JUKEBOX"; 00124 } 00125 return "UNKNOWN NFSv3 ERROR CODE"; 00126 } 00127 00128 char *nfsstat4_to_str(nfsstat4 code) 00129 { 00130 switch(code) 00131 { 00132 case NFS4_OK: return "NFS4_OK"; 00133 case NFS4ERR_PERM: return "NFS4ERR_PERM"; 00134 case NFS4ERR_NOENT: return "NFS4ERR_NOENT"; 00135 case NFS4ERR_IO: return "NFS4ERR_IO"; 00136 case NFS4ERR_NXIO: return "NFS4ERR_NXIO"; 00137 case NFS4ERR_ACCESS: return "NFS4ERR_ACCESS"; 00138 case NFS4ERR_EXIST: return "NFS4ERR_EXIST"; 00139 case NFS4ERR_XDEV: return "NFS4ERR_XDEV"; 00140 case NFS4ERR_NOTDIR: return "NFS4ERR_NOTDIR"; 00141 case NFS4ERR_ISDIR: return "NFS4ERR_ISDIR"; 00142 case NFS4ERR_INVAL: return "NFS4ERR_INVAL"; 00143 case NFS4ERR_FBIG: return "NFS4ERR_FBIG"; 00144 case NFS4ERR_NOSPC: return "NFS4ERR_NOSPC"; 00145 case NFS4ERR_ROFS: return "NFS4ERR_ROFS"; 00146 case NFS4ERR_MLINK: return "NFS4ERR_MLINK"; 00147 case NFS4ERR_NAMETOOLONG: return "NFS4ERR_NAMETOOLONG"; 00148 case NFS4ERR_NOTEMPTY: return "NFS4ERR_NOTEMPTY"; 00149 case NFS4ERR_DQUOT: return "NFS4ERR_DQUOT"; 00150 case NFS4ERR_STALE: return "NFS4ERR_STALE"; 00151 case NFS4ERR_BADHANDLE: return "NFS4ERR_BADHANDLE"; 00152 case NFS4ERR_BAD_COOKIE: return "NFS4ERR_BAD_COOKIE"; 00153 case NFS4ERR_NOTSUPP: return "NFS4ERR_NOTSUPP"; 00154 case NFS4ERR_TOOSMALL: return "NFS4ERR_TOOSMALL"; 00155 case NFS4ERR_SERVERFAULT: return "NFS4ERR_SERVERFAULT"; 00156 case NFS4ERR_BADTYPE: return "NFS4ERR_BADTYPE"; 00157 case NFS4ERR_DELAY: return "NFS4ERR_DELAY"; 00158 case NFS4ERR_SAME: return "NFS4ERR_SAME"; 00159 case NFS4ERR_DENIED: return "NFS4ERR_DENIED"; 00160 case NFS4ERR_EXPIRED: return "NFS4ERR_EXPIRED"; 00161 case NFS4ERR_LOCKED: return "NFS4ERR_LOCKED"; 00162 case NFS4ERR_GRACE: return "NFS4ERR_GRACE"; 00163 case NFS4ERR_FHEXPIRED: return "NFS4ERR_FHEXPIRED"; 00164 case NFS4ERR_SHARE_DENIED: return "NFS4ERR_SHARE_DENIED"; 00165 case NFS4ERR_WRONGSEC: return "NFS4ERR_WRONGSEC"; 00166 case NFS4ERR_CLID_INUSE: return "NFS4ERR_CLID_INUSE"; 00167 case NFS4ERR_RESOURCE: return "NFS4ERR_RESOURCE"; 00168 case NFS4ERR_MOVED: return "NFS4ERR_MOVED"; 00169 case NFS4ERR_NOFILEHANDLE: return "NFS4ERR_NOFILEHANDLE"; 00170 case NFS4ERR_MINOR_VERS_MISMATCH: return "NFS4ERR_MINOR_VERS_MISMATCH"; 00171 case NFS4ERR_STALE_CLIENTID: return "NFS4ERR_STALE_CLIENTID"; 00172 case NFS4ERR_STALE_STATEID: return "NFS4ERR_STALE_STATEID"; 00173 case NFS4ERR_OLD_STATEID: return "NFS4ERR_OLD_STATEID"; 00174 case NFS4ERR_BAD_STATEID: return "NFS4ERR_BAD_STATEID"; 00175 case NFS4ERR_BAD_SEQID: return "NFS4ERR_BAD_SEQID"; 00176 case NFS4ERR_NOT_SAME: return "NFS4ERR_NOT_SAME"; 00177 case NFS4ERR_LOCK_RANGE: return "NFS4ERR_LOCK_RANGE"; 00178 case NFS4ERR_SYMLINK: return "NFS4ERR_SYMLINK"; 00179 case NFS4ERR_RESTOREFH: return "NFS4ERR_RESTOREFH"; 00180 case NFS4ERR_LEASE_MOVED: return "NFS4ERR_LEASE_MOVED"; 00181 case NFS4ERR_ATTRNOTSUPP: return "NFS4ERR_ATTRNOTSUPP"; 00182 case NFS4ERR_NO_GRACE: return "NFS4ERR_NO_GRACE"; 00183 case NFS4ERR_RECLAIM_BAD: return "NFS4ERR_RECLAIM_BAD"; 00184 case NFS4ERR_RECLAIM_CONFLICT: return "NFS4ERR_RECLAIM_CONFLICT"; 00185 case NFS4ERR_BADXDR: return "NFS4ERR_BADXDR"; 00186 case NFS4ERR_LOCKS_HELD: return "NFS4ERR_LOCKS_HELD"; 00187 case NFS4ERR_OPENMODE: return "NFS4ERR_OPENMODE"; 00188 case NFS4ERR_BADOWNER: return "NFS4ERR_BADOWNER"; 00189 case NFS4ERR_BADCHAR: return "NFS4ERR_BADCHAR"; 00190 case NFS4ERR_BADNAME: return "NFS4ERR_BADNAME"; 00191 case NFS4ERR_BAD_RANGE: return "NFS4ERR_BAD_RANGE"; 00192 case NFS4ERR_LOCK_NOTSUPP: return "NFS4ERR_LOCK_NOTSUPP"; 00193 case NFS4ERR_OP_ILLEGAL: return "NFS4ERR_OP_ILLEGAL"; 00194 case NFS4ERR_DEADLOCK: return "NFS4ERR_DEADLOCK"; 00195 case NFS4ERR_FILE_OPEN: return "NFS4ERR_FILE_OPEN"; 00196 case NFS4ERR_ADMIN_REVOKED: return "NFS4ERR_ADMIN_REVOKED"; 00197 case NFS4ERR_CB_PATH_DOWN: return "NFS4ERR_CB_PATH_DOWN"; 00198 #ifdef _USE_NFS4_1 00199 case NFS4ERR_BADIOMODE: return "NFS4ERR_BADIOMODE"; 00200 case NFS4ERR_BADLAYOUT: return "NFS4ERR_BADLAYOUT"; 00201 case NFS4ERR_BAD_SESSION_DIGEST: return "NFS4ERR_BAD_SESSION_DIGEST"; 00202 case NFS4ERR_BADSESSION: return "NFS4ERR_BADSESSION"; 00203 case NFS4ERR_BADSLOT: return "NFS4ERR_BADSLOT"; 00204 case NFS4ERR_COMPLETE_ALREADY: return "NFS4ERR_COMPLETE_ALREADY"; 00205 case NFS4ERR_CONN_NOT_BOUND_TO_SESSION: return "NFS4ERR_CONN_NOT_BOUND_TO_SESSION"; 00206 case NFS4ERR_DELEG_ALREADY_WANTED: return "NFS4ERR_DELEG_ALREADY_WANTED"; 00207 case NFS4ERR_BACK_CHAN_BUSY: return "NFS4ERR_BACK_CHAN_BUSY"; 00208 case NFS4ERR_LAYOUTTRYLATER: return "NFS4ERR_LAYOUTTRYLATER"; 00209 case NFS4ERR_LAYOUTUNAVAILABLE: return "NFS4ERR_LAYOUTUNAVAILABLE"; 00210 case NFS4ERR_NOMATCHING_LAYOUT: return "NFS4ERR_NOMATCHING_LAYOUT"; 00211 case NFS4ERR_RECALLCONFLICT: return "NFS4ERR_RECALLCONFLICT"; 00212 case NFS4ERR_UNKNOWN_LAYOUTTYPE: return "NFS4ERR_UNKNOWN_LAYOUTTYPE"; 00213 case NFS4ERR_SEQ_MISORDERED: return "NFS4ERR_SEQ_MISORDERED"; 00214 case NFS4ERR_SEQUENCE_POS: return "NFS4ERR_SEQUENCE_POS"; 00215 case NFS4ERR_REQ_TOO_BIG: return "NFS4ERR_REQ_TOO_BIG"; 00216 case NFS4ERR_REP_TOO_BIG: return "NFS4ERR_REP_TOO_BIG"; 00217 case NFS4ERR_REP_TOO_BIG_TO_CACHE: return "NFS4ERR_REP_TOO_BIG_TO_CACHE"; 00218 case NFS4ERR_RETRY_UNCACHED_REP: return "NFS4ERR_RETRY_UNCACHED_REP"; 00219 case NFS4ERR_UNSAFE_COMPOUND: return "NFS4ERR_UNSAFE_COMPOUND"; 00220 case NFS4ERR_TOO_MANY_OPS: return "NFS4ERR_TOO_MANY_OPS"; 00221 case NFS4ERR_OP_NOT_IN_SESSION: return "NFS4ERR_OP_NOT_IN_SESSION"; 00222 case NFS4ERR_HASH_ALG_UNSUPP: return "NFS4ERR_HASH_ALG_UNSUPP"; 00223 case NFS4ERR_CLIENTID_BUSY: return "NFS4ERR_CLIENTID_BUSY"; 00224 case NFS4ERR_PNFS_IO_HOLE: return "NFS4ERR_PNFS_IO_HOLE"; 00225 case NFS4ERR_SEQ_FALSE_RETRY: return "NFS4ERR_SEQ_FALSE_RETRY"; 00226 case NFS4ERR_BAD_HIGH_SLOT: return "NFS4ERR_BAD_HIGH_SLOT"; 00227 case NFS4ERR_DEADSESSION: return "NFS4ERR_DEADSESSION"; 00228 case NFS4ERR_ENCR_ALG_UNSUPP: return "NFS4ERR_ENCR_ALG_UNSUPP"; 00229 case NFS4ERR_PNFS_NO_LAYOUT: return "NFS4ERR_PNFS_NO_LAYOUT"; 00230 case NFS4ERR_NOT_ONLY_OP: return "NFS4ERR_NOT_ONLY_OP"; 00231 case NFS4ERR_WRONG_CRED: return "NFS4ERR_WRONG_CRED"; 00232 case NFS4ERR_WRONG_TYPE: return "NFS4ERR_WRONG_TYPE"; 00233 case NFS4ERR_DIRDELEG_UNAVAIL: return "NFS4ERR_DIRDELEG_UNAVAIL"; 00234 case NFS4ERR_REJECT_DELEG: return "NFS4ERR_REJECT_DELEG"; 00235 case NFS4ERR_RETURNCONFLICT: return "NFS4ERR_RETURNCONFLICT"; 00236 case NFS4ERR_DELEG_REVOKED: return "NFS4ERR_DELEG_REVOKED"; 00237 #endif 00238 } 00239 return "UNKNOWN NFSv4 ERROR CODE"; 00240 } 00241 00242 char *nfstype2_to_str(ftype2 code) 00243 { 00244 switch (code) 00245 { 00246 /* no nead for break statments, 00247 * because we "return". 00248 */ 00249 case NFNON: return "NFNON"; 00250 case NFREG: return "NFREG"; 00251 case NFDIR: return "NFDIR"; 00252 case NFBLK: return "NFBLK"; 00253 case NFCHR: return "NFCHR"; 00254 case NFLNK: return "NFLNK"; 00255 case NFSOCK: return "NFSOCK"; 00256 case NFBAD: return "NFBAD"; 00257 case NFFIFO: return "NFFIFO"; 00258 } 00259 return "UNKNOWN NFSv2 TYPE"; 00260 } 00261 00262 char *nfstype3_to_str(ftype3 code) 00263 { 00264 switch (code) 00265 { 00266 /* no nead for break statments, 00267 * because we "return". 00268 */ 00269 case NF3REG: return "NF3REG"; 00270 case NF3DIR: return "NF3DIR"; 00271 case NF3BLK: return "NF3BLK"; 00272 case NF3CHR: return "NF3CHR"; 00273 case NF3LNK: return "NF3LNK"; 00274 case NF3SOCK: return "NF3SOCK"; 00275 case NF3FIFO: return "NF3FIFO"; 00276 } 00277 return "UNKNOWN NFSv3 TYPE"; 00278 } 00279 00289 uint64_t nfs_htonl64(uint64_t arg64) 00290 { 00291 uint64_t res64; 00292 00293 #ifdef LITTLEEND 00294 uint32_t low = (uint32_t) (arg64 & 0x00000000FFFFFFFFLL); 00295 uint32_t high = (uint32_t) ((arg64 & 0xFFFFFFFF00000000LL) >> 32); 00296 00297 low = htonl(low); 00298 high = htonl(high); 00299 00300 res64 = (uint64_t) high + (((uint64_t) low) << 32); 00301 #else 00302 res64 = arg64; 00303 #endif 00304 00305 return res64; 00306 } /* nfs_htonl64 */ 00307 00317 uint64_t nfs_ntohl64(uint64_t arg64) 00318 { 00319 uint64_t res64; 00320 00321 #ifdef LITTLEEND 00322 uint32_t low = (uint32_t) (arg64 & 0x00000000FFFFFFFFLL); 00323 uint32_t high = (uint32_t) ((arg64 & 0xFFFFFFFF00000000LL) >> 32); 00324 00325 low = ntohl(low); 00326 high = ntohl(high); 00327 00328 res64 = (uint64_t) high + (((uint64_t) low) << 32); 00329 #else 00330 res64 = arg64; 00331 #endif 00332 00333 return res64; 00334 } /* nfs_ntonl64 */ 00335 00347 void auth_stat2str(enum auth_stat why, char *str) 00348 { 00349 switch (why) 00350 { 00351 case AUTH_OK: 00352 strncpy(str, "AUTH_OK", AUTH_STR_LEN); 00353 break; 00354 00355 case AUTH_BADCRED: 00356 strncpy(str, "AUTH_BADCRED", AUTH_STR_LEN); 00357 break; 00358 00359 case AUTH_REJECTEDCRED: 00360 strncpy(str, "AUTH_REJECTEDCRED", AUTH_STR_LEN); 00361 break; 00362 00363 case AUTH_BADVERF: 00364 strncpy(str, "AUTH_BADVERF", AUTH_STR_LEN); 00365 break; 00366 00367 case AUTH_REJECTEDVERF: 00368 strncpy(str, "AUTH_REJECTEDVERF", AUTH_STR_LEN); 00369 break; 00370 00371 case AUTH_TOOWEAK: 00372 strncpy(str, "AUTH_TOOWEAK", AUTH_STR_LEN); 00373 break; 00374 00375 case AUTH_INVALIDRESP: 00376 strncpy(str, "AUTH_INVALIDRESP", AUTH_STR_LEN); 00377 break; 00378 00379 case AUTH_FAILED: 00380 strncpy(str, "AUTH_FAILED", AUTH_STR_LEN); 00381 break; 00382 00383 #ifdef _HAVE_GSSAPI 00384 case RPCSEC_GSS_CREDPROBLEM: 00385 strncpy(str, "RPCSEC_GSS_CREDPROBLEM", AUTH_STR_LEN); 00386 break; 00387 00388 case RPCSEC_GSS_CTXPROBLEM: 00389 strncpy(str, "RPCSEC_GSS_CTXPROBLEM", AUTH_STR_LEN); 00390 break; 00391 #endif 00392 00393 default: 00394 strncpy(str, "UNKNOWN AUTH", AUTH_STR_LEN); 00395 break; 00396 } /* switch */ 00397 } /* auth_stat2str */