HEX
Server: Apache
System: Linux hp3-stn-1011028.hostingp3.local 3.10.0-1160.119.1.el7.x86_64 #1 SMP Tue Jun 4 14:43:51 UTC 2024 x86_64
User: csh958633 (951153)
PHP: 8.3.30
Disabled: shell_exec,exec,system,popen,set_time_limit
Upload Files
File: //usr/share/rhn/osad/jabber_lib.pyo
�
D�)Xc@s�ddlZddlZddlZddlZddlZddlZddlZddlZddlm	Z	m
Z
ddlZddlm
Z
y*ddlmZddlmZmZWn7ek
r�ddlmZddlmZmZnXddlmZddlmZddlZz#ejdd	e�ddlZWdej�Xd
ZdeZ deZ!d
eZ"deZ#deZ$deZ%deZ&deZ'dZ(dZ)dfd��YZ*de
j
j+fd��YZ,d�Z-d�Z.dej/fd��YZ0dej1e0fd��YZ2dej3e0fd ��YZ4d!ej5e0fd"��YZ6d#fd$��YZ7d%�Z8d&e9fd'��YZ:d(e9fd)��YZ;d*e9fd+��YZ<d,e;fd-��YZ=d.e9fd/��YZ>d0e>fd1��YZ?d2e>fd3��YZ@d4e9fd5��YZAd6e;fd7��YZBd8ejCeDfd9��YZEd:e
jFfd;��YZFd<e
j
j+fd=��YZGd>d?�ZHd@�ZIdAfdB��YZJdC�ZKdD�ZLdEfdF��YZMdS(Gi����N(tOptionParsertOption(tSSL(tStringIO(t	log_debugt	log_error(t
raise_with_tb(tbstrtignoretcategorys#http://jabber.rhn.redhat.com/jabbers	%s/signeds%s/presence/subscribes%s/presence/subscribeds%s/presence/unsubscribes%s/message/request/checkins%s/message/response/checkins%s/message/request/pings%s/message/response/pingsurn:ietf:params:xml:ns:xmpp-tlss#urn:ietf:params:xml:ns:xmpp-stanzastRunnercBs�eZeZeZdZdZdZ	d�Z
d�Zd�Zd�Z
d�Zd�Zd�Zd	�Zd
�Zd�Zd�Zd
�Zd�Zdd�Zd�Zd�ZRS(i<iZc	Cs�|jdddddd�|jdddd	dd
�|jddddd
�|jddddd�g|_d|_d|_g|_d|_d|_d|_d|_	d|_
d|_dS(Ns-vs	--verbosetactiontcountthelpsIncrease verbositys-Ns
--nodetacht
store_trues4Suppress backgrounding and detachment of the processs
--pid-filetstoresWrite to this PID files	--logfiles"Write log information to this filei(toptiont
options_tabletNonetssl_certtdebug_levelt_jabber_serverst_connected_jabber_servert	_usernamet	_passwordt	_resourcet_in_backgroundt
_use_proxy(tself((s!/usr/share/rhn/osad/jabber_lib.pyt__init__Fs"								cCs7|jd|j�|_|jj�\|_|_dS(sProcess command line optionstoption_listN(t
option_parserRt_parsert
parse_argstoptionstargs(R((s!/usr/share/rhn/osad/jabber_lib.pytprocess_cli_options\scCs�|j�d}d}x�|dkr.d}nd}yu|j�}|rotdd�|j|d�d}n
|j|�|jd|�}|j|�|j|�Wqtk
r�y|j	�WnnXt
jd�qtk
r��qt
k
r=t
j�d}td|�|j�s|j�qqqtk
rst
j�d}tdd�d}qqtk
r�tj|j|j�}tdd	|�|j�s�|j�nytj|�Wq�tk
r�t
jd�q�Xqtk
r$t
j�d}td
��qtd�tt��tj|j|j�}tdd|d
�|j�s�|j�nytj|�Wq�tk
r�t
jd�q�XqXqdS(s�Method that starts up everything
        - processes command line options
        - big loop to reconnect if necessary
            - read config
            - setup config
            - setup jabber connection
            - process requests
        iiis###Forcing setuptno_forksRestart requestedisNeed Restarts8Unable to connect to jabber servers, sleeping %s secondssInvalid Cert Error:s
Error caught:tSleepingtsecondsN(R$Rtread_configRtsetup_configtsetup_connectiontfix_connectiontprocess_forevertKeyboardInterruptt
disconnecttsystexitt
SystemExittRestartRequestedtexc_infoRtis_in_backgroundtpush_to_backgroundtNeedRestarttJabberConnectionErrortrandomtrandintt
_min_sleept
_max_sleepttimetsleeptInvalidCertErrortextract_traceback(Rtforce_setupR%tconfigtctet
time_to_sleep((s!/usr/share/rhn/osad/jabber_lib.pytmainasz	
	
	









	







cCs|S(s>After setting up the connection, do whatever else is necessary((Rtclient((s!/usr/share/rhn/osad/jabber_lib.pyR+�scCs|S(N((RRF((s!/usr/share/rhn/osad/jabber_lib.pytpreprocess_once�scCs�td�|j|�xgy0|j|�tjdd�}tj|�Wqtk
rt|j�t	j
d�q�qXqdS(s%Big loop to process requests
        iii
iN(RRGtprocess_onceR8R9R<R=R-R.R/R0(RRFRD((s!/usr/share/rhn/osad/jabber_lib.pyR,�s




cCs
t�dS(s"To be overridden in a client classN(tNotImplementedError(RRF((s!/usr/share/rhn/osad/jabber_lib.pyRH�scCsdS(N((RRA((s!/usr/share/rhn/osad/jabber_lib.pyR)�scCsiS(N((R((s!/usr/share/rhn/osad/jabber_lib.pyR(�scCs|jS(N(R(R((s!/usr/share/rhn/osad/jabber_lib.pyR4�scCs|jjst�d|_n|jj}|rytj|�Wn6tk
rztj	�d}|j
dkr{�q{nXyvtj|tjtj
BtjBtdd��}tj|tdtj���tj|td��tj|�Wqtk
rqXndS(Niit0644is%ds
(R"tnodetachR5Rtpid_filetostunlinktOSErrorR/R3terrnotopentO_WRONLYtO_APPENDtO_CREATtinttwriteRtgetpidtclose(RRLRCtfd((s!/usr/share/rhn/osad/jabber_lib.pyR5�s$

/ 
cCs
t|�S(N(t
check_cert(Rtcert((s!/usr/share/rhn/osad/jabber_lib.pyRZ�scCs!td|�tdd|�dS(Nis"Could not connect to jabber server(R(RtjsRC((s!/usr/share/rhn/osad/jabber_lib.pyt
print_message�s
icCs�xX|jD]'}tdd|�y-|j|�}tdd|�||_PWq
tk
rmtjd�q
tjk
r�tj	�d}|j
|d�tt��q
q
t
k
r�tj	�d}|j
|d�tt��q
q
tk
r0tj	�d}|j
|d�tt��q
q
Xq
Wtdd�|sU|j�nt�|sn|j�n|jd	|jd
|jd|j�|jj|jd�|jj|jd
�|jj|jd�|S(s
        - initializes a Jabber connection (by instantiating a Jabber client)
        - if necessary, pushes to background
        - authentication and resource binding (by calling start())

        Possible causes for this function to return None:
        - jabber server is not started
        - jabber server is started but did not initialize SSL just yet

        This function will kill the process with exit code 1 if the SSL
        handshake failed (an indication of a mismatching CA cert). We do this
        so starting the program as a daemon to fail if this happens. Of
        course, if the server is down and the CA cert is bad, then the daemon
        will start but will silently fail afterwards; the error log should
        have a traceback though.
        is
Connecting toisConnected to jabber serverssocket errortJabberErrortSSLErrors&Could not connect to any jabber servertusernametpasswordtresourcetpresencetmessageterror(RRt_get_jabber_clientRtSSLHandshakeErrorR/R0tsocketReR3R]RR?R^R_R5R7tstartRRRtcustom_handlertregister_callbackt_presence_callbackt_message_callbackt_error_callback(RR%R\RBRC((s!/usr/share/rhn/osad/jabber_lib.pyR*�sH	









cCsTtd�|jdd�}|d}|j�}d}|jr�d|kr�i|djd�dd6t|djd�d�d6}|dr�|d	|d
<|d|d<q�nt|�d
krt|d�}td
d||�|j||d|�}n%td
d|�|j|d|�}|j|_|j	|j
�|j�|S(s]Returns a connected Jabber client, or raises an exception if it was
        unable to connectit:iit	proxy_urlthosttporttenable_proxy_autht
proxy_usertusertproxy_passwordRais
Connecting totproxyN(RtsplitR(RRRUtlentclient_factoryRtadd_trusted_certRtconnect(Rt
jabber_servertarrtcftjabberpy_proxy_dicttjabber_portRB((s!/usr/share/rhn/osad/jabber_lib.pyRf8s*

!

cCsJtd|�x6|jD]+}|j�dkrtd�t�qqWdS(s2Logs error stanza messages for diagnostic purposessReceived an error stanza: tconflicts6Received an conflict. Restarting with new credentials.N(RtkidstgetNameR6(RRFtstanzatkid((s!/usr/share/rhn/osad/jabber_lib.pyRnUs


N(t__name__t
__module__RRRRRRzR:R;RR$RER+RGR,RHR)R(R4R5RZR]R*RfRn(((s!/usr/share/rhn/osad/jabber_lib.pyR
;s*			N										D	R>cBseZd�ZeZRS(cCsdj|j�S(Nt (tjoinR#(R((s!/usr/share/rhn/osad/jabber_lib.pyt__str__^s(R�R�R�t__repr__(((s!/usr/share/rhn/osad/jabber_lib.pyR>]s	cCs�|dkrtd��nyt|�j�}Wn1tk
rdttd|�tj�d�nXytj	j
tj	j|�}Wn7tj	jk
r�ttd|�tj�d�nXt
dd|j��|j�r�td|��ndS(Ns&Cannot pass None as a certificate pathsUnable to read fileisUnable to open certificateisLoading certsExpired certificate(RR>RQtreadtIOErrorRR/R3Rtcryptotload_certificatetFILETYPE_PEMtErrorRtget_subjectthas_expired(t	cert_pathR[tx509((s!/usr/share/rhn/osad/jabber_lib.pyRZbs
$$cGs[tjdt|��j�}x6|D].}tjdtd||f��j�}q%W|S(Ntsha1s%s%s(thashlibtnewRt	hexdigest(t
secret_keytvaluesthtv((s!/usr/share/rhn/osad/jabber_lib.pytsignqs
,tJabberProtocolNodecBseZd�ZRS(cCs|jj|d�S(N(tattrstgetR(Rtkey((s!/usr/share/rhn/osad/jabber_lib.pytgetAttrys(R�R�R�(((s!/usr/share/rhn/osad/jabber_lib.pyR�xstJabberIqNodecBseZejZRS((R�R�R�R�(((s!/usr/share/rhn/osad/jabber_lib.pyR�|stJabberMessageNodecBseZejZRS((R�R�R�R�(((s!/usr/share/rhn/osad/jabber_lib.pyR�stJabberPresenceNodecBseZejZRS((R�R�R�R�(((s!/usr/share/rhn/osad/jabber_lib.pyR��stHandlerscBseeZd�Zd�Zd�Zd�Zd	d	d	d	d�Zd�Zd�Z	d�Z
d�ZRS(
cCstd�i|_dS(Ni(Rt	_handlers(R((s!/usr/share/rhn/osad/jabber_lib.pyR�s
cCsutd|�|j�|j|�}|s@tdd|�dSx.|D]&}tdd||�|||�qGWdS(NiisUnhandled stanzaisCalling callback(Rtcleanup_expired_callbackst_get_callbacks(RRFR�t	callbackstcallback((s!/usr/share/rhn/osad/jabber_lib.pytdispatch�s


cCstd|�|j�}||jkr,gS|j�}|j�}i}|j|\}}}}	|dk	r�|r�|j||fg�}
|j|
|�n|dk	r�|j|g�}
|j|
|�n|r�|j|g�}
|j|
|�n|j|	|�t|j	��S(Ni(
RR�R�tgetIDtgetNamespaceRR�t_get_callbacks_from_listtlisttkeys(RR�tstanza_namet	stanza_idt	stanza_nstresultth_idnsth_idth_nstl_deftcbs((s!/usr/share/rhn/osad/jabber_lib.pyR��s&
cCs�x�|D]�}|d \}}}|dks8|dkrWd||<|dkrWqqWn|d}|dkr�|j|�qn|d|d<qWdS(Niiii(Rtremove(Rtltresult_hashtentR�texpirytusage_count((s!/usr/share/rhn/osad/jabber_lib.pyR��s

	

cCs*td||||||�|r5tj�|}nd}|||g}|j|j|diiigf�\}	}
}}|dk	r�|r�|j|	||fg�}
|
j|�dS|dk	r�|j|
|g�}
|
j|�dS|r|j||g�}
|
j|�dS|j|�dS(Nit
default_value(RR<Rt_get_from_hashR�tappend(RR�R�R�R�ttimeoutR�R�tcallback_entryR�R�R�R�R�((s!/usr/share/rhn/osad/jabber_lib.pyRk�s*'


cCs+||kr||}n|}||<|S(N((RR�R�R�tval((s!/usr/share/rhn/osad/jabber_lib.pyR��s
c	Cs�td�tj�}xi|jj�D]X\}}|\}}}}x'|||fD]}|j||�qTW|j||�q&WdS(Ni(RR<R�titemst_expire_callbacks_hasht_expire_callbacks_list(	RtnowR�tvalsR�R�R�R�R�((s!/usr/share/rhn/osad/jabber_lib.pyR��s
cCs>td|�x*|j�D]\}}|j||�qWdS(Ni(RR�R�(RR�R�R�R�((s!/usr/share/rhn/osad/jabber_lib.pyR��s
cCs_td||�xH|D]@}|\}}}|s8qn||krJqn|j|�qWdS(Ni(RR�(RR�R�R�R�R�R�((s!/usr/share/rhn/osad/jabber_lib.pyR��s
N(R�R�RR�R�R�RRkR�R�R�R�(((s!/usr/share/rhn/osad/jabber_lib.pyR��s		
						cGsd|fGHdS(Ns
Debugging:((R#((s!/usr/share/rhn/osad/jabber_lib.pytmy_debug�sR2cBseZRS((R�R�(((s!/usr/share/rhn/osad/jabber_lib.pyR2sR^cBseZRS((R�R�(((s!/usr/share/rhn/osad/jabber_lib.pyR^sR6cBseZRS((R�R�(((s!/usr/share/rhn/osad/jabber_lib.pyR6stTimeoutErrorcBseZRS((R�R�(((s!/usr/share/rhn/osad/jabber_lib.pyR�sR_cBseZdZRS(s-Raised when a lower-level SSL error is caught(R�R�t__doc__(((s!/usr/share/rhn/osad/jabber_lib.pyR_sRgcBseZdZRS(s$Raised when the SSL handshake failed(R�R�R�(((s!/usr/share/rhn/osad/jabber_lib.pyRgstSSLDisabledErrorcBseZdZRS(s)Raised if the server does not support SSL(R�R�R�(((s!/usr/share/rhn/osad/jabber_lib.pyR�sR7cBseZdZRS(s6Raised when we were unable to make a jabber connection(R�R�R�(((s!/usr/share/rhn/osad/jabber_lib.pyR7stJabberQualifiedErrorcBs eZd�Zd�ZeZRS(cGs&||_||_tj||�dS(N(terrcodeterrR^R(RR�R�R#((s!/usr/share/rhn/osad/jabber_lib.pyRs		cCs&d|jjt|�|j|jfS(Ns'<%s instance at %s; errcode=%s; err=%s>(t	__class__R�tidR�R�(R((s!/usr/share/rhn/osad/jabber_lib.pyR�$s(R�R�RR�R�(((s!/usr/share/rhn/osad/jabber_lib.pyR�s		tJabberClientcBs�eZdZejjZd�Zd�Zd�Zd�Z	d�Z
d�Zd�Zd�Z
d	�Zd
�Zd*d�Zd�Zd
�Zd�Zdd�Zd�Zd�Zd*d*d*d�Zd�Zd�Zd�Zd*d�Zd�Zejd�Zejd�Z d�Z!d�Z"d�Z#d�Z$d�Z%d �Z&d*d!�Z'd"�Z(d#�Z)d$�Z*d%�Z+d&�Z,d'�Z-d*d(�Z.d)�Z/RS(+icOsUtd�tjj|||�d|_g|_d|_g|_|j	dt
�|j	dt�|j	dt�|j	dt
�|j	dt
�|jd|jdt�|jd|jd	tjdt�t�}||_|jd|j�|jd|j�|jd|j�|jd|j�d|_t�|_td
�|_dS(NiitunknowntiqRdRcRetsystemR�i(RtjabbertClientRRtjidt_incoming_node_queueRt
trusted_certstregisterProtocolR�R�R�R�tregisterHandlert_expectedIqHandlertTruet_IqRegisterResulttNS_REGISTERR�RjR�t
_non_ssl_socktRostert_rostertgenerate_random_stringt_uniq_client_string(RR#tkwargsR�((s!/usr/share/rhn/osad/jabber_lib.pyR.s.
							cCst|�|jj|�dS(N(RZR�R�(Rttrusted_cert((s!/usr/share/rhn/osad/jabber_lib.pyR{Ns
cCstd�|js"td��n|j|_tdd�x�tdd�D]�}ytjj|�WnAt	j
k
r�tj�d}t
d|�t	j
|��nXtdd	�|j�}tdd
|�|j�dkrtdd�|j�tjd�qKPqKWt
d
�t�|jd�}tdd|�|dkrht
d�|j�t�n|jdt�|j�}tdd|�|j�dkr�t
d�|j�t�ntdd�t|jd|j�}tjj|_|j|_|j�y|j�|j |�WnEtjj!k
rpt
d�t
t"��t#t$tj�d�nXtj%j&j|�|j|_'|j(|_|j)�|j*|j+��|j,�|j�}|j�dkr�|j�t-d��n|j.|_tdd�dS(NisNo trusted certs addedisAttempting to connectiiislError connecting to jabber server: %s. See https://access.redhat.com/solutions/327903 for more information. t	ConnectedsExpecting features stanza, got:tfeaturess9Server did not return a <features /> stanza, reconnectings^Not able to reconnect - See https://access.redhat.com/solutions/45332 for possible solutions.
tstarttlss
starttls nodesEServer does not support TLS - <starttls /> not in <features /> stanzas<starttls xmlns='%s' />sExpecting proceed stanza, got:tproceeds3Server broke TLS negotiation - <proceed /> not sentisPreparing for TLS handshakeR�sTraceback caught:s!Server did not pass any features?sconnect returning(/RR�tSSLVerifyErrort_auth_dispatchR�trangeR�R�R|RhReR/R3Rtget_one_stanzaR�R.R<R=R�tgetTagRRVtNS_STARTTLSt	SSLSockett_sockRtTLSv1_METHODt_ssl_methodtssl_verify_callbacktinit_ssltdo_handshaketverify_peerR�R?RRgt	xmlstreamtStreamR�t_connectiont_setupCommstsendt_header_stringtprocesst	Exceptiont_orig_dispatch(RtretryRCR�t
starttls_nodetssl((s!/usr/share/rhn/osad/jabber_lib.pyR|Rsx
	






	

	







cCs2ytjj|�Wntjjk
r-nXdS(N(R�R�R.RR�(R((s!/usr/share/rhn/osad/jabber_lib.pyR.�scCsX|jj|_t|jd�r3|jj|_nt|j�j|_|j|_dS(Ntsendall(R�trecvt_readthasattrRt_writetSendallt_reader(R((s!/usr/share/rhn/osad/jabber_lib.pyR�s
cCsRtdd|||�|sNtd�|jd�|j�|jj�|S|S(NitCalleds#SSL certificate verification faileds</stream:stream>(RRRVRXR�(RtconnR[terrnumtdepthtok((s!/usr/share/rhn/osad/jabber_lib.pyR��s



cCs�|j�}|dkr'td��n|j�}t|d�sQtd��n|j}|ddkrw|d}n|j}|ddkr�|d}n||kr�tj||�r�td|j|f��ndS(NsUnable to retrieve peer certtCNsCertificate has no Common Namei����t.s(Mismatch: peer name: %s; common name: %s(	tget_peer_certificateRR�R�RRt_hosttfnmatchtfnmatchcase(RR
R[tsubjecttcommon_namethdot((s!/usr/share/rhn/osad/jabber_lib.pyR��s	
	
cCs|jj|jd�d|j�}tdd�}|jtj�|j|�|j	|�d	}x.|j�}|jd�}||krhPqhqhxh|j
j�j�D]Q\}}d|kr�|ddkr�|j|dd�q�|j|dd�q�Wd	S(
s}Request the roster. Will register the roster callback,
        but the call will wait for the roster to be properly populatedR�s
iq-request-%sttypeR�R�taskt	subscribet
subscribedN(RjRkt_roster_callbackt
get_unique_idR�tsetQueryR�t	NS_ROSTERtsetIDRRR�R�R�tget_subscribed_fromR�t
send_presence(Rt
iq_node_idtiq_nodeR�tnode_idtkR�((s!/usr/share/rhn/osad/jabber_lib.pytretrieve_roster�s 

"cCs�tdd|�|jd�}|dks@|j�tjkrQtdd�dS|jd�}|dkr}tdd	�dSx'|jd
�D]}|jj	|�q�WdS(NisUpdating the rostertqueryisQuery node not found, skippingR R�tsetsNot a result or a set, skippingtitem(sresultsset(
RR�RR�R�R'R�tgetTagsR�tadd_item(RRFR�tqnodet	node_typetnode((s!/usr/share/rhn/osad/jabber_lib.pyR$s!

cCs�|s
dStd�}|jtj�xA|D]9}i|d6dd6}tdd|�}|j|�q-Wtdd�}d	|j�}|j|�|j|�|j|�dS(
NR0R�R�tsubscriptionR2R�R R1s	remove-%s(	R�tsetNamespaceR�R't
insertNodeR�R%R(R(RtjidsR5R�R�tinodeR7tremove_iq_id((s!/usr/share/rhn/osad/jabber_lib.pytcancel_subscriptions



cCs�|rtj�}nxp|js�|rntj�}|||kr]tdd|||�dS|||}nd}|jd|�qW|jd}|jd=|S(s.Returns one stanza (or None if timeout is set)is	timed outR�iN(R<R�RRR(RR�RiR�ttmR7((s!/usr/share/rhn/osad/jabber_lib.pyR�1s

cCsB|j�}||jkr$d}n|j|td|�}|S(snBuilds one stanza according to the handlers we have registered via
        registerHandler or registerProtocolR�R7(R�thandlersR (RR�tname((s!/usr/share/rhn/osad/jabber_lib.pyt
_build_stanzaGs
	cCs�td|�|jdkrUtjjd�tjjt|��tjjd�n|j|�}tjj	||�|j
j|�dS(Niis<-- s

(RRR/tstderrRVtstrRBR�R�R�R�R�(RR�((s!/usr/share/rhn/osad/jabber_lib.pyRQs
cCsxtd|�|jdkrUtjjd�tjjt|��tjjd�n|j|�}|jj|�dS(Niis<-- s

(	RRR/RCRVRDRBR�R�(RR�((s!/usr/share/rhn/osad/jabber_lib.pyR�_s
icCsGtd||||�d|j�}tjdd�}|j|�|jtj�}|jd�j|�|j	|�tdd|�y|j
|dd	�}Wnutk
rtj
�d
}	|s��n|	jdkrtdd�|j||�|j|||d
d�S�nXtdd|�|jd�}
d|j�}tjdd�}|j|�|jtj�}|jd�j|�|jd�j|�|
jd�r\|
jd�j�}
|
jd�j�}tjdtjd|�j�|
�j�}x2tt|��D]}tjd|�j�}q!W|jd�j|�nf|
jd�r�|jd�}|jtjdt|j�|��j��n|jd�j|�tdd|�y|j|�WnPtk
r5tj
�d
}	|	jdkr/tdd�|j||�S�nXtdd�tS(s�Try to authenticate the username with the specified password
        If the authentication fails, try to register the user.
        If that fails as well, then JabberQualifiedError is raised
        isauth-get-%sR R�R`isSending auth requestR�i<it401sNeed to registertregisteris
Auth responseR0sauth-set-%sR1RbttokentsequenceR�thashtdigestRasSending auth infot
Authenticated(RR%R�tIqR(R&tNS_AUTHt	insertTagt
insertDataRtwaitForResponseR�R/R3R�RFtauthR�tgetDataR�R�R�R�RURt
getIncomingIDtSendAndWaitForResponseR�(RR`RaRbRFt
auth_iq_idtauth_get_iqtqt
auth_responseRCtauth_ret_querytauth_set_idtauth_set_iqRGtseqR�tiRJ((s!/usr/share/rhn/osad/jabber_lib.pyRQjsd




.#


cCs[|jdkrHtjjd�tjjt|��tjjd�ntjj||�S(Nis--> s

(RR/RCRVRDR�R�R(RR�((s!/usr/share/rhn/osad/jabber_lib.pyR�s
cCsb|jj�}tdd|�|jj�}tdd|�|jj�}tdd|�|jj�}tdd|�x�|D]�}|j|�}t|�}||kr�tdd|�q�n||kr�tdd�q�n||kr-||}d|kr-|ddkr-tdd	�q�q-n||kru||}d|kru|ddkrutdd
�q�qun||jjkr�d}	|jj}
nd}	|jj	}
i|d
6|	d6dd6|
|<td|�|j|�}t
d|dd�}|jd|j��|j
|t�}
|
r=|j|
�ntdd|�|j|�q�WdS(s�Subscribe to these nodes' presence
        The subscription in jabber works like this:

        Contact 1    State Contact 1     State Contact 2   Contact 2
        ----------+-------------------+------------------+----------
        subscribe  -> [ none + ask ]
                                         [ from ]       <- subscribed
                      [ to ]
                                         [ from + ask ] <- subscribe
        subscribed -> [ both ]
                                         [ both ]
        ----------+-------------------+------------------+----------

        Enclosed in square brackets is the state when the communication took
        place.
        is
Subscribed tosSubscribed bothsSubscribed nonesSubscribed froms*Already subscribed to the presence of nodeR!R"sSubscribed none + ask=subscribesSubscribed from + ask=subscribetfromtnoneR�R8ttoR spresence-%sis%Sending presence subscription requestN(R�tget_subscribed_toRtget_subscribed_bothtget_subscribed_noneR)t_strip_resourceRDt_subscribed_fromt_subscribed_noneR�R(R%t_create_signaturetNS_RHN_PRESENCE_SUBSCRIBER:R(RR;t
subscribed_totsubscribed_bothtsubscribed_nonetsubscribed_fromtfull_jidR�R�R8thashdtstripped_jidt
presence_nodetsig((s!/usr/share/rhn/osad/jabber_lib.pytsubscribe_to_presence�sZ



	

	
cCsttd||�|dkr(t�}ntd|�}|rM|j|�n|rc|j|�n|j|�dS(NiR`(RRR�tsetTypeR(R(RR�R txidR7((s!/usr/share/rhn/osad/jabber_lib.pyR*scCs
|jj�S(N(Rtfileno(R((s!/usr/share/rhn/osad/jabber_lib.pyRuscCs�d}x]tj|j�gggd�\}}}|s=Pn|j|j�}|sYPn||}q	|s||j|�n|S(Nti(tselectRuR
t
BLOCK_SIZEtdisconnected(Rtreceivedtrfdstwfdstexfdstbuff((s!/usr/share/rhn/osad/jabber_lib.pyR�s*
cCsdS(N((R((s!/usr/share/rhn/osad/jabber_lib.pytprocess_loop_hook(scCs@td|�g|_|j�}tj�}xtj�}|rh|||krWdS|||}nd}|j�tdd|�tj|ggg|�\}}}tdd�|s�dSt|jd�r�tdd|j	�y|j
|j	�}	Wngtjjk
rht
j�d}
tdd	�|jj�ttd
t|
��t
j�d�nXtddt|	��|	s�td
��n|jj|	�|jj�}|r|j
|�}	|jj|	�qn7|j
|j	�}	|	std
��n|jj|	�|js/|r+q1ndSt|j�SdS(Niiisbefore select(); timeoutsselect() returnedtpendings Reading %s bytes from ssl socketisClosing socketsOpenSSL error; will retryis
Read %s bytess
Premature EOF(RR�RuR<RRRwRR�RxR
RtSysCallErrorR/R3R�RXRR_RDRyR^R tParseR�(RR�RuRiR�R?R{R|R}tdataRCR�((s!/usr/share/rhn/osad/jabber_lib.pyR+sX
	
$


*	
cCs�td||�|j�|j�}d|krE|jd|�nd|krd|jd|�ny|j�WnWtk
r�tj�d}|jdkr�t	d�|j
�tjd�n�nXtS(NiR`Rait409sInvalid passwordi(
RtrequestRegInfot
getRegInfot
setRegInfotsendRegInfoR�R/R3R�RR.R0R�(RR`RatdRC((s!/usr/share/rhn/osad/jabber_lib.pyRFns"



cCsRtd||�tj|�}d|_d|_|dk	rmtj�|}|jd||ftj�n|jd|tj�x�|dkr�d}n |tj�}|dkr�Pntdd�|j	|�}tdd�|s�Pn|j
�}|r|j�|_||_dStj|j��}||kr�|Sq�d|_dS(	NiRviswaiting with timeout:%s for %sswaiting for %ssbefore get_one_stanzasafter get_one_stanzatTimeout(
RR�tustrtlastErrtlastErrCodeRR<tDEBUGtDBG_NODE_IQR�tgetErrorCodetgetErrorR�(RtIDR�t
abort_timettmoutR�t
error_codettid((s!/usr/share/rhn/osad/jabber_lib.pyt_waitForResponse�s<		
	

		cCsw|j|d|�}|dk	r%|S|jdkr@t��n|jrat|j|j��ntd|j��dS(NR�R�s
Unknown error(R�RR�R�R�R�R^(RR�R�R�((s!/usr/share/rhn/osad/jabber_lib.pyRP�s	cCs'|j}|dt_d|j|fS(Nis%s-%s(t_seqR�R�(RR\((s!/usr/share/rhn/osad/jabber_lib.pyR%�s	
cCsdS(N((RR((s!/usr/share/rhn/osad/jabber_lib.pytdisconnectHandler�scCs�|jdtj�d}i|jd6|jd6dd6dd6}|jrZ|j|d	<ng}x1|j�D]#\}}|jd
||f�qmWdj|�}||S(Ns6jabber_lib.JabberClient.header: sending initial headers8<?xml version='1.0' encoding='UTF-8'?><stream:stream %s>R`txmlnss http://etherx.jabber.org/streamssxmlns:streams1.0tversionR�s%s='%s'R�(	R�R�tDBG_INITRt
_namespacet_outgoingIDR�R�R�(RttemplR�tadditionR.R�((s!/usr/share/rhn/osad/jabber_lib.pyR�s	



	cCs-|j�}|j|�|jtj�dS(N(RRRR�R�(Rtheader((s!/usr/share/rhn/osad/jabber_lib.pyR��s
cCs|S(N((RR�((s!/usr/share/rhn/osad/jabber_lib.pyt_fix_jid�scCs8|j�}|j�}td|j||�|j�}|dksR|dkr�tdd||�|j|�|j|g�dS|dkr�tdd||�|j|�dS|d	kr�tdd
|�|j	|ddd|�|j|g�dS|d
kr4tdd|�|j
td|��ndS(s�
        If the roster is enabled, presence stanzas with type="subscribed"
        should never be received - the server will initiate a roster push
        instead
        iR#isNode is availableNtunsubscribedtunavailablesNode is unavailableR"sSubscription request approvedR RttprobesPresence probeR`(R�R�(tgetFromtgetTypeRR�R�Rtset_jid_availableRrtset_jid_unavailableR*RR�(RRFR�R�t
presence_typeR�((s!/usr/share/rhn/osad/jabber_lib.pyRl�s*


cCsdS(Ni((RR�tactions((s!/usr/share/rhn/osad/jabber_lib.pyt_check_signaturescCs
t|�S(N(tstrip_resource(RR�((s!/usr/share/rhn/osad/jabber_lib.pyRdscCsdS(N(R(RR�R((s!/usr/share/rhn/osad/jabber_lib.pyRgscCsNtd|dd�}|j||�}|r=|j|�n|j|�dS(NR`R tnormal(R�RgR:R(RR�RR7Rq((s!/usr/share/rhn/osad/jabber_lib.pytsend_messages
cCs|jj|�S(N(R�t
jid_available(RR�((s!/usr/share/rhn/osad/jabber_lib.pyR�%scCs|jj|�S(N(R�t
set_available(RR�((s!/usr/share/rhn/osad/jabber_lib.pyR�(scCs|jj|�S(N(R�tset_unavailable(RR�((s!/usr/share/rhn/osad/jabber_lib.pyR�+scCsR|j|�}|sgS|dkr)|Sg|D]}|j�|kr0|^q0S(s[Get the matching (child) tags of this stanza, possibly with the
        specified namespaceN(R3RR�(RR�ttag_namet	namespacettagstx((s!/usr/share/rhn/osad/jabber_lib.pytmatch_stanza_tags.scCs�td|�|j�}|j�}|dkrLtdd||f�dS|dkrmtdd|�dS|j|ddtj�}|r�tdd	�dS|j|d
|�}|s�|jdkr�t	d��ntdd�dS|S(
NiReisReceived error from %s: %sR�s#Unsupported message type %s ignoredR�R�sIgnoring delayed stanzaR�isMismatching signatures(
RR�R�RR�R�tNS_DELAYR�RR(RR�R�tmessage_fromtmessage_typetx_delayed_nodesRq((s!/usr/share/rhn/osad/jabber_lib.pyt_check_signature_from_message9s*


N(0R�R�R�R�R�RxRR{R|R.RR�R�R/R$R>RR�RBRR�RQRRrR*RuR�RRRFR�R�RPR%R�RR�R�RlR�RdRgR�R�R�R�R�R�(((s!/usr/share/rhn/osad/jabber_lib.pyR�*sT	 		g									
		C		Q			C	3
						/						R�cBseZRS((R�R�(((s!/usr/share/rhn/osad/jabber_lib.pyR�WsR�cBseZRS((R�R�(((s!/usr/share/rhn/osad/jabber_lib.pyR�ZsicCs�|s
dSd}t|�}tjd�}|jtdtj���|jtdtj���tdd�}g}d}xR|j|j	|��|j
�}|j|�|t|�}||kr�Pq�q�|j
�dj|�| j�S(	NRviR�s%.8fs%ss/dev/urandomtrbi(RUR�R�tupdateRR<RMRWRQR�R�R�RyRXR�tlower(tlengthtrandom_bytestst	devrandomR�t
cur_lengthtbuf((s!/usr/share/rhn/osad/jabber_lib.pyR�]s&

cCstdd�tj�}|dkr5tjd�ntj�tjd�tjd�x$tjtj	fD]}|j
�qlWtdd�}tdd�}tddd�}tj|j
�tjj
��tj|j
�tjj
��tj|j
�tj	j
��dS(NisPushing process into backgroundit/s	/dev/nulltrsab+(RRMtforkt_exittsetpgrptchdirtumaskR/tstdoutRCtflushRQtdup2Rutstdin(tpidtftsitsotse((s!/usr/share/rhn/osad/jabber_lib.pyR5us



R�cBs�eZd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zd
�Zd�Z
d�Zd
�ZRS(cCs1i|_i|_i|_i|_i|_dS(N(t_subscribed_toRet_subscribed_bothRft_available_nodes(R((s!/usr/share/rhn/osad/jabber_lib.pyR�s
				c	Cs�|jd�}|jd�}t|�}t|�}i|d6|d6}|jd�}|rl||d<nddddg}||kr�xS|D]H}t|d|�}||kr�|||<q�||kr�||=q�q�WndS(	NR8R�R!R`R^tbothR_t_subscribed_(R�R�RDtgetattr(	RR2tsubscrR�tentryR!R�taR�((s!/usr/share/rhn/osad/jabber_lib.pyR4�s$



cCs
|jj�S(N(Retcopy(R((s!/usr/share/rhn/osad/jabber_lib.pyR)�scCs
|jj�S(N(R�R�(R((s!/usr/share/rhn/osad/jabber_lib.pyRa�scCs
|jj�S(N(R�R�(R((s!/usr/share/rhn/osad/jabber_lib.pyRb�scCs
|jj�S(N(RfR�(R((s!/usr/share/rhn/osad/jabber_lib.pyRc�scCs#|jj�}|j|j�|S(N(R�R�R�R�(Rtret((s!/usr/share/rhn/osad/jabber_lib.pytget_subscribed_to_jids�scCs#|jj�}|j|j�|S(N(ReR�R�R�(RR�((s!/usr/share/rhn/osad/jabber_lib.pytget_subscribed_from_jids�scCs
|jj�S(N(R�R�(R((s!/usr/share/rhn/osad/jabber_lib.pytget_available_nodes�scCst|�}d|j|<dS(Ni(RDR�(RR�((s!/usr/share/rhn/osad/jabber_lib.pyR��scCs,t|�}||jkr(|j|=ndS(N(RDR�(RR�((s!/usr/share/rhn/osad/jabber_lib.pyR��scCs
||jkS(N(R�(RR�((s!/usr/share/rhn/osad/jabber_lib.pyR��scCs8|jj�|jj�|jj�|jj�dS(N(R�tclearReR�Rf(R((s!/usr/share/rhn/osad/jabber_lib.pyR��s


cCs8d|jj�|jj�|jj�|jj�fS(Ns-Roster:
	to: %s
	from: %s
	both: %s
	none: %s(R�R�ReR�Rf(R((s!/usr/share/rhn/osad/jabber_lib.pyR��s
(R�R�RR4R)RaRbRcR�R�R�R�R�R�R�R�(((s!/usr/share/rhn/osad/jabber_lib.pyR��s													cCs.t|tj�s$tj|�}n|j�S(N(t
isinstanceR�tJIDtgetStripped(R�((s!/usr/share/rhn/osad/jabber_lib.pyR��scCs#t�}tjd|�|j�S(N(Rt	tracebackt	print_excRtgetvalue(tsio((s!/usr/share/rhn/osad/jabber_lib.pyR?�s	RcBs#eZdZd�Zdd�ZRS(s_This class exists here because python 1.5.2 does not support a
    sendall() method for socketscCs
||_dS(N(tsock(RR�((s!/usr/share/rhn/osad/jabber_lib.pyRsicCs]t|�}|sdSd}x:|jj|||�}|||krLPn||}q|S(Ni(RyR�R(RR�tflagstto_sendt
bytes_sentR�((s!/usr/share/rhn/osad/jabber_lib.pyRs
(R�R�R�RR(((s!/usr/share/rhn/osad/jabber_lib.pyR�s	(NRMR�R/R<RwRhR8RtoptparseRRR�trhnRtioRtosad.rhn_logRRtImportErrort	cStringIOtrhn_logtspacewalk.common.usixRtrhn.i18nRtwarningstfilterwarningstDeprecationWarningR�t
resetwarningstNS_RHNt
NS_RHN_SIGNEDRhtNS_RHN_PRESENCE_SUBSCRIBEDtNS_RHN_PRESENCE_UNSUBSCRIBEtNS_RHN_MESSAGE_REQUEST_CHECKINtNS_RHN_MESSAGE_RESPONSE_CHECKINtNS_RHN_MESSAGE_REQUEST_PINGtNS_RHN_MESSAGE_RESPONSE_PINGR�t
NS_STANZASR
R�R>RZR�tProtocolR�RLR�tMessageR�tPresenceR�R�R�RR2R^R6R�R_RgR�R7R�R�tobjectR�R�R�R�R5R�R�R?R(((s!/usr/share/rhn/osad/jabber_lib.pyt<module>s�








�#		z	���0	*T