summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael E Brown <mebrown@michaels-house.net>2007-10-22 18:26:39 -0500
committerMichael E Brown <mebrown@michaels-house.net>2007-10-22 18:26:39 -0500
commit85802d4720240b49b6186c61f3684f05d365e878 (patch)
treea2a3df265b64fc397343c23f2481bf54d8616e42
parent378b496a2335c9f5ffbc7668ed882539383cbd45 (diff)
downloadmock-85802d4720240b49b6186c61f3684f05d365e878.tar.gz
mock-85802d4720240b49b6186c61f3684f05d365e878.tar.xz
mock-85802d4720240b49b6186c61f3684f05d365e878.zip
ensure we only use gid specified. chroot operations always change uid/gid to gid specified. fixes 'bad owner/group' message from rpm.
-rw-r--r--etc/defaults.cfg2
-rwxr-xr-xsrc/mock.py2
-rw-r--r--src/py-libs/backend.py23
-rw-r--r--src/py-libs/util.py4
4 files changed, 21 insertions, 10 deletions
diff --git a/etc/defaults.cfg b/etc/defaults.cfg
index 6f3e08b..e01040d 100644
--- a/etc/defaults.cfg
+++ b/etc/defaults.cfg
@@ -66,7 +66,5 @@
# config_opts['more_buildreqs'] = {}
# config_opts['macros']['Add_your_macro_name_here'] = "add macro value here"
# config_opts['files']['path/name/no/leading/slash'] = "put file contents here."
-# config_opts['chrootuser'] = 'mockbuild'
-# config_opts['chrootgroup'] = 'mockbuild'
# config_opts['chrootuid'] = os.getuid()
# config_opts['chrootgid'] = grp.getgrnam("mock")[2]
diff --git a/src/mock.py b/src/mock.py
index 12ac986..1133490 100755
--- a/src/mock.py
+++ b/src/mock.py
@@ -108,8 +108,6 @@ def setup_default_config_opts(config_opts):
config_opts['chroothome'] = '/builddir'
config_opts['log_config_file'] = 'logging.ini'
config_opts['rpmbuild_timeout'] = 0
- config_opts['chrootuser'] = 'mockbuild'
- config_opts['chrootgroup'] = 'mockbuild'
config_opts['chrootuid'] = os.getuid()
try:
config_opts['chrootgid'] = grp.getgrnam("mock")[2]
diff --git a/src/py-libs/backend.py b/src/py-libs/backend.py
index 0efe368..1f24955 100644
--- a/src/py-libs/backend.py
+++ b/src/py-libs/backend.py
@@ -57,8 +57,9 @@ class Root(object):
# config options
self.chrootuid = config['chrootuid']
- self.chrootuser = config['chrootuser']
- self.chrootgroup = config['chrootgroup']
+ self.chrootuser = 'mockbuild'
+ self.chrootgid = config['chrootgid']
+ self.chrootgroup = 'mockbuild'
self.yum_conf_content = config['yum.conf']
self.use_host_resolv = config['use_host_resolv']
self.chroot_file_contents = config['files']
@@ -325,6 +326,8 @@ class Root(object):
"rpm -Uvh --nodeps %s" % srpmChrootFilename,
chrootPath=self.rootdir,
uidManager=self.uidManager,
+ uid=self.chrootuid,
+ gid=self.chrootgid,
)
# rebuild srpm/rpm from SPEC file
@@ -339,8 +342,10 @@ class Root(object):
mock.util.do(
"rpmbuild -bs --target %s --nodeps %s" % (self.target_arch, chrootspec),
chrootPath=self.rootdir,
- uidManager=self.uidManager,
logger=self.build_log, timeout=timeout,
+ uidManager=self.uidManager,
+ uid=self.chrootuid,
+ gid=self.chrootgid,
)
rebuiltSrpmFile = glob.glob("%s/%s/SRPMS/*.src.rpm" % (self.rootdir, self.builddir))
@@ -360,6 +365,8 @@ class Root(object):
"rpmbuild -bb --target %s --nodeps %s" % (self.target_arch, chrootspec),
chrootPath=self.rootdir,
uidManager=self.uidManager,
+ uid=self.chrootuid,
+ gid=self.chrootgid,
logger=self.build_log, timeout=timeout,
)
@@ -441,9 +448,13 @@ class Root(object):
# safe and easy. blow away existing /builddir and completely re-create.
mock.util.rmtree(os.path.join(self.rootdir, self.homedir))
- self.doChroot('/usr/sbin/userdel -r %s' % self.chrootuser, raiseExc=False)
- self.doChroot('/usr/sbin/groupdel %s' % self.chrootgroup, raiseExc=False)
- self.doChroot('/usr/sbin/useradd -m -u %s -d %s %s' % (self.chrootuid, self.homedir, self.chrootuser), raiseExc=True)
+ dets = { 'uid': self.chrootuid, 'gid': self.chrootgid, 'user': self.chrootuser, 'group': self.chrootgroup, 'home': self.homedir }
+
+ self.doChroot('/usr/sbin/userdel -r %(user)s' % dets, raiseExc=False)
+ self.doChroot('/usr/sbin/groupdel %(group)s' % dets, raiseExc=False)
+
+ self.doChroot('/usr/sbin/groupadd -g %(gid)s %(group)s' % dets)
+ self.doChroot('/usr/sbin/useradd -m -u %(uid)s -g %(gid)s -d %(home)s -n %(user)s' % dets)
self.doChroot("perl -p -i -e 's/^(%s:)!!/$1/;' /etc/passwd" % (self.chrootuser), raiseExc=True)
@traceLog(moduleLog)
diff --git a/src/py-libs/util.py b/src/py-libs/util.py
index 8cd8b3f..8354d8f 100644
--- a/src/py-libs/util.py
+++ b/src/py-libs/util.py
@@ -258,6 +258,10 @@ def do(command, chrootPath=None, timeout=0, raiseExc=True, returnOutput=0, *args
if uidManager:
logger.debug("about to drop privs")
+ uid = kargs.get("uid", None)
+ gid = kargs.get("gid", None)
+ if uid is not None: uidManager.unprivUid=uid
+ if gid is not None: uidManager.unprivGid=gid
uidManager.dropPrivsForever()
child = popen2.Popen4(command)