
N_c           @   s_  d  d l  Z  d  d l Z d  d l Z d  d l Z d  d l Z d  d l m Z m Z d  d l m Z d  d l	 m
 Z d   Z e Z d   Z d   Z d d	  Z d
   Z d   Z d   Z d   Z d   Z d   Z d d g Z d e j f d     YZ d d d  Z d d d     YZ d e f d     YZ d e f d     YZ d d d     YZ d S(    iN(   t   write32ut   FNAME(   t   URLGrabError(   t   errorc         C   s   t  j | IJd  S(   N(   t   syst   stderr(   t   numt   msg(    (    s5   /usr/lib/python2.7/site-packages/rpmUtils/oldUtils.pyt   log   s    c         C   s   |  S(   N(    (   R   (    (    s5   /usr/lib/python2.7/site-packages/rpmUtils/oldUtils.pyt   _   s    c         C   s   t  |   } d } | j d k r* d } n- | | j   k sN | | j   k rW d } n  | r t d t d  | | f   n  d S(   s   check a header by opening it and comparing the results to the name and arch
       we believe it to be for. if it fails raise URLGrabError(-1)i    i   is1   Header cannot be opened or does not match %s, %s.N(   t   Header_Workt   hdrt   Nonet   namet   archR   R	   (   t
   headerfileR   R   t   ht   fail(    (    s5   /usr/lib/python2.7/site-packages/rpmUtils/oldUtils.pyt   checkheader   s    	$	"i    c         C   s   t  j d  t j |  t j  } y t  j |  Wn t j k
 rQ } d } n Xd } t j |  t  j d  | r | s t	 d t
 d  |    q d Sn | Sd S(   sd   take a package, check it out by trying to open it, return 1 if it's good
       return 0 if it's nott   md5i    i   t   defaultis   RPM %s fails md5 checkN(   t   tst   sigCheckingt   ost   opent   O_RDONLYt   hdrFromFdnot   rpmR   t   closeR   R	   (   t   packaget   urlgraberrort   fdnot   et   good(    (    s5   /usr/lib/python2.7/site-packages/rpmUtils/oldUtils.pyt   checkRpmMD5%   s    
c         C   s   t  j d  t j |  t j  } y t  j |  } Wnn t j k
 r } t |  d k r` d St |  d k rv d St |  d k r d St |  d k r d Sn6 Xt	 |  \ } } | d	 k r t j
 |  ~ d
 S~ t j
 |  d S(   s    take a package, check it's sigs, return 0 if they are all fine, return 
    1 if the gpg key can't be found,  2 if the header is in someway damaged,
    3 if the key is not trusted, 4 if the pkg is not gpg or pgp signedR   s   public key not availaiablei   s   public key not availables   public key not trustedi   s   error reading package headeri   ie   i   i    (   R   R   R   R   R   R   R   R   t   strt
   getSigInfoR   (   R   R   R   R    R   t   siginfo(    (    s5   /usr/lib/python2.7/site-packages/rpmUtils/oldUtils.pyt   checkSig;   s*    c         C   ss   d } |  j  |  } | d k rB d } | j d  \ } } } n d } d } d } d } | | | f } | | f S(   sE   checks if a computerhand back signature information and an error codes   %|DSAHEADER?{%{DSAHEADER:pgpsig}}:{%|RSAHEADER?{%{RSAHEADER:pgpsig}}:{%|SIGGPG?{%{SIGGPG:pgpsig}}:{%|SIGPGP?{%{SIGPGP:pgpsig}}:{(none)}|}|}|}|s   (none)i    t   ,ie   t   MD5R   (   t   sprintft   split(   R   t   stringR%   R   t   sigtypet   sigdatet   sigidt	   infotuple(    (    s5   /usr/lib/python2.7/site-packages/rpmUtils/oldUtils.pyR$   W   s    c         C   sX   g  } |  t  j } | d  k r" n2 t |  t j k rG | j |  n | j |  | S(   N(   R   t   RPMTAG_PROVIDENAMER   t   typet   typest   ListTypet   extendt   append(   t   headert	   provnamest   provides(    (    s5   /usr/lib/python2.7/site-packages/rpmUtils/oldUtils.pyt   getProvidesg   s    c   
   
   C   s   |  \ } } } | \ } } } d   } | |  } | |  } | |  } | |  } | |  } | |  } t  j | | | f | | | f  }	 t d d | | | | | | |	 f  |	 S(   Nc         S   s4   t  |   t j k r0 |  d  k r0 t |   }  n  |  S(   N(   R1   R2   t
   StringTypeR   R#   (   t   arg(    (    s5   /usr/lib/python2.7/site-packages/rpmUtils/oldUtils.pyt   rpmOutToStrv   s    !i   s   %s, %s, %s vs %s, %s, %s = %s(   R   t   labelCompareR   (
   t   .0t   .1t   e1t   v1t   r1t   e2t   v2t   r2R<   t   rc(    (    s5   /usr/lib/python2.7/site-packages/rpmUtils/oldUtils.pyt
   compareEVRr   s    	$&c         C   s   | r | t  j t  j Bt  j B@r. |  d }  n  | t  j @rH |  d }  n  | t  j @rb |  d }  n  | t  j @r |  d }  |  d | }  q n  |  S(   Nt    t   <t   >t   =s    %s(   R   t   RPMSENSE_LESSt   RPMSENSE_GREATERt   RPMSENSE_EQUAL(   R   t   versiont   flags(    (    s5   /usr/lib/python2.7/site-packages/rpmUtils/oldUtils.pyt   formatRequire   s    
c          C   sF   y t  j t j  }  Wn) t  j k
 rA } t d t d   n X|  S(   Ni    sF   Could not open RPM database for reading. Perhaps it is already in use?(   R   t   TransactionSett   conft   installrootR   t   errorlogR	   (   t   dbR    (    (    s5   /usr/lib/python2.7/site-packages/rpmUtils/oldUtils.pyt	   openrpmdb   s
    t   GzipFileR   c           B   s   e  Z d    Z RS(   c         C   s   |  j  j d  |  j  j d  |  j d  } d } | rB t } n  |  j  j t |   t |  j  t d   |  j  j d  |  j  j d  | r |  j  j | d  n  d  S(   Ns   s   ii    s   s   t    (   t   fileobjt   writet   filenameR   t   chrR    t   long(   t   selft   fnameRP   (    (    s5   /usr/lib/python2.7/site-packages/rpmUtils/oldUtils.pyt   _write_gzip_header   s    	(   t   __name__t
   __module__Ra   (    (    (    s5   /usr/lib/python2.7/site-packages/rpmUtils/oldUtils.pyRX      s   t   rbi	   c         C   s   t  |  | |  S(   N(   RX   (   R\   t   modet   compresslevel(    (    s5   /usr/lib/python2.7/site-packages/rpmUtils/oldUtils.pyt	   _gzipOpen   s    t   RPM_Base_Workc           B   sk   e  Z d    Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z	 d   Z
 d	   Z d
   Z RS(   c         C   s   d  |  _ d  S(   N(   R   R   (   R_   (    (    s5   /usr/lib/python2.7/site-packages/rpmUtils/oldUtils.pyt   __init__   s    c         C   s=   |  j  d  k r2 t d t d   t j d  n  |  j  | S(   Ni    s-   Got an empty Header, something has gone wrongi   (   R   R   RU   R	   R   t   exit(   R_   t   tag(    (    s5   /usr/lib/python2.7/site-packages/rpmUtils/oldUtils.pyt   _getTag   s    c         C   s!   |  j  d  d k r d Sd Sd  S(   Nt   sourcepackagei   i    (   Rl   (   R_   (    (    s5   /usr/lib/python2.7/site-packages/rpmUtils/oldUtils.pyt   isSource   s    c         C   s   |  j  d  S(   NR   (   Rl   (   R_   (    (    s5   /usr/lib/python2.7/site-packages/rpmUtils/oldUtils.pyR      s    c         C   s   |  j  d  S(   NR   (   Rl   (   R_   (    (    s5   /usr/lib/python2.7/site-packages/rpmUtils/oldUtils.pyR      s    c         C   s   |  j  d  S(   Nt   epoch(   Rl   (   R_   (    (    s5   /usr/lib/python2.7/site-packages/rpmUtils/oldUtils.pyRo      s    c         C   s   |  j  d  S(   NRO   (   Rl   (   R_   (    (    s5   /usr/lib/python2.7/site-packages/rpmUtils/oldUtils.pyRO      s    c         C   s   |  j  d  S(   Nt   release(   Rl   (   R_   (    (    s5   /usr/lib/python2.7/site-packages/rpmUtils/oldUtils.pyRp      s    c         C   s:   |  j  d  } |  j  d  } |  j  d  } | | | f S(   NRo   RO   Rp   (   Rl   (   R_   R    t   vt   r(    (    s5   /usr/lib/python2.7/site-packages/rpmUtils/oldUtils.pyt   evr   s    c         C   s^   |  j  d  } |  j  d  } |  j  d  } |  j  d  } |  j  d  } | | | | | f S(   NR   Ro   RO   Rp   R   (   Rl   (   R_   t   nR    Rq   Rr   t   a(    (    s5   /usr/lib/python2.7/site-packages/rpmUtils/oldUtils.pyt   nevra   s    c   
      C   s   |  j    \ } } } } } | d  k r0 d } n  |  j   rX d | | | | | f } n d | | | | | | f } | r t | d  }	 n t | d  }	 |	 j |  j j d   |	 j   | S(   Nt   0s   %s/%s-%s-%s-%s.src.hdrs   %s/%s-%s-%s-%s.%s.hdrt   wi   (	   Rv   R   Rn   Rg   R   R[   R   t   unloadR   (
   R_   t	   headerdirt   compressR   Ro   t   vert   relR   t   headerfnt	   headerout(    (    s5   /usr/lib/python2.7/site-packages/rpmUtils/oldUtils.pyt   writeHeader   s    	
(   Rb   Rc   Ri   Rl   Rn   R   R   Ro   RO   Rp   Rs   Rv   R   (    (    (    s5   /usr/lib/python2.7/site-packages/rpmUtils/oldUtils.pyRh      s   										R
   c           B   s   e  Z d  Z d   Z RS(   s   for operating on hdrs in and out of the rpmdb
       if the first arg is a string then it's a filename
       otherwise it's an rpm hdrc         C   sl  t  |  t j k rYye t j | d  } y t j | j    } Wn3 t j k
 rx } t	 d t
 d  |  d  } n XWn t k
 r } t | d  } y t j | j    } WqLt j k
 r } t	 d t
 d  |  d  } qLXn_ t k
 r} t	 d t
 d  |  d  } n0 t k
 rK} t	 d t
 d  |  d  } n X| j   n | } | |  _ d  S(   NRr   i    s   Damaged Header %s(   R1   R2   R:   t   gzipR   R   t
   headerLoadt   readR   RU   R	   R   t   IOErrort
   ValueErrort	   zlibErrorR   R   (   R_   R6   t   fdR   R    (    (    s5   /usr/lib/python2.7/site-packages/rpmUtils/oldUtils.pyRi      s0    	
(   Rb   Rc   t   __doc__Ri   (    (    (    s5   /usr/lib/python2.7/site-packages/rpmUtils/oldUtils.pyR
      s   t   RPM_Workc           B   s   e  Z d    Z RS(   c         C   s   t  j t j  t j | t j  } y t  j |  |  _ Wn< t j	 k
 rz } t
 d t d  | | f  d  |  _ n Xt j |  d  S(   Ni    s   Error opening rpm %s - error %s(   R   t
   setVSFlagsR   t   _RPMVSF_NOSIGNATURESR   R   R   R   R   R   RU   R	   R   R   (   R_   t   rpmfnR   R    (    (    s5   /usr/lib/python2.7/site-packages/rpmUtils/oldUtils.pyRi     s    (   Rb   Rc   Ri   (    (    (    s5   /usr/lib/python2.7/site-packages/rpmUtils/oldUtils.pyR     s   t   Rpm_Ts_Workc           B   s>   e  Z d  Z d d  Z d   Z d d d d  Z d   Z RS(   s   This should operate on groups of headers/matches/etc in the rpmdb - ideally it will 
    operate with a list of the Base objects above, so I can refer to any one object there
    not sure the best way to do this yet, more thinking involvedt   /c         C   s   y+ t  j r* t  j d k r* t  j } q* n  Wn t k
 r@ } n Xt j |  |  _ d d d d d d d d	 d
 d d g |  _ d  S(   NR   t
   addInstallt   addEraset   runt   checkt   orderR   t   closeDBt   dbMatcht   setFlagsR   t   setProbFilter(   RS   RT   t	   NameErrorR   RR   R   t   methods(   R_   t   dbPathR    (    (    s5   /usr/lib/python2.7/site-packages/rpmUtils/oldUtils.pyRi   !  s    	c         C   s,   | |  j  k r t |  j |  St |  d  S(   N(   R   t   getattrR   t   AttributeError(   R_   t	   attribute(    (    s5   /usr/lib/python2.7/site-packages/rpmUtils/oldUtils.pyt   __getattr__.  s    c         C   sO  g  } | d k r< | d k r< | d k r< |  j j   } n | d k r` |  j j | |  } n | d k r |  j j   } | j | t j |  n | d k r |  j j   } | j | t j |  nY | d k r |  j j   } | j | t j |  n% |  j j   } | j | t j |  x' | D] } t	 |  } | j
 |  q(W| S(   s(   hands back a list of Header_Work objectst   globt   regext   strcmpN(   R   R   R   t   patternR   t   RPMMIRE_GLOBt   RPMMIRE_REGEXt   RPMMIRE_STRCMPt   RPMMIRE_DEFAULTR
   R5   (   R_   Rk   t   searcht   miret   hwlistt   hdrlistR   t   hdrobj(    (    s5   /usr/lib/python2.7/site-packages/rpmUtils/oldUtils.pyt   match4  s(    $c         C   s|   | d k r* |  j  j t j t j B nN | d k rM |  j  j t j  n+ | d k ro |  j  j t j  n	 t |  d S(   sA   pass type of check you want to occur, default is to have them offR   t   noneR   N(   R   R   R   t   RPMVSF_NOMD5t   RPMVSF_NEEDPAYLOADR   t   RPMVSF_DEFAULTR   (   R_   t   sig(    (    s5   /usr/lib/python2.7/site-packages/rpmUtils/oldUtils.pyR   S  s    N(   Rb   Rc   R   Ri   R   R   R   R   (    (    (    s5   /usr/lib/python2.7/site-packages/rpmUtils/oldUtils.pyR     s
   	(    (    (   R   R2   R   R   R   R    R   t   urlgrabber.grabberR   t   zlibR   R   R   RU   R	   R   R"   R&   R$   R9   RG   RQ   RW   t   __all__RX   Rg   Rh   R
   R   R   (    (    (    s5   /usr/lib/python2.7/site-packages/rpmUtils/oldUtils.pyt   <module>   s2   										A 