晋太元中,武陵人捕鱼为业。缘溪行,忘路之远近。忽逢桃花林,夹岸数百步,中无杂树,芳草鲜美,落英缤纷。渔人甚异之,复前行,欲穷其林。 林尽水源,便得一山,山有小口,仿佛若有光。便舍船,从口入。初极狭,才通人。复行数十步,豁然开朗。土地平旷,屋舍俨然,有良田、美池、桑竹之属。阡陌交通,鸡犬相闻。其中往来种作,男女衣着,悉如外人。黄发垂髫,并怡然自乐。 见渔人,乃大惊,问所从来。具答之。便要还家,设酒杀鸡作食。村中闻有此人,咸来问讯。自云先世避秦时乱,率妻子邑人来此绝境,不复出焉,遂与外人间隔。问今是何世,乃不知有汉,无论魏晋。此人一一为具言所闻,皆叹惋。余人各复延至其家,皆出酒食。停数日,辞去。此中人语云:“不足为外人道也。”(间隔 一作:隔绝) 既出,得其船,便扶向路,处处志之。及郡下,诣太守,说如此。太守即遣人随其往,寻向所志,遂迷,不复得路。 南阳刘子骥,高尚士也,闻之,欣然规往。未果,寻病终。后遂无问津者。
| DIR:/lib/python3.6/site-packages/up2date_client/ |
| Current File : //lib/python3.6/site-packages/up2date_client/clpwd.py |
import pwd
import os
class ClPwd:
class NoSuchUserException(Exception):
def __init__(self, user):
Exception.__init__(self, "No such user (%s)" % (user,))
def __init__(self, min_uid = None):
self._user_key_map = {}
self._uid_key_map = {}
self._user_full_map = {}
self._uid_full_map = {}
if min_uid is None:
self._min_uid = self.get_sys_min_uid(500)
else:
self._min_uid = min_uid
def get_user_dict(self):
self._load_passwd_database()
return self._user_key_map
def get_uid_dict(self):
self._load_passwd_database()
return self._uid_key_map
def get_user_full_dict(self):
self._load_passwd_database()
return self._user_full_map
def get_uid_full_dict(self):
self._load_passwd_database()
return self._uid_full_map
def get_pw_by_name(self, user):
"""
Return pw_entry for user
"""
try:
return self.get_user_full_dict()[user]
except KeyError:
raise ClPwd.NoSuchUserException(user)
def get_pw_by_uid(self, uid):
"""
Return list of passwd entries for uid
"""
try:
return self.get_uid_full_dict()[uid]
except KeyError:
raise ClPwd.NoSuchUserException(uid)
def get_uid(self, user):
"""
Returns uid for user
"""
try:
return self.get_user_full_dict()[user].pw_uid
except KeyError:
raise ClPwd.NoSuchUserException(user)
def get_homedir(self, user):
"""
Returns homedir for a user
@param user: string
@return: string
"""
try:
return self.get_user_full_dict()[user].pw_dir
except KeyError:
raise ClPwd.NoSuchUserException(user)
def _load_passwd_database(self):
"""
Loads the passwd database and fills user_to_uid and user_to_homedir maps
"""
if not self._uid_full_map:
for entry in pwd.getpwall():
self._user_full_map[entry.pw_name] = entry
if entry.pw_uid not in self._uid_full_map:
self._uid_full_map[entry.pw_uid] = []
self._uid_full_map[entry.pw_uid].append(entry)
if entry.pw_uid >= self._min_uid:
self._user_key_map[entry.pw_name] = entry
if entry.pw_uid not in self._uid_key_map:
self._uid_key_map[entry.pw_uid] = []
self._uid_key_map[entry.pw_uid].append(entry)
def get_names(self, uid):
"""
Return names of users with uid specified
@param uid: int
@return: list of strings
"""
try:
entries = self.get_uid_full_dict()[uid]
except KeyError:
raise ClPwd.NoSuchUserException(uid)
return [entry.pw_name for entry in entries]
def get_sys_min_uid(self, def_min_uid = 500):
"""
Return system defined MIN_UID from /etc/login.def or def_min_uid
@param def_min_uid: int
@return: MIN_UID: int
"""
LOGIN_DEF_FILE = '/etc/login.defs'
if (os.path.exists(LOGIN_DEF_FILE)):
with open(LOGIN_DEF_FILE, 'r') as lines:
for line in lines:
if line.startswith('UID_MIN'):
try:
return int(line.split('UID_MIN')[1].strip())
except ValueError:
pass
return def_min_uid
|