
    Vhh(                     ^   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.1zSubject: 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__     M/home/dcms/DCMS/lib/python3.12/site-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<<#4A5ADzAH d!7+l }   }   t|

4(1,-	AHH 	%4-   ~ ~ 	$ETM }  
 t|"&TT"' O ZF
yy!!#zz|zz$"1gmmo""s.A'ADDKK..tAw7:;<e|F]{{,,T!W5a8AH/!C ''Q0LL) , 6"vahhZt,-4 tt788\((1449:6"vdoo/056
LL## 	AA	 KK1foo'#))..*::;AFHk 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99T277#AFF4L	
B	
B	
B	
B'R0="b2IJ ,A==!$aL61+6 0a<<.155$3G%&UU7D%9%?%?%D 0	0(+II HHY/00 EE'7+E<AKK<L(Mq(MN1QWWYNENQx7"7G,7F+-,0 	}}Z 
+ 	'HD"HHS!$E5zQ

KUW
X!&ALL	' 	}}[!<<[1%%[9AK<<%56uu[*:;AHH?  *  JJ!C'.qz'7'7'9(/*3 '  )NNs   9I0>J*J/03J'	&J'	c                 ,    t        j                          y r   r   stop)results    r   successr   ,  s    LLNr   c                 0    t        j                          | ay r   )r   r   failed)fs    r   failurer   3  s    LLN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    dGNNGJJEANN7G$KKMr   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 JE&I 001Dk69d;AII&'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    SXXab\"Az"Ey!EE{d5k

&'??:eoo:D!!#E	LL!!"||||	||T1e==!!szz!2Q-fa  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 
GG45			 #3::.|$  !   56 wt(" ("VBJ 
	(":!r   