a tU~h ã@s&dZddlZddlZGdd„dƒZdS)ú6Handles caching user and group database info in memoryéNc@sbeZdZdZedœdd„Zeejdœdd„Zee j dœdd „Z e ed œd d „Z e ed œdd„ZdS)ÚIDCacher)ÚrolecCs@i|_i|_ddi|_ddi|_|dkr<| d¡| d¡dS)NrÚrootZWP3ZnobodyZmail)Ú_grpsÚ_pwdsÚ _uid2nameÚ _gid2nameÚgetgrnam)Úselfr©r ú"./usr/lib/fixperms/fixperms_ids.pyÚ__init__ s   zIDCache.__init__)ÚnameÚreturnc Cs€z |j|WStyYn0zt |¡}Wn6tyd}ztd|›dƒ|‚WYd}~n d}~00||j|<||j|j<|S)zîLookup and cache a struct_passwd by name Args: name (str): user name Raises: KeyError: user not found in /etc/passwd Returns: pwd.struct_passwd: pwd.getpwnam() result úThe z user is missingN)rÚKeyErrorÚpwdÚgetpwnamrZpw_uid©r rÚvalÚexcr r r rs   (  zIDCache.getpwnamc Cs€z |j|WStyYn0zt |¡}Wn6tyd}ztd|›dƒ|‚WYd}~n d}~00||j|<||j|j<|S)zîLookup and cache a struct_group by name Args: name (str): group name Raises: KeyError: group not found in /etc/groups Returns: grp.struct_group: grp.getgrnam() result rz group is missingN)rrÚgrpr r Zgr_gidrr r r r -s   (  zIDCache.getgrnam)ÚuidrcCsˆ|dks J‚z |j|WSty*Yn0zt |¡}Wn*tydt|ƒ|j|<|j|YS0|j|j|<||j|j<|j|S)zºLookup and cache a user name by UID Args: uid (int): user ID Returns: str: user name to display, or string of the uid if it was missing éÿÿÿÿ)rrrÚgetpwuidÚstrÚpw_namer)r rrr r r Ú uid_labelEs      zIDCache.uid_label)ÚgidrcCsˆ|dks J‚z |j|WSty*Yn0zt |¡}Wn*tydt|ƒ|j|<|j|YS0|j|j|<||j|j<|j|S)z½Lookup and cache a group name by GID Args: gid (int): group ID Returns: str: group name to display, or string of the gid if it was missing r)r rrÚgetgrgidrÚgr_namer)r rrr r r Ú gid_label\s      zIDCache.gid_labelN)Ú__name__Ú __module__Ú __qualname__Ú__doc__rrrZ struct_passwdrrZ struct_groupr Úintrr"r r r r rs  r)r&rrrr r r r Ús