a ‡e @s&dZddlZddlZGdddZdS)6Handles caching user and group database info in memoryNc@sbeZdZdZedddZeejdddZee j ddd Z e ed d d Z e ed ddZdS)IDCacher)rolecCs@i|_i|_ddi|_ddi|_|dkr<|d|ddS)NrrootZWP3ZnobodyZmail)_grps_pwds _uid2name _gid2namegetgrnam)selfrr "./usr/lib/fixperms/fixperms_ids.py__init__ s   zIDCache.__init__)namereturnc Csz |j|WStyYn0zt|}Wn6tyd}ztd|d|WYd}~n d}~00||j|<||j|j<|S)zLookup 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)rKeyErrorpwdgetpwnamrZpw_uidr rvalexcr r r rs   (  zIDCache.getpwnamc Csz |j|WStyYn0zt|}Wn6tyd}ztd|d|WYd}~n d}~00||j|<||j|j<|S)zLookup 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)rrgrpr r Zgr_gidrr r r r -s   (  zIDCache.getgrnam)uidrcCs|dks Jz |j|WSty*Yn0zt|}Wn*tydt||j|<|j|YS0|j|j|<||j|j<|j|S)zLookup 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 )rrrgetpwuidstrpw_namer)r rrr r r uid_labelEs      zIDCache.uid_label)gidrcCs|dks Jz |j|WSty*Yn0zt|}Wn*tydt||j|<|j|YS0|j|j|<||j|j<|j|S)zLookup 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 rrgetgrgidrgr_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