8Yc@sddlZddlZddlZddlZdZdZdZdZdZdZ dZ dZ dZ d Z d Zd Zd Zd ZdZdZdZeZdd,dYZdZdd-dYZdd.dYZdZdZdZdZdZdZ dZ!dZ"dZ#d Z$d!Z%d"Z&d#Z'd$Z(d%Z)d&Z*d'Z+e,d(kre-Zd)GHe+e.ej/dkrej/dpd*eeZ0ej1d+ndS(/iNiiiiiiii i i i iii!tDNSQueryHeadercBs2eZdZdZdZdZdZRS(s!HBBHHHHcCsyd|_d|_d|_d|_d|_d|_d|_d|_d|_d|_ d|_ d|_ d|_ dS(Ni( tdns_idtdns_rdtdns_tctdns_aat dns_opcodetdns_qrt dns_rcodetdns_ztdns_rat dns_qdcountt dns_ancountt dns_nscountt dns_arcount(tself((s"/usr/share/authconfig/dnsclient.pyt__init__/s            c Cstjtj|j|jd@|jd@d>B|jd@d>B|jd@d>B|j d@d>B|j d@|j d@d>B|j d@d>B|j |j|j|jS(Niiiiii(tstructtpackRtFORMATRRRRRRRRR R R R R (R((s"/usr/share/authconfig/dnsclient.pyR>s 7cCstjtj|d|j!\|_}}|_|_|_|_ |d@|_ |d?d@|_ |d?d@|_ |d?d@|_ |d?d@|_|d@|_|d?d@|_|d?d@|_dS(Niiiiiii(RtunpackRRtsizeRR R R R RRRRRRRR (Rtdatatbyte1tbyte2((s"/usr/share/authconfig/dnsclient.pyRNsF  cCstjtjS(N(RtcalcsizeRR(R((s"/usr/share/authconfig/dnsclient.pyRZs(t__name__t __module__RRRRR(((s"/usr/share/authconfig/dnsclient.pyR-s    cCst}|j||S(N(RR(Rtheader((s"/usr/share/authconfig/dnsclient.pytunpackQueryHeader]s  t DNSResultcBsAeZdZdZdZdZdZdZdZRS(s!HHIHs!HHcCs:d|_d|_d|_d|_d|_d|_dS(Nti(tdns_nametdns_typet dns_classtdns_ttlt dns_rlengthtNonetrdata(R((s"/usr/share/authconfig/dnsclient.pyRes      cCs>tjtj|d|j!\|_|_|_|_dS(Ni( RRRRRR R!R"R#(RR((s"/usr/share/authconfig/dnsclient.pyRmscCs2tjtj|d|j!\|_|_dS(Ni(RRRtQFORMATtqsizeR R!(RR((s"/usr/share/authconfig/dnsclient.pytqunpackqscCstjtjS(N(RRRR(R((s"/usr/share/authconfig/dnsclient.pyRtscCstjtjS(N(RRRR&(R((s"/usr/share/authconfig/dnsclient.pyR'ws( RRRR&RRR(RR'(((s"/usr/share/authconfig/dnsclient.pyRbs    tDNSRDatacBseZdZRS(cCsdS(N((R((s"/usr/share/authconfig/dnsclient.pyR{s(RRR(((s"/usr/share/authconfig/dnsclient.pyR)zscCsDd}|jd}x(|D] }|tt||7}qW|S(NRt.(tsplittchrtlen(tnametouttpart((s"/usr/share/authconfig/dnsclient.pytdnsNameToLabels  cCst}d|_d|_d|_d|_d|_t|}|sLdS|j|}|t|d?7}|t|d@7}|t|d?7}|t|d@7}|S(NiiRii( RRRRRR R1RR,(tquerytqclasstqtypeRtqlabelR/((s"/usr/share/authconfig/dnsclient.pytdnsFormatQuerys       cCs|s d Sd}|}d}d}yxt|drt|dd@r|t|dd@d>t|d}|r|d7}nd}q(n||dt|dd!d7}|r|t|dd7}n|t|dd}q(WWntk r d SX||||fS( NRiiii?iiR*(RN(RN(R$tordt IndexError(tlabeltbasetupdatetresttoutputtskip((s"/usr/share/authconfig/dnsclient.pyt dnsParseLabels** #  cCst}t|dkr(d|_dSt|dd>t|dd>Bt|dd>Bt|dd>B|_trd t|dt|dt|dt|dfGHn|S( NiiiiiiiisA = %d.%d.%d.%d.(R)R-taddressR$R7tDEBUG_DNSCLIENT(RR:R%((s"/usr/share/authconfig/dnsclient.pyt dnsParseAs  M@cCs]t|dkrdSt|d}t||dkr@dS||d|d|d!fS(NiRi(RN(RN(R-R$R7(Rttlen((s"/usr/share/authconfig/dnsclient.pyt dnsParseTexts cCs:t}t||\}|_tr6d|jGHn|S(NsNS DNAME = "%s".(R)R?tnsdnameRA(RR:R%R<((s"/usr/share/authconfig/dnsclient.pyt dnsParseNSs  cCs:t}t||\}|_tr6d|jGHn|S(Ns CNAME = "%s".(R)R?tcnameRA(RR:R%R<((s"/usr/share/authconfig/dnsclient.pyt dnsParseCNAMEs  cCs"t}d}t||\}|_|jdkr:dSt||\}|_|jdkredSt|tj|krdStj||tj| \|_ |_ |_ |_ |_ trd|jGHd|jGHd|j GHd|j GHd|j GHd|j GHd|j GHn|S( Ns!IIIIIsSOA(mname) = "%s".sSOA(rname) = "%s".sSOA(serial) = %d.sSOA(refresh) = %d.sSOA(retry) = %d.sSOA(expire) = %d.sSOA(minimum) = %d.(R)R?tmnameR$trnameR-RRRtserialtrefreshtretrytexpiretminimumRA(RR:R%tformatR<((s"/usr/share/authconfig/dnsclient.pyt dnsParseSOAs( =      cCsdS(N(R$(RR:((s"/usr/share/authconfig/dnsclient.pyt dnsParseNULL"scCsdS(N(R$(RR:((s"/usr/share/authconfig/dnsclient.pyt dnsParseWKS&scCsat}t|\}|_|r<t|\}|_ntr]d|jGHd|jGHn|S(NsHINFO(cpu) = "%s".sHINFO(os) = "%s".(R)RDtcputosRA(RR:R%R<((s"/usr/share/authconfig/dnsclient.pyt dnsParseHINFO)s  cCst}t|dkrdSt|dd>t|dB|_t|d|\}|_trd|jGHd|jGHn|S(NiiiisMX(exchanger) = "%s".sMX(preference) = %d.(R)R-R$R7t preferenceR?texchangeRA(RR:R%R<((s"/usr/share/authconfig/dnsclient.pyt dnsParseMX3s % cCs7t}t|\}|_tr3d|jGHn|S(Ns TXT = "%s".(R)RDRRA(RR:R%R<((s"/usr/share/authconfig/dnsclient.pyt dnsParseTXT>s  cCs:t}t||\}|_tr6d|jGHndS(Ns PTR = "%s".(R)R?tptrdnameRA(RR:R%R<((s"/usr/share/authconfig/dnsclient.pyt dnsParsePTREs cCst}d}tj|}t||kr4dStj||| \|_|_|_t |||\}|_ t rd|j GHd|jGHd|jGHd|jGHn|S(Ns!HHHsSRV(server) = "%s".sSRV(weight) = %d.sSRV(priority) = %d.sSRV(port) = %d.( R)RRR-R$RtprioritytweighttportR?tserverRA(RR:R%RPtflenR<((s"/usr/share/authconfig/dnsclient.pyt dnsParseSRVKs (   cCsyt|}Wntjk r'gSX|jdkr;gS|jdkrNgS||j}g}xt|jD]}|sgSt}t ||\}}|dkrgSt ||j krgS|j |||j }trtd||j|jfGHqtqtWxt|j|j|jD]~}t ||\}}|dkrYgSt}||_t ||jkrgS|j|||j}trd||j|j|j|jfGHnt ||jkrtrdGHngSi tt6tt6tt6tt6t t!6t"t#6t$t%6t&t'6t(t)6t*t+6t,t-6}|j|krrtrd|jGHqn ||j||j ||_.||j}||g7}q.W|s|g}n|S(Niis(Queried for '%s', class = %d, type = %d.s4Answer %d for '%s', class = %d, type = %d, ttl = %d.sAnswer too short.s#Don't know how to parse RR type %d!(/RRterrorRRRtxrangeR RR?R$R-R'R(RAR!R R R R RRR"R#RBtDNS_T_ARFtDNS_T_NSRHt DNS_T_CNAMERQt DNS_T_SOARRt DNS_T_NULLRSt DNS_T_WKSR\t DNS_T_PTRRVt DNS_T_HINFORYtDNS_T_MXRZt DNS_T_TXTRbt DNS_T_SRVR%(tresultsRR<trrlisttitrrR9tfmap((s"/usr/share/authconfig/dnsclient.pytdnsParseResults[sr   $        cCs?t|||}|sgStj|}|s5gSt|S(N(R6tacutiltres_sendRu(R2R3R4tqdatatanswer((s"/usr/share/authconfig/dnsclient.pyR2st__main__sSending query.sdevserv.devel.redhat.com.i((((2RtsockettsysRvtDNS_C_INtDNS_C_CSt DNS_C_CHAOStDNS_C_HSt DNS_C_ANYReRfRgRhRiRjRkRlRmRnRot DNS_T_ANYtFalseRARRRR)R1R6R?RBRDRFRHRQRRRSRVRYRZR\RbRuR2RtTrueR-targvRstexit(((s"/usr/share/authconfig/dnsclient.pyts`    0 6             S (