June 2025 | ||||||
Mo | Tu | We | Th | Fr | Sa | Su |
26 | 27 | 28 | 29 | 30 | 31 | 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 | 1 | 2 | 3 | 4 | 5 | 6 |
001: /* 002: * include/linux/nfsd/nfsfh.h 003: * 004: * This file describes the layout of the file handles as passed 005: * over the wire. 006: * 007: * Earlier versions of knfsd used to sign file handles using keyed MD5 008: * or SHA. I've removed this code, because it doesn't give you more 009: * security than blocking external access to port 2049 on your firewall. 010: * 011: * Copyright (C) 1995, 1996, 1997 Olaf Kirch <okir@monad.swb.de> 012: */ 013: 014: #ifndef _LINUX_NFSD_FH_H 015: #define _LINUX_NFSD_FH_H 016: 017: #include <linux/types.h> 018: #include <linux/nfs.h> 019: #include <linux/nfs2.h> 020: #include <linux/nfs3.h> 021: #include <linux/nfs4.h> 022: 023: /* 024: * This is the old "dentry style" Linux NFSv2 file handle. 025: * 026: * The xino and xdev fields are currently used to transport the 027: * ino/dev of the exported inode. 028: */ 029: struct nfs_fhbase_old { 030: __u32 fb_dcookie; /* dentry cookie - always 0xfeebbaca */ 031: __u32 fb_ino; /* our inode number */ 032: __u32 fb_dirino; /* dir inode number, 0 for directories */ 033: __u32 fb_dev; /* our device */ 034: __u32 fb_xdev; 035: __u32 fb_xino; 036: __u32 fb_generation; 037: }; 038: 039: /* 040: * This is the new flexible, extensible style NFSv2/v3 file handle. 041: * by Neil Brown <neilb@cse.unsw.edu.au> - March 2000 042: * 043: * The file handle starts with a sequence of four-byte words. 044: * The first word contains a version number (1) and three descriptor bytes 045: * that tell how the remaining 3 variable length fields should be handled. 046: * These three bytes are auth_type, fsid_type and fileid_type. 047: * 048: * All four-byte values are in host-byte-order. 049: * 050: * The auth_type field specifies how the filehandle can be authenticated 051: * This might allow a file to be confirmed to be in a writable part of a 052: * filetree without checking the path from it up to the root. 053: * Current values: 054: * 0 - No authentication. fb_auth is 0 bytes long 055: * Possible future values: 056: * 1 - 4 bytes taken from MD5 hash of the remainer of the file handle 057: * prefixed by a secret and with the important export flags. 058: * 059: * The fsid_type identifies how the filesystem (or export point) is 060: * encoded. 061: * Current values: 062: * 0 - 4 byte device id (ms-2-bytes major, ls-2-bytes minor), 4byte inode number 063: * NOTE: we cannot use the kdev_t device id value, because kdev_t.h 064: * says we mustn't. We must break it up and reassemble. 065: * 1 - 4 byte user specified identifier 066: * 2 - 4 byte major, 4 byte minor, 4 byte inode number - DEPRECATED 067: * 3 - 4 byte device id, encoded for user-space, 4 byte inode number 068: * 4 - 4 byte inode number and 4 byte uuid 069: * 5 - 8 byte uuid 070: * 6 - 16 byte uuid 071: * 7 - 8 byte inode number and 16 byte uuid 072: * 073: * The fileid_type identified how the file within the filesystem is encoded. 074: * This is (will be) passed to, and set by, the underlying filesystem if it supports 075: * filehandle operations. The filesystem must not use the value '0' or '0xff' and may 076: * only use the values 1 and 2 as defined below: 077: * Current values: 078: * 0 - The root, or export point, of the filesystem. fb_fileid is 0 bytes. 079: * 1 - 32bit inode number, 32 bit generation number. 080: * 2 - 32bit inode number, 32 bit generation number, 32 bit parent directory inode number. 081: * 082: */ 083: struct nfs_fhbase_new { 084: __u8 fb_version; /* == 1, even => nfs_fhbase_old */ 085: __u8 fb_auth_type; 086: __u8 fb_fsid_type; 087: __u8 fb_fileid_type; 088: __u32 fb_auth[1]; 089: /* __u32 fb_fsid[0]; floating */ 090: /* __u32 fb_fileid[0]; floating */ 091: }; 092: 093: struct knfsd_fh { 094: unsigned int fh_size; /* significant for NFSv3. 095: * Points to the current size while building 096: * a new file handle 097: */ 098: union { 099: struct nfs_fhbase_old fh_old; 100: __u32 fh_pad[NFS4_FHSIZE/4]; 101: struct nfs_fhbase_new fh_new; 102: } fh_base; 103: }; 104: 105: #define ofh_dcookie fh_base.fh_old.fb_dcookie 106: #define ofh_ino fh_base.fh_old.fb_ino 107: #define ofh_dirino fh_base.fh_old.fb_dirino 108: #define ofh_dev fh_base.fh_old.fb_dev 109: #define ofh_xdev fh_base.fh_old.fb_xdev 110: #define ofh_xino fh_base.fh_old.fb_xino 111: #define ofh_generation fh_base.fh_old.fb_generation 112: 113: #define fh_version fh_base.fh_new.fb_version 114: #define fh_fsid_type fh_base.fh_new.fb_fsid_type 115: #define fh_auth_type fh_base.fh_new.fb_auth_type 116: #define fh_fileid_type fh_base.fh_new.fb_fileid_type 117: #define fh_auth fh_base.fh_new.fb_auth 118: #define fh_fsid fh_base.fh_new.fb_auth 119: 120: 121: 122: #endif /* _LINUX_NFSD_FH_H */ 123: