from xdrlib2 import * from sunrpc import RPCProgramDef, initializeProgram # The maximum size in bytes of the opaque file handle. FHSIZE = 64 # The size in bytes of the opaque cookie verifier passed by # READDIR and READDIRPLUS. COOKIEVERFSIZE = 8 # The size in bytes of the opaque verifier used for # exclusive CREATE. CREATEVERFSIZE = 8 # The size in bytes of the opaque verifier used for # asynchronous WRITE. WRITEVERFSIZE = 8 # From NFS v2: ### The maximum number of bytes of data in a READ or WRITE ### request. ##MAXDATA = 8192 ### The maximum number of bytes in a pathname argument. ##MAXPATHLEN = 1024 ### The maximum number of bytes in a file name argument. ##MAXNAMLEN = 255 ### The size in bytes of the opaque "cookie" passed by READDIR. ##COOKIESIZE = 4 ### The size in bytes of the opaque file handle. ##FHSIZE = 32 class NFSFH (XDRBase): 'A file handle.' __xdr_fields__ = ( XDR_opaque('data', FHSIZE), ) def __init__(self, data): self.data = data NFSFHField = XDRFieldFactory(NFSFH) class FType (XDR_enum): NFSREG = 1 NFSDIR = 2 NFSBLK = 3 NFSCHR = 4 NFSLNK = 5 NFSSOCK = 6 NFSFIFO = 7 class Mode (XDR_uint32): pass class Filename (XDR_string): pass class NFSPath (XDR_string): pass class FileId (XDR_uint64): pass class Cookie (XDR_uint64): pass class CookieVerf (XDR_fopaque): size = COOKIEVERFSIZE class CreateVerf (XDR_fopaque): size = CREATEVERFSIZE class WriteVerf (XDR_fopaque): size = WRITEVERFSIZE class UID (XDR_uint32): pass class GID (XDR_uint32): pass class Size (XDR_uint64): pass class Offset (XDR_uint64): pass class Mode (XDR_uint32): pass class Count (XDR_uint32): pass class SpecData (XDRBase): __xdr_fields__ = ( XDR_uint32('specdata1'), XDR_uint32('specdata2'), ) SpecDataField = XDRFieldFactory(SpecData) class NFSTime (XDRBase): __xdr_fields__ = ( XDR_uint32('seconds'), XDR_uint32('nseconds'), ) NFSTimeField = XDRFieldFactory(NFSTime) class FAttr (XDRBase): __xdr_fields__ = ( FType('type'), Mode('mode'), XDR_uint('nlink'), UID('uid'), GID('uid'), Size('size'), Size('used'), SpecDataField('rdev'), XDR_uint64('fsid'), FileId('fileid'), NFSTimeField('atime'), NFSTimeField('mtime'), NFSTimeField('ctime'), ) FAttrField = XDRFieldFactory(FAttr) class PostOpAttr (XDRBase): __xdr_fields__ = ( XDR_explicit_union('attributes_follow', {1: FAttrField('attributes')} ), ) PostOpAttrField = XDRFieldFactory(PostOpAttr) class WCCAttr (XDRBase): __xdr_fields__ = ( Size('size'), NFSTimeField('mtime'), NFSTimeField('ctime'), ) class PreOpAttr (XDRBase): __xdr_fields__ = ( XDR_explicit_union('attributes_follow', {1: XDR_struct('attributes', WCCAttr)} ), ) class WCCData (XDRBase): __xdr_fields__ = ( XDR_struct('before', PreOpAttr), XDR_struct('after', PostOpAttr), ) WCCDataField = XDRFieldFactory(WCCData) class PostOpFH (XDRBase): __xdr_fields__ = ( XDR_explicit_union('handle_follows', {1: NFSFHField('handle')} ), ) PostOpFHField = XDRFieldFactory(PostOpFH) class TimeHow (XDR_enum): DONT_CHANGE = 0 SET_TO_SERVER_TIME = 1 SET_TO_CLIENT_TIME = 2 class SetMode (XDRBase): __xdr_fields__ = ( XDR_explicit_union('set_it', {1: Mode('mode')}), ) class SetUID (XDRBase): __xdr_fields__ = ( XDR_explicit_union('set_it', {1: UID('uid')}), ) class SetGID (XDRBase): __xdr_fields__ = ( XDR_explicit_union('set_it', {1: GID('gid')}), ) class SetSize (XDRBase): __xdr_fields__ = ( XDR_explicit_union('set_it', {1: Size('size')}), ) class SetATime (XDRBase): __xdr_fields__ = ( XDR_explicit_union('set_it', {TimeHow.SET_TO_CLIENT_TIME: NFSTimeField('atime')} ), ) class SetMTime (XDRBase): __xdr_fields__ = ( XDR_explicit_union('set_it', {TimeHow.SET_TO_CLIENT_TIME: NFSTimeField('mtime')} ), ) class SAttr (XDRBase): __xdr_fields__ = ( XDR_struct('mode', SetMode), XDR_struct('uid', SetUID), XDR_struct('gid', SetGID), XDR_struct('size', SetSize), XDR_struct('atime', SetATime), XDR_struct('mtime', SetMTime), ) SAttrField = XDRFieldFactory(SAttr) class SetAttrGuard (XDRBase): __xdr_fields__ = ( XDR_explicit_union('check', {1: NFSTimeField('obj_ctime')}), ) SetAttrGuardField = XDRFieldFactory(SetAttrGuard) class DirOpArgs (XDRBase): __xdr_fields__ = ( NFSFHField('dir'), Filename('name'), ) DirOpArgsField = XDRFieldFactory(DirOpArgs) class NFSStat (XDR_enum): NFS_OK = 0 NFSERR_PERM = 1 NFSERR_NOENT = 2 NFSERR_IO = 5 NFSERR_NXIO = 6 NFSERR_ACCES = 13 NFSERR_EXIST = 17 NFSERR_XDEV = 18 NFSERR_NODEV = 19 NFSERR_NOTDIR = 20 NFSERR_ISDIR = 21 NFSERR_INVAL = 22 NFSERR_FBIG = 27 NFSERR_NOSPC = 28 NFSERR_ROFS = 30 NFSERR_MLINK = 31 NFSERR_NAMETOOLONG = 63 NFSERR_NOTEMPTY = 66 NFSERR_DQUOT = 69 NFSERR_STALE = 70 NFSERR_REMOTE = 71 NFSERR_BADHANDLE = 10001 NFSERR_NOT_SYNC = 10002 NFSERR_BAD_COOKIE = 10003 NFSERR_NOTSUPP = 10004 NFSERR_TOOSMALL = 10005 NFSERR_SERVERFAULT = 10006 NFSERR_BADTYPE = 10007 NFSERR_JUKEBOX = 10008 class NFSStatusSwitchedUnion (XDROptUnion): __xdr_attrs__ = ('status', 'res') __xdr_classes__ = (None, None) #def __init__(self, status, *args, **kw): # apply(XDROptUnion.__init__, (self, status) + args, kw) def _getDataClass(self, status): klasses = self.__xdr_classes__ if status == NFSStatus.NFS_OK: return klasses[0] else: return klasses[1] class NFS_V3_Program (RPCProgramDef): program = 100003 version = 3 procnames = { 0: 'null', 1: 'getattr', 2: 'setattr', 3: 'lookup', 4: 'access', 5: 'readlink', 6: 'read', 7: 'write', 8: 'create', 9: 'mkdir', 10: 'symlink', 11: 'mknod', 12: 'remove', 13: 'rmdir', 14: 'rename', 15: 'link', 16: 'readdir', 17: 'readdirplus', 18: 'fsstat', 19: 'fsinfo', 20: 'pathconf', 21: 'commit', } null_need_auth = 0 null_args = None null_res = None class getattr_args (XDRBase): __xdr_fields__ = ( NFSFHField('handle'), ) class getattr_resok (XDRBase): __xdr_fields__ = ( FAttrField('obj_attributes'), ) class getattr_res (NFSStatusSwitchedUnion): __xdr_classes__ = (getattr_resok, None) class setattr_args (XDRBase): __xdr_fields__ = ( NFSFHField('handle'), SAttrField('new_attributes'), SetAttrGuardField('guard'), ) class setattr_resok (XDRBase): __xdr_fields__ = ( WCCDataField('obj_wcc'), ) class setattr_resfail (XDRBase): __xdr_fields__ = ( WCCDataField('obj_wcc'), ) class setattr_res (NFSStatusSwitchedUnion): __xdr_classes__ = (setattr_resok, setattr_resfail) class lookup_args (XDRBase): __xdr_fields__ = ( DirOpArgsField('what'), ) class lookup_resok (XDRBase): __xdr_fields__ = ( NFSFHField('object'), PostOpAttrField('obj_attributes'), PostOpAttrField('dir_attributes'), ) class lookup_resfail (XDRBase): __xdr_fields__ = ( PostOpAttrField('dir_attributes'), ) class lookup_res (NFSStatusSwitchedUnion): __xdr_classes__ = (lookup_resok, lookup_resfail) class AccessFlags (XDR_uint): ACCESS_READ = 0x0001 ACCESS_LOOKUP = 0x0002 ACCESS_MODIFY = 0x0004 ACCESS_EXTEND = 0x0008 ACCESS_DELETE = 0x0010 ACCESS_EXECUTE = 0x0020 class access_args (XDRBase): __xdr_fields__ = ( NFSFHField('object'), AccessFlags('access'), ) class access_resok (XDRBase): __xdr_fields__ = ( PostOpAttrField('obj_attributes'), AccessFlags('access'), ) class access_resfail (XDRBase): __xdr_fields__ = ( PostOpAttrField('obj_attributes'), ) class access_res (NFSStatusSwitchedUnion): __xdr_classes__ = (access_resok, access_resfail) class readlink_args (XDRBase): __xdr_fields__ = ( NFSFHField('symlink'), ) class readlink_resok (XDRBase): __xdr_fields__ = ( PostOpAttrField('symlink_attributes'), NFSPath('data'), ) class readlink_resfail (XDRBase): __xdr_fields__ = ( PostOpAttrField('symlink_attributes'), ) class readlink_res (NFSStatusSwitchedUnion): __xdr_classes__ = (readlink_resok, readlink_resfail) class read_args (XDRBase): __xdr_fields__ = ( NFSFHField('file'), Offset('offset'), Count('count'), ) class read_resok (XDRBase): __xdr_fields__ = ( PostOpAttrField('file_attributes'), Count('count'), XDR_bool('eof'), XDR_opaque('data'), ) class read_resfail (XDRBase): __xdr_fields__ = ( PostOpAttrField('file_attributes'), ) class read_res (NFSStatusSwitchedUnion): __xdr_classes__ = (read_resok, read_resfail) class StableHow (XDR_enum): UNSTABLE = 0 DATA_SYNC = 1 FILE_SYNC = 2 class write_args (XDRBase): __xdr_fields__ = ( NFSFHField('file'), Offset('offset'), Count('count'), StableHow('stable'), XDR_opaque('data'), ) class write_resok (XDRBase): __xdr_fields__ = ( WCCDataField('file_wcc'), Count('count'), StableHow('committed'), WriteVerf('verf'), ) class write_resfail (XDRBase): __xdr_fields__ = ( WCCDataField('file_wcc'), ) class write_res (NFSStatusSwitchedUnion): __xdr_classes__ = (write_resok, write_resfail) class Common_resok (XDRBase): __xdr_fields__ = ( PostOpFHField('obj'), PostOpAttrField('obj_attributes'), WCCDataField('dir_wcc'), ) class Common_resfail (XDRBase): __xdr_fields__ = ( WCCDataField('dir_wcc'), ) class Common_res (NFSStatusSwitchedUnion): __xdr_classes__ = (Common_resok, Common_resfail) class CreateMode (XDR_enum): UNCHECKED = 0 GUARDED = 1 EXCLUSIVE = 2 class CreateHow (XDRBase): __sattr = SAttrField('obj_attributes') __xdr_fields__ = ( XDR_explicit_union('mode', {CreateMode.UNCHECKED: __sattr, CreateMode.GUARDED: __sattr, CreateMode.EXCLUSIVE: CreateVerf('verf')}), ) class create_args (XDRBase): __xdr_fields__ = ( DirOpArgsField('where'), XDR_struct('how', CreateHow), ) create_res = Common_res class mkdir_args (XDRBase): __xdr_fields__ = ( DirOpArgsField('where'), SAttrField('attributes'), ) mkdir_res = Common_res class SymlinkData (XDRBase): __xdr_fields__ = ( SAttrField('symlink_attributes'), NFSPath('symlink_data'), ) class symlink_args (XDRBase): __xdr_fields__ = ( DirOpArgsField('where'), XDR_struct('symlink', SymlinkData), ) symlink_res = Common_res class DeviceData (XDRBase): __xdr_fields__ = ( SAttrField('dev_attributes'), SpecDataField('spec'), ) class MknodData (XDRBase): __deviceField = XDR_struct('device', DeviceData) __pipeField = SAttrField('pipe_attributes') __xdr_fields__ = ( XDR_explicit_union('type', {FType.NFSCHR: __deviceField, FType.NFSBLK: __deviceField, FType.NFSSOCK: __pipeField, FType.NFSFIFO: __pipeField, }), ) class mknod_args (XDRBase): __xdr_fields__ = ( DirOpArgsField('where'), XDR_struct('what', MknodData), ) mknod_res = Common_res class remove_args (XDRBase): __xdr_fields__ = ( DirOpArgsField('object'), ) class remove_resok (XDRBase): __xdr_fields__ = ( WCCDataField('dir_wcc'), ) class remove_resfail (XDRBase): __xdr_fields__ = ( WCCDataField('dir_wcc'), ) class remove_res (NFSStatusSwitchedUnion): __xdr_classes__ = (remove_resok, remove_resfail) rmdir_args = remove_args rmdir_res = remove_res class rename_args (XDRBase): __xdr_fields__ = ( DirOpArgsField('from'), DirOpArgsField('to'), ) class rename_resok (XDRBase): __xdr_fields__ = ( WCCDataField('fromdir_wcc'), WCCDataField('todir_wcc'), ) class rename_resfail (XDRBase): __xdr_fields__ = ( WCCDataField('fromdir_wcc'), WCCDataField('todir_wcc'), ) class rename_res (NFSStatusSwitchedUnion): __xdr_classes__ = (rename_resok, rename_resfail) class link_args (XDRBase): __xdr_fields__ = ( NFSFHField('file'), DirOpArgsField('link'), ) class link_resok (XDRBase): __xdr_fields__ = ( PostOpAttrField('file_attributes'), WCCDataField('linkdir_wcc'), ) class link_resfail (XDRBase): __xdr_fields__ = ( PostOpAttrField('file_attributes'), WCCDataField('linkdir_wcc'), ) class link_res (NFSStatusSwitchedUnion): __xdr_classes__ = (link_resok, link_resfail) class Entry (XDRBase): __xdr_fields__ = ( FileId('fileid'), Filename('name'), Cookie('cookie'), ) class DirList (XDRBase): __xdr_fields__ = ( XDR_list('entries', Entry), XDR_bool('eof'), ) class readdir_args (XDRBase): __xdr_fields__ = ( NFSFHField('dir'), Cookie('cookie'), CookieVerf('cookieverf'), Count('count'), ) class readdir_resok (XDRBase): __xdr_fields__ = ( PostOpAttrField('dir_attributes'), CookieVerf('cookieverf'), XDR_struct('reply', DirList), ) class readdir_resfail (XDRBase): __xdr_fields__ = ( PostOpAttrField('dir_attributes'), ) class readdir_res (NFSStatusSwitchedUnion): __xdr_classes__ = (readdir_resok, readdir_resfail) class EntryPlus (XDRBase): __xdr_fields__ = ( FileId('fileid'), Filename('name'), Cookie('cookie'), PostOpAttrField('name_attributes'), PostOpFHField('name_handle'), ) class DirListPlus (XDRBase): __xdr_fields__ = ( XDR_list('entries', EntryPlus), XDR_bool('eof'), ) class readdirplus_args (XDRBase): __xdr_fields__ = ( NFSFHField('dir'), Cookie('cookie'), CookieVerf('cookieverf'), Count('dircount'), Count('maxcount'), ) class readdirplus_resok (XDRBase): __xdr_fields__ = ( PostOpAttrField('dir_attributes'), CookieVerf('cookieverf'), XDR_struct('reply', DirListPlus), ) class readdirplus_resfail (XDRBase): __xdr_fields__ = ( PostOpAttrField('dir_attributes'), ) class readdirplus_res (NFSStatusSwitchedUnion): __xdr_classes__ = (readdirplus_resok, readdirplus_resfail) class fsstat_args (XDRBase): __xdr_fields__ = ( NFSFHField('fsroot'), ) class fsstat_resok (XDRBase): __xdr_fields__ = ( PostOpAttrField('obj_attributes'), Size('tbytes'), Size('fbytes'), Size('abytes'), Size('tfiles'), Size('ffiles'), Size('afiles'), XDR_uint32('invarsec'), ) class fsstat_resfail (XDRBase): __xdr_fields__ = ( PostOpAttrField('obj_attributes'), ) class fsstat_res (NFSStatusSwitchedUnion): __xdr_classes__ = (fsstat_resok, fsstat_resfail) class FSProperties (XDR_enum): FSF3_LINK = 0x0001 FSF3_SYMLINK = 0x0002 FSF3_HOMOGENEOUS = 0x0008 FSF3_CANSETTIME = 0x0010 class fsinfo_args (XDRBase): __xdr_fields__ = ( NFSFHField('fsroot'), ) class fsinfo_resok (XDRBase): __xdr_fields__ = ( PostOpAttrField('obj_attributes'), XDR_uint32('rtmax'), XDR_uint32('rtpref'), XDR_uint32('rtmult'), XDR_uint32('wtmax'), XDR_uint32('wtpref'), XDR_uint32('wtmult'), XDR_uint32('dtpref'), Size('maxfilesize'), NFSTimeField('time_delta'), FSProperties('properties'), ) class fsinfo_resfail (XDRBase): __xdr_fields__ = ( PostOpAttrField('obj_attributes'), ) class fsinfo_res (NFSStatusSwitchedUnion): __xdr_classes__ = (fsinfo_resok, fsinfo_resfail) class pathconf_args (XDRBase): __xdr_fields__ = ( NFSFHField('object'), ) class pathconf_resok (XDRBase): __xdr_fields__ = ( PostOpAttrField('obj_attributes'), XDR_uint32('linkmax'), XDR_uint32('name_max'), XDR_bool('no_trunc'), XDR_bool('chown_restricted'), XDR_bool('case_insensitive'), XDR_bool('case_preserving'), ) class pathconf_resfail (XDRBase): __xdr_fields__ = ( PostOpAttrField('obj_attributes'), ) class pathconf_res (NFSStatusSwitchedUnion): __xdr_classes__ = (pathconf_resok, pathconf_resfail) class commit_args (XDRBase): __xdr_fields__ = ( NFSFHField('file'), Offset('offset'), Count('count'), ) class commit_resok (XDRBase): __xdr_fields__ = ( WCCDataField('file_wcc'), WriteVerf('verf'), ) class commit_resfail (XDRBase): __xdr_fields__ = ( WCCDataField('file_wcc'), ) class commit_res (NFSStatusSwitchedUnion): __xdr_classes__ = (commit_resok, commit_resfail) initializeProgram(NFS_V3_Program, globals()) if __name__ == '__main__': l = list(NFS_V3_Program.procs.items()) l.sort() for item in l: print item