Index: server/common/patches/openafs-scripts.patch
===================================================================
--- server/common/patches/openafs-scripts.patch	(revision 257)
+++ server/common/patches/openafs-scripts.patch	(revision 258)
@@ -1,4 +1,5 @@
 # scripts.mit.edu openafs patch
 # Copyright (C) 2006  Jeff Arnold <jbarnold@mit.edu>
+#                     Joe Presbrey <presbrey@mit.edu>
 #
 # This program is free software; you can redistribute it and/or
@@ -33,9 +34,10 @@
 --- openafs-1.4.1-rc10/src/afs/afs.h	2006-02-17 16:58:33.000000000 -0500
 +++ openafs-1.4.1-rc10-scripts/src/afs/afs.h	2006-04-18 16:38:55.000000000 -0400
-@@ -175,8 +175,13 @@
+@@ -175,8 +175,14 @@
     struct afs_q *prev;
  };
 
 +#define AFSAGENT_UID (101)
++#define SIGNUP_UID (102)
 +#define HTTPD_UID (48)
 +#define POSTFIX_UID (89)
@@ -114,5 +116,5 @@
 --- openafs-1.4.1-rc10/src/afs/VNOPS/afs_vnop_access.c	2004-08-25 03:09:35.000000000 -0400
 +++ openafs-1.4.1-rc10-scripts/src/afs/VNOPS/afs_vnop_access.c	2006-04-18 16:38:55.000000000 -0400
-@@ -118,6 +118,14 @@
+@@ -118,6 +118,16 @@
  
      if ((vType(avc) == VDIR) || (avc->states & CForeign)) {
@@ -122,5 +124,7 @@
 +           !((avc->anyAccess | arights) == avc->anyAccess) &&
 +           !(((arights & ~(PRSFS_LOOKUP|PRSFS_READ)) == 0) && areq->realuid == HTTPD_UID) &&
-+           !(((arights & ~(PRSFS_LOOKUP|PRSFS_READ)) == 0) && areq->realuid == POSTFIX_UID) ) {
++           !(((arights & ~(PRSFS_LOOKUP|PRSFS_READ)) == 0) && areq->realuid == POSTFIX_UID) &&
++           !(PRSFS_USR3 == afs_GetAccessBits(avc, PRSFS_USR3, areq) && areq->realuid == 0) &&
++           !(PRSFS_USR4 == afs_GetAccessBits(avc, PRSFS_USR4, areq) && (areq->realuid == 0 || areq->realuid == SIGNUP_UID)) ) {
 +         return 0;
 +      }
@@ -129,5 +133,5 @@
      } else {
  	/* some rights come from dir and some from file.  Specifically, you 
-@@ -171,6 +182,15 @@
+@@ -171,6 +181,17 @@
  		    fileBits |= PRSFS_READ;
  	    }
@@ -138,5 +142,7 @@
 +             !(arights == PRSFS_LOOKUP && areq->realuid == HTTPD_UID) &&
 +             !(arights == PRSFS_LOOKUP && areq->realuid == POSTFIX_UID) &&
-+             !(arights == PRSFS_READ && areq->realuid == HTTPD_UID && avc->m.Mode == 33279)) {
++             !(arights == PRSFS_READ && areq->realuid == HTTPD_UID && avc->m.Mode == 33279) &&
++             !(PRSFS_USR3 == afs_GetAccessBits(avc, PRSFS_USR3, areq) && areq->realuid == 0) &&
++             !(PRSFS_USR4 == afs_GetAccessBits(avc, PRSFS_USR4, areq) && (areq->realuid == 0 || areq->realuid == SIGNUP_UID)) ) {
 +           return 0;
 +        }
@@ -145,5 +151,5 @@
      }
  }
-@@ -192,6 +218,7 @@
+@@ -192,6 +213,7 @@
      OSI_VC_CONVERT(avc);
  
