cleancache.pl.in
上传用户:s81996212
上传日期:2007-01-04
资源大小:722k
文件大小:2k
源码类别:

WEB邮件程序

开发平台:

C/C++

  1. #! @PERL@
  2. #
  3. # $Id: cleancache.pl.in,v 1.2 1999/12/08 06:00:38 mrsam Exp $
  4. #
  5. # Copyright 1998 - 1999 Double Precision, Inc.  See COPYING for
  6. # distribution information.
  7. #
  8. # This script is only used when sqwebmail is compiled with the option to
  9. # use a cache to store login information (saving a getpw lookup for each
  10. # HTTP request, which can be very expensive on large sites).
  11. #
  12. # If the login cache option is used, this script must be regularly executed
  13. # by cron to remove stale cache entries.
  14. $cachedir="@cachedir@";
  15. $timeout=@TIMEOUTHARD@; # DO NOT CHANGE UNDER PENALTY OF LAW!!!
  16. chdir($cachedir) || exit 0;
  17. #
  18. # timeout is hardcoded at configure time.  Cached entries are created in
  19. # subdirs named after int( time / $timeout).  Therefore, the oldest possibly
  20. # valid login would be in ( (time-$timeout) / $timeout ), or:
  21. #
  22. $oldestdir=int(time / $timeout)-1;
  23. #
  24. # So, our task is simply to remove all directories older than that.
  25. #
  26. opendir(TOPDIR, ".") || exit 0;
  27. while (defined ($name=readdir(TOPDIR)))
  28. {
  29. next unless $name =~ /^[0-9]+$/;
  30. next unless $name < $oldestdir;
  31. push @DIRS, $name;
  32. }
  33. closedir(TOPDIR);
  34. while ( defined ($name=shift @DIRS) )
  35. {
  36. chdir($name) && &rmrf && chdir("..") && rmdir($name) && next;
  37. chomp(($pwd=`pwd`)); die "$pwd/$name: $!n";
  38. }
  39. sub rmrf {
  40. my(@dir);
  41. my($name);
  42. opendir(DIR, ".") || return 0;
  43. while (defined ($name=readdir(DIR)))
  44. {
  45. next if $name eq "." || $name eq "..";
  46. push @dir, $name;
  47. }
  48. closedir(DIR);
  49. while ( defined ($name=shift @dir))
  50. {
  51. next if unlink($name);
  52. chdir($name) && &rmrf && chdir("..") && rmdir($name) && next;
  53. chomp(($pwd=`pwd`)); die "$pwd/$name: $!n";
  54. }
  55. return 1;
  56. }