move code from borg.helpers.usergroup to borg.platform.posix

This commit is contained in:
Emmo Emminghaus 2018-11-10 21:43:45 +01:00
parent 78a3f2475e
commit b997d5ba5b
9 changed files with 66 additions and 59 deletions

View File

@ -29,7 +29,7 @@ from .helpers import Manifest
from .helpers import hardlinkable
from .helpers import ChunkIteratorFileWrapper, open_item
from .helpers import Error, IntegrityError, set_ec
from .helpers import uid2user, user2uid, gid2group, group2gid
from .platform import uid2user, user2uid, gid2group, group2gid
from .helpers import parse_timestamp, to_localtime
from .helpers import OutputTimestamp, format_timedelta, format_file_size, file_status, FileSize
from .helpers import safe_encode, safe_decode, make_path_safe, remove_surrogates

View File

@ -16,7 +16,6 @@ from .parseformat import * # NOQA
from .process import * # NOQA
from .progress import * # NOQA
from .time import * # NOQA
from .usergroup import * # NOQA
from .yes import * # NOQA
from .msgpack import is_slow_msgpack, int_to_bigint, bigint_to_int, get_limited_unpacker

View File

@ -19,7 +19,6 @@ logger = create_logger()
from .errors import Error
from .fs import get_keys_dir
from .time import OutputTimestamp, format_time, to_localtime, safe_timestamp, safe_s
from .usergroup import uid2user
from .. import __version__ as borg_version
from .. import __version_tuple__ as borg_version_tuple
from ..constants import * # NOQA
@ -179,7 +178,7 @@ def format_line(format, data):
def replace_placeholders(text):
"""Replace placeholders in text with their values."""
from ..platform import fqdn, hostname
from ..platform import fqdn, hostname, getosusername
current_time = datetime.now(timezone.utc)
data = {
'pid': os.getpid(),
@ -188,7 +187,7 @@ def replace_placeholders(text):
'hostname': hostname,
'now': DatetimeWrapper(current_time.astimezone(None)),
'utcnow': DatetimeWrapper(current_time),
'user': uid2user(os.getuid(), os.getuid()),
'user': getosusername(),
'uuid4': str(uuid.uuid4()),
'borgversion': borg_version,
'borgmajor': '%d' % borg_version_tuple[:1],

View File

@ -1,50 +0,0 @@
import grp
import pwd
from functools import lru_cache
@lru_cache(maxsize=None)
def uid2user(uid, default=None):
try:
return pwd.getpwuid(uid).pw_name
except KeyError:
return default
@lru_cache(maxsize=None)
def user2uid(user, default=None):
try:
return user and pwd.getpwnam(user).pw_uid
except KeyError:
return default
@lru_cache(maxsize=None)
def gid2group(gid, default=None):
try:
return grp.getgrgid(gid).gr_name
except KeyError:
return default
@lru_cache(maxsize=None)
def group2gid(group, default=None):
try:
return group and grp.getgrnam(group).gr_gid
except KeyError:
return default
def posix_acl_use_stored_uid_gid(acl):
"""Replace the user/group field with the stored uid/gid
"""
from .parseformat import safe_decode, safe_encode
entries = []
for entry in safe_decode(acl).split('\n'):
if entry:
fields = entry.split(':')
if len(fields) == 4:
entries.append(':'.join([fields[0], fields[3], fields[2]]))
else:
entries.append(entry)
return safe_encode('\n'.join(entries))

View File

@ -19,6 +19,7 @@ if not sys.platform.startswith(('win32', )):
from .posix import process_alive, local_pid_alive
# posix swidth implementation works for: linux, freebsd, darwin, openindiana, cygwin
from .posix import swidth
from .posix import uid2user, user2uid, gid2group, group2gid, getosusername
if sys.platform.startswith('linux'): # pragma: linux only
from .linux import API_VERSION as OS_API_VERSION

View File

@ -2,7 +2,7 @@ import os
from libc.stdint cimport uint32_t
from ..helpers import user2uid, group2gid
from .posix import user2uid, group2gid
from ..helpers import safe_decode, safe_encode
from .xattr import _listxattr_inner, _getxattr_inner, _setxattr_inner, split_string0

View File

@ -1,6 +1,6 @@
import os
from ..helpers import posix_acl_use_stored_uid_gid
from .posix import posix_acl_use_stored_uid_gid
from ..helpers import safe_encode, safe_decode
from .xattr import _listxattr_inner, _getxattr_inner, _setxattr_inner, split_lstring

View File

@ -3,8 +3,8 @@ import re
import stat
import subprocess
from ..helpers import posix_acl_use_stored_uid_gid
from ..helpers import user2uid, group2gid
from .posix import posix_acl_use_stored_uid_gid
from .posix import user2uid, group2gid
from ..helpers import safe_decode, safe_encode
from .base import SyncFile as BaseSyncFile
from .base import safe_fadvise

View File

@ -1,5 +1,10 @@
import errno
import os
# begin moved form helpers/usergroup.py
import grp
import pwd
from functools import lru_cache
# end moved
from libc.errno cimport errno as c_errno
@ -61,3 +66,56 @@ def local_pid_alive(pid):
return False
# Any other error (eg. permissions) means that the process ID refers to a live process.
return True
# begin moved form helpers/usergroup.py
@lru_cache(maxsize=None)
def uid2user(uid, default=None):
try:
return pwd.getpwuid(uid).pw_name
except KeyError:
return default
@lru_cache(maxsize=None)
def user2uid(user, default=None):
try:
return user and pwd.getpwnam(user).pw_uid
except KeyError:
return default
@lru_cache(maxsize=None)
def gid2group(gid, default=None):
try:
return grp.getgrgid(gid).gr_name
except KeyError:
return default
@lru_cache(maxsize=None)
def group2gid(group, default=None):
try:
return group and grp.getgrnam(group).gr_gid
except KeyError:
return default
def posix_acl_use_stored_uid_gid(acl):
"""Replace the user/group field with the stored uid/gid
"""
from ..helpers import safe_decode, safe_encode
entries = []
for entry in safe_decode(acl).split('\n'):
if entry:
fields = entry.split(':')
if len(fields) == 4:
entries.append(':'.join([fields[0], fields[3], fields[2]]))
else:
entries.append(entry)
return safe_encode('\n'.join(entries))
#end moved
def getosusername():
"""Return the os user name."""
return uid2user(os.getuid(), os.getuid())