ó
½-'Nc           @   sĉ   d  d l  Z  d  d l Z d  d l m Z d  d l m Z m Z m Z d  d l m	 Z	 d  d l
 m Z d  d l m Z d e f d     YZ d	 e f d
     YZ d e f d     YZ d e f d     YZ d e f d     YZ d S(   i˙˙˙˙N(   t   RemoteObject(   t   ComponentProtocolt   ComponentProtocolFactoryt   RemoteComponentConnector(   t   UserManagement(   t   ManagerPlugin(   t   RemoteUserMonitorConnectort   UserManagerc           B   s­   e  Z d  Z d d 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 RS(   t   usermanagers   /etc/shadowc         C   s   | p t    |  _ | |  _ i
 |  j d 6|  j d 6|  j d 6|  j d 6|  j d 6|  j d 6|  j	 d 6|  j
 d 6|  j d	 6|  j d
 6|  _ d  |  _ d  S(   Ns   add-users	   edit-users	   lock-users   unlock-users   remove-users	   add-groups
   edit-groups   remove-groups   add-group-members   remove-group-member(   R   t   _managementt   _shadow_filet	   _add_usert
   _edit_usert
   _lock_usert   _unlock_usert   _remove_usert
   _add_groupt   _edit_groupt   _remove_groupt   _add_group_membert   _remove_group_membert   _message_typest   Nonet   _port(   t   selft
   managementt   shadow_file(    (    sA   /usr/lib/python2.7/dist-packages/landscape/manager/usermanager.pyt   __init__   s    	







c         C   s   t  t |   j |  | |  _ t d |   } t j j |  j j	 j
 |  j d  } |  j j j | |  |  _ x' |  j D] } |  j j | |  j  qx Wd S(   s   
        Schedule reactor events for generic L{Plugin} callbacks, user
        and group management operations, and resynchronization.
        t   objects   .sockN(   t   superR   t   registert	   _registryt   UserManagerProtocolFactoryt   ost   patht   joint   registryt   configt   sockets_patht   namet   reactort   listen_unixR   R   t   register_messaget   _message_dispatch(   R   R$   t   factoryt   sockett   message_type(    (    sA   /usr/lib/python2.7/dist-packages/landscape/manager/usermanager.pyR   !   s    	c         C   s&   |  j  r" |  j  j   d |  _  n  d S(   s,   Stop listening for incoming AMP connections.N(   R   t   stopListeningR   (   R   (    (    sA   /usr/lib/python2.7/dist-packages/landscape/manager/usermanager.pyt   stop2   s    	c         C   sµ   g  } |  j  rħ yx t |  j  d  } x_ | D]W } | j d  } t |  d k r+ | d j d  r | j | d j    q q+ q+ WWqħ t k
 r­ } t j	 d |  qħ Xn  | S(   s7   Return a list of usernames with locked system accounts.t   rt   :i   t   !i    s   Error reading shadow file. %s(
   R
   t   opent   splitt   lent
   startswitht   appendt   stript   IOErrort   loggingt   error(   R   t   locked_usersR   t   linet   partst   e(    (    sA   /usr/lib/python2.7/dist-packages/landscape/manager/usermanager.pyt   get_locked_usernames8   s    	%c            s   t    j j   j j     f d   }  j   } | j |  | j   j |  | j   j |  | j  f d    | S(   s   Dispatch the given user-change request to the correct handler.

        @param message: The request we got from the server.
        c            s   |    _  |  j   S(   N(   t   _user_monitort   detect_changes(   t   user_monitor(   R   (    sA   /usr/lib/python2.7/dist-packages/landscape/manager/usermanager.pyRC   O   s    	c            s
     j    S(   N(   t
   disconnect(   t   x(   t   user_monitor_connector(    sA   /usr/lib/python2.7/dist-packages/landscape/manager/usermanager.pyt   <lambda>W   s    (   R   R$   R(   R%   t   connectt   addCallbackt   _perform_operationt   _send_changes(   R   t   messageRC   t   result(    (   R   RG   sA   /usr/lib/python2.7/dist-packages/landscape/manager/usermanager.pyR+   G   s    c         C   s*   | d } |  j  | } |  j | | |  S(   Nt   type(   R   t   call_with_operation_result(   R   RN   RM   R.   t   message_method(    (    sA   /usr/lib/python2.7/dist-packages/landscape/manager/usermanager.pyRK   Z   s    
c         C   s   |  j  j | d  S(   Ns   operation-id(   RB   RC   (   R   RN   RM   (    (    sA   /usr/lib/python2.7/dist-packages/landscape/manager/usermanager.pyRL   `   s    c      
   C   sE   |  j  j | d | d | d | d | d | d | d | d  S(	   s   Run an C{add-user} operation.t   usernameR'   t   passwords   require-password-resets   primary-group-namet   locations   work-numbers   home-number(   R	   t   add_user(   R   RM   (    (    sA   /usr/lib/python2.7/dist-packages/landscape/manager/usermanager.pyR   c   s    c         C   sP   |  j  j | d d | d d | d d | d d | d d | d d	 | d
 S(   s   Run an C{edit-user} operation.RR   RS   R'   RT   t   work_numbers   work-numbert   home_numbers   home-numbert   primary_group_names   primary-group-name(   R	   t   set_user_details(   R   RM   (    (    sA   /usr/lib/python2.7/dist-packages/landscape/manager/usermanager.pyR   m   s    	

c         C   s   |  j  j | d  S(   s   Run a C{lock-user} operation.RR   (   R	   t	   lock_user(   R   RM   (    (    sA   /usr/lib/python2.7/dist-packages/landscape/manager/usermanager.pyR   v   s    c         C   s   |  j  j | d  S(   s    Run an C{unlock-user} operation.RR   (   R	   t   unlock_user(   R   RM   (    (    sA   /usr/lib/python2.7/dist-packages/landscape/manager/usermanager.pyR   z   s    c         C   s   |  j  j | d | d  S(   s   Run a C{remove-user} operation.RR   s   delete-home(   R	   t   remove_user(   R   RM   (    (    sA   /usr/lib/python2.7/dist-packages/landscape/manager/usermanager.pyR   ~   s    c         C   s   |  j  j | d  S(   s   Run an C{add-group} operation.t	   groupname(   R	   t	   add_group(   R   RM   (    (    sA   /usr/lib/python2.7/dist-packages/landscape/manager/usermanager.pyR      s    c         C   s   |  j  j | d | d  S(   s   Run an C{edit-group} operation.R]   s   new-name(   R	   t   set_group_details(   R   RM   (    (    sA   /usr/lib/python2.7/dist-packages/landscape/manager/usermanager.pyR      s    c         C   s   |  j  j | d | d  S(   s%   Run an C{add-group-member} operation.RR   R]   (   R	   t   add_group_member(   R   RM   (    (    sA   /usr/lib/python2.7/dist-packages/landscape/manager/usermanager.pyR      s    c         C   s   |  j  j | d | d  S(   s'   Run a C{remove-group-member} operation.RR   R]   (   R	   t   remove_group_member(   R   RM   (    (    sA   /usr/lib/python2.7/dist-packages/landscape/manager/usermanager.pyR      s    c         C   s   |  j  j | d  S(   s!   Run an C{remove-group} operation.R]   (   R	   t   remove_group(   R   RM   (    (    sA   /usr/lib/python2.7/dist-packages/landscape/manager/usermanager.pyR      s    N(   t   __name__t
   __module__R'   R   R   R   R0   RA   R+   RK   RL   R   R   R   R   R   R   R   R   R   R   (    (    (    sA   /usr/lib/python2.7/dist-packages/landscape/manager/usermanager.pyR      s$   							
									t   UserManagerProtocolc           B   s   e  Z d  Z d g Z RS(   sD   L{AMP}-based protocol for calling L{UserManager}'s methods remotely.RA   (   Rc   Rd   t   __doc__t   methods(    (    (    sA   /usr/lib/python2.7/dist-packages/landscape/manager/usermanager.pyRe      s   R    c           B   s   e  Z e Z RS(    (   Rc   Rd   Re   t   protocol(    (    (    sA   /usr/lib/python2.7/dist-packages/landscape/manager/usermanager.pyR    Ħ   s   t   RemoteUserManagerc           B   s   e  Z d  Z RS(   s"   A connected remote L{UserManager}.(   Rc   Rd   Rf   (    (    (    sA   /usr/lib/python2.7/dist-packages/landscape/manager/usermanager.pyRi   Ĥ   s   t   RemoteUserManagerConnectorc           B   s   e  Z e Z e Z e Z RS(    (   Rc   Rd   R   R,   Ri   t   remoteR   t	   component(    (    (    sA   /usr/lib/python2.7/dist-packages/landscape/manager/usermanager.pyRj   Ş   s   (   R!   R;   t   landscape.lib.ampR    t   landscape.ampR   R   R   t   landscape.user.managementR   t   landscape.manager.pluginR   t   landscape.monitor.usermonitorR   R   Re   R    Ri   Rj   (    (    (    sA   /usr/lib/python2.7/dist-packages/landscape/manager/usermanager.pyt   <module>   s   