Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/rainbow/rainbow/gc.py
diff options
context:
space:
mode:
Diffstat (limited to 'rainbow/rainbow/gc.py')
-rw-r--r--rainbow/rainbow/gc.py50
1 files changed, 0 insertions, 50 deletions
diff --git a/rainbow/rainbow/gc.py b/rainbow/rainbow/gc.py
deleted file mode 100644
index 2198367..0000000
--- a/rainbow/rainbow/gc.py
+++ /dev/null
@@ -1,50 +0,0 @@
-from subprocess import call, check_call, CalledProcessError
-from os import listdir, unlink
-from os.path import join, isdir, islink, exists
-from rainbow.util import trace
-
-def active_uid(uid):
- cmd = ['/usr/bin/pgrep', '-U', uid]
- ret = call(cmd, stdout=open('/dev/null'))
- if ret in (0, 1):
- return ret == 0
- raise CalledProcessError(ret, cmd)
-
-def gc_uid(spool, uid):
- """This function conservatively attempts to garbage-collect stale uid
- reservations.
- """
-
- # XXX: D-Bus caches passwd-db data!
- # XXX: D-Bus uses a fixed 1k passwd buffer - be careful with long paths &
- # comments
-
- reservation = join(spool, 'uid_pool', uid)
- assert not isdir(reservation) and not islink(reservation)
-
- # XXX: We perform several execv()'s as root based on strings derived from
- # this 'uid' parameter, which originates as a file-name in a user-writable
- # directory. Better ideas for input validation would be welcome.
- uid_num = int(uid)
- assert uid_num >= 1000 and uid_num <= 65534 # XXX: magic numbers from util/spool.py
-
- if active_uid(uid):
- return
-
- for table in ('uid_to_instance_dir', 'uid_to_home_dir', 'uid_to_gid'):
- row = join(spool, table, uid)
- # NB: it is important that rm -rf doesn't follow links. <MS>
- check_call(['/bin/rm', '-r', '-f', row])
-
- # So long as we unlink the reservation last, we run no risk of seeing inconsistency
- unlink(reservation)
-
-def gc_spool(log, spool):
- uspool = join(spool, 'uid_pool')
- if exists(uspool) and isdir(uspool):
- for maybe_uid in listdir(uspool):
- try: gc_uid(spool, maybe_uid)
- except: trace()
- else:
- log(1, "Skipping spool %s", spool)
-