+
    Û1jV$  ã                   ó0   € ^ RI t ^ RIHt  ! R R]4      tR# )é    N)ÚSoSMapc                   óž   a a€ ] tR t^t oRt. ROtRR.tRtRtRt	^ t
^ t/ t/ tV 3R ltR tR tR tR	 tV 3R
 ltR tR tR tR tRtVtV ;t# )ÚSoSHostnameMapa(  Mapping store for hostnames and domain names

Hostnames are obfuscated using an incrementing counter based on the total
number of hosts matched regardless of domain name.

Domain names are obfuscated based on the host's hostname, plus any user
defined domains passed in by the `--domains` options.

Domains are obfuscated as whole units, meaning the domains 'example.com'
and 'host.foo.example.com' will be separately obfuscated with no relation
for example as 'obfuscatedomdain1.com' and 'obfuscatedomain2.com'.

Top-level domains are left untouched.
ÚwwwÚapiTc                óT   <€ RV9   d   VP                  RR4      p\        SV `	  V4      # )z›Override the base get_regex_result() to provide a regex that, if
this is an FQDN or a straight domain, will include an underscore
formatted regex as well.
Ú.z(\.|_))ÚreplaceÚsuperÚget_regex_result)ÚselfÚitemÚ	__class__s   &&€ÚC/usr/lib/python3/dist-packages/sos/cleaner/mappings/hostname_map.pyr   ÚSoSHostnameMap.get_regex_result5   s,   ø€ ð
 �$Œ;Ø—<‘<  YÓ/ˆDÜ‰wÑ'¨Ó-Ð-ó    c                ó   € R V R2# )z(?<![a-z0-9])(?:z)(?![a-z0-9])© )r   r   s   &&r   Úget_regex_fullwordÚ!SoSHostnameMap.get_regex_fullword>   s   € à" 4 &¨Ð6Ð6r   c                óØ   € RV9   dH   VP                  R4       Uu. uF  p\        P                  ! V4      NK  	  ppRP                  V4      pV# \        P                  ! V4      pV# u upi )z›Override the base get_regex_escape() to provide a regex that, if
this is an FQDN or a straight domain, will include an underscore
formatted regex as well.
r	   z(?:\.|_))ÚsplitÚreÚescapeÚjoin)r   r   ÚpÚpartss   &&  r   Úget_regex_escapeÚSoSHostnameMap.get_regex_escapeB   s_   € ð �$Œ;Ø+/¯:©:°c¬?Ó;©? a”R—Y’Y˜q–\©?ˆEÐ;Ø×#Ñ# EÓ*ˆDð ˆô —9’9˜T“?ˆDØˆùò	 <s   ›A'c                óà  €  \        V P                  P                  4       RR7      ^ ,          P                  R4      ^,          p\	        V4      ^,           V n         \        V P                  P                  4       RR7      ^ ,          P                  R4      p\	        V^,          P                  R4      ^ ,          4      ^,           V n        R#   \         d     Li ; i  \         d     R# i ; i)zqSet the initial counter for host and domain obfuscation numbers
based on what is already present in the mapping.
T)ÚreverseÚhostÚdomainr	   N)	ÚsortedÚhostsÚvaluesr   ÚintÚ
host_countÚ
IndexErrorÚ_domainsÚdomain_count)r   ÚhÚds   &  r   Úset_initial_countsÚ!SoSHostnameMap.set_initial_countsO   s¼   € ð
	Ü�t—z‘z×(Ñ(Ó*°DÔ9¸!Õ<×BÑBÀ6ÓJÈ1ÕMˆAÜ! !›f q�jˆDŒOð	Ü�t—}‘}×+Ñ+Ó-°tÔ<¸QÕ?×EÑEÀhÓOˆAÜ # A a¥D§J¡J¨s£O°AÕ$6Ó 7¸!Õ ;ˆDÖøô ô 	áð	ûô ô 	âð	ús%   ‚AC ÁA/C ÃCÃCÃC-Ã,C-c                óŒ  a€ WP                   9   d   R# VP                  R4      pRP                  VP                  R4      ^ R 4      o\        V4      ^8X  d   V^ ,          V P                  9   # \
        ;QJ d)    V3R lV P                    4       F  '       g   K   RM	  RM! V3R lV P                    4       4      '       d   R# R# )z[Check if a potential domain is in one of the domains we've loaded
and should be obfuscated
Tr	   c              3   óF   <"  € T F  pSP                  V4      x € K  	  R # 5i©N)Úendswith)Ú.0Ú_dÚno_tlds   & €r   Ú	<genexpr>Ú?SoSHostnameMap.domain_name_in_loaded_domains.<locals>.<genexpr>n   s   øé € Ð;©] rˆv�‰˜r×"Ð"«]ùs   ƒ!Féÿÿÿÿ)r*   r   r   Úlenr%   Úany)r   r#   r"   r6   s   && @r   Údomain_name_in_loaded_domainsÚ,SoSHostnameMap.domain_name_in_loaded_domainsc   s‹   ø€ ð —]‘]Ô"ÙØ�|‰|˜CÓ ˆØ—‘˜&Ÿ,™, sÓ+¨A¨bÐ1Ó2ˆÜˆt‹9˜Œ>à˜•7˜dŸj™jÑ(Ð(ß‹3Ô;¨T¯]ª]Ó;�3�3Š3Ô;¨T¯]ª]Ó;×;Ò;Ùár   c                ó`  <€ R pR pRpVP                  R4      '       d   W!^ ,          ,          pVR,          pK1  VP                  R4      '       d   W1R,          ,          pV^ R pK-  WP                  9   d   V P                  V,          # V P                  VP	                  4       4      '       g   R P                  W!V.4      # VP                  V P                  4      '       d:   RVP                  R4      R,          ,           pVP                  VR 4      pW5,          pWP                  9  EdL   \        V P                  P                  4       R\        R7       EF  pRpVP                  V4      pVP                  R4      p	V	^ ,          '       d   V	^ ,          V P                  9   d   Rp\        V4      ^8X  g   V^ ,          '       g   Kr  V'       gG   V^ ,          P                  R4      '       g   VP                  V4      '       d   \        SV `9  V4      p MaVP                  V^ ,          4      '       g   Kà   VP                  V^ ,          4      ^,          p
V^ ,          \        SV `9  V
4      ,           p M	  V'       g   \        SV `9  V4      pW$,           V,           #   \         d     EKV  i ; i)	Ú Nr	   ºé   NNT)r!   ÚkeyF)r	   Ú_r9   )Ú
startswithr3   Údatasetr<   Úlowerr   Ú
strip_extsr   r
   r$   Úkeysr:   r%   r   ÚgetÚ	Exception)r   r   ÚprefixÚsuffixÚfinalÚextÚ	_existingÚ_host_substrÚ_testÚ_hÚitmr   s   &&         €r   rI   ÚSoSHostnameMap.gets   s#  ø€ àˆØˆØˆð �o‰o˜j×)Ò)Ø˜1•gÕˆFØ˜•8ŠDØ�m‰m˜J×'Ò'Ø˜2•hÕˆFØ˜˜"�:ŠDØ—<‘<ÔØ—<‘< Õ%Ð%Ø×1Ñ1°$·*±*³,×?Ò?ð —7‘7˜F¨&Ð1Ó2Ð2Ø�=‰=˜Ÿ™×)Ò)Ø˜Ÿ
