# Copyright (c) 2003-2004 James Troup <troup@debian.org>
# Copyright (c) 2004-2005,7 Joey Schulze <joey@infodrom.org>
# Copyright (c) 2001-2007 Ryan Murray <rmurray@debian.org>
-# Copyright (c) 2008,2009,2010 Peter Palfrader <peter@palfrader.org>
+# Copyright (c) 2008,2009,2010,2011 Peter Palfrader <peter@palfrader.org>
# Copyright (c) 2008 Andreas Barth <aba@not.so.argh.org>
# Copyright (c) 2008 Mark Hymers <mhy@debian.org>
# Copyright (c) 2008 Luk Claes <luk@debian.org>
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
import string, re, time, ldap, getopt, sys, os, pwd, posix, socket, base64, sha, shutil, errno, tarfile, grp
+import lockfile
from userdir_ldap import *
from userdir_exceptions import *
import UDLdap
else:
raise e
+def get_lock(fn, wait=5*60, max_age=3600*6):
+ try:
+ stat = os.stat(fn)
+ if stat[ST_MTIME] < time.time() - max_age:
+ sys.stderr.write("Removing stale lock %s"%(fn))
+ os.unlink(fn)
+ except OSError, error:
+ if error.errno == errno.ENOENT:
+ pass
+ else:
+ raise
+
+ lock = lockfile.FileLock(fn)
+ try:
+ lock.acquire(timeout=wait)
+ except lockfile.LockTimeout:
+ return None
+
+ return lock
+
+
def Sanitize(Str):
return Str.translate(string.maketrans("\n\r\t", "$$$"))
if 'UD_GENERATEDIR' in os.environ:
GenerateDir = os.environ['UD_GENERATEDIR']
-generate_all(GenerateDir, l)
+try:
+ lock = get_lock( os.path.join(GenerateDir, 'ud-generate.lock') )
+ if lock is None:
+ sys.stderr.write("Could not acquire lock %s.\n"%(fn))
+ sys.exit(1)
+
+ generate_all(GenerateDir, l)
+
+finally:
+ if not lock is None:
+ lock.release()
# vim:set et:
# vim:set ts=3: