ó
ÍÿŠTc           @   s˜   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 S(   iÿÿÿÿN(   t   encode_dict_if_needed(   t   ComponentConnectort   ComponentPublishert   remote(   t   UserManagement(   t   ManagerPlugin(   t   RemoteUserMonitorConnectort   UserManagerc           B   s³   e  Z d  Z d d 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 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
   _publisher(   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 |  |  j j |  j j ƒ |  _ |  j j	 ƒ  x' |  j
 D] } |  j j | |  j ƒ qW Wd S(   s   
        Schedule reactor events for generic L{Plugin} callbacks, user
        and group management operations, and resynchronization.
        N(   t   superR   t   registert	   _registryR   t   registryt   reactort   configR   t   startR   t   register_messaget   _message_dispatch(   R   R   t   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   stopR   (   R   (    (    sA   /usr/lib/python2.7/dist-packages/landscape/manager/usermanager.pyR&   /   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_usernames5   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.pyR9   M   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>U   s    (   R   R   R    R!   t   connectt   addCallbackt   _perform_operationt   _send_changes(   R   t   messageR9   t   result(    (   R   R=   sA   /usr/lib/python2.7/dist-packages/landscape/manager/usermanager.pyR$   E   s    c         C   s6   | d } |  j  | } t | ƒ } |  j | | | ƒ S(   Nt   type(   R   R    t   call_with_operation_result(   R   RD   RC   R%   t   message_method(    (    sA   /usr/lib/python2.7/dist-packages/landscape/manager/usermanager.pyRA   X   s
    
c         C   s   |  j  j | d ƒ S(   Ns   operation-id(   R8   R9   (   R   RD   RC   (    (    sA   /usr/lib/python2.7/dist-packages/landscape/manager/usermanager.pyRB   _   s    c      
   C   sE   |  j  j | d | d | d | d | d | d | d | d ƒ S(	   s   Run an C{add-user} operation.t   usernamet   namet   passwords   require-password-resets   primary-group-namet   locations   work-numbers   home-number(   R	   t   add_user(   R   RC   (    (    sA   /usr/lib/python2.7/dist-packages/landscape/manager/usermanager.pyR   b   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.RH   RJ   RI   RK   t   work_numbers   work-numbert   home_numbers   home-numbert   primary_group_names   primary-group-name(   R	   t   set_user_details(   R   RC   (    (    sA   /usr/lib/python2.7/dist-packages/landscape/manager/usermanager.pyR   l   s    	

c         C   s   |  j  j | d ƒ S(   s   Run a C{lock-user} operation.RH   (   R	   t	   lock_user(   R   RC   (    (    sA   /usr/lib/python2.7/dist-packages/landscape/manager/usermanager.pyR   u   s    c         C   s   |  j  j | d ƒ S(   s    Run an C{unlock-user} operation.RH   (   R	   t   unlock_user(   R   RC   (    (    sA   /usr/lib/python2.7/dist-packages/landscape/manager/usermanager.pyR   y   s    c         C   s   |  j  j | d | d ƒ S(   s   Run a C{remove-user} operation.RH   s   delete-home(   R	   t   remove_user(   R   RC   (    (    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   RC   (    (    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.RT   s   new-name(   R	   t   set_group_details(   R   RC   (    (    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.RH   RT   (   R	   t   add_group_member(   R   RC   (    (    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.RH   RT   (   R	   t   remove_group_member(   R   RC   (    (    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.RT   (   R	   t   remove_group(   R   RC   (    (    sA   /usr/lib/python2.7/dist-packages/landscape/manager/usermanager.pyR   •   s    N(   t   __name__t
   __module__RI   R   R   R   R&   R   R7   R$   RA   RB   R   R   R   R   R   R   R   R   R   R   (    (    (    sA   /usr/lib/python2.7/dist-packages/landscape/manager/usermanager.pyR      s$   						
									t   RemoteUserManagerConnectorc           B   s   e  Z e Z RS(    (   RZ   R[   R   t	   component(    (    (    sA   /usr/lib/python2.7/dist-packages/landscape/manager/usermanager.pyR\   š   s   (   R1   t   landscape.lib.encodingR    t   landscape.ampR   R   R   t   landscape.user.managementR   t   landscape.manager.pluginR   t   landscape.monitor.usermonitorR   R   R\   (    (    (    sA   /usr/lib/python2.7/dist-packages/landscape/manager/usermanager.pyt   <module>   s   