™
 3›¨Õ+Õ+ˆCØ—<‘<  RÓ(ˆDØ�MˆFØ—|‘|Õ#ô $ D§L¡L×$5Ñ$5Ó$7ÀÜ(+÷-ð -�	à$�ØŸ
™
 9Ó-�Ø—_‘_ SÓ)�ð �a—5”5˜R �U d§j¡jÔ0Ø#'�LÜ�u“: ”?¨%°¯(¬(áß#¨¨q­×):Ñ):¸3×)?Ò)?Ø)-¯©°y×)AÒ)Aä!™G™K¨Ó-�EÙØ—:‘:˜e A�h×'Ô'ðØ"Ÿj™j¨¨q­Ó2°1Õ5˜Ø % a¥¬5©7©;°sÓ+;Õ ;˜Ùñ/-÷8 Ü‘G‘K Ó%ˆEØ�~ Õ&Ð&øô %ô ãðús   È7<JÊJ-Ê,J-c                ó  € VP                  R 4      p\        V4      ^8X  d'   V P                  V^ ,          P                  4       4      # \        V4      ^8X  d^   V P	                  V4      p\
        ;QJ d    R V 4       F  '       d   K   RM	  RM! R V 4       4      '       d   VP                  4       pV# \        V4      ^8”  dÂ   V^ ,          pVR,          p\        V4      ^8”  d!   V P                  VP                  4       4      pMRpV P	                  V4      pWpP                  V&   R P                  Wg.4      p\
        ;QJ d    R V 4       F  '       d   K   RM	  RM! R V 4       4      '       d   VP                  4       pV# R# )r	   c              3   ó@   "  € T F  qP                  4       x € K  	  R # 5ir2   ©Úisupper©r4   r,   s   & r   r7   Ú/SoSHostnameMap.sanitize_item.<locals>.<genexpr>¸   ó   é € Ð-© 1—9‘9—;�;«ùó   ‚FTr@   Úunknownc              3   ó@   "  € T F  qP                  4       x € K  	  R # 5ir2   rW   rY   s   & r   r7   rZ   Ë   r[   r\   N)	r   r:   Úsanitize_short_namerF   Úsanitize_domainÚallÚupperrE   r   )	r   r   r"   ÚdnameÚhostnamer#   Úob_hostnameÚ	ob_domainÚ_fqdns	   &&       r   Úsanitize_itemÚSoSHostnameMap.sanitize_item°   s)  € Ø�z‰z˜#‹ˆÜˆt‹9˜Œ>à×+Ñ+¨D°­G¯M©M«OÓ<Ð<Üˆt‹9˜Œ>à×(Ñ(¨Ó.ˆEß‹sÑ-©Ó-�s�sŠsÑ-©Ó-×-Ò-ØŸ™›�ØˆLÜˆt‹9�qŒ=à˜A•wˆHØ˜"•XˆFä�8‹}˜qÔ Ø"×6Ñ6°x·~±~Ó7GÓH‘ð (�Ø×,Ñ,¨VÓ4ˆIØ!*�L‰L˜ÑØ—H‘H˜kÐ5Ó6ˆEß‹sÑ-©Ó-�s�sŠsÑ-©Ó-×-Ò-ØŸ™›�ØˆLÙr   c                ó&  € V'       d   WP                   9   d   V# WP                  9  dV   RV P                   2pW P                  V&   V ;P                  ^,          un        W P                  V&   V P	                  V4       V P                  V,          # )ztObfuscate the short name of the host with an incremented counter
