From d429d92186b039e720ecca0723fa56f44e8e65e8 Mon Sep 17 00:00:00 2001 From: Julien Cristau Date: Thu, 10 Oct 2019 21:50:29 +0200 Subject: [PATCH] ud-generate: use subprocess.Popen instead of os.popen in GenCDB. --- debian/changelog | 1 + ud-generate | 26 +++++++++++--------------- 2 files changed, 12 insertions(+), 15 deletions(-) diff --git a/debian/changelog b/debian/changelog index e6df2bb..410485d 100644 --- a/debian/changelog +++ b/debian/changelog @@ -13,6 +13,7 @@ userdir-ldap (0.3.97) UNRELEASED; urgency=medium [ Julien Cristau ] * ud-mailgate: don't let punycode through. + * ud-generate: use subprocess.Popen instead of os.popen in GenCDB. -- Peter Palfrader Sat, 06 Apr 2019 22:04:34 +0200 diff --git a/ud-generate b/ud-generate index 97d003e..adc1436 100755 --- a/ud-generate +++ b/ud-generate @@ -645,28 +645,24 @@ def GenForward(accounts, File): Done(File, F, None) def GenCDB(accounts, File, key): - Fdb = None + prefix = ["/usr/bin/eatmydata"] if os.path.exists('/usr/bin/eatmydata') else [] + # nothing else does the fsync stuff, so why do it here? + Fdb = subprocess.Popen(prefix + ["cdbmake", File, "%s.tmp" % File], + preexec_fn=lambda: os.umask(0022), + stdin=subprocess.PIPE) try: - OldMask = os.umask(0022) - # nothing else does the fsync stuff, so why do it here? - prefix = "/usr/bin/eatmydata " if os.path.exists('/usr/bin/eatmydata') else '' - Fdb = os.popen("%scdbmake %s %s.tmp"%(prefix, File, File), "w") - os.umask(OldMask) - # Write out the email address for each user for a in accounts: if not key in a: continue value = a[key] user = a['uid'] - Fdb.write("+%d,%d:%s->%s\n" % (len(user), len(value), user, value)) + Fdb.stdin.write("+%d,%d:%s->%s\n" % (len(user), len(value), user, value)) - Fdb.write("\n") - # Oops, something unspeakable happened. - except: - Fdb.close() - raise - if Fdb.close() != None: - raise "cdbmake gave an error" + Fdb.stdin.write("\n") + finally: + Fdb.stdin.close() + if Fdb.wait() != 0: + raise Exception("cdbmake gave an error") def GenDBM(accounts, File, key): Fdb = None -- 2.20.1