a tU~hã@s`dZddlZddlmZmZmZddlZddlmZddl m Z ddl m Z Gdd„deƒZ dS) úFixperms class for CWPéN)ÚS_ISLNKÚS_ISREGÚS_ISDIR)ÚPermMap)ÚIDCache)ÚArgscsLeZdZdZeeedœ‡fdd„ Zddœ‡fdd„ Zd d „Z d d „Z ‡Z S) Ú CwpPermMapr)ÚidsÚargsÚusercs:tƒj|||tt |¡ ¡ƒd|dfd|j|j}}| dd||f¡| ddd¡| d d ||f¡| d d ||f¡| d d||f¡| dd||f¡| dd||f¡| ddd¡| dd||f¡| dd||f¡| dd||f¡| ddd¡| ddd¡| dd||f¡| dd||f¡dS)NièZnobody)r r r Z all_docrootsZ docroot_chmodZ docroot_chownz\/\.(?:pgpass|my\.cnf)$)é€Nz\/\.imh(?:$|\/))é¤éí)rrz\/\.ssh(?:$|\/))r éÀz\/\.pki(?:$|\/))Niàz\/.*\.(?:pl|cgi)$)rNú$)NéÉzx\/.+\/(?:(?:wp-config|conf|[cC]onfig|[cC]onfiguration|LocalSettings|settings)(?:\.inc)?\.php|local\.xml|mt-config\.cgi)$)i Nz\/cwp_stats\/.+\.html)rNz\/tmp\/session$)Niéz\/tmp\/session\/sess_.+z \/\.conf$)Nrz/\.conf/\..+\.sqlite$z)/.conf/(?:cache|reseller)(?:\/.+\.json)?$z\/.softaculous(?:$|\/))r rz\/) ÚsuperÚ__init__ÚlistÚcwpZ get_docrootsÚvaluesÚuidÚgidZadd_rule)Úselfr r r rr©Ú __class__©ú"./usr/lib/fixperms/fixperms_cwp.pyrs<ú ûÿzCwpPermMap.__init__N)Úreturncstƒ ¡|jjs| ¡dS)N)rÚfixpermsr Z skip_mailÚ mailperms)rrrrr @s zCwpPermMap.fixpermsccs.tj|jddD]}| t|ƒ¡EdHqdS)z)Iterate all paths in the user's mail dirsT)Z check_existsN)rZ vmail_pathsr ÚwalkÚstr)rZtop_dirrrrÚ iter_vmailEszCwpPermMap.iter_vmailcCsT|j}|j d¡j}|j d¡j}zt d¡}Wn:tyj|j   d¡tj dddt  d||¡Yn 0|  d|||¡|  d|d¡| ¡D]¼\}}t|jƒr´|j   d|¡q’t|jƒrÄd }nlt|jƒr tj |¡ d ¡rèd }nd }|j|jkr0|jd kr0|j ||||f|¡q’n|j   d|¡q’|  ||||¡|  |||¡q’dS)z)Fix permissions of a CWP user's mail dirsZmailZvmailz /var/vmailz$/var/vmail was missing; creating it.iø)Úmodeiýz!Skipping unexpected symlink at %srzdovecot-uidvalidity.i$r éz#Skipping unexpected path type at %sN)rr ZgetgrnamZgr_gidÚgetpwnamZpw_uidÚosÚlstatÚFileNotFoundErrorÚlogZwarningÚmkdirÚlchownÚlchmodr$rÚst_moderrÚpathÚbasenameÚ startswithÚst_uidÚst_nlinkZ hard_linksÚadd)rrrZ vmail_uidÚstatr0r%rrrr!Js8     zCwpPermMap.mailperms) Ú__name__Ú __module__Ú __qualname__Ú__doc__rrr#rr r$r!Ú __classcell__rrrrr s 2r )r:r(r6rrrrZ fixperms_baserZ fixperms_idsrZ fixperms_clirr rrrrÚs