Current File : /home/mmdealscpanel/yummmdeals.com/rpc.tar
etc/rpc000064400000003142150330756570006041 0ustar00#ident	"@(#)rpc	1.11	95/07/14 SMI"	/* SVr4.0 1.2	*/
#
#	rpc
#
portmapper	100000	portmap sunrpc rpcbind
rstatd		100001	rstat rup perfmeter rstat_svc
rusersd		100002	rusers
nfs		100003	nfsprog
ypserv		100004	ypprog
mountd		100005	mount showmount
ypbind		100007
walld		100008	rwall shutdown
yppasswdd	100009	yppasswd
etherstatd	100010	etherstat
rquotad		100011	rquotaprog quota rquota
sprayd		100012	spray
3270_mapper	100013
rje_mapper	100014
selection_svc	100015	selnsvc
database_svc	100016
rexd		100017	rex
alis		100018
sched		100019
llockmgr	100020
nlockmgr	100021
x25.inr		100022
statmon		100023
status		100024
bootparam	100026
ypupdated	100028	ypupdate
keyserv		100029	keyserver
sunlink_mapper	100033
tfsd		100037
nsed		100038
nsemntd		100039
showfhd		100043	showfh
ioadmd		100055	rpc.ioadmd
NETlicense	100062
sunisamd	100065
debug_svc 	100066  dbsrv
ypxfrd		100069  rpc.ypxfrd
bugtraqd	100071
kerbd		100078
event		100101	na.event	# SunNet Manager
logger		100102	na.logger	# SunNet Manager
sync		100104	na.sync
hostperf	100107	na.hostperf
activity	100109	na.activity	# SunNet Manager
hostmem		100112	na.hostmem
sample		100113	na.sample
x25		100114	na.x25
ping		100115	na.ping
rpcnfs		100116	na.rpcnfs
hostif		100117	na.hostif
etherif		100118	na.etherif
iproutes	100120	na.iproutes
layers		100121	na.layers
snmp		100122	na.snmp snmp-cmc snmp-synoptics snmp-unisys snmp-utk
traffic		100123	na.traffic
nfs_acl		100227
sadmind		100232
nisd		100300	rpc.nisd
nispasswd	100303	rpc.nispasswdd
ufsd		100233	ufsd
fedfs_admin	100418
pcnfsd		150001	pcnfs
amd		300019  amq
sgi_fam		391002	fam
bwnfsd		545580417
fypxfrd		600100069 freebsd-ypxfrd
T.pyc000064400000001670150400401760005465 0ustar00�
��^c@s:ddlZddlZddlZd�Zd�ZdS(i����NcCs9tj�\}}}}||||tj�fadS(N(tosttimesttimett0(tutstcutcs((s"/usr/lib64/python2.7/Demo/rpc/T.pytTSTARTsc
Gs�tj�\}}}}||||tj�fag}x-td�D]}|jt|t|�qHW|\}}}d}x|D]}	||	d}q�W|d|||f}tjj	|�dS(Nitt s%r user, %r sys, %r real
(
RRRtt1trangetappendRtsyststderrtwrite(
tlabelRRRRttttitrtmsgtx((s"/usr/lib64/python2.7/Demo/rpc/T.pytTSTOPs
(RRRRR(((s"/usr/lib64/python2.7/Demo/rpc/T.pyt<module>s$	xdr.pyo000064400000017345150400401760006101 0ustar00�
��^c@s`yddlZWnek
r)dZnXed�Zddd��YZddd��YZdS(	i����NltPackercBs�eZd�Zd�Zd�Zd�ZerTejdd�dkrTd�ZneZeZ	d�Z
d	�ZeZd
�Z
d�Zd�ZeZd
�ZeZd�Zd�Zd�ZRS(cCs|j�dS(N(treset(tself((s$/usr/lib64/python2.7/Demo/rpc/xdr.pyt__init__scCs
d|_dS(Nt(tbuf(R((s$/usr/lib64/python2.7/Demo/rpc/xdr.pyRscCs|jS(N(R(R((s$/usr/lib64/python2.7/Demo/rpc/xdr.pytget_bufscCsl|jtt|d?d@��tt|d?d@��tt|d?d@��tt|d@��|_dS(Nii�ii(Rtchrtint(Rtx((s$/usr/lib64/python2.7/Demo/rpc/xdr.pyt	pack_uintstliscCsMt|�tkr-t|ddd�}n|jtjd|�|_dS(NllR(ttypetLongRRtstructtpack(RR	((s$/usr/lib64/python2.7/Demo/rpc/xdr.pyR
s
cCs-|r|jd|_n|jd|_dS(Nss(R(RR	((s$/usr/lib64/python2.7/Demo/rpc/xdr.pyt	pack_bool'scCs6|jt|d?d@��|jt|d@��dS(Ni I����(R
R(RR	((s$/usr/lib64/python2.7/Demo/rpc/xdr.pytpack_uhyper+scCs |jtjd|�|_dS(Ntf(RRR(RR	((s$/usr/lib64/python2.7/Demo/rpc/xdr.pyt
pack_float1scCs |jtjd|�|_dS(Ntd(RRR(RR	((s$/usr/lib64/python2.7/Demo/rpc/xdr.pytpack_double5scCs`|dkrtd�n|ddd}|| }||t|�d}|j||_dS(Nis fstring size must be nonnegativeiis(t
ValueErrortlenR(Rtntstdata((s$/usr/lib64/python2.7/Demo/rpc/xdr.pytpack_fstring9s
cCs-t|�}|j|�|j||�dS(N(RR
R(RRR((s$/usr/lib64/python2.7/Demo/rpc/xdr.pytpack_stringCs
cCs9x%|D]}|jd�||�qW|jd�dS(Nii(R
(Rtlistt	pack_itemtitem((s$/usr/lib64/python2.7/Demo/rpc/xdr.pyt	pack_listJs

cCs=t|�|krtd�nx|D]}||�q%WdS(Nswrong array size(RR(RRRRR((s$/usr/lib64/python2.7/Demo/rpc/xdr.pytpack_farrayPs
cCs0t|�}|j|�|j|||�dS(N(RR
R!(RRRR((s$/usr/lib64/python2.7/Demo/rpc/xdr.pyt
pack_arrayVs
(t__name__t
__module__RRRR
RRtpack_intt	pack_enumRRt
pack_hyperRRRtpack_fopaqueRtpack_opaqueR R!R"(((s$/usr/lib64/python2.7/Demo/rpc/xdr.pyR
s(												tUnpackercBs�eZd�Zd�Zd�Zd�ZerTejdd�dkrTd�Znd�ZeZ	eZ
d	�Zd
�Zd�Z
d�Zd
�ZeZd�ZeZd�Zd�Zd�ZRS(cCs|j|�dS(N(R(RR((s$/usr/lib64/python2.7/Demo/rpc/xdr.pyR^scCs||_d|_dS(Ni(Rtpos(RR((s$/usr/lib64/python2.7/Demo/rpc/xdr.pyRas	cCs(|jt|j�kr$td�ndS(Nsunextracted data remains(R+RRtRuntimeError(R((s$/usr/lib64/python2.7/Demo/rpc/xdr.pytdoneescCs�|j}|d|_}|j||!}t|�dkrEt�ntt|d��d>t|d�d>Bt|d�d>Bt|d�B}|d	kr�t|�}n|S(
Niiiiiiiil(R+RRtEOFErrortlongtordR(RtitjRR	((s$/usr/lib64/python2.7/Demo/rpc/xdr.pytunpack_uintis		LRsicCsU|j}|d|_}|j||!}t|�dkrEt�ntjd|�S(NiR(R+RRR.Rtunpack(RR1R2R((s$/usr/lib64/python2.7/Demo/rpc/xdr.pyR3vs		cCs/|j�}|dkr%|d}nt|�S(Nll(R3R(RR	((s$/usr/lib64/python2.7/Demo/rpc/xdr.pyt
unpack_int~s
cCs*|j�}|j�}t|�d>|BS(Ni (R3R/(Rthitlo((s$/usr/lib64/python2.7/Demo/rpc/xdr.pyt
unpack_uhyper�scCs)|j�}|dkr%|d}n|S(Nll(R8(RR	((s$/usr/lib64/python2.7/Demo/rpc/xdr.pytunpack_hyper�s
cCsY|j}|d|_}|j||!}t|�dkrEt�ntjd|�dS(NiRi(R+RRR.RR4(RR1R2R((s$/usr/lib64/python2.7/Demo/rpc/xdr.pytunpack_float�s		cCsY|j}|d|_}|j||!}t|�dkrEt�ntjd|�dS(NiRi(R+RRR.RR4(RR1R2R((s$/usr/lib64/python2.7/Demo/rpc/xdr.pyt
unpack_double�s		cCsp|dkrtd�n|j}||ddd}|t|j�krUt�n||_|j|||!S(Nis fstring size must be nonnegativeii(RR+RRR.(RRR1R2((s$/usr/lib64/python2.7/Demo/rpc/xdr.pytunpack_fstring�s			cCs|j�}|j|�S(N(R3R<(RR((s$/usr/lib64/python2.7/Demo/rpc/xdr.pyt
unpack_string�scCsbg}xU|j�}|dkr%Pn|dkrDtd|f�n|�}|j|�q	W|S(Niis0 or 1 expected, got %r(R3R,tappend(Rtunpack_itemRR	R((s$/usr/lib64/python2.7/Demo/rpc/xdr.pytunpack_list�s	cCs1g}x$t|�D]}|j|��qW|S(N(trangeR>(RRR?RR1((s$/usr/lib64/python2.7/Demo/rpc/xdr.pyt
unpack_farray�scCs|j�}|j||�S(N(R3RB(RR?R((s$/usr/lib64/python2.7/Demo/rpc/xdr.pytunpack_array�s(R#R$RRR-R3RR4R5tunpack_enumtunpack_boolR8R9R:R;R<tunpack_fopaqueR=t
unpack_opaqueR@RBRC(((s$/usr/lib64/python2.7/Demo/rpc/xdr.pyR*\s(												
			(((RtImportErrortNoneRR
RR*(((s$/usr/lib64/python2.7/Demo/rpc/xdr.pyt<module>s

Onfsclient.pyo000064400000015367150400401760007273 0ustar00�
��^c@s�ddlZddlmZmZddlmZmZmZdZdZdZ	dZ
dZdZdZ
d	Zd
Zdefd��YZd
efd��YZdefd��YZd�ZdS(i����N(t	UDPClientt	TCPClient(tFHSIZEtMountPackert
MountUnpackeri��iiiiiit	NFSPackercBs5eZd�Zd�Zd�Zd�Zd�ZRS(cCs*|\}}|j|�|j|�dS(N(tpack_fhandlet
pack_sattr(tselftsatfilet
attributes((s*/usr/lib64/python2.7/Demo/rpc/nfsclient.pytpack_sattrargss
cCsj|\}}}}}}|j|�|j|�|j|�|j|�|j|�|j|�dS(N(t	pack_uinttpack_timeval(RR	tmodetuidtgidtsizetatimetmtime((s*/usr/lib64/python2.7/Demo/rpc/nfsclient.pyR$s




cCs*|\}}|j|�|j|�dS(N(Rtpack_string(Rtdatdirtname((s*/usr/lib64/python2.7/Demo/rpc/nfsclient.pytpack_diropargs-s
cCs:|\}}}|j|�|j|�|j|�dS(N(RR
(RtraRtcookietcount((s*/usr/lib64/python2.7/Demo/rpc/nfsclient.pytpack_readdirargs2s

cCs*|\}}|j|�|j|�dS(N(R
(Rttvtsecstusecs((s*/usr/lib64/python2.7/Demo/rpc/nfsclient.pyR8s
(t__name__t
__module__RRRRR(((s*/usr/lib64/python2.7/Demo/rpc/nfsclient.pyRs
					tNFSUnpackercBs>eZd�Zd�Zd�Zd�Zd�Zd�ZRS(cCsU|j�}|tkrE|j|j�}|j�}||f}nd}||fS(N(tunpack_enumtNFS_OKtunpack_listtunpack_entrytunpack_booltNone(Rtstatustentriesteoftrest((s*/usr/lib64/python2.7/Demo/rpc/nfsclient.pytunpack_readdirres@scCs1|j�}|j�}|j�}|||fS(N(tunpack_uintt
unpack_string(RtfileidRR((s*/usr/lib64/python2.7/Demo/rpc/nfsclient.pyR'JscCsO|j�}|tkr?|j�}|j�}||f}nd}||fS(N(R$R%tunpack_fhandletunpack_fattrR)(RR*tfhtfaR-((s*/usr/lib64/python2.7/Demo/rpc/nfsclient.pytunpack_diropresPscCs7|j�}|tkr'|j�}nd}||fS(N(R$R%R3R)(RR*R((s*/usr/lib64/python2.7/Demo/rpc/nfsclient.pytunpack_attrstatZs
cCs�|j�}|j�}|j�}|j�}|j�}|j�}|j�}|j�}|j�}	|j�}
|j�}|j�}|j�}
|j�}|||||||||	|
|||
|fS(N(R$R/tunpack_timeval(RttypeRtnlinkRRRt	blocksizetrdevtblockstfsidR1RRtctime((s*/usr/lib64/python2.7/Demo/rpc/nfsclient.pyR3bs cCs"|j�}|j�}||fS(N(R/(RRR ((s*/usr/lib64/python2.7/Demo/rpc/nfsclient.pyR8ts(R!R"R.R'R6R7R3R8(((s*/usr/lib64/python2.7/Demo/rpc/nfsclient.pyR#>s	
		
		t	NFSClientcBsPeZd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Z	RS(cCstj||tt�dS(N(Rt__init__tNFS_PROGRAMtNFS_VERSION(Rthost((s*/usr/lib64/python2.7/Demo/rpc/nfsclient.pyRA|scCst�|_td�|_dS(Nt(RtpackerR#tunpacker(R((s*/usr/lib64/python2.7/Demo/rpc/nfsclient.pyt
addpackersscCs1|jdkr*tjtj�f|_n|jS(N(tcredR)trpct	AUTH_UNIXtmake_auth_unix_default(R((s*/usr/lib64/python2.7/Demo/rpc/nfsclient.pytmkcred�scCs"|jd||jj|jj�S(Ni(t	make_callRFRRGR7(RR4((s*/usr/lib64/python2.7/Demo/rpc/nfsclient.pytGetattr�s	cCs"|jd||jj|jj�S(Ni(RNRFRRGR7(RR	((s*/usr/lib64/python2.7/Demo/rpc/nfsclient.pytSetattr�s	cCs"|jd||jj|jj�S(Ni(RNRFRRGR6(RR((s*/usr/lib64/python2.7/Demo/rpc/nfsclient.pytLookup�s	cCs"|jd||jj|jj�S(Ni(RNRFRRGR.(RR((s*/usr/lib64/python2.7/Demo/rpc/nfsclient.pytReaddir�s	cCs�g}|ddf}x�|j|�\}}|tkr=Pn|\}}d}x0|D](\}	}
}|j|	|
f�|}qVW|s�|dkr�Pn|d||df}qW|S(Nii�i(RRR%R)tappend(RRtlistRR*R-R+R,tlast_cookieR1RR((s*/usr/lib64/python2.7/Demo/rpc/nfsclient.pytListdir�s
(
R!R"RARHRMRORPRQRRRV(((s*/usr/lib64/python2.7/Demo/rpc/nfsclient.pyR@zs							cCs#ddl}|jdr)|jd}nd}|jdrL|jd}nd}ddlm}m}||�}|dkr�|j�}x|D]}|GHq�WdS|j|�}|GH|d}	|	rt|�}
|
j	|	�}|GH|
j
|	�}x|D]}|GHqW|j|�ndS(Ni����iREi(tUDPMountClienttTCPMountClient(tsystargvR)tmountclientRWRXtExporttMntR@RORVtUmnt(RYRDtfilesysRWRXtmclRTtitemtsfR4tncltattrstat((s*/usr/lib64/python2.7/Demo/rpc/nfsclient.pyttest�s2


	

	(RJRRR[RRRRBRCR%tNFNONtNFREGtNFDIRtNFBLKtNFCHRtNFLNKRR#R@Re(((s*/usr/lib64/python2.7/Demo/rpc/nfsclient.pyt<module>	s!<9mountclient.pyc000064400000013120150400401760007614 0ustar00�
��^c@s�ddlZddlmZmZmZmZdZdZdZdefd��YZdefd	��YZ	d
dd��YZ
de
efd
��YZde
efd��YZd�Z
dS(i����N(tPackertUnpackert	TCPClientt	UDPClienti��ii tMountPackercBseZd�ZRS(cCs|jt|�dS(N(tpack_fopaquetFHSIZE(tselftfhandle((s,/usr/lib64/python2.7/Demo/rpc/mountclient.pytpack_fhandles(t__name__t
__module__R	(((s,/usr/lib64/python2.7/Demo/rpc/mountclient.pyRst
MountUnpackercBsGeZd�Zd�Zd�Zd�Zd�Zd�Zd�ZRS(cCs
|jt�S(N(tunpack_fopaqueR(R((s,/usr/lib64/python2.7/Demo/rpc/mountclient.pytunpack_fhandle*scCs7|j�}|dkr'|j�}nd}||fS(Ni(tunpack_uintRtNone(Rtstatustfh((s,/usr/lib64/python2.7/Demo/rpc/mountclient.pytunpack_fhstatus-s
cCs|j|j�S(N(tunpack_listtunpack_mountstruct(R((s,/usr/lib64/python2.7/Demo/rpc/mountclient.pytunpack_mountlist5scCs"|j�}|j�}||fS(N(t
unpack_string(Rthostnamet	directory((s,/usr/lib64/python2.7/Demo/rpc/mountclient.pyR8scCs|j|j�S(N(Rtunpack_exportstruct(R((s,/usr/lib64/python2.7/Demo/rpc/mountclient.pytunpack_exportlist=scCs"|j�}|j�}||fS(N(Rt
unpack_groups(Rtfilesystgroups((s,/usr/lib64/python2.7/Demo/rpc/mountclient.pyR@scCs|j|j�S(N(RR(R((s,/usr/lib64/python2.7/Demo/rpc/mountclient.pyREs(	R
RRRRRRRR(((s,/usr/lib64/python2.7/Demo/rpc/mountclient.pyR(s						tPartialMountClientcBsPeZd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Z	RS(cCst�|_td�|_dS(Nt(RtpackerRtunpacker(R((s,/usr/lib64/python2.7/Demo/rpc/mountclient.pyt
addpackersPscCsnddl}y|j�}Wntk
r5d}nX|dkrZtj|jd�}n|jjd�dS(Ni����iiR (R i(tostgetuidtAttributeErrortrpctbindresvporttsocktbind(RR$tuidtport((s,/usr/lib64/python2.7/Demo/rpc/mountclient.pyt
bindsocketXs

cCs1|jdkr*tjtj�f|_n|jS(N(tcredRR't	AUTH_UNIXtmake_auth_unix_default(R((s,/usr/lib64/python2.7/Demo/rpc/mountclient.pytmkcredfscCs"|jd||jj|jj�S(Ni(t	make_callR!tpack_stringR"R(RR((s,/usr/lib64/python2.7/Demo/rpc/mountclient.pytMnt�s	cCs|jddd|jj�S(Ni(R2RR"R(R((s,/usr/lib64/python2.7/Demo/rpc/mountclient.pytDump�scCs|jd||jjd�S(Ni(R2R!R3R(RR((s,/usr/lib64/python2.7/Demo/rpc/mountclient.pytUmnt�scCs|jdddd�S(Ni(R2R(R((s,/usr/lib64/python2.7/Demo/rpc/mountclient.pytUmntall�scCs|jddd|jj�S(Ni(R2RR"R(R((s,/usr/lib64/python2.7/Demo/rpc/mountclient.pytExport�s(
R
RR#R-R1R4R5R6R7R8(((s,/usr/lib64/python2.7/Demo/rpc/mountclient.pyRLs			#				tTCPMountClientcBseZd�ZRS(cCstj||tt�dS(N(Rt__init__t	MOUNTPROGt	MOUNTVERS(Rthost((s,/usr/lib64/python2.7/Demo/rpc/mountclient.pyR:�s(R
RR:(((s,/usr/lib64/python2.7/Demo/rpc/mountclient.pyR9�stUDPMountClientcBseZd�ZRS(cCstj||tt�dS(N(RR:R;R<(RR=((s,/usr/lib64/python2.7/Demo/rpc/mountclient.pyR:�s(R
RR:(((s,/usr/lib64/python2.7/Demo/rpc/mountclient.pyR>�scCsddl}|jdr?|jddkr?t}|jd=n9|jdrr|jddkrrt}|jd=nt}|jdr�|jd}nd}||�}|j�}xK|D]C}|GHy|j|d�WndGHq�nX|j|d�q�WdS(Ni����is-ts-uR itSorry(tsystargvR9R>R8R4R6(R@tCR=tmcltlisttitem((s,/usr/lib64/python2.7/Demo/rpc/mountclient.pyttest�s* 
 


((R'RRRRR;R<RRRRR9R>RF(((s,/usr/lib64/python2.7/Demo/rpc/mountclient.pyt<module>s"
$Wmountclient.py000064400000014750150400401760007463 0ustar00# Mount RPC client -- RFC 1094 (NFS), Appendix A

# This module demonstrates how to write your own RPC client in Python.
# When this example was written, there was no RPC compiler for
# Python. Without such a compiler, you must first create classes
# derived from Packer and Unpacker to handle the data types for the
# server you want to interface to.  You then write the client class.
# If you want to support both the TCP and the UDP version of a
# protocol, use multiple inheritance as shown below.


import rpc
from rpc import Packer, Unpacker, TCPClient, UDPClient


# Program number and version for the mount protocol
MOUNTPROG = 100005
MOUNTVERS = 1

# Size of the 'fhandle' opaque structure
FHSIZE = 32


# Packer derived class for Mount protocol clients.
# The only thing we need to pack beyond basic types is an 'fhandle'

class MountPacker(Packer):

    def pack_fhandle(self, fhandle):
        self.pack_fopaque(FHSIZE, fhandle)


# Unpacker derived class for Mount protocol clients.
# The important types we need to unpack are fhandle, fhstatus,
# mountlist and exportlist; mountstruct, exportstruct and groups are
# used to unpack components of mountlist and exportlist and the
# corresponding functions are passed as function argument to the
# generic unpack_list function.

class MountUnpacker(Unpacker):

    def unpack_fhandle(self):
        return self.unpack_fopaque(FHSIZE)

    def unpack_fhstatus(self):
        status = self.unpack_uint()
        if status == 0:
            fh = self.unpack_fhandle()
        else:
            fh = None
        return status, fh

    def unpack_mountlist(self):
        return self.unpack_list(self.unpack_mountstruct)

    def unpack_mountstruct(self):
        hostname = self.unpack_string()
        directory = self.unpack_string()
        return (hostname, directory)

    def unpack_exportlist(self):
        return self.unpack_list(self.unpack_exportstruct)

    def unpack_exportstruct(self):
        filesys = self.unpack_string()
        groups = self.unpack_groups()
        return (filesys, groups)

    def unpack_groups(self):
        return self.unpack_list(self.unpack_string)


# These are the procedures specific to the Mount client class.
# Think of this as a derived class of either TCPClient or UDPClient.

class PartialMountClient:

    # This method is called by Client.__init__ to initialize
    # self.packer and self.unpacker
    def addpackers(self):
        self.packer = MountPacker()
        self.unpacker = MountUnpacker('')

    # This method is called by Client.__init__ to bind the socket
    # to a particular network interface and port.  We use the
    # default network interface, but if we're running as root,
    # we want to bind to a reserved port
    def bindsocket(self):
        import os
        try:
            uid = os.getuid()
        except AttributeError:
            uid = 1
        if uid == 0:
            port = rpc.bindresvport(self.sock, '')
            # 'port' is not used
        else:
            self.sock.bind(('', 0))

    # This function is called to cough up a suitable
    # authentication object for a call to procedure 'proc'.
    def mkcred(self):
        if self.cred is None:
            self.cred = rpc.AUTH_UNIX, rpc.make_auth_unix_default()
        return self.cred

    # The methods Mnt, Dump etc. each implement one Remote
    # Procedure Call.  This is done by calling self.make_call()
    # with as arguments:
    #
    # - the procedure number
    # - the arguments (or None)
    # - the "packer" function for the arguments (or None)
    # - the "unpacker" function for the return value (or None)
    #
    # The packer and unpacker function, if not None, *must* be
    # methods of self.packer and self.unpacker, respectively.
    # A value of None means that there are no arguments or is no
    # return value, respectively.
    #
    # The return value from make_call() is the return value from
    # the remote procedure call, as unpacked by the "unpacker"
    # function, or None if the unpacker function is None.
    #
    # (Even if you expect a result of None, you should still
    # return the return value from make_call(), since this may be
    # needed by a broadcasting version of the class.)
    #
    # If the call fails, make_call() raises an exception
    # (this includes time-outs and invalid results).
    #
    # Note that (at least with the UDP protocol) there is no
    # guarantee that a call is executed at most once.  When you do
    # get a reply, you know it has been executed at least once;
    # when you don't get a reply, you know nothing.

    def Mnt(self, directory):
        return self.make_call(1, directory, \
                self.packer.pack_string, \
                self.unpacker.unpack_fhstatus)

    def Dump(self):
        return self.make_call(2, None, \
                None, self.unpacker.unpack_mountlist)

    def Umnt(self, directory):
        return self.make_call(3, directory, \
                self.packer.pack_string, None)

    def Umntall(self):
        return self.make_call(4, None, None, None)

    def Export(self):
        return self.make_call(5, None, \
                None, self.unpacker.unpack_exportlist)


# We turn the partial Mount client into a full one for either protocol
# by use of multiple inheritance.  (In general, when class C has base
# classes B1...Bn, if x is an instance of class C, methods of x are
# searched first in C, then in B1, then in B2, ..., finally in Bn.)

class TCPMountClient(PartialMountClient, TCPClient):

    def __init__(self, host):
        TCPClient.__init__(self, host, MOUNTPROG, MOUNTVERS)


class UDPMountClient(PartialMountClient, UDPClient):

    def __init__(self, host):
        UDPClient.__init__(self, host, MOUNTPROG, MOUNTVERS)


# A little test program for the Mount client.  This takes a host as
# command line argument (default the local machine), prints its export
# list, and attempts to mount and unmount each exported files system.
# An optional first argument of -t or -u specifies the protocol to use
# (TCP or UDP), default is UDP.

def test():
    import sys
    if sys.argv[1:] and sys.argv[1] == '-t':
        C = TCPMountClient
        del sys.argv[1]
    elif sys.argv[1:] and sys.argv[1] == '-u':
        C = UDPMountClient
        del sys.argv[1]
    else:
        C = UDPMountClient
    if sys.argv[1:]: host = sys.argv[1]
    else: host = ''
    mcl = C(host)
    list = mcl.Export()
    for item in list:
        print item
        try:
            mcl.Mnt(item[0])
        except:
            print 'Sorry'
            continue
        mcl.Umnt(item[0])
mountclient.pyo000064400000013120150400401760007630 0ustar00�
��^c@s�ddlZddlmZmZmZmZdZdZdZdefd��YZdefd	��YZ	d
dd��YZ
de
efd
��YZde
efd��YZd�Z
dS(i����N(tPackertUnpackert	TCPClientt	UDPClienti��ii tMountPackercBseZd�ZRS(cCs|jt|�dS(N(tpack_fopaquetFHSIZE(tselftfhandle((s,/usr/lib64/python2.7/Demo/rpc/mountclient.pytpack_fhandles(t__name__t
__module__R	(((s,/usr/lib64/python2.7/Demo/rpc/mountclient.pyRst
MountUnpackercBsGeZd�Zd�Zd�Zd�Zd�Zd�Zd�ZRS(cCs
|jt�S(N(tunpack_fopaqueR(R((s,/usr/lib64/python2.7/Demo/rpc/mountclient.pytunpack_fhandle*scCs7|j�}|dkr'|j�}nd}||fS(Ni(tunpack_uintRtNone(Rtstatustfh((s,/usr/lib64/python2.7/Demo/rpc/mountclient.pytunpack_fhstatus-s
cCs|j|j�S(N(tunpack_listtunpack_mountstruct(R((s,/usr/lib64/python2.7/Demo/rpc/mountclient.pytunpack_mountlist5scCs"|j�}|j�}||fS(N(t
unpack_string(Rthostnamet	directory((s,/usr/lib64/python2.7/Demo/rpc/mountclient.pyR8scCs|j|j�S(N(Rtunpack_exportstruct(R((s,/usr/lib64/python2.7/Demo/rpc/mountclient.pytunpack_exportlist=scCs"|j�}|j�}||fS(N(Rt
unpack_groups(Rtfilesystgroups((s,/usr/lib64/python2.7/Demo/rpc/mountclient.pyR@scCs|j|j�S(N(RR(R((s,/usr/lib64/python2.7/Demo/rpc/mountclient.pyREs(	R
RRRRRRRR(((s,/usr/lib64/python2.7/Demo/rpc/mountclient.pyR(s						tPartialMountClientcBsPeZd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Z	RS(cCst�|_td�|_dS(Nt(RtpackerRtunpacker(R((s,/usr/lib64/python2.7/Demo/rpc/mountclient.pyt
addpackersPscCsnddl}y|j�}Wntk
r5d}nX|dkrZtj|jd�}n|jjd�dS(Ni����iiR (R i(tostgetuidtAttributeErrortrpctbindresvporttsocktbind(RR$tuidtport((s,/usr/lib64/python2.7/Demo/rpc/mountclient.pyt
bindsocketXs

cCs1|jdkr*tjtj�f|_n|jS(N(tcredRR't	AUTH_UNIXtmake_auth_unix_default(R((s,/usr/lib64/python2.7/Demo/rpc/mountclient.pytmkcredfscCs"|jd||jj|jj�S(Ni(t	make_callR!tpack_stringR"R(RR((s,/usr/lib64/python2.7/Demo/rpc/mountclient.pytMnt�s	cCs|jddd|jj�S(Ni(R2RR"R(R((s,/usr/lib64/python2.7/Demo/rpc/mountclient.pytDump�scCs|jd||jjd�S(Ni(R2R!R3R(RR((s,/usr/lib64/python2.7/Demo/rpc/mountclient.pytUmnt�scCs|jdddd�S(Ni(R2R(R((s,/usr/lib64/python2.7/Demo/rpc/mountclient.pytUmntall�scCs|jddd|jj�S(Ni(R2RR"R(R((s,/usr/lib64/python2.7/Demo/rpc/mountclient.pytExport�s(
R
RR#R-R1R4R5R6R7R8(((s,/usr/lib64/python2.7/Demo/rpc/mountclient.pyRLs			#				tTCPMountClientcBseZd�ZRS(cCstj||tt�dS(N(Rt__init__t	MOUNTPROGt	MOUNTVERS(Rthost((s,/usr/lib64/python2.7/Demo/rpc/mountclient.pyR:�s(R
RR:(((s,/usr/lib64/python2.7/Demo/rpc/mountclient.pyR9�stUDPMountClientcBseZd�ZRS(cCstj||tt�dS(N(RR:R;R<(RR=((s,/usr/lib64/python2.7/Demo/rpc/mountclient.pyR:�s(R
RR:(((s,/usr/lib64/python2.7/Demo/rpc/mountclient.pyR>�scCsddl}|jdr?|jddkr?t}|jd=n9|jdrr|jddkrrt}|jd=nt}|jdr�|jd}nd}||�}|j�}xK|D]C}|GHy|j|d�WndGHq�nX|j|d�q�WdS(Ni����is-ts-uR itSorry(tsystargvR9R>R8R4R6(R@tCR=tmcltlisttitem((s,/usr/lib64/python2.7/Demo/rpc/mountclient.pyttest�s* 
 


((R'RRRRR;R<RRRRR9R>RF(((s,/usr/lib64/python2.7/Demo/rpc/mountclient.pyt<module>s"
$Wrpc.pyc000064400000073346150400401760006057 0ustar00�
��^c@s=ddlZddlZddlZdZdZdZdZdZdZdZ	dZ
dZdZdZ
dZdZdZdZdZdZdZdZdZdZdejfd	��YZd
efd��YZdefd
��YZdefd��YZdejfd��YZd�Zd�Zd�Z da!d�Z"ddCd��YZ#d�Z$d�Z%d�Z&d�Z'da)d�Z*de#fd��YZ+de#fd ��YZ,d!e,fd"��YZ-d#Z.dZ/d$Z0dZ1dZ2dZ3dZ4dZ5dZ6d%Z7d&Z8d'efd(��YZ9d)efd*��YZ:d+dDd,��YZ;d-e;e+fd.��YZ<d/e;e,fd0��YZ=d1e;e-fd2��YZ>d3e+fd4��YZ?d5e,fd6��YZ@d7e#fd8��YZAd9dEd:��YZBd;eBfd<��YZCd=eBfd>��YZDd?�ZEd@�ZFdA�ZGdB�ZHdS(Fi����NiiiiiitPackercBs,eZd�Zd�Zd�Zd�ZRS(cCs*|\}}|j|�|j|�dS(N(t	pack_enumtpack_opaque(tselftauthtflavortstuff((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyt	pack_auth0s
cCsi|j|�|j|�|j|�|j|�|jt|��x|D]}|j|�qNWdS(N(t	pack_uinttpack_stringtlen(Rtstamptmachinenametuidtgidtgidsti((s$/usr/lib64/python2.7/Demo/rpc/rpc.pytpack_auth_unix5s




cCsl|j|�|jt�|jt�|j|�|j|�|j|�|j|�|j|�dS(N(RRtCALLt
RPCVERSIONR(Rtxidtprogtverstproctcredtverf((s$/usr/lib64/python2.7/Demo/rpc/rpc.pytpack_callheader>s






cCsE|j|�|jt�|jt�|j|�|jt�dS(N(RRtREPLYtMSG_ACCEPTEDRtSUCCESS(RRR((s$/usr/lib64/python2.7/Demo/rpc/rpc.pytpack_replyheaderIs




(t__name__t
__module__RRRR(((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyR.s				tBadRPCFormatcBseZRS((RR (((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyR!Sst
BadRPCVersioncBseZRS((RR (((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyR"TstGarbageArgscBseZRS((RR (((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyR#UstUnpackercBs#eZd�Zd�Zd�ZRS(cCs"|j�}|j�}||fS(N(tunpack_enumt
unpack_opaque(RRR((s$/usr/lib64/python2.7/Demo/rpc/rpc.pytunpack_authYscCs�|j�}|j�}|tkr7td|f�n|j�}|tkrbtd|f�n|j�}|j�}|j�}|j�}|j�}||||||fS(Nsno CALL but %rsbad RPC version %r(tunpack_uintR%RR!RR"R'(RRttempRRRRR((s$/usr/lib64/python2.7/Demo/rpc/rpc.pytunpack_callheader^scCs�|j�}|j�}|tkr7td|f�n|j�}|tkr�|j�}|tkr�|j�}|j�}td||ff�n|tkr�|j�}td|f�ntd|f�n|tkr�td|f�n|j�}|j�}|t	kr%td�n|t
krb|j�}|j�}td||ff�n|tkrztd�n|tkr�td	�n|t
kr�td
|f�n||fS(Nsno REPLY but %rsMSG_DENIED: RPC_MISMATCH: %rsMSG_DENIED: AUTH_ERROR: %rsMSG_DENIED: %rs'Neither MSG_DENIED nor MSG_ACCEPTED: %rscall failed: PROG_UNAVAILscall failed: PROG_MISMATCH: %rscall failed: PROC_UNAVAILscall failed: GARBAGE_ARGSscall failed: %r(R(R%RtRuntimeErrort
MSG_DENIEDtRPC_MISMATCHt
AUTH_ERRORRR'tPROG_UNAVAILt
PROG_MISMATCHtPROC_UNAVAILtGARBAGE_ARGSR(RRtmtypetstattlowthighR((s$/usr/lib64/python2.7/Demo/rpc/rpc.pytunpack_replyheadernsH(RR R'R*R7(((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyR$Ws		cCsdS(Nt((((s$/usr/lib64/python2.7/Demo/rpc/rpc.pytmake_auth_null�scCs,t�}|j|||||�|j�S(N(RRtget_buf(tseedthostR
Rtgroupstp((s$/usr/lib64/python2.7/Demo/rpc/rpc.pytmake_auth_unix�s	cCs�y,ddlm}m}|�}|�}Wntk
rId}}nXddl}tt|j�t��tj	�||g�S(Ni����(tgetuidtgetgidi(
tosR@RAtImportErrorttimeR?tintt
unix_epochtsockettgethostname(R@RAR
RRD((s$/usr/lib64/python2.7/Demo/rpc/rpc.pytmake_auth_unix_default�s	

c
CstdkrtSddl}|j�}|j|�}|j|�}|j|�|j|�}d	\}}}}}	}
t|
|d�\}}
t|	|d�\}}	t||d�\}}||}|j|||||	|
dddf	�adG|jt�GHtS(
s9Very painful calculation of when the Unix Epoch is.

    This is defined as the return value of time.time() on Jan 1st,
    1970, 00:00:00 GMT.

    On a Unix system, this should always return 0.0.  On a Mac, the
    calculations are needed -- and hard because of integer overflow
    and other limitations.

    ii����Ni�ii<isUnix epoch:(i�iiiii(t_unix_epochRDt	localtimetgmtimetmktimetdivmodtctime(RDtnowtlocalttgmttoffsettytmtdthhtmmtss((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyRF�s
*tClientcBsteZd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zd
�Zd�Z
RS(cCsk||_||_||_||_|j�|j�|j�d|_|j�d|_
d|_dS(Ni(R<RRtportt
makesockett
bindsockett
connsockettlastxidt
addpackerstNoneRR(RR<RRR[((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyt__init__�s				


	
	cCs|jj�dS(N(tsocktclose(R((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyRd�scCs
td�dS(Nsmakesocket not defined(R+(R((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyR\�scCs |jj|j|jf�dS(N(RctconnectR<R[(R((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyR^�scCs|jjd�dS(NR8i(R8i(Rctbind(R((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyR]�scCst�|_td�|_dS(NR8(RtpackerR$tunpacker(R((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyR`�scCsw|dkr$|dk	r$td�n|j|�|rD||�n|j�|r`|�}nd}|jj�|S(Ns!non-null args with null pack_func(Rat	TypeErrort
start_calltdo_callRhtdone(RRtargst	pack_functunpack_functresult((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyt	make_call�s



cCse|jd|_}|j�}|j�}|j}|j�|j||j|j|||�dS(Ni(R_tmkcredtmkverfRgtresetRRR(RRRRRR>((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyRj�s	
cCs
td�dS(Nsdo_call not defined(R+(R((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyRkscCs+|jdkr$tt�f|_n|jS(N(RRat	AUTH_NULLR9(R((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyRr	scCs+|jdkr$tt�f|_n|jS(N(RRaRuR9(R((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyRsscCs|jdddd�S(Ni(RqRa(R((s$/usr/lib64/python2.7/Demo/rpc/rpc.pytcall_0s(RR RbRdR\R^R]R`RqRjRkRrRsRv(((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyRZ�s	
											cCs�t|�}|r|dB}ntt|d?d@��tt|d?d@��tt|d?d@��tt|d@��}|j||�dS(Nlii�ii(R
tchrREtsend(Rctlasttfragtxtheader((s$/usr/lib64/python2.7/Demo/rpc/rpc.pytsendfrags

^cCst|d|�dS(Ni(R}(Rctrecord((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyt
sendrecord"scCs�|jd�}t|�dkr*t�ntt|d��d>t|d�d>Bt|d�d>Bt|d�B}|d	@dk}t|d
@�}d}xH|dkr�|j|�}|s�t�n|t|�}||}q�W||fS(NiiiiiiiiI�i���R8(trecvR
tEOFErrortlongtordRE(RcR|R{RytnRztbuf((s$/usr/lib64/python2.7/Demo/rpc/rpc.pytrecvfrag%s	L	cCs9d}d}x&|s4t|�\}}||}qW|S(NR8i(R�(RcR~RyRz((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyt
recvrecord5s	cCs�d\}}tdkr?ddl}||j�||anx�tt|�t|t�D]g}|ay|j||f�tSWq\tjk
r�\}}|dkr�tj||f�q�q\Xq\Wtd�dS(NiXii����irscan't assign reserved port(iXi(	tlast_resv_port_triedRaRBtgetpidtrangeRfRGterrorR+(RcR<tFIRSTtLASTRBRterrnotmsg((s$/usr/lib64/python2.7/Demo/rpc/rpc.pytbindresvportAstRawTCPClientcBseZd�Zd�ZRS(cCstjtjtj�|_dS(N(RGtAF_INETtSOCK_STREAMRc(R((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyR\WscCs�|jj�}t|j|�t|j�}|j}|j|�|j�\}}||jkr~t	d||jf�ndS(Ns#wrong xid in reply %r instead of %r(
RgR:RRcR�RhRtR7R_R+(RtcalltreplytuRR((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyRkZs	
(RR R\Rk(((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyR�Us	tRawUDPClientcBseZd�Zd�ZRS(cCstjtjtj�|_dS(N(RGR�t
SOCK_DGRAMRc(R((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyR\ksc
Cs`|jj�}|jj|�yddlm}Wntk
rQdGHd}nXd}d}d}x�|jggg}}}|r�|||||�\}}}n|j|kr|d}|dkr�td�n|d	kr�|d
}n|jj|�qgn|jj|�}	|j	}
|
j
|	�|
j�\}}||jkrWqgnPqgWdS(Ni����(tselects'WARNING: select not found, RPC may hangi iiittimeoutii(
RgR:RcRxR�RCRaR+R�RhRtR7R_(
RR�R�tBUFSIZER�tcounttrtwR{R�R�RR((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyRkns:

!

	
(RR R\Rk(((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyR�is	tRawBroadcastUDPClientcBs5eZd�Zd�Zd�Zd�Zd�ZRS(cCs/tj|||||�d|_d|_dS(Ni(R�RbRat
reply_handlerR�(Rt	bcastaddrRRR[((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyRb�s	cCs |jjtjtjd�dS(Ni(Rct
setsockoptRGt
SOL_SOCKETtSO_BROADCAST(R((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyR^�scCs
||_dS(N(R�(RR�((s$/usr/lib64/python2.7/Demo/rpc/rpc.pytset_reply_handler�scCs
||_dS(N(R�(RR�((s$/usr/lib64/python2.7/Demo/rpc/rpc.pytset_timeout�scCs�|dkr$|dk	r$td�n|j|�|rD||�n|jj�}|jj||j|jf�yddl	m	}Wnt
k
r�dGHd}nXd}g}|dkr�d�}	|	}nx"|jggg}
}}|rC|jdkr||
||�\}
}}qC||
|||j�\}
}}n|j|
krVPn|jj|�\}
}|j
}|j|
�|j�\}}||jkr�q�n|�}
|j
j�|j|
|f�|jr�|j|
|�q�q�W|S(Ns!non-null args with null pack_funci����(R�s.WARNING: select not found, broadcast will hangi cSsdS(N((((s$/usr/lib64/python2.7/Demo/rpc/rpc.pytdummy�R8(RaRiRjRgR:RctsendtoR<R[R�RCR�trecvfromRhRtR7R_RltappendR�(RRRmRnRoR�R�R�trepliesR�R�R�R{R�tfromaddrR�RR((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyRq�sJ



		$	
	
	(RR RbR^R�R�Rq(((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyR��s
				i��ioiitPortMapperPackercBs#eZd�Zd�Zd�ZRS(cCsJ|\}}}}|j|�|j|�|j|�|j|�dS(N(R(RtmappingRRtprotR[((s$/usr/lib64/python2.7/Demo/rpc/rpc.pytpack_mapping�s



cCs|j||j�dS(N(t	pack_listR�(Rtlist((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyt
pack_pmaplist�scCsJ|\}}}}|j|�|j|�|j|�|j|�dS(N(RR(RtcaRRRRm((s$/usr/lib64/python2.7/Demo/rpc/rpc.pytpack_call_args�s



(RR R�R�R�(((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyR��s		tPortMapperUnpackercBs#eZd�Zd�Zd�ZRS(cCs@|j�}|j�}|j�}|j�}||||fS(N(R((RRRR�R[((s$/usr/lib64/python2.7/Demo/rpc/rpc.pytunpack_mapping�s
cCs|j|j�S(N(tunpack_listR�(R((s$/usr/lib64/python2.7/Demo/rpc/rpc.pytunpack_pmaplistscCs"|j�}|j�}||fS(N(R(R&(RR[tres((s$/usr/lib64/python2.7/Demo/rpc/rpc.pytunpack_call_results(RR R�R�R�(((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyR��s		tPartialPortMapperClientcBs>eZd�Zd�Zd�Zd�Zd�Zd�ZRS(cCst�|_td�|_dS(NR8(R�RgR�Rh(R((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyR`scCs"|jt||jj|jj�S(N(RqtPMAPPROC_SETRgR�RhR((RR�((s$/usr/lib64/python2.7/Demo/rpc/rpc.pytSets	cCs"|jt||jj|jj�S(N(RqtPMAPPROC_UNSETRgR�RhR((RR�((s$/usr/lib64/python2.7/Demo/rpc/rpc.pytUnsets	cCs"|jt||jj|jj�S(N(RqtPMAPPROC_GETPORTRgR�RhR((RR�((s$/usr/lib64/python2.7/Demo/rpc/rpc.pytGetports	cCs|jtdd|jj�S(N(Rqt
PMAPPROC_DUMPRaRhR�(R((s$/usr/lib64/python2.7/Demo/rpc/rpc.pytDump!scCs"|jt||jj|jj�S(N(RqtPMAPPROC_CALLITRgR�RhR�(RR�((s$/usr/lib64/python2.7/Demo/rpc/rpc.pytCallit&s	(RR R`R�R�R�R�R�(((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyR�s					tTCPPortMapperClientcBseZd�ZRS(cCstj||ttt�dS(N(R�Rbt	PMAP_PROGt	PMAP_VERSt	PMAP_PORT(RR<((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyRb.s	(RR Rb(((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyR�,stUDPPortMapperClientcBseZd�ZRS(cCstj||ttt�dS(N(R�RbR�R�R�(RR<((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyRb5s	(RR Rb(((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyR�3stBroadcastUDPPortMapperClientcBseZd�ZRS(cCstj||ttt�dS(N(R�RbR�R�R�(RR�((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyRb=s	(RR Rb(((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyR�:st	TCPClientcBseZd�ZRS(cCsft|�}|j||tdf�}|j�|dkrItd�ntj|||||�dS(Nisprogram not registered(R�R�tIPPROTO_TCPRdR+R�Rb(RR<RRtpmapR[((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyRbFs
(RR Rb(((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyR�Dst	UDPClientcBseZd�ZRS(cCsft|�}|j||tdf�}|j�|dkrItd�ntj|||||�dS(Nisprogram not registered(R�R�tIPPROTO_UDPRdR+R�Rb(RR<RRR�R[((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyRbQs
(RR Rb(((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyR�OstBroadcastUDPClientcBs>eZd�Zd�Zd�Zd�Zd�Zd�ZRS(cCsKt|�|_|jj|j�||_||_d|_|j�dS(N(	R�R�R�tmy_reply_handlerRRRatuser_reply_handlerR`(RR�RR((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyRb\s			cCs|jj�dS(N(R�Rd(R((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyRddscCs
||_dS(N(R�(RR�((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyR�gscCs|jj|�dS(N(R�R�(RR�((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyR�jscCsq|\}}|jj|�|j�}|jj�|jj||f�|jdk	rm|j||�ndS(N(RhRtRoRlR�R�R�Ra(RR�R�R[R�Rp((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyR�ms
cCs�|jj�|r ||�n|dkrAd�}||_n	||_g|_|jj�}|jj|j|j	||f�}|jS(NcSsdS(N((((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyR�{R8(
RgRtRaRoR�R:R�R�RR(RRRmRnRoR�tpacked_argst
dummy_replies((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyRqvs

				(RR RbRdR�R�R�Rq(((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyR�Zs						tServercBsYeZd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
RS(	cCsa||_||_||_||_|j�|j�|jj�\|_|_|j�dS(N(	R<RRR[R\R]RctgetsocknameR`(RR<RRR[((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyRb�s				

cCsL|j|j|j|jf}t|j�}|j|�sHtd�ndS(Nsregister failed(RRR�R[R�R<R�R+(RR�R>((s$/usr/lib64/python2.7/Demo/rpc/rpc.pytregister�scCsL|j|j|j|jf}t|j�}|j|�sHtd�ndS(Nsunregister failed(RRR�R[R�R<R�R+(RR�R>((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyt
unregister�scCs�|jj|�|jj�|jj�}|jj|�|jj�}|tkr[dS|jjt�|jj�}|t	kr�|jjt
�|jjt�|jjt	�|jjt	�|jj�S|jjt
�|jjtt�f�|jj�}||jkr7|jjt�|jj�S|jj�}||jkr�|jjt�|jj|j�|jj|j�|jj�S|jj�}dt|�}yt||�}Wn+tk
r�|jjt�|jj�SX|jj�}	|jj�}
y|�Wn}ttfk
r�|jj�|jj|�|jjt�|jjt
�|jjtt�f�|jjt�nX|jj�S(Nthandle_(RhRtRgR(RR%RRaRRR,R-R:RRRuR9RR/RR0treprtgetattrtAttributeErrorR1R'R�R#R2(RR�RR)RRRtmethnametmethRR((s$/usr/lib64/python2.7/Demo/rpc/rpc.pythandle�s\





cCs?y|jj�Wntk
r*t�nX|jjt�dS(N(RhRlR+R#RgRR(R((s$/usr/lib64/python2.7/Demo/rpc/rpc.pytturn_around�s


cCs|j�dS(N(R�(R((s$/usr/lib64/python2.7/Demo/rpc/rpc.pythandle_0�scCs
td�dS(Nsmakesocket not defined(R+(R((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyR\�scCs |jj|j|jf�dS(N(RcRfR<R[(R((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyR]�scCst�|_td�|_dS(NR8(RRgR$Rh(R((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyR`�s(RR RbR�R�R�R�R�R\R]R`(((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyR��s	
			3				t	TCPServercBs5eZd�Zd�Zd�Zd�Zd�ZRS(cCs(tjtjtj�|_t|_dS(N(RGR�R�RcR�R�(R((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyR\�scCs1|jjd�x|j|jj��qWdS(Ni(Rctlistentsessiontaccept(R((s$/usr/lib64/python2.7/Demo/rpc/rpc.pytloop�scCs�|\}\}}xsyt|�}Wn1tk
r9Pn tjk
rX}dG|GHPnX|j|�}|dk	rt||�qqWdS(Ns
socket error:(R�R�RGR�R�RaR(Rt
connectionRcR<R[R�R�R�((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyR��s
	cCs1|jjd�x|j|jj��qWdS(Ni(RcR�tforksessionR�(R((s$/usr/lib64/python2.7/Demo/rpc/rpc.pytforkingloopscCs�ddl}y#x|jdd�\}}qWWn|jk
rEnXd}z5|j�}|rs|dj�dS|j|�Wd|dkr�|jd�nXdS(Ni����ii(RBtwaitpidR�RatforkRdR�t_exit(RR�RBtpidtsts((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyR�
s (RR R\R�R�R�R�(((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyR��s
				t	UDPServercBs#eZd�Zd�Zd�ZRS(cCs(tjtjtj�|_t|_dS(N(RGR�R�RcR�R�(R((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyR\&scCsx|j�qWdS(N(R�(R((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyR�*scCsM|jjd�\}}|j|�}|dk	rI|jj||�ndS(Ni (RcR�R�RaR�(RR�t	host_portR�((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyR�.s(RR R\R�R�(((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyR�$s		cCsztd�}|j�}|j�xQ|D]I\}}}}|G|G|tkrVdGn|tkridGn|G|GHq)WdS(NR8ttcptudp(R�R�tsortR�R�(R�R�RRR�R[((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyttest7s
cCs}ddl}|jdr)|jd}nd}d�}t|�}|j|�|jd�|jddtdf�}dS(Ni����is<broadcast>cSs#|\}}|dt|�GHdS(Ns	(R�(R�R�R<R[((s$/usr/lib64/python2.7/Demo/rpc/rpc.pytrhKsii��i(tsystargvR�R�R�R�R�(R�R�R�R�R�((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyt	testbcastEs
	

cCs�dtfd��Y}|dddd�}y|j�Wn tk
r[}dG|GdGHnX|j�d	GHz|j�Wd|j�d
GHXdS(NtScBseZd�ZRS(cSs@|jj�}|j�dGt|�GH|jj||�dS(NsRPC function 1 called, arg(Rht
unpack_stringR�R�RgR	(Rtarg((s$/usr/lib64/python2.7/Demo/rpc/rpc.pythandle_1\s
(RR R�(((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyR�[sR8i iis
RuntimeError:s	(ignored)sService started...sService interrupted.(R�R�R+R�R�(R�tsR�((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyttestsvrYs

cCs~ddl}|jdr)|jd}nd}dtfd��Y}||dd�}dGH|jd�}d	Gt|�GHdS(
Ni����iR8tCcBseZd�ZRS(cSs"|jd||jj|jj�S(Ni(RqRgR	RhR�(RR�((s$/usr/lib64/python2.7/Demo/rpc/rpc.pytcall_1vs	(RR R(((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyRusi smaking call...shello, world, s
call returned(R�R�R�RR�(R�R<RtcR�((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyttestcltps
((((ItxdrRGRBRRRRut	AUTH_UNIXt
AUTH_SHORTtAUTH_DESRR,RR/R0R1R2R-R.tAUTH_BADCREDtAUTH_REJECTEDCREDtAUTH_BADVERFtAUTH_REJECTEDVERFtAUTH_TOOWEAKRt	ExceptionR!R"R#R$R9R?RIRJRFRZR}RR�R�RaR�R�R�R�R�R�R�R�t
PMAPPROC_NULLR�R�R�R�R�R�R�R�R�R�R�R�R�R�R�R�R�R�R�R�R�RR(((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyt<module>
s�%A				Q					'>	 	1c6			nfsclient.py000064400000012313150400401760007100 0ustar00# NFS RPC client -- RFC 1094

# XXX This is not yet complete.
# XXX Only GETATTR, SETTTR, LOOKUP and READDIR are supported.

# (See mountclient.py for some hints on how to write RPC clients in
# Python in general)

import rpc
from rpc import UDPClient, TCPClient
from mountclient import FHSIZE, MountPacker, MountUnpacker

NFS_PROGRAM = 100003
NFS_VERSION = 2

# enum stat
NFS_OK = 0
# (...many error values...)

# enum ftype
NFNON = 0
NFREG = 1
NFDIR = 2
NFBLK = 3
NFCHR = 4
NFLNK = 5


class NFSPacker(MountPacker):

    def pack_sattrargs(self, sa):
        file, attributes = sa
        self.pack_fhandle(file)
        self.pack_sattr(attributes)

    def pack_sattr(self, sa):
        mode, uid, gid, size, atime, mtime = sa
        self.pack_uint(mode)
        self.pack_uint(uid)
        self.pack_uint(gid)
        self.pack_uint(size)
        self.pack_timeval(atime)
        self.pack_timeval(mtime)

    def pack_diropargs(self, da):
        dir, name = da
        self.pack_fhandle(dir)
        self.pack_string(name)

    def pack_readdirargs(self, ra):
        dir, cookie, count = ra
        self.pack_fhandle(dir)
        self.pack_uint(cookie)
        self.pack_uint(count)

    def pack_timeval(self, tv):
        secs, usecs = tv
        self.pack_uint(secs)
        self.pack_uint(usecs)


class NFSUnpacker(MountUnpacker):

    def unpack_readdirres(self):
        status = self.unpack_enum()
        if status == NFS_OK:
            entries = self.unpack_list(self.unpack_entry)
            eof = self.unpack_bool()
            rest = (entries, eof)
        else:
            rest = None
        return (status, rest)

    def unpack_entry(self):
        fileid = self.unpack_uint()
        name = self.unpack_string()
        cookie = self.unpack_uint()
        return (fileid, name, cookie)

    def unpack_diropres(self):
        status = self.unpack_enum()
        if status == NFS_OK:
            fh = self.unpack_fhandle()
            fa = self.unpack_fattr()
            rest = (fh, fa)
        else:
            rest = None
        return (status, rest)

    def unpack_attrstat(self):
        status = self.unpack_enum()
        if status == NFS_OK:
            attributes = self.unpack_fattr()
        else:
            attributes = None
        return status, attributes

    def unpack_fattr(self):
        type = self.unpack_enum()
        mode = self.unpack_uint()
        nlink = self.unpack_uint()
        uid = self.unpack_uint()
        gid = self.unpack_uint()
        size = self.unpack_uint()
        blocksize = self.unpack_uint()
        rdev = self.unpack_uint()
        blocks = self.unpack_uint()
        fsid = self.unpack_uint()
        fileid = self.unpack_uint()
        atime = self.unpack_timeval()
        mtime = self.unpack_timeval()
        ctime = self.unpack_timeval()
        return (type, mode, nlink, uid, gid, size, blocksize, \
                rdev, blocks, fsid, fileid, atime, mtime, ctime)

    def unpack_timeval(self):
        secs = self.unpack_uint()
        usecs = self.unpack_uint()
        return (secs, usecs)


class NFSClient(UDPClient):

    def __init__(self, host):
        UDPClient.__init__(self, host, NFS_PROGRAM, NFS_VERSION)

    def addpackers(self):
        self.packer = NFSPacker()
        self.unpacker = NFSUnpacker('')

    def mkcred(self):
        if self.cred is None:
            self.cred = rpc.AUTH_UNIX, rpc.make_auth_unix_default()
        return self.cred

    def Getattr(self, fh):
        return self.make_call(1, fh, \
                self.packer.pack_fhandle, \
                self.unpacker.unpack_attrstat)

    def Setattr(self, sa):
        return self.make_call(2, sa, \
                self.packer.pack_sattrargs, \
                self.unpacker.unpack_attrstat)

    # Root() is obsolete

    def Lookup(self, da):
        return self.make_call(4, da, \
                self.packer.pack_diropargs, \
                self.unpacker.unpack_diropres)

    # ...

    def Readdir(self, ra):
        return self.make_call(16, ra, \
                self.packer.pack_readdirargs, \
                self.unpacker.unpack_readdirres)

    # Shorthand to get the entire contents of a directory
    def Listdir(self, dir):
        list = []
        ra = (dir, 0, 2000)
        while 1:
            (status, rest) = self.Readdir(ra)
            if status <> NFS_OK:
                break
            entries, eof = rest
            last_cookie = None
            for fileid, name, cookie in entries:
                list.append((fileid, name))
                last_cookie = cookie
            if eof or last_cookie is None:
                break
            ra = (ra[0], last_cookie, ra[2])
        return list


def test():
    import sys
    if sys.argv[1:]: host = sys.argv[1]
    else: host = ''
    if sys.argv[2:]: filesys = sys.argv[2]
    else: filesys = None
    from mountclient import UDPMountClient, TCPMountClient
    mcl = TCPMountClient(host)
    if filesys is None:
        list = mcl.Export()
        for item in list:
            print item
        return
    sf = mcl.Mnt(filesys)
    print sf
    fh = sf[1]
    if fh:
        ncl = NFSClient(host)
        attrstat = ncl.Getattr(fh)
        print attrstat
        list = ncl.Listdir(fh)
        for item in list: print item
        mcl.Umnt(filesys)
rnusersclient.pyo000064400000012013150400401760010167 0ustar00�
��^c@s�ddlZddlmZmZmZmZdefd��YZdefd��YZddd��YZd	eefd
��YZdeefd��YZ	d
�Z
d�Zd�Ze
�dS(i����N(tPackertUnpackert	UDPClienttBroadcastUDPClientt
RnusersPackercBs#eZd�Zd�Zd�ZRS(cCsJt\}}}}|j|�|j|�|j|�|j|�dS(N(tutmptpack_stringtpack_int(tselftuitut_linetut_nametut_hosttut_time((s./usr/lib64/python2.7/Demo/rpc/rnusersclient.pyt	pack_utmps



cCs*|\}}|jt�|j|�dS(N(Rtui_utmpt	pack_uint(RR	tui_itmptui_idle((s./usr/lib64/python2.7/Demo/rpc/rnusersclient.pyt
pack_utmpidles
cCs|j||j�dS(N(t
pack_arrayt
pack_itmpidle(Rtlist((s./usr/lib64/python2.7/Demo/rpc/rnusersclient.pytpack_utmpidlearrs(t__name__t
__module__RRR(((s./usr/lib64/python2.7/Demo/rpc/rnusersclient.pyRs		tRnusersUnpackercBs#eZd�Zd�Zd�ZRS(cCs@|j�}|j�}|j�}|j�}||||fS(N(t
unpack_stringt
unpack_int(RR
RRR
((s./usr/lib64/python2.7/Demo/rpc/rnusersclient.pytunpack_utmps
cCs"|j�}|j�}||fS(N(Rtunpack_uint(RRR((s./usr/lib64/python2.7/Demo/rpc/rnusersclient.pytunpack_utmpidlescCs|j|j�S(N(tunpack_arrayR(R((s./usr/lib64/python2.7/Demo/rpc/rnusersclient.pytunpack_utmpidlearr!s(RRRRR!(((s./usr/lib64/python2.7/Demo/rpc/rnusersclient.pyRs		tPartialRnusersClientcBs,eZd�Zd�Zd�Zd�ZRS(cCst�|_td�|_dS(Nt(RtpackerRtunpacker(R((s./usr/lib64/python2.7/Demo/rpc/rnusersclient.pyt
addpackers'scCs|jddd|jj�S(Ni(t	make_calltNoneR%R(R((s./usr/lib64/python2.7/Demo/rpc/rnusersclient.pytNum+scCs|jddd|jj�S(Ni(R'R(R%R!(R((s./usr/lib64/python2.7/Demo/rpc/rnusersclient.pytNames.scCs|jddd|jj�S(Ni(R'R(R%R!(R((s./usr/lib64/python2.7/Demo/rpc/rnusersclient.pytAllnames2s(RRR&R)R*R+(((s./usr/lib64/python2.7/Demo/rpc/rnusersclient.pyR"%s			t
RnusersClientcBseZd�ZRS(cCstj||dd�dS(Ni��i(Rt__init__(Rthost((s./usr/lib64/python2.7/Demo/rpc/rnusersclient.pyR-9s(RRR-(((s./usr/lib64/python2.7/Demo/rpc/rnusersclient.pyR,7stBroadcastRnusersClientcBseZd�ZRS(cCstj||dd�dS(Ni��i(RR-(Rt	bcastaddr((s./usr/lib64/python2.7/Demo/rpc/rnusersclient.pyR-?s(RRR-(((s./usr/lib64/python2.7/Demo/rpc/rnusersclient.pyR/=scCs�ddl}|jds$t�dS|jd}t|�}|j�}x\|D]T\\}}}}}t|�}t|�}t|�}d|||||fGHqPWdS(Ni����is%r %r %r %s %s(tsystargvt	testbcastR,R*tstrip0(R1R.tcRtlinetnamettimetidle((s./usr/lib64/python2.7/Demo/rpc/rnusersclient.pyttestCs

cCsAtd�}d�}|j|�|j�}dGt|�GHdS(Ns<broadcast>cSsF|\}}|dGx*|D]"\\}}}}}t|�GqWHdS(Ns	:(R4(RtfromaddrR.tportR6R7R8R9((s./usr/lib64/python2.7/Demo/rpc/rnusersclient.pytlistitTs
sTotal Count:(R/tset_reply_handlerR*tlen(R5R=tall((s./usr/lib64/python2.7/Demo/rpc/rnusersclient.pyR3Rs
	
cCs+x$|r&|ddkr&|d }qW|S(Ni����s((ts((s./usr/lib64/python2.7/Demo/rpc/rnusersclient.pyR4^s((
trpcRRRRRRR"R,R/R:R3R4(((s./usr/lib64/python2.7/Demo/rpc/rnusersclient.pyt<module>s"			README000064400000002355150400401760005426 0ustar00This is a Python interface to Sun RPC, designed and implemented mostly
by reading the Internet RFCs about the subject.

*** NOTE: xdr.py has evolved into the standard module xdrlib.py ***

There are two library modules, xdr.py and rpc.py, and several example
clients: mountclient.py, nfsclient.py, and rnusersclient.py,
implementing the NFS Mount protocol, (part of) the NFS protocol, and
the "rnusers" protocol (used by rusers(1)), respectively.  The latter
demonstrates the use of broadcast via the Port mapper's CALLIT
procedure.

There is also a way to create servers in Python.

To test the nfs client, run it from the shell with something like this:

  python -c 'import nfsclient; nfsclient.test()' [hostname [filesystemname]]

When called without a filesystemname, it lists the filesystems at the
host; default host is the local machine.

Other clients are tested similarly.

For hostname, use e.g. wuarchive.wustl.edu or gatekeeper.dec.com (two
hosts that are known to export NFS filesystems with little restrictions).

There are now two different RPC compilers:

1) Wim Lewis rpcgen.py found on http://www.omnigroup.com/~wiml/soft/stale-index.html#python. 

2) Peter �strands rpcgen.py, which is part of "pynfs" (http://www.cendio.se/~peter/pynfs/). 
rpc.pyo000064400000073346150400401760006073 0ustar00�
��^c@s=ddlZddlZddlZdZdZdZdZdZdZdZ	dZ
dZdZdZ
dZdZdZdZdZdZdZdZdZdZdejfd	��YZd
efd��YZdefd
��YZdefd��YZdejfd��YZd�Zd�Zd�Z da!d�Z"ddCd��YZ#d�Z$d�Z%d�Z&d�Z'da)d�Z*de#fd��YZ+de#fd ��YZ,d!e,fd"��YZ-d#Z.dZ/d$Z0dZ1dZ2dZ3dZ4dZ5dZ6d%Z7d&Z8d'efd(��YZ9d)efd*��YZ:d+dDd,��YZ;d-e;e+fd.��YZ<d/e;e,fd0��YZ=d1e;e-fd2��YZ>d3e+fd4��YZ?d5e,fd6��YZ@d7e#fd8��YZAd9dEd:��YZBd;eBfd<��YZCd=eBfd>��YZDd?�ZEd@�ZFdA�ZGdB�ZHdS(Fi����NiiiiiitPackercBs,eZd�Zd�Zd�Zd�ZRS(cCs*|\}}|j|�|j|�dS(N(t	pack_enumtpack_opaque(tselftauthtflavortstuff((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyt	pack_auth0s
cCsi|j|�|j|�|j|�|j|�|jt|��x|D]}|j|�qNWdS(N(t	pack_uinttpack_stringtlen(Rtstamptmachinenametuidtgidtgidsti((s$/usr/lib64/python2.7/Demo/rpc/rpc.pytpack_auth_unix5s




cCsl|j|�|jt�|jt�|j|�|j|�|j|�|j|�|j|�dS(N(RRtCALLt
RPCVERSIONR(Rtxidtprogtverstproctcredtverf((s$/usr/lib64/python2.7/Demo/rpc/rpc.pytpack_callheader>s






cCsE|j|�|jt�|jt�|j|�|jt�dS(N(RRtREPLYtMSG_ACCEPTEDRtSUCCESS(RRR((s$/usr/lib64/python2.7/Demo/rpc/rpc.pytpack_replyheaderIs




(t__name__t
__module__RRRR(((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyR.s				tBadRPCFormatcBseZRS((RR (((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyR!Sst
BadRPCVersioncBseZRS((RR (((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyR"TstGarbageArgscBseZRS((RR (((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyR#UstUnpackercBs#eZd�Zd�Zd�ZRS(cCs"|j�}|j�}||fS(N(tunpack_enumt
unpack_opaque(RRR((s$/usr/lib64/python2.7/Demo/rpc/rpc.pytunpack_authYscCs�|j�}|j�}|tkr7td|f�n|j�}|tkrbtd|f�n|j�}|j�}|j�}|j�}|j�}||||||fS(Nsno CALL but %rsbad RPC version %r(tunpack_uintR%RR!RR"R'(RRttempRRRRR((s$/usr/lib64/python2.7/Demo/rpc/rpc.pytunpack_callheader^scCs�|j�}|j�}|tkr7td|f�n|j�}|tkr�|j�}|tkr�|j�}|j�}td||ff�n|tkr�|j�}td|f�ntd|f�n|tkr�td|f�n|j�}|j�}|t	kr%td�n|t
krb|j�}|j�}td||ff�n|tkrztd�n|tkr�td	�n|t
kr�td
|f�n||fS(Nsno REPLY but %rsMSG_DENIED: RPC_MISMATCH: %rsMSG_DENIED: AUTH_ERROR: %rsMSG_DENIED: %rs'Neither MSG_DENIED nor MSG_ACCEPTED: %rscall failed: PROG_UNAVAILscall failed: PROG_MISMATCH: %rscall failed: PROC_UNAVAILscall failed: GARBAGE_ARGSscall failed: %r(R(R%RtRuntimeErrort
MSG_DENIEDtRPC_MISMATCHt
AUTH_ERRORRR'tPROG_UNAVAILt
PROG_MISMATCHtPROC_UNAVAILtGARBAGE_ARGSR(RRtmtypetstattlowthighR((s$/usr/lib64/python2.7/Demo/rpc/rpc.pytunpack_replyheadernsH(RR R'R*R7(((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyR$Ws		cCsdS(Nt((((s$/usr/lib64/python2.7/Demo/rpc/rpc.pytmake_auth_null�scCs,t�}|j|||||�|j�S(N(RRtget_buf(tseedthostR
Rtgroupstp((s$/usr/lib64/python2.7/Demo/rpc/rpc.pytmake_auth_unix�s	cCs�y,ddlm}m}|�}|�}Wntk
rId}}nXddl}tt|j�t��tj	�||g�S(Ni����(tgetuidtgetgidi(
tosR@RAtImportErrorttimeR?tintt
unix_epochtsockettgethostname(R@RAR
RRD((s$/usr/lib64/python2.7/Demo/rpc/rpc.pytmake_auth_unix_default�s	

c
CstdkrtSddl}|j�}|j|�}|j|�}|j|�|j|�}d	\}}}}}	}
t|
|d�\}}
t|	|d�\}}	t||d�\}}||}|j|||||	|
dddf	�adG|jt�GHtS(
s9Very painful calculation of when the Unix Epoch is.

    This is defined as the return value of time.time() on Jan 1st,
    1970, 00:00:00 GMT.

    On a Unix system, this should always return 0.0.  On a Mac, the
    calculations are needed -- and hard because of integer overflow
    and other limitations.

    ii����Ni�ii<isUnix epoch:(i�iiiii(t_unix_epochRDt	localtimetgmtimetmktimetdivmodtctime(RDtnowtlocalttgmttoffsettytmtdthhtmmtss((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyRF�s
*tClientcBsteZd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zd
�Zd�Z
RS(cCsk||_||_||_||_|j�|j�|j�d|_|j�d|_
d|_dS(Ni(R<RRtportt
makesockett
bindsockett
connsockettlastxidt
addpackerstNoneRR(RR<RRR[((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyt__init__�s				


	
	cCs|jj�dS(N(tsocktclose(R((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyRd�scCs
td�dS(Nsmakesocket not defined(R+(R((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyR\�scCs |jj|j|jf�dS(N(RctconnectR<R[(R((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyR^�scCs|jjd�dS(NR8i(R8i(Rctbind(R((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyR]�scCst�|_td�|_dS(NR8(RtpackerR$tunpacker(R((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyR`�scCsw|dkr$|dk	r$td�n|j|�|rD||�n|j�|r`|�}nd}|jj�|S(Ns!non-null args with null pack_func(Rat	TypeErrort
start_calltdo_callRhtdone(RRtargst	pack_functunpack_functresult((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyt	make_call�s



cCse|jd|_}|j�}|j�}|j}|j�|j||j|j|||�dS(Ni(R_tmkcredtmkverfRgtresetRRR(RRRRRR>((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyRj�s	
cCs
td�dS(Nsdo_call not defined(R+(R((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyRkscCs+|jdkr$tt�f|_n|jS(N(RRat	AUTH_NULLR9(R((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyRr	scCs+|jdkr$tt�f|_n|jS(N(RRaRuR9(R((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyRsscCs|jdddd�S(Ni(RqRa(R((s$/usr/lib64/python2.7/Demo/rpc/rpc.pytcall_0s(RR RbRdR\R^R]R`RqRjRkRrRsRv(((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyRZ�s	
											cCs�t|�}|r|dB}ntt|d?d@��tt|d?d@��tt|d?d@��tt|d@��}|j||�dS(Nlii�ii(R
tchrREtsend(Rctlasttfragtxtheader((s$/usr/lib64/python2.7/Demo/rpc/rpc.pytsendfrags

^cCst|d|�dS(Ni(R}(Rctrecord((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyt
sendrecord"scCs�|jd�}t|�dkr*t�ntt|d��d>t|d�d>Bt|d�d>Bt|d�B}|d	@dk}t|d
@�}d}xH|dkr�|j|�}|s�t�n|t|�}||}q�W||fS(NiiiiiiiiI�i���R8(trecvR
tEOFErrortlongtordRE(RcR|R{RytnRztbuf((s$/usr/lib64/python2.7/Demo/rpc/rpc.pytrecvfrag%s	L	cCs9d}d}x&|s4t|�\}}||}qW|S(NR8i(R�(RcR~RyRz((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyt
recvrecord5s	cCs�d\}}tdkr?ddl}||j�||anx�tt|�t|t�D]g}|ay|j||f�tSWq\tjk
r�\}}|dkr�tj||f�q�q\Xq\Wtd�dS(NiXii����irscan't assign reserved port(iXi(	tlast_resv_port_triedRaRBtgetpidtrangeRfRGterrorR+(RcR<tFIRSTtLASTRBRterrnotmsg((s$/usr/lib64/python2.7/Demo/rpc/rpc.pytbindresvportAstRawTCPClientcBseZd�Zd�ZRS(cCstjtjtj�|_dS(N(RGtAF_INETtSOCK_STREAMRc(R((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyR\WscCs�|jj�}t|j|�t|j�}|j}|j|�|j�\}}||jkr~t	d||jf�ndS(Ns#wrong xid in reply %r instead of %r(
RgR:RRcR�RhRtR7R_R+(RtcalltreplytuRR((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyRkZs	
(RR R\Rk(((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyR�Us	tRawUDPClientcBseZd�Zd�ZRS(cCstjtjtj�|_dS(N(RGR�t
SOCK_DGRAMRc(R((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyR\ksc
Cs`|jj�}|jj|�yddlm}Wntk
rQdGHd}nXd}d}d}x�|jggg}}}|r�|||||�\}}}n|j|kr|d}|dkr�td�n|d	kr�|d
}n|jj|�qgn|jj|�}	|j	}
|
j
|	�|
j�\}}||jkrWqgnPqgWdS(Ni����(tselects'WARNING: select not found, RPC may hangi iiittimeoutii(
RgR:RcRxR�RCRaR+R�RhRtR7R_(
RR�R�tBUFSIZER�tcounttrtwR{R�R�RR((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyRkns:

!

	
(RR R\Rk(((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyR�is	tRawBroadcastUDPClientcBs5eZd�Zd�Zd�Zd�Zd�ZRS(cCs/tj|||||�d|_d|_dS(Ni(R�RbRat
reply_handlerR�(Rt	bcastaddrRRR[((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyRb�s	cCs |jjtjtjd�dS(Ni(Rct
setsockoptRGt
SOL_SOCKETtSO_BROADCAST(R((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyR^�scCs
||_dS(N(R�(RR�((s$/usr/lib64/python2.7/Demo/rpc/rpc.pytset_reply_handler�scCs
||_dS(N(R�(RR�((s$/usr/lib64/python2.7/Demo/rpc/rpc.pytset_timeout�scCs�|dkr$|dk	r$td�n|j|�|rD||�n|jj�}|jj||j|jf�yddl	m	}Wnt
k
r�dGHd}nXd}g}|dkr�d�}	|	}nx"|jggg}
}}|rC|jdkr||
||�\}
}}qC||
|||j�\}
}}n|j|
krVPn|jj|�\}
}|j
}|j|
�|j�\}}||jkr�q�n|�}
|j
j�|j|
|f�|jr�|j|
|�q�q�W|S(Ns!non-null args with null pack_funci����(R�s.WARNING: select not found, broadcast will hangi cSsdS(N((((s$/usr/lib64/python2.7/Demo/rpc/rpc.pytdummy�R8(RaRiRjRgR:RctsendtoR<R[R�RCR�trecvfromRhRtR7R_RltappendR�(RRRmRnRoR�R�R�trepliesR�R�R�R{R�tfromaddrR�RR((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyRq�sJ



		$	
	
	(RR RbR^R�R�Rq(((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyR��s
				i��ioiitPortMapperPackercBs#eZd�Zd�Zd�ZRS(cCsJ|\}}}}|j|�|j|�|j|�|j|�dS(N(R(RtmappingRRtprotR[((s$/usr/lib64/python2.7/Demo/rpc/rpc.pytpack_mapping�s



cCs|j||j�dS(N(t	pack_listR�(Rtlist((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyt
pack_pmaplist�scCsJ|\}}}}|j|�|j|�|j|�|j|�dS(N(RR(RtcaRRRRm((s$/usr/lib64/python2.7/Demo/rpc/rpc.pytpack_call_args�s



(RR R�R�R�(((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyR��s		tPortMapperUnpackercBs#eZd�Zd�Zd�ZRS(cCs@|j�}|j�}|j�}|j�}||||fS(N(R((RRRR�R[((s$/usr/lib64/python2.7/Demo/rpc/rpc.pytunpack_mapping�s
cCs|j|j�S(N(tunpack_listR�(R((s$/usr/lib64/python2.7/Demo/rpc/rpc.pytunpack_pmaplistscCs"|j�}|j�}||fS(N(R(R&(RR[tres((s$/usr/lib64/python2.7/Demo/rpc/rpc.pytunpack_call_results(RR R�R�R�(((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyR��s		tPartialPortMapperClientcBs>eZd�Zd�Zd�Zd�Zd�Zd�ZRS(cCst�|_td�|_dS(NR8(R�RgR�Rh(R((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyR`scCs"|jt||jj|jj�S(N(RqtPMAPPROC_SETRgR�RhR((RR�((s$/usr/lib64/python2.7/Demo/rpc/rpc.pytSets	cCs"|jt||jj|jj�S(N(RqtPMAPPROC_UNSETRgR�RhR((RR�((s$/usr/lib64/python2.7/Demo/rpc/rpc.pytUnsets	cCs"|jt||jj|jj�S(N(RqtPMAPPROC_GETPORTRgR�RhR((RR�((s$/usr/lib64/python2.7/Demo/rpc/rpc.pytGetports	cCs|jtdd|jj�S(N(Rqt
PMAPPROC_DUMPRaRhR�(R((s$/usr/lib64/python2.7/Demo/rpc/rpc.pytDump!scCs"|jt||jj|jj�S(N(RqtPMAPPROC_CALLITRgR�RhR�(RR�((s$/usr/lib64/python2.7/Demo/rpc/rpc.pytCallit&s	(RR R`R�R�R�R�R�(((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyR�s					tTCPPortMapperClientcBseZd�ZRS(cCstj||ttt�dS(N(R�Rbt	PMAP_PROGt	PMAP_VERSt	PMAP_PORT(RR<((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyRb.s	(RR Rb(((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyR�,stUDPPortMapperClientcBseZd�ZRS(cCstj||ttt�dS(N(R�RbR�R�R�(RR<((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyRb5s	(RR Rb(((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyR�3stBroadcastUDPPortMapperClientcBseZd�ZRS(cCstj||ttt�dS(N(R�RbR�R�R�(RR�((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyRb=s	(RR Rb(((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyR�:st	TCPClientcBseZd�ZRS(cCsft|�}|j||tdf�}|j�|dkrItd�ntj|||||�dS(Nisprogram not registered(R�R�tIPPROTO_TCPRdR+R�Rb(RR<RRtpmapR[((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyRbFs
(RR Rb(((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyR�Dst	UDPClientcBseZd�ZRS(cCsft|�}|j||tdf�}|j�|dkrItd�ntj|||||�dS(Nisprogram not registered(R�R�tIPPROTO_UDPRdR+R�Rb(RR<RRR�R[((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyRbQs
(RR Rb(((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyR�OstBroadcastUDPClientcBs>eZd�Zd�Zd�Zd�Zd�Zd�ZRS(cCsKt|�|_|jj|j�||_||_d|_|j�dS(N(	R�R�R�tmy_reply_handlerRRRatuser_reply_handlerR`(RR�RR((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyRb\s			cCs|jj�dS(N(R�Rd(R((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyRddscCs
||_dS(N(R�(RR�((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyR�gscCs|jj|�dS(N(R�R�(RR�((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyR�jscCsq|\}}|jj|�|j�}|jj�|jj||f�|jdk	rm|j||�ndS(N(RhRtRoRlR�R�R�Ra(RR�R�R[R�Rp((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyR�ms
cCs�|jj�|r ||�n|dkrAd�}||_n	||_g|_|jj�}|jj|j|j	||f�}|jS(NcSsdS(N((((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyR�{R8(
RgRtRaRoR�R:R�R�RR(RRRmRnRoR�tpacked_argst
dummy_replies((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyRqvs

				(RR RbRdR�R�R�Rq(((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyR�Zs						tServercBsYeZd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
RS(	cCsa||_||_||_||_|j�|j�|jj�\|_|_|j�dS(N(	R<RRR[R\R]RctgetsocknameR`(RR<RRR[((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyRb�s				

cCsL|j|j|j|jf}t|j�}|j|�sHtd�ndS(Nsregister failed(RRR�R[R�R<R�R+(RR�R>((s$/usr/lib64/python2.7/Demo/rpc/rpc.pytregister�scCsL|j|j|j|jf}t|j�}|j|�sHtd�ndS(Nsunregister failed(RRR�R[R�R<R�R+(RR�R>((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyt
unregister�scCs�|jj|�|jj�|jj�}|jj|�|jj�}|tkr[dS|jjt�|jj�}|t	kr�|jjt
�|jjt�|jjt	�|jjt	�|jj�S|jjt
�|jjtt�f�|jj�}||jkr7|jjt�|jj�S|jj�}||jkr�|jjt�|jj|j�|jj|j�|jj�S|jj�}dt|�}yt||�}Wn+tk
r�|jjt�|jj�SX|jj�}	|jj�}
y|�Wn}ttfk
r�|jj�|jj|�|jjt�|jjt
�|jjtt�f�|jjt�nX|jj�S(Nthandle_(RhRtRgR(RR%RRaRRR,R-R:RRRuR9RR/RR0treprtgetattrtAttributeErrorR1R'R�R#R2(RR�RR)RRRtmethnametmethRR((s$/usr/lib64/python2.7/Demo/rpc/rpc.pythandle�s\





cCs?y|jj�Wntk
r*t�nX|jjt�dS(N(RhRlR+R#RgRR(R((s$/usr/lib64/python2.7/Demo/rpc/rpc.pytturn_around�s


cCs|j�dS(N(R�(R((s$/usr/lib64/python2.7/Demo/rpc/rpc.pythandle_0�scCs
td�dS(Nsmakesocket not defined(R+(R((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyR\�scCs |jj|j|jf�dS(N(RcRfR<R[(R((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyR]�scCst�|_td�|_dS(NR8(RRgR$Rh(R((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyR`�s(RR RbR�R�R�R�R�R\R]R`(((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyR��s	
			3				t	TCPServercBs5eZd�Zd�Zd�Zd�Zd�ZRS(cCs(tjtjtj�|_t|_dS(N(RGR�R�RcR�R�(R((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyR\�scCs1|jjd�x|j|jj��qWdS(Ni(Rctlistentsessiontaccept(R((s$/usr/lib64/python2.7/Demo/rpc/rpc.pytloop�scCs�|\}\}}xsyt|�}Wn1tk
r9Pn tjk
rX}dG|GHPnX|j|�}|dk	rt||�qqWdS(Ns
socket error:(R�R�RGR�R�RaR(Rt
connectionRcR<R[R�R�R�((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyR��s
	cCs1|jjd�x|j|jj��qWdS(Ni(RcR�tforksessionR�(R((s$/usr/lib64/python2.7/Demo/rpc/rpc.pytforkingloopscCs�ddl}y#x|jdd�\}}qWWn|jk
rEnXd}z5|j�}|rs|dj�dS|j|�Wd|dkr�|jd�nXdS(Ni����ii(RBtwaitpidR�RatforkRdR�t_exit(RR�RBtpidtsts((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyR�
s (RR R\R�R�R�R�(((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyR��s
				t	UDPServercBs#eZd�Zd�Zd�ZRS(cCs(tjtjtj�|_t|_dS(N(RGR�R�RcR�R�(R((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyR\&scCsx|j�qWdS(N(R�(R((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyR�*scCsM|jjd�\}}|j|�}|dk	rI|jj||�ndS(Ni (RcR�R�RaR�(RR�t	host_portR�((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyR�.s(RR R\R�R�(((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyR�$s		cCsztd�}|j�}|j�xQ|D]I\}}}}|G|G|tkrVdGn|tkridGn|G|GHq)WdS(NR8ttcptudp(R�R�tsortR�R�(R�R�RRR�R[((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyttest7s
cCs}ddl}|jdr)|jd}nd}d�}t|�}|j|�|jd�|jddtdf�}dS(Ni����is<broadcast>cSs#|\}}|dt|�GHdS(Ns	(R�(R�R�R<R[((s$/usr/lib64/python2.7/Demo/rpc/rpc.pytrhKsii��i(tsystargvR�R�R�R�R�(R�R�R�R�R�((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyt	testbcastEs
	

cCs�dtfd��Y}|dddd�}y|j�Wn tk
r[}dG|GdGHnX|j�d	GHz|j�Wd|j�d
GHXdS(NtScBseZd�ZRS(cSs@|jj�}|j�dGt|�GH|jj||�dS(NsRPC function 1 called, arg(Rht
unpack_stringR�R�RgR	(Rtarg((s$/usr/lib64/python2.7/Demo/rpc/rpc.pythandle_1\s
(RR R�(((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyR�[sR8i iis
RuntimeError:s	(ignored)sService started...sService interrupted.(R�R�R+R�R�(R�tsR�((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyttestsvrYs

cCs~ddl}|jdr)|jd}nd}dtfd��Y}||dd�}dGH|jd�}d	Gt|�GHdS(
Ni����iR8tCcBseZd�ZRS(cSs"|jd||jj|jj�S(Ni(RqRgR	RhR�(RR�((s$/usr/lib64/python2.7/Demo/rpc/rpc.pytcall_1vs	(RR R(((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyRusi smaking call...shello, world, s
call returned(R�R�R�RR�(R�R<RtcR�((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyttestcltps
((((ItxdrRGRBRRRRut	AUTH_UNIXt
AUTH_SHORTtAUTH_DESRR,RR/R0R1R2R-R.tAUTH_BADCREDtAUTH_REJECTEDCREDtAUTH_BADVERFtAUTH_REJECTEDVERFtAUTH_TOOWEAKRt	ExceptionR!R"R#R$R9R?RIRJRFRZR}RR�R�RaR�R�R�R�R�R�R�R�t
PMAPPROC_NULLR�R�R�R�R�R�R�R�R�R�R�R�R�R�R�R�R�R�R�R�R�RR(((s$/usr/lib64/python2.7/Demo/rpc/rpc.pyt<module>
s�%A				Q					'>	 	1c6			xdr.py000064400000011667150400401760005723 0ustar00# Implement (a subset of) Sun XDR -- RFC1014.


try:
    import struct
except ImportError:
    struct = None


Long = type(0L)


class Packer:

    def __init__(self):
        self.reset()

    def reset(self):
        self.buf = ''

    def get_buf(self):
        return self.buf

    def pack_uint(self, x):
        self.buf = self.buf + \
                (chr(int(x>>24 & 0xff)) + chr(int(x>>16 & 0xff)) + \
                 chr(int(x>>8 & 0xff)) + chr(int(x & 0xff)))
    if struct and struct.pack('l', 1) == '\0\0\0\1':
        def pack_uint(self, x):
            if type(x) == Long:
                x = int((x + 0x80000000L) % 0x100000000L \
                           - 0x80000000L)
            self.buf = self.buf + struct.pack('l', x)

    pack_int = pack_uint

    pack_enum = pack_int

    def pack_bool(self, x):
        if x: self.buf = self.buf + '\0\0\0\1'
        else: self.buf = self.buf + '\0\0\0\0'

    def pack_uhyper(self, x):
        self.pack_uint(int(x>>32 & 0xffffffff))
        self.pack_uint(int(x & 0xffffffff))

    pack_hyper = pack_uhyper

    def pack_float(self, x):
        # XXX
        self.buf = self.buf + struct.pack('f', x)

    def pack_double(self, x):
        # XXX
        self.buf = self.buf + struct.pack('d', x)

    def pack_fstring(self, n, s):
        if n < 0:
            raise ValueError, 'fstring size must be nonnegative'
        n = ((n + 3)//4)*4
        data = s[:n]
        data = data + (n - len(data)) * '\0'
        self.buf = self.buf + data

    pack_fopaque = pack_fstring

    def pack_string(self, s):
        n = len(s)
        self.pack_uint(n)
        self.pack_fstring(n, s)

    pack_opaque = pack_string

    def pack_list(self, list, pack_item):
        for item in list:
            self.pack_uint(1)
            pack_item(item)
        self.pack_uint(0)

    def pack_farray(self, n, list, pack_item):
        if len(list) <> n:
            raise ValueError, 'wrong array size'
        for item in list:
            pack_item(item)

    def pack_array(self, list, pack_item):
        n = len(list)
        self.pack_uint(n)
        self.pack_farray(n, list, pack_item)


class Unpacker:

    def __init__(self, data):
        self.reset(data)

    def reset(self, data):
        self.buf = data
        self.pos = 0

    def done(self):
        if self.pos < len(self.buf):
            raise RuntimeError, 'unextracted data remains'

    def unpack_uint(self):
        i = self.pos
        self.pos = j = i+4
        data = self.buf[i:j]
        if len(data) < 4:
            raise EOFError
        x = long(ord(data[0]))<<24 | ord(data[1])<<16 | \
                ord(data[2])<<8 | ord(data[3])
        # Return a Python long only if the value is not representable
        # as a nonnegative Python int
        if x < 0x80000000L: x = int(x)
        return x
    if struct and struct.unpack('l', '\0\0\0\1') == 1:
        def unpack_uint(self):
            i = self.pos
            self.pos = j = i+4
            data = self.buf[i:j]
            if len(data) < 4:
                raise EOFError
            return struct.unpack('l', data)

    def unpack_int(self):
        x = self.unpack_uint()
        if x >= 0x80000000L: x = x - 0x100000000L
        return int(x)

    unpack_enum = unpack_int

    unpack_bool = unpack_int

    def unpack_uhyper(self):
        hi = self.unpack_uint()
        lo = self.unpack_uint()
        return long(hi)<<32 | lo

    def unpack_hyper(self):
        x = self.unpack_uhyper()
        if x >= 0x8000000000000000L: x = x - 0x10000000000000000L
        return x

    def unpack_float(self):
        # XXX
        i = self.pos
        self.pos = j = i+4
        data = self.buf[i:j]
        if len(data) < 4:
            raise EOFError
        return struct.unpack('f', data)[0]

    def unpack_double(self):
        # XXX
        i = self.pos
        self.pos = j = i+8
        data = self.buf[i:j]
        if len(data) < 8:
            raise EOFError
        return struct.unpack('d', data)[0]

    def unpack_fstring(self, n):
        if n < 0:
            raise ValueError, 'fstring size must be nonnegative'
        i = self.pos
        j = i + (n+3)//4*4
        if j > len(self.buf):
            raise EOFError
        self.pos = j
        return self.buf[i:i+n]

    unpack_fopaque = unpack_fstring

    def unpack_string(self):
        n = self.unpack_uint()
        return self.unpack_fstring(n)

    unpack_opaque = unpack_string

    def unpack_list(self, unpack_item):
        list = []
        while 1:
            x = self.unpack_uint()
            if x == 0: break
            if x <> 1:
                raise RuntimeError, '0 or 1 expected, got %r' % (x, )
            item = unpack_item()
            list.append(item)
        return list

    def unpack_farray(self, n, unpack_item):
        list = []
        for i in range(n):
            list.append(unpack_item())
        return list

    def unpack_array(self, unpack_item):
        n = self.unpack_uint()
        return self.unpack_farray(n, unpack_item)
test000064400000001271150400401760005444 0ustar00: ${PYTHON=python}
: ${SERVER=charon.cwi.nl}

set -xe

$PYTHON -c 'from rpc import test; test()'
$PYTHON -c 'from rpc import test; test()' ${SERVER}

$PYTHON -c 'from rpc import testsvr; testsvr()' &
PID=$!
sleep 2
$PYTHON -c 'from rpc import testclt; testclt()'
kill -2 $PID

$PYTHON -c 'from mountclient import test; test()'
$PYTHON -c 'from mountclient import test; test()' gatekeeper.dec.com

$PYTHON -c 'from nfsclient import test; test()'
$PYTHON -c 'from nfsclient import test; test()' gatekeeper.dec.com
$PYTHON -c 'from nfsclient import test; test()' gatekeeper.dec.com /archive

$PYTHON -c 'from rnusersclient import test; test()' ''

$PYTHON -c 'from rpc import testbcast; testbcast()'
rnusersclient.py000064400000005105150400401760010014 0ustar00# Remote nusers client interface

import rpc
from rpc import Packer, Unpacker, UDPClient, BroadcastUDPClient


class RnusersPacker(Packer):
    def pack_utmp(self, ui):
        ut_line, ut_name, ut_host, ut_time = utmp
        self.pack_string(ut_line)
        self.pack_string(ut_name)
        self.pack_string(ut_host)
        self.pack_int(ut_time)
    def pack_utmpidle(self, ui):
        ui_itmp, ui_idle = ui
        self.pack_utmp(ui_utmp)
        self.pack_uint(ui_idle)
    def pack_utmpidlearr(self, list):
        self.pack_array(list, self.pack_itmpidle)


class RnusersUnpacker(Unpacker):
    def unpack_utmp(self):
        ut_line = self.unpack_string()
        ut_name = self.unpack_string()
        ut_host = self.unpack_string()
        ut_time = self.unpack_int()
        return ut_line, ut_name, ut_host, ut_time
    def unpack_utmpidle(self):
        ui_utmp = self.unpack_utmp()
        ui_idle = self.unpack_uint()
        return ui_utmp, ui_idle
    def unpack_utmpidlearr(self):
        return self.unpack_array(self.unpack_utmpidle)


class PartialRnusersClient:

    def addpackers(self):
        self.packer = RnusersPacker()
        self.unpacker = RnusersUnpacker('')

    def Num(self):
        return self.make_call(1, None, None, self.unpacker.unpack_int)

    def Names(self):
        return self.make_call(2, None, \
                None, self.unpacker.unpack_utmpidlearr)

    def Allnames(self):
        return self.make_call(3, None, \
                None, self.unpacker.unpack_utmpidlearr)


class RnusersClient(PartialRnusersClient, UDPClient):

    def __init__(self, host):
        UDPClient.__init__(self, host, 100002, 2)


class BroadcastRnusersClient(PartialRnusersClient, BroadcastUDPClient):

    def __init__(self, bcastaddr):
        BroadcastUDPClient.__init__(self, bcastaddr, 100002, 2)


def test():
    import sys
    if not sys.argv[1:]:
        testbcast()
        return
    else:
        host = sys.argv[1]
    c = RnusersClient(host)
    list = c.Names()
    for (line, name, host, time), idle in list:
        line = strip0(line)
        name = strip0(name)
        host = strip0(host)
        print "%r %r %r %s %s" % (name, host, line, time, idle)

def testbcast():
    c = BroadcastRnusersClient('<broadcast>')
    def listit(list, fromaddr):
        host, port = fromaddr
        print host + '\t:',
        for (line, name, host, time), idle in list:
            print strip0(name),
        print
    c.set_reply_handler(listit)
    all = c.Names()
    print 'Total Count:', len(all)

def strip0(s):
    while s and s[-1] == '\0': s = s[:-1]
    return s

test()
T.pyo000064400000001670150400401760005501 0ustar00�
��^c@s:ddlZddlZddlZd�Zd�ZdS(i����NcCs9tj�\}}}}||||tj�fadS(N(tosttimesttimett0(tutstcutcs((s"/usr/lib64/python2.7/Demo/rpc/T.pytTSTARTsc
Gs�tj�\}}}}||||tj�fag}x-td�D]}|jt|t|�qHW|\}}}d}x|D]}	||	d}q�W|d|||f}tjj	|�dS(Nitt s%r user, %r sys, %r real
(
RRRtt1trangetappendRtsyststderrtwrite(
tlabelRRRRttttitrtmsgtx((s"/usr/lib64/python2.7/Demo/rpc/T.pytTSTOPs
(RRRRR(((s"/usr/lib64/python2.7/Demo/rpc/T.pyt<module>s$	MANIFEST000064400000000551150400401760005673 0ustar00   File Name		Archive #	Description
-----------------------------------------------------------
 MANIFEST                   1	This shipping list
 README                     1	
 T.py                       1	
 mountclient.py             1	
 nfsclient.py               1	
 rpc.py                     1	
 test                       1
 xdr.py                     1	
xdr.pyc000064400000017345150400401760006065 0ustar00�
��^c@s`yddlZWnek
r)dZnXed�Zddd��YZddd��YZdS(	i����NltPackercBs�eZd�Zd�Zd�Zd�ZerTejdd�dkrTd�ZneZeZ	d�Z
d	�ZeZd
�Z
d�Zd�ZeZd
�ZeZd�Zd�Zd�ZRS(cCs|j�dS(N(treset(tself((s$/usr/lib64/python2.7/Demo/rpc/xdr.pyt__init__scCs
d|_dS(Nt(tbuf(R((s$/usr/lib64/python2.7/Demo/rpc/xdr.pyRscCs|jS(N(R(R((s$/usr/lib64/python2.7/Demo/rpc/xdr.pytget_bufscCsl|jtt|d?d@��tt|d?d@��tt|d?d@��tt|d@��|_dS(Nii�ii(Rtchrtint(Rtx((s$/usr/lib64/python2.7/Demo/rpc/xdr.pyt	pack_uintstliscCsMt|�tkr-t|ddd�}n|jtjd|�|_dS(NllR(ttypetLongRRtstructtpack(RR	((s$/usr/lib64/python2.7/Demo/rpc/xdr.pyR
s
cCs-|r|jd|_n|jd|_dS(Nss(R(RR	((s$/usr/lib64/python2.7/Demo/rpc/xdr.pyt	pack_bool'scCs6|jt|d?d@��|jt|d@��dS(Ni I����(R
R(RR	((s$/usr/lib64/python2.7/Demo/rpc/xdr.pytpack_uhyper+scCs |jtjd|�|_dS(Ntf(RRR(RR	((s$/usr/lib64/python2.7/Demo/rpc/xdr.pyt
pack_float1scCs |jtjd|�|_dS(Ntd(RRR(RR	((s$/usr/lib64/python2.7/Demo/rpc/xdr.pytpack_double5scCs`|dkrtd�n|ddd}|| }||t|�d}|j||_dS(Nis fstring size must be nonnegativeiis(t
ValueErrortlenR(Rtntstdata((s$/usr/lib64/python2.7/Demo/rpc/xdr.pytpack_fstring9s
cCs-t|�}|j|�|j||�dS(N(RR
R(RRR((s$/usr/lib64/python2.7/Demo/rpc/xdr.pytpack_stringCs
cCs9x%|D]}|jd�||�qW|jd�dS(Nii(R
(Rtlistt	pack_itemtitem((s$/usr/lib64/python2.7/Demo/rpc/xdr.pyt	pack_listJs

cCs=t|�|krtd�nx|D]}||�q%WdS(Nswrong array size(RR(RRRRR((s$/usr/lib64/python2.7/Demo/rpc/xdr.pytpack_farrayPs
cCs0t|�}|j|�|j|||�dS(N(RR
R!(RRRR((s$/usr/lib64/python2.7/Demo/rpc/xdr.pyt
pack_arrayVs
(t__name__t
__module__RRRR
RRtpack_intt	pack_enumRRt
pack_hyperRRRtpack_fopaqueRtpack_opaqueR R!R"(((s$/usr/lib64/python2.7/Demo/rpc/xdr.pyR
s(												tUnpackercBs�eZd�Zd�Zd�Zd�ZerTejdd�dkrTd�Znd�ZeZ	eZ
d	�Zd
�Zd�Z
d�Zd
�ZeZd�ZeZd�Zd�Zd�ZRS(cCs|j|�dS(N(R(RR((s$/usr/lib64/python2.7/Demo/rpc/xdr.pyR^scCs||_d|_dS(Ni(Rtpos(RR((s$/usr/lib64/python2.7/Demo/rpc/xdr.pyRas	cCs(|jt|j�kr$td�ndS(Nsunextracted data remains(R+RRtRuntimeError(R((s$/usr/lib64/python2.7/Demo/rpc/xdr.pytdoneescCs�|j}|d|_}|j||!}t|�dkrEt�ntt|d��d>t|d�d>Bt|d�d>Bt|d�B}|d	kr�t|�}n|S(
Niiiiiiiil(R+RRtEOFErrortlongtordR(RtitjRR	((s$/usr/lib64/python2.7/Demo/rpc/xdr.pytunpack_uintis		LRsicCsU|j}|d|_}|j||!}t|�dkrEt�ntjd|�S(NiR(R+RRR.Rtunpack(RR1R2R((s$/usr/lib64/python2.7/Demo/rpc/xdr.pyR3vs		cCs/|j�}|dkr%|d}nt|�S(Nll(R3R(RR	((s$/usr/lib64/python2.7/Demo/rpc/xdr.pyt
unpack_int~s
cCs*|j�}|j�}t|�d>|BS(Ni (R3R/(Rthitlo((s$/usr/lib64/python2.7/Demo/rpc/xdr.pyt
unpack_uhyper�scCs)|j�}|dkr%|d}n|S(Nll(R8(RR	((s$/usr/lib64/python2.7/Demo/rpc/xdr.pytunpack_hyper�s
cCsY|j}|d|_}|j||!}t|�dkrEt�ntjd|�dS(NiRi(R+RRR.RR4(RR1R2R((s$/usr/lib64/python2.7/Demo/rpc/xdr.pytunpack_float�s		cCsY|j}|d|_}|j||!}t|�dkrEt�ntjd|�dS(NiRi(R+RRR.RR4(RR1R2R((s$/usr/lib64/python2.7/Demo/rpc/xdr.pyt
unpack_double�s		cCsp|dkrtd�n|j}||ddd}|t|j�krUt�n||_|j|||!S(Nis fstring size must be nonnegativeii(RR+RRR.(RRR1R2((s$/usr/lib64/python2.7/Demo/rpc/xdr.pytunpack_fstring�s			cCs|j�}|j|�S(N(R3R<(RR((s$/usr/lib64/python2.7/Demo/rpc/xdr.pyt
unpack_string�scCsbg}xU|j�}|dkr%Pn|dkrDtd|f�n|�}|j|�q	W|S(Niis0 or 1 expected, got %r(R3R,tappend(Rtunpack_itemRR	R((s$/usr/lib64/python2.7/Demo/rpc/xdr.pytunpack_list�s	cCs1g}x$t|�D]}|j|��qW|S(N(trangeR>(RRR?RR1((s$/usr/lib64/python2.7/Demo/rpc/xdr.pyt
unpack_farray�scCs|j�}|j||�S(N(R3RB(RR?R((s$/usr/lib64/python2.7/Demo/rpc/xdr.pytunpack_array�s(R#R$RRR-R3RR4R5tunpack_enumtunpack_boolR8R9R:R;R<tunpack_fopaqueR=t
unpack_opaqueR@RBRC(((s$/usr/lib64/python2.7/Demo/rpc/xdr.pyR*\s(												
			(((RtImportErrortNoneRR
RR*(((s$/usr/lib64/python2.7/Demo/rpc/xdr.pyt<module>s

Onfsclient.pyc000064400000015367150400401760007257 0ustar00�
��^c@s�ddlZddlmZmZddlmZmZmZdZdZdZ	dZ
dZdZdZ
d	Zd
Zdefd��YZd
efd��YZdefd��YZd�ZdS(i����N(t	UDPClientt	TCPClient(tFHSIZEtMountPackert
MountUnpackeri��iiiiiit	NFSPackercBs5eZd�Zd�Zd�Zd�Zd�ZRS(cCs*|\}}|j|�|j|�dS(N(tpack_fhandlet
pack_sattr(tselftsatfilet
attributes((s*/usr/lib64/python2.7/Demo/rpc/nfsclient.pytpack_sattrargss
cCsj|\}}}}}}|j|�|j|�|j|�|j|�|j|�|j|�dS(N(t	pack_uinttpack_timeval(RR	tmodetuidtgidtsizetatimetmtime((s*/usr/lib64/python2.7/Demo/rpc/nfsclient.pyR$s




cCs*|\}}|j|�|j|�dS(N(Rtpack_string(Rtdatdirtname((s*/usr/lib64/python2.7/Demo/rpc/nfsclient.pytpack_diropargs-s
cCs:|\}}}|j|�|j|�|j|�dS(N(RR
(RtraRtcookietcount((s*/usr/lib64/python2.7/Demo/rpc/nfsclient.pytpack_readdirargs2s

cCs*|\}}|j|�|j|�dS(N(R
(Rttvtsecstusecs((s*/usr/lib64/python2.7/Demo/rpc/nfsclient.pyR8s
(t__name__t
__module__RRRRR(((s*/usr/lib64/python2.7/Demo/rpc/nfsclient.pyRs
					tNFSUnpackercBs>eZd�Zd�Zd�Zd�Zd�Zd�ZRS(cCsU|j�}|tkrE|j|j�}|j�}||f}nd}||fS(N(tunpack_enumtNFS_OKtunpack_listtunpack_entrytunpack_booltNone(Rtstatustentriesteoftrest((s*/usr/lib64/python2.7/Demo/rpc/nfsclient.pytunpack_readdirres@scCs1|j�}|j�}|j�}|||fS(N(tunpack_uintt
unpack_string(RtfileidRR((s*/usr/lib64/python2.7/Demo/rpc/nfsclient.pyR'JscCsO|j�}|tkr?|j�}|j�}||f}nd}||fS(N(R$R%tunpack_fhandletunpack_fattrR)(RR*tfhtfaR-((s*/usr/lib64/python2.7/Demo/rpc/nfsclient.pytunpack_diropresPscCs7|j�}|tkr'|j�}nd}||fS(N(R$R%R3R)(RR*R((s*/usr/lib64/python2.7/Demo/rpc/nfsclient.pytunpack_attrstatZs
cCs�|j�}|j�}|j�}|j�}|j�}|j�}|j�}|j�}|j�}	|j�}
|j�}|j�}|j�}
|j�}|||||||||	|
|||
|fS(N(R$R/tunpack_timeval(RttypeRtnlinkRRRt	blocksizetrdevtblockstfsidR1RRtctime((s*/usr/lib64/python2.7/Demo/rpc/nfsclient.pyR3bs cCs"|j�}|j�}||fS(N(R/(RRR ((s*/usr/lib64/python2.7/Demo/rpc/nfsclient.pyR8ts(R!R"R.R'R6R7R3R8(((s*/usr/lib64/python2.7/Demo/rpc/nfsclient.pyR#>s	
		
		t	NFSClientcBsPeZd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Z	RS(cCstj||tt�dS(N(Rt__init__tNFS_PROGRAMtNFS_VERSION(Rthost((s*/usr/lib64/python2.7/Demo/rpc/nfsclient.pyRA|scCst�|_td�|_dS(Nt(RtpackerR#tunpacker(R((s*/usr/lib64/python2.7/Demo/rpc/nfsclient.pyt
addpackersscCs1|jdkr*tjtj�f|_n|jS(N(tcredR)trpct	AUTH_UNIXtmake_auth_unix_default(R((s*/usr/lib64/python2.7/Demo/rpc/nfsclient.pytmkcred�scCs"|jd||jj|jj�S(Ni(t	make_callRFRRGR7(RR4((s*/usr/lib64/python2.7/Demo/rpc/nfsclient.pytGetattr�s	cCs"|jd||jj|jj�S(Ni(RNRFRRGR7(RR	((s*/usr/lib64/python2.7/Demo/rpc/nfsclient.pytSetattr�s	cCs"|jd||jj|jj�S(Ni(RNRFRRGR6(RR((s*/usr/lib64/python2.7/Demo/rpc/nfsclient.pytLookup�s	cCs"|jd||jj|jj�S(Ni(RNRFRRGR.(RR((s*/usr/lib64/python2.7/Demo/rpc/nfsclient.pytReaddir�s	cCs�g}|ddf}x�|j|�\}}|tkr=Pn|\}}d}x0|D](\}	}
}|j|	|
f�|}qVW|s�|dkr�Pn|d||df}qW|S(Nii�i(RRR%R)tappend(RRtlistRR*R-R+R,tlast_cookieR1RR((s*/usr/lib64/python2.7/Demo/rpc/nfsclient.pytListdir�s
(
R!R"RARHRMRORPRQRRRV(((s*/usr/lib64/python2.7/Demo/rpc/nfsclient.pyR@zs							cCs#ddl}|jdr)|jd}nd}|jdrL|jd}nd}ddlm}m}||�}|dkr�|j�}x|D]}|GHq�WdS|j|�}|GH|d}	|	rt|�}
|
j	|	�}|GH|
j
|	�}x|D]}|GHqW|j|�ndS(Ni����iREi(tUDPMountClienttTCPMountClient(tsystargvR)tmountclientRWRXtExporttMntR@RORVtUmnt(RYRDtfilesysRWRXtmclRTtitemtsfR4tncltattrstat((s*/usr/lib64/python2.7/Demo/rpc/nfsclient.pyttest�s2


	

	(RJRRR[RRRRBRCR%tNFNONtNFREGtNFDIRtNFBLKtNFCHRtNFLNKRR#R@Re(((s*/usr/lib64/python2.7/Demo/rpc/nfsclient.pyt<module>	s!<9rnusersclient.pyc000064400000012013150400401760010153 0ustar00�
��^c@s�ddlZddlmZmZmZmZdefd��YZdefd��YZddd��YZd	eefd
��YZdeefd��YZ	d
�Z
d�Zd�Ze
�dS(i����N(tPackertUnpackert	UDPClienttBroadcastUDPClientt
RnusersPackercBs#eZd�Zd�Zd�ZRS(cCsJt\}}}}|j|�|j|�|j|�|j|�dS(N(tutmptpack_stringtpack_int(tselftuitut_linetut_nametut_hosttut_time((s./usr/lib64/python2.7/Demo/rpc/rnusersclient.pyt	pack_utmps



cCs*|\}}|jt�|j|�dS(N(Rtui_utmpt	pack_uint(RR	tui_itmptui_idle((s./usr/lib64/python2.7/Demo/rpc/rnusersclient.pyt
pack_utmpidles
cCs|j||j�dS(N(t
pack_arrayt
pack_itmpidle(Rtlist((s./usr/lib64/python2.7/Demo/rpc/rnusersclient.pytpack_utmpidlearrs(t__name__t
__module__RRR(((s./usr/lib64/python2.7/Demo/rpc/rnusersclient.pyRs		tRnusersUnpackercBs#eZd�Zd�Zd�ZRS(cCs@|j�}|j�}|j�}|j�}||||fS(N(t
unpack_stringt
unpack_int(RR
RRR
((s./usr/lib64/python2.7/Demo/rpc/rnusersclient.pytunpack_utmps
cCs"|j�}|j�}||fS(N(Rtunpack_uint(RRR((s./usr/lib64/python2.7/Demo/rpc/rnusersclient.pytunpack_utmpidlescCs|j|j�S(N(tunpack_arrayR(R((s./usr/lib64/python2.7/Demo/rpc/rnusersclient.pytunpack_utmpidlearr!s(RRRRR!(((s./usr/lib64/python2.7/Demo/rpc/rnusersclient.pyRs		tPartialRnusersClientcBs,eZd�Zd�Zd�Zd�ZRS(cCst�|_td�|_dS(Nt(RtpackerRtunpacker(R((s./usr/lib64/python2.7/Demo/rpc/rnusersclient.pyt
addpackers'scCs|jddd|jj�S(Ni(t	make_calltNoneR%R(R((s./usr/lib64/python2.7/Demo/rpc/rnusersclient.pytNum+scCs|jddd|jj�S(Ni(R'R(R%R!(R((s./usr/lib64/python2.7/Demo/rpc/rnusersclient.pytNames.scCs|jddd|jj�S(Ni(R'R(R%R!(R((s./usr/lib64/python2.7/Demo/rpc/rnusersclient.pytAllnames2s(RRR&R)R*R+(((s./usr/lib64/python2.7/Demo/rpc/rnusersclient.pyR"%s			t
RnusersClientcBseZd�ZRS(cCstj||dd�dS(Ni��i(Rt__init__(Rthost((s./usr/lib64/python2.7/Demo/rpc/rnusersclient.pyR-9s(RRR-(((s./usr/lib64/python2.7/Demo/rpc/rnusersclient.pyR,7stBroadcastRnusersClientcBseZd�ZRS(cCstj||dd�dS(Ni��i(RR-(Rt	bcastaddr((s./usr/lib64/python2.7/Demo/rpc/rnusersclient.pyR-?s(RRR-(((s./usr/lib64/python2.7/Demo/rpc/rnusersclient.pyR/=scCs�ddl}|jds$t�dS|jd}t|�}|j�}x\|D]T\\}}}}}t|�}t|�}t|�}d|||||fGHqPWdS(Ni����is%r %r %r %s %s(tsystargvt	testbcastR,R*tstrip0(R1R.tcRtlinetnamettimetidle((s./usr/lib64/python2.7/Demo/rpc/rnusersclient.pyttestCs

cCsAtd�}d�}|j|�|j�}dGt|�GHdS(Ns<broadcast>cSsF|\}}|dGx*|D]"\\}}}}}t|�GqWHdS(Ns	:(R4(RtfromaddrR.tportR6R7R8R9((s./usr/lib64/python2.7/Demo/rpc/rnusersclient.pytlistitTs
sTotal Count:(R/tset_reply_handlerR*tlen(R5R=tall((s./usr/lib64/python2.7/Demo/rpc/rnusersclient.pyR3Rs
	
cCs+x$|r&|ddkr&|d }qW|S(Ni����s((ts((s./usr/lib64/python2.7/Demo/rpc/rnusersclient.pyR4^s((
trpcRRRRRRR"R,R/R:R3R4(((s./usr/lib64/python2.7/Demo/rpc/rnusersclient.pyt<module>s"			T.py000064400000001077150400401760005323 0ustar00# Simple interface to report execution times of program fragments.
# Call TSTART() to reset the timer, TSTOP(...) to report times.

import sys, os, time

def TSTART():
    global t0, t1
    u, s, cu, cs = os.times()
    t0 = u+cu, s+cs, time.time()

def TSTOP(*label):
    global t0, t1
    u, s, cu, cs = os.times()
    t1 = u+cu, s+cs, time.time()
    tt = []
    for i in range(3):
        tt.append(t1[i] - t0[i])
    [u, s, r] = tt
    msg = ''
    for x in label: msg = msg + (x + ' ')
    msg = msg + '%r user, %r sys, %r real\n' % (u, s, r)
    sys.stderr.write(msg)
rpc.py000064400000065757150400401760005723 0ustar00# Sun RPC version 2 -- RFC1057.

# XXX There should be separate exceptions for the various reasons why
# XXX an RPC can fail, rather than using RuntimeError for everything

# XXX Need to use class based exceptions rather than string exceptions

# XXX The UDP version of the protocol resends requests when it does
# XXX not receive a timely reply -- use only for idempotent calls!

# XXX There is no provision for call timeout on TCP connections

import xdr
import socket
import os

RPCVERSION = 2

CALL = 0
REPLY = 1

AUTH_NULL = 0
AUTH_UNIX = 1
AUTH_SHORT = 2
AUTH_DES = 3

MSG_ACCEPTED = 0
MSG_DENIED = 1

SUCCESS = 0                             # RPC executed successfully
PROG_UNAVAIL  = 1                       # remote hasn't exported program
PROG_MISMATCH = 2                       # remote can't support version #
PROC_UNAVAIL  = 3                       # program can't support procedure
GARBAGE_ARGS  = 4                       # procedure can't decode params

RPC_MISMATCH = 0                        # RPC version number != 2
AUTH_ERROR = 1                          # remote can't authenticate caller

AUTH_BADCRED      = 1                   # bad credentials (seal broken)
AUTH_REJECTEDCRED = 2                   # client must begin new session
AUTH_BADVERF      = 3                   # bad verifier (seal broken)
AUTH_REJECTEDVERF = 4                   # verifier expired or replayed
AUTH_TOOWEAK      = 5                   # rejected for security reasons


class Packer(xdr.Packer):

    def pack_auth(self, auth):
        flavor, stuff = auth
        self.pack_enum(flavor)
        self.pack_opaque(stuff)

    def pack_auth_unix(self, stamp, machinename, uid, gid, gids):
        self.pack_uint(stamp)
        self.pack_string(machinename)
        self.pack_uint(uid)
        self.pack_uint(gid)
        self.pack_uint(len(gids))
        for i in gids:
            self.pack_uint(i)

    def pack_callheader(self, xid, prog, vers, proc, cred, verf):
        self.pack_uint(xid)
        self.pack_enum(CALL)
        self.pack_uint(RPCVERSION)
        self.pack_uint(prog)
        self.pack_uint(vers)
        self.pack_uint(proc)
        self.pack_auth(cred)
        self.pack_auth(verf)
        # Caller must add procedure-specific part of call

    def pack_replyheader(self, xid, verf):
        self.pack_uint(xid)
        self.pack_enum(REPLY)
        self.pack_uint(MSG_ACCEPTED)
        self.pack_auth(verf)
        self.pack_enum(SUCCESS)
        # Caller must add procedure-specific part of reply


# Exceptions
class BadRPCFormat(Exception): pass
class BadRPCVersion(Exception): pass
class GarbageArgs(Exception): pass

class Unpacker(xdr.Unpacker):

    def unpack_auth(self):
        flavor = self.unpack_enum()
        stuff = self.unpack_opaque()
        return (flavor, stuff)

    def unpack_callheader(self):
        xid = self.unpack_uint()
        temp = self.unpack_enum()
        if temp != CALL:
            raise BadRPCFormat, 'no CALL but %r' % (temp,)
        temp = self.unpack_uint()
        if temp != RPCVERSION:
            raise BadRPCVersion, 'bad RPC version %r' % (temp,)
        prog = self.unpack_uint()
        vers = self.unpack_uint()
        proc = self.unpack_uint()
        cred = self.unpack_auth()
        verf = self.unpack_auth()
        return xid, prog, vers, proc, cred, verf
        # Caller must add procedure-specific part of call

    def unpack_replyheader(self):
        xid = self.unpack_uint()
        mtype = self.unpack_enum()
        if mtype != REPLY:
            raise RuntimeError, 'no REPLY but %r' % (mtype,)
        stat = self.unpack_enum()
        if stat == MSG_DENIED:
            stat = self.unpack_enum()
            if stat == RPC_MISMATCH:
                low = self.unpack_uint()
                high = self.unpack_uint()
                raise RuntimeError, \
                  'MSG_DENIED: RPC_MISMATCH: %r' % ((low, high),)
            if stat == AUTH_ERROR:
                stat = self.unpack_uint()
                raise RuntimeError, \
                        'MSG_DENIED: AUTH_ERROR: %r' % (stat,)
            raise RuntimeError, 'MSG_DENIED: %r' % (stat,)
        if stat != MSG_ACCEPTED:
            raise RuntimeError, \
              'Neither MSG_DENIED nor MSG_ACCEPTED: %r' % (stat,)
        verf = self.unpack_auth()
        stat = self.unpack_enum()
        if stat == PROG_UNAVAIL:
            raise RuntimeError, 'call failed: PROG_UNAVAIL'
        if stat == PROG_MISMATCH:
            low = self.unpack_uint()
            high = self.unpack_uint()
            raise RuntimeError, \
                    'call failed: PROG_MISMATCH: %r' % ((low, high),)
        if stat == PROC_UNAVAIL:
            raise RuntimeError, 'call failed: PROC_UNAVAIL'
        if stat == GARBAGE_ARGS:
            raise RuntimeError, 'call failed: GARBAGE_ARGS'
        if stat != SUCCESS:
            raise RuntimeError, 'call failed: %r' % (stat,)
        return xid, verf
        # Caller must get procedure-specific part of reply


# Subroutines to create opaque authentication objects

def make_auth_null():
    return ''

def make_auth_unix(seed, host, uid, gid, groups):
    p = Packer()
    p.pack_auth_unix(seed, host, uid, gid, groups)
    return p.get_buf()

def make_auth_unix_default():
    try:
        from os import getuid, getgid
        uid = getuid()
        gid = getgid()
    except ImportError:
        uid = gid = 0
    import time
    return make_auth_unix(int(time.time()-unix_epoch()), \
              socket.gethostname(), uid, gid, [])

_unix_epoch = -1
def unix_epoch():
    """Very painful calculation of when the Unix Epoch is.

    This is defined as the return value of time.time() on Jan 1st,
    1970, 00:00:00 GMT.

    On a Unix system, this should always return 0.0.  On a Mac, the
    calculations are needed -- and hard because of integer overflow
    and other limitations.

    """
    global _unix_epoch
    if _unix_epoch >= 0: return _unix_epoch
    import time
    now = time.time()
    localt = time.localtime(now)        # (y, m, d, hh, mm, ss, ..., ..., ...)
    gmt = time.gmtime(now)
    offset = time.mktime(localt) - time.mktime(gmt)
    y, m, d, hh, mm, ss = 1970, 1, 1, 0, 0, 0
    offset, ss = divmod(ss + offset, 60)
    offset, mm = divmod(mm + offset, 60)
    offset, hh = divmod(hh + offset, 24)
    d = d + offset
    _unix_epoch = time.mktime((y, m, d, hh, mm, ss, 0, 0, 0))
    print "Unix epoch:", time.ctime(_unix_epoch)
    return _unix_epoch


# Common base class for clients

class Client:

    def __init__(self, host, prog, vers, port):
        self.host = host
        self.prog = prog
        self.vers = vers
        self.port = port
        self.makesocket() # Assigns to self.sock
        self.bindsocket()
        self.connsocket()
        self.lastxid = 0 # XXX should be more random?
        self.addpackers()
        self.cred = None
        self.verf = None

    def close(self):
        self.sock.close()

    def makesocket(self):
        # This MUST be overridden
        raise RuntimeError, 'makesocket not defined'

    def connsocket(self):
        # Override this if you don't want/need a connection
        self.sock.connect((self.host, self.port))

    def bindsocket(self):
        # Override this to bind to a different port (e.g. reserved)
        self.sock.bind(('', 0))

    def addpackers(self):
        # Override this to use derived classes from Packer/Unpacker
        self.packer = Packer()
        self.unpacker = Unpacker('')

    def make_call(self, proc, args, pack_func, unpack_func):
        # Don't normally override this (but see Broadcast)
        if pack_func is None and args is not None:
            raise TypeError, 'non-null args with null pack_func'
        self.start_call(proc)
        if pack_func:
            pack_func(args)
        self.do_call()
        if unpack_func:
            result = unpack_func()
        else:
            result = None
        self.unpacker.done()
        return result

    def start_call(self, proc):
        # Don't override this
        self.lastxid = xid = self.lastxid + 1
        cred = self.mkcred()
        verf = self.mkverf()
        p = self.packer
        p.reset()
        p.pack_callheader(xid, self.prog, self.vers, proc, cred, verf)

    def do_call(self):
        # This MUST be overridden
        raise RuntimeError, 'do_call not defined'

    def mkcred(self):
        # Override this to use more powerful credentials
        if self.cred is None:
            self.cred = (AUTH_NULL, make_auth_null())
        return self.cred

    def mkverf(self):
        # Override this to use a more powerful verifier
        if self.verf is None:
            self.verf = (AUTH_NULL, make_auth_null())
        return self.verf

    def call_0(self):               # Procedure 0 is always like this
        return self.make_call(0, None, None, None)


# Record-Marking standard support

def sendfrag(sock, last, frag):
    x = len(frag)
    if last: x = x | 0x80000000L
    header = (chr(int(x>>24 & 0xff)) + chr(int(x>>16 & 0xff)) + \
              chr(int(x>>8 & 0xff)) + chr(int(x & 0xff)))
    sock.send(header + frag)

def sendrecord(sock, record):
    sendfrag(sock, 1, record)

def recvfrag(sock):
    header = sock.recv(4)
    if len(header) < 4:
        raise EOFError
    x = long(ord(header[0]))<<24 | ord(header[1])<<16 | \
        ord(header[2])<<8 | ord(header[3])
    last = ((x & 0x80000000) != 0)
    n = int(x & 0x7fffffff)
    frag = ''
    while n > 0:
        buf = sock.recv(n)
        if not buf: raise EOFError
        n = n - len(buf)
        frag = frag + buf
    return last, frag

def recvrecord(sock):
    record = ''
    last = 0
    while not last:
        last, frag = recvfrag(sock)
        record = record + frag
    return record


# Try to bind to a reserved port (must be root)

last_resv_port_tried = None
def bindresvport(sock, host):
    global last_resv_port_tried
    FIRST, LAST = 600, 1024 # Range of ports to try
    if last_resv_port_tried is None:
        import os
        last_resv_port_tried = FIRST + os.getpid() % (LAST-FIRST)
    for i in range(last_resv_port_tried, LAST) + \
              range(FIRST, last_resv_port_tried):
        last_resv_port_tried = i
        try:
            sock.bind((host, i))
            return last_resv_port_tried
        except socket.error, (errno, msg):
            if errno != 114:
                raise socket.error, (errno, msg)
    raise RuntimeError, 'can\'t assign reserved port'


# Client using TCP to a specific port

class RawTCPClient(Client):

    def makesocket(self):
        self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    def do_call(self):
        call = self.packer.get_buf()
        sendrecord(self.sock, call)
        reply = recvrecord(self.sock)
        u = self.unpacker
        u.reset(reply)
        xid, verf = u.unpack_replyheader()
        if xid != self.lastxid:
            # Can't really happen since this is TCP...
            raise RuntimeError, 'wrong xid in reply %r instead of %r' % (
                                 xid, self.lastxid)


# Client using UDP to a specific port

class RawUDPClient(Client):

    def makesocket(self):
        self.sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

    def do_call(self):
        call = self.packer.get_buf()
        self.sock.send(call)
        try:
            from select import select
        except ImportError:
            print 'WARNING: select not found, RPC may hang'
            select = None
        BUFSIZE = 8192 # Max UDP buffer size
        timeout = 1
        count = 5
        while 1:
            r, w, x = [self.sock], [], []
            if select:
                r, w, x = select(r, w, x, timeout)
            if self.sock not in r:
                count = count - 1
                if count < 0: raise RuntimeError, 'timeout'
                if timeout < 25: timeout = timeout *2
##                              print 'RESEND', timeout, count
                self.sock.send(call)
                continue
            reply = self.sock.recv(BUFSIZE)
            u = self.unpacker
            u.reset(reply)
            xid, verf = u.unpack_replyheader()
            if xid != self.lastxid:
##                              print 'BAD xid'
                continue
            break


# Client using UDP broadcast to a specific port

class RawBroadcastUDPClient(RawUDPClient):

    def __init__(self, bcastaddr, prog, vers, port):
        RawUDPClient.__init__(self, bcastaddr, prog, vers, port)
        self.reply_handler = None
        self.timeout = 30

    def connsocket(self):
        # Don't connect -- use sendto
        self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)

    def set_reply_handler(self, reply_handler):
        self.reply_handler = reply_handler

    def set_timeout(self, timeout):
        self.timeout = timeout # Use None for infinite timeout

    def make_call(self, proc, args, pack_func, unpack_func):
        if pack_func is None and args is not None:
            raise TypeError, 'non-null args with null pack_func'
        self.start_call(proc)
        if pack_func:
            pack_func(args)
        call = self.packer.get_buf()
        self.sock.sendto(call, (self.host, self.port))
        try:
            from select import select
        except ImportError:
            print 'WARNING: select not found, broadcast will hang'
            select = None
        BUFSIZE = 8192 # Max UDP buffer size (for reply)
        replies = []
        if unpack_func is None:
            def dummy(): pass
            unpack_func = dummy
        while 1:
            r, w, x = [self.sock], [], []
            if select:
                if self.timeout is None:
                    r, w, x = select(r, w, x)
                else:
                    r, w, x = select(r, w, x, self.timeout)
            if self.sock not in r:
                break
            reply, fromaddr = self.sock.recvfrom(BUFSIZE)
            u = self.unpacker
            u.reset(reply)
            xid, verf = u.unpack_replyheader()
            if xid != self.lastxid:
##                              print 'BAD xid'
                continue
            reply = unpack_func()
            self.unpacker.done()
            replies.append((reply, fromaddr))
            if self.reply_handler:
                self.reply_handler(reply, fromaddr)
        return replies


# Port mapper interface

# Program number, version and (fixed!) port number
PMAP_PROG = 100000
PMAP_VERS = 2
PMAP_PORT = 111

# Procedure numbers
PMAPPROC_NULL = 0                       # (void) -> void
PMAPPROC_SET = 1                        # (mapping) -> bool
PMAPPROC_UNSET = 2                      # (mapping) -> bool
PMAPPROC_GETPORT = 3                    # (mapping) -> unsigned int
PMAPPROC_DUMP = 4                       # (void) -> pmaplist
PMAPPROC_CALLIT = 5                     # (call_args) -> call_result

# A mapping is (prog, vers, prot, port) and prot is one of:

IPPROTO_TCP = 6
IPPROTO_UDP = 17

# A pmaplist is a variable-length list of mappings, as follows:
# either (1, mapping, pmaplist) or (0).

# A call_args is (prog, vers, proc, args) where args is opaque;
# a call_result is (port, res) where res is opaque.


class PortMapperPacker(Packer):

    def pack_mapping(self, mapping):
        prog, vers, prot, port = mapping
        self.pack_uint(prog)
        self.pack_uint(vers)
        self.pack_uint(prot)
        self.pack_uint(port)

    def pack_pmaplist(self, list):
        self.pack_list(list, self.pack_mapping)

    def pack_call_args(self, ca):
        prog, vers, proc, args = ca
        self.pack_uint(prog)
        self.pack_uint(vers)
        self.pack_uint(proc)
        self.pack_opaque(args)


class PortMapperUnpacker(Unpacker):

    def unpack_mapping(self):
        prog = self.unpack_uint()
        vers = self.unpack_uint()
        prot = self.unpack_uint()
        port = self.unpack_uint()
        return prog, vers, prot, port

    def unpack_pmaplist(self):
        return self.unpack_list(self.unpack_mapping)

    def unpack_call_result(self):
        port = self.unpack_uint()
        res = self.unpack_opaque()
        return port, res


class PartialPortMapperClient:

    def addpackers(self):
        self.packer = PortMapperPacker()
        self.unpacker = PortMapperUnpacker('')

    def Set(self, mapping):
        return self.make_call(PMAPPROC_SET, mapping, \
                self.packer.pack_mapping, \
                self.unpacker.unpack_uint)

    def Unset(self, mapping):
        return self.make_call(PMAPPROC_UNSET, mapping, \
                self.packer.pack_mapping, \
                self.unpacker.unpack_uint)

    def Getport(self, mapping):
        return self.make_call(PMAPPROC_GETPORT, mapping, \
                self.packer.pack_mapping, \
                self.unpacker.unpack_uint)

    def Dump(self):
        return self.make_call(PMAPPROC_DUMP, None, \
                None, \
                self.unpacker.unpack_pmaplist)

    def Callit(self, ca):
        return self.make_call(PMAPPROC_CALLIT, ca, \
                self.packer.pack_call_args, \
                self.unpacker.unpack_call_result)


class TCPPortMapperClient(PartialPortMapperClient, RawTCPClient):

    def __init__(self, host):
        RawTCPClient.__init__(self, \
                host, PMAP_PROG, PMAP_VERS, PMAP_PORT)


class UDPPortMapperClient(PartialPortMapperClient, RawUDPClient):

    def __init__(self, host):
        RawUDPClient.__init__(self, \
                host, PMAP_PROG, PMAP_VERS, PMAP_PORT)


class BroadcastUDPPortMapperClient(PartialPortMapperClient, \
                                   RawBroadcastUDPClient):

    def __init__(self, bcastaddr):
        RawBroadcastUDPClient.__init__(self, \
                bcastaddr, PMAP_PROG, PMAP_VERS, PMAP_PORT)


# Generic clients that find their server through the Port mapper

class TCPClient(RawTCPClient):

    def __init__(self, host, prog, vers):
        pmap = TCPPortMapperClient(host)
        port = pmap.Getport((prog, vers, IPPROTO_TCP, 0))
        pmap.close()
        if port == 0:
            raise RuntimeError, 'program not registered'
        RawTCPClient.__init__(self, host, prog, vers, port)


class UDPClient(RawUDPClient):

    def __init__(self, host, prog, vers):
        pmap = UDPPortMapperClient(host)
        port = pmap.Getport((prog, vers, IPPROTO_UDP, 0))
        pmap.close()
        if port == 0:
            raise RuntimeError, 'program not registered'
        RawUDPClient.__init__(self, host, prog, vers, port)


class BroadcastUDPClient(Client):

    def __init__(self, bcastaddr, prog, vers):
        self.pmap = BroadcastUDPPortMapperClient(bcastaddr)
        self.pmap.set_reply_handler(self.my_reply_handler)
        self.prog = prog
        self.vers = vers
        self.user_reply_handler = None
        self.addpackers()

    def close(self):
        self.pmap.close()

    def set_reply_handler(self, reply_handler):
        self.user_reply_handler = reply_handler

    def set_timeout(self, timeout):
        self.pmap.set_timeout(timeout)

    def my_reply_handler(self, reply, fromaddr):
        port, res = reply
        self.unpacker.reset(res)
        result = self.unpack_func()
        self.unpacker.done()
        self.replies.append((result, fromaddr))
        if self.user_reply_handler is not None:
            self.user_reply_handler(result, fromaddr)

    def make_call(self, proc, args, pack_func, unpack_func):
        self.packer.reset()
        if pack_func:
            pack_func(args)
        if unpack_func is None:
            def dummy(): pass
            self.unpack_func = dummy
        else:
            self.unpack_func = unpack_func
        self.replies = []
        packed_args = self.packer.get_buf()
        dummy_replies = self.pmap.Callit( \
                (self.prog, self.vers, proc, packed_args))
        return self.replies


# Server classes

# These are not symmetric to the Client classes
# XXX No attempt is made to provide authorization hooks yet

class Server:

    def __init__(self, host, prog, vers, port):
        self.host = host # Should normally be '' for default interface
        self.prog = prog
        self.vers = vers
        self.port = port # Should normally be 0 for random port
        self.makesocket() # Assigns to self.sock and self.prot
        self.bindsocket()
        self.host, self.port = self.sock.getsockname()
        self.addpackers()

    def register(self):
        mapping = self.prog, self.vers, self.prot, self.port
        p = TCPPortMapperClient(self.host)
        if not p.Set(mapping):
            raise RuntimeError, 'register failed'

    def unregister(self):
        mapping = self.prog, self.vers, self.prot, self.port
        p = TCPPortMapperClient(self.host)
        if not p.Unset(mapping):
            raise RuntimeError, 'unregister failed'

    def handle(self, call):
        # Don't use unpack_header but parse the header piecewise
        # XXX I have no idea if I am using the right error responses!
        self.unpacker.reset(call)
        self.packer.reset()
        xid = self.unpacker.unpack_uint()
        self.packer.pack_uint(xid)
        temp = self.unpacker.unpack_enum()
        if temp != CALL:
            return None # Not worthy of a reply
        self.packer.pack_uint(REPLY)
        temp = self.unpacker.unpack_uint()
        if temp != RPCVERSION:
            self.packer.pack_uint(MSG_DENIED)
            self.packer.pack_uint(RPC_MISMATCH)
            self.packer.pack_uint(RPCVERSION)
            self.packer.pack_uint(RPCVERSION)
            return self.packer.get_buf()
        self.packer.pack_uint(MSG_ACCEPTED)
        self.packer.pack_auth((AUTH_NULL, make_auth_null()))
        prog = self.unpacker.unpack_uint()
        if prog != self.prog:
            self.packer.pack_uint(PROG_UNAVAIL)
            return self.packer.get_buf()
        vers = self.unpacker.unpack_uint()
        if vers != self.vers:
            self.packer.pack_uint(PROG_MISMATCH)
            self.packer.pack_uint(self.vers)
            self.packer.pack_uint(self.vers)
            return self.packer.get_buf()
        proc = self.unpacker.unpack_uint()
        methname = 'handle_' + repr(proc)
        try:
            meth = getattr(self, methname)
        except AttributeError:
            self.packer.pack_uint(PROC_UNAVAIL)
            return self.packer.get_buf()
        cred = self.unpacker.unpack_auth()
        verf = self.unpacker.unpack_auth()
        try:
            meth() # Unpack args, call turn_around(), pack reply
        except (EOFError, GarbageArgs):
            # Too few or too many arguments
            self.packer.reset()
            self.packer.pack_uint(xid)
            self.packer.pack_uint(REPLY)
            self.packer.pack_uint(MSG_ACCEPTED)
            self.packer.pack_auth((AUTH_NULL, make_auth_null()))
            self.packer.pack_uint(GARBAGE_ARGS)
        return self.packer.get_buf()

    def turn_around(self):
        try:
            self.unpacker.done()
        except RuntimeError:
            raise GarbageArgs
        self.packer.pack_uint(SUCCESS)

    def handle_0(self): # Handle NULL message
        self.turn_around()

    def makesocket(self):
        # This MUST be overridden
        raise RuntimeError, 'makesocket not defined'

    def bindsocket(self):
        # Override this to bind to a different port (e.g. reserved)
        self.sock.bind((self.host, self.port))

    def addpackers(self):
        # Override this to use derived classes from Packer/Unpacker
        self.packer = Packer()
        self.unpacker = Unpacker('')


class TCPServer(Server):

    def makesocket(self):
        self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        self.prot = IPPROTO_TCP

    def loop(self):
        self.sock.listen(0)
        while 1:
            self.session(self.sock.accept())

    def session(self, connection):
        sock, (host, port) = connection
        while 1:
            try:
                call = recvrecord(sock)
            except EOFError:
                break
            except socket.error, msg:
                print 'socket error:', msg
                break
            reply = self.handle(call)
            if reply is not None:
                sendrecord(sock, reply)

    def forkingloop(self):
        # Like loop but uses forksession()
        self.sock.listen(0)
        while 1:
            self.forksession(self.sock.accept())

    def forksession(self, connection):
        # Like session but forks off a subprocess
        import os
        # Wait for deceased children
        try:
            while 1:
                pid, sts = os.waitpid(0, 1)
        except os.error:
            pass
        pid = None
        try:
            pid = os.fork()
            if pid: # Parent
                connection[0].close()
                return
            # Child
            self.session(connection)
        finally:
            # Make sure we don't fall through in the parent
            if pid == 0:
                os._exit(0)


class UDPServer(Server):

    def makesocket(self):
        self.sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        self.prot = IPPROTO_UDP

    def loop(self):
        while 1:
            self.session()

    def session(self):
        call, host_port = self.sock.recvfrom(8192)
        reply = self.handle(call)
        if reply is not None:
            self.sock.sendto(reply, host_port)


# Simple test program -- dump local portmapper status

def test():
    pmap = UDPPortMapperClient('')
    list = pmap.Dump()
    list.sort()
    for prog, vers, prot, port in list:
        print prog, vers,
        if prot == IPPROTO_TCP: print 'tcp',
        elif prot == IPPROTO_UDP: print 'udp',
        else: print prot,
        print port


# Test program for broadcast operation -- dump everybody's portmapper status

def testbcast():
    import sys
    if sys.argv[1:]:
        bcastaddr = sys.argv[1]
    else:
        bcastaddr = '<broadcast>'
    def rh(reply, fromaddr):
        host, port = fromaddr
        print host + '\t' + repr(reply)
    pmap = BroadcastUDPPortMapperClient(bcastaddr)
    pmap.set_reply_handler(rh)
    pmap.set_timeout(5)
    replies = pmap.Getport((100002, 1, IPPROTO_UDP, 0))


# Test program for server, with corresponding client
# On machine A: python -c 'import rpc; rpc.testsvr()'
# On machine B: python -c 'import rpc; rpc.testclt()' A
# (A may be == B)

def testsvr():
    # Simple test class -- proc 1 doubles its string argument as reply
    class S(UDPServer):
        def handle_1(self):
            arg = self.unpacker.unpack_string()
            self.turn_around()
            print 'RPC function 1 called, arg', repr(arg)
            self.packer.pack_string(arg + arg)
    #
    s = S('', 0x20000000, 1, 0)
    try:
        s.unregister()
    except RuntimeError, msg:
        print 'RuntimeError:', msg, '(ignored)'
    s.register()
    print 'Service started...'
    try:
        s.loop()
    finally:
        s.unregister()
        print 'Service interrupted.'


def testclt():
    import sys
    if sys.argv[1:]: host = sys.argv[1]
    else: host = ''
    # Client for above server
    class C(UDPClient):
        def call_1(self, arg):
            return self.make_call(1, arg, \
                    self.packer.pack_string, \
                    self.unpacker.unpack_string)
    c = C(host, 0x20000000, 1)
    print 'making call...'
    reply = c.call_1('hello, world, ')
    print 'call returned', repr(reply)