PNG  IHDR;IDATxܻn0K )(pA 7LeG{ §㻢|ذaÆ 6lذaÆ 6lذaÆ 6lom$^yذag5bÆ 6lذaÆ 6lذa{ 6lذaÆ `}HFkm,mӪôô! x|'ܢ˟;E:9&ᶒ}{v]n&6 h_tڠ͵-ҫZ;Z$.Pkž)!o>}leQfJTu іچ\X=8Rن4`Vwl>nG^is"ms$ui?wbs[m6K4O.4%/bC%t Mז -lG6mrz2s%9s@-k9=)kB5\+͂Zsٲ Rn~GRC wIcIn7jJhۛNCS|j08yiHKֶۛkɈ+;SzL/F*\Ԕ#"5m2[S=gnaPeғL lذaÆ 6l^ḵaÆ 6lذaÆ 6lذa; _ذaÆ 6lذaÆ 6lذaÆ RIENDB` #!/usr/libexec/platform-python # # Copyright 2017 Peter Jones # # Distributed under terms of the GPLv3 license. """ mock plugin to make sure pesign and mockbuild users have the right uid and gid. """ from mockbuild.trace_decorator import getLog, traceLog import mockbuild.util requires_api_version = "1.1" @traceLog() def init(plugins, conf, buildroot): """ hello """ Pesign(plugins, conf, buildroot) def getuid(name): """ get a uid for a user name """ output = mockbuild.util.do(["getent", "passwd", "%s" % (name,)], returnOutput=1, printOutput=True) output = output.split(':') return output[2], output[3] def getgid(name): """ get a gid for a group name """ output = mockbuild.util.do(["getent", "group", "%s" % (name,)], returnOutput=1, printOutput=True) return output.split(':')[2] def newgroup(name, gid, rootdir): """ create a group with a gid """ getLog().info("creating group %s with gid %s" % (name, gid)) mockbuild.util.do(["groupadd", "-g", "%s" % (gid,), "-R", "%s" % (rootdir,), "%s" % (name,), ]) def newuser(name, uid, gid, rootdir): """ create a user with a uid """ getLog().info("creating user %s with uid %s" % (name, uid)) mockbuild.util.do(["useradd", "-u", "%s" % (uid,), "-g", "%s" % (gid,), "-R", "%s" % (rootdir,), "%s" % (name,)]) class Pesign(object): """ Creates some stuff in our mock root """ # pylint: disable=too-few-public-methods @traceLog() def __init__(self, plugins, conf, buildroot): """ Effectively we're doing: getent group pesign >/dev/null || groupadd -r pesign getent passwd pesign >/dev/null || \ useradd -r -g pesign -d /var/run/pesign -s /sbin/nologin \ -c "Group for the pesign signing daemon" pesign """ self.buildroot = buildroot self.pesign_opts = conf self.config = buildroot.config self.state = buildroot.state self.users = {} self.groups = {} plugins.add_hook("postinit", self._pesignPostInitHook) @traceLog() def _pesignPostInitHook(self): """ find our uid and gid lists """ for user in self.pesign_opts['users']: uid, gid = getuid(user) self.users[user] = [user, uid, gid] for group in self.pesign_opts['groups']: gid = getgid(group) self.groups[group] = [group, gid] # create our users rootdir = self.buildroot.make_chroot_path() for name, gid in self.groups.values(): newgroup(name, gid, rootdir) for name, uid, gid in self.users.values(): newuser(name, uid, gid, rootdir) # -*- coding: utf-8 -*- # vim:fenc=utf-8:tw=75