self.copyout(file_in, file_out)
- def get_pwuid(self, uid):
- users = {}
-
- f = open(self.chrootPath("/etc/passwd"))
- for line in f.readlines():
- m = re.match(r"^([a-z][a-z0-9_\-]{,30}):x:(\d+):(\d+):(.*):(.*)$", line)
- if not m:
- continue
-
- item = {
- "name" : m.group(1),
- "uid" : int(m.group(2)),
- "gid" : int(m.group(3)),
- "home" : m.group(4),
- "shell" : m.group(5),
- }
-
- assert not users.has_key(item["uid"])
- users[item["uid"]] = item
-
- f.close()
-
- return users.get(uid, None)
-
- def get_grgid(self, gid):
- groups = {}
-
- f = open(self.chrootPath("/etc/group"))
- for line in f.readlines():
- m = re.match(r"^([a-z][a-z0-9_\-]{,30}):x:(\d+):(.*)$", line)
- if not m:
- continue
-
- item = {
- "name" : m.group(1),
- "gid" : int(m.group(2)),
- }
-
- # XXX re-enable later
- #assert not groups.has_key(item["gid"])
- groups[item["gid"]] = item
-
- f.close()
-
- return groups.get(gid, None)
-
def extract(self, requires=None, build_deps=True):
"""
Gets a dependency set and extracts all packages
datafile = InnerTarFile(datafile)
for m in datafile.getmembers():
- # XXX need to check what to do with UID/GID
- logging.info(" %s %-8s %-8s %s %6s %s" % \
+ logging.debug(" %s %-8s %-8s %s %6s %s" % \
(tarfile.filemode(m.mode), m.uname, m.gname,
"%d-%02d-%02d %02d:%02d:%02d" % time.localtime(m.mtime)[:6],
util.format_size(m.size), m.name))
-
- info = m.get_info(tarfile.ENCODING, "strict")
-
- # Update uname.
- if hasattr(self, "builder"):
- pwuid = self.builder.get_pwuid(info["uid"])
- if not pwuid:
- logging.warning("UID '%d' not found. Using root.")
- info["uname"] = "root"
- else:
- info["uname"] = pwuid["name"]
-
- # Update gname.
- grgid = self.builder.get_grgid(info["gid"])
- if not grgid:
- logging.warning("GID '%d' not found. Using root.")
- info["gname"] = "root"
- else:
- info["gname"] = grgid["name"]
- else:
- # Files in the source packages always belong to root.
- info["uname"] = info["gname"] = "root"
f.write("%(name)-40s %(type)1s %(size)-10d %(uname)-10s %(gname)-10s %(mode)-6d %(mtime)-12d" \
- % info)
+ % m.get_info(tarfile.ENCODING, "strict"))
# Calculate SHA512 hash of regular files.
if m.isreg():