
8Yc        ;   @   s  d  d l  Z  d  d l Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l	 Z	 d  d l
 Z
 d  d l Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l Td  d l Z d  d l Z e j Z y d  d l a Wn e k
 r d a n Xd Z d Z d Z d Z d Z d Z d	 Z d
 Z  d Z! d Z" d Z# d Z$ d e% e&   d  k rd Z' n d Z' e' d Z( d Z) d Z* d Z+ d Z, d Z- d Z. d Z/ d Z0 d Z1 d Z2 d Z3 e' d Z4 e' d  Z5 e j6 j7 e5  se' d  Z5 n  e' d! Z8 e' d" Z9 e' d# Z: e' d$ Z; e' d% Z< e' d& Z= e( d' Z> e( d( Z? e( d) Z@ e( d* ZA e( d+ ZB e( d, ZC e' d- ZD d. ZE d/ ZF d0 ZG d1 ZH d2 ZI d3 ZJ e d4 ZK d5 ZL d6 ZM d7 ZN d8 ZO d9 ZP d: ZQ d; ZR d< ZS d= ZT d> ZU d? ZV d@ ZW dA ZX dB ZY dC   ZZ dD   Z[ dE   Z\ dF   Z] dG   Z^ dH   Z_ dI   Z` dJ   Za dK   Zb dL   Zc dM   Zd dN   Ze dO   Zf dP   Zg dQ   Zh dR   Zi dS   Zj dT g Zk dT dU g Zl dV g Zm dV g Zn dT dW dX dY g Zo dZ g Zp dV g Zq dU g Zr g  Zs d[ g Zt d[ d\ g Zu d] g Zv dV g Zw dV d^ g Zx dU g Zy dV g Zz dU g Z{ dV g Z| d_ d` da g Z} db d` dc g Z~ dd dc de g Z df dc de g Z dV g Z dU g Z dV g Z dU g Z dg g Z dh g Z dh g Z dh g Z di dj dc g Z dk dl g Z dm dn dl g Z do g Z dp dq dr ds dt g Z e du dv  \ Z Z Z Z dw dx dy dz g Z e du d{  \ Z Z Z Z Z e du d{  \ Z Z Z Z Z g  e e e e e f D] Z g  ^ qZ e e eL d| g  g e e eL d} e g e e eL d~ d dm g g e e eV d e g e e eR d et g e e eO d ex g e e eN d g  g e e eN d g  g e e eY d e} g e e eY d g  g e e eN d ek g e e eM d e} g e e eN d e g e e eN d em g e e eN d em g e e eN d eq g e e eN d ew g e e eN d ez g e e eN d e| g e e eN d e g e e eL d~ d g g e e eL d g  g e e eL d g  g e e eL d~ g  g e e eL d g  g e e eN d g  g e e eN d e~ g e e eP d g  g e e eP d g  g e e eP d g  g e e eP d g  g e e eL d g  g e e eM d eo g e e eM d ep g e e eN d el g e e eN d e g e e eN d en g e e eN d en g e e eN d er g e e eN d ey g e e eN d e{ g e e eN d e g e e eL d g  g e e eO d e g e e eL d g  g e e eO d g  g e e eO d g  g e e eV d e g e e eL d g  g e e eO d g  g e e eO d g  g e e eO d g  g e e eO d g  g e e eO d g  g e e eO d g  g g7 e e <e e eO d e g e e eO d e g e e eO d e g e e eV d e g e e eX d e g e e eO d e g g e e <e e eL d| g  g e e eL d} e g e e eL d~ d dm g g e e eL d g  g e e eY d e} g e e eY d g  g e e eN d ek g e e eM d e} g e e eN d e g e e eN d em g e e eN d em g e e eN d eq g e e eN d ew g e e eN d ez g e e eN d e| g e e eN d e g e e eL d g  g e e eL d g  g e e eL d~ g  g e e eL d g  g e e eN d g  g e e eN d e~ g e e eP d g  g e e eP d g  g e e eP d g  g e e eP d g  g e e eL d g  g e e eM d eo g e e eM d ep g e e eN d el g e e eN d e g e e eN d en g e e eN d en g e e eN d er g e e eN d ey g e e eN d e{ g e e eN d e g e e eL d~ d g g e e eL d g  g e e eO d e g e e eL d g  g e e eO d g  g e e eO d g  g e e eV d e g e e eL d g  g e e eO d g  g e e eO d g  g e e eO d g  g e e eO d g  g e e eO d g  g e e eO d g  g g3 e e <e e eL d| g  g e e eL d~ d dm g g e e eL d g  g e e eN d g  g e e eL d~ d g g e e eL d g  g e e eL d g  g e e eL d~ g  g e e eL d g  g e e eN d g  g e e eN d e~ g e e eP d g  g e e eP d g  g e e eP d g  g e e eP d g  g e e eL d g  g e e eL d g  g e e eO d e g e e eL d g  g e e eO d g  g e e eO d g  g e e eV d e g e e eL d g  g e e eO d g  g e e eO d g  g e e eO d g  g e e eO d g  g e e eO d g  g e e eO d g  g g e e <e e eL d| g  g e e eL d~ d dm g g e e eN d ev g e e eR d eu g e e eO d ex g e e eN d g  g e e eL d~ d g g e e eL d g  g e e eL d g  g e e eL d~ g  g e e eL d g  g e e eN d g  g e e eN d e~ g e e eP d g  g e e eP d g  g e e eP d g  g e e eP d g  g e e eL d g  g e e eL d g  g e e eO d e g e e eL d g  g e e eO d g  g e e eO d g  g e e eV d e g e e eL d g  g e e eO d g  g e e eO d g  g e e eO d g  g e e eO d g  g e e eO d g  g e e eO d g  g g e e <d   Z d Z e j d  Z e j d  Z d d d     YZ d d d     YZ y. d e j d  k re   Z n	 e   Z Wn e k
 re   Z n Xd   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d d d     YZ d d d     YZ d dd     YZ d   Z d   Z d e f d     YZ e du d  \ Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z Z e d e d  e d e d  e d e d  e d e d  e d e d  e d e d  e d e d  e d e d  e d e d  e d e d  e d e d  e d e d  e d d  e d e d e  e d e d e  e d	 e d e  e d e d e!  e d e d e#  e d e d  e d e d  e d e d  e d e d  e d e d  e d eK  e d e d  e d e d  e d e d  e d e d  e d e d  e d e d  g Z dddddddd	d
dg
 Z d dd     YZ d S(  iN(   t   *s   /etcs   system-auths   system-auth-act	   postlogins   postlogin-acs   password-auths   password-auth-acs   fingerprint-auths   fingerprint-auth-acs   smartcard-auths   smartcard-auth-act   defaultt   lib64t   acutils
   /usr/lib64s   /usr/libs	   /securitys   /usr/sbin/pwconvs   /sbin/rpcbinds   /usr/sbin/nscds   /usr/sbin/nslcds   /usr/sbin/winbindds   /usr/sbin/sssds   /usr/sbin/ypbinds   /usr/sbin/oddjobds   /usr/sbin/setsebools   /usr/bin/pkcs11_eventmgrs   /usr/bin/pkcs11_setups   /libnss_db.so.2s   /libnss_ldap.so.2s   /libnss_nis.so.2s   /libnss_hesiod.so.2s   /libnss_odbcbind.so.2s   /libnss_winbind.so.2s   /libnss_wins.so.2s   /libnss_sss.so.2s   /pam_krb5.sos   /pam_ldap.sos   /pam_winbind.sos   /pam_pkcs11.sos   /pam_fprintd.sos   /pam_sss.sos   /sssd/modules/libsss_autofs.sos$   /var/lib/sss/pubconf/krb5.include.d/s   /usr/bin/nets   /usr/sbin/ipa-client-installs   /etc/openldap/cacertss   authconfig_downloaded.pems   /var/lib/authconfigs   /sssd/sssd.conft   requiredt	   requisitet
   sufficientt   optionals,   [default=bad success=ok user_unknown=ignore]sJ   [default=bad success=ok auth_err=ignore user_unknown=ignore ignore=ignore]s@   [success=done authinfo_unavail=ignore ignore=ignore default=die]s(   [success=done ignore=ignore default=die]s4   [success=ok authinfo_unavail=2 ignore=2 default=die]s!   [success=ok ignore=2 default=die]s   [success=1 default=ignore]s   [success=3 default=ignore]s   [default=1]s$   [default=1 ignore=ignore success=ok]c         C   s   |  j  d d  d j   S(   Ns   
i   i    (   t   splitt   rstrip(   t   s(    (    s!   /usr/share/authconfig/authinfo.pyt
   snipString   s    c         C   s;   |  s
 |  S|  j  d d  } d j t d  | j d    S(   Ns   	t    t   ,(   t   replacet   joint   filtert   NoneR	   (   t   lstR   (    (    s!   /usr/share/authconfig/authinfo.pyt	   cleanList   s    c         C   s+   |  j  |  r# |  t |  j   St Sd  S(   N(   t
   startswitht   lent   lstript   False(   t   linet   key(    (    s!   /usr/share/authconfig/authinfo.pyt   matchKey   s    c         C   s5   |  j  |  r- |  t |  j t j d  St Sd  S(   Nt   =(   R   R   R   t   stringt
   whitespaceR   (   R   R   (    (    s!   /usr/share/authconfig/authinfo.pyt   matchKeyEquals   s    c         C   s   |  j  |  S(   N(   R   (   R   R   (    (    s!   /usr/share/authconfig/authinfo.pyt	   matchLine   s    c         C   s   |  j    j | j     S(   N(   t   lowerR   (   R   R   (    (    s!   /usr/share/authconfig/authinfo.pyt
   matchLineI   s    c         C   s   |  r |  d | S| Sd  S(   NR   (    (   R   t   value(    (    s!   /usr/share/authconfig/authinfo.pyt   commaAppend   s    c         C   sN   |  r | r t  S|  s  | r$ t S| r4 |  | k S|  j   | j   k Sd  S(   N(   R   t   TrueR!   (   t   at   bt   case_sensitive(    (    s!   /usr/share/authconfig/authinfo.pyt   stringsDiffer   s    
c         C   sF   |  j    j d d  } t |  d k r. t Sd | d k rB t St S(   NR   i   i   R   i    (   R   R	   R   R   R%   (   R#   R   (    (    s!   /usr/share/authconfig/authinfo.pyt   checkDN   s    c         C   s'   t  |  |  } | r t |  St Sd  S(   N(   R   R*   R   (   R   R   R#   (    (    s!   /usr/share/authconfig/authinfo.pyt   matchBaseLine   s    
c         C   s   |  j  d d  } t |  d k r1 | d }  n  d } t |  } x t r |  j | |  } | d k  rn d  S| d k r |  | d j   r | | 7} qF n  | | t |   k  r |  | | j   r | | 7} qF n  | SWd  S(   Nt   :i   i    (   R	   R   R%   t   findR   t   isalnum(   t   configurationt	   candidateR   t   startt   clen(    (    s!   /usr/share/authconfig/authinfo.pyt   checkNSS   s"    	 
*
c         C   s   d  } yQ t j |  | |  } | t j k rC t j | t j  n t j | t j  Wn\ t k
 r \ } } | d  k r y t j	 |  Wq t k
 r q Xn  t
 | |   n X| S(   N(   R   t   ost   opent   O_RDONLYt   fcntlt   lockft   LOCK_SHt   LOCK_EXt   OSErrort   closet   IOError(   t   filenamet   modet   permst   fdt   errnot   strerr(    (    s!   /usr/share/authconfig/authinfo.pyt   openfdLocked   s    c         C   s&   t  j t |  t  j t  j B|  d  S(   Ns   r+(   R4   t   fdopenRD   t   O_RDWRt   O_CREAT(   R>   R@   (    (    s!   /usr/share/authconfig/authinfo.pyt
   openLocked   s    c         C   sE   d } |  j  d  }  x) |  D]! } | r | d | d 7} q q W| S(   Nt    R   s     kdc = s   
(   R	   (   t   kdclistt   outputt   kdc(    (    s!   /usr/share/authconfig/authinfo.pyt   krbKdc   s    c         C   sK   d } |  j  d  }  x/ |  D]' } | r | d 7} | | d 7} q q W| S(   NRI   R   s     admin_server = s   
(   R	   (   t   adminserversRK   t   adminserver(    (    s!   /usr/share/authconfig/authinfo.pyt   krbAdminServer   s    
c         C   sO   d } |  rK | d |  d 7} | t  |  7} | t |  7} | d 7} n  | S(   NRI   R   s    = {
s    }

(   RM   RP   (   t   realmRJ   RN   RK   (    (    s!   /usr/share/authconfig/authinfo.pyt   krbRealm  s    c         C   s   |  j  d d  } t |  d k  r- d } n
 | d } | d j   j  d   } | j   j  d   } | | k r | j t j d  St S(   NR   i   i   RI   i    (   R	   R   R!   R   R   R   R   R   (   R   R   t   linelstt   paramt   keylst(    (    s!   /usr/share/authconfig/authinfo.pyt   matchLineSMB  s    	
t   try_first_passt   use_authtokt   use_first_passt   local_users_onlys   retry=3s   authtok_type=s   enforce=userst   nodebugt   wait_for_cardt   allow_missing_namet   no_subsequent_prompts   uid >=t   500t   quiet_successs   uid <t   quiets   service in crondt   use_uidsK   service notin login:gdm:xdm:kdm:xscreensaver:gnome-screensaver:kscreensavert   revoket   unwraps   service !~ gdm*s   service !~ su*t   nowtmpt
   showfailedt   silentt   noupdates   delay=2000000t   descryptt   bigcryptt   md5t   sha256t   sha512i    i   t   autht   accountt   sessiont   passwordi   t   envt	   faildelayt   faillockt   preautht
   succeed_ift   pkcs11t   krb5t   permitt   fprintdt	   localusert   unixt   ssst   afss   afs.krbt   eps_autht   ldapt   otpt   winbindt   authfailt   denyt   accesst	   pwqualityt   passwdqct
   eps_passwdt   keyinitt   limitst   systemdt	   mkhomedirt   ecryptfst   lastlogc         C   s/   d } |  j  d  }  | |  j d d  7} | S(   Ns   DC=t   .s   ,DC=(   R
   R   (   t   domainRK   (    (    s!   /usr/share/authconfig/authinfo.pyt	   domain2dnC  s    i   s7   ^[ \t]*([^ \t]+)[ \t][ \t"]*(([^"]*)".*|([^"]*\S)?\s*)$s&   ^.*[ \t]*uid[ \t]+(<|>=)[ \t]+([0-9]+)t   SysVInitServicec           B   s>   e  Z d    Z d   Z d   Z d   Z d   Z d   Z RS(   c         C   s   t  j d | d  d  S(   Ns   /sbin/service s    start(   R4   t   system(   t   selft   service(    (    s!   /usr/share/authconfig/authinfo.pyR1   W  s    c         C   s   t  j d | d  d  S(   Ns   /sbin/service s    stop >/dev/null 2>&1(   R4   R   (   R   R   (    (    s!   /usr/share/authconfig/authinfo.pyt   stopZ  s    c         C   s*   t  j d |  t  j d | d  d  S(   Ns   /sbin/chkconfig --add s   /sbin/chkconfig --level 345 s    on(   R4   R   (   R   R   (    (    s!   /usr/share/authconfig/authinfo.pyt   enable]  s    c         C   s   t  j d | d  d  S(   Ns   /sbin/chkconfig --level 345 s    off(   R4   R   (   R   R   (    (    s!   /usr/share/authconfig/authinfo.pyt   disablea  s    c         C   s9   t  j d | d  } t  j |  o8 t  j |  d k S(   Ns   /sbin/chkconfig s    >/dev/null 2>&1i    (   R4   R   t	   WIFEXITEDt   WEXITSTATUS(   R   R   t   rv(    (    s!   /usr/share/authconfig/authinfo.pyt	   isEnabledd  s    c         C   s   t  j d | d  d  S(   Ns   /sbin/service s    condrestart >/dev/null 2>&1(   R4   R   (   R   R   (    (    s!   /usr/share/authconfig/authinfo.pyt
   tryRestarth  s    (   t   __name__t
   __module__R1   R   R   R   R   R   (    (    (    s!   /usr/share/authconfig/authinfo.pyR   V  s   					t   SystemdServicec           B   s>   e  Z d    Z d   Z d   Z d   Z d   Z d   Z RS(   c         C   s   t  j d | d  d  S(   Ns   /bin/systemctl start s   .service(   R4   R   (   R   R   (    (    s!   /usr/share/authconfig/authinfo.pyR1   l  s    c         C   s   t  j d | d  d  S(   Ns   /bin/systemctl stop s   .service >/dev/null 2>&1(   R4   R   (   R   R   (    (    s!   /usr/share/authconfig/authinfo.pyR   o  s    c         C   s   t  j d | d  d  S(   Ns   /bin/systemctl enable s   .service >/dev/null 2>&1(   R4   R   (   R   R   (    (    s!   /usr/share/authconfig/authinfo.pyR   r  s    c         C   s   t  j d | d  d  S(   Ns   /bin/systemctl disable s   .service >/dev/null 2>&1(   R4   R   (   R   R   (    (    s!   /usr/share/authconfig/authinfo.pyR   u  s    c         C   s9   t  j d | d  } t  j |  o8 t  j |  d k S(   Ns   /bin/systemctl is-enabled s   .service >/dev/null 2>&1i    (   R4   R   R   R   (   R   R   R   (    (    s!   /usr/share/authconfig/authinfo.pyR   x  s    c         C   s   t  j d | d  d  S(   Ns   /bin/systemctl try-restart s   .service >/dev/null 2>&1(   R4   R   (   R   R   (    (    s!   /usr/share/authconfig/authinfo.pyR   |  s    (   R   R   R1   R   R   R   R   R   (    (    (    s!   /usr/share/authconfig/authinfo.pyR   k  s   					s
   /sbin/initc         C   s   |  r^ yA t  j |  t j |  | sF t j |  t j |  n  Wq t k
 rZ q Xn` yL t  j |  | s y t j |  Wq t k
 r q Xn  t j |  Wn t k
 r n Xt S(   N(	   R4   t   statt   ServiceR   R   R1   R;   R   R%   (   R   t   patht   namet   nostart(    (    s!   /usr/share/authconfig/authinfo.pyt   toggleSplatbindService  s(    c         C   s   |  r
 d Sd Sd  S(   Nt   enabledt   disabled(    (   t   val(    (    s!   /usr/share/authconfig/authinfo.pyt
   formatBool  s    c         C   s  y t  j   \ } } Wn t k
 r* d SX| s | rO t |  g d t } n5 t |  g d t d t } | j d | p| d d  | j   | j } t  j	 |  n  d \ } }	 y7 t
 j
 | t
 j  }
 t
 j
 | t
 j |
 t  j @ Wn t k
 r n Xt } xk| sqy7 g  } g  } t j | g g  | g d  \ } } } Wn4 t j k
 rz\ } } t j j d | d  n X| r| rt  j |  t } qn  d } y t  j | d	  } Wn t k
 rM\ } } | t j k sG| t j k rq| t j k rt  j |  t } qt j j d
 | d  t  j |  t } qn X| r[y | | 7} |	 | 7}	 | rt j j |  n  | r| | k r|	 j d  } t  j | | pd  t  j | d  | d k rd |	 |  }	 n d }	 d } | rt j j d  qn  Wqnt k
 rW\ } } t j j d | d  t  j |  t } qnXqt  j |  t } qWy t  j | t j  Wn t k
 rn Xd } y t  j | d  \ } } Wn1 t k
 r\ } } t j j d | d  n X| |	 f S(   Ni   t   shellt   stdint   inputRI   s   
i<   s   select: i   s   read: s   
is   <...>
s   write: i    s	   waitpid: (   RI   RI   (    R4   t   forkptyR;   t   PopenR%   t   PIPEt   communicatet   waitt
   returncodet   _exitR7   t   F_GETFLt   F_SETFLt
   O_NONBLOCKR=   R   t   selectt   errort   syst   stderrt   writeR<   t   readRB   t   EINTRt   EAGAINt   EIOt   rfindt   killt   signalt   SIGTERMt   waitpid(   t   commandt   echot   queryt   responset   pidt   mastert   childt   statusRK   R   t   it   eoft   ifdst   efdst   ofdst   errt   textt   ct   index(    (    s!   /usr/share/authconfig/authinfo.pyt   feedFork  s    
	"	+	


c         C   s   y t  j |   } Wn t k
 r' t SXxS | D]K } y1 t  j |  d |  } t j | j  re t SWq/ t k
 ry q/ Xq/ Wt S(   Nt   /(   R4   t   listdirR;   R%   R   t   S_ISREGt   st_modeR   (   R   R   R>   t   st(    (    s!   /usr/share/authconfig/authinfo.pyt
   isEmptyDir  s    c         C   s|   yc t  t g |  d t } | j   d j d  } | j d k rH d  S| d d k rb | d 3n  Wn t k
 rw d  SX| S(   Nt   stdouti    s   
iRI   (   R   t   PATH_SCSETUPR   R   R	   R   R   R;   (   t   optionsR   R   (    (    s!   /usr/share/authconfig/authinfo.pyt   callPKCS11Setup  s    c          C   s#   t  d g  }  |  d  k r g  S|  S(   Nt   list_modules(   R   R   (   t   mods(    (    s!   /usr/share/authconfig/authinfo.pyt   getSmartcardModules  s    c           C   s   t  d  t  d  g S(   Nt   Lockt   Ignore(   t   _(    (    (    s!   /usr/share/authconfig/authinfo.pyt   getSmartcardActions   s    c         C   s   t  |   } | j   | S(   N(   t   AuthInfoR   (   t   msgcbt   info(    (    s!   /usr/share/authconfig/authinfo.pyR   #  s    
t	   SaveGroupc           B   s   e  Z d    Z d   Z RS(   c         C   s   | |  _  | |  _ | |  _ d  S(   N(   t   saveFunctiont   toggleFunctiont   attrlist(   R   t   savefunct
   togglefuncR   (    (    s!   /usr/share/authconfig/authinfo.pyt   __init__)  s    		c         C   s   x |  j  D] \ } } | | j k r) t S| d k rZ t | |  t | |  k r t Sq
 | d k r t t | |  t | |  t  r t Sq
 | d k r
 t t | |  t | |  t  r t Sq
 q
 Wt S(   NR'   R   R   (   R   t   inconsistentAttrsR%   t   getattrR)   R   (   R   R&   R'   t   anamet   atype(    (    s!   /usr/share/authconfig/authinfo.pyt   attrsDiffer.  s    $$(   R   R   R   R   (    (    (    s!   /usr/share/authconfig/authinfo.pyR   (  s   	t   SafeFilec           B   s5   e  Z d    Z d   Z d   Z d   Z d   Z RS(   c         C   s   t  j j |  \ } } t |  _ t j d | d | d t  |  _ t	 d d | |  j j
 g d t  j d t  j  d k r t |  _ t  j |  j j   |  n  | |  _ d  S(	   Nt   dirt   prefixt   deletes   /bin/cps   -afR   s	   /dev/nulli   (   R4   R   R	   R   t   missingt   tempfilet   NamedTemporaryFileR%   t   filet   callR   R5   t   O_WRONLYt   fchmodt   filenoR>   (   R   R>   t   default_modet   baseR   (    (    s!   /usr/share/authconfig/authinfo.pyR   >  s    	!	c         C   st   |  j  j   t j |  j  j    t j |  j  j |  j  |  j rp t	 d |  j g d t j
 d t j  n  d  S(   Ns   /usr/sbin/restoreconR   s	   /dev/null(   R   t   flushR4   t   fsyncR  t   renameR   R>   R   R   R5   R  (   R   (    (    s!   /usr/share/authconfig/authinfo.pyt   saveJ  s    	c         C   s)   y |  j  j   Wn t k
 r$ n Xd  S(   N(   R   R<   R;   (   R   (    (    s!   /usr/share/authconfig/authinfo.pyR<   R  s    c         C   s   |  j  j |  S(   N(   R   R   (   R   R   (    (    s!   /usr/share/authconfig/authinfo.pyR   Y  s    c         C   s$   |  j  j d  |  j  j d  d  S(   Ni    (   R   t   seekt   truncate(   R   (    (    s!   /usr/share/authconfig/authinfo.pyt   rewind\  s    (   R   R   R   R	  R<   R   R  (    (    (    s!   /usr/share/authconfig/authinfo.pyR   =  s
   				t
   FileBackupc           B   s,   e  Z d    Z d   Z d   Z d   Z RS(   c         C   s   | |  _  | |  _ d  S(   N(   t
   backupNamet   origPath(   R   t
   backupnamet   origpath(    (    s!   /usr/share/authconfig/authinfo.pyR   a  s    	c         C   s  t  } d  } d  } y t | t j d  } Wn t k
 r? t  SXy t j t j |  j	  } Wn% t t
 f k
 r t j |  t  SXy t | |  } | j   Wn t k
 r t } n XyL xE | rt j | d  } | s t  } Pn  t j | j j   |  q WWn t t
 f k
 r)t } n Xy | rCt j |  n  Wn t t
 f k
 r]n Xy' | r| r| j   | j   n  Wn t t
 f k
 rt } n X| S(   Ni    i   (   R%   R   RD   R4   R6   R=   R   t   S_IMODEt   fstatR   R;   R<   R   R  R   R   R   R   R  R	  (   R   t   srct   destR   t   srcfdt   destfileR?   R'   (    (    s!   /usr/share/authconfig/authinfo.pyt   safeCopye  sL    
	!


c         C   s   t  } y& t j j |  s+ t j |  n  Wn t t f k
 rK t } n X| d |  j } | r{ |  j	 |  j
 |  } n  | S(   NR   (   R%   R4   R   t   isdirt   mkdirR;   R=   R   R  R  R  (   R   t   destdirR   t
   backuppath(    (    s!   /usr/share/authconfig/authinfo.pyt   backup  s    
c         C   s   t  } y t j j |  s t SWn t t f k
 r? t } n X| d |  j } | r t j j |  r |  j	 | |  j
  } n  y5 | r t d |  j
 g d t j d t j  n  Wn t t f k
 r n X| S(   NR   s   /usr/sbin/restoreconR   s	   /dev/null(   R%   R4   R   R  R   R=   R;   R  t   isfileR  R  R   R5   R  (   R   t	   backupdirR   R  (    (    s!   /usr/share/authconfig/authinfo.pyt   restore  s     
(   R   R   R   R  R  R   (    (    (    s!   /usr/share/authconfig/authinfo.pyR  `  s   		*	c           C   s   t  j d  S(   Nt   nscd(   R   R   (    (    (    s!   /usr/share/authconfig/authinfo.pyt	   readCache  s    c         C   sL   |  r t  j d  n2 y t j t  t  j d  Wn t k
 rG n Xt S(   NR!  (   R   R   R4   R   t	   PATH_NSCDR   R;   R%   (   R   (    (    s!   /usr/share/authconfig/authinfo.pyt
   writeCache  s    t   CacheBackupc           B   s   e  Z d    Z d   Z RS(   c         C   s   t  } y& t j j |  s+ t j |  n  Wn t t f k
 rK t } n X| d |  j } | r d  } y5 t
   } t | d  } | j t t |    Wn t k
 r t } n X| r | j   q n  | s y t j |  Wq t k
 r q Xn  | S(   NR   t   w(   R%   R4   R   R  R  R;   R=   R   R  R   R"  R5   R   t   strt   intR<   t   unlink(   R   R  R   R  R  R   (    (    s!   /usr/share/authconfig/authinfo.pyR    s.    
	
c         C   s   t  } y t j j |  s t SWn t t f k
 r? t } n X| d |  j } | r t j j |  r d  } y/ t
 | d  } t | j    } t |  Wn  t t t f k
 r t } n X| r | j   q n  | S(   NR   t   r(   R%   R4   R   R  R   R=   R;   R  R  R   R5   R(  R   R$  t
   ValueErrorR<   (   R   R  R   R  R  R   (    (    s!   /usr/share/authconfig/authinfo.pyR     s$    

(   R   R   R  R   (    (    (    s!   /usr/share/authconfig/authinfo.pyR%    s   	i   s   hesiod.confs   /hesiod.confs   yp.confs   /yp.confs	   ldap.confs
   /ldap.confs   nss_ldap.confs   /nss_ldap.confs   pam_ldap.confs   /pam_ldap.confs
   nslcd.confs   /nslcd.confs   openldap.confs   /openldap/ldap.confs	   krb5.confs
   /krb5.confs   krb.confs	   /krb.confs   pam_pkcs11.confs   /pam_pkcs11/pam_pkcs11.confs   smb.confs   /samba/smb.confs   nsswitch.confs   /nsswitch.confs   cacheenabled.confRI   s   /pam.d/t
   authconfigs   /sysconfig/authconfigt   networks   /sysconfig/networks   libuser.confs   /libuser.confs   pwquality.confs   /security/pwquality.confs
   login.defss   /login.defss	   sssd.conft   shadows   /shadowt   passwds   /passwdt   gshadows   /gshadowt   groups   /groups   10-authconfigs    /dconf/db/distro.d/10-authconfigs   10-authconfig-lockss,   /dconf/db/distro.d/locks/10-authconfig-lockst
   ldapServert   ldap_urit
   ldapBaseDNt   ldap_search_baset   enableLDAPSt   ldap_id_use_start_tlst
   ldapSchemat   ldap_schemat   ldapCacertDirt   ldap_tls_cacertdirt   kerberosKDCt   krb5_servert   kerberosAdminServert   krb5_kpasswdt   kerberosRealmt
   krb5_realmt   enableCacheCredst   cache_credentialst   krb5_store_password_if_offlineR   c           B   s  e  Z d    Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z	 d   Z
 d	   Z d
   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z e d  Z d   Z  d   Z! d   Z" d    Z# d!   Z$ d"   Z% d#   Z& d$   Z' d%   Z( d&   Z) d'   Z* d(   Z+ d)   Z, d*   Z- d+   Z. d,   Z/ d-   Z0 d.   Z1 d/   Z2 d0   Z3 d1   Z4 d2   Z5 d3   Z6 d4   Z7 d5   Z8 d6   Z9 d7   Z: d8   Z; d9   Z< d:   Z= d;   Z> d<   Z? d=   Z@ d>   ZA d?   ZB d@   ZC dA   ZD dB   ZE dC   ZF dD   ZG dE   ZH dF   ZI dG   ZJ dH   ZK dI   ZL dJ   ZM dK   ZN dL   ZO dM   ZP dN   ZQ dO   ZR dP   ZS RS(Q   c      8   C   s  | |  _  d |  _ g  |  _ d |  _ d |  _ d |  _ d |  _ d  |  _ d  |  _	 d |  _
 d  |  _ d |  _ d |  _ d |  _ d |  _ d |  _ d |  _ d |  _ d |  _ d |  _ d |  _ d |  _ d |  _ d  |  _ d  |  _ d  |  _ d  |  _ d  |  _ d  |  _ d  |  _ t |  _  t |  _! d |  _" d |  _# d  |  _$ d  |  _% d  |  _& d  |  _' d  |  _( d  |  _) d  |  _* d  |  _+ d  |  _, d  |  _- d  |  _. d  |  _/ d  |  _0 d  |  _1 d  |  _2 d  |  _3 d  |  _4 d  |  _5 d  |  _6 d  |  _7 d  |  _8 d  |  _9 d  |  _: d  |  _; t< |  _= d  |  _> d  |  _? d  |  _@ d  |  _A d  |  _B d |  _C d |  _D d  |  _E d  |  _F d  |  _G d  |  _H d  |  _I d  |  _J d  |  _K d  |  _L d  |  _M d  |  _N d  |  _O d  |  _P d  |  _Q d  |  _R d  |  _S d  |  _T t |  _U t |  _V d  |  _W d |  _X d |  _Y d |  _Z d |  _[ d  |  _\ d  |  _] d  |  _^ d  |  __ d  |  _` d |  _a d |  _b d |  _c d |  _d d |  _e d |  _f d |  _g d |  _h d |  _i d |  _j d |  _k d |  _l t< |  _m d  |  _n d  |  _o d  |  _p t |  _q tr r$y  tr jr   |  _n |  jn js   Wq$tt k
 r q$Xn  tu   |  _v tw |  jx |  jy dm dn g  tw |  jz d  do dp g  tw |  j{ |  j| dq dr ds g  tw |  j} d  dt du dv dw dx dy g  tw |  j~ d  dz g  tw |  j d  d{ g  tw |  j d  d| d} d~ d d d d d g  tw |  j d  d d d d d d d d g  tw |  j |  j d d d d d d d d d d d d d d d g  tw |  j d  d d g  tw |  j d  d d d d d g  tw |  j |  j d d d d d d d d d d d g  tw |  j d  d d d d d d d d d d d d d d d d d d d d d d g  tw |  j d  d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d g'  tw |  j d  d d d d d d d d d d d d d d d d d d d d d d d ddddddddd	d
g!  tw |  j d  dg  tw |  j d  dg  tw d  |  j| dg  tw d  |  j dg  tw d  |  j dddddg  tw d  |  j ddddddg  tw d  |  j ddg  g |  _ d  S(  NRI   t   9t   1t   0s   deny=4 unlock_time=1200s
   umask=0077t   enableCacheR'   t   implicitSSSDt	   hesiodLHSR   t	   hesiodRHSt	   nisDomainR   t   nisLocalDomaint	   nisServerR2  R4  R6  R8  R:  t   passwordAlgorithmt
   passMinLent   passMinClasst   passMaxRepeatt   passMaxClassRepeatt   passReqLowert   passReqUppert   passReqDigitt   passReqOtherR@  R<  t   smbSecurityt   smbRealmt
   smbServersR>  t   kerberosRealmviaDNSt   kerberosKDCviaDNSRB  t   enableSmartcardt   forceSSSDUpdatet
   enableLDAPt   enableKerberost   enableLDAPAutht   enableIPAv2t   smartcardActiont   smartcardModulet   enableFprintdt   forceSmartcardt   smbWorkgroupt   smbIdmapRanget   winbindSeparatort   winbindTemplateHomedirt   winbindTemplateShellt   winbindUseDefaultDomaint   winbindOfflinet   winbindKrb5t   enableDBt   enableDirectoriest   enableWinbindt   enableOdbcbindt
   enableNIS3t	   enableNISt   enableLDAPbindt   enableHesiodbindt   enableHesiodt   enableDBIbindt   enableDBbindt   enableCompatt
   enableWINSt
   enableMDNSt   enableMyhostnamet
   enableSSSDt   preferDNSinHostst   pwqualityArgst   passwdqcArgst   faillockArgst   enableFaillockt   localuserArgst   pamAccessArgst   enablePAMAccesst   mkhomedirArgst   enableMkHomeDirt
   algoRoundst   enableShadowt   enableNullOkt   forceBrokenShadowt   enableWinbindAutht	   enableAFSt   enableAFSKerberost   enablePWQualityt	   enableEPSt   enableEcryptfst	   enableOTPt   enablePasswdQCt   enableLocAuthorizet   enableSysNetAutht   enableSSSDAutht	   pamLinkedt   implicitSSSDAutht   systemdArgst   uidMint   enableForceLegacyt   ipav2Servert   ipav2Domaint
   ipav2Realmt   ipaDomainJoinedt
   ipav2NoNTP(   s   enableCacheR'   (   s   implicitSSSDR'   (   s	   hesiodLHSR   (   s	   hesiodRHSR   (   s	   nisDomainR   (   s   nisLocalDomainR   (   s	   nisServerR   (   s
   ldapServerR   (   s
   ldapBaseDNR   (   s   enableLDAPSR'   (   s
   ldapSchemaR   (   s   ldapCacertDirR   (   s   passwordAlgorithmR   (   s   passwordAlgorithmR   (   s   passwordAlgorithmR   (   s
   passMinLenR   (   s   passMinClassR   (   s   passMaxRepeatR   (   s   passMaxClassRepeatR   (   s   passReqLowerR'   (   s   passReqUpperR'   (   s   passReqDigitR'   (   s   passReqOtherR'   (   s   kerberosRealmR   (   s   kerberosKDCR   (   s   smbSecurityR   (   s   smbRealmR   (   s
   smbServersR   (   s   kerberosAdminServerR   (   s   kerberosRealmviaDNSR'   (   s   kerberosKDCviaDNSR'   (   s
   ldapServerR   (   s
   ldapBaseDNR   (   s   enableLDAPSR'   (   s
   ldapSchemaR   (   s   ldapCacertDirR   (   s   enableCacheCredsR'   (   s   enableSmartcardR'   (   s   kerberosRealmR   (   s   kerberosKDCR   (   s   kerberosAdminServerR   (   s   forceSSSDUpdateR'   (   s
   enableLDAPR'   (   s   enableKerberosR'   (   s   enableLDAPAuthR'   (   s   enableIPAv2R'   (   s   smartcardActionR   (   s   smartcardModuleR   (   s   smartcardActionR   (   s   smartcardModuleR   (   s   enableFprintdR'   (   s   enableSmartcardR'   (   s   forceSmartcardR'   (   s   smbWorkgroupR   (   s
   smbServersR   (   s   smbRealmR   (   s   smbSecurityR   (   s   smbIdmapRangeR   (   s   winbindSeparatorR   (   s   winbindTemplateHomedirR   (   s   winbindTemplateShellR   (   s   winbindUseDefaultDomainR'   (   s   winbindOfflineR'   (   s   winbindKrb5R'   (   s   enableDBR'   (   s   enableDirectoriesR'   (   s   enableWinbindR'   (   s   enableOdbcbindR'   (   s
   enableNIS3R'   (   s	   enableNISR'   (   s   enableLDAPbindR'   (   s
   enableLDAPR'   (   s   enableHesiodbindR'   (   s   enableHesiodR'   (   s   enableDBIbindR'   (   s   enableDBbindR'   (   s   enableCompatR'   (   s
   enableWINSR'   (   s
   enableMDNSR'   (   s   enableMyhostnameR'   (   s
   enableNIS3R'   (   s	   enableNISR'   (   s   enableIPAv2R'   (   s
   enableSSSDR'   (   s   preferDNSinHostsR'   (   s   implicitSSSDR'   (   s   pwqualityArgsR   (   s   passwdqcArgsR   (   s   faillockArgsR   (   s   enableFaillockR'   (   s   localuserArgsR   (   s   pamAccessArgsR   (   s   enablePAMAccessR'   (   s   mkhomedirArgsR   (   s   enableMkHomeDirR'   (   s
   algoRoundsR   (   s   passwordAlgorithmR   (   s   enableShadowR'   (   s	   enableNISR'   (   s   enableNullOkR'   (   s   forceBrokenShadowR'   (   s   enableLDAPAuthR'   (   s   enableKerberosR'   (   s   enableSmartcardR'   (   s   forceSmartcardR'   (   s   enableWinbindAuthR'   (   s   enableMkHomeDirR'   (   s	   enableAFSR'   (   s   enableAFSKerberosR'   (   s   enablePWQualityR'   (   s	   enableEPSR'   (   s   enableEcryptfsR'   (   s	   enableOTPR'   (   s   enablePasswdQCR'   (   s   enableLocAuthorizeR'   (   s   enableSysNetAuthR'   (   s   winbindOfflineR'   (   s   winbindKrb5R'   (   s   enableSSSDAuthR'   (   s   enableFprintdR'   (   s	   pamLinkedR'   (   s   implicitSSSDAuthR'   (   s   systemdArgsR   (   s   uidMinR   (   s   enableIPAv2R'   (   s   passwordAlgorithmR   (   s   enableShadowR'   (   s	   enableNISR'   (   s
   enableLDAPR'   (   s   enableLDAPAuthR'   (   s   enableKerberosR'   (   s   enableEcryptfsR'   (   s   enableSmartcardR'   (   s   forceSmartcardR'   (   s   enableWinbindAuthR'   (   s   enableWinbindR'   (   s   winbindKrb5R'   (   s   enableDBR'   (   s   enableHesiodR'   (   s   enablePWQualityR'   (   s   enablePasswdQCR'   (   s   enableFaillockR'   (   s   faillockArgsR   (   s   enableLocAuthorizeR'   (   s   enablePAMAccessR'   (   s   enableCacheCredsR'   (   s   enableMkHomeDirR'   (   s   enableSysNetAuthR'   (   s   enableFprintdR'   (   s
   enableSSSDR'   (   s   enableSSSDAuthR'   (   s   enableForceLegacyR'   (   s   ipav2ServerR   (   s   ipav2DomainR   (   s
   ipav2RealmR   (   s   enableIPAv2R'   (   s   ipaDomainJoinedR'   (   s
   ipav2NoNTPR'   (   s	   nisDomainR   (   s   enableShadowR'   (   s	   enableNISR'   (   s   enableMkHomeDirR'   (   s
   enableLDAPR'   (   s   enableLDAPAuthR'   (   s   implicitSSSDR'   (   s   implicitSSSDAuthR'   (   s   enableForceLegacyR'   (   s   implicitSSSDR'   (   s   implicitSSSDAuthR'   (   s   enableIPAv2R'   (   s
   enableSSSDR'   (   s   enableSSSDAuthR'   (   s   enableForceLegacyR'   (   s   enableWinbindR'   (   s   enableWinbindAuthR'   (   t	   messageCBt	   backupDirR   RJ  RK  R2  R4  R   R@  R[  R<  R\  R>  RN  RL  RM  Rg  RY  RZ  RX  Rh  Ri  Rj  Rk  Rl  Rm  Rn  R  R  R  R  R   R  t   ipaUninstallRd  Rc  RH  Rz  Ro  Rp  Rw  R_  R6  Rt  Rs  Ry  Rx  Rv  Ru  Rr  Rq  R{  R|  R}  R  R~  Rb  t   enableAltfilesR  R  R%   R  R  R  R  R`  Ra  RO  R  R  R  R  R  R  R  R  R  R  R]  R  t   brokenShadowR  Rf  Re  R  RI  R  RB  RP  RQ  RR  RS  RT  RU  RV  RW  R  R  t   joinUsert   joinPasswordR  R  R  R  R  R  R:  t   ldapCacertURLR8  R  t
   sssdConfigt
   sssdDomainR^  t   sssdConfigPresentt
   SSSDConfigt
   new_configR=   t   sett   toggleFunctionsR   R$  t   toggleCachingServicet   writeHesiodt   writeNISt   toggleNisServicet	   writeLDAPt   writeLibusert   writeLogindefst   writePWQualityt   writeKerberost	   writeSSSDt   toggleSSSDServicet   writeSmartcardt
   writeDConft   writeWinbindt   toggleWinbindServicet   writeNSSt   writePAMt   writeSysconfigt   writeNetworkt   toggleShadowt   toggleOddjobServicet   toggleLDAPServicet   save_groups(   R   R   (    (    s!   /usr/share/authconfig/authinfo.pyR   &  sr   																																																																																																																																										c         C   sZ   t  |  |  } | | k rV t |  | |  | t  | |  k rV |  j j |  qV n  d  S(   N(   R   t   setattrR   t   append(   R   t   attrR#   t   reft   oldval(    (    s!   /usr/share/authconfig/authinfo.pyt   setParam  s
    c         C   s>   y t  |  } Wn t k
 r$ d  SX|  j | t |  |  S(   N(   R(  R+  R  R'  (   R   R  R#   R  (    (    s!   /usr/share/authconfig/authinfo.pyt   setIntParam  s
    c         C   sW   y t  |  } Wn t k
 r$ d  SX| d k  rD |  j | t |  S|  j | t |  S(   Ni    (   R(  R+  R  R%   R   (   R   R  R#   R  (    (    s!   /usr/share/authconfig/authinfo.pyt   setClassReqParam
  s    c         C   s   |  j  s |  j r t Sd } d } d } d } d
 } x> | D]6 } t |  d |  r< | | k re t S| d 7} q< q< W| d k r t Sd
 } x> | D]6 } t |  d |  r | | k r t S| d 7} q q W| d k r t S|  j r |  j r t St S(   Nt   NISt   LDAPt   Winbindt   Hesiodt   IPAv2t   Kerberost   LDAPAutht   WinbindAutht	   Smartcardi    R   i   (   R  R  R  R  R  (   R  R  R  R  (   R  R  (   R  R  R   R   R`  R[  R%   (   R   t   nssallt   pamallt   idsupportedt   authsupportedt   numt   t(    (    s!   /usr/share/authconfig/authinfo.pyt   sssdSupported  s2    c         C   s   y t  j t t j  } Wn t k
 r. t SX|  j d t | j	 d   |  |  j d t | j	 d   |  | j
   t S(   NRJ  t   lhsRK  t   rhs(   t   shvfileR   t   all_configst
   CFG_HESIODR  R=   R   R  R   t   getValueR<   R%   (   R   R  t   shv(    (    s!   /usr/share/authconfig/authinfo.pyt
   readHesiod2  s    ""
c         C   sJ  y t  t t j d  } Wn t k
 r. t SXd } x | D] } | j   } t | d  } | r |  j r t	 | |  } q< n  t | d  } | r< | j
 d  d  } t |  d k  r q< n  | d |  j k r q< n  t |  d k  r q< n  | d } t | d  } | r%t	 | |  } q%q< q< W|  j d	 | |  | j   t S(
   NR*  RI   t   ypserverR   i   i    i   t   serverRN  (   R5   R  t   CFG_YPR  R=   R   t   stripR   RM  R$   R	   R   R   R  R<   R%   (   R   R  t   ft	   nisserverR   R#   (    (    s!   /usr/share/authconfig/authinfo.pyt   readNISC  s6    

c         C   ss   d | k r | j  d  } n | j    } xB | D]: } y t j |  j } Wq1 t t j f k
 rj t SXq1 Wt S(   s&   
		Check whether LDAP URI is valid.
		R   (   R	   t   urlparset   portR+  t   socketR   R   R%   (   R   R   t   urist   urit   p(    (    s!   /usr/share/authconfig/authinfo.pyt   validateLDAPURIm  s    	c         C   s   d | k r | j  d  } n | j    } d } xU | D]M } | r7 | rV | d 7} n  d | k ro | | 7} q | d | d 7} q7 q7 W| r |  j |  r |  j t d   n  | S(   NR   RI   s   ://s   ldap://R   s   Invalid LDAP URI.(   R	   R  R  R   (   R   R   t   validatet   lt   rett   item(    (    s!   /usr/share/authconfig/authinfo.pyt   ldapHostsToURIs|  s    c         C   s  t  |  _ y t t t j d  } Wn t k
 r y t t t j d  } Wq t k
 r y t t t j d  } Wq t k
 r y t t t	 j d  } Wq t k
 r t
 SXq Xq Xn Xx| D]} | j   } t | d  } | rt |  r|  j d | |  q n  t | d  } | rC|  j d | |  q n  t | d  } | rq|  j d | |  q n  t | d  } | r|  j d t | d	  |  q n  t | d
  } | r |  j d | |  q q q W|  j t |  j  t
  |  _ | j   t S(   NR*  R  R4  t   hostR2  R  t   sslR6  t	   start_tlst
   nss_schemaR8  (   t   PATH_LDAP_CACERTSR:  R5   R  t   CFG_NSSLDAPR  R=   t	   CFG_NSLCDt   CFG_PAMLDAPt   CFG_LDAPR   R  R   R*   R  R    R  R   R2  R<   R%   (   R   R  R  R   R#   (    (    s!   /usr/share/authconfig/authinfo.pyt   readLDAP  sN    	

c         C   s(   y |  j  | SWn t k
 r# d SXd  S(   NRI   (   t   allKerberosKDCst   KeyError(   R   RQ   (    (    s!   /usr/share/authconfig/authinfo.pyt   getKerberosKDC  s    c         C   s(   y |  j  | SWn t k
 r# d SXd  S(   NRI   (   t   allKerberosAdminServersR  (   R   RQ   (    (    s!   /usr/share/authconfig/authinfo.pyt   getKerberosAdminServer  s    c         C   s  d } i  |  _  i  |  _ t } y t t t j d  } Wn t k
 rL t SXx| D]} | j d  d } | j	   } | d d !d k r | d d !} d } qT n  | d k rbt
 | d	  } | r |  j d
 | |  t } qT n  t
 | d  } | r"|  j d t | d  d k |  qT n  t
 | d  } | rY|  j d t | d  d k |  qT qYqT | d k rT | s| j d  d  } t |  d k  rqT n  | d } qY| d d !d k rd } qT n  |  j s| |  _ t } n  t
 | d  } | rt |  j |  |  |  j  | <qT n  t
 | d  } | rYt |  j |  |  |  j | <qYqT qT W| j   | r|  j r|  j d |  j |  j  |  |  j d |  j |  j  |  qn/ |  j r|  j j d
  n |  j d
 d |  t S(   NRI   R*  t   #i    i   t   [it   libdefaultst   default_realmR@  t   dns_lookup_kdcR\  t   truet   dns_lookup_realmR[  t   realmst   }RL   t   admin_serverR<  R>  (   R  R  R   R5   R  t   CFG_KRB5R  R=   R	   R  R   R  R%   R   R   R   R@  R$   R  R	  R<   R   R  (   R   R  t   sectiont   realm_foundR  R   t
   subsectionR#   (    (    s!   /usr/share/authconfig/authinfo.pyt   readKerberos  sr    		""				)
	%	c         C   s   d } y t  t t j d  } Wn t k
 r4 t SXx | D] } | j   } | d d !d k rz | d d !} d } q< n  | d k r< t | d  } | r |  j d	 | j	   |  q< q q< q< W| j
   t S(
   NRI   R*  i    i   R  it   defaultst   crypt_styleRO  (   R5   R  t   CFG_LIBUSERR  R=   R   R  R   R  R!   R<   R%   (   R   R  R  R  R   R  R#   (    (    s!   /usr/share/authconfig/authinfo.pyt   readLibuser  s$    
c         C   sh  y t  t t j d  } Wn t k
 r. t SXx(| D] } t j |  } | d  k	 r6 | j	 d  } | j
 d  r{ q6 n  | j	 d  } | d  k r | j	 d  } n  | d  k r d } q n q6 | d k r | d k r |  j d	 d
 |  q6 n  | d k r4| d k rd } n  |  j d	 | j   |  q6 n  | d k r6 |  j d | |  q6 q6 W| j   t S(   NR*  i   R
  i   i   RI   t   MD5_CRYPT_ENABt   yesRO  Rk   t   ENCRYPT_METHODt   DESRi   t   UID_MINR  (   R5   R  t   CFG_LOGIN_DEFSR  R=   R   t
   ld_line_ret   matchR   R1  R   R  R!   R<   R%   (   R   R  R  R   R$  R   R#   (    (    s!   /usr/share/authconfig/authinfo.pyt   readLogindefs:  s8    	
c         C   s  d } y t  t t j d  } Wn t k
 r4 t SXx| D]} | j d  d } | j   } t | d  } | r |  j	 d | |  q< n  t | d  } | r |  j	 d | |  q< n  t | d	  } | r |  j	 d
 | |  q< n  t | d  } | r|  j	 d | |  q< n  t | d  } | rG|  j
 d | |  q< n  t | d  } | ru|  j
 d | |  q< n  t | d  } | r|  j
 d | |  q< n  t | d  } | r< |  j
 d | |  q< q< q< W| j   t S(   NRI   R*  R
  i    t   minlenRP  t   minclassRQ  t	   maxrepeatRR  t   maxclassrepeatRS  t   lcreditRT  t   ucreditRU  t   dcreditRV  t   ocreditRW  (   R5   R  t   CFG_PWQUALITYR  R=   R   R	   R  R   R  R  R<   R%   (   R   R  R  R  R   R#   (    (    s!   /usr/share/authconfig/authinfo.pyt   readPWQuality\  sT    

c   	      C   s%  |  j  s t St j   |  _  y$ |  j  j t t j  t |  _ Wn6 t t j	 f k
 rx t j   |  _  |  j  j
   n Xy |  j  j t  } |  _ Wn t j k
 ruy |  j  j   d } Wn= t k
 r y |  j  j   d } Wq t k
 r t SXn X|  j  j |  } y | j d  } Wn t j k
 rAd  } n Xy | j d  } Wqvt j k
 rqd  } qvXn Xx t D] \ } } y} | j |  } | d k rd j | j d   } n0 | d k r| d k rw}n | d	 k rw}n  |  j | | |  Wq}t j k
 rq}Xq}Wd  S(
   Ni    t   id_providert   auth_providerR3  R   R   R9  t   rfc2307RD  (   R  R%   R  t   import_configR  t   CFG_SSSDR  R  R=   t   ParsingErrorR  t
   get_domaint   SSSD_AUTHCONFIG_DOMAINR  t   NoDomainErrort   list_active_domainst
   IndexErrort   list_domainst
   get_optiont   NoOptionErrorR   t   sssd_optionsR   R	   R  (	   R   R  R   t   domnamet   idprovt   authprovR  t   optR   (    (    s!   /usr/share/authconfig/authinfo.pyt   readSSSD  sP    		
c         C   s   t  } t d g  } | d  k r. d |  _ t  S|  j d | d |  t d g  } | d  k rd t  Sx# | D] } d | k rk t } qk qk W| r |  j d t d  |  n |  j d t d	  |  t S(
   Nt
   use_moduleRI   Rd  i    t	   rm_actions   lockhelper.shRc  R   R   (   R   R   R   Rd  R  R%   R   (   R   R  t   lockt   smartcardmodulet	   rmactionst   action(    (    s!   /usr/share/authconfig/authinfo.pyt   readSmartcard  s     	c         C   s   d } d } y t  t t j d  } Wn t k
 r: | SXx | D] } | j   } t | d  ri qB n  t | d  r~ qB n  t | d  } | r | j d  d j	   } qB n  | sB | d k r qB n  t
 | |  } | rB | } qB qB W| j   | S(	   NRI   R*  R
  t   ;R  t   ]i    t   global(   R5   R  t   CFG_SMBR  R=   R  R    R   R	   R!   RV   R<   (   R   R   t   resultR  R  R   R#   t   res(    (    s!   /usr/share/authconfig/authinfo.pyt   readWinbindGlobal  s.    
c         C   sT   |  j  |  } | rP | j   d k sE | j   d k sE | d k rI t St Sn  d  S(   NR  R  RF  (   RQ  R!   R%   R   R   (   R   R   t   tmp(    (    s!   /usr/share/authconfig/authinfo.pyt   readWinbindGlobalBool  s    0c         C   s  |  j  d  } | r+ |  j d | |  n  |  j  d  } | rV |  j d | |  n  |  j  d  } | r |  j d | |  n  |  j  d  } | r |  j d | |  n  |  j s d	 |  _ n  |  j  d
  } | r |  j d | |  n  |  j sd |  _ n  |  j  d  } | r,|  j d | |  n  |  j  d  } | rW|  j d | |  n  |  j  d  } | r|  j d | |  n  |  j sd |  _ n  |  j d  } | d  k r|  j d | |  n  |  j d  } | d  k r|  j d | |  n  t S(   Nt	   workgroupRg  s   password serverRZ  RQ   RY  t   securityRX  t   users   idmap config * : rangeRh  s   16777216-33554431s   winbind separatorRi  s   template homedirRj  s   template shellRk  s
   /bin/falses   winbind use default domainRl  s   winbind offline logonRm  (   RQ  R  RX  Rh  Rk  RS  R   R%   (   R   R  RR  (    (    s!   /usr/share/authconfig/authinfo.pyt   readWinbind  sJ    			c      
   C   s]  d } d } y t  t t j d  } Wn t k
 r: t SXxM| D]E} | j   } t | d  } | rr | } qB t | d  } | rit | d  r |  j	 d t
 |  n  t | d  r |  j	 d t
 |  n  t | d	  r |  j	 d
 t
 |  n  t | d  } | d  k r#t | d  } n  t | d  } | d  k r| d  k r|  j	 d | | k  |  qqB t | d  } | rB | } qB qB W| rOd# d$ d% d& d' d( d) d* d+ f	 }	 x= |	 D]5 \ }
 } t | |  r|  j	 d  |
 t
 |  qqW| r*t | d!  r*t | d!  r*|  j j d"  n  |  j	 d" t t | d!   |  n  | j   t
 S(,   NRI   R*  s   passwd:s   hosts:t   winsR{  s   mdns4_minimal [NOTFOUND=return]R|  t
   myhostnameR}  t   nist   dnsR  s   initgroups:t   Compatt   compatt   DBt   dbt   Directoriest   directoriesR  t   hesiodR  R   R  t   Altfilest   altfilest   NIS3t   nisplusR  R   R   R}   RI  (   R\  R]  (   R^  R_  (   R`  Ra  (   s   Hesiods   hesiod(   s   LDAPR   (   s   NISRZ  (   Rc  Rd  (   Re  Rf  (   s   WinbindR   (   R5   R  t   CFG_NSSWITCHR  R=   R   R  R   R3   R  R%   R   R   R  t   boolR<   (   R   R  t	   nssconfigt
   initgroupsR  R   R#   t   nispost   dnspost   nssmapR  t   nssentry(    (    s!   /usr/share/authconfig/authinfo.pyt   readNSS   sR    		%%
c         C   s   |  j  d t   |  t S(   NRH  (   R  R"  R%   (   R   R  (    (    s!   /usr/share/authconfig/authinfo.pyR"  W  s    c         C   s   y t  t t j d  } WnA t k
 r] y t  t d t d  } Wq^ t k
 rY t SXn X|  j | |  | j	   y t  t t
 j d  } WnA t k
 r y t  t d t d  } Wq t k
 r t SXn X|  j | |  | j	   t S(   NR*  s   /pam.d/(   R5   R  t   CFG_PAMR  R=   t
   SYSCONFDIRt   AUTH_PAM_SERVICER   t   readPAMFileR<   t   CFG_POSTLOGIN_PAMt   POSTLOGIN_PAM_SERVICER%   (   R   R  R  (    (    s!   /usr/share/authconfig/authinfo.pyt   readPAM\  s&    	
	
c         C   s"  d } x|| D]t} | j  d d  } t |  d k rD | d } n  | j   } | d d k rx | | d  d 7} q n  | | } d } | j   } d } | j  d  d  } t |  d k  r q n  | \ } } | d	 k r| d
 k r| d k r| d k rq n  | j d  r*| j  d d  } n | j  d  d  } t |  d k  rTq n  | d d k rjq n  | d } | j d  r| d 7} n  | d } | j  d  d  } t |  d k  rq n  | d j  d  d \ }	 t |  d k r| d } n  |	 j d  s|	 j d  rP|  j d t |  | r |  j d | |  q q n  |	 j d  rx|  j d t |  q n  |	 j d  r|  j d t |  q n  |	 j d  r|  j d t |  q n  |	 j d  r%|  j d t |  d | k r|  j d t |  q |  j d t |  q n  |	 j d  rM|  j d  t |  q n  |	 j d!  r|  j d" t |  | r |  j d# | |  q q n  |	 j d$  r|  j d% t |  |  j d& | j	 d'  d k |  q n  |	 j d(  r|  j d) t |  q n  |	 j d*  rG|  j d+ t |  | r |  j d, | |  q q n  |	 j d-  se|	 j d.  r|  j d/ t |  | r | |  _
 q q n  |	 j d0  r|  j d1 t |  | r |  j d2 | |  q q n  |	 j d3  r| r |  j d4 | |  q q n  | d k r|	 j d5  rx9 t D]1 }
 | j	 |
  d k r'|  j d6 |
 |  q'q'WyP | j d7  } | | d8 j  d  d  } |  j d9 t t | d   |  Wn t t f k
 rn Xy$ t j d:  |  j d; t |  Wqt k
 r|  j d; t |  qXqn  | d	 k r|	 j d5  rW|  j d< | j	 d=  d k |  n  |	 j d>  r|  j d? t |  | r d@ | k r | j d@ d  j   } |  j dA | |  q q qn  | d
 k r|	 j d5  r|  j dB | j	 dC  d k |  qn  | d	 k s| d
 k r |	 j dD  rt j |  } | d  k r~| j d  d  k r~|  j dE | j d  |  q~qq q W|  j r|  j r|  j d" t |  n  |  j r|  j r|  j d t |  n  |  j r|  j r|  j r|  j r|  j r|  j  rt |  _! n  d  S(F   NRI   R
  i   i    is   \R   i   Rn   Ro   Rq   Rp   R  RL  t   includeR   t   pam_cracklibt   pam_pwqualityR  R  t   pam_ecryptfsR  t   pam_krb5R`  t   pam_ldapRa  t
   pam_pkcs11R]  t   authinfo_unavailRf  t   pam_fprintdRe  t   pam_passwdqcR  R  t   pam_winbindR  Rn  t	   krb5_autht   pam_sssR  t
   pam_accessR  R  t   pam_mkhomedirt   pam_oddjob_mkhomedirR  t   pam_localuserR  R  t   pam_systemdR  t   pam_unixRO  s   rounds=i   R  s   /etc/shadowR  R  t   nullokt   pam_faillockR  R   R  R  t   broken_shadowt   pam_succeed_ifR  ("   R	   R   R
   R   R   R   R  R%   R   R-   R  t   password_algorithmsR   R'  R(  R+  R:  R4   R   R;   R   R  t
   succ_if_reR$  R1  R  R  R  Ra  R`  R  R  R]  R  (   R   R  R  t   prevlineR   R   t   argst   stackt   controlt   modulet   algot   ridxt   roundsR$  (    (    s!   /usr/share/authconfig/authinfo.pyRs  w  s   


"'%	(!)c         C   sS  y;t  j t t j  } y | j d  |  _ Wn t k
 rB n Xy | j d  |  _ Wn t k
 rl n Xy | j d  |  _	 Wn t k
 r n Xy | j d  |  _
 Wn t k
 r n Xy | j d  |  _ Wn t k
 r n Xy | j d  |  _ Wn t k
 rn Xy | j d  |  _ Wn t k
 r>n Xy( | j d  |  _ | j d	  |  _ Wn t k
 rzn Xy | j d
  |  _ Wn t k
 rn Xy | j d  |  _ Wn t k
 rn Xy | j d  |  _ Wn t k
 rn Xy | j d  |  _ Wn t k
 r"n Xy | j d  |  _ Wn t k
 rLn Xy | j d  |  _ Wn t k
 rvn Xy | j d  |  _ Wn t k
 rn Xy | j d  |  _ Wn t k
 rn Xy | j d  |  _ Wn t k
 rn Xy | j d  |  _ Wn t k
 rn Xy | j d  |  _ Wn t k
 rHn Xy. | j d  } | rmd |  _ n	 d |  _ Wn t k
 rn Xy | j d  |  _ Wn t k
 rn Xy | j d  |  _ Wn t k
 rn Xy | j d  |  _ Wn t k
 rn Xy | j d  |  _  Wn t k
 r2n Xy | j d  |  _! Wn t k
 r\n Xy | j d  |  _" Wn t k
 rn Xy | j d  |  _# Wn t k
 rn Xy | j d  |  _$ Wn t k
 rn Xy | j d   |  _% Wn t k
 rn Xy | j d!  |  _& Wn t k
 r.n Xy | j d"  |  _' Wn t k
 rXn Xy | j d#  |  _( Wn t k
 rn Xy | j d$  |  _) Wn t k
 rn Xy | j d%  |  _* Wn t k
 rn Xy | j d&  |  _+ Wn t k
 r n Xy | j d'  |  _, Wn t k
 r*n Xy | j d(  |  _- Wn t k
 rTn Xy | j d)  |  _. Wn t k
 r~n Xy | j d*  |  _/ Wn t k
 rn Xy | j d+  |  _0 Wn t k
 rn X| j d,  |  _1 | j d-  |  _2 | j d.  |  _3 | j d/  } | t4 k r0| |  _ n  | j5   Wn t6 k
 rNn Xt7 S(0   Nt   USEAFSt   USEAFSKERBEROSt   USEDBt   USEPWQUALITYt	   USEDBBINDt
   USEDBIBINDt   USEDIRECTORIESt   USEFAILLOCKt   FAILLOCKARGSt   USEECRYPTFSt   USEEPSt	   USEHESIODt   USEHESIODBINDt   USEKERBEROSt   USELDAPt   USELDAPAUTHt   USESMARTCARDt
   USEFPRINTDt   FORCESMARTCARDt   USELDAPBINDt   USEMD5Rk   Ri   t   USENISt
   USENISPLUSt   USEODBCBINDt   USEOTPt   USEPASSWDQCt	   USESHADOWt
   USEWINBINDt   USEWINBINDAUTHt   WINBINDKRB5t   USESSSDt   USESSSDAUTHt   USELOCAUTHORIZEt   USEPAMACCESSt   USEMKHOMEDIRt   USESYSNETAUTHt   FORCELEGACYt   CACHECREDENTIALSt   USEIPAV2t   IPADOMAINJOINEDt
   IPAV2NONTPt   IPAV2SERVERt   IPAV2DOMAINt
   IPAV2REALMt   PASSWDALGORITHM(8   R  R   R  t   CFG_AUTHCONFIGR  t   getBoolValueR  R+  R  Ro  R  Ry  Rx  Rp  R  R  R  R  R  Rw  Rv  R`  R_  Ra  R]  Re  Rf  Ru  RO  Rt  t   enableNISP3Rr  R  R  R  Rq  R  Rn  R~  R  R  R  R  R  R  RB  Rb  R  R  R  R  R  R  R<   R=   R%   (   R   R  t	   enableMD5R  (    (    s!   /usr/share/authconfig/authinfo.pyt   readSysconfig	  s`   c         C   s   y t  j t t j  } Wn t k
 r. t SX| j d  } | rP | |  _ n  | j	   |  j r| |  j
 d |  j |  n  t S(   Nt	   NISDOMAINRL  (   R  R   R  t   CFG_NETWORKR  R=   R   R  RM  R<   R  R%   (   R   R  R  RR  (    (    s!   /usr/share/authconfig/authinfo.pyt   readNetwork	  s    
	c         C   sh   |  j    } t | j  | k s6 t | j  | k r: t Sx' |  j D] } | j |  |  rD t SqD Wt S(   N(   R  Rh  RI  R  R%   R  R   R   (   R   R'   t   sssdsupportedR1  (    (    s!   /usr/share/authconfig/authinfo.pyt   differs	  s    *c         C   s   t  |  j  |  _ t  |  j  |  _ t  |  j  |  _ t  |  j  |  _ |  j |  j |  |  _ |  j d k r |  j r |  j j	   |  _ q n  |  j
 j   |  _
 |  j d  k r t |  _ n  |  j d  k r d |  _ n  d  S(   Nt   adsRI   (   R   RZ  R  R<  R>  R  R2  RX  RY  t   upperRO  R!   RB  R   R%   R@  (   R   R  (    (    s!   /usr/share/authconfig/authinfo.pyt   update	  s    	c         C   s  |  j    } |  j   |  j |  |  j |  |  j |  |  j   } |  j r | r |  j r |  j d t	 |  t
 |  _ n  |  j r | r |  j r |  j d t	 |  t
 |  _ n  |  j |  |  j |  |  j |  |  j |  |  j |  |  j |  |  j r-|  j r-|  j |  n  |  j |  |  j |  |  j sY|  j ri|  j |  n  |  j |  |  j |  |  j   d  S(   NR~  R  (   t   copyR  Ro  R  Rv  R  RI  Rb  R  R%   R   R  R%  R/  R  RW  R  R  RC  R  R  RJ  R"  R  (   R   R  t   reallyimplicit(    (    s!   /usr/share/authconfig/authinfo.pyR   
  s6    
c         C   s%   t  j  |   } d | _ d | _ | S(   NRI   (   R  R  R  (   R   R  (    (    s!   /usr/share/authconfig/authinfo.pyR  &
  s    		c         C   s/   t  t j |  j  t |  j o' |  j  t S(   N(   R  t	   CFG_CACHER  R  R$  RH  RI  R%   (   R   (    (    s!   /usr/share/authconfig/authinfo.pyR$  ,
  s    c         C   s   t  t j |  j  y t j t  t j  } Wn t k
 rB t SX| j	 d |  j
  | j	 d |  j  | j d  | j   t S(   NR  R  i  (   R  R  R  R  R  t   rcreateR  R=   R   t   setValueRJ  RK  R   R<   R%   (   R   R  (    (    s!   /usr/share/authconfig/authinfo.pyR  1
  s    
c   	      C   s  t  } d  } d } t t j |  j  zt t t j d  } x| j D]} | j	   } t
 | d  } | r}| j d  d  } t |  d k  r qI n  | d |  j k r | d |  j k r | | 7} qI n  | r|  j r| d |  j 7} |  j j d  } |  j r'| d 7} | | d 7} n
 | d	 7} | d
 7} | d } x) | D]! } | rL| d | d
 7} qLqLWt } qqI t | d  r| r|  j r|  j r|  j j d  } x) | D]! } | r| d | d
 7} qqWt } qqI | | 7} qI W| s|  j j d  } |  j rv| d |  j 7} | d r_| d 7} | | d 7} | d } n
 | d	 7} | d
 7} n  x, | D]! } | r}| d | d
 7} q}q}Wn  | j   | j |  | j   Wd  y | r| j   n  Wn t k
 rn XXt S(   NRI   i  R   i   i    s   domain R   s    server s
    broadcasts   
s	   ypserver R  (   R   R   R  R  R  R  R   R  R   R  R   R	   R   RL  RM  RN  R%   R    R  R   R	  R<   R=   (	   R   t   writtenR  RK   R   t   lsR#   t   serversR   (    (    s!   /usr/share/authconfig/authinfo.pyR  @
  sv    &
	



	



c         C   s  t  } t  }	 t  }
 t  } t  } t  } d  } d } |  j r` |  j d k r` |  j d k r` d } n d } zt | d  } xJ| j D]?} | j   } t | |  r |	 r|  j r| | d 7} | d j |  j j	 d   7} | d	 7} t
 }	 qq t | |  r"|  j r| d
 | 7} qq t | |  rr| r|  j r| | d 7} | |  j 7} | d	 7} t
 } qq | rt | d  r|
 s| d 7} |  j r| d 7} n
 | d 7} | d	 7} t
 }
 qq | rt | d  r| r|  j r| d 7} | |  j 7} | d	 7} t
 } qq t | d  rx| s| rG| d 7} n
 | d 7} | d |  j 7} | d	 7} t
 } qq | rt | d  r| s| d | 7} | d	 7} t
 } qq | | 7} q W|	 r|  j r| | d 7} | d j |  j j	 d   7} | d	 7} n  | rG|  j rG| | d 7} | |  j 7} | d	 7} n  | r|
 r| d 7} |  j rt| d 7} n
 | d 7} | d	 7} n  | r| r|  j r| d 7} | |  j 7} | d	 7} n  | s| r| d 7} n
 | d 7} | d |  j 7} | d	 7} n  | r.| r.| d | 7} | d	 7} n  | j   | j |  | j   Wd  y | ri| j   n  Wn t k
 r}n XXt
 S(   NRI   Ri   Rj   Rk   t   crypti  R   R   s   
R
  R  s   ssl R  t   noR  s   nss_schema t   tls_cacertdirt   TLS_CACERTDIRt   pam_passwords   pam_password (   R   R   RO  R   R   R  R    R2  R   R	   R%   R+   R4  R6  R8  R"   R:  R  R   R	  R<   R=   (   R   R>   R  R  R  t	   writepadlt   writeschemat   writepamt   wrotebasednt   wroteservert   wrotesslt   wroteschemat	   wrotepasst   wrotecacertdirR  RK   t   passalgoR   R  (    (    s!   /usr/share/authconfig/authinfo.pyt
   writeLDAP2
  s    	
	

	







	



c         C   s  t  j j t t j  rV t t j |  j  |  j t t j d d d t	 t	 t	  n  t  j j t t
 j  r t t
 j |  j  |  j t t
 j d d d t	 t	 t  n  t  j j t t j  rt t j |  j  |  j t t j d d d t	 t t	  n  t  j j t t j  rXt t j |  j  |  j t t j d d d t	 t t  n  t t j |  j  |  j t t j d d d t t t  } | S(   NR  R  R  t   URIt   HOSTt   BASE(   R4   R   R  R  R  R  R  R  R  R%   R   R   R  R  t   CFG_OPENLDAP(   R   R  (    (    s!   /usr/share/authconfig/authinfo.pyR  
  s(    c         C   sR   d } |  j  d k r | d S|  j  d k s; |  j  d k rF | |  j  S| d Sd  S(   Ns   crypt_style = Rk   Rl   Rm   t   des(   RO  (   R   R  (    (    s!   /usr/share/authconfig/authinfo.pyt
   cryptStyle   s    c         C   s  t  } t  } d } d  } d } t t j |  j  zDt t t j d  } x | j D] } | j	   } | d k r t
 | d  r | |  j   d 7} t } qU n  t
 | d  r| d k r | r | |  j   d 7} t } n  | d j d d  d	 } | d k rt } qn  | | 7} qU W| sT| d
 7} | |  j   d 7} t } t } n  | j   | j |  | j   Wd  y | r| j   n  Wn t k
 rn XXt S(   NRI   i  R  R  s   
R  i   RL  i    s   [defaults]
(   R   R   R  R  R  R  R   R  R   R  R    R  R%   R	   R  R   R	  R<   R=   (   R   t   wrotecryptstylet   wrotedefaultsR  R  RK   R   R  (    (    s!   /usr/share/authconfig/authinfo.pyR  *  sH    	
	
c      	   C   s  t  } t  } d } d  } d } t t j |  j  |  j d k rJ d } n d } |  j d k sn |  j d k rw d } n d |  j j   d	 } z^t t t j	 d
  } x | j
 D] } t j |  }	 |	 d  k	 rE|	 j d  }
 |
 j d  r | | 7} q n  |	 j d  } | d  k r-|	 j d  } n  | d  k rRd } qRn | | 7} q |
 d k rt| | 7} t } q n  |
 d k r| | 7} t } q n  | | 7} q W| s| | 7} n  | s| | 7} n  | j   | j |  | j   Wd  y | r| j   n  Wn t k
 rn XXt S(   NRI   Rk   s   MD5_CRYPT_ENAB yes
s   MD5_CRYPT_ENAB no
Ri   Rj   s   ENCRYPT_METHOD DES
s   ENCRYPT_METHOD s   
i  i   R
  i   i   R  R  (   R   R   R  R"  R  R  RO  R  R   R  R   R#  R$  R1  R   R%   R  R   R	  R<   R=   (   R   t   wrotemd5cryptt   wroteencmethodR  R  RK   t   md5cryptt	   encmethodR   R$  R   R#   (    (    s!   /usr/share/authconfig/authinfo.pyR  _  sd    		




c         C   s   | j  d  } t |  d k r3 | j  d  } n  t |  d k r ya t | d  } | d  k rh | S| r | d k r | d d S| r | d k  r | d d SWq t k
 r q Xn  | r d } n d } | d d	 | S(
   NR   i   R   i    s    = -1s    = 0s   -1RG  s    = (   R	   R   R(  R   R+  (   R   R   R#   R  R  (    (    s!   /usr/share/authconfig/authinfo.pyt   formatClassReqParam  s$    	c         C   s  t  } t  } t  } t  } t  } t  } t  } t  } d  }	 d }
 t t j |  j  zjt t t j d  }	 x|	 j D]} | j	 d  d j
   } t | d  r | ss |
 d |  j d 7}
 t } qs qs n  t | d  r| ss |
 d	 |  j d 7}
 t } qs qs n  t | d
  r=| ss |
 d |  j d 7}
 t } qs qs n  t | d  rv| ss |
 d |  j d 7}
 t } qs qs n  t | d  r| ss |
 |  j | |  j  d 7}
 t } qs qs n  t | d  r| ss |
 |  j | |  j  d 7}
 t } qs qs n  t | d  r9| ss |
 |  j | |  j  d 7}
 t } qs qs n  t | d  rz| ss |
 |  j | |  j  d 7}
 t } qs qs n  |
 | 7}
 qs W| s|
 d |  j d 7}
 n  | s|
 d	 |  j d 7}
 n  | s|
 d |  j d 7}
 n  | s |
 d |  j d 7}
 n  | s&|
 |  j d |  j  d 7}
 n  | sL|
 |  j d |  j  d 7}
 n  | sr|
 |  j d |  j  d 7}
 n  | s|
 |  j d |  j  d 7}
 n  |	 j   |	 j |
  |	 j   Wd  y |	 r|	 j   n  Wn t k
 rn XXt S(   NRI   i  R
  i    R&  s	   minlen = s   
R'  s   minclass = R(  s   maxrepeat = R)  s   maxclassrepeat = R*  R+  R,  R-  (   R   R   R  R.  R  R  R   R  R   R	   R  R    RP  R%   RQ  RR  RS  R  RT  RU  RV  RW  R  R   R	  R<   R=   (   R   t   wroteminlent   wroteminclasst   wrotemaxrepeatt   wrotemaxclassrepeatt   wrotereqlowert   wroterequppert   wrotereqdigitt   wrotereqotherR  RK   R   R  (    (    s!   /usr/share/authconfig/authinfo.pyR    s    								    
c      '   C   s
  t  } t  } t  } t  } t  } t  } t  } t  } t  }	 t  }
 t  } t  } t  } t  } t  } t j t t j  } d } d } d  } d } t t j |  j	  |  j
 r |  j r |  j } n? |  j s |  j r |  j d k r |  j r |  j } n	 |  j } |  j |  j k rt } n  ze	t t t j d  } x,| j D]!} | j   } t | d t  rq| s7t } qqq7n  | d k r| r| |  j k rt | d  r| s7|  j r| t |  j  7} n  t } q7q7n  | d k rH|  j d k rH| rH| |  j k rHt | d  rH| s7|  j r9| t |  j  7} n  t } q7q7n  | d k r| r| |  j k rt | d  r| s7|  j r| t |  j  7} n  t } q7q7n  | d k rB| rB| j d  d  } t |  d k  r| | 7} q7n  | d	 } |  j r| |  j k rt } n  |  j rB| |  j k rBt } qBn  | d k r| rt | d
  r|  j r| |  j k r| s| t |  j  7} t } n  | s| t |  j  7} t } qn  |  j r| |  j k r| s| t |  j  7} t } qn  d } n  | d k r]t | d  r]| r7|
 r7| d 7} | | 7} | d 7} t }
 q7q7n  | d k rt | d  r| s7| d 7} | t t |  j   j    7} | d 7} t } q7q7n  | d k r#t | d  r#| s7| d 7} | t t |  j!   j    7} | d 7} t } q7q7n  | d k r|  j rt | |  j j     slt | d |  j j     r| | 7} t } q7n  t | d  rN| s| d t d 7} t } n  | d k r|  j r| r| t" |  j |  j |  j  7} t } n  | d k r7|  j r7| r7| t" |  j |  j d  7} t } n  | d k r| rw|
 rw| d 7} | | 7} | d 7} t }
 n  |  j d  k r| r| d 7} | t t |  j   j    7} | d 7} t } n  |  j! d  k r| r| d 7} | t t |  j!   j    7} | d 7} t } qn  | d k r|  j r| r| d |  j j    7} | d |  j 7} | d 7} | d |  j j    7} | d |  j 7} | d 7} t } qn  | r| d k rt } q| d k rt }	 q| d k rt } qn  | d j d d  d	 } | d k r!t } qN| d k r6t } qN| d k rNt } qNn  | | 7} q7W|	 s>	| su| d 7} n  | r|
 r| d 7} | | 7} | d 7} n  |  j d  k r| r| d 7} | t t |  j   j    7} | d 7} n  |  j! d  k r>	| r>	| d 7} | t t |  j!   j    7} | d 7} q>	n  | r	|  j sW	|  j r	| sj	| d 7} n  | s	| t" |  j |  j |  j  7} n  | s	| t" |  j |  j d  7} q	n  | rW
|  j rW
| s	| d 7} n  |  j rW
| rW
| d |  j j    7} | d |  j 7} | d 7} | d |  j j    7} | d |  j 7} | d 7} qW
n  | j#   | j$ |  | j%   Wd  y | r
| j&   n  Wn t' k
 r
n XXt S(   NRI   R  i  s   includedir R  RL   R  i   i    R  R  R  s    default_realm = s   
R  s    dns_lookup_realm = R  s    dns_lookup_kdc = t   domain_realmR   R  R   s    = s    .RL  s   [libdefaults]
s	   [realms]
s   [domain_realm]
((   R   R4   R   t   PATH_KRB5_INCLUDEDIRt   R_OKR   R  R  R  R  R`  R@  Rq  R  RX  RY  R%   R   R  R   R  R    R<  RM   RZ  R>  RP   R	   R   R'  Rh  R[  R!   R\  RR   R  R   R	  R<   R=   (   R   t
   wroterealmt   wrotekdct
   wroteadmint   wrotesmbrealmt   wrotesmbkdct   wroterealmst   wrotelibdefaultst   wroterealms2t   wrotelibdefaults2t   wrotedefaultrealmt   wrotednsrealmt   wrotednskdct   wroteourdomrealmt   wrotedomrealmt   wrotedomrealm2t   wroteincdirR  R  R  RK   t   defaultrealmR   R  R#   (    (    s!   /usr/share/authconfig/authinfo.pyR    s   	!			!		!		!		

	!		


	

	

	-
			


	

	



				



"

c         C   ss   y | j  | d  } Wn t j k
 r3 d  } n X| | k ro | d  k r\ | j |  n  | j | |  n  d  S(   Nt	   _provider(   R<  R  R=  R   t   remove_providert   add_provider(   R   R   t   newprovidert   subtypet   prov(    (    s!   /usr/share/authconfig/authinfo.pyt   changeProvider  s    
c         C   s  |  j  s t S|  j r% |  j r% t Sy |  j  j d  } Wn& t j k
 rc |  j  j d  } n X|  j r |  j	 r |  j
 d k r | j d d  n( y | j d  Wn t j k
 r n X|  j  j |  | ry |  j  j t t j  Wqt k
 rqXn  t S(   Nt   pamt   sssdt   pam_cert_authR%   (   R  R%   R  RI  t   get_serviceR  t   NoServiceErrort   new_serviceR]  R  Rd  t
   set_optiont   remove_optionR=  t   save_serviceR   R  R4  R  R=   (   R   t   write_configR  (    (    s!   /usr/share/authconfig/authinfo.pyt   writeSSSDPAM  s*    	!c         C   s  |  j  s t St t j |  j  |  j t  |  j r; t S|  j	 s |  j
 sQ t Sy |  j  j t  |  _	 Wq t j k
 r |  j  j t  |  _	 q Xn  |  j	 } y |  j  j d  Wn$ t j k
 r |  j  j d  n X|  j  j d  t } |  j r+t } |  j | d d  |  j | d d  n  |  j r]|  j | d d  |  j | d d  n2 |  j r|  j | d d  |  j | d d  n  x t D] \ } } y t |  |  } | d k rt |  } n  t |  t k r| j | |  nH t |  t k r/| r| j | |  q<| j |  n | j |  Wqt j  k
 rSqXqW|  j  j! |  | r|  j  j" | j#    n |  j  j$ | j#    y |  j  j% t t j&  Wn t' k
 rn Xt S(   Nt   autofsR   t   idRx   Rn   t   chpassR3  ((   R  R%   R  R4  R  R  R$  R   Rb  R  RI  t
   new_domainR7  R  t   DomainAlreadyExistsErrorR6  R  R  R  t   activate_serviceR_  R  R`  Ra  R>  R   R   t   typeRh  R   R'  R!  R=  t   save_domaint   activate_domaint   get_namet   deactivate_domainR   R  R=   (   R   R   t   activateR  t   optionR   (    (    s!   /usr/share/authconfig/authinfo.pyR  1  sj    								c         C   s   |  j  d  k r t St t j |  j  d } d } d } |  j t d  k rk | d 7} | d 7} d } n  t	 d |  j  d | d	 | g  t S(
   Ns   /usr/sbin/gdm-safe-restartt   noneR   s    ,/etc/pkcs11/lockhelper.sh -locks&   ,/etc/pkcs11/lockhelper.sh -deactivatet   lock_screens   use_module=s   ins_action=s
   rm_action=(
   Rd  R   R%   R  t   CFG_PAM_PKCS11R  R  Rc  R   R   (   R   t   insactt   rmactRF  (    (    s!   /usr/share/authconfig/authinfo.pyR  w  s    

	c         C   s0  d  } d } d } t t j |  j  t t j |  j  t j j t t j	  } t j j
 |  s |  j r~ t j |  q t Sn  d t j d  d } d } |  j s |  j r | | 7} d } | | 7} d } | d 7} | d 7} n  |  j r6|  j r6| | 7} d } | | 7} d } | d 7} | d	 7} n  |  j s[|  j r|  j r|  j r| | 7} d } | | 7} d } | d
 7} | d 7} n  d } |  j t d  k r| | 7} d } | | 7} d } | d 7} | d 7} n  y t j t t j	  Wn t k
 rn Xy t j t t j	  Wn t k
 r;n X| d k rz; t t t j	 d  } | j   | j |  | j   Wd  y | r| j   n  Wn t k
 rn XXz; t t t j	 d  } | j   | j |  | j   Wd  y | r| j   n  Wn t k
 rn XXn  t j d  t S(   NRI   s   # Generated by authconfig on s   %Y/%m/%d %H:%M:%Ss   
s   
[org/gnome/login-screen]
s&   enable-smartcard-authentication=false
s7   /org/gnome/login-screen/enable-smartcard-authentications%   enable-password-authentication=false
s7   /org/gnome/login-screen/enable-password-authentication
s(   enable-fingerprint-authentication=false
s:   /org/gnome/login-screen/enable-fingerprint-authentication
s3   
[org/gnome/settings-daemon/peripherals/smartcard]
R   s   removal-action='lock-screen'
s1   /org/gnome/settings-daemon/peripherals/smartcard
i  s   dconf update(   R   R  t	   CFG_DCONFR  R  t   CFG_DCONF_LOCKSR4   R   t   dirnameR  R  R]  t   makedirsR%   t   timet   strftimeRd  Rf  Re  Rc  R   R)  R;   R   R  R   R	  R<   R=   R   (   R   R  RK   t   lockst   locksdirt   headert   groupHeader(    (    s!   /usr/share/authconfig/authinfo.pyR    s    	





%







c         C   so  d } | d 7} | d t  j d  d 7} | d 7} | d 7} | d 7} |  j rv | d 7} | |  j 7} | d 7} n  |  j r | d 7} | |  j j d	 d
  7} | d 7} n  |  j r | d 7} | |  j 7} | d 7} n  |  j r	| d 7} | |  j 7} | d 7} n  |  j r6| d 7} | |  j 7} | d 7} n  |  j rc| d 7} | |  j 7} | d 7} n  |  j	 r| d 7} | |  j	 7} | d 7} n  |  j
 r| d 7} | |  j
 7} | d 7} n  |  j r| d 7} | d 7} n | d 7} | d 7} | d 7} | t t |  j   j   7} | d 7} | d 7} | t t |  j   j   7} | d 7} | d 7} | d 7} | S(   Ns   #--authconfig--start-line--
s   
s   # Generated by authconfig on s   %Y/%m/%d %H:%M:%SsF   # DO NOT EDIT THIS SECTION (delimited by --start-line--/--end-line--)
sE   # Any modification may be deleted or altered by authconfig in future
s      workgroup = s      password server = R   R   s      realm = s      security = s      idmap config * : range = s      winbind separator = s      template homedir = s      template shell = s'      kerberos method = secrets and keytabs!      kerberos method = secrets onlys       winbind use default domain = s      winbind offline logon = s   #--authconfig--end-line--
(   R;  R<  Rg  RZ  R   RY  RX  Rh  Ri  Rj  Rk  Rn  R'  Rh  Rl  R!   Rm  (   R   RK   (    (    s!   /usr/share/authconfig/authinfo.pyt   paramsWinbind  sh    



	
	
	
	
	
	
	
	
	








c         C   s>   d } x' | D] } t  | |  r d } Pq q W| | 7} | S(   NRI   RK  (   RV   (   R   R   R  R   RK   RB  (    (    s!   /usr/share/authconfig/authinfo.pyt   checkLineWinbind  s    
c   
      C   s$  t  } t  } d } t t j |  j  d d d d d d d d	 d
 d d d d d g } d  } d } zt t t j d  } x.| j D]#} | j	   } | r t
 | d  r t  } q q n  t
 | d  r t } q n  t
 | d  s t
 | d  r| | 7} q n  t | d  }	 |	 rsd |	 k rs|	 j d  d j   } | | 7} | d k r | |  j   7} t } q q n  | d k r| |  j | | |  7} q n  | | 7} q W| s| d 7} | |  j   7} n  | j   | j |  | j   Wd  y | r
| j   n  Wn t k
 rn XXt S(   NRI   RT  s   password serverRQ   RU  s   domain logonss   domain masters	   idmap uids	   idmap gids   winbind separators   template homedirs   template shells   winbind use default domains   winbind offline logons   kerberos methodi  s   #--authconfig--end-line--s   #--authconfig--start-line--RK  R
  R  RL  i    RM  s	   [global]
(   R   R  RN  R  R  R   R   R  R   R  R    R%   R   R	   R!   RA  RB  R  R   R	  R<   R=   (
   R   t   authsectiont   wroteauthsectionR  R   R  RK   R   R  R#   (    (    s!   /usr/share/authconfig/authinfo.pyR  (  sb    	

	

c      
   C   s  d } d } d } t  } t  } t  } t  } t  } t  }	 t  }
 t  } d  } d } t t j |  j  zt t t j d  } |  j r | d 7} n  | d 7} |  j	 r | d 7} n  | } |  j
 r | d 7} n  |  j r | d 7} n  |  j r | d 7} n  |  j r| d	 7} n  |  j s*|  j s*|  j rA| d
 7} | d
 7} n  |  j rW| d 7} n  |  j rw|  j rw| d 7} n  |  j r| d 7} n  |  j r| d 7} n  |  j r| d 7} n  |  j r| d 7} n  | } |  j r| j d d  } n | } |  j r| d 7} n  t j t t j  s`|  j rK|  j rK| j d d  } q`| j d
 d  } n  | d 7} |  j r| d 7} n  |  j r| d 7} n  |  j  r| d 7} n  |  j r| d 7} n  |  j r| d	 7} n  |  j s| d 7} n  |  j! r| d 7} n  x| j" D]
} | j#   } t$ | d  r_| s| d 7} | | 7} | d 7} t% } qqt$ | d  r| s| d 7} | | 7} | d 7} t% } qqt$ | d  r| s| d  7} | | 7} | d 7} t% } qqt$ | d!  r|
 s| d" 7} | | 7} t% }
 qqt$ | d#  rQ| s| d$ 7} | | 7} | d 7} t% } qqt$ | d%  r| s| d& 7} | | 7} | d 7} t% } qqt$ | d'  r|	 s| d( 7} | | 7} | d 7} t% }	 qqt$ | d)  r| s| d* 7} | | 7} | d 7} t% } qq| | 7} qW| sC| d 7} | | 7} | d 7} n  | sj| d 7} | | 7} | d 7} n  | s| d  7} | | 7} | d 7} n  | s| d$ 7} | | 7} | d 7} n  | s| d& 7} | | 7} | d 7} n  |	 s| d( 7} | | 7} | d 7} n  | s-| d* 7} | | 7} | d 7} n  | j&   | j' |  | j(   Wd  y | rh| j)   n  Wn t* k
 r|n XXt% S(+   NRI   i  s    dbs    filess	    altfiless    directoriess	    odbcbinds    nispluss    niss    ssss	    ldapbinds    ldaps    hesiodbinds    hesiods    dbibinds    dbbindt   filesR]  s    winbindR}   R   s     mdns4_minimal [NOTFOUND=return]s    dnss    winss    myhostnames   passwd:s   passwd:    s   
s   shadow:s   shadow:    s   group:s   group:     s   initgroups:R
  s	   netgroup:s   netgroup:  s
   automount:s   automount: s   hosts:s   hosts:     s	   services:s   services:  (+   R   R   R  Rg  R  R  R   R  Ro  R  Rp  Rr  Rs  Rt  R~  RI  Rb  Ru  R_  Rv  Rw  Rx  Ry  Rz  R   Rq  R4   R   t   PATH_LIBSSS_AUTOFSR  R|  R  R{  R}  R   R  R    R%   R  R   R	  R<   R=   (   R   t   userst   normalt   hostst   wrotepasswdt
   wrotegroupt   wroteshadowt   wrotenetgroupt   wroteautomountt
   wrotehostst   wroteinitgroupst   wroteservicesR  RK   t   servicest   netgroupR   R  (    (    s!   /usr/share/authconfig/authinfo.pyR  p  s:   	
					
							
							





































c   
      C   sf  t  | t } | t } | t } d } | rX| rXd } | d k r | d k r | r |  j rj t } n t } d j t  } q |  j r t	 } q n  | d k r | d k r |  j
 r t } q t } n  | d k r]| d k r| t k r|  j rZt } qZq]| d k s| d k r]|  j d  k rZ| t d }	 |  j |	 d	 <d j |	  } qZq]n  | d
 k r| d k r|  j s|  j s|  j r|  j rt } n  | d k rt j d t d f t j  rd } n  | d k r| d 7} t } n  | d | | | f 7} | ro| |  j k rot j d t | f t j  ro|  j t d t | f   t |  j | <n  | d k r|  j  } n  | d k r|  j! } n  | d k r|  j" } n  | d k r|  j# } n  | d k s| d k r|  j$ } n  | d k r|  j% } n  | d k rG| d k rG|  j rG| t t& k rGd } n  | rn| t rnd j | t  } n  | d k r|  j' r| d k r| d 7} n  | d k r|  j( r| d 7} n  | d
 k r| d k rd|  j) r|  j) d k r| d |  j) 7} n  |  j* r| d |  j* 7} n  |  j+ r5| d 7} n  |  j rK| d 7} n  |  j, rd| d  7} qdn  | d k r|  j, r| d  7} qn  | d k r|  j- s|  j. s|  j s|  j/ r| d! 7} qqn  | d" k r| d k rd j | t  d |  j0 } n  | d k r>| d k r>| t1 k r>| j2 d# d$  } n  | rX| d | 7} qXn  | d% 7} | S(&   NRI   Rw   Rn   R   Rx   Ro   Rv   i    i   R|   R   s   %s/pam_%s.sot   oddjob_mkhomedirR   t   -s   %-12s%-13s pam_%s.sos_   Authentication module %s/pam_%s.so is missing. Authentication process might not work correctly.R   R   R{   R   R}   t   forward_passR   Rq   s    cached_logins#    krb5_auth krb5_ccache_type=KEYRINGRi   s    rounds=s    shadows    niss    nulloks    broken_shadowRt   R`   Ra   s   
(3   t
   pam_stackst   STACKt   LOGICt   NAMER`  t   LOGIC_FORCE_PKCS11_KRB5t   LOGIC_FORCE_PKCS11R   t   argv_force_pkcs11_autht   LOGIC_PKCS11_KRB5R]  t   LOGIC_IGNORE_AUTH_ERRt   LOGIC_IGNORE_UNKNOWNt   LOGIC_SKIPNEXTt   LOGIC_SKIPNEXT3R  R   t   ARGVR  R  Rb  Rt  t   LOGIC_SUFFICIENTR4   R   t   AUTH_MODULE_DIRt   X_OKR   t   module_missingR  R   R%   R  R  R  R  R  R  t   argv_sssd_missing_nameRm  Rn  RO  R  R  R  R  Ra  R  R  t   LOGIC_SKIPNEXT_ON_FAILURER   (
   R   R  t
   forcescardt   warnR  t   logicR   RK   R  t   argv(    (    s!   /usr/share/authconfig/authinfo.pyt   formatPAMModule4  s    

							!		
	3	!					!$
c         C   s   t  j j |  } t  j j |  } | r1 | s> | r | r y t  j |  Wn t k
 rb n Xy t  j | |  Wq t k
 r q Xn  d  S(   N(   R4   R   R  t   islinkR)  R;   t   symlink(   R   R  R  R  R  (    (    s!   /usr/share/authconfig/authinfo.pyt   linkPAMService  s    c         C   s}   xv t  t t t t g D]_ } t d | } t j j |  } t j j	 |  } | r[ | sh | r | r t
 |  _ d  Sq Wd  S(   Ns   /pam.d/(   Rr  Ru  t   PASSWORD_AUTH_PAM_SERVICEt   FINGERPRINT_AUTH_PAM_SERVICEt   SMARTCARD_AUTH_PAM_SERVICERq  R4   R   R  Ro  R   R  (   R   R  R  R  (    (    s!   /usr/share/authconfig/authinfo.pyt   checkPAMLinked  s    	c      U   C   s[  d  } d } t | j |  j  zt t | j d  } | d 7} | d 7} | d 7} | d 7} |  j } |  j } |  j }	 t	 }
 | t
 k r t }
 n  | t k r t }	 n | t k r t } t } n  |  j o |  j d k } g  } xt | D]} | r| t | t k r| d 7} n  | } | t s|  j rF| t d	 k s|  j r_| t d
 k s|  j rx| t d k s|  j r| t d k s|  j r| t d k s|  j r| t d k s|  j r|  j r| t d k r| t t k s|  j rF| rF| t d k r&| t t k s| t d k rF| t t k s|  j ri|  j ri| t d k s| r| r| t d k r| t t  k s| r| r| t t k r| t d k r| t! t" k s| r| r| t d k s| r| r| r| t d k s| r.| r.| t d k s|	 rD| t d k s|  j# r]| t d k s|  j$ rv| t d k s|  j% r| t d k s|  j s|  j s|  j& r| t d k r| t t  k s|  j s|  j s|  j& r9|  j' r9| t d k s)| t d k r9| t! t( k r9|  j) r9| t t k s|  j* rb| t d k rb| t t+ k s|  j, r{| t d k s|  j- r| t d k s|  j) r | t t k r | t d k r | t! t. k r | |  j/ | | |
  7} q q W| j0   | j1 |  | j2   Wd  y | r)| j3   n  Wn t4 k
 r=n XX|  j5 | t6 d |  t S(   NRI   i  s
   #%PAM-1.0
s   # This file is auto-generated.
s/   # User changes will be destroyed the next time s   authconfig is run.
R  s   
R~   s   afs.krbR   Rt   R   t   epsRx   Ry   R   R}   Rv   Rw   R   Rz   R   R   R   R{   R   R   s   /pam.d/(7   R   R  R  R  R   R  Rf  R]  Re  R   t   STANDARDR%   t   FINGERPRINTt	   SMARTCARDR  Rd  t   pam_modulesRX  t	   MANDATORYR  RZ  R  R  R  R  R  R`  R  Rc  t   argv_krb5_sc_autht   AUTHRa  Rh  RY  Ra  R  R  R  Rb  Rt  Ri  R  R  t   ACCOUNTR  R  t   LOGIC_REQUISITERn  R  R   R	  R<   R=   Rq  Rq  (   R   R   t   cfgt   cfg_basenamet   cfg_linkR  RK   Rf  R]  Re  Rk  t   use_sssd_smartcard_supportt
   prevmoduleR  (    (    s!   /usr/share/authconfig/authinfo.pyt   writePAMService  s    



						
#  #, #;*)  
c         C   s{   i  |  _  |  j t t t t  |  j t t t t	  |  j t
 t t t  |  j t t t t  |  j t t t t  t S(   N(   Rg  R  Rw  Rp  t   AUTH_PAM_SERVICE_ACRr  t	   POSTLOGINRt  t   POSTLOGIN_PAM_SERVICE_ACRu  t   PASSWORD_ONLYt   CFG_PASSWORD_PAMt   PASSWORD_AUTH_PAM_SERVICE_ACRr  Rx  t   CFG_FINGERPRINT_PAMt   FINGERPRINT_AUTH_PAM_SERVICE_ACRs  Ry  t   CFG_SMARTCARD_PAMt   SMARTCARD_AUTH_PAM_SERVICE_ACRt  R%   (   R   (    (    s!   /usr/share/authconfig/authinfo.pyR    s    	c         C   s  t  t j |  j  y t j t  t j  } Wn t k
 rB t SX| j	 d |  j
  | j	 d |  j  | j d |  j  | j	 d |  j  | j	 d |  j  | j	 d |  j  | j	 d |  j  | j	 d |  j  | j	 d	 |  j  | j	 d
 |  j  | j	 d |  j  | j	 d |  j  | j	 d |  j  | j	 d |  j  | j	 d |  j  | j	 d |  j  | j	 d |  j  | j d |  j  | j d d   | j	 d |  j  | j	 d |  j  | j	 d |  j   | j	 d |  j!  | j	 d |  j"  | j	 d |  j#  | j	 d |  j$  | j	 d |  j%  | j	 d |  j&  | j	 d |  j'  | j	 d |  j(  | j	 d |  j)  | j d  |  j*  | j d! |  j+  | j d" |  j,  | j- d#  | j.   t/ S($   NR  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  i  (0   R  R  R  R  R  R  R  R=   R   t   setBoolValueR  R  R  R  Ro  Rw  R_  Rt  R  R  Rq  Rn  R~  R`  Ra  R]  Rf  Re  RO  R   R  R  R  R  R  R  R  R  RB  Rb  R  R  R  R  R  R   R<   R%   (   R   R  (    (    s!   /usr/share/authconfig/authinfo.pyR    sT    
c         C   sq   t  t j |  j  y t j t  t j  } Wn t k
 rB t SX| j	 d |  j
  | j d  | j   t S(   NR  i  (   R  R  R  R  R  R  R  R=   R   R  RL  R   R<   R%   (   R   R  (    (    s!   /usr/share/authconfig/authinfo.pyR  :  s    
c         C   s   |  j  } |  j   |  _  |  _ |  j rY |  j rY |  j  rY | rY |  j j d  qY n  t   } t |  d k r |  j	 | k r | d |  _	 n  |  j
 r |  j r t |  _
 t |  _ n  d  S(   NR^  i    (   RI  R  R  R~  R  R   R  R   R   Rd  R  Rb  R   R%   R  (   R   t   oldimplicitt   modules(    (    s!   /usr/share/authconfig/authinfo.pyt   prewriteUpdateH  s    		!	c         C   sd  |  j  t  |  j   |  j t d  y|  j   } | oF |  j   } | oX |  j   } |  j ry | os |  j	   } n  |  j
 s |  j r | o |  j   } n  |  j s |  j r |  j d k r | o |  j   } n  |  j r | o |  j   } n  |  j r| o|  j   } n  |  j s$|  j r9| o3|  j   } n  |  j sK|  j r`| oZ|  j   } n! |  j r| o{|  j t  } n  | o|  j   } | o|  j   } | o|  j   } | o|  j   } | o|  j    } | o|  j!   } Wn< t" t# f k
 r,t$ j% j& t' t$ j(   d  d  t) SXx0 |  j* D]% } | j+ r7|  j, j- | j+  q7q7W| S(   Ns   /lastR  i   s   
(.   R  R%   R  t   setupBackupt   PATH_CONFIG_BACKUPSR  R  R$  Rw  R  R_  Ra  R  R`  R  RX  R  R]  R  Rt  R  Rq  R  RI  R  R  R  R$  R  R  R  R  R  R  R;   R=   R   R   R   R'  t   exc_infoR   R  R   R  t   add(   R   R  R1  (    (    s!   /usr/share/authconfig/authinfo.pyR   V  sL    
						$	c         C   s   |  j    |  j t  |  j   |  j t d  t } yj xc |  j D]X } | j |  |  rE | j r{ | ou | j   } n  | j	 r |  j
 j | j	  q qE qE WWn< t t f k
 r t j j t t j   d  d  t SX| S(   Ns   /lasti   s   
(   Ru  R  R%   R  R  R  R  R   R   R   R  R  R;   R=   R   R   R   R'  R  R   (   R   R  R  R1  (    (    s!   /usr/share/authconfig/authinfo.pyt   writeChanged  s     

		!$c         C   s  d } d } g  } g  } t  j d g t  j d g t  j d g t  j d g g } t j   } | sd d  S| j d  s | d 7} n  | | j d  } d | } t  j | t  j t  j  } xJ | D]B } | j	 t  j k r | j
 j j d  |  _ t |  |  _ q q Wd | } t  j | t  j t  j  } | sXd | } t  j | t  j t  j  } n  x? | D]7 } | j	 t  j k r_| j
 j |  _ |  j rPqq_q_W|  j rd |  j } t  j | t  j t  j  } x | D]{ } | j	 t  j k r| j
 j j d  } | j
 j r"| d	 | j
 j 7} n  |  j rA|  j d
 | 7_ qM| |  _ qqWd |  j } t  j | t  j t  j  } x | D]{ } | j	 t  j k r| j
 j j d  } | j
 j r| d	 | j
 j 7} n  |  j r|  j d
 | 7_ q| |  _ qqWn  x | D] } | d | } t  j | | d t  j  } xV | D]N } | j	 t  j k r@| j | k r@d | d |  _ | j d  |  _ Pq@q@Wq	Wd  S(   NRI   t   hst   nsR   s
   _ldap._tcps
   _kerberos.t	   _kerbeross   _kerberos._udp.R,   R   s   _kerberos-adm._udp.i   i    (   t	   dnsclientt   DNS_C_INt   DNS_C_HSR  t   getfqdnt   endswithR-   R   t	   DNS_T_SRVt   dns_typet   rdataR  R
   R2  R   R4  t	   DNS_T_TXTt   dataR@  R  R<  R>  t	   DNS_T_SOAt   dns_nameRJ  RK  (   R   t   hostnamet   qnamet   resultsRO  Rb  R   t   h(    (    s!   /usr/share/authconfig/authinfo.pyt   probe  sx    


				c      
   C   s  d t  |  j  GHd GHd t  |  j  GHd t  |  j  GHd t  |  j  GHd |  j GHd |  j GHd t  |  j  GHd	 t  |  j  GHd
 |  j	 GHd |  j
 GHd t  |  j  GHd |  j GHd |  j GHd t  |  j  GHd t  |  j  GHd |  j GHd |  j GHd |  j GHd |  j GHd |  j GHd |  j GHd t  |  j  GHd t  |  j  GHd t  |  j  GHd t  |  j  GHd t  |  j  GHd GHd t  |  j  GHd |  j GHd t  |  j  GHd  |  j GHd! t  |  j  GHd" |  j  GHd# t  |  j!  GHd$ |  j" GHd% t  |  j#  GHd	 t  |  j  GHd
 |  j	 GHd |  j
 GHd& |  j$ pYd' GHd( t  |  j% o|  j& o|  j' d) k  GHd* t  |  j% o|  j& o|  j' d) k  GHd+ t  |  j(  GHd, |  j' GHd- |  j) GHd. t  |  j*  GHd/ t  |  j+  GHd0 t  |  j,  GHd |  j GHd |  j GHd |  j GHd |  j GHd1 t  |  j&  GHd2 t  |  j-  GHd3 t  |  j.  GHd4 t  |  j/  GHd5 |  j0 rd6 pd7 GHd8 |  j1 GHd9 |  j2 GHd: |  j3 GHd; t  |  j4  |  j5 f GHd< t  |  j6  |  j7 f GHd= t  |  j8  |  j9 f GHd> t  |  j:  |  j; f GHd? t  |  j<  |  j= f GHd@ t  |  j>  |  j? f GHdA t  |  j@  GHd  S(B   Ns   caching is %ss   nss_files is always enableds   nss_compat is %ss   nss_db is %ss   nss_hesiod is %ss    hesiod LHS = "%s"s    hesiod RHS = "%s"s   nss_ldap is %ss    LDAP+TLS is %ss    LDAP server = "%s"s    LDAP base DN = "%s"s   nss_nis is %ss    NIS server = "%s"s    NIS domain = "%s"s   nss_nisplus is %ss   nss_winbind is %ss    SMB workgroup = "%s"s    SMB servers = "%s"s    SMB security = "%s"s    SMB realm = "%s"s    Winbind template shell = "%s"s    SMB idmap range = "%s"s   nss_sss is %s by defaults   nss_wins is %ss   nss_mdns4_minimal is %ss   myhostname is %ss%   DNS preference over NSS or WINS is %ss   pam_unix is always enableds    shadow passwords are %ss!    password hashing algorithm is %ss   pam_krb5 is %ss    krb5 realm = "%s"s    krb5 realm via dns is %ss    krb5 kdc = "%s"s    krb5 kdc via dns is %ss    krb5 admin server = "%s"s   pam_ldap is %ss    LDAP schema = "%s"R2  s   pam_pkcs11 is %sR  s   SSSD smartcard support is %ss#    use only smartcard for login is %ss    smartcard module = "%s"s     smartcard removal action = "%s"s   pam_fprintd is %ss   pam_ecryptfs is %ss   pam_winbind is %ss   pam_sss is %s by defaults!    credential caching in SSSD is %ss6    SSSD use instead of legacy services if possible is %ss   IPAv2 is %ss   IPAv2 domain was %sjoineds   not RI   s    IPAv2 server = "%s"s    IPAv2 realm = "%s"s    IPAv2 domain = "%s"s   pam_pwquality is %s (%s)s   pam_passwdqc is %s (%s)s   pam_access is %s (%s)s   pam_faillock is %s (%s)s0   pam_mkhomedir or pam_oddjob_mkhomedir is %s (%s)s'   Always authorize local users is %s (%s)s;   Authenticate system accounts against network services is %s(A   R   RH  Rz  Ro  Rw  RJ  RK  R_  R6  R2  R4  Rt  RN  RL  Rs  Rq  Rg  RZ  RX  RY  Rk  Rh  R~  R{  R|  R}  R  R  RO  R`  R@  R[  R<  R\  R>  Ra  R8  R]  R  Rd  Rf  Rc  Re  R  R  RB  R  Rb  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  (   R   (    (    s!   /usr/share/authconfig/authinfo.pyt	   printInfo  s    +*c         C   su   x. t  t t t f D] } t | j |  j  q W|  j rW t j	 d  t j	 d  n t j	 d  t j	 d  t
 S(   Ns   /usr/sbin/pwconvs   /usr/sbin/grpconvs   /usr/sbin/pwunconvs   /usr/sbin/grpunconv(   t
   CFG_SHADOWt
   CFG_PASSWDt   CFG_GSHADOWt	   CFG_GROUPR  R  R  R  R4   R   R%   (   R   R  (    (    s!   /usr/share/authconfig/authinfo.pyR  0  s    	c   
      C   s  d } |  j  s |  j r|  j r|  j j d d  d j d d  d j d d  d } |  j } |  j } | s{ d } n  | d k r | d k r d  St d | r d	 p d
 | | r d p d
 | |  j f } | r t j	 j
 d |  n  |  j s | rt | | d |  j  \ } } n( t | g d t } | j   | j } | rp| d k r|  j t d   qq| d k rt d  }	 |	 d | 7}	 |  j |	  qn  | d k S(   Ni    R   i   R   s   	R  R   s    join %s%s %s%s -U %ss   -w RI   s   -S s   [%s]
s   sword:R   s'   Winbind domain join was not successful.s]   Winbind domain join was not successful. The net join command failed with the following error:s   
(   Rq  R  R  RZ  R	   Rg  RX  t   PATH_WINBIND_NETR   R   R   R  R   R   R%   R   R   R  R   (
   R   R   R   R  R   t   protocolt   cmdR   R   t   errmsg(    (    s!   /usr/share/authconfig/authinfo.pyt
   joinDomain<  s8    9			!
	c         C   s  d } |  j  r|  j } |  j } |  j } |  j } |  j } |  j rN d } n d } t d | rf d pi d | | rx d p{ d | | r d p d | | r d p d | | | r d	 p d
 f
 }	 | rt j	 j
 d |	  t |	 g d t }
 |
 j   |
 j } n t |	 | d |  \ } } | d k r5t |  _ n  | r`| d k r|  j t d   qq| d k rt d  } | d | 7} |  j |  qn  | d k S(   Ni    s   -NRI   s!    --noac %s%s %s%s %s%s %s%s %s %ss	   --domain=s	   --server=s   --realm=s   --principal=s   --unattendeds   -Ws   [%s]
R   s%   IPAv2 domain join was not successful.se   IPAv2 domain join was not successful. The ipa-client-install command failed with the following error:s   
(   Rb  R  R  R  R  R  R  t   PATH_IPA_CLIENT_INSTALLR   R   R   R   R%   R   R   R   R  R  R   (   R   R   R   R  R   RQ   t	   principalRq   t   nontpR  R   R   R  (    (    s!   /usr/share/authconfig/authinfo.pyt   joinIPADomain_  sB    								
c         C   s   t  d } t j |  d  S(   Ns     --uninstall --noac --unattended(   R  R4   R   (   R   R  (    (    s!   /usr/share/authconfig/authinfo.pyt   uninstallIPA  s    
c         C   sX   | sT |  j  r, t j d  t j d  qT y t j d  WqT t k
 rP qT Xn  t S(   NR!  (   RH  R   R   R1   R;   R%   (   R   R   (    (    s!   /usr/share/authconfig/authinfo.pyR    s    	c         C   sc  |  j  r |  j r | s/ t j d |  j  n  yA t j d  t j t  t j d  | so t j d  n  Wn t	 k
 r n XyA t j t
  t j d  | s t j d  t j d  n  Wq_t	 k
 r q_Xn | s t j d  n  yY t j d  t j t
  | s=y t j d  Wq=t	 k
 r9q=Xn  t j d  Wn t	 k
 r^n Xt S(   Ns   /bin/domainname sG   [[ $(getsebool allow_ypbind) == *off* ]] && setsebool -P allow_ypbind 1t   rpcbindt   ypbinds   /bin/domainname "(none)"sF   [[ $(getsebool allow_ypbind) == *on* ]] && setsebool -P allow_ypbind 0(   Rt  RL  R4   R   R   t   PATH_RPCBINDR   R   R1   R;   t   PATH_YPBINDR   R   R%   (   R   R   (    (    s!   /usr/share/authconfig/authinfo.pyR    sB    c         C   s   t  |  j s |  j o |  j t d |  |  j rZ y t j d  Wq t k
 rV q Xn% y t j d  Wn t k
 r~ n Xt S(   Nt   nslcdse   [[ $(getsebool authlogin_nsswitch_use_ldap) == *off* ]] && setsebool -P authlogin_nsswitch_use_ldap 1sd   [[ $(getsebool authlogin_nsswitch_use_ldap) == *on* ]] && setsebool -P authlogin_nsswitch_use_ldap 0(	   R   R_  Ra  RI  t
   PATH_NSLCDR4   R   R;   R%   (   R   R   (    (    s!   /usr/share/authconfig/authinfo.pyR    s    
	c         C   s#   t  |  j p |  j t d |  d  S(   NR   (   R   Rq  R  t   PATH_WINBIND(   R   R   (    (    s!   /usr/share/authconfig/authinfo.pyR    s    c         C   s   |  j  r |  j pE |  j  r- t j j t  pE |  j oE t j j t  } |  j pf |  j pf |  j pf | } t	 | t
 d | p | o |  j p |  j p |  j  d  S(   NR  (   R~  R  R4   R   t   existst   PATH_SSSD_CONFIGRI  R  Rb  R   t	   PATH_SSSD(   R   R   t   explicitenableR   (    (    s!   /usr/share/authconfig/authinfo.pyR    s    c         C   sB   |  j  r> t j d t d f t j  r> t t t d |  n  d  S(   Ns   %s/pam_%s.soRT  t   oddjobd(   R  R4   R   Re  Rf  R   R%   t   PATH_ODDJOBD(   R   R   (    (    s!   /usr/share/authconfig/authinfo.pyR    s
    c         C   s8   x |  j  D] } | |  q
 W|  j r4 |  j   n  d  S(   N(   R  R  R  (   R   R   R   (    (    s!   /usr/share/authconfig/authinfo.pyt   post  s    	c         C   sx   |  j  s |  j rt y t j |  j  Wn> t k
 rf \ } } | t j k rg t j |  j d  qg n Xt	 |  j  St
 S(   Ni  (   R_  Ra  R4   R   R:  R;   RB   t   ENOENTR  R   R   (   R   R   R   (    (    s!   /usr/share/authconfig/authinfo.pyt   testLDAPCACerts  s    c         C   sE   |  j  s |  j rA |  j s* d |  j k rA t j d |  j  n  d  S(   Ns   ldaps:s   /usr/sbin/cacertdir_rehash (   R_  Ra  R6  R2  R4   R   R:  (   R   (    (    s!   /usr/share/authconfig/authinfo.pyt   rehashLDAPCACerts  s    c         C   s   |  j  s t S|  j   yW t j |  j   } t |  j d t d  } | j | j	    | j
   | j
   Wn. t t t f k
 r |  j t d   t SX|  j   t S(   NR   i  s    Error downloading CA certificate(   R  R   R  t   urllib2t   urlopenRH   R:  t   LDAP_CACERT_DOWNLOADEDR   R   R<   R=   R;   R+  R  R   R  R%   (   R   t   readft   writef(    (    s!   /usr/share/authconfig/authinfo.pyt   downloadLDAPCACert  s    	


c         C   s   | d d k r! t  d | } n  | |  _ t |  s yQ t j |  } x; | D]3 } y t j | d |  WqO t k
 r qO XqO WWq t k
 r q Xn  d  S(   Ni    R   s   /backup-(   R  R  R   R4   R   R)  R;   (   R   R  R   R>   (    (    s!   /usr/share/authconfig/authinfo.pyR  	  s    	c         C   s@   |  j  |  t } x& t D] } | j |  j  o5 | } q W| S(   N(   R  R%   R  R  R  (   R   R  R  R  (    (    s!   /usr/share/authconfig/authinfo.pyt
   saveBackup  s
    c         C   sQ   | d d k r! t  d | } n  t } x# t D] } | j |  oF | } q. W| S(   Ni    R   s   /backup-(   R  R%   R  R   (   R   R  R  R  (    (    s!   /usr/share/authconfig/authinfo.pyt   restoreBackup  s    c         C   s   |  j  t d  S(   Ns   /last(   R  R  (   R   (    (    s!   /usr/share/authconfig/authinfo.pyt   restoreLast'  s    (T   R   R   R   R  R  R  R  R  R  R  R  R  R  R	  R  R  R%  R/  RC  RJ  RQ  RS  RW  Ro  R"  Rv  Rs  R  R  R  R   R  R   R  R$  R  R  R  R  R  R  R  R  R  R  R  R$  R  R  R  RA  RB  R  R  Rn  Rq  Ru  R  R  R  R  R  R   R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  R  (    (    (    s!   /usr/share/authconfig/authinfo.pyR   %  s   								*			9			K		"	1	*		 	
	+	7							"				U	u		
	5	B		\		
		F		Y	:		H		b		
	T			/			)		S	L		#	(			$											(    (    (    (    (    (   s
   ldapServers   ldap_uri(   s
   ldapBaseDNR5  (   s   enableLDAPSR7  (   s
   ldapSchemas   ldap_schema(   s   ldapCacertDirR;  (   s   kerberosKDCR=  (   s   kerberosAdminServerR?  (   s   kerberosRealmRA  (   s   enableCacheCredsRC  (   s   enableCacheCredss   krb5_store_password_if_offline(    (   R   t   reR4   R  R7   R  R   R   R   R  R  R   RB   R  R  R;  R   t
   subprocessR   t   gettextt   lgettextR   R  t   ImportErrorR   Rq  Rr  R  Ru  R  Rr  R  Rs  R  Rt  R  R7  R'  t   globalst   LIBDIRRe  t   PATH_PWCONVR  R#  R  R  R  R  R  t   PATH_SEBOOLt   PATH_SCEVENTDR   t   PATH_LIBNSS_DBt   PATH_LIBNSS_LDAPR   R  t   PATH_LIBNSS_NISt   PATH_LIBNSS_HESIODt   PATH_LIBNSS_ODBCBINDt   PATH_LIBNSS_WINBINDt   PATH_LIBNSS_WINSt   PATH_LIBNSS_SSSt   PATH_PAM_KRB5t   PATH_PAM_LDAPt   PATH_PAM_WINBINDt   PATH_PAM_PKCS11t   PATH_PAM_FPRINTDt   PATH_PAM_SSSRF  R   R  R  R  R  R  R  t   LOGIC_REQUIREDR  Rd  t   LOGIC_OPTIONALR`  R_  t   LOGIC_PKCS11R\  R^  R[  Ra  Rb  t   LOGIC_ALWAYS_SKIPRi  R   R   R   R   R    R"   R$   R)   R*   R+   R3   RD   RH   RM   RP   RR   RV   t   argv_unix_autht   argv_unix_passwordt   argv_afs_autht   argv_afs_passwordt   argv_pwquality_passwordt   argv_passwdqc_passwordt   argv_eps_autht   argv_eps_passwordt   argv_fprintd_autht   argv_pkcs11_authR]  Rh  t   argv_krb5_authR|  t   argv_krb5_passwordt   argv_ldap_autht   argv_ldap_passwordt   argv_otp_autht   argv_succeed_if_autht   argv_succeed_if_accountt   argv_succeed_if_sessiont   argv_succeed_if_nonlogint   argv_winbind_autht   argv_winbind_passwordt   argv_sss_autht   argv_sss_passwordt   argv_keyinit_sessiont   argv_ecryptfs_autht   argv_ecryptfs_passwordt   argv_ecryptfs_sessiont   argv_succeed_if_not_gdmt   argv_lastlog_gdmt   argv_lastlog_not_gdmt   argv_faildelayR  t   rangeR}  R~  t   SESSIONt   PASSWORDRW  R{  RX  RY  RZ  Rc  Rw  R  R  Rx  Ry  R   Rz  R%   R   R   t   DEFAULT_DNS_QUERY_SIZEt   compileR#  R  R   R   t   readlinkR   R;   R   R   R   R   R   R   R   R   R   R   R  R"  R$  R%  R  R  R  R   R  R  R  R  t   CFG_KRBR4  RN  Rg  R  Rp  Rt  R  R  R  R  R  R  R.  R"  R4  R  R  R  R  R7  R8  R  R>  R   (    (    (    s!   /usr/share/authconfig/authinfo.pyt   <module>   s  
	
	
















																																																			(																																																																																																																																																																																																																																																																																																																																															Z					#S		7i	