Ñò
t¥ePc        
   @   sŽ   d  d k  l Z d  d k Z d  d k Z d  d k Z d  d k Z d  d k Z d  d k Z d „  Z d d d „  ƒ  YZ	 d e f d „  ƒ  YZ
 d S(	   iÿÿÿÿ(   t   ThreadNc         C   s»   |  i  d ƒ p |  d
 f S|  i d ƒ d }  |  i d ƒ d } y |  i d ƒ d } Wn t j
 o } d } n Xt i i d ƒ } d | | | f } d	 | | | | f } | | f S(   su    Convert an abbreviated ppa name of the form 'ppa:$name' to a
        proper sources.list line of the form 'deb ...' s   ppa:t   :i   t   /i    t   ppas   Dir::Etc::sourcepartss1   deb http://ppa.launchpad.net/%s/%s/ubuntu %s mains   %s/%s-%s-%s.listN(   t
   startswitht   Nonet   splitt
   IndexErrort   apt_pkgt   Configt   FindDir(   t   abrevt   distro_codenamet	   ppa_ownert   ppa_namet   et   sourceslistdt   linet   file(    (    s:   /usr/lib/python2.6/dist-packages/softwareproperties/ppa.pyt   expand_ppa_line   s    t   CurlCallbackc           B   s   e  Z d  „  Z d „  Z RS(   c         C   s   d |  _  d  S(   Nt    (   t   contents(   t   self(    (    s:   /usr/lib/python2.6/dist-packages/softwareproperties/ppa.pyt   __init__4   s    c         C   s   |  i  | |  _  d  S(   N(   R   (   R   t   buf(    (    s:   /usr/lib/python2.6/dist-packages/softwareproperties/ppa.pyt   body_callback7   s    (   t   __name__t
   __module__R   R   (    (    (    s:   /usr/lib/python2.6/dist-packages/softwareproperties/ppa.pyR   3   s   	t   AddPPASigningKeyThreadc           B   s)   e  Z d  Z d „  Z d „  Z d „  Z RS(   s;    thread class for adding the signing key in the background c         C   s   t  i |  ƒ | |  _ d  S(   N(   R    R   t   ppa_path(   R   R   (    (    s:   /usr/lib/python2.6/dist-packages/softwareproperties/ppa.pyR   =   s    c         C   s   |  i  |  i ƒ d  S(   N(   t   add_ppa_signing_keyR   (   R   (    (    s:   /usr/lib/python2.6/dist-packages/softwareproperties/ppa.pyt   runA   s    c            sE  ‡ f d †  ‰  d* ‡  f d † } | d i d ƒ \ } } } d | | f } yÇ t ƒ  } t i ƒ  } | i t i d ƒ | i t i d ƒ | i t i | i	 ƒ | i t i
 t | ƒ ƒ | i t i d g ƒ | i ƒ  | i ƒ  | i }	 t i d |	 ƒ }
 |
 p t ƒ  ‚ n WnJ t i j
 o } d	 | | d f GHt St j
 o } d
 | GHt SX|
 d }
 t |
 ƒ d d j  o | d |
 ƒ St i ƒ  ‰ t i i ˆ d ƒ } t i i ˆ d ƒ } d d d d ˆ g } t i | d | d | d d d |
 g ƒ } | d j o | d ˆ ƒ St i i ˆ d ƒ } t i | d | d | d |
 g ƒ } | d j o | d ˆ ƒ St i | d | d d  d! g d" t i d# t ƒi  ƒ  d } d* } x< | i! ƒ  D]. } | i" d$ ƒ o | i d% ƒ d& } PqÅqÅW| |
 j o | d' |
 | f ƒ St i d( d) | g ƒ } ˆ  ˆ ƒ | d j S(+   sÃ   Query and add the corresponding PPA signing key.
        
        The signing key fingerprint is obtained from the Launchpad PPA page,
        via a secure channel, so it can be trusted.
        c            s   d d  k  } | i ˆ  ƒ d  S(   Niÿÿÿÿ(   t   shutilt   rmtree(   t   tmpdirR!   (   t   tmp_keyring_dir(    s:   /usr/lib/python2.6/dist-packages/softwareproperties/ppa.pyt   cleanupJ   s    c            s   |  GH| o ˆ  | ƒ n t  S(   N(   t   False(   t   msgR#   (   R%   (    s:   /usr/lib/python2.6/dist-packages/softwareproperties/ppa.pyt   fail_with_msgM   s    i   R   s-   https://launchpad.net/api/1.0/~%s/+archive/%si   s   Accept: application/jsons"   "signing_key_fingerprint": "(\w*)"s   Error reading %s: %ss/   Error: can't find signing_key_fingerprint at %si    i    i   s-   Error: signing key fingerprint '%s' too shorts   secring.gpgs   pubring.gpgt   gpgs   --no-default-keyrings   --no-optionss	   --homedirs   --secret-keyrings	   --keyrings   --keyservers   keyserver.ubuntu.coms   --recvs   recv faileds   export-keyring.gpgs   --outputs   --exports   export faileds   --fingerprints   --batchs   --with-colonst   stdoutt   universal_newliness   fpr:R   i	   s6   Fingerprints do not match, not importing: '%s' != '%s's   apt-keyt   addN(#   R   R   R   t   pycurlt   Curlt   setoptt   SSL_VERIFYPEERt   SSL_VERIFYHOSTt   WRITEFUNCTIONR   t   URLt   strt
   HTTPHEADERt   performt   closeR   t   ret   findallt   IOErrort   errorR&   t   lent   tempfilet   mkdtempt   ost   patht   joint
   subprocesst   callt   Popent   PIPEt   Truet   communicatet
   splitlinesR   (   R   R   R(   t
   owner_nameR   t   distrot   lp_urlt   callbackt   curlt   lp_paget   signing_key_fingerprintR   t   tmp_secret_keyringt   tmp_keyringt   gpg_default_optionst   rest   tmp_export_keyringt   outputt   got_fingerprintR   (    (   R%   R$   s:   /usr/lib/python2.6/dist-packages/softwareproperties/ppa.pyR   D   s    	

		
			
	 	
(   R   R   t   __doc__R   R    R   (    (    (    s:   /usr/lib/python2.6/dist-packages/softwareproperties/ppa.pyR   :   s   		(    (   t	   threadingR    R8   RB   R   R?   R=   R-   R   R   R   (    (    (    s:   /usr/lib/python2.6/dist-packages/softwareproperties/ppa.pyt   <module>   s   	