Ë
    ojh(  ã                   ó^  — d Z ddlZddlZddlZddlZddlmZ ddlm	Z	 ddl
mZ ddlmZ ddlmZmZ ddlmZ d	Zej(                  j+                  d
«      ZdZdZ eej2                  «      Z ee¬«      Z G d„ d«      Zd„ Z ed«      Zd„ Z  G d„ d«      Z!d„ Z"d„ Z#da$d„ Z%d„ Z&d„ Z'd„ Z(d„ Z)y)z4
Implementation module for the I{mailmail} command.
é    N)ÚConfigParser)ÚStringIO)Úversion)Úreactor)ÚLoggerÚtextFileLogObserver)Úsmtpz/etc/mailmailz~/.twisted/mailmailz	127.0.0.1z�Subject: Failed Message Delivery

  Message delivery failed.  The following occurred:

  %s
--
The Twisted sendmail application.
)Úobserverc                   ó   — e Zd ZdZy)ÚOptionsat  
    Store the values of the parsed command-line options to the I{mailmail}
    script.

    @type to: L{list} of L{str}
    @ivar to: The addresses to which to deliver this message.

    @type sender: L{str}
    @ivar sender: The address from which this message is being sent.

    @type body: C{file}
    @ivar body: The object from which the message is to be read.
    N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__© ó    ú?/usr/lib/python3/dist-packages/twisted/mail/scripts/mailmail.pyr   r   (   s   „ òr   r   c                  ór   — 	 t        j                  «       S # t        $ r t        j                  «       cY S w xY w©N)ÚosÚgetloginÚBaseExceptionÚgetpassÚgetuserr   r   r   r   r   8   s/   € ð!Ü�{‰{‹}ÐøÜò !Ü�‰Ó Ò ð!ús   ‚ –6µ6zUnsupported option.c                 ód  — t        «       }| D �cg c]  }|j                  d«      rŒ|‘Œ c}|_        t        «       |_        d| v rt        dt        «       t        «       ‚d| v rt        ‚d| v rt        ‚d| v rA| | j                  d«      dz      |_        |j                  j                  |j                  «       d| v sd	| v rt        ‚d
| v rd|_        nd|_        d| v rd|_        nd|_        d| v sd| v rd|_        nd|_        d| v rt        ‚d| v r d|_        |j                  |_        g |_        nd|_        g |_        g g g g g dœ}t!        «       }	 d}t"        j$                  j'                  «       }|j)                  «       snÛ|j+                  dd«      }|d   j-                  «       }|j                  rK|dv rG|j                  j/                  t0        j2                  j5                  |d   «      d   g«       |dk(  r2d}n/|dk(  r*t0        j2                  j5                  |d   «      d   |_        ||v r||   j7                  |d   «       |r|j9                  |«       �Œ|d   s|j9                  d|j                  › d�«       |d   sP|j                  st        d«      ‚|j9                  dj;                  dj=                  |j                  «      «      «       |d   s'|j9                  dt?        j@                  «       › d�«       |j9                  |«       |j                  r-|j                  D ]  }		 |j                  j                  |	«       Œ  |jE                  dd«       t!        |jG                  «       t"        j$                  jI                  «       z   «      |_%        |S c c}w # tB        $ r Y Œ‚w xY w) Nú-z	--versionzmailmail version:z-bpz-bsz-Fé   z-iz-oiz-odbTFz-odfz-oepz-epz-omz-t)ÚfromÚtoÚccÚbccÚdatez: r   )r   r    r!   r!   r   zFrom: z
r   zNo recipients specified.zTo: {}
z, r"   zDate: )&r   Ú
startswithr   r   ÚsenderÚprintr   Ú
SystemExitÚ_unsupportedOptionÚindexÚremoveÚ
backgroundÚprintErrorsÚrecipientsFromHeadersÚexcludeAddressesÚexludeAddressesr   ÚsysÚstdinÚreadlineÚstripÚsplitÚlowerÚextendÚemailÚutilsÚ	parseaddrÚappendÚwriteÚformatÚjoinr	   Ú
rfc822dater   ÚseekÚgetvalueÚreadÚbody)
ÚargvÚoÚeÚrequiredHeadersÚbufferr:   ÚlineÚhdrsÚhdrÚas
             r   ÚparseOptionsrK   B   sb  € Ü‹	€AØÖ5�! 1§<¡<°Õ#4ŠAÒ5€A„DÜ‹z€A„Hð �dÑÜÐ!¤7Ô+Ü‹lÐð ��}Ü Ð ð ��}Ü Ð ð ˆt�|Ø˜Ÿ
