U
    -Ø_gI  ã                   @   sZ   d dl Z d dlmZmZmZmZ G dd„ deƒZG dd„ deeƒZG dd„ deeeƒZdS )	é    N)ÚPluginÚRedHatPluginÚDebianPluginÚUbuntuPluginc                   @   s4   e Zd ZdZdZdZdZdd„ Zdd„ Zd	d
„ Z	dS )ÚPostfixzPostfix smtp serverÚpostfix)ZmailÚservices©r   c                 C   s²   ddddddddd	d
dddddddg}g }znt |  d¡dddP}| ¡ D ]@}| d¡rZqJ| d¡}|d  ¡ |krJ| |d  ¡ d ¡ qJW 5 Q R X W n tk
r¬   Y nX |S )zi list of attributes defining a location of a SSL key file
        we must forbid from collection
        Zlmtp_tls_dkey_fileZlmtp_tls_eckey_fileZlmtp_tls_key_fileZsmtp_tls_dkey_fileZsmtp_tls_eckey_fileZsmtp_tls_key_fileZsmtpd_tls_dkey_fileZsmtpd_tls_eckey_fileZsmtpd_tls_key_fileZ"tls_legacy_public_key_fingerprintsZtlsproxy_tls_dkey_fileZtlsproxy_tls_eckey_fileZtlsproxy_tls_key_fileZsmtpd_tls_dh1024_param_fileZsmtpd_tls_dh512_param_fileZtlsproxy_tls_dh1024_param_fileZtlsproxy_tls_dh512_param_fileú/etc/postfix/main.cfÚrúUTF-8©Úencodingú#ú=r   é   )ÚopenÚ	path_joinÚ	readlinesÚ
startswithÚsplitÚstripÚappendÚ	Exception)ÚselfÚforbid_attributesÚfpathsÚcffileÚlineZwords© r   ú</usr/lib/python3/dist-packages/sos/report/plugins/postfix.pyÚforbidden_ssl_keys_files   sB    ïÿ

&z Postfix.forbidden_ssl_keys_filesc              
   C   s  d}g }d}t  d¡}zªt|  d¡dddŒ}| ¡ D ]|}t  dd	|¡}| |¡}|d
kr\q6| d¡ ¡ }||kr6| d¡ ¡ }	t	|	ƒdkrŽq6|	 
|¡r¨|	t	|ƒd
… }	| |	¡ q6W 5 Q R X W n< tk
rü }
 zd|
jd › }|  |¡ W 5 d
}
~
X Y nX |S )z% Get the list of password to exclude )Zlmtp_sasl_password_mapsZsmtp_sasl_password_mapsZpostscreen_dnsbl_reply_mapZsmtp_sasl_auth_cache_namezhash:z
^(.*)=(.*)r
   r   r   r   z#.*Ú Nr   é   r   zError parsing main.cf: )ÚreÚcompiler   r   r   ÚsubÚmatchÚgroupr   Úlenr   r   r   ÚargsZ
_log_error)r   r   r   ÚprefixZoption_formatr   r   ZoptionZ	attributeÚfilepathÚerrÚmsgr   r   r    Úforbidden_password_files;   s4    
ÿ

z Postfix.forbidden_password_filesc                 C   sJ   |   dg¡ |  ddg¡ |  dddg¡ |  |  ¡ ¡ |  |  ¡ ¡ d S )Nz/etc/postfix/ZpostconfZmailqz/etc/postfix/*.keyz/etc/postfix/*.crtz/etc/postfix/ssl/)Úadd_copy_specZadd_cmd_outputZadd_forbidden_pathr!   r/   ©r   r   r   r    Úsetupa   s    ÿþýzPostfix.setupN)
Ú__name__Ú
__module__Ú__qualname__Z
short_descZplugin_nameZprofilesÚpackagesr!   r/   r2   r   r   r   r    r      s   &&r   c                       s$   e Zd ZdZdZ‡ fdd„Z‡  ZS )ÚRedHatPostfix)z/etc/rc.d/init.d/postfixr	   c                    s   t ƒ  ¡  |  d¡ d S )Nz	/etc/mail)Úsuperr2   r0   r1   ©Ú	__class__r   r    r2   x   s    
zRedHatPostfix.setup)r3   r4   r5   Úfilesr6   r2   Ú__classcell__r   r   r9   r    r7   s   s   r7   c                   @   s   e Zd ZdZdS )ÚDebianPostfixr	   N)r3   r4   r5   r6   r   r   r   r    r=   }   s   r=   )	r$   Zsos.report.pluginsr   r   r   r   r   r7   r=   r   r   r   r    Ú<module>	   s   f
