grthtrhthjhtyjytjytkergtrhtrjytjerhrfh4:24 29/09/2026B Ñ 0�‰¨Ýã@sZddlZddlZddlZddlZddlZddlZddlZddlZddlZddl m Z ddl m Z m Z dddddgZejdZd ZGd d „d ƒZeƒad Zd ZdZd$dd„ZGdd„dejƒZGdd„dejƒZGdd„deƒZGdd„deƒZGdd„deƒZGdd„dƒZdd„Z e!dk�rVe ƒZ"e"j#Z#de#k�rle# $d¡Z%e&e#de%…e'ƒe(ƒdgƒZ)e#e%dd…Z#nddl*Z)e+e)e#ƒZ,e,e"j-e"j.fe"j/e"j0fe"j1e"j2d�Z3e"j4�r2y ddl5Z5Wn.e6k �räe7dej8d �e 9d¡YnXe5 :d!¡d"Z;ye 4e;¡Wn.ek �rTYnXdS)%é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/python37/lib64/python3.7/smtpd.pyÚwritefóz Devnull.writecCsdS)Nr )r r 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)Úcoder r r rÚusagepsrc@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|S)Nr )Úxr r rÚ|rzSMTPChannel.cCs*yt|j ¡ƒStk r$|jSXdS)N)ÚmaxÚcommand_size_limitsÚvaluesÚ ValueErrorÚcommand_size_limit)r r r rÚmax_command_size_limit~sz"SMTPChannel.max_command_size_limitNFc Cs tjj|||d�||_||_||_||_||_||_|rF|rFt dƒ‚|rdd|_ d|_ d|_ t |_nd|_ d|_ tdƒ|_ d |_| ¡d|_d |_|j ¡t ¡|_y| ¡|_Wn<tk rò}z| ¡|jd tjkrâ‚dSd}~XYnXtd t |jƒt!d �| "d|jt#f¡dS)N)ÚmapzFdecode_data and enable_SMTPUTF8 cannot be set to True at the same timerz Ú.rs ó.ó 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__) r Zserverr1r2r3r)r4Ú decode_dataÚerrr r rr/…s@   zSMTPChannel.__init__cCs.|j|_d|_g|_d|_d|_| d¡dS)NFrs )ÚCOMMANDÚ smtp_stateÚmailfromÚrcpttosÚrequire_SMTPUTF8Ú num_bytesÚset_terminator)r r r rÚ_set_post_data_state¬s z SMTPChannel._set_post_data_statecCs| ¡d|_g|_dS)Nr)rTÚ received_dataÚreceived_lines)r r r rr<µszSMTPChannel._set_rset_statecCstdtdƒ|jS)NzTAccess to __server attribute on SMTPChannel is deprecated, use 'smtp_server' insteadé)rÚDeprecationWarningr0)r r r rÚ__server½szSMTPChannel.__servercCstdtdƒ||_dS)NzRSetting __server attribute on SMTPChannel is deprecated, set 'smtp_server' insteadrW)rrXr0)r Úvaluer r rrYÂscCstdtdƒ|jS)NzUAccess to __line attribute on SMTPChannel is deprecated, use 'received_lines' insteadrW)rrXrV)r r r rÚ__lineÈszSMTPChannel.__linecCstdtdƒ||_dS)NzSSetting __line attribute on SMTPChannel is deprecated, set 'received_lines' insteadrW)rrXrV)r rZr r rr[ÍscCstdtdƒ|jS)NzRAccess to __state attribute on SMTPChannel is deprecated, use 'smtp_state' insteadrW)rrXrN)r r r rÚ__stateÓszSMTPChannel.__statecCstdtdƒ||_dS)NzPSetting __state attribute on SMTPChannel is deprecated, set 'smtp_state' insteadrW)rrXrN)r rZr r rr\ØscCstdtdƒ|jS)NzXAccess to __greeting attribute on SMTPChannel is deprecated, use 'seen_greeting' insteadrW)rrXr=)r r r rÚ __greetingÞszSMTPChannel.__greetingcCstdtdƒ||_dS)NzVSetting __greeting attribute on SMTPChannel is deprecated, set 'seen_greeting' insteadrW)rrXr=)r rZr r rr]ãscCstdtdƒ|jS)NzSAccess to __mailfrom attribute on SMTPChannel is deprecated, use 'mailfrom' insteadrW)rrXrO)r r r rÚ __mailfromészSMTPChannel.__mailfromcCstdtdƒ||_dS)NzQSetting __mailfrom attribute on SMTPChannel is deprecated, set 'mailfrom' insteadrW)rrXrO)r rZr r rr^îscCstdtdƒ|jS)NzQAccess to __rcpttos attribute on SMTPChannel is deprecated, use 'rcpttos' insteadrW)rrXrP)r r r rÚ __rcpttosôszSMTPChannel.__rcpttoscCstdtdƒ||_dS)NzOSetting __rcpttos attribute on SMTPChannel is deprecated, set 'rcpttos' insteadrW)rrXrP)r rZr r rr_ùscCstdtdƒ|jS)NzTAccess to __data attribute on SMTPChannel is deprecated, use 'received_data' insteadrW)rrXrU)r r r rÚ__dataÿszSMTPChannel.__datacCstdtdƒ||_dS)NzRSetting __data attribute on SMTPChannel is deprecated, set 'received_data' insteadrW)rrXrU)r rZr r rr`scCstdtdƒ|jS)NzKAccess to __fqdn attribute on SMTPChannel is deprecated, use 'fqdn' insteadrW)rrXrA)r r r rÚ__fqdn szSMTPChannel.__fqdncCstdtdƒ||_dS)NzISetting __fqdn attribute on SMTPChannel is deprecated, set 'fqdn' insteadrW)rrXrA)r rZr r rrascCstdtdƒ|jS)NzKAccess to __peer attribute on SMTPChannel is deprecated, use 'peer' insteadrW)rrXrB)r r r rÚ__peerszSMTPChannel.__peercCstdtdƒ||_dS)NzISetting __peer attribute on SMTPChannel is deprecated, set 'peer' insteadrW)rrXrB)r rZr r rrbscCstdtdƒ|jS)NzKAccess to __conn attribute on SMTPChannel is deprecated, use 'conn' insteadrW)rrXr1)r r r rÚ__conn szSMTPChannel.__conncCstdtdƒ||_dS)NzISetting __conn attribute on SMTPChannel is deprecated, set 'conn' insteadrW)rrXr1)r rZr r rrc%scCstdtdƒ|jS)NzKAccess to __addr attribute on SMTPChannel is deprecated, use 'addr' insteadrW)rrXr2)r r r rÚ__addr+szSMTPChannel.__addrcCstdtdƒ||_dS)NzISetting __addr attribute on SMTPChannel is deprecated, set 'addr' insteadrW)rrXr2)r rZr r rrd0scCs&tj |t|d|jrdndƒ¡dS)Nz zutf-8Úascii)r-r.rIÚbytesrQ)r r r r rrI7s zSMTPChannel.pushcCs|d}|j|jkr|j}n|j|jkr*|j}|r<|j|krr$r'Úgetattrrgr3Úsplitr7r8rir:rUrBrOrProrpr0Úprocess_messagerT) r ÚlineZszÚiÚcommandÚargZmax_szÚmethodrkÚtextrEÚkwargsÚstatusr r rÚfound_terminatorLsd        zSMTPChannel.found_terminatorcCsH|s| d¡dS|jr&| d¡dS| ¡||_| d|j¡dS)Nz501 Syntax: HELO hostnamez503 Duplicate HELO/EHLOz250 %s)rIr=r<rA)r r{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 hostnamez503 Duplicate HELO/EHLOTz250-%sz 250-SIZE %sÚMAILéz 250-8BITMIMEz 250-SMTPUTF8é z250 HELP) rIr=r<r>rAr3r$r5r4)r r{r r rÚ smtp_EHLO–s&    zSMTPChannel.smtp_EHLOcCs|r| d¡n | d¡dS)Nz501 Syntax: NOOPz250 OK)rI)r r{r r rÚ smtp_NOOP¬s zSMTPChannel.smtp_NOOPcCs| d¡| ¡dS)Nz221 Bye)rIZclose_when_done)r r{r r rÚ smtp_QUIT²s zSMTPChannel.smtp_QUITcCs0t|ƒ}|d|… ¡|kr,||d… ¡SdS)Nr)rhrsrt)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)r r{ÚaddressÚrestr r rÚ_getaddr½s zSMTPChannel._getaddrcCsJi}x@|D]8}| d¡\}}}| ¡r.|r2|s2dS|r:|nd||<q W|S)Nú=T)Ú partitionÚisalnum)r ÚparamsÚresultZparamÚeqrZr r rÚ _getparamsÈs zSMTPChannel._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)Nz [SP ]ZEHLOz250 Syntax: EHLO hostnameZHELOz250 Syntax: HELO hostnamer‚z 250 Syntax: MAIL FROM:
ZRCPTz250 Syntax: RCPT TO:
rgz250 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)rsrIr>)r r{ZextendedZlc_argr r 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�rI)r r{r�r“r r rÚ smtp_VRFYös  zSMTPChannel.smtp_VRFYcCsÌ|js| d¡dStd|td�d}|jr4|d7}|dkrJ| |¡dS| d|¡}| |¡\}}|sv| |¡dS|jsŽ|rŽ| |¡dS|jr¢| d¡dS| ¡  ¡|_ |  |j ¡}|dkrÒ| |¡dS|j sú|  dd ¡}|d krú| d ¡dS|j�r8|  d d ¡}|dk�r d|_n|d k �r8| d¡dS|  dd¡}|�rˆ| ¡�sb| |¡dS|j�rˆt|ƒ|jk�rˆ| d¡dSt| ¡ƒdk�r¨| d¡dS||_td|jtd�| d¡dS)Nz503 Error: send HELO firstz ===> MAIL)rz 501 Syntax: MAIL FROM:
z [SP ]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:z250 OK)r=rIrrHr>r‰r�rOrsrvror–r5Úpopr4rQÚisdigitr3ÚintrhÚkeys)r r{Ú syntaxerrr�r“ZbodyÚsmtputf8Úsizer r rÚ smtp_MAILsh                    zSMTPChannel.smtp_MAILcCs|js| d¡dStd|td�|js6| d¡dSd}|jrH|d7}|dkr^| |¡dS| d|¡}| |¡\}}|sŠ| |¡dS|js¢|r¢| |¡dS| ¡  ¡|_ |  |j ¡}|dkrÒ| |¡dSt |  ¡ƒdkrð| d ¡dS|j |¡td |jtd�| d ¡dS) Nz503 Error: send HELO firstz ===> RCPT)rz503 Error: need MAIL commandz501 Syntax: RCPT TO:
z [SP ]zTO:rz8555 RCPT TO parameters not recognized or not implementedzrecips:z250 OK)r=rIrrHrOr>r‰r�rsrvrpr–rhr�rPri)r r{ržr�r“r r rÚ smtp_RCPT7s@           zSMTPChannel.smtp_RCPTcCs(|r| d¡dS| ¡| d¡dS)Nz501 Syntax: RSETz250 OK)rIr<)r r{r r rÚ smtp_RSETZs  zSMTPChannel.smtp_RSETcCsZ|js| d¡dS|js(| d¡dS|r:| d¡dS|j|_| d¡| d¡dS)Nz503 Error: send HELO firstz503 Error: need RCPT commandz501 Syntax: DATAs . z#354 End data with .)r=rIrPrgrNrS)r r{r r rÚ smtp_DATAas    zSMTPChannel.smtp_DATAcCs| d¡dS)Nz502 EXPN not implemented)rI)r r{r r rÚ smtp_EXPNpszSMTPChannel.smtp_EXPN),rrrrMrgr'Ú collectionsÚ defaultdictr$Úpropertyr(ÚDATA_SIZE_DEFAULTr/rTr<Z_SMTPChannel__serverÚsetterZ_SMTPChannel__lineZ_SMTPChannel__stateZ_SMTPChannel__greetingZ_SMTPChannel__mailfromZ_SMTPChannel__rcpttosZ_SMTPChannel__dataZ_SMTPChannel__fqdnZ_SMTPChannel__peerZ_SMTPChannel__connZ_SMTPChannel__addrrIrmr€r�r…r†r‡r‰r�r–r—r˜r¡r¢r£r¤r¥r r r rrws` &            >   # 6#c@s2eZdZeZedddfdd„Zdd„Zdd„ZdS) rNFcCsÎ||_||_||_||_||_|r.|r.tdƒ‚tjj||d�yNt j |dt j iŽ}|  |dd|dd¡|  ¡| |¡| d¡Wn| ¡‚Yn(Xtd|jjt t ¡¡||ftd�dS) NzFdecode_data and enable_SMTPUTF8 cannot be set to True at the same time)r)Útyperr éz0%s started at %s Local addr: %s Remote addr:%s)r)Z _localaddrÚ _remoteaddrr3r4r5r&ÚasyncoreÚ dispatcherr/r@Z getaddrinfoZ SOCK_STREAMZ create_socketZset_reuse_addrZbindZlistenrDrÚ __class__rÚtimeÚctimerH)r Z localaddrZ remoteaddrr3r)r4rKZ gai_resultsr r rr/xs*  zSMTPServer.__init__c Cs6tdt|ƒtd�| ||||j|j|j|j¡}dS)NzIncoming connection from %s)r)rrGrHÚ channel_classr3Z_mapr4r5)r r1r2Zchannelr r rÚhandle_accepted”szSMTPServer.handle_acceptedcKst‚dS)N)ÚNotImplementedError)r rBrOrPrkr~r r rrwŸszSMTPServer.process_message) rrrrr³r©r/r´rwr r r rrts  c@seZdZdd„Zdd„ZdS)rcCspd}| ¡}x^|D]V}|rN|sNd|d}t|tƒsBt| d¡ƒ}t|ƒd}t|tƒs`t|ƒ}t|ƒqWdS)Nr zX-Peer: rzutf-8)Ú splitlinesÚ isinstancerjrGÚencoder)r rBrkZ inheadersÚlinesrxZ 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 ----------rozmail options: %srpzrcpt options: %s z%------------ END MESSAGE ------------)rÚgetrº)r rBrOrPrkr~r r rrwÔs   zDebuggingServer.process_messageN)rrrrºrwr r r rrÁscs,eZdZ‡fdd„Zdd„Zdd„Z‡ZS)rcs.d|kr|drtdƒ‚tt|ƒj||ŽdS)Nr4z$PureProxy does not support SMTPUTF8.)r&Úsuperrr/)r rEr~)r°r rr/àszPureProxy.__init__c Csh| d¡}d}x|D]}|sP|d7}qW| |d|d¡t |¡}| |||¡}td|td�dS)Nrrr z X-Peer: %szwe got some refusals:)r)rvÚinsertr9rqÚ_deliverrrH) r rBrOrPrkr¹ryrxÚrefusedr r rrwås    zPureProxy.process_messagec Csòddl}i}yB| ¡}| |jd|jd¡z| |||¡}Wd| ¡XWnž|jk r„}ztdtd�|j }Wdd}~XYnjt |j fk rì}zFtd|j td�t |ddƒ}t |dd ƒ} x|D]} || f|| <qÈWWdd}~XYnX|S) Nrr zgot SMTPRecipientsRefused)rZgotZ smtp_codeéÿÿÿÿZ smtp_errorÚignore)ÚsmtplibZSMTPZconnectr­ZsendmailÚquitZSMTPRecipientsRefusedrrHZ recipientsrCZ SMTPExceptionr°ru) r rOrPrkrÂr¿ÚsÚeZerrcodeÚerrmsgÚrr r rr¾ós$    "zPureProxy._deliver)rrrr/rwr¾Ú __classcell__r r )r°rrßs cs$eZdZ‡fdd„Zdd„Z‡ZS)r cs.d|kr|drtdƒ‚tt|ƒj||ŽdS)Nr4z'MailmanProxy does not support SMTPUTF8.)r&r¼rr/)r rEr~)r°r rr/ szMailmanProxy.__init__cCs8ddlm}ddlm}ddlm}ddlm}g} x||D]t} |  ¡ d¡d} |  d¡} t| ƒdkrhq:| d} t| ƒdkr†| d }nd }|  | ¡r:|d kržq:|   | | |f¡q:Wx| D]\} } }|  | ¡q¸Wt d d   |¡td�|�r| |||¡}t d|td�i}||ƒ}| |¡}| d¡�s0||d<| d¡�sNt t ¡¡|d<xä| 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|dk�rT|dk�rd|d <nd!|d <|j|d d��qTWdS)"Nr)ÚStringIO)ÚUtils)ÚMessage)ÚMailListú@ú-rWr r)rÚadminÚownerÚrequestrqÚleavezforwarding recips:rn)rzwe got refusals:ÚfromZFromZdateZDatezsending message to)Úlock)ÚtolistrÏ)ZtoadminrÐ)ZtoownerrÑ)Z torequest)rqrÒrqZ subscribeZSubjectZ unsubscribe)ÚiorÉZMailmanrÊrËrÌÚlowerrvrhZ list_existsriÚremoverrqrHr¾r»r±r²ZEnqueue)r rBrOrPrkrÉrÊrËrÌZ listnamesZrcptZlocalÚpartsZlistnamerzr¿ZmlistsrÄr Zmlistr r rrwsd                     zMailmanProxy.process_message)rrrr/rwrÈr r )r°rr s c@seZdZdZdZdZdZdS)ÚOptionsTrNF)rrrÚsetuidÚ classnameÚ size_limitr4r r r rrÚ_srÚc Csty.t tjdd…dddddddd g¡\}}Wn.tjk r\}ztd|ƒWdd}~XYnXtƒ}xÂ|D]º\}}|d kr„td ƒqj|d kr ttƒt d ¡qj|d kr°d|_ qj|dkrÀ||_ qj|dkrÐtj a qj|dkràd|_ qj|dkrjyt|ƒ}||_Wqjtd|tj d�t d¡YqjXqjWt|ƒdk�r@d}d}nPt|ƒdk�r\|d }d}n4t|ƒdk�r||d }|d}ntddt |¡ƒ| d¡} | d k�r²tdd|ƒ|d| …|_yt|| dd…ƒ|_Wn$tk �rþtdd|ƒYnX| d¡} | d k�r"tdd|ƒ|d| …|_yt|| dd…ƒ|_Wn$tk �rntdd|ƒYnX|S) Nr z nVhc:s:duzclass=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:25rWézInvalid arguments: %sú:zBad local spec: %szBad local port: %szBad remote spec: %szBad remote port: %s)ÚgetoptrÚargvÚerrorrrÚrrJrrÛrÜrrHr4rœrÝrhÚ COMMASPACErqrrÚ localhostÚ localportr&Ú remotehostÚ remoteport) ZoptsrErÅÚoptionsÚoptr{Zint_sizeZ localspecZ remotespecryr r rÚ parseargsfsp         ríÚ__main__r*r )r4z7Cannot import module "pwd"; try running with -n option.)rÚnobodyrWz3Cannot setuid "nobody"; try running with -n option.)r)?rÚosrFrãr±r@r®r-r¦ÚwarningsrZemail._header_value_parserrrÚ__all__räZprogramrJr rHr9rær©rr.rr¯rrrr rÚrírrërÜÚrfindZlastdotÚ __import__rÚlocalsÚmodrîruÚclass_rçrèrérêrÝr4ÚproxyrÛÚpwdÚ ImportErrorrrrÚgetpwnamrïÚPermissionErrorZloopÚKeyboardInterruptr r r rÚPsv   M-SB