™
 4Ó(¨1Ñ,Ñ-ˆŒØ	�‰�‰�A—H‘HÔð 	�‰˜% 4™-Ü Ð ð ��~Øˆ�àˆŒð ��~Øˆ�àˆŒð 	�$‰˜E T™MØˆ�àˆŒð ��}Ü Ð ð
 ˆt�|Ø"&ˆÔØŸT™TˆÔØˆ�à"'ˆÔØˆÔð ØØØØñ€Oô ‹Z€FØ
ØˆÜ�y‰y×!Ñ!Ó#ˆØ�z‰zŒ|Øà�z‰z˜$ Ó"ˆà�1‰g�m‰m‹oˆØ×"Ò" sÐ.AÑ'AØ�D‰D�K‰KœŸ™×.Ñ.¨t°A©wÓ7¸Ñ:Ð;Ô<Ø�eŠ|Ø‘Ø�FŠ]Ü—{‘{×,Ñ,¨T°!©WÓ5°aÑ8ˆAŒHà�/Ñ!Ø˜CÑ ×'Ñ'¨¨Q©Ô0áØ�L‰L˜Ôñ) ð, ˜6Ò"Ø�‰�v˜aŸh™h˜Z tÐ,Ô-Ø˜4Ò Ø�tŠtÜÐ7Ó8Ð8Ø�‰�\×(Ñ(¨¯©°1·4±4«Ó9Ô:Ø˜6Ò"Ø�‰�vœdŸo™oÓ/Ð0°Ð5Ô6à
‡L�L�Ôà×ÒØ×#Ñ#ò 	ˆAðØ—‘—‘˜A•ð	ð ‡K�K��1ÔÜ�f—o‘oÓ'¬#¯)©)¯.©.Ó*:Ñ:Ó;€A„FØ€Hùòk 6øô` !ò Ùðús   �N¦NÌ0N#Î#	N/Î.N/c                   ó   — e Zd ZdZd„ Zy)ÚConfigurationaí  

    @ivar allowUIDs: A list of UIDs which are allowed to send mail.
    @ivar allowGIDs: A list of GIDs which are allowed to send mail.
    @ivar denyUIDs: A list of UIDs which are not allowed to send mail.
    @ivar denyGIDs: A list of GIDs which are not allowed to send mail.

    @type defaultAccess: L{bool}
    @ivar defaultAccess: L{True} if access will be allowed when no other access
    control rule matches or L{False} if it will be denied in that case.

    @ivar useraccess: Either C{'allow'} to check C{allowUID} first
    or C{'deny'} to check C{denyUID} first.

    @ivar groupaccess: Either C{'allow'} to check C{allowGID} first or
    C{'deny'} to check C{denyGID} first.

    @ivar identities: A L{dict} mapping hostnames to credentials to use when
    sending mail to that host.

    @ivar smarthost: L{None} or a hostname through which all outgoing mail will
    be sent.

    @ivar domain: L{None} or the hostname with which to identify ourselves when
    connecting to an MTA.
    c                 ó�   — g | _         g | _        g | _        g | _        d| _        d| _        i | _        d | _        d | _        d| _	        y )NÚdenyT)
