from xdrlib2 import * from nfs2 import NFSFH, NFSFHField from sunrpc import RPCProgramDef, initializeProgram # Maximum bytes in a path name MNTPATHLEN = 1024 # Maximum bytes in a name MNTNAMLEN = 255 class DirPath (XDR_string): max = MNTPATHLEN class MntName (XDR_string): max = MNTNAMLEN class MountStat: MNT_OK = 0 # no error MNTERR_PERM = 1 # Not owner MNTERR_NOENT = 2 # No such file or directory MNTERR_IO = 5 # I/O error MNTERR_ACCESS = 13 # Permission denied MNTERR_NOTDIR = 20 # Not a directory MNTERR_INVAL = 22 # Invalid argument MNTERR_NAMETOOLONG = 63 # Filename too long MNTERR_NOTSUPP = 10004 # Operation not supported MNTERR_SERVERFAULT = 10006 # A failure on the server class Mount_V1_Program (RPCProgramDef): program = 100005 version = 1 procnames = { 0: 'null', 1: 'mnt', 2: 'dump', 3: 'umnt', 4: 'umntall', 5: 'export', } null_args = None null_res = None null_need_auth = 0 class mnt_args (XDRBase): __xdr_fields__ = ( DirPath('dirpath'), ) class mnt_resok (XDRBase): __xdr_fields__ = ( NFSFHField('fhandle'), XDR_array('auth_flavors', 'int'), ) class mnt_res (XDRBase): __xdr_fields__ = ( XDR_explicit_union('fhs_status', {MountStat.MNT_OK: XDR_struct('mountinfo', mnt_resok)} ), ) dump_args = None class MountBody (XDRBase): __xdr_fields__ = ( MntName('ml_hostname'), DirPath('ml_directory'), ) class dump_res (XDRBase): __xdr_fields__ = ( XDR_list('mountlist', MountBody), ) class umnt_args (XDRBase): __xdr_fields__ = ( DirPath('dirpath'), ) umnt_res = None umntall_args = None umntall_res = None export_args = None class ExportGroupNode (XDRBase): __xdr_fields__ = ( MntName('name'), ) class ExportNode (XDRBase): __xdr_fields__ = ( DirPath('dir'), XDR_list('groups', ExportGroupNode), ) class export_res (XDRBase): __xdr_fields__ = ( XDR_list('exports', ExportNode), ) initializeProgram(Mount_V1_Program, globals()) if __name__ == '__main__': l = list(Mount_V1_Program.procs.items()) l.sort() for item in l: print item from rpcserver import exportService, RPCServer exportService() server = RPCServer(5489) asyncore.loop()