
    \dn(                     r   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                            d
          ZdZdZ eej                  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)dS )z4
Implementation module for the I{mailmail} command.
    N)ConfigParser)StringIO)version)reactor)LoggertextFileLogObserver)smtpz/etc/mailmailz~/.twisted/mailmailz	127.0.0.1zSubject: Failed Message Delivery

  Message delivery failed.  The following occurred:

  %s
--
The Twisted sendmail application.
)observerc                       e Zd ZdZdS )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__     =lib/python3.11/site-packages/twisted/mail/scripts/mailmail.pyr   r   (   s           r   r   c                  p    	 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   sB    !{}} ! ! !     !s    55zUnsupported option.c                    t                      }d | D             |_        t                      |_        d| v r#t	          dt
                     t                      d| v rt          d| v rt          d| v rB| |                     d          dz            |_        |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                                        }|                                sn|                    dd          }|d                                         }|j        rQ|dv rM|j                            t.          j                            |d                   d         g           |dk    rd}n6|dk    r0t.          j                            |d                   d         |_        ||v r!||                             |d                    |r|                    |           1|d         s|                    d|j         d           |d         sV|j        st          d          |                    d                    d                    |j                                       |d         s*|                    dt=          j                     d           |                    |           |j        r5|j        D ]-}	 |j        	                    |           # t@          $ r Y *w xY w|!                    dd           t          |"                                t           j        #                                z             |_$        |S ) Nc                 <    g | ]}|                     d           |S )-)
startswith).0es     r   
<listcomp>z parseOptions.<locals>.<listcomp>D   s)    555!1<<#4#45A555r   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   r$   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requiredHeadersbufferr>   linehdrshdras	            r   parseOptionsrN   B   s   		A55t555ADzzAH d!7+++ll }}   }}   t||

4((1,-	AH 	%4--   ~~ ~~ 	$ETMM }}  
 t||"&T"'  O ZZFy!!##zz|| 	zz$""1gmmoo" 	9s.A'A'ADKK..tAw77:;<<<e||F]]{,,T!W55a8AH/!!C ''Q000 	LL), 6" .,ah,,,---4  ;t 	97888\((1499:::6" 75do//555666
LL # 	 	AA     KK1foo''#)..*:*::;;AFHs   M99
NNc                       e Zd ZdZd ZdS )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| _	        d S )NdenyT)
	allowUIDsdenyUIDs	allowGIDsdenyGIDs
