
\c           @   s  d  Z  d d l Z d d l Z d d l Z d d l Z d d l m Z d d l m Z d d l	 Z
 d d l m Z d d l m Z y d d l m Z Wn e k
 r e Z n Xd d l m Z d d l Z e j d	 d
 e Z e j Z e j j d  d d l j Z d d l m Z d d l m Z d d l m  Z  d d l m! Z! d d l" Z# d Z$ d Z% e Z& d Z' d Z( d Z) e a* e d  Z+ d d l, m- Z- d   Z. d   Z/ d   Z0 d   Z1 d   Z2 d   Z3 d   Z4 d   Z5 d   Z6 d  e f d!     YZ7 d"   Z8 d#   Z9 d$ e: f d%     YZ; d& e; f d'     YZ< d( e; f d)     YZ= d*   Z> d+ e: f d,     YZ? d-   Z@ d.   ZA d/   ZB d0   ZC d1   ZD d2   ZE d3   ZF d4   ZG d5   ZH d S(6   ss   
Yum plugin for RHN access.

This plugin provides access to Spacewalk to yum via up2date modules
and XMLRPC calls.
iN(   t	   TYPE_CORE(   t   YumRepository(   t
   URLGrabber(   t   URLGrabError(   t   pycurl(   t	   INIConfigs   yum-rhn-plugint   fallbacks   /usr/share/rhn/(   t   config(   t
   rhnChannel(   t   rhnPackageInfo(   t   up2dateErrorss   $Rev$s   2.5s    /var/spool/up2date/loginAuth.pkls   rhnplugin.repost
   rhnversions*   There was an error communicating with CLN.(   t   SSLErrorc         C   s   |  d s d S|  d Sd  S(   Nt	   mirrorURLs=   http://repo.cloudlinux.com/cloudlinux/mirrorlists/cln-mirrors(    (   t   up2date_cfg(    (    s#   /usr/share/yum-plugins/rhnplugin.pyt   get_mirror_url9   s    
c           C   s   t  j d  d  S(   Ns   /usr/sbin/clnreg_ks(   t   ost   system(    (    (    s#   /usr/share/yum-plugins/rhnplugin.pyt   clnreg@   s    c      
   C   s  t  d  } |  j   } |  j d d | j  } t j   d k sb |  j d t  d   t a d St	 j
   } i  } yU t |  } | r | j t j    } | d r i | d 6} q i | d	 6} n  Wn< t k
 rt a t  d
  } |  j d | d |  d SXt j j t j d  } | d k r-t j d }	 d |	 k s^d |	 k s^|	 g  k rt a |  j d t  d  d |  d Sd |	 k rt |   |  j d t  d  d |  t j j t  rt j t  n  d Sd |	 k sd |	 k r-t a t |   |  j d t  d  d |  d Sn  t |  }
 d } x| d k  r| d 7} y t j d |  } Wn t j k
 r} | d k rt   qBn  t |  j  d  rd t j k rd |  j  _! n  t" |  |  j d t# d | d t$ |   t a d SX| sf| d k r&t   qBn  |  j d t  d  d t  d  d |  t a t% |   d St  d  } y t& j' d |  } Wn:t j( k
 r| d k rt   qBn  |  j d t  d  d |  t% |   d St j) k
 r?| d k r	t   qBn  |  j d t  d  d t  d  d |  t a d St j k
 r} | d k rjt   qBn  t |  j  d  rd t j k rd |  j  _! n  |  j d t# d | d t$ |   d SXt rB|  j d t  d   PqBqBW|  j*   } | j+ } t, |  } t- |   } x | D] } | d  rt. | |
 |  } t/ |  |  | | _0 | | _1 | | _2 | | _3 | | _4 | j | k  r| | _ n  t5 |  |  | j6 |  | r| j7 d! | j8 | j9 f  n  t: | | d   st | _; qqqW| r| j<   n  d S("   s   
    Plugin initialization hook. We setup the Spacewlk channels here.

    We get a list of Spacewalk channels from the server, then make a repo object for
    each one. This list of repos is then added to yum's list of repos via the 
    conduit.
    s   CLN support will be disabled.t   maint   timeouti    sz   *Note* CloudLinux Network repositories are not listed below. You must run this command as root to access CLN repositories.Nt   useNoSSLForPackagest   httpt   httpss2   There was an error parsing the CLN proxy settings.s   
t   yumi   s   --helps	   --versioni
   s/   Either --version, --help or no commands enteredt   cleant   Cleanings   -Cs   --cacheonlys"   Using list of CLN repos from cachei   t	   exit_codes   check-updates'   This system is not registered with CLN.s%   You can use rhn_register to register.s%   CLN channel support will be disabled.s.   This system is not subscribed to any channels.sI   This system may not be registered to CLN. SystemId could not be acquired.s*   This system is receiving updates from CLN.t   versions   %s %s
(=   t   _t   getConft	   confFloatR   R   t   geteuidt   errort   Falset   rhn_enabledR   t   initUp2dateConfigt   get_proxy_urlt   encodet   localet   getpreferredencodingt   BadProxyConfigt   patht   basenamet   syst   argvt   infot   addCachedRepost   existst   pcklAuthFileNamet   unlinkR   t   up2dateAutht   getLoginInfoR
   t   RhnServerExceptionR   t   hasattrt   _baseR   t   rewordErrort   COMMUNICATION_ERRORt   unicodet   truncateRHNReposCacheR   t   getChannelDetailst   NoChannelsErrort   NoSystemIdErrort   getRepost   cachedirt   get_ssl_ca_certt   openRHNReposCachet   RhnRepot   setRHNRepoDefaultst   basecachedirt   base_persistdirt   proxyt	   sslcacertt   _proxy_dictt   updateRHNRepoOptionst   addt   writet   idt   namet   currentRHNRepoVersiont   _metadataCurrentt   close(   t   conduitt   RHN_DISABLEDt   conduit_confR   R   t
   proxy_dictt	   proxy_urlt   PROXY_ERRORt	   prog_namet   cmd_argst
   mirror_urlt   clnreg_retryt
   login_infot   et   CHANNELS_DISABLEDt   svrChannelst   reposR@   RH   t	   cachefilet   channelt   repo(    (    s#   /usr/share/yum-plugins/rhnplugin.pyt	   init_hookD   s    
	

	
!
	#
	
	#!		
					 c         C   sp   |  j    j } t j j | t  } y8 t j j |  sL t j | d  n  t | d  } Wn d  } n X| S(   Ni  t   w(
   R   R@   R   R*   t   joint   cachedRHNReposFileR0   t   makedirst   opent   None(   RR   R@   t   cachefilenameRa   (    (    s#   /usr/share/yum-plugins/rhnplugin.pyRB      s    
c         C   s-   t  |   } | r) | j   | j   n  d  S(   N(   RB   t   truncateRQ   (   RR   Ra   (    (    s#   /usr/share/yum-plugins/rhnplugin.pyR;      s    
c         C   s  |  j    } |  j   j } t j j | t  } t j | t j  sI d St	 | d  } g  | j
   D] } | j   j d d  ^ qe } | j   d g } x | D] } t |  d k r | j d  n  | \ }	 }
 t j j | |	  } t j j |  r t |	  } t |  |  | | _ | | _ | j | _ |
 | _ t |  |  | j   | j | j  sz| j |  qzq q Wd S(   sB   
    Add list of repos we've seen last time (from cache file)
    Nt   rt    i   s   http://dummyvaluet    (   R?   R   R@   R   R*   Rf   Rg   t   accesst   R_OKRi   t	   readlinest   rstript   splitRQ   t   lent   appendt   isdirR   RD   RE   t   baseurlt   urlsRN   RJ   t   enablet	   findReposRM   RK   (   RR   R`   R@   Rk   Ra   t   linet   repolistRy   t	   repo_itemt   repoidt   reponamet   repodirRc   (    (    s#   /usr/share/yum-plugins/rhnplugin.pyR/      s2    1
				
c         C   s   |  j  } t j j | t  } d  } d  } y t j j |  sR t j | d  n  t j j |  r t | d  } | j	   j
 d  } | j d d  n t | d  } | j | d  | j   Wn | r | j   q n X| | k S(   Ni  s   r+s   
i    Re   (   R@   R   R*   Rf   t   versionRHNRepoFileRj   R0   Rh   Ri   t   readlinet   stript   seekRL   RQ   (   Rc   t   repoversionR@   t   versionfilenamet   last_versiont   versionfile(    (    s#   /usr/share/yum-plugins/rhnplugin.pyRO     s$    	c         C   s   t  r |  j d d |  j   j  } t j   } | j d  rw | d d k rw |  j   } t |  } t	 j
 |  n  t j   r y t	 j d |  Wq t j k
 r } |  j d t d t d  d t |   q Xq n  d S(	   s<    Post rpm transaction hook. We update the RHN profile here. R   R   t   writeChangesToLogi   i    s   
s.   Package profile information could not be sent.N(   R#   R   R   R   R   R$   t   has_keyt	   getTsInfot   make_package_deltaR	   t   logDeltaPackagesR3   t   getSystemIdt   updatePackageProfileR
   R5   R!   R9   R   R:   (   RR   R   R   t   ts_infot   deltaR]   (    (    s#   /usr/share/yum-plugins/rhnplugin.pyt   posttrans_hook!  s    	c         C   s   t  d  d t  d  } |  j j d  } | d k r< d S|  j j d d |  d k r^ d S|  j j d	 d |  } d	 | |  j | |  _ d S(
   s    This is compensating for hosted/satellite returning back an error
        message instructing RHEL5 clients to run "rhn_register"
        bz: 438175
    s   Error Message:s   
	s.   Please run rhn_register as root on this clients   : 9
iNt   up2datei    s   
(   R   t   errmsgt   findt   rfind(   R]   t   replacedTextt   indext   indexB(    (    s#   /usr/share/yum-plugins/rhnplugin.pyR8   4  s    RC   c           B   s   e  Z d  Z d d d d d g Z d   Z d   Z d d d d d d d d d	 e d d
  Z e Z	 d d d d d d d d d	 e d d  Z
 d   Z e Z d   Z d   Z e d    Z e d    Z d d  Z d   Z d   Z d   Z RS(   sy   
    Repository object for Spacewalk.

    This, along with the RhnPackageSack, adapts up2date for use with
    yum.
    s   X-RHN-Server-Ids   X-RHN-Auth-User-Ids
   X-RHN-Auths   X-RHN-Auth-Server-Times   X-RHN-Auth-Expire-Offsetc         C   s;  t  j |  | d  | |  _ | |  _ | d |  _ | d |  _ t |  _ | |  _ g  } x) |  j	 D] } | j
 | d |  j  qb W| |  _ |  j |  _	 d |  _ d |  _ d |  _ d |  _ d |  _ d |  _ d |  _ t |  _ g  |  _ t |  _ t j   |  _ y t | d	  |  _ Wn t k
 r,n X|  j   d  S(
   Nt   labelRN   s   GET-REQ/t   priorityi    i   g      N@iT  t   gpg_key_url(   R   t   __init__RE   RF   RN   R   R"   t   _callbacks_changedt
   mirrorlistRy   Rv   RM   Rx   t   failovermethodt	   keepalivet	   bandwidtht   retriest   throttleR   t   metadata_expiret   Truet   http_cachingt   gpgkeyt   gpgcheckR   R$   R   t   get_gpg_key_urlst   InvalidGpgKeyLocationRz   (   t   selfRb   RZ   R@   Ry   t   url(    (    s#   /usr/share/yum-plugins/rhnplugin.pyR   V  s8    															c         C   s  y t  j d |  j  } Wnx t j k
 rY } t j j t |   d t
 j   d  n; t k
 r } t j j t |   d t
 j   d  n XxV t j D]K } | j |  s t d  | } t j j |   n  | | |  j | <q W|  j d s
d |  j d <n  d S(   s=    Set up self.http_headers with needed RHN X-RHN-blah headers R   i   s.   Missing required login information for RHN: %sR   s   follow-redirects=3s   X-RHN-Transport-CapabilityN(   R3   R4   R   R
   R5   R   t   Errorst	   RepoErrorR:   Rj   R,   t   exc_infot	   ExceptionRC   t   rhn_needed_headersR   R   t   http_headersR   (   R   t   liR]   t   headerR!   (    (    s#   /usr/share/yum-plugins/rhnplugin.pyt   setupRhnHttpHeadersz  s    +,	i    t   simplec         K   s  x|  j  D]} | } y y/ |  j | | | | | | | | |	 |
 |  SWn t k
 r } y t j d |  j d |  Wn> t j k
 r } t j	 j
 t |   d  t j   d  n X|  j | | | | | | | | |	 |
 |  SXWq
 t k
 r&} t j	 j
 d | |  j | f t j   d  q
 t k
 r`} t j	 j
 t |   d  t j   d  q
 t j k
 r} t j |  d  t j   d  q
 Xq
 Wd  S(   NR   t   mirrorServeri   s*   failed to retrieve %s from %s
error was %s(   Ry   t   _noExceptionWrappingGetR   R3   t   updateLoginInfoR   R
   R5   R   R   R   R:   Rj   R,   R   RM   R   t   InvalidRedirectionError(   R   R   t   relativet   localt   startt   endt
   copy_localt	   checkfunct   textt   regett   cachet   sizet   kwargst   serverR]   (    (    s#   /usr/share/yum-plugins/rhnplugin.pyt   _getFile  s,     ,!	 +c         C   s  |  j    t rF d } | |  j k rF |  j | rF d |  j | <qF n  t j |   } |
 pj |  j j d  s} | j d  n  t |  } | d k s | d k r t	 j
 j d |  j  n  |  j r |  j \ } } } | | | f |  _ n  |  j d k r+t j j |  r| St	 j
 j d | |  f  n  | d k	 r| d | } |  j j | | d	 | d
 | | f d | d |	 d | d | d |  j j d  d |  j d | d |  j 
} | Sd } d } x |  j D] } |  j d d k rt |  } n  t |  | d | } yq |  j j | | d	 | d
 | | f d | d |	 d | d | d |  j j d  d |  j d | d |  j 
} | SWqt k
 r} | } qqXqW| d k r|  n  | S(   s   retrieve file from the mirrorgroup for the repo
           relative to local, optionally get range from
           start to end, also optionally retrieve from a specific baseurls   X-RHN-Auth-User-Ids&   
X-libcurl-Empty-Header-Workaround: *t   Pragmas   no-caches/   get request for Repo %s, gave no source or desti   s0   Caching enabled but no local cache of %s from %st   /R   t   rangeR   R   R   R   t   ssl_ca_certs   utf-8R   R   t   retry_no_cacheR   (   R   s   no-cacheN(   R   R   R   R   t#   _YumRepository__headersListFromDictR   Rv   t   tupleRj   R   R   R   RM   t   failure_objR   R   R*   R0   t   grabt   urlgrabRH   R&   R   t   _retry_no_cacheRy   R   t
   force_httpt	   check_urlR   (   R   R   R   R   R   R   R   R   R   R   R   R   t	   AuthUserHt   headerst   f_funct   f_argst   f_kwargst   remotet   resultt   urlExceptionR   R]   (    (    s#   /usr/share/yum-plugins/rhnplugin.pyR     sz    

				
		c         C   s   y& |  j    } d | k r% | d =n  WnS t k
 r{ i |  j d 6|  j d 6|  j d 6|  j d 6|  j d 6|  j d 6} n Xt t	 j
 |    } t d |  j d	 |  j d
 |  j d | d d |  |  _ t j j j |  j j _ |  j |  _ d S(   s<   sets up the grabber functions. We don't want to use mirrors.R   R   R   t   retryR   t   proxiesR   t   progress_objt   interrupt_callbackR   R   R   N(   t   _default_graboptst   AttributeErrorR   R   R   R   RU   R   R   R   R   R   t   callbackR   R   t	   _grabfunct   rhnt
   transportst	   Transportt
   user_agentt   optst   _grab(   R   t   ugoptsR   (    (    s#   /usr/share/yum-plugins/rhnplugin.pyt
   _setupGrab  s*    



			c         C   s0   |  j  s |  j r) |  j   t |  _ n  |  j  S(   N(   R   R   R   R"   (   R   (    (    s#   /usr/share/yum-plugins/rhnplugin.pyt   _getgrabfunc,  s    
c         C   s0   |  j  s |  j r) |  j   t |  _ n  |  j  S(   N(   R   R   R   R"   (   R   (    (    s#   /usr/share/yum-plugins/rhnplugin.pyt   _getgrab1  s    
c         C   s
   |  j    S(   N(   R   (   R   (    (    s#   /usr/share/yum-plugins/rhnplugin.pyt   <lambda>7  s    c         C   s
   |  j    S(   N(   R   (   R   (    (    s#   /usr/share/yum-plugins/rhnplugin.pyR   8  s    i   c         C   sT   t  t d   } t | |  j  } | | _ t d d  } | | IJ| j   d S(   s    Enable or disable channel in file rhnplugin.conf.
            channel is label of channel and value should be 1 or 0.
        s$   /etc/yum/pluginconf.d/rhnplugin.confRe   N(   R   t   filet   getattrR   t   enabledRi   RQ   (   R   t   valuet   cfgt   funct   f(    (    s#   /usr/share/yum-plugins/rhnplugin.pyt   _setChannelEnable:  s    	
c         C   s   |  j  d  |  j   d S(   s?   
        Persistently enable channel in rhnplugin.conf
        i   N(   R   Rz   (   R   (    (    s#   /usr/share/yum-plugins/rhnplugin.pyt   enablePersistentG  s    c         C   s   |  j  d  |  j   d S(   s@   
        Persistently disable channel in rhnplugin.conf
        i    N(   R   t   disable(   R   (    (    s#   /usr/share/yum-plugins/rhnplugin.pyt   disablePersistentN  s    c         C   sL   y t  j |   SWn4 t j j k
 rG t j d |  j  t  j |   SXd  S(   NR   (   R   t   _getRepoXMLR   R   R   R3   R   R   (   R   (    (    s#   /usr/share/yum-plugins/rhnplugin.pyR   U  s
    N(   t   __name__t
   __module__t   __doc__R   R   R   Rj   R   R   t   _YumRepository__getR   R   t	   setupGrabR   R   t   propertyt   grabfuncR   R   R   R   R   (    (    (    s#   /usr/share/yum-plugins/rhnplugin.pyRC   H  s2   		$			[					c         C   s  i  } g  | d <g  | d <|  j    x7 |  j D], } | j } t |  } | d j |  q. Wx7 |  j D], } | j } t |  } | d j |  qh Wx7 |  j D], } | j } t |  } | d j |  q Wx7 |  j D], } | j } t |  } | d j |  q Wx7 |  j D], } | j } t |  } | d j |  qWx7 |  j	 D], } | j } t |  } | d j |  qPW| S(   s   
    Construct an RHN style package delta from a yum TransactionData object.

    Return a hash containing two keys: added and removed.
    Each key's value is a list of RHN style package tuples.
    t   addedt   removed(
   t	   makelistst	   installedt   pot   __rhn_pkg_tup_from_poRv   t   depinstalledt   updatedt
   depupdatedR  t
   depremoved(   R   R   t	   ts_membert   packaget   pkgtup(    (    s#   /usr/share/yum-plugins/rhnplugin.pyR   ^  s:    


						c         C   s^   |  j  d  } |  j  d  } |  j  d  } |  j  d  } |  j  d  } | | | | | f S(   sA    Construct an rhn-style package tuple from a yum package object. RN   t   epochR   t   releaset   arch(   t   returnSimple(   R  RN   R  R   R  R  (    (    s#   /usr/share/yum-plugins/rhnplugin.pyR
    s    t	   BadConfigc           B   s   e  Z RS(    (   R   R   (    (    (    s#   /usr/share/yum-plugins/rhnplugin.pyR    s   R)   c           B   s   e  Z RS(    (   R   R   (    (    (    s#   /usr/share/yum-plugins/rhnplugin.pyR)     s   t   BadSslCaCertConfigc           B   s   e  Z RS(    (   R   R   (    (    (    s#   /usr/share/yum-plugins/rhnplugin.pyR    s   c         C   s   |  d s d  Sd } |  d r' d } n d } |  d r |  j d  sW |  d d k r` t  n  |  j d  s |  d d k r t  n  | |  d } | d	 } | t j |  d  } | d
 } n  t j   } | d k r t  n  | | S(   Nt   enableProxyRo   R   s   http://s   https://t   enableProxyAutht	   proxyUsert   proxyPasswordt   :t   @(   Rj   R   R)   t   urllibt   quoteR   t   getProxySetting(   R   RV   t   netloc(    (    s#   /usr/share/yum-plugins/rhnplugin.pyR%     s*    

	
		
	R   c           B   s   e  Z RS(    (   R   R   (    (    (    s#   /usr/share/yum-plugins/rhnplugin.pyR     s   c         C   sp   |  j  d  } t |  d k r% t S| \ } } | j   d k rG t St j j |  } | j d  sl t St S(   Ns   ://i   R   s   /etc/pki/rpm-gpg/(	   Rt   Ru   R"   t   lowerR   R*   t   normpatht
   startswithR   (   t   key_urlt   proto_splitt   protoR*   (    (    s#   /usr/share/yum-plugins/rhnplugin.pyt   is_valid_gpg_key_url  s    c         C   s6   |  j    } x# | D] } t |  s t  q q W| S(   s  
    Parse the key urls and validate them.

    key_url_string is a space seperated list of gpg key urls that must be
    located in /etc/pkg/rpm-gpg/.
    Return a list of strings containing the key urls.
    Raises InvalidGpgKeyLocation if any of the key urls are invalid.
    (   Rt   R(  R   (   t   key_url_stringt   key_urlsR%  (    (    s#   /usr/share/yum-plugins/rhnplugin.pyR     s
    	c         C   sJ   |  j  d  o |  d s" t  n  |  d } t |  t k rF | d S| S(   Nt	   sslCACerti    (   R   R  t   typet   list(   R   t   ca_certs(    (    s#   /usr/share/yum-plugins/rhnplugin.pyRA     s    	
c         C   s   t  j |   \ } } | d  k r0 | j   } n  t j   } | d rm | j   d k r t j d   q n$ | j   d k r t j d   n  d  S(   NR   R   sR   You specified an invalid protocol.  Option useNoSSLServerForPackages requires httpR   sC   You specified an invalid protocol. Only https and http are allowed.(   s   https   https(	   R  t	   splittypeRj   R"  R   R$   R   R
   t   InvalidProtocolError(   t	   serverurlt   typt   uriR   (    (    s#   /usr/share/yum-plugins/rhnplugin.pyR     s    
c         C   sY   |  } t  j |   \ } } | d k r< | j   j   } n  | d k rU d | } n  | S(   s"   
    Returns a url using http
    R   s   http:N(   R  R/  Rj   R"  R   (   R1  t   httpUrlR2  R3  (    (    s#   /usr/share/yum-plugins/rhnplugin.pyR     s    c         C   sz   d d l  m } |  j d d |  y> |  ra t |  d  ra t |  j d  ra |  j j |  Sn  Wn | k
 ru n Xd  S(   Ni(   t   NoSectionErrori   s!   Looking for repo options for [%s]t   _conft   items(   t   ConfigParserR5  R.   R6   R6  R7  Rj   (   RR   R   R5  (    (    s#   /usr/share/yum-plugins/rhnplugin.pyt   getRHNRepoOptions  s    !c         C   sv   |  j    } xE | j   D]7 \ } } t | |  r t | | t | |   q q Wt | d  rr | j | _ n  d  S(   Nt   _repos_persistdir(   R   t	   iteritemsR6   t   setattrR   R:  RF   (   RR   Rc   t   conft   optR   (    (    s#   /usr/share/yum-plugins/rhnplugin.pyRD     s     c      	   C   s   t  |  d  } t  |  | j  } x | | g D] } | r. x | D] } | d d k r t | | d d j | j  d | d  n t | | d | d  |  j d d | j | d | d f  qA Wq. q. Wd  S(   NR   i    t   excludet   ,i   i   s$   Repo '%s' setting option '%s' = '%s'(   R9  RM   R<  Rf   R?  R.   (   RR   Rc   t   pluginOptionst   repoOptionst   optionst   o(    (    s#   /usr/share/yum-plugins/rhnplugin.pyRJ     s    /c         C   s#   t  |  d  r |  j d  n  d  S(   Nt   registerPackageNames   yum-rhn-plugin(   R6   RE  (   RR   (    (    s#   /usr/share/yum-plugins/rhnplugin.pyt   config_hook#  s    (I   R   R   R,   R  R'   t   yum.pluginsR    t   yum.yumRepoR   t
   yum.ErrorsR   t   urlgrabber.grabberR   R   R   t   ImportErrorRj   t   iniparseR   t   gettextt   translationR   t   tt   ugettextR   R*   Rv   t   up2date_client.up2dateAuthR3   t   up2date_clientR   R   R	   R
   t   rhn.transportsR   t   __revision__t   requires_api_versiont   plugin_typeR1   Rg   R   R#   R9   t   M2Crypto.SSLR   R   R   Rd   RB   R;   R/   RO   R   R8   RC   R   R
  R   R  R)   R  R%   R   R(  R   RA   R   R   R9  RD   RJ   RF  (    (    (    s#   /usr/share/yum-plugins/rhnplugin.pyt   <module>   sx   
										 	/					
				
	