based on the total number of obfuscated host names
r"   )Ú	skip_keysrE   r(   r%   Úadd_regex_item)r   rd   Úob_hosts   && r   r_   Ú"SoSHostnameMap.sanitize_short_nameÐ   ss   € ÷ ˜8§~¡~Ô5ØˆOØŸ<™<Ô'Ø˜TŸ_™_Ð-Ð.ˆGØ#*�J‰J�xÑ Ø�OŠO˜qÕ �OØ%,�L‰L˜Ñ"Ø×Ñ Ô)Ø�|‰|˜HÕ%Ð%r   c                óœ  € V P                    FB  p\        P                  ! VRP                  V4      4      '       g   K1  RP                  V4      u # 	  VR,          P	                  4       pRP                  V^ R 4      P	                  4       pV P                  V4      pRP                  WS.4      pWPP                  RP                  V4      &   V# )zUObfuscate the domainname, broken out into subdomains. Top-level
domains are ignored.
r	   r9   )Úignore_matchesr   Úmatchr   rF   Ú_new_obfuscated_domainrE   )r   r#   Ú_skipÚ
top_domainrc   rf   s   &&    r   r`   ÚSoSHostnameMap.sanitize_domainÞ   sª   € ð ×(Ô(ˆEä�xŠx˜˜sŸx™x¨Ó/×0Ô0Ø—x‘x Ó'Ò'ñ )ð ˜B•Z×%Ñ%Ó'ˆ
Ø—‘˜  "˜Ó&×,Ñ,Ó.ˆØ×/Ñ/°Ó6ˆ	Ø—H‘H˜iÐ4Ó5ˆ	Ø)2�‰�S—X‘X˜fÓ%Ñ&ØÐr   c                ó²   € WP                   9  d6   RV P                   2V P                   V&   V ;P                  ^,          un        V P                   V,          # )zDGenerate an obfuscated domain for each subdomain name given
        Úobfuscateddomain)r*   r+   )r   rc   s   &&r   rr   Ú%SoSHostnameMap._new_obfuscated_domainí   sJ   € ð Ÿ™Ô%Ø%5°d×6GÑ6GÐ5HÐ#IˆD�M‰M˜%Ñ Ø×Ò Õ"ÕØ�}‰}˜UÕ#Ð#r   )r+   r(   )Ú	localhostz.*localdomain.*z^com..*)
z.yamlz.ymlz.crtz.keyz.pemz.logz.repoz.rulesz.confz.cfg)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__rp   rk   rG   Úignore_short_itemsÚmatch_full_words_onlyr(   r+   r*   r%   r   r   r   r.   r<   rI   rh   r_   r`   rr   Ú__static_attributes__Ú__classdictcell__Ú__classcell__)r   Ú__classdict__s   @@r   r   r      s‚   ù‡ € ñò€Nð 	Øð€Ið
-€Jð ÐØ ÐØ€JØ€LØ€HØ€Eõ.ò7òòò(õ ;'òzò@&ò÷$ò $r   r   )r   Úsos.cleaner.mappingsr   r   r   r   r   Ú<module>r†      s   ðó 
å 'ôc$�Vö c$r   