grthtrhthjhtyjytjytkergtrhtrjytjerhrfh4:24 29/09/2026a XC?hˆã@sNddlZddlZddlZddlZddlZddlZddlZddlZddlZddl m Z ddl m Z m Z gd¢ZejdZdZGdd„dƒZeƒadZd Zd Zd%d d „ZGdd„dejƒZGdd„dejƒZGdd„deƒZGdd„deƒZGdd„deƒZGdd„dƒZdd„Z e!dk�rJe ƒZ"e"j#Z#de#v�rfe# $d¡Z%e&e#de%…e'ƒe(ƒd gƒZ)e#e%dd…Z#nddl*Z)e+e)e#ƒZ,e,e"j-e"j.fe"j/e"j0fe"j1e"j2d�Z3e"j4�r(z ddl5Z5Wn,e6�yÜe7d ej8d!�e 9d¡Yn0e5 :d"¡d#Z;ze 4e;¡Wn,e<�y&e7d$ej8d!�e 9d¡Yn0z e =¡Wne>�yHYn0dS)&éN)Úwarn)Ú get_addr_specÚget_angle_addr)Ú SMTPChannelÚ SMTPServerÚDebuggingServerÚ PureProxyÚ MailmanProxyzPython SMTP proxy version 0.3c@seZdZdd„Zdd„ZdS)ÚDevnullcCsdS©N©©ÚselfÚmsgr r ú*/opt/alt/python39/lib64/python3.9/smtpd.pyÚwritefóz Devnull.writecCsdSr r ©rr r rÚflushgrz Devnull.flushN)Ú__name__Ú __module__Ú __qualname__rrr r r rr esr Ú z, iÚcCs4tttƒtjd�|r&t|tjd�t |¡dS)N©Úfile)ÚprintÚ__doc__ÚglobalsÚsysÚstderrÚexit)Úcoderr r rÚusagepsr#c@sþeZdZdZdZdZe efdd„¡Ze dd„ƒZ e dd d fd d „Z d d „Z dd„Ze dd„ƒZejdd„ƒZe dd„ƒZejdd„ƒZe dd„ƒZejdd„ƒZe dd„ƒZejdd„ƒZe dd„ƒZejdd„ƒZe dd „ƒZejd!d „ƒZe d"d#„ƒZejd$d#„ƒZe d%d&„ƒZejd'd&„ƒZe d(d)„ƒZejd*d)„ƒZe d+d,„ƒZejd-d,„ƒZe d.d/„ƒZejd0d/„ƒZd1d2„Zd3d4„Zd5d6„Zd7d8„Zd9d:„Zd;d<„Z d=d>„Z!d?d@„Z"dAdB„Z#dCdD„Z$dEdF„Z%dGdH„Z&dIdJ„Z'dKdL„Z(dMdN„Z)dOdP„Z*dQdR„Z+dS)SrréicCs|Sr r )Úxr r rÚ|rzSMTPChannel.cCs.zt|j ¡ƒWSty(|jYS0dSr )ÚmaxÚcommand_size_limitsÚvaluesÚ ValueErrorÚcommand_size_limitrr r rÚmax_command_size_limit~s z"SMTPChannel.max_command_size_limitNFc Cs&tjj|||d�||_||_||_||_||_||_|rF|rFt dƒ‚|rdd|_ d|_ d|_ t |_nd|_ d|_ tdƒ|_ d |_| ¡d|_d |_|j ¡t ¡|_z| ¡|_WnBt�yø}z(| ¡|jd tjkrâ‚WYd}~dSd}~00td t |jƒt!d �| "d|jt#f¡dS)N©ÚmapúFdecode_data and enable_SMTPUTF8 cannot be set to True at the same timerú Ú.ró ó.ó FrzPeer:rz 220 %s %s)$ÚasynchatÚ async_chatÚ__init__Ú smtp_serverÚconnÚaddrÚdata_size_limitÚenable_SMTPUTF8Ú _decode_datar*Ú _emptystringÚ_linesepÚ_dotsepÚNEWLINEÚ_newlineÚordÚ_set_rset_stateÚ seen_greetingÚ extended_smtpr(ÚclearÚsocketZgetfqdnÚfqdnZ getpeernameÚpeerÚOSErrorÚcloseÚargsÚerrnoZENOTCONNrÚreprÚ DEBUGSTREAMÚpushÚ __version__) rZserverr9r:r;r.r<Ú decode_dataÚerrr r rr7…s@   zSMTPChannel.__init__cCs.|j|_d|_g|_d|_d|_| d¡dS)NFrr2)ÚCOMMANDÚ smtp_stateÚmailfromÚrcpttosÚrequire_SMTPUTF8Ú num_bytesÚset_terminatorrr r rÚ_set_post_data_state¬s z SMTPChannel._set_post_data_statecCs| ¡d|_g|_dS©Nr)r\Ú received_dataÚreceived_linesrr r rrDµszSMTPChannel._set_rset_statecCstdtdƒ|jS)NzTAccess to __server attribute on SMTPChannel is deprecated, use 'smtp_server' insteadé©rÚDeprecationWarningr8rr r rÚ__server½sÿzSMTPChannel.__servercCstdtdƒ||_dS)NzRSetting __server attribute on SMTPChannel is deprecated, set 'smtp_server' insteadr`ra©rÚvaluer r rrcÂsÿcCstdtdƒ|jS)NzUAccess to __line attribute on SMTPChannel is deprecated, use 'received_lines' insteadr`©rrbr_rr r rÚ__lineÈsÿzSMTPChannel.__linecCstdtdƒ||_dS)NzSSetting __line attribute on SMTPChannel is deprecated, set 'received_lines' insteadr`rfrdr r rrgÍsÿcCstdtdƒ|jS)NzRAccess to __state attribute on SMTPChannel is deprecated, use 'smtp_state' insteadr`©rrbrVrr r rÚ__stateÓsÿzSMTPChannel.__statecCstdtdƒ||_dS)NzPSetting __state attribute on SMTPChannel is deprecated, set 'smtp_state' insteadr`rhrdr r rriØsÿcCstdtdƒ|jS)NzXAccess to __greeting attribute on SMTPChannel is deprecated, use 'seen_greeting' insteadr`©rrbrErr r rÚ __greetingÞsÿzSMTPChannel.__greetingcCstdtdƒ||_dS)NzVSetting __greeting attribute on SMTPChannel is deprecated, set 'seen_greeting' insteadr`rjrdr r rrkãsÿcCstdtdƒ|jS)NzSAccess to __mailfrom attribute on SMTPChannel is deprecated, use 'mailfrom' insteadr`©rrbrWrr r rÚ __mailfromésÿzSMTPChannel.__mailfromcCstdtdƒ||_dS)NzQSetting __mailfrom attribute on SMTPChannel is deprecated, set 'mailfrom' insteadr`rlrdr r rrmîsÿcCstdtdƒ|jS)NzQAccess to __rcpttos attribute on SMTPChannel is deprecated, use 'rcpttos' insteadr`©rrbrXrr r rÚ __rcpttosôsÿzSMTPChannel.__rcpttoscCstdtdƒ||_dS)NzOSetting __rcpttos attribute on SMTPChannel is deprecated, set 'rcpttos' insteadr`rnrdr r rroùsÿcCstdtdƒ|jS)NzTAccess to __data attribute on SMTPChannel is deprecated, use 'received_data' insteadr`©rrbr^rr r rÚ__dataÿsÿzSMTPChannel.__datacCstdtdƒ||_dS)NzRSetting __data attribute on SMTPChannel is deprecated, set 'received_data' insteadr`rprdr r rrqsÿcCstdtdƒ|jS)NzKAccess to __fqdn attribute on SMTPChannel is deprecated, use 'fqdn' insteadr`©rrbrIrr r rÚ__fqdn sÿzSMTPChannel.__fqdncCstdtdƒ||_dS)NzISetting __fqdn attribute on SMTPChannel is deprecated, set 'fqdn' insteadr`rrrdr r rrssÿcCstdtdƒ|jS)NzKAccess to __peer attribute on SMTPChannel is deprecated, use 'peer' insteadr`©rrbrJrr r rÚ__peersÿzSMTPChannel.__peercCstdtdƒ||_dS)NzISetting __peer attribute on SMTPChannel is deprecated, set 'peer' insteadr`rtrdr r rrusÿcCstdtdƒ|jS)NzKAccess to __conn attribute on SMTPChannel is deprecated, use 'conn' insteadr`©rrbr9rr r rÚ__conn sÿzSMTPChannel.__conncCstdtdƒ||_dS)NzISetting __conn attribute on SMTPChannel is deprecated, set 'conn' insteadr`rvrdr r rrw%sÿcCstdtdƒ|jS)NzKAccess to __addr attribute on SMTPChannel is deprecated, use 'addr' insteadr`©rrbr:rr r rÚ__addr+sÿzSMTPChannel.__addrcCstdtdƒ||_dS)NzISetting __addr attribute on SMTPChannel is deprecated, set 'addr' insteadr`rxrdr r rry0sÿcCs&tj |t|d|jrdndƒ¡dS)Nr0úutf-8Úascii)r5r6rQÚbytesrYr r r rrQ7s ÿzSMTPChannel.pushcCs|d}|j|jkr|j}n|j|jkr*|j}|r<|j|krÚjoinr_rrOrPrVrUrZrQr=r€ÚfindÚupperÚstriprFr(r+Úgetattrr}r;Úsplitr?r@rrBr^rJrWrXr…r†r8Úprocess_messager\) rÚlineZszÚiÚcommandÚargZmax_szÚmethodr�ÚtextrMÚkwargsZstatusr r rÚfound_terminatorLsl   ÿ ÿ   þ zSMTPChannel.found_terminatorcCsH|s| d¡dS|jr&| d¡dS| ¡||_| d|j¡dS)Nz501 Syntax: HELO hostnameú503 Duplicate HELO/EHLOz250 %s)rQrErDrI©rr’r r rÚ smtp_HELOŠs  zSMTPChannel.smtp_HELOcCs²|s| d¡dS|jr&| d¡dS| ¡||_d|_| d|j¡|jrr| d|j¡|jdd7<|js‚| d¡|jr¤| d ¡|jdd 7<| d ¡dS) Nz501 Syntax: EHLO hostnamer—Tz250-%sz 250-SIZE %sÚMAILéz 250-8BITMIMEz 250-SMTPUTF8é z250 HELP) rQrErDrFrIr;r(r=r<r˜r r rÚ smtp_EHLO–s&    zSMTPChannel.smtp_EHLOcCs|r| d¡n | d¡dS)Nz501 Syntax: NOOPr‡©rQr˜r r rÚ smtp_NOOP¬s zSMTPChannel.smtp_NOOPcCs| d¡| ¡dS)Nz221 Bye)rQZclose_when_doner˜r r rÚ smtp_QUIT²s zSMTPChannel.smtp_QUITcCs0t|ƒ}|d|… ¡|kr,||d… ¡SdSr])r~rŠr‹)rÚkeywordr’Zkeylenr r rÚ_strip_command_keyword·sz"SMTPChannel._strip_command_keywordcCsF|sdS| ¡ d¡r$t|ƒ\}}n t|ƒ\}}|s<||fS|j|fS)N)rrú<)ÚlstripÚ startswithrrZ addr_spec)rr’ÚaddressÚrestr r rÚ_getaddr½s zSMTPChannel._getaddrcCsHi}|D]:}| d¡\}}}| ¡r,|r2|s2dS|r:|nd||<q|S)Nú=T)Ú partitionÚisalnum)rÚparamsÚresultZparamÚeqrer r rÚ _getparamsÈszSMTPChannel._getparamscCs|rôd}| ¡}|dkr$| d¡qþ|dkr8| d¡qþ|dkr^d}|jrR||7}| |¡qþ|dkr„d }|jrx||7}| |¡qþ|d kr˜| d ¡qþ|d kr¬| d ¡qþ|dkrÀ| d¡qþ|dkrÔ| d¡qþ|dkrè| d¡qþ| d¡n | d¡dS)Nú [SP ]ZEHLOz250 Syntax: EHLO hostnameZHELOz250 Syntax: HELO hostnameršz 250 Syntax: MAIL FROM:
ZRCPTz250 Syntax: RCPT TO:
r}z250 Syntax: DATAZRSETz250 Syntax: RSETZNOOPz250 Syntax: NOOPZQUITz250 Syntax: QUITZVRFYz250 Syntax: VRFY
zD501 Supported commands: EHLO HELO MAIL RCPT DATA RSET NOOP QUIT VRFYzD250 Supported commands: EHLO HELO MAIL RCPT DATA RSET NOOP QUIT VRFY)rŠrQrF)rr’ZextendedZlc_argrr r rÚ smtp_HELPÓs:          zSMTPChannel.smtp_HELPcCs@|r2| |¡\}}|r"| d¡q<| d|¡n | d¡dS)NzB252 Cannot VRFY user, but will accept message and attempt deliveryz502 Could not VRFY %sz501 Syntax: VRFY
)r¨rQ)rr’r¦r¬r r rÚ smtp_VRFYös  zSMTPChannel.smtp_VRFYcCsÌ|js| d¡dStd|td�d}|jr4|d7}|durJ| |¡dS| d|¡}| |¡\}}|sv| |¡dS|jsŽ|rŽ| |¡dS|jr¢| d¡dS| ¡  ¡|_ |  |j ¡}|durÒ| |¡dS|j sú|  dd ¡}|d vrú| d ¡dS|j�r8|  d d ¡}|du�r d|_n|d u�r8| d¡dS|  dd¡}|�rˆ| ¡�sb| |¡dS|j�rˆt|ƒ|jk�rˆ| d¡dSt| ¡ƒdk�r¨| d¡dS||_td|jtd�| d¡dS)Nú503 Error: send HELO firstz ===> MAILrz 501 Syntax: MAIL FROM:
r°zFROM:z503 Error: nested MAIL commandZBODYÚ7BIT)r´Z8BITMIMEz1501 Error: BODY can only be one of 7BIT, 8BITMIMEZSMTPUTF8FTz&501 Error: SMTPUTF8 takes no argumentsZSIZEz:552 Error: message size exceeds fixed maximum message sizerz:555 MAIL FROM parameters not recognized or not implementedzsender:r‡)rErQrrPrFr¢r¨rWrŠr�r…r¯r=Úpopr<rYÚisdigitr;Úintr~Úkeys)rr’Ú syntaxerrr¦r¬ÚbodyÚsmtputf8Úsizer r rÚ smtp_MAILsh                    zSMTPChannel.smtp_MAILcCs|js| d¡dStd|td�|js6| d¡dSd}|jrH|d7}|dur^| |¡dS| d|¡}| |¡\}}|sŠ| |¡dS|js¢|r¢| |¡dS| ¡  ¡|_ |  |j ¡}|durÒ| |¡dSt |  ¡ƒdkrð| d ¡dS|j |¡td |jtd�| d ¡dS) Nr³z ===> RCPTrz503 Error: need MAIL commandz501 Syntax: RCPT TO:
r°zTO:rz8555 RCPT TO parameters not recognized or not implementedzrecips:r‡)rErQrrPrWrFr¢r¨rŠr�r†r¯r~r¸rXr)rr’r¹r¦r¬r r rÚ smtp_RCPT7s@           zSMTPChannel.smtp_RCPTcCs(|r| d¡dS| ¡| d¡dS)Nz501 Syntax: RSETr‡)rQrDr˜r r rÚ smtp_RSETZs  zSMTPChannel.smtp_RSETcCsZ|js| d¡dS|js(| d¡dS|r:| d¡dS|j|_| d¡| d¡dS)Nr³z503 Error: need RCPT commandz501 Syntax: DATAs . z#354 End data with .)rErQrXr}rVr[r˜r r rÚ smtp_DATAas    zSMTPChannel.smtp_DATAcCs| d¡dS)Nz502 EXPN not implementedržr˜r r rÚ smtp_EXPNpszSMTPChannel.smtp_EXPN),rrrrUr}r+Ú collectionsÚ defaultdictr(Úpropertyr,ÚDATA_SIZE_DEFAULTr7r\rDZ_SMTPChannel__serverÚsetterZ_SMTPChannel__lineZ_SMTPChannel__stateZ_SMTPChannel__greetingZ_SMTPChannel__mailfromZ_SMTPChannel__rcpttosZ_SMTPChannel__dataZ_SMTPChannel__fqdnZ_SMTPChannel__peerZ_SMTPChannel__connZ_SMTPChannel__addrrQrƒr–r™r�rŸr r¢r¨r¯r±r²r½r¾r¿rÀrÁr r r rrws� ÿ '                       >   # 6#rc@s2eZdZeZedddfdd„Zdd„Zdd„ZdS) rNFcCsÎ||_||_||_||_||_|r.|r.tdƒ‚tjj||d�zNt j |dt j iŽ}|  |dd|dd¡|  ¡| |¡| d¡Wn| ¡‚Yn(0td|jjt t ¡¡||ftd�dS) Nr/r-Útyperr$éz0%s started at %s Local addr: %s Remote addr:%sr)Z _localaddrÚ _remoteaddrr;r<r=r*ÚasyncoreÚ dispatcherr7rHZ getaddrinfoZ SOCK_STREAMZ create_socketZset_reuse_addrZbindZlistenrLrÚ __class__rÚtimeÚctimerP)rZ localaddrZ remoteaddrr;r.r<rSZ gai_resultsr r rr7xs2ÿ þþzSMTPServer.__init__c Cs6tdt|ƒtd�| ||||j|j|j|j¡}dS)NzIncoming connection from %sr)rrOrPÚ channel_classr;Ú_mapr<r=)rr9r:Zchannelr r rÚhandle_accepted”súzSMTPServer.handle_acceptedcKst‚dSr )ÚNotImplementedError©rrJrWrXr�r•r r rrŽŸszSMTPServer.process_message) rrrrrÏrÅr7rÑrŽr r r rrts þ  rc@seZdZdd„Zdd„ZdS)rcCsld}| ¡}|D]V}|rL|sLd|d}t|tƒs@t| d¡ƒ}t|ƒd}t|tƒs^t|ƒ}t|ƒqdS)Nr$zX-Peer: rrz)Ú splitlinesÚ isinstancer€rOÚencoder)rrJr�Z inheadersÚlinesr�Z peerheaderr r rÚ_print_message_contentÃs   z&DebuggingServer._print_message_contentcKsXtdƒ|r@| d¡r&td|dƒ| d¡r@td|dƒ| ||¡tdƒdS)Nz%---------- MESSAGE FOLLOWS ----------r…zmail options: %sr†zrcpt options: %s z%------------ END MESSAGE ------------)rÚgetrØrÓr r rrŽÔs   zDebuggingServer.process_messageN)rrrrØrŽr r r rrÁsrcs,eZdZ‡fdd„Zdd„Zdd„Z‡ZS)rcs2d|vr|drtdƒ‚tt|ƒj|i|¤ŽdS)Nr<z$PureProxy does not support SMTPUTF8.)r*Úsuperrr7©rrMr•©rÌr rr7àszPureProxy.__init__c Csf| d¡}d}|D]}|sq(|d7}q| |d|d¡t |¡}| |||¡}td|td�dS)Nrrr$z X-Peer: %szwe got some refusals:r)r�ÚinsertrArˆÚ_deliverrrP) rrJrWrXr�r×r�r�Úrefusedr r rrŽås   zPureProxy.process_messagec Csúddl}i}zJ| ¡}| |jd|jd¡z| |||¡}W| ¡n | ¡0Wnž|jyŽ}ztdtd�|j }WYd}~npd}~0t |j fyô}zJtd|j td�t |ddƒ}t |dd ƒ} |D]} || f|| <qÎWYd}~n d}~00|S) Nrr$zgot SMTPRecipientsRefusedrZgotZ smtp_codeéÿÿÿÿZ smtp_errorÚignore)ÚsmtplibZSMTPZconnectrÉZsendmailÚquitZSMTPRecipientsRefusedrrPZ recipientsrKZ SMTPExceptionrÌrŒ) rrWrXr�rârßÚsÚeZerrcodeÚerrmsgÚrr r rrÞós$   $zPureProxy._deliver)rrrr7rŽrÞÚ __classcell__r r rÜrrßs rcs$eZdZ‡fdd„Zdd„Z‡ZS)r cs>tdtdƒd|vr$|dr$tdƒ‚tt|ƒj|i|¤ŽdS)Nz8MailmanProxy is deprecated and will be removed in futurer`r<z'MailmanProxy does not support SMTPUTF8.)rrbr*rÚrr7rÛrÜr rr7 s ÿzMailmanProxy.__init__cCs*ddlm}ddlm}ddlm}ddlm}g} |D]t} |  ¡ d¡d} |  d¡} t| ƒdkrfq8| d} t| ƒdkr„| d }nd }|  | ¡r8|d vrœq8|   | | |f¡q8| D]\} } }|  | ¡q²t d d   |¡td�|rü| |||¡}t d|td�i}||ƒ}| |¡}| d¡�s&||d<| d¡�sDt t ¡¡|d<| D]Ü\} } }t d| td�| | ¡}|�s†|j| dd�}||| <|d k�r |j|d d�n‚|dk�rº|j|d d�nh|dk�rÔ|j|d d�nN|dk�rî|j|d d�n4|dv�rH|dk�r d|d <nd!|d <|j|d d��qHdS)"Nr)ÚStringIO)ÚUtils)ÚMessage)ÚMailListú@ú-r`r$r)rÚadminÚownerÚrequestrˆÚleavezforwarding recips:r„rzwe got refusals:ÚfromZFromÚdateZDatezsending message to)Úlock)Útolistrï)Ztoadminrð)Ztoownerrñ)Z torequest)rˆròrˆZ subscribeZSubjectZ unsubscribe)ÚioréZMailmanrêrërìÚlowerr�r~Z list_existsrÚremoverrˆrPrÞrÙrÍrÎZEnqueue)rrJrWrXr�rérêrërìZ listnamesZrcptZlocalÚpartsZlistnamer‘rßZmlistsrärZmlistr r rrŽsb                    zMailmanProxy.process_message)rrrr7rŽrèr r rÜrr s r c@seZdZdZdZdZdZdS)ÚOptionsTrNF)rrrÚsetuidÚ classnameÚ size_limitr<r r r rrûasrûc Csdz$t tjdd…dgd¢¡\}}Wn0tjyT}ztd|ƒWYd}~n d}~00tƒ}|D]º\}}|dvrztdƒq`|dvr–ttƒt d¡q`|dvr¦d|_ q`|d vr¶||_ q`|d vrÆtj a q`|d vrÖd |_ q`|d vr`zt|ƒ}||_Wq`td|tj d�t d¡Yq`0q`t|ƒdk�r4d}d}nPt|ƒdk�rP|d}d}n4t|ƒdk�rp|d}|d}ntddt |¡ƒ| d¡} | dk�r¦tdd|ƒ|d| …|_zt|| dd…ƒ|_Wn"t�yðtdd|ƒYn0| d¡} | dk�rtdd|ƒ|d| …|_zt|| dd…ƒ|_Wn"t�y^tdd|ƒYn0|S)Nr$z nVhc:s:du)zclass=ZnosetuidÚversionÚhelpzsize=Údebugr»)z-hz--helpr)z-Vz --version)z-nz --nosetuidF)z-cz--class)z-dz--debug)z-uz --smtputf8T)z-sz--sizezInvalid size: rzlocalhost:8025z localhost:25r`ézInvalid arguments: %sú:zBad local spec: %szBad local port: %szBad remote spec: %szBad remote port: %s)ÚgetoptrÚargvÚerrorr#rûrrRr!rürýr rPr<r·rþr~Ú COMMASPACErˆr‰Ú localhostÚ localportr*Ú remotehostÚ remoteport) ZoptsrMråÚoptionsÚoptr’Zint_sizeZ localspecZ remotespecr�r r rÚ parseargshspþ           rÚ__main__r1r$)r<z7Cannot import module "pwd"; try running with -n option.rÚnobodyr`z3Cannot setuid "nobody"; try running with -n option.)r)?rÚosrNrrÍrHrÊr5rÂÚwarningsrZemail._header_value_parserrrÚ__all__rZprogramrRr rPrArrÅr#r6rrËrrrr rûrrr rýÚrfindZlastdotÚ __import__rÚlocalsÚmodrrŒZclass_rr r r rþr<ÚproxyrüÚpwdÚ ImportErrorrr r!ÚgetpwnamrÚPermissionErrorZloopÚKeyboardInterruptr r r rÚPsv   M-UB      þ