o
    O6ufI  ã                   @   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)ÚmailÚservices©r   c                 C   sª   g d¢}g }zDt |  d¡ddd��/}| ¡ D ] }| d¡rq| d¡}|d  ¡ |v r6| |d	  ¡ d ¡ qW d
  ƒ W |S 1 sCw   Y  W |S  tyT   Y |S w )zi list of attributes defining a location of a SSL key file
        we must forbid from collection
        )Úlmtp_tls_dkey_fileÚlmtp_tls_eckey_fileÚlmtp_tls_key_fileÚsmtp_tls_dkey_fileÚsmtp_tls_eckey_fileÚsmtp_tls_key_fileÚsmtpd_tls_dkey_fileÚsmtpd_tls_eckey_fileÚsmtpd_tls_key_fileÚ"tls_legacy_public_key_fingerprintsÚtlsproxy_tls_dkey_fileÚtlsproxy_tls_eckey_fileÚtlsproxy_tls_key_fileÚsmtpd_tls_dh1024_param_fileÚsmtpd_tls_dh512_param_fileÚtlsproxy_tls_dh1024_param_fileÚtlsproxy_tls_dh512_param_fileú/etc/postfix/main.cfÚrúUTF-8©Úencodingú#ú=r   é   N)ÚopenÚ	path_joinÚ	readlinesÚ
startswithÚsplitÚstripÚappendÚ	Exception)ÚselfÚforbid_attributesÚfpathsÚcffileÚlineÚwords© r2   ú</usr/lib/python3/dist-packages/sos/report/plugins/postfix.pyÚforbidden_ssl_keys_files   s.   ÿ

€úþõþþz Postfix.forbidden_ssl_keys_filesc              
   C   s  d}g }d}t  d¡}zbt|  d¡ddd��M}| ¡ D ]>}t  dd	|¡}| |¡}|d
u r.q| d¡ ¡ }||v rY| d¡ ¡ }	t	|	ƒdkrGq|	 
|¡rT|	t	|ƒd
… }	| |	¡ qW d
  ƒ W |S 1 sfw   Y  W |S  ty� }
 zd|
jd › �}|  |¡ W Y d
}
~
|S d
}
~
ww )z% Get the list of password to exclude )Úlmtp_sasl_password_mapsÚsmtp_sasl_password_mapsÚpostscreen_dnsbl_reply_mapÚ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+   ÚargsÚ
_log_error)r,   r-   r.   ÚprefixÚoption_formatr/   r0   ÚoptionÚ	attributeÚfilepathÚerrÚmsgr2   r2   r3   Úforbidden_password_files;   sD   
ÿ


€ïþèü€üz Postfix.forbidden_password_filesc                 C   sH   |   dg¡ |  ddg¡ |  g d¢¡ |  |  ¡ ¡ |  |  ¡ ¡ d S )Nz/etc/postfix/ÚpostconfÚmailq)z/etc/postfix/*.keyz/etc/postfix/*.crtz/etc/postfix/ssl/)Úadd_copy_specÚadd_cmd_outputÚadd_forbidden_pathr4   rJ   ©r,   r2   r2   r3   Úsetupa   s   ÿþzPostfix.setupN)
Ú__name__Ú
__module__Ú__qualname__Ú
short_descÚplugin_nameÚprofilesÚpackagesr4   rJ   rQ   r2   r2   r2   r3   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)ÚsuperrQ   rM   rP   ©Ú	__class__r2   r3   rQ   x   s   
zRedHatPostfix.setup)rR   rS   rT   ÚfilesrX   rQ   Ú__classcell__r2   r2   r[   r3   rY   s   s    rY   c                   @   s   e Zd ZdZdS )ÚDebianPostfixr
   N)rR   rS   rT   rX   r2   r2   r2   r3   r_   }   s    r_   )	r;   Úsos.report.pluginsr   r   r   r   r   rY   r_   r2   r2   r2   r3   Ú<module>   s
   f
