a ‡e @s`dZddlZddlmZmZmZddlZddlmZddl m Z ddl m Z GdddeZ dS) Fixperms class for CWPN)S_ISLNKS_ISREGS_ISDIR)PermMap)IDCache)ArgscsLeZdZdZeeedfdd Zddfdd Zd d Z d d Z Z S) CwpPermMapr)idsargsusercs:tj|||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||fdS)NiZnobody)r r r Z all_docrootsZ docroot_chmodZ docroot_chownz\/\.(?:pgpass|my\.cnf)$)Nz\/\.imh(?:$|\/)))rrz\/\.ssh(?:$|\/))r z\/\.pki(?:$|\/))Niz\/.*\.(?:pl|cgi)$)rN$)Nzx\/.+\/(?:(?:wp-config|conf|[cC]onfig|[cC]onfiguration|LocalSettings|settings)(?:\.inc)?\.php|local\.xml|mt-config\.cgi)$)iNz\/cwp_stats\/.+\.html)rNz\/tmp\/session$)Niz\/tmp\/session\/sess_.+z \/\.conf$)Nrz/\.conf/\..+\.sqlite$z)/.conf/(?:cache|reseller)(?:\/.+\.json)?$z\/.softaculous(?:$|\/))r rz\/) super__init__listcwpZ get_docrootsvaluesuidgidZadd_rule)selfr r r rr __class__"./usr/lib/fixperms/fixperms_cwp.pyr s< zCwpPermMap.__init__N)returncst|jjs|dS)N)rfixpermsr 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 walkstr)rZtop_dirrrr iter_vmailDszCwpPermMap.iter_vmailcCs|j}|jdj}|D]\}}t|jr>|jd|qt |jrNd}nft |jrt j |drpd}nd}|j|jkr|jdkr|j||||f|qn|jd|q|||||||||qd S) z)Fix permissions of a CWP user's mail dirsZmailz!Skipping unexpected symlink at %srzdovecot-uidvalidity.i$r z#Skipping unexpected path type at %sN)rr ZgetgrnamZgr_gidr$rst_modelogZwarningrrospathbasename startswithst_uidst_nlinkZ hard_linksaddlchownlchmod)rrrstatr)moderrrr!Is&   zCwpPermMap.mailperms) __name__ __module__ __qualname____doc__rrr#rr r$r! __classcell__rrrrr s 2r )r6r(r1rrrrZ fixperms_baserZ fixperms_idsrZ fixperms_clirr rrrrs