
    -_g                     D    d dl Z d dlmZ d dlmZmZmZ  G d dee      Zy)    N)glob)PluginIndependentPlugin	PluginOptc                   D    e Zd ZdZdZdZ edded      gZd Z	d	 Z
d
 Zy)SshzSecure shell servicessh)servicessecuritysystemidentity	userconfsTz5Changes whether module will collect user .ssh configs)defaultval_typedescc                     | j                  ddd       g d}| j                  |       | j                  |       | j                  d      r| j	                          y y )Nsshd_config
ssh_config)z/etc/ssh/sshd_config$z/etc/ssh/ssh_config$)z/etc/ssh/ssh_configz/etc/ssh/sshd_configz/etc/ssh/sshd_config.d/*r   )add_file_tagsadd_copy_specincluded_configs
get_optionuser_ssh_files_permissions)selfsshcfgss     8/usr/lib/python3/dist-packages/sos/report/plugins/ssh.pysetupz	Ssh.setup   s_    %2$0
 	
 	7#g& ??;'++- (    c                 .   	 |D cg c]  }t        |d       c}D cg c]  }|D ]  }|  }}}|D ]  }|j                  d      d   }t        | j                  |      dd      5 }|D ]v  }	t	        |	j                               dk(  s|	j                  d	      r1|	j                         j                  d
      sQ|	j                         }
| j                  |
d   |       x 	 ddd        yc c}w c c}}w # 1 sw Y   xY w# t        $ r Y yw xY w)z Include subconfig files T)	recursive/rUTF-8encodingr   #include   )tagsN)	r   splitopen	path_joinlen
startswithlowerr   	Exception)r   r   copyspecfilesfcfgfilessshcfgtagcfgfilelineconfargs              r   r   zSsh.included_configs3   s9   	 DK 7?DT2    H 
 # Ell3'+$..0##*, 	E/6 ' Etzz|,1T__S5I$::<229=&*jjlG ..wqz.DE	E 	EE	 	E 	E  		sJ   D C1D C69D )AC<=(C<&
D 1D <D	D 	DDc                    t        j                         }i }	 t        ddd      5 }|D ]  }|j                         dd \  }}|||<    	 ddd       h d	}|D ]n  }|j                  |v r1||j                     |v r | j                  d
|j                   d       B| j                  |j                  d      }	| j                  |	       p y# 1 sw Y   xY w# t        $ r | j                  d       Y yw xY w)z
        Iterate over .ssh folders in user homes to see their permissions.

        Bad permissions can prevent SSH from allowing access to given user.
        z/proc/mountsr#   r$   r%   r)      NzCouldn't read /proc/mounts>   nfsnfs4autofszSkipping capture in z  because it's a remote directoryz.ssh)
pwdgetpwallr,   r+   r1   
_log_errorpw_dir	_log_infor-   add_dir_listing)
r   
users_datafs_mount_infomounts_filer9   fs_file	fs_vstypenon_local_fsuserhome_dirs
             r   r   zSsh.user_ssh_files_permissionsK   s    \\^
	ncG< 7' 7D+/::<!+<(Wi-6M'*77 1 		+D{{m+!$++.,>.t{{m:; ~~dkk6:H  *		+7 7  	OO89	s(   C #C

C 
CC C32C3N)__name__
__module____qualname__
short_descplugin_nameprofilesr   stroption_listr   r   r    r   r   r   r      s<    'JK=H 	+tc4	6K.,0+r   r   )r@   r   sos.report.pluginsr   r   r   r   rV   r   r   <module>rX      s$      C CW+&# W+r   