useraccessgroupaccess
identities	smarthostdomaindefaultAccess)selfs    r   __init__zConfiguration.__init__   sP     !!r   N)r   r   r   r   r^   r   r   r   rP   rP      s-         6" " " " "r   rP   c           
         t                      }t          j        | t          j                  s|S t	                      }|                    |            |j        }|j        }|j        }|j	        }d||fd||ffD ]]\  }}}	|
                    |          r@d|fd|	ffD ]\  }
}|                    ||
          r|                    ||
          r|                    ||
                              d          D ]m}	 t          |          }|                    |           (# t           $ r9 t"                              d|d                                         ||           Y jw xY w|                    |d	          }d
 d |                    d          D             D             }|d         dk    rt)          ||d           Lt)          ||d           _|
                    d          rk|                    d          D ]U\  }}|                    dd          }t-          |          dk    rt"                              d|           K||j        |<   V|
                    d          rb|                    dd          r|                    dd          |_        |                    dd          r|                    dd          |_        |S )NrW   rX   allowrR   ,z6Illegal {prefix}ID in [{section}] section: {sectionID}r   )prefixsection	sectionIDorderc                 6    g | ]}|                                 S r   )r7   r   ss     r   r!   zloadConfig.<locals>.<listcomp>  s     NNN1QWWYYNNNr   c                 6    g | ]}|                                 S r   )r8   rg   s     r   r!   zloadConfig.<locals>.<listcomp>  s     (M(M(Mq(M(M(Mr   identity:r"      z.Illegal entry in [identity] section: {section})rc   	addressesrZ   default_domain)rP   r   accessR_OKr   rD   rS   rT   rU   rV   has_section
has_optiongetr7   intr=   
ValueError_logerroruppersetattritemslenrY   rZ   r[   )pathcpauduagdgrc   rM   dmodeLrd   re   hostuppartss                    r   
loadConfigr      s     	A9T27## AFF4LLL	
B	
B	
B	
B)2r2]B4KL , ,!Q==!! 	,&lVQK8 0 0	q<<.. 0155$3G3G 0%&UU7D%9%9%?%?%D%D 0 0	0(+II HHY////  *    JJ!C'.qz'7'7'9'9(/*3 '      EE'7++ENN(M(MEKK<L<L(M(M(MNNNEQx7""7G,,,,7F+++}}Z   '''*-- 	' 	'JT2HHS!$$E5zzQ

KUW
XXX!&AL}}[!! <<<[11 	:%%[99AK<<%566 	<uu[*:;;AHHs   ;D  A E#	"E#	c                 ,    t          j                     d S r   r   stop)results    r   successr   ,  s    LNNNNNr   c                 0    t          j                     | ad S r   )r   r   failed)fs    r   failurer   3  s    LNNNFFFr   c                     t          j        | |j        |j        |j                  }|                    t          t                     t          j	                     d S r   )
r	   sendmailr(   r$   rE   addCallbacksr   r   r   run)r   optionsidentr   s       r   r   r   9  s@    dGNGJEEANN7G$$$KMMMMMr   c                    |j         g}d                    t          j        d         t          j                            d                    }t                      }|                     |           t          t          |
                                z            }t	          j        d|||          }|                    d            d S )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?   r3   rF   r	   DNSNAMEdecoder   printTraceback	ERROR_FMTrC   r   addBoth)r   r   	recipientr(   rw   rE   r   s          r   	senderrorr   ?  s     IAHHT\((11 F JJE&&&I 0 0011Dk69d;;AII&&'''''r   c                 >   t          j                    }t          j                    }| j        dk    r|| j        v rdS || j        v rdS n|| j        v rdS || j        v rdS | j        dk    r|| j        v rdS || j        v rdS n|| j        v rdS || j        v rdS | j	         S )NrR   TF)
r   getuidgetgidrW   rT   rS   rX   rV   rU   r\   )confuidgids      r   rR   rR   K  s    
)++C
)++C&  $-4$.  5 ! $.  5$-46!!$-4$.  5 ! $.  5$-4!!!r   c                     t          t          j        dd                    } t          t                    }t          t
                    }t          |          st          |          rt                              d           d S |j	        p|j	        pt          }|j                                        }|                    |j                   |j        r|j        t          _        n|j        r|j        t          _        t#          || |           t$          rR| j        r4t$                              t          j                   t-          d          t/          t$          |            d S d S )Nr"   zPermission deniedr   )rN   r3   rF   r   
GLOBAL_CFG	LOCAL_CFGrR   rv   rw   rZ   	SMARTHOSTrY   copyupdater[   r	   r   r   r   r/   r   stderrr*   r   )rG   gConflConfr   r   s        r   r   r   h  s3   SXabb\""Az""Ey!!EE{{ d5kk 

&'''?:eo:D!!##E	LL!"""| $|	 $|T1e != 	!!!sz!222Q--fa     ! !r   )*r   email.utilsr:   r   r   r3   configparserr   ior   twisted.copyrightr   twisted.internetr   twisted.loggerr   r   twisted.mailr	   r   r|   
expanduserr   r   r   r   _logObserverrv   r   r   r*   r+   rN   rP   r   r   r   r   r   r   rR   r   r   r   r   <module>r      s  
 
      				 



 % % % % % %       % % % % % % $ $ $ $ $ $ 6 6 6 6 6 6 6 6      
G455			 #"3:..v|$$$        ! ! !  Z 566 w w wt(" (" (" (" (" (" (" ("VB B BJ   
    	( 	( 	(" " ":! ! ! ! !r   