diff options
author | Michael E Brown <mebrown@michaels-house.net> | 2007-10-22 18:26:39 -0500 |
---|---|---|
committer | Michael E Brown <mebrown@michaels-house.net> | 2007-10-22 18:26:39 -0500 |
commit | 85802d4720240b49b6186c61f3684f05d365e878 (patch) | |
tree | a2a3df265b64fc397343c23f2481bf54d8616e42 | |
parent | 378b496a2335c9f5ffbc7668ed882539383cbd45 (diff) | |
download | mock-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.cfg | 2 | ||||
-rwxr-xr-x | src/mock.py | 2 | ||||
-rw-r--r-- | src/py-libs/backend.py | 23 | ||||
-rw-r--r-- | src/py-libs/util.py | 4 |
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) |