From c50e737612b8c10239587e43dee3e8bb47cbfa31 Mon Sep 17 00:00:00 2001 From: Michael E Brown Date: Thu, 29 Nov 2007 14:45:26 -0600 Subject: add dep on python-ctypes so it will run on FC6. remove attempt at non-ctypes compatibility --- src/py-libs/uid.py | 114 ++++++++++++++++++++++++++++++++++++++++++ src/py-libs/uid/__init__.py | 10 ---- src/py-libs/uid/uid.py | 114 ------------------------------------------ src/py-libs/uid/uid_compat.py | 72 -------------------------- 4 files changed, 114 insertions(+), 196 deletions(-) create mode 100644 src/py-libs/uid.py delete mode 100644 src/py-libs/uid/__init__.py delete mode 100644 src/py-libs/uid/uid.py delete mode 100644 src/py-libs/uid/uid_compat.py (limited to 'src') diff --git a/src/py-libs/uid.py b/src/py-libs/uid.py new file mode 100644 index 0000000..14d0e39 --- /dev/null +++ b/src/py-libs/uid.py @@ -0,0 +1,114 @@ +# vim:expandtab:autoindent:tabstop=4:shiftwidth=4:filetype=python:textwidth=0: +# License: GPL2 or later see COPYING +# Written by Michael Brown +# Copyright (C) 2007 Michael E Brown + +# python library imports +import logging +import os + +# our imports +from mock.trace_decorator import traceLog + +# set up logging +log = logging.getLogger("mock.uid") + +# class +class uidManager(object): + @traceLog(log) + def __init__(self, unprivUid=-1, unprivGid=-1): + self.privStack = [] + self.unprivUid = unprivUid + self.unprivGid = unprivGid + + @traceLog(log) + def becomeUser(self, uid, gid=-1): + # save current ruid, euid, rgid, egid + self._push() + self._becomeUser(uid, gid) + + @traceLog(log) + def dropPrivsTemp(self): + # save current ruid, euid, rgid, egid + self._push() + self._becomeUser(self.unprivUid, self.unprivGid) + + @traceLog(log) + def restorePrivs(self): + # back to root first + self._elevatePrivs() + + # then set saved + privs = self.privStack.pop() + os.setregid(privs['rgid'], privs['egid']) + setresuid(privs['ruid'], privs['euid']) + + @traceLog(log) + def dropPrivsForever(self): + self._elevatePrivs() + os.setregid(self.unprivGid, self.unprivGid) + os.setreuid(self.unprivUid, self.unprivUid) + + @traceLog(log) + def _push(self): + # save current ruid, euid, rgid, egid + self.privStack.append({ + "ruid": os.getuid(), + "euid": os.geteuid(), + "rgid": os.getgid(), + "egid": os.getegid(), + }) + + @traceLog(log) + def _elevatePrivs(self): + setresuid(0, 0, 0) + os.setregid(0, 0) + + @traceLog(log) + def _becomeUser(self, uid, gid=None): + self._elevatePrivs() + if gid is not None: + os.setregid(gid, gid) + setresuid(uid, uid, 0) + +# python doesnt have native versions of these. :( + +import ctypes +import errno +_libc = ctypes.cdll.LoadLibrary("libc.so.6") +_errno = ctypes.c_int.in_dll(_libc, "errno") + +def getresuid(): + ruid = ctypes.c_long() + euid = ctypes.c_long() + suid = ctypes.c_long() + res = _libc.getresuid(ctypes.byref(ruid), ctypes.byref(euid), ctypes.byref(suid)) + if res: + raise OSError(_errno.value, os.strerror(_errno.value)) + return (ruid.value, euid.value, suid.value) + +def setresuid(ruid=-1, euid=-1, suid=-1): + ruid = ctypes.c_long(ruid) + euid = ctypes.c_long(euid) + suid = ctypes.c_long(suid) + res = _libc.setresuid(ruid, euid, suid) + if res: + raise OSError(_errno.value, os.strerror(_errno.value)) + +def getresgid(): + rgid = ctypes.c_long() + egid = ctypes.c_long() + sgid = ctypes.c_long() + res = _libc.getresgid(ctypes.byref(rgid), ctypes.byref(egid), ctypes.byref(sgid)) + if res: + raise OSError(_errno.value, os.strerror(_errno.value)) + return (rgid.value, egid.value, sgid.value) + +def setresgid(rgid=-1, egid=-1, sgid=-1): + rgid = ctypes.c_long(rgid) + egid = ctypes.c_long(egid) + sgid = ctypes.c_long(sgid) + res = _libc.setresgid(rgid, egid, sgid) + if res: + raise OSError(_errno.value, os.strerror(_errno.value)) + diff --git a/src/py-libs/uid/__init__.py b/src/py-libs/uid/__init__.py deleted file mode 100644 index 4e93033..0000000 --- a/src/py-libs/uid/__init__.py +++ /dev/null @@ -1,10 +0,0 @@ - -import logging -log = logging.getLogger("mock.uid") - -try: - import uid - uidManager = uid.uidManager -except ImportError, e: - import uid_compat - uidManager = uid_compat.uidManager diff --git a/src/py-libs/uid/uid.py b/src/py-libs/uid/uid.py deleted file mode 100644 index 14d0e39..0000000 --- a/src/py-libs/uid/uid.py +++ /dev/null @@ -1,114 +0,0 @@ -# vim:expandtab:autoindent:tabstop=4:shiftwidth=4:filetype=python:textwidth=0: -# License: GPL2 or later see COPYING -# Written by Michael Brown -# Copyright (C) 2007 Michael E Brown - -# python library imports -import logging -import os - -# our imports -from mock.trace_decorator import traceLog - -# set up logging -log = logging.getLogger("mock.uid") - -# class -class uidManager(object): - @traceLog(log) - def __init__(self, unprivUid=-1, unprivGid=-1): - self.privStack = [] - self.unprivUid = unprivUid - self.unprivGid = unprivGid - - @traceLog(log) - def becomeUser(self, uid, gid=-1): - # save current ruid, euid, rgid, egid - self._push() - self._becomeUser(uid, gid) - - @traceLog(log) - def dropPrivsTemp(self): - # save current ruid, euid, rgid, egid - self._push() - self._becomeUser(self.unprivUid, self.unprivGid) - - @traceLog(log) - def restorePrivs(self): - # back to root first - self._elevatePrivs() - - # then set saved - privs = self.privStack.pop() - os.setregid(privs['rgid'], privs['egid']) - setresuid(privs['ruid'], privs['euid']) - - @traceLog(log) - def dropPrivsForever(self): - self._elevatePrivs() - os.setregid(self.unprivGid, self.unprivGid) - os.setreuid(self.unprivUid, self.unprivUid) - - @traceLog(log) - def _push(self): - # save current ruid, euid, rgid, egid - self.privStack.append({ - "ruid": os.getuid(), - "euid": os.geteuid(), - "rgid": os.getgid(), - "egid": os.getegid(), - }) - - @traceLog(log) - def _elevatePrivs(self): - setresuid(0, 0, 0) - os.setregid(0, 0) - - @traceLog(log) - def _becomeUser(self, uid, gid=None): - self._elevatePrivs() - if gid is not None: - os.setregid(gid, gid) - setresuid(uid, uid, 0) - -# python doesnt have native versions of these. :( - -import ctypes -import errno -_libc = ctypes.cdll.LoadLibrary("libc.so.6") -_errno = ctypes.c_int.in_dll(_libc, "errno") - -def getresuid(): - ruid = ctypes.c_long() - euid = ctypes.c_long() - suid = ctypes.c_long() - res = _libc.getresuid(ctypes.byref(ruid), ctypes.byref(euid), ctypes.byref(suid)) - if res: - raise OSError(_errno.value, os.strerror(_errno.value)) - return (ruid.value, euid.value, suid.value) - -def setresuid(ruid=-1, euid=-1, suid=-1): - ruid = ctypes.c_long(ruid) - euid = ctypes.c_long(euid) - suid = ctypes.c_long(suid) - res = _libc.setresuid(ruid, euid, suid) - if res: - raise OSError(_errno.value, os.strerror(_errno.value)) - -def getresgid(): - rgid = ctypes.c_long() - egid = ctypes.c_long() - sgid = ctypes.c_long() - res = _libc.getresgid(ctypes.byref(rgid), ctypes.byref(egid), ctypes.byref(sgid)) - if res: - raise OSError(_errno.value, os.strerror(_errno.value)) - return (rgid.value, egid.value, sgid.value) - -def setresgid(rgid=-1, egid=-1, sgid=-1): - rgid = ctypes.c_long(rgid) - egid = ctypes.c_long(egid) - sgid = ctypes.c_long(sgid) - res = _libc.setresgid(rgid, egid, sgid) - if res: - raise OSError(_errno.value, os.strerror(_errno.value)) - diff --git a/src/py-libs/uid/uid_compat.py b/src/py-libs/uid/uid_compat.py deleted file mode 100644 index abece5e..0000000 --- a/src/py-libs/uid/uid_compat.py +++ /dev/null @@ -1,72 +0,0 @@ -# vim:expandtab:autoindent:tabstop=4:shiftwidth=4:filetype=python:textwidth=0: -# License: GPL2 or later see COPYING -# Written by Michael Brown -# Copyright (C) 2007 Michael E Brown - -# python library imports -import logging -import os - -# our imports -from mock.trace_decorator import traceLog - -# set up logging -log = logging.getLogger("mock.uid") - -# class -class uidManager(object): - @traceLog(log) - def __init__(self, unprivUid=-1, unprivGid=-1): - self.privStack = [] - self.unprivUid = unprivUid - self.unprivGid = unprivGid - - @traceLog(log) - def becomeUser(self, uid, gid=-1): - # save current ruid, euid, rgid, egid - self._push() - self._becomeUser(uid, gid) - - @traceLog(log) - def dropPrivsTemp(self): - # save current ruid, euid, rgid, egid - self._push() - self._becomeUser(self.unprivUid, self.unprivGid) - - @traceLog(log) - def restorePrivs(self): - # back to root first - self._elevatePrivs() - - # then set saved - privs = self.privStack.pop() - os.setregid(privs[2], privs[3]) - os.setreuid(privs[0], privs[1]) - - @traceLog(log) - def dropPrivsForever(self): - self._elevatePrivs() - os.setregid(self.unprivGid, self.unprivGid) - os.setreuid(self.unprivUid, self.unprivUid) - - @traceLog(log) - def _push(self): - # save current ruid, euid, rgid, egid - self.privStack.append([ - os.getuid(), - os.geteuid(), - os.getgid(), - os.getegid(), - ]) - - @traceLog(log) - def _elevatePrivs(self): - os.setreuid(0, 0) - os.setregid(0, 0) - - @traceLog(log) - def _becomeUser(self, uid, gid=None): - self._elevatePrivs() - if gid is not None: - os.setregid(gid, gid) - os.setreuid(0, uid) -- cgit