ó
b=0Yc           @   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 m Z m Z d e	 f d „  ƒ  YZ
 d e	 f d „  ƒ  YZ d e	 f d „  ƒ  YZ d	 e	 f d
 „  ƒ  YZ d d d d d d g Z d d d d g Z d Z d Z d Z d e f d „  ƒ  YZ d S(   iÿÿÿÿN(   t   S_IRUSRt   S_IRGRPt
   NoSuchUserc           B   s   e  Z d  „  Z RS(   c         C   s%   d | } t  j |  d | f ƒ d  S(   Ns   No such user (%s)(   t	   Exceptiont   __init__(   t   selft   usert   message(    (    s*   /usr/lib/python2.7/site-packages/clsudo.pyR      s    
(   t   __name__t
   __module__R   (    (    (    s*   /usr/lib/python2.7/site-packages/clsudo.pyR   
   s   t   NoSuchGroupc           B   s   e  Z d  „  Z RS(   c         C   s   d | } t  j |  | ƒ d  S(   Ns   No such group (%s)(   R   R   (   R   t   groupR   (    (    s*   /usr/lib/python2.7/site-packages/clsudo.pyR      s    
(   R   R	   R   (    (    (    s*   /usr/lib/python2.7/site-packages/clsudo.pyR
      s   t   UnableToReadFilec           B   s   e  Z d  „  Z RS(   c         C   s   t  j |  d ƒ d  S(   Ns   Cannot read sudoers file(   R   R   (   R   (    (    s*   /usr/lib/python2.7/site-packages/clsudo.pyR      s    (   R   R	   R   (    (    (    s*   /usr/lib/python2.7/site-packages/clsudo.pyR      s   t   UnableToWriteFilec           B   s   e  Z d  „  Z RS(   c         C   s   t  j |  d ƒ d  S(   Ns   Cannot modify sudoers file(   R   R   (   R   (    (    s*   /usr/lib/python2.7/site-packages/clsudo.pyR      s    (   R   R	   R   (    (    (    s*   /usr/lib/python2.7/site-packages/clsudo.pyR      s   s   /bin/pss	   /bin/greps   /sbin/services%   /usr/bin/getcontrolpaneluserspackagess   /usr/sbin/lvectls>   /usr/local/directadmin/plugins/new_lvemanager/admin/GetDomainss   /usr/bin/cl-selectors   /usr/bin/pinisets   /usr/sbin/lvepss   /usr/bin/selectorctls   Defaults:%s !requirettys-   %%%s ALL=NOPASSWD: LVECTL_CMDS, SELECTOR_CMDSs   Defaults:%%%s !requirettyt   Clsudoc           B   s  e  Z d  Z d Z d Z d Z d „  Z e e ƒ Z d „  Z e e ƒ Z d „  Z	 e e	 ƒ Z	 d „  Z
 e e
 ƒ Z
 d „  Z e e ƒ Z d	 „  Z e e ƒ Z d
 „  Z e e ƒ Z d „  Z e e ƒ Z d „  Z e e ƒ Z d „  Z e e ƒ Z d „  Z e e ƒ Z RS(   s/   
    Adds CloudLinux users to sudoers file
    s   /etc/sudoerss   /etct   lve_sudoers_c         C   sã   t  j |  ƒ t  j |  ƒ t  j sC t  j j d d j t ƒ ƒ n  t  j sl t  j j d d j t	 ƒ ƒ n  t  j
 s t  j j d |  f ƒ n  t  j s² t  j j d |  f ƒ n  t  j sÕ t  j j t |  f ƒ n  t  j ƒ  d S(   s/   
        Adds username to sudoers file
        s   Cmnd_Alias LVECTL_CMDS = s   , s   Cmnd_Alias SELECTOR_CMDS = s   %s ALL=NOPASSWD: LVECTL_CMDSs   %s ALL=NOPASSWD: SELECTOR_CMDSN(   R   t   _check_usert   _get_contentst	   has_aliast   sudoers_listt   appendt   joint   ALIAS_LVECTL_CMDSt   has_selector_aliast   ALIAS_SELECTOR_CMDSt
   has_rightst   has_selector_rightst
   has_actiont   DEFAULTS_REQUIRETTYt   _write_contents(   R   (    (    s*   /usr/lib/python2.7/site-packages/clsudo.pyt   add_user3   s    	 	 			c         C   sŠ   t  j |  ƒ t  j |  ƒ t  j s6 t  j j d ƒ n  t  j sY t  j j d |  f ƒ n  t  j s| t  j j t |  f ƒ n  t  j	 ƒ  d S(   s/   
        Adds username to sudoers file
        sO   Cmnd_Alias CAGEFS_CMDS = /usr/sbin/cagefsctl, /bin/ps, /bin/grep, /sbin/services   %s ALL=NOPASSWD: CAGEFS_CMDSN(
   R   R   R   t   has_cagefs_aliasR   R   t   has_cagefs_rightsR   R   R   (   R   (    (    s*   /usr/lib/python2.7/site-packages/clsudo.pyt   add_cagefs_userG   s    			c         C   sÀ   t  j |  ƒ t  j |  ƒ t  j sC t  j j d d j t ƒ ƒ n  t  j sl t  j j d d j t	 ƒ ƒ n  t  j
 s t  j j t |  f ƒ n  t  j s² t  j j t |  f ƒ n  t  j ƒ  d S(   sJ   
        Adds group to sudoers file, grants access to LVE Manager
        s   Cmnd_Alias LVECTL_CMDS = s   , s   Cmnd_Alias SELECTOR_CMDS = N(   R   t   _check_groupt   _get_contents_groupR   R   R   R   R   R   R   R   t   GROUP_LVECTL_SELECTORt   has_group_actiont   GROUP_DEFAULTS_REQUIRETTYR   (   t
   group_name(    (    s*   /usr/lib/python2.7/site-packages/clsudo.pyt   add_lvemanager_groupW   s    	 	 		c         C   sí   yÆ t  t j ƒ } | j ƒ  j ƒ  t _ | j ƒ  d } t } xr | t t j ƒ k  r± t j | } d |  f | k sˆ t	 |  f | k r¤ t j j
 | ƒ t } q@ n  | d 7} q@ W| rÅ t j ƒ  n  Wn  t t f k
 rè t ƒ  ‚ n Xd S(   s5   
         Removes username from sudoers file
        i    s   %s ALL=NOPASSWD:i   N(   t   openR   t   filepatht   readt
   splitlinesR   t   closet   Falset   lenR   t   removet   TrueR   t   IOErrort   OSErrorR   (   R   t   ft   idxt   removedt   line(    (    s*   /usr/lib/python2.7/site-packages/clsudo.pyt   remove_useri   s"    
&c   	      C   s  t  j |  ƒ t  j |  ƒ i t d 6t d 6} d } xÝ t t t  j ƒ ƒ D]Æ } t  j | } x— | j ƒ  D]‰ \ } } | | k rj | j	 | d ƒ j
 ƒ  } | j d ƒ } xG | D]< } | | k r° d } d | d j | ƒ f t  j | <Pq° q° Wqj qj W| d k rJ t  j ƒ  qJ qJ Wd	 S(
   s2   
        updates username in sudoers file
        s   Cmnd_Alias LVECTL_CMDSs   Cmnd_Alias SELECTOR_CMDSi    t    t   ,i   s   %s = %ss   , N(   R   R   R   R   R   t   rangeR/   R   t	   iteritemst   replacet   stript   splitR   R   (	   R   t	   cmnd_dictt   is_sudoer_changeR5   t   comand_stringt
   aliase_keyt   aliase_listt	   cmnd_listt   aliase_cmnd_item(    (    s*   /usr/lib/python2.7/site-packages/clsudo.pyt   update_user€   s"     c         C   s5   y t  j |  ƒ Wn t k
 r0 t |  ƒ ‚ n Xd S(   sZ   
        Checks passwd database for username presence
        @param user: string
        N(   t   pwdt   getpwnamt   KeyErrorR   (   R   (    (    s*   /usr/lib/python2.7/site-packages/clsudo.pyR   š   s    c         C   s5   y t  j |  ƒ Wn t k
 r0 t |  ƒ ‚ n Xd S(   s_   
        Checks grp database for group_name presence
        @param group_name: string
        N(   t   grpt   getgrnamRJ   R
   (   R'   (    (    s*   /usr/lib/python2.7/site-packages/clsudo.pyR"   ¥   s    c         C   sb  t  t _ t  t _ t  t _ t  t _ t  t _ t  t _ t  t _ t  t _	 t
 j d |  ƒ } yàt t j ƒ } | j ƒ  j ƒ  t _ | j ƒ  x«t t t j ƒ ƒ D]”} d t j | k rÊ t t _ q¢ n  d t j | k rì t t _ q¢ n  d |  f t j | k rt t _ q¢ n  d |  f t j | k r>t t _	 q¢ n  d t j | k r| j t j | ƒ } | r¢ t t _ q¢ q¢ n  d t j | k rd t j | k rÈt j | j d	 d
 ƒ t j | <n  d t j | k rþt j | j d
 d ƒ t j | <n  t t _ q¢ n  d |  f t j | k r¢ t t _ q¢ q¢ q¢ WWn  t t f k
 r]t ƒ  ‚ n Xd S(   sQ   
        Reads file into list of strings
        @param filename: string
        s   Defaults:\s*%s\s*!requirettys   Cmnd_Alias LVECTL_CMDSs   Cmnd_Alias CAGEFS_CMDSs   %s ALL=NOPASSWD: LVECTL_CMDSs   %s ALL=NOPASSWD: CAGEFS_CMDSt
   requirettys   Cmnd_Alias SELECTOR_CMDSt   pinisets   /usr/bin/cl-selectors&   /usr/bin/cl-selector, /usr/bin/pinisett   lvepss7   /usr/bin/cl-selector, /usr/bin/piniset, /usr/sbin/lvepss   %s ALL=NOPASSWD: SELECTOR_CMDSN(   R.   R   R   R%   R   R   R   R   R   R    t   ret   compileR)   R*   R+   R,   R   R-   R;   R/   R1   t   searchR=   R2   R3   R   (   R   t   require_tty_patternt   iR5   t   pattern_match(    (    s*   /usr/lib/python2.7/site-packages/clsudo.pyR   °   sd    								
		
			
	c         C   sB  t  t _ t  t _ t  t _ t  t _ t  t _ t  t _ t  t _ t  t _	 d |  } d |  } t
 j d |  f ƒ } y©t t j ƒ } | j ƒ  j ƒ  t _ | j ƒ  xtt t t j ƒ ƒ D]]} d t j | k rMd t j | k rt j | j d d ƒ t j | <n  d t j | k r>t j | j d d	 ƒ t j | <n  t t _ q¹ n  d
 t j | k rot t _ q¹ n  d t j | k r‘t t _ q¹ n  t j | j | ƒ rô| j t j | ƒ } | rôt t _ t j | j | ƒ rñt t _ qñqôn  t j | j | ƒ r¹ t t _ q¹ q¹ WWn  t t f k
 r=t ƒ  ‚ n Xd S(   sS   
        Reads file into list of strings
        @param group_name: string
        s   %%%ss   Defaults:%%%ss1   %s\s*ALL=NOPASSWD:\s*LVECTL_CMDS,\s*SELECTOR_CMDSs   Cmnd_Alias SELECTOR_CMDSRN   s   /usr/bin/cl-selectors&   /usr/bin/cl-selector, /usr/bin/pinisetRO   s7   /usr/bin/cl-selector, /usr/bin/piniset, /usr/sbin/lvepss   Cmnd_Alias LVECTL_CMDSs   Cmnd_Alias CAGEFS_CMDSN(   R.   R   R   R%   R   R   R   R   R   R    RP   RQ   R)   R*   R+   R,   R   R-   R;   R/   R=   R1   t
   startswithRR   R2   R3   R   (   R'   t   group_prefixt   group_actiont   group_patternRT   R5   RU   (    (    s*   /usr/lib/python2.7/site-packages/clsudo.pyR#   ë   sV    								


				c          C   s  y“ t  j d t j d t j ƒ \ }  } t j |  d ƒ } | j d j t j	 ƒ d ƒ | j
 ƒ  t t B} t j | | ƒ t j | ƒ s’ t ‚ n  WnP t t f k
 rå y& t j j | ƒ rÎ t j | ƒ n  Wn n Xt ƒ  ‚ n Xy t j | t j ƒ Wn t k
 rt ƒ  ‚ n Xd S(   sX   
        Writes data to temporary file then checks it and rewrites sudoers file
        t   prefixt   dirt   ws   
N(   t   tempfilet   mkstempR   t   temp_prefixt   temp_dirt   ost   fdopent   writeR   R   R-   R    R   t   chmodt   _is_file_validR2   R3   t   patht   existst   unlinkR   t   renameR*   (   t   fdt	   temp_patht   fot   mask(    (    s*   /usr/lib/python2.7/site-packages/clsudo.pyR     s*    	

c      
   C   sh   d d d |  g } t  j | d t d ƒ d t  j d t  j d t ƒ} | j ƒ  } | j d	 k rd t St S(
   Ns   /usr/sbin/visudos   -cs   -ft   stdins	   /dev/nullt   stdoutt   stderrt	   close_fdsi    (	   t
   subprocesst   PopenR)   t   PIPEt   STDOUTR1   t   communicatet
   returncodeR.   (   t   filenamet   cmdt   rvt   rt(    (    s*   /usr/lib/python2.7/site-packages/clsudo.pyRe   :  s    			(   R   R	   t   __doc__R*   R`   R_   R   t   staticmethodR!   R(   R8   RG   R   R"   R   R#   R   Re   (    (    (    s*   /usr/lib/python2.7/site-packages/clsudo.pyR   +   s4   										9	2		(   Ra   RH   RK   RP   Rr   R]   t   statR    R   R   R   R
   R   R   R   R   R   R$   R&   t   objectR   (    (    (    s*   /usr/lib/python2.7/site-packages/clsudo.pyt   <module>   s"   