From: Robbie Harwood Date: Sun, 8 May 2016 06:31:10 +0000 (-0400) Subject: Add example script for ccache cleaning to contrib X-Git-Url: http://www.project-moonshot.org/gitweb/?a=commitdiff_plain;h=0645b2feb3c3549b67c1d64663be91655f1cbecf;hp=6a0bc4f5cd46b1ab85dba5bd2de28f568cc947b0;p=mod_auth_gssapi.git Add example script for ccache cleaning to contrib Signed-off-by: Robbie Harwood Reviewed-by: Simo Sorce Closes #80 --- diff --git a/contrib/sweeper.py b/contrib/sweeper.py new file mode 100644 index 0000000..40ed8e2 --- /dev/null +++ b/contrib/sweeper.py @@ -0,0 +1,66 @@ +#!/usr/bin/env python +# Works with both python2 and python3; please preserve this property + +# Copyright (C) 2016 mod_auth_gssapi contributors - See COPYING for (C) terms + +# If one uses both sessions and unique ccache names, then the filesystem will +# become littered with ccache files unless the accessed application cleans +# them up itself. This script will minimize ccache file proliferation by +# removing any ccaches that have expired from the filesystem, and serves as an +# example of how this cleaning can be performed. + +import gssapi +import os +import re +import stat +import sys +import time + +try: + from gssapi.raw import acquire_cred_from +except ImportError: + print("Your GSSAPI does not provide cred store extension; exiting!") + exit(1) + +# process file as a ccache and indicate whether it is expired +def should_delete(fname, t): + try: + # skip directories and other non-files + st = os.stat(fname) + if not stat.S_ISREG(st.st_mode): + return False + + # ignore files that are newer than 30 minutes + if t - st.st_mtime < 30 * 60: + return False + + creds = acquire_cred_from({b"ccache": fname.encode("UTF-8")}) + except FileNotFoundError: + # someone else did the work for us + return False + except Exception as e: + print("Not deleting %s due to error %s" % (fname, e)) + return False + + return creds.lifetime == 0 + +if __name__ == "__main__": + dirs = sys.argv[1:] + if len(dirs) < 1: + print("Usage: %s dir1 [dir2...]" % sys.argv[0]) + exit(1) + + print("System looks okay; running sweeper...") + + t = time.time() + + for basedir in dirs: + os.chdir(basedir) + print("Sweeping %s" % basedir) + + for fname in os.listdir(basedir): + if should_delete(fname, t): + os.unlink(fname) + + print("Sweeper finished successfully!") + exit(0)