Ú	allowUIDsÚdenyUIDsÚ	allowGIDsÚdenyGIDsÚ
useraccessÚgroupaccessÚ
identitiesÚ	smarthostÚdomainÚdefaultAccess)Úselfs    r   Ú__init__zConfiguration.__init__Ø   sJ   € ØˆŒØˆŒØˆŒØˆŒØ ˆŒØ!ˆÔàˆŒØˆŒØˆŒà!ˆÕr   N)r   r   r   r   r[   r   r   r   rM   rM   ¼   s   „ ñó6"r   rM   c           
      óh  — t        «       }t        j                  | t        j                  «      s|S t	        «       }|j                  | «       |j                  }|j                  }|j                  }|j                  }d||fd||ffD �]  \  }}}	|j                  |«      sŒd|fd|	ffD ]n  \  }
}|j                  ||
«      sŒ|j                  ||
«      sŒ,|j                  ||
«      j                  d«      D ]  }	 t        |«      }|j                  |«       Œ! Œp |j                  |d	«      }|j                  d«      D �cg c]  }|j)                  «       ‘Œ c}D �cg c]  }|j                  «       ‘Œ }}|d   dk(  rt+        ||d«       �Œt+        ||d«       �Œ |j                  d
«      r`|j-                  d
«      D ]L  \  }}|j                  dd«      }t/        |«      dk7  rt"        j%                  d|¬«       Œ>||j0                  |<   ŒN |j                  d«      rR|j                  dd«      r|j                  dd«      |_        |j                  dd«      r|j                  dd«      |_        |S # t         $ r. t"        j%                  d|d   j'                  «       ||¬«       Y �Œ±w xY wc c}w c c}w )NrT   rU   ÚallowrO   ú,z6Illegal {prefix}ID in [{section}] section: {sectionID}r   )ÚprefixÚsectionÚ	sectionIDÚorderÚidentityú:r   é   z.Illegal entry in [identity] section: {section})r`   Ú	addressesrW   Údefault_domain)rM   r   ÚaccessÚR_OKr   r@   rP   rQ   rR   rS   Úhas_sectionÚ
has_optionÚgetr3   Úintr9   Ú
ValueErrorÚ_logÚerrorÚupperr4   ÚsetattrÚitemsÚlenrV   rW   rX   )ÚpathÚcÚpÚauÚduÚagÚdgr`   rJ   ÚdÚmodeÚLra   rb   ÚsÚhostÚupÚpartss                     r   Ú
loadConfigrƒ   ç   st  € ô  	‹€Aä�9‰9�Tœ2Ÿ7™7Ô#Øˆä‹€AØ‡F�Fˆ4„Là	
�‰€BØ	
�‰€BØ	
�‰€BØ	
�‰€BØ'¨¨RÐ0°=À"ÀbÐ2IÐJó ,‰ˆ��AØ�=‰=˜Õ!Ø$ a˜L¨6°1¨+Ð6ò 0‘��aØ—<‘< ¨Õ.°1·5±5¸À$Õ3GØ%&§U¡U¨7°DÓ%9×%?Ñ%?ÀÓ%Dò 0˜	ð0Ü(+¨I«˜Ið ŸH™H YÕ/ñ0ð0ð —E‘E˜' 7Ó+ˆEØ<A¿K¹KÈÓ<LÖ(M°q¨¯©­Ò(MÖN 1�Q—W‘W•YÐNˆEÐNØ�Q‰x˜7Ò"Ü˜˜7 GÖ,ä˜˜7 FÖ+ð-,ð0 	‡}�}�ZÔ ØŸ™ 
Ó+ò 	'‰HˆD�"Ø—H‘H˜S !Ó$ˆEÜ�5‹z˜QŠÜ—
‘
ÐKÐUW�
ÔXØØ!&ˆA�L‰L˜Òð	'ð 	‡}�}�[Ô!Ø�<‰<˜ [Ô1ØŸ%™% ¨[Ó9ˆAŒKØ�<‰<˜Ð%5Ô6Ø—u‘u˜[Ð*:Ó;ˆAŒHà€Høô?  *ò Ü ŸJ™Jð!Cà'.¨q¡z×'7Ñ'7Ó'9Ø(/Ø*3ð '÷ ðüò )NùÒNs   Ã9I0Ä>J*ÅJ/É03J'	Ê&J'	c                 ó,   — t        j                  «        y r   ©r   Ústop)Úresults    r   Úsuccessrˆ   ,  s   € Ü‡L�L…Nr   c                 ó0   — t        j                  «        | ay r   )r   r†   Úfailed)Úfs    r   ÚfailurerŒ   3  s   € ä‡L�L„NØ�Fr   c                 óÌ   — t        j                  | |j                  |j                  |j                  «      }|j                  t        t        «       t        j                  «        y r   )
r	   Úsendmailr$   r   rA   ÚaddCallbacksrˆ   rŒ   r   Úrun)r€   ÚoptionsÚidentr|   s       r   rŽ   rŽ   9  s9   € Ü�‰�d˜GŸN™N¨G¯J©J¸¿¹ÓE€AØ‡N�N”7œGÔ$Ü‡K�K…Mr   c                 ój  — |j                   g}dj                  t        j                  d   t        j
                  j                  d«      «      }t        «       }| j                  |¬«       t        t        |j                  «       z  «      }t	        j                  d|||«      }|j                  d„ «       y )Nz2"Internally Generated Message ({})"<postmaster@{}>r   Úascii©ÚfileÚ	localhostc                 ó*   — t        j                  «       S r   r…   )Ú_s    r   ú<lambda>zsenderror.<locals>.<lambda>H  s   € œŸ™›€ r   )r$   r;   r/   rB   r	   ÚDNSNAMEÚdecoder   ÚprintTracebackÚ	ERROR_FMTr?   rŽ   ÚaddBoth)rŒ   r‘   Ú	recipientr$   rp   rA   r|   s          r   Ú	senderrorr¡   ?  s‹   € Ø—‘Ð €IØA×HÑHÜ�‰�‰”T—\‘\×(Ñ(¨Ó1ó€Fô ‹J€EØ×Ñ ÐÔ&Ü”I §¡Ó 0Ñ0Ó1€DÜ�‰�k 6¨9°dÓ;€AØ‡I�IÑ&Õ'r   c                 ó²  — t        j                  «       }t        j                  «       }| j                  dk(  r|| j                  v ry|| j
                  v ry|| j
                  v ry|| j                  v ry| j                  dk(  r+|| j                  v ry|| j                  v ry| j                   S || j                  v ry|| j                  v ry| j                   S )NrO   TF)
r   ÚgetuidÚgetgidrT   rQ   rP   rU   rS   rR   rY   )ÚconfÚuidÚgids      r   rO   rO   K  sÌ   € Ü
�)‰)‹+€CÜ
�)‰)‹+€Cà‡�˜&Ò Ø�$—-‘-ÑØØ�$—.‘.Ñ Øà�$—.‘.Ñ ØØ�$—-‘-ÑØà×Ñ˜6Ò!Ø�$—-‘-ÑØØ�$—.‘.Ñ Øð ×!Ñ!Ð!Ð!ð �$—.‘.Ñ ØØ�$—-‘-ÑØà×!Ñ!Ð!Ð!r   c                  óÂ  — t        t        j                  dd  «      } t        t        «      }t        t
        «      }t        |«      st        |«      rt        j                  d«       y |j                  xs |j                  xs t        }|j                  j                  «       }|j                  |j                  «       |j                  r|j                  t        _        n!|j                  r|j                  t        _        t#        || |«       t$        rL| j&                  r/t$        j)                  t        j*                  ¬«       t-        d«      ‚t/        t$        | «       y y )Nr   zPermission deniedr•   )rK   r/   rB   rƒ   Ú
GLOBAL_CFGÚ	LOCAL_CFGrO   ro   rp   rW   Ú	SMARTHOSTrV   ÚcopyÚupdaterX   r	   r›   rŽ   rŠ   r+   r�   Ústderrr&   r¡   )rC   ÚgConfÚlConfr€   r’   s        r   r�   r�   h  sì   € Ü”S—X‘X˜a˜b�\Ó"€AÜ”zÓ"€EÜ”yÓ!€EäˆE„{”d˜5”kÜ�
‰
Ð&Ô'Øà�?‰?Ò:˜eŸo™oÒ:´€Dà×Ñ×!Ñ!Ó#€EØ	‡L�L�×!Ñ!Ô"à‡|‚|Ø—|‘|Œ�Ø	�ŠØ—|‘|ŒŒäˆT�1�eÔåØ�=Š=Ü×!Ñ!¤s§z¡zÐ!Ô2Ü˜Q“-Ðä”f˜aÕ ð r   )*r   Úemail.utilsr6   r   r   r/   Úconfigparserr   Úior   Útwisted.copyrightr   Útwisted.internetr   Útwisted.loggerr   r   Útwisted.mailr	   r©   ru   Ú
expanduserrª   r«   rž   r®   Ú_logObserverro   r   r   r&   r'   rK   rM   rƒ   rˆ   rŠ   rŒ   rŽ   r¡   rO   r�   r   r   r   ú<module>rº      sÅ   ðñ
ó
 Û Û 	Û 
Ý %Ý å %Ý $ß 6Ý à€
Ø�G‰G×ÑÐ4Ó5€	Ø€	ð€	ñ # 3§:¡:Ó.€Ù�|Ô$€÷ñ ò !ñ  Ð 5Ó6Ð òw÷t("ñ ("òVBòJð 
€òòò	(ò"ó:!r   