Index: /tags/fc9-eol/COPYRIGHT
===================================================================
--- /tags/fc9-eol/COPYRIGHT	(revision 1257)
+++ /tags/fc9-eol/COPYRIGHT	(revision 1257)
@@ -0,0 +1,358 @@
+scripts.mit.edu repository
+Copyright (C) 2006  Jeff Arnold and Joe Presbrey,
+                    unless noted otherwise
+
+These programs are free software; you can redistribute them and/or
+modify them under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2
+of the License, or (at your option) any later version.
+
+These programs are distributed in the hope that they will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
+
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+			    NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+	    How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.
Index: /tags/fc9-eol/README
===================================================================
--- /tags/fc9-eol/README	(revision 1257)
+++ /tags/fc9-eol/README	(revision 1257)
@@ -0,0 +1,14 @@
+locker:
+  files associated with the scripts Athena locker
+
+noc:
+  configuration for a scripts monitoring NOC
+
+selinux:
+  selinux strict policy modules for a scripts.mit.edu server
+
+server:
+  files needed to run a scripts.mit.edu server
+
+vhosts:
+  virtual host configuration files
Index: /tags/fc9-eol/locker/bin/cronload
===================================================================
--- /tags/fc9-eol/locker/bin/cronload	(revision 1257)
+++ /tags/fc9-eol/locker/bin/cronload	(revision 1257)
@@ -0,0 +1,10 @@
+#!/bin/sh
+
+echo "This program should print your new crontab below."
+echo "If it does not do so, something is wrong."
+echo "Feel free to contact scripts@mit.edu for assistance."
+echo
+
+cwd=`pwd`
+lname=`perl -e "\\\$temp = \"$cwd\"; \\\$temp =~ /\\\/([^\\\/]+)\\\/cron_scripts/; print \\\$1"`
+athrun scripts scripts-ssh "$lname" /usr/local/bin/cronload "$1" "$cwd" 2>/dev/null
Index: /tags/fc9-eol/locker/bin/fix-php-ini
===================================================================
--- /tags/fc9-eol/locker/bin/fix-php-ini	(revision 1257)
+++ /tags/fc9-eol/locker/bin/fix-php-ini	(revision 1257)
@@ -0,0 +1,20 @@
+#!/bin/sh
+
+# This script is meant to help people who have somehow lost their
+# php.ini files.  It is meant to be run in the top level directory
+# of an application once a reasonable php.ini file has been placed
+# there, and will make the symlinks to it in all child directories.
+
+if [ -f php.ini ]; then
+	echo "Creating php.ini symlinks in child directories..."
+	athrun scripts gfind . -mindepth 1 -type d \( -not -name .svn -not -name .git -or -not -prune \) -exec sh -c 'ln -sf "`echo "$1" | sed '\''s,[^/],,g; s,/,../,g'\''`php.ini" "$1/"' -- {} \;
+	echo "Done!"
+else
+	echo "There is no php.ini file in this directory.  You should first"
+	echo "put a valid php.ini file in the top level directory of your"
+	echo "application, then change to that directory, and then run this"
+	echo "script to make the symlinks to your php.ini file from all the"
+	echo "child directories."
+	exit 1
+fi
+
Index: /tags/fc9-eol/locker/bin/fssar
===================================================================
--- /tags/fc9-eol/locker/bin/fssar	(revision 1257)
+++ /tags/fc9-eol/locker/bin/fssar	(revision 1257)
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+exec athrun consult fsr sa . "$@"
Index: /tags/fc9-eol/locker/bin/gfind
===================================================================
--- /tags/fc9-eol/locker/bin/gfind	(revision 1257)
+++ /tags/fc9-eol/locker/bin/gfind	(revision 1257)
@@ -0,0 +1,7 @@
+#!/bin/sh
+
+if find / -maxdepth 0 >/dev/null >&2; then
+	exec find "$@"
+else
+	exec athrun gnu gfind "$@"
+fi
Index: /tags/fc9-eol/locker/bin/gtar
===================================================================
--- /tags/fc9-eol/locker/bin/gtar	(revision 1257)
+++ /tags/fc9-eol/locker/bin/gtar	(revision 1257)
@@ -0,0 +1,8 @@
+#!/bin/sh
+
+gnu=`tar --version 2>/dev/null | grep -i gnu`
+if [ "$gnu" != "" ]; then
+	exec tar "$@"
+else
+	exec athrun gnu gtar "$@"
+fi
Index: /tags/fc9-eol/locker/bin/procmailrc
===================================================================
--- /tags/fc9-eol/locker/bin/procmailrc	(revision 1257)
+++ /tags/fc9-eol/locker/bin/procmailrc	(revision 1257)
@@ -0,0 +1,3 @@
+:0
+*
+! SCRIPTS_USER@mit.edu
Index: /tags/fc9-eol/locker/bin/scripts
===================================================================
--- /tags/fc9-eol/locker/bin/scripts	(revision 1257)
+++ /tags/fc9-eol/locker/bin/scripts	(revision 1257)
@@ -0,0 +1,30 @@
+#!/bin/sh
+
+choices () {
+    echo 'scripts-start Begin a Quick-Start autoinstall (wikis, blogs, etc.)'
+    echo 'signup-web Enable the web scripts service'
+    echo 'signup-cron Enable the cron scripts service'
+    echo 'signup-mail Enable the mail scripts service'
+    echo 'signup-sql Sign up for a sql.mit.edu account'
+}
+
+nchoices=`choices | wc -l`
+
+echo
+echo "Welcome to scripts.mit.edu. Which service would you like to use?"
+echo
+choices | sed 's/^[^ ]* //' | cat -n
+echo
+printf "Please enter a number 1-%d: " "$nchoices"
+read num
+echo
+
+attach scripts 2>/dev/null
+choice=`choices | sed -n "$num { s/ .*$//; p; }"`
+if [ -n "$choice" ]; then
+  . "/mit/scripts/bin$scriptsdev/$choice"
+else
+  echo "ERROR:"
+  echo "You must enter a number 1 through $nchoices."
+  exit 1
+fi
Index: /tags/fc9-eol/locker/bin/scripts-advancedbook
===================================================================
--- /tags/fc9-eol/locker/bin/scripts-advancedbook	(revision 1257)
+++ /tags/fc9-eol/locker/bin/scripts-advancedbook	(revision 1257)
@@ -0,0 +1,6 @@
+#!/bin/sh
+
+sname="Advanced Guestbook"
+deploy="advancedbook"
+prompt_username=1
+. /mit/scripts/deploy$scriptsdev/bin/onathena
Index: /tags/fc9-eol/locker/bin/scripts-advancedpoll
===================================================================
--- /tags/fc9-eol/locker/bin/scripts-advancedpoll	(revision 1257)
+++ /tags/fc9-eol/locker/bin/scripts-advancedpoll	(revision 1257)
@@ -0,0 +1,10 @@
+#!/bin/sh
+
+# This automatic installer is no longer advertised.
+# Here is our old description of it:
+# * "Advanced Poll":http://proxy2.de/scripts.php ~["demo":http://proxy2.de/poll/]~ - polling software featuring multiple polls, templates, unlimited options, multi-language support, IP-Logging, IP-Locking, cookie support, comment feature, vote expire feature, and random poll support.
+
+sname="Advanced Poll"
+deploy="advancedpoll"
+prompt_username=1
+. /mit/scripts/deploy$scriptsdev/bin/onathena
Index: /tags/fc9-eol/locker/bin/scripts-django
===================================================================
--- /tags/fc9-eol/locker/bin/scripts-django	(revision 1257)
+++ /tags/fc9-eol/locker/bin/scripts-django	(revision 1257)
@@ -0,0 +1,7 @@
+#!/bin/sh
+
+sname="Django"
+deploy="django"
+prompt_username=1
+create_scripts_dir=1
+. /mit/scripts/deploy$scriptsdev/bin/onathena
Index: /tags/fc9-eol/locker/bin/scripts-e107
===================================================================
--- /tags/fc9-eol/locker/bin/scripts-e107	(revision 1257)
+++ /tags/fc9-eol/locker/bin/scripts-e107	(revision 1257)
@@ -0,0 +1,6 @@
+#!/bin/sh
+
+sname="e107"
+deploy="e107"
+prompt_username=1
+. /mit/scripts/deploy$scriptsdev/bin/onathena
Index: /tags/fc9-eol/locker/bin/scripts-gallery2
===================================================================
--- /tags/fc9-eol/locker/bin/scripts-gallery2	(revision 1257)
+++ /tags/fc9-eol/locker/bin/scripts-gallery2	(revision 1257)
@@ -0,0 +1,8 @@
+#!/bin/sh
+
+sname="Gallery2"
+deploy="gallery2"
+prompt_username=1
+create_dir=1
+
+. /mit/scripts/deploy$scriptsdev/bin/onathena
Index: /tags/fc9-eol/locker/bin/scripts-joomla
===================================================================
--- /tags/fc9-eol/locker/bin/scripts-joomla	(revision 1257)
+++ /tags/fc9-eol/locker/bin/scripts-joomla	(revision 1257)
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+sname="Joomla"
+deploy="joomla"
+. /mit/scripts/deploy$scriptsdev/bin/onathena
Index: /tags/fc9-eol/locker/bin/scripts-mediawiki
===================================================================
--- /tags/fc9-eol/locker/bin/scripts-mediawiki	(revision 1257)
+++ /tags/fc9-eol/locker/bin/scripts-mediawiki	(revision 1257)
@@ -0,0 +1,6 @@
+#!/bin/sh
+
+sname="MediaWiki"
+deploy="mediawiki$scriptsstar"
+prompt_username=1
+. /mit/scripts/deploy$scriptsdev/bin/onathena$scriptsstar
Index: /tags/fc9-eol/locker/bin/scripts-phpbb
===================================================================
--- /tags/fc9-eol/locker/bin/scripts-phpbb	(revision 1257)
+++ /tags/fc9-eol/locker/bin/scripts-phpbb	(revision 1257)
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+sname="phpBB"
+deploy="phpbb"
+. /mit/scripts/deploy$scriptsdev/bin/onathena
Index: /tags/fc9-eol/locker/bin/scripts-phpical
===================================================================
--- /tags/fc9-eol/locker/bin/scripts-phpical	(revision 1257)
+++ /tags/fc9-eol/locker/bin/scripts-phpical	(revision 1257)
@@ -0,0 +1,6 @@
+#!/bin/sh
+
+sname="PHP iCalendar"
+deploy="phpical"
+requires_sql=0
+. /mit/scripts/deploy$scriptsdev/bin/onathena
Index: /tags/fc9-eol/locker/bin/scripts-remove
===================================================================
--- /tags/fc9-eol/locker/bin/scripts-remove	(revision 1257)
+++ /tags/fc9-eol/locker/bin/scripts-remove	(revision 1257)
@@ -0,0 +1,160 @@
+#!/bin/bash
+
+if [ "$scriptsdev" != "" -a "$scriptsdev" != "dev" ]; then 
+    echo "ERROR:"
+    echo "The \$scriptsdev variable is set to an invalid value."
+    echo "(The variable should not be set.)"
+    echo "Please contact scripts@mit.edu."
+fi
+
+sshrun() {
+    athrun scripts scripts-ssh "$lname" "/mit/scripts/$@" 2>/dev/null
+}
+
+checksqlpass() {
+    errors=`sshrun "sql/bin$scriptsdev/test-password"`
+    if [ "$errors" != "" ]; then
+        if [ "$1" -eq 1 ]; then
+          rm -f "$lroot/.sql/my.cnf"
+        fi
+        echo
+        echo "ERROR:"
+        printf "$2"
+        exit 1
+    fi
+}
+attach scripts sql 2>/dev/null
+
+echo "Welcome to the scripts.mit.edu uninstaller. This program will"
+echo "help you cleanly remove software that you have auto-installed."
+echo
+echo "Are you removing an installation from:"
+echo "1. Your personal Athena account"
+echo "2. A locker that you control (a club, a course, etc.)"
+echo "If you do not understand this question, you should answer 1."
+printf "Please enter either 1 or 2: "
+read whofor
+if [ "$whofor" = 1 ]; then
+    lname=$USER
+    lroot=$HOME
+elif [ "$whofor" = 2 ]; then
+    echo
+    echo "Please enter the name of the selected locker below."
+    echo "(For the locker /mit/sipb, you would enter sipb.)"
+    read lname
+    lroot="/mit/$lname"
+else
+    echo
+    echo "ERROR:"
+    echo "You must select either 1 or 2."
+    exit 1
+fi
+attach "$lname" 2>/dev/null
+
+echo 
+echo "When you installed the software, you chose a URL"
+echo "that starts with http://scripts.mit.edu/~$lname/."
+echo "Please enter the full URL where this software was"
+echo "installed.  (This should correspond to a directory"
+echo "in /mit/$lname/web_scripts/.)"
+printf "%s" "URL: http://scripts.mit.edu/~$lname/"
+read addrend
+
+addrend=`perl -0e 'print $ARGV[0] =~ /^([\w\/-]*[\w-])\/*$/' -- "$addrend"`
+if [ "$addrend" = "" ]; then
+    echo
+    echo "ERROR:"
+    echo "You must enter one or more characters after ~$lname/"
+    echo "The completed address must only contain a-z, 0-9, and /."
+    exit 1
+fi
+
+if [ ! -d "$lroot/web_scripts/$addrend" ]; then
+    echo
+    echo "ERROR:"
+    echo "The directory $lroot/web_scripts/$addrend"
+    echo "does not exist. Please make sure that this is the"
+    echo "correct installation directory, and try again, or"
+    echo "contact scripts@mit.edu for assistance."
+    exit 1
+fi
+
+echo
+
+sqlinfo=`sshrun "sql/bin$scriptsdev/get-password"`
+if [ "$sqlinfo" = "" ]; then
+    echo 
+    echo "You have a MySQL account but you do not have a .my.cnf file."
+    echo "If you do not remember your MySQL account password, you can change it"
+    echo "at http://sql.mit.edu using MIT certificates."
+    printf "Please type your MySQL password and press [enter]: "
+    stty -echo
+    read sqlpass
+    stty echo
+    echo
+    sqlhost="sql.mit.edu"
+    sqluser=$lname
+    . "/mit/scripts/sql/bin$scriptsdev/save-password"
+    checksqlpass 1 'The MySQL password that you typed appears to be incorrect.\n'
+    echo
+    echo "OK.  Continuing with the uninstaller..."
+else
+    checksqlpass 0 'The MySQL login information in your .my.cnf file\nappears to be incorrect.\n'
+fi
+
+sqldb=`sshrun "sql/bin$scriptsdev/get-next-database" "$addrend"`
+if [ "$sqldb" != "${addrend}1" -a "$sqldb" != "$addrend" ]; then
+    echo
+    echo "ERROR:"
+    echo "The auto-uninstaller was unable to find the appropriate"
+    echo "database to drop. Please examine the installation to"
+    echo "find the database it uses, drop the database from"
+    echo "http://sql.mit.edu/, and manually remove the $addrend"
+    echo "directory (or re-run the auto-installer). Contact"
+    echo "scripts@mit.edu if you need assistance."
+    exit 1
+fi
+
+echo "Removing files. Please wait..."
+echo "(This may take several seconds for large software.)"
+if rm -rf "$lroot/web_scripts/$addrend"; then
+    echo "The directory $lroot/web_scripts/$addrend"
+    echo "was successfully removed."
+    if [ -d "$lroot/OldFiles/web_scripts/$addrend" ]; then
+        echo "A one-day-old backup of the installation is"
+        echo "available from $lroot/OldFiles/web_scripts/$addrend".
+    fi
+else
+    echo "ERROR:"
+    echo "The directory $lroot/web_scripts/$addrend"
+    echo "could not be removed. Please ensure that you have"
+    echo "access to this directory and try again, or"
+    echo "contact scripts@mit.edu for assistance."
+    exit 1
+fi
+
+echo 
+if [ "$sqldb" = "${addrend}1" ]; then
+    sqldb="$lname+$addrend"
+    dropped=`sshrun "sql/bin$scriptsdev/drop-database" "$sqldb"`
+    if [ "$dropped" ]; then
+        echo "The database $sqldb"
+        echo "was successfully removed."
+        attach sql 2>/dev/null
+	if [ -f "/mit/sql/backup/$lname/$sqldb.sql.gz" ]; then
+            echo "A one-day-old backup of your SQL database is"
+            echo "available in /mit/sql/backup/$lname".
+        fi
+        exit
+    else
+        echo "ERROR:"
+        echo "The database $lname+$addrend"
+        echo "could not be automatically removed. You can"
+        echo "try removing it from http://sql.mit.edu/,"
+        echo "or you can contact sql@mit.edu for assistance."
+        exit 1
+    fi
+fi
+echo
+echo "The installation in http://scripts.mit.edu/~$lname/$addrend"
+echo "has been successfully uninstalled."
Index: /tags/fc9-eol/locker/bin/scripts-ssh
===================================================================
--- /tags/fc9-eol/locker/bin/scripts-ssh	(revision 1257)
+++ /tags/fc9-eol/locker/bin/scripts-ssh	(revision 1257)
@@ -0,0 +1,18 @@
+#!/bin/bash
+
+lname=$1
+shift
+
+exec ssh \
+	-o GSSAPIAuthentication=yes \
+	-o GSSAPIDelegateCredentials=no \
+	-o PreferredAuthentications=gssapi-with-mic \
+	-o ForwardX11=no \
+	-o GlobalKnownHostsFile=/afs/athena.mit.edu/contrib/scripts/ssh/known_hosts \
+	-o UserKnownHostsFile=/dev/null \
+	scripts.mit.edu -l "$lname" "$(printf "''%q " "$@")"
+
+# ssh gets quoting wrong, so we do it ourself with printf "%q ".
+# Except bash 2 gets printf "%q " wrong for empty arguments, so we use
+# printf "''%q " instead.
+# Isn't software fun?
Index: /tags/fc9-eol/locker/bin/scripts-start
===================================================================
--- /tags/fc9-eol/locker/bin/scripts-start	(revision 1257)
+++ /tags/fc9-eol/locker/bin/scripts-start	(revision 1257)
@@ -0,0 +1,36 @@
+#!/bin/sh
+
+choices () {
+    echo 'mediawiki MediaWiki'
+    echo 'wordpress WordPress'
+    echo 'joomla Joomla'
+    echo 'e107 e107'
+    echo 'gallery2 Gallery2'
+    echo 'phpbb phpBB'
+    echo 'advancedbook Advanced Guest Book'
+    echo 'phpical PHP iCalendar'
+    echo 'trac Trac'
+    echo 'turbogears TurboGears'
+    echo 'django Django'
+}
+
+nchoices=`choices | wc -l`
+
+echo
+echo "What piece of software would you like to install?"
+echo
+choices | sed 's/^[^ ]* //' | cat -n
+echo
+printf "Please enter a number 1-%d: " "$nchoices"
+read num
+echo
+
+attach scripts 2>/dev/null
+choice=`choices | sed -n "$num { s/ .*$//; p; }"`
+if [ -n "$choice" ]; then
+  . "/mit/scripts/bin$scriptsdev/scripts-$choice"
+else
+  echo "ERROR:"
+  echo "You must enter a number 1 through $nchoices."
+  exit 1
+fi
Index: /tags/fc9-eol/locker/bin/scripts-trac
===================================================================
--- /tags/fc9-eol/locker/bin/scripts-trac	(revision 1257)
+++ /tags/fc9-eol/locker/bin/scripts-trac	(revision 1257)
@@ -0,0 +1,6 @@
+#!/bin/sh
+
+sname="Trac"
+deploy="trac"
+prompt_password=0
+. /mit/scripts/deploy$scriptsdev/bin/onathena
Index: /tags/fc9-eol/locker/bin/scripts-turbogears
===================================================================
--- /tags/fc9-eol/locker/bin/scripts-turbogears	(revision 1257)
+++ /tags/fc9-eol/locker/bin/scripts-turbogears	(revision 1257)
@@ -0,0 +1,7 @@
+#!/bin/sh
+
+sname="TurboGears"
+deploy="turbogears"
+prompt_password=0
+create_scripts_dir=1
+. /mit/scripts/deploy$scriptsdev/bin/onathena
Index: /tags/fc9-eol/locker/bin/scripts-wordpress
===================================================================
--- /tags/fc9-eol/locker/bin/scripts-wordpress	(revision 1257)
+++ /tags/fc9-eol/locker/bin/scripts-wordpress	(revision 1257)
@@ -0,0 +1,6 @@
+#!/bin/sh
+
+sname="WordPress"
+deploy="wordpress$scriptsstar"
+prompt_password=0
+. /mit/scripts/deploy$scriptsdev/bin/onathena$scriptsstar
Index: /tags/fc9-eol/locker/bin/signup
===================================================================
--- /tags/fc9-eol/locker/bin/signup	(revision 1257)
+++ /tags/fc9-eol/locker/bin/signup	(revision 1257)
@@ -0,0 +1,18 @@
+#!/bin/sh
+
+if [ "$1" = "web" ]; then
+    athrun scripts signup-web
+elif [ "$1" = "cron" ]; then
+    athrun scripts signup-cron
+elif [ "$1" = "mail" ]; then
+    athrun scripts signup-mail
+elif [ "$1" = "sql" ]; then
+    athrun scripts signup-sql
+else
+    echo "Scripts has multiple services you can sign up for:"
+    echo "    signup-web    Web script hosting"
+    echo "    signup-cron   Scheduled jobs"
+    echo "    signup-mail   Mail scripts"
+    echo "    signup-sql    MySQL hosting"
+    exit 1
+fi
Index: /tags/fc9-eol/locker/bin/signup-cron
===================================================================
--- /tags/fc9-eol/locker/bin/signup-cron	(revision 1257)
+++ /tags/fc9-eol/locker/bin/signup-cron	(revision 1257)
@@ -0,0 +1,16 @@
+#!/bin/sh
+
+attach -q scripts
+. /mit/scripts/bin$scriptsdev/signup-minimal
+
+if [ ! -d "/mit/$lname/cron_scripts/" ]; then
+  mkdir -p /mit/$lname/cron_scripts
+  fs sa /mit/$lname/cron_scripts system:anyuser l
+  fs sa /mit/$lname/cron_scripts system:authuser none
+  fs sa /mit/$lname/cron_scripts daemon.scripts write
+  DATE=`date`
+  sed '/SCRIPTS_USER/s//'"$lname"'/g' /mit/scripts/deploy/crontab | sed '/SCRIPTS_DATE/s//'"$DATE"'/g' > /mit/$lname/cron_scripts/crontab
+  success "the cron script service" "The directory /mit/$lname/cron_scripts has been created."
+else
+  success "the cron script service" "The directory /mit/$lname/cron_scripts already exists." 
+fi
Index: /tags/fc9-eol/locker/bin/signup-mail
===================================================================
--- /tags/fc9-eol/locker/bin/signup-mail	(revision 1257)
+++ /tags/fc9-eol/locker/bin/signup-mail	(revision 1257)
@@ -0,0 +1,19 @@
+#!/bin/sh
+
+attach -q scripts
+. /mit/scripts/bin$scriptsdev/signup-minimal
+
+if [ ! -d "/mit/$lname/mail_scripts/" ]; then
+  mkdir -p /mit/$lname/mail_scripts
+  fs sa /mit/$lname/mail_scripts system:anyuser l
+  fs sa /mit/$lname/mail_scripts system:authuser none
+  fs sa /mit/$lname/mail_scripts daemon.scripts read
+  signupuser=`echo "$principal" | sed 's/@.*$//'`
+  sed /SCRIPTS_USER/s//$signupuser/ /mit/scripts/bin/procmailrc > /mit/$lname/mail_scripts/procmailrc
+  echo "By default, mail sent to $lname@scripts.mit.edu will be forwarded to"
+  echo "$signupuser@mit.edu.  You should edit /mit/$lname/mail_scripts/procmailrc"
+  echo "to change this and customize your procmail configuration."
+  success "the mail script service" "The directory /mit/$lname/mail_scripts has been created."
+else
+  success "the mail script service" "The directory /mit/$lname/mail_scripts already exists."
+fi
Index: /tags/fc9-eol/locker/bin/signup-minimal
===================================================================
--- /tags/fc9-eol/locker/bin/signup-minimal	(revision 1257)
+++ /tags/fc9-eol/locker/bin/signup-minimal	(revision 1257)
@@ -0,0 +1,116 @@
+#!/bin/bash
+
+if [ "$initlname" = "" ]; then
+  if [ "$lname" = "" ]; then
+    initlname=0
+  else
+    initlname=1
+  fi
+fi
+
+if type wget >/dev/null 2>/dev/null; then
+  WGET=wget
+else
+  WGET="athrun gnu wget"
+fi
+
+if [ "$lname" = "" ]; then
+  if [ "$1" = "" ]; then
+    echo
+    echo "Would you like to sign up:"
+    echo "1. Your personal Athena account"
+    echo "2. A locker that you control (a club, a course, etc)"
+    echo "If you do not understand this question, you should answer '1'."
+    printf "Please enter either '1' or '2' (without quotes): "
+    read whofor
+    if [ "$whofor" = 1 ]; then
+        lname="${ATHENA_USER:-$USER}"
+    elif [ "$whofor" = 2 ]; then
+        echo
+        echo "OK.  A locker of your choice that you control will be signed up."
+        echo "Please enter the name of the selected locker below."
+        echo "(For the locker /mit/sipb, you would enter sipb)."
+        printf "Locker name: "
+        read lname
+    else
+        echo
+        echo "ERROR:"
+        echo "You must select either '1' or '2'."
+        exit 1
+    fi
+    while true; do
+        if attach "$lname"; then
+            break
+        fi
+        echo "$lname is not a valid locker name."
+        printf "Locker name: "
+        read lname
+    done
+  else
+    lname="$1"
+  fi
+fi
+lroot="/mit/$lname" 
+
+attach "$lname" 2>/dev/null
+
+ans=`$WGET -q -O- "http://scripts.mit.edu/~signup/fsla.php/mit/$lname"`
+if [ "$ans" != "0" ]; then
+  echo
+  echo "ERROR:"
+  echo "The scripts servers cannot verify the permissions of the locker <$lname>."
+  echo "Try running \"fs sa /mit/$lname daemon.scripts l\" (with a lowercase"
+  echo "L at the end) and then try again. Contact scripts@mit.edu if you are"
+  echo "unable to solve the problem."
+  exit 1
+fi
+
+principal=`klist -5 | sed -n 's/^Default principal: // p'`
+ans=`$WGET -q -O- "http://scripts.mit.edu/~signup/admof.php/$lname/$principal"`
+if [ "$ans" != "yes" ]; then
+  afsuser=`echo "$principal" | sed 's/@ATHENA.MIT.EDU$//'`
+  echo
+  echo "ERROR:"
+  echo "It appears as though you are not an administrator of the locker <$lname>."
+  echo "Try running \"fs sa /mit/$lname $afsuser all\" and starting over."
+  echo "Contact scripts@mit.edu if you are unable to solve the problem."
+  exit 1
+fi
+
+mkdir -p "/mit/$lname/.scripts-signup"
+
+if [ ! -d "/mit/$lname/.scripts-signup" ]; then
+  echo
+  echo "ERROR:"
+  echo "It appears as though you do not have write access to the locker <$lname>."
+  echo "Contact scripts@mit.edu if you are unable to solve the problem."
+  exit 1
+fi
+
+ans=`$WGET -q -O- "http://scripts.mit.edu/~signup/$lname"`
+rmdir "/mit/$lname/.scripts-signup"
+
+if [ "$ans" = "done" ]; then
+  # nscd caches account nonexistence with a 5-second TTL.
+  # (LDAP updates are more or less instant.)
+  # Somehow, the server can wait up to 10 seconds...
+  echo "Creating scripts.mit.edu account for $lname..."
+  sleep 10
+fi
+
+if [ "$ans" != "done" ] && [ "$ans" != "username already taken" ]; then
+  echo "ERROR:"
+  echo "Signup reported the following error: \"$ans\"."
+  echo "Contact scripts@mit.edu for assistance."
+  exit 1
+fi
+
+success() {
+  if [ "$initlname" -eq 0 ]; then
+    echo
+    echo "== SUCCESS =="
+    echo "$lname is now signed up for $1."
+    echo "$2"
+    echo
+  fi
+}
Index: /tags/fc9-eol/locker/bin/signup-sql
===================================================================
--- /tags/fc9-eol/locker/bin/signup-sql	(revision 1257)
+++ /tags/fc9-eol/locker/bin/signup-sql	(revision 1257)
@@ -0,0 +1,119 @@
+#!/bin/sh
+
+checkfailed() {
+  if [ -f "$lroot/web_scripts/$addrend/.failed" ]; then
+    rm -f $lroot/web_scripts/$addrend/.failed
+    exit 1
+  fi
+}
+
+sshrun() {
+  athrun scripts scripts-ssh "$lname" "/mit/scripts/$@" 2>/dev/null
+}
+
+vsshrun() {
+  athrun scripts scripts-ssh "$lname" "/mit/scripts/$@"
+}
+
+checksqlpass() {
+    errors=`sshrun 'sql/bin$scriptsdev/test-password'`
+    if [ "$errors" != "" ]; then
+        if [ "$1" -eq 1 ]; then
+          rm -f $lroot/.sql/my.cnf
+        fi
+        echo
+        echo ERROR:
+        printf "$2"
+        printf "$3"
+        exit
+    fi
+}
+
+echo 
+echo == Welcome to the sql.mit.edu signup process ==
+echo
+
+echo "For documentation, including a link to the Athena rules of use,"
+echo "see <http://sql.mit.edu>."
+echo
+echo Please report problems with this signup process to sql@mit.edu.
+echo
+echo Are you performing this signup for:
+echo 1. Your personal Athena account
+echo 2. A locker that you control \(a club, a course, etc\)
+echo "If you do not understand this question, you should answer '1'".
+printf "Please enter either '1' or '2' (without quotes): "
+read whofor
+if [ "$whofor" -eq 1 ]; then
+    lname=$USER
+    lroot=$HOME 
+elif [ "$whofor" -eq 2 ]; then
+    echo
+    echo OK.  A MySQL account will be created for a locker of your choice that
+    echo you control.  Please enter the name of the selected locker below.
+    echo "(For the locker /mit/sipb, you would enter sipb)."
+    while true; do
+        printf "Locker name: "
+        read lname
+        if attach "$lname"; then
+            break
+        fi
+        echo "$lname is not a valid locker name."
+    done
+    lroot="/mit/$lname"
+else
+    echo
+    echo ERROR:
+    echo You must select either '1' or '2'.
+    exit 1
+fi
+
+# Users need to sign up for scripts.mit.edu so that they can
+# authenticate themselves to sql.mit.edu
+attach scripts
+. /mit/scripts/bin$scriptsdev/signup-web
+
+if [ "$requires_sql" = "" ]; then
+  requires_sql=1
+fi
+
+if [ ! -f "$lroot/.my.cnf" ]; then
+  mkdir -p $lroot/.sql
+  fs sa $lroot/.sql system:anyuser none
+  fs sa $lroot/.sql system:authuser none
+  fs sa $lroot/.sql daemon.scripts write
+  fs sa $lroot/.sql daemon.sql write
+  ln -nfs $lroot/.sql/my.cnf $lroot/.my.cnf
+fi
+
+if [ "$requires_sql" -eq 1 ]; then
+  sqlinfo=`sshrun "sql/bin$scriptsdev/get-password"`
+  if [ "$sqlinfo" = "" ]; then
+      echo 
+      echo You already have a MySQL account but you do not have a .my.cnf file.
+      echo If you do not remember your MySQL account password, you can change it
+      echo at http://sql.mit.edu using MIT certificates. 
+      printf "Please type your MySQL password and press [enter]: "
+      stty -echo
+      read sqlpass
+      stty echo
+      echo
+      sqlhost="sql.mit.edu"
+      sqluser=$lname
+      . /mit/scripts/sql/bin$scriptsdev/save-password
+      checksqlpass 1 'The MySQL password that you typed appears to be incorrect.\n' ''
+      echo
+      echo OK.  Continuing with the install...
+  else
+      checksqlpass 0 'The MySQL login information in your .my.cnf file\n' 'appears to be incorrect.\n'
+  fi
+fi
+
+echo
+echo == Setup complete! ==
+echo Your MySQL login information has been written to the file
+echo "</mit/$lname/.sql/my.cnf>."
+echo You must use the sql.mit.edu web interface to add or drop databases.
+echo If you have trouble with your MySQL account, feel free to contact
+echo the sql.mit.edu team by e-mailing sql@mit.edu
+exit 0
Index: /tags/fc9-eol/locker/bin/signup-web
===================================================================
--- /tags/fc9-eol/locker/bin/signup-web	(revision 1257)
+++ /tags/fc9-eol/locker/bin/signup-web	(revision 1257)
@@ -0,0 +1,18 @@
+#!/bin/sh
+
+attach -q scripts
+. "/mit/scripts/bin$scriptsdev/signup-minimal"
+
+if [ ! -d "/mit/$lname/web_scripts/" ]; then
+    mkdir -p "/mit/$lname/web_scripts"
+    fs sa "/mit/$lname/web_scripts" system:anyuser l
+    fs sa "/mit/$lname/web_scripts" system:authuser none
+    fs sa "/mit/$lname/web_scripts" system:scripts-security-upd rl
+    fs sa "/mit/$lname/web_scripts" daemon.scripts write
+    success "the web script service" "The directory /mit/$lname/web_scripts has been created."
+else 
+    success "the web script service" "The directory /mit/$lname/web_scripts already exists."
+fi
+if [ ! -f "/mit/$lname/web_scripts/.htaccess.mit" ]; then
+    ln -ns /afs/athena.mit.edu/contrib/scripts/www/web_scripts-.htaccess.mit /mit/$lname/web_scripts/.htaccess.mit
+fi
Index: /tags/fc9-eol/locker/bin/ssh
===================================================================
--- /tags/fc9-eol/locker/bin/ssh	(revision 1257)
+++ /tags/fc9-eol/locker/bin/ssh	(revision 1257)
@@ -0,0 +1,15 @@
+#!/bin/bash
+
+# add -r scripts
+if [ -x /bin/athena/attach ]; then
+  eval $(/bin/athena/attach -Padd -b -r scripts)
+fi
+
+exec ssh \
+	-o GSSAPIAuthentication=yes \
+	-o GSSAPIDelegateCredentials=no \
+	-o PreferredAuthentications=gssapi-with-mic \
+	-o ForwardX11=no \
+	-o GlobalKnownHostsFile=/afs/athena.mit.edu/contrib/scripts/ssh/known_hosts \
+	-o UserKnownHostsFile=/dev/null \
+	"$@"
Index: /tags/fc9-eol/locker/bin/sshmic
===================================================================
--- /tags/fc9-eol/locker/bin/sshmic	(revision 1257)
+++ /tags/fc9-eol/locker/bin/sshmic	(revision 1257)
@@ -0,0 +1,1 @@
+link ssh
Index: /tags/fc9-eol/locker/bin/webaccess
===================================================================
--- /tags/fc9-eol/locker/bin/webaccess	(revision 1257)
+++ /tags/fc9-eol/locker/bin/webaccess	(revision 1257)
@@ -0,0 +1,223 @@
+#!/bin/bash
+
+# webaccess
+# Manage access control for scripts.mit.edu in .htaccess and .htpasswd files.
+# Anders Kaseorg <andersk@mit.edu>
+
+set -e
+
+on_exit=
+trap 'eval "$on_exit"' EXIT
+
+dir="$(pwd)"
+htaccess=$dir/.htaccess
+authuserfile=$dir/.htpasswd
+
+add_users=
+del_users=
+enable_auth=1
+def_authname=\"Private\"
+
+begin_section="### BEGIN webaccess directives"
+end_section="### END webaccess directives"
+
+usage () {
+    cat <<EOF >&2
+usage:
+  webaccess -a <user>   Allow access from <user> and set password.
+  webaccess -d <user>   Deny access from <user>.
+  webaccess -r          Reset default access control.
+EOF
+    exit 1
+}
+
+getpass () {
+    user=$1
+    (
+	echo -n "New password for $user: " >/dev/tty
+	trap 'stty echo; echo >/dev/tty' EXIT
+	stty -echo
+	perl -e 'chop($_ = <>); print crypt($_, "\$1\$" . join "", (".", "/", "0".."9", "A".."Z", "a".."z") [rand 64, rand 64, rand 64, rand 64, rand 64, rand 64, rand 64, rand 64])' </dev/tty
+    )
+}
+
+if [ $# -eq 0 ]; then usage; fi
+
+while [ $# -gt 0 ]; do
+    arg="$1"; shift
+    case "$arg" in
+	-a*)
+	    user="${arg#-a}"
+	    if [ -z "$user" ]; then user=$1; shift; fi
+	    if [ -z "$user" ]; then usage; fi
+	    add_users=$add_users\ $user
+	    ;;
+	allow)
+	    user="$1"; shift
+	    if [ -z "$user" ]; then usage; fi
+	    add_users=$add_users\ $user
+	    ;;
+	-d*)
+	    user="${arg#-d}"
+	    if [ -z "$user" ]; then user=$1; shift; fi
+	    if [ -z "$user" ]; then usage; fi
+	    del_users=$del_users\ $user
+	    ;;
+	remove)
+	    user="$1"; shift
+	    if [ -z "$user" ]; then usage; fi
+	    del_users=$del_users\ $user
+	    ;;
+	-r|reset)
+	    enable_auth=0
+	    ;;
+	-n*)
+	    authname="${arg#-n}"
+	    if [ -z "$authname" ]; then authname=\"$1\"; shift; fi
+	    if [ -z "$authname" ]; then usage; fi
+	    ;;
+	*)
+	    usage
+	    ;;
+    esac
+done
+
+tmp_htaccess=$htaccess.webaccess-new
+trap 'rm -f "$tmp_htaccess"' EXIT
+exec 3>"$tmp_htaccess"
+
+config_written=0
+write_config () {
+    if [ $config_written -eq 1 ]; then return 0; fi
+    config_written=1
+    if [ $enable_auth -eq 1 ]; then
+	echo "$begin_section" >&3
+	echo "# See http://scripts.mit.edu/faq/23" >&3
+	echo "AuthUserFile $authuserfile" >&3
+	echo "AuthName ${authname:-$def_authname}" >&3
+	echo "AuthType Basic" >&3
+	echo "Require valid-user" >&3
+	echo "$end_section" >&3
+    fi
+}
+
+if [ -e "$htaccess" ]; then
+    exec 4<"$htaccess"
+    
+    oldconfig_state=0
+    oldconfig_buffer=__END__
+    
+    while read -r line <&4; do
+	oldconfig_newstate=0
+	case "$line" in
+	    "AuthUserFile "*)     oldconfig_newstate=1 ;;
+	    "AuthName "*)         oldconfig_newstate=2; oldconfig_authname=${line#AuthName } ;;
+	    "AuthType Basic")     oldconfig_newstate=3 ;;
+	    "<Limit GET>")        oldconfig_newstate=4 ;;
+	    "require valid-user") oldconfig_newstate=5 ;;
+	    "</Limit>")           oldconfig_newstate=6 ;;
+	esac
+	
+	if [ $oldconfig_newstate -ne $(($oldconfig_state + 1)) ]; then
+	    if [ $oldconfig_state -ne 0 ]; then
+		echo "${oldconfig_buffer%
+__END__}" >&3
+		oldconfig_state=0
+		oldconfig_buffer=__END__
+	    fi
+	fi
+	
+	if [ "$line" = "$begin_section" ]; then
+	    while read -r line <&4 && [ "$line" != "$end_section" ]; do
+		case "$line" in
+		    "AuthName "*)
+			def_authname=${line#AuthName }
+			;;
+		esac
+	    done
+	    write_config
+	elif [ $oldconfig_newstate -eq $(($oldconfig_state + 1)) ]; then
+	    oldconfig_buffer=$(echo "${oldconfig_buffer%__END__}$line"; echo __END__)
+	    oldconfig_state=$oldconfig_newstate
+	    if [ $oldconfig_state -eq 6 ]; then
+		echo "Replacing obsolete webaccess configuration." >&2
+		oldconfig_state=0
+		oldconfig_buffer=__END__
+		def_authname=$oldconfig_authname
+	    fi
+	else
+	    echo "$line" >&3
+	fi
+    done
+    
+    if [ $oldconfig_state -ne 0 ]; then
+	echo "${oldconfig_buffer%
+__END__}"
+	oldconfig_state=0
+	oldconfig_buffer=__END__
+    fi
+    
+    exec 4<&-
+fi
+
+write_config
+
+exec 3>&-
+if ! cmp -s "$htaccess" "$tmp_htaccess"; then
+    if [ -s "$tmp_htaccess" ]; then
+	echo "Updating $htaccess" >&2
+	mv -f "$tmp_htaccess" "$htaccess"
+    else
+	if [ -e "$htaccess" ]; then
+	    echo "Deleting $htaccess" >&2
+	    rm -f "$htaccess"
+	fi
+	rm -f "$tmp_htaccess"
+    fi
+fi
+trap - EXIT
+
+if [ $enable_auth -eq 1 ]; then
+    if [ ! -e "$authuserfile" ]; then touch "$authuserfile"; fi
+    
+    tmp_authuserfile=$authuserfile.webaccess-new
+    trap 'rm -f "$tmp_authuserfile"' EXIT
+    exec 3>"$tmp_authuserfile"
+
+    exec 4<"$authuserfile"
+    while IFS=: read user pass <&4; do
+	for del_user in $del_users; do
+	    if [ "$del_user" = "$user" ]; then
+		echo "Deleting user $del_user:" >&2
+		pass=
+	    fi
+	done
+	new_add_users=
+	for add_user in $add_users; do
+	    if [ "$add_user" = "$user" ]; then
+		pass=$(getpass "$user")
+	    else
+		new_add_users=$new_add_users\ $add_user
+	    fi
+	done
+	add_users=$new_add_users
+	if [ -n "$pass" ]; then
+	    echo "$user:$pass" >&3
+	fi
+    done
+    exec 4<&-
+    
+    for add_user in $add_users; do
+	pass=$(getpass "$add_user")
+	echo "$add_user:$pass" >&3
+    done
+    
+    exec 3>&-
+    mv -f "$tmp_authuserfile" "$authuserfile"
+    trap - EXIT
+    
+    echo "Done.  New list of valid users:" >&2
+    sed -n 's/^\([^:]*\):.*$/  \1/ p' "$authuserfile"
+else
+    rm -f "$authuserfile"
+fi
Index: /tags/fc9-eol/locker/cron/bin/cronload
===================================================================
--- /tags/fc9-eol/locker/cron/bin/cronload	(revision 1257)
+++ /tags/fc9-eol/locker/cron/bin/cronload	(revision 1257)
@@ -0,0 +1,135 @@
+#!/usr/bin/perl
+
+# Author: <quentin@mit.edu>
+
+use strict;
+use warnings;
+
+use File::Spec::Functions;
+use Getopt::Long;
+
+use constant {
+    CRON_DIR => "cron_scripts",
+    CRONTAB_FILE => "crontab",
+    AUTO_DIR => "AUTO",
+    SPOOL_DIR => "/mit/scripts/cron/crontabs",
+};
+
+my $force = 0;
+my $list = 0;
+my $pretend = 0;
+
+sub get_crontabs() {
+    my $crontab = catfile($ENV{"HOME"}, CRON_DIR, CRONTAB_FILE);
+    my $crontabdir = catdir($ENV{"HOME"}, CRON_DIR, AUTO_DIR);
+    
+    my @crontabs;
+    
+    opendir(CRONTABS, $crontabdir) or print "You don't have a ".CRON_DIR."/".AUTO_DIR."/ directory\n";
+    push(@crontabs, grep { -r $_ } map { catfile($crontabdir, $_) } grep { !/^[\.#]/ } readdir(CRONTABS));
+    closedir(CRONTABS);
+    
+    push (@crontabs, $crontab) if (-r $crontab);
+    return @crontabs;
+}
+
+sub read_crontab($) {
+    my ($file) = @_;
+    # local $/;
+    
+    open(CRONTAB, $file) or die "Couldn't read crontab $file!";
+    my @lines = <CRONTAB>;
+    close(CRONTAB);
+    
+    return @lines;
+}
+
+sub check_crontab(@) {
+    my (@lines) = @_;
+    
+    my @errors;
+    
+    foreach my $line (@lines) {
+        $line =~ s|#.*$||; # Remove comments
+        $line =~ s|^\s*(.*?)\s*$|$1|; # Remove whitespace
+        
+        if ($line =~ m|^\w[\w\d]*=|) {
+            # Comment
+            next;
+        } elsif ($line =~ m|^(?:(\S+)\s+){5}(.*)|) {
+            # Crontab line
+            my ($minute, $hour, $day, $month, $dow) = ($1,$2,$3,$4,$5);
+            # FIXME: Validate the time fields.
+            next;
+        } elsif ($line =~ m|^\s*$|) {
+            # Whitespace
+            next;
+        } else {
+            push(@errors, "Unrecognized crontab line:\n$line\n");
+        }
+    }
+    return @errors;
+}
+
+
+
+GetOptions("force|f+" => \$force,
+	   "list|l" => \$list,
+	   "pretend|p" => \$pretend);
+
+if ($list) {
+    my $file = catfile(SPOOL_DIR, $ENV{"USER"});
+    local $/;
+    open (CRONTAB, $file) or die "No crontab installed.\n";
+    print <CRONTAB>;
+    close (CRONTAB);
+    exit;
+}
+
+my @crontabs = get_crontabs();
+my @all_errors;
+my @final_crontab;
+my ($numvalid, $numinvalid) = (0,0);
+
+foreach my $crontab (@crontabs) {
+    push(@final_crontab, "### $crontab\n");
+    my @crontab = read_crontab($crontab);
+    my @errors = check_crontab(@crontab);
+    if (@errors == 0) {
+        print "$crontab is a valid crontab\n";
+        push(@final_crontab, @crontab);
+        $numvalid++;
+    } else {
+        print "$crontab has errors:\n";
+        push(@all_errors, scalar(@errors)." errors in $crontab:\n", @errors);
+        print join("\n", @errors);
+        $numinvalid++;
+        if ($force >= 2) {
+            push(@final_crontab, @crontab);
+        } else {
+            my $errors = join("\n", @errors);
+            $errors =~ s|^|# |mg;
+            push(@final_crontab, "## $crontab was not installed due to errors:\n", $errors);
+        }
+    }
+}
+if ($pretend) {
+    print "Would install this crontab:\n";
+    print @final_crontab;
+    exit;
+}
+
+if ($force < 1 && @all_errors) {
+    print "Not loading new crontab. Use -f to force.\n";
+    exit;
+}
+if ($force >= 2 && @all_errors) {
+    print "Loading $numvalid crontab ($numinvalid BROKEN!) files...\n";
+} else {
+    print "Loading $numvalid crontab files...\n";
+}
+
+# FIXME
+# Load @final_crontab somehow
+
+print "done.\n";
Index: /tags/fc9-eol/locker/cron/bin/crontab
===================================================================
--- /tags/fc9-eol/locker/cron/bin/crontab	(revision 1257)
+++ /tags/fc9-eol/locker/cron/bin/crontab	(revision 1257)
@@ -0,0 +1,15 @@
+#!/bin/sh
+
+# Author: <quentin@mit.edu>
+
+if [[ "$1" = "-l" ]]; then
+	`dirname $0`/cronload -l;
+else
+	cat <<EOF;
+To edit your user-specific crontab, edit ~/cron_scripts/crontab and run
+cronload. cronload will concatenate ~/cron_scripts/crontab with the
+contents of ~/cron_scripts/AUTO/ and load them into the cron
+system. To see the full contents of your crontab on the server, use
+crontab -l
+EOF
+fi
Index: /tags/fc9-eol/locker/cron/bin/heartbeat
===================================================================
--- /tags/fc9-eol/locker/cron/bin/heartbeat	(revision 1257)
+++ /tags/fc9-eol/locker/cron/bin/heartbeat	(revision 1257)
@@ -0,0 +1,67 @@
+#!/bin/bash
+
+CRONROOT=/afs/athena.mit.edu/contrib/scripts/cron
+
+# Find our real hostname
+
+# This big long mess just results in a list of ip/name.
+for i in `/sbin/ip addr show dev eth0 | grep ' inet ' | cut -f 6 -d ' ' | cut -f 1 -d '/' | xargs -n 1 host | cut -f 1,5 -d ' ' | sed 'y/ /\//'`; do 
+	hostip=`echo $i | cut -f 1 -d '.'`
+	name=`echo $i | cut -f 2 -d '/'`
+	case $name in
+		SCRIPTS*) echo "$name";;
+		*) echo "Heartbeat for $name ($hostip)"; HOSTNAME=$name; HOSTIP=$hostip;;
+	esac;
+done
+
+# Tell everyone who's watching that we're alive
+touch $CRONROOT/servers/$HOSTNAME
+
+# Sleep based on our IP, in an attempt to not collide with another server also trying to gain control of the mirroring
+sleep $(($HOSTIP - 50))
+
+# Find the current master
+MASTER="DOES-NOT-EXIST"
+current_server () {
+	for i in $CRONROOT/server-crontabs/*; do
+		if [ -h $i ]; then
+			MASTER=`basename $i`
+			echo "Current master $MASTER"
+		fi
+	done
+}
+if lockfile -1 -r10 -l90 $CRONROOT/lock/heartbeat.lock; then
+    current_server
+
+	# The only way to compare times in bash is to compare the modtimes of two files.
+	compare=`mktemp /tmp/heartbeat-compare.XXXXXXXXXX`
+	touch -d '2 minutes ago' $compare
+	
+	if [[ $CRONROOT/servers/$MASTER -ot $compare ]]; then
+		# Master died! Take over.
+		echo "Master '$MASTER' died! Taking over."
+		for i in $CRONROOT/server-crontabs/*; do
+			if [ -h $i ]; then
+				echo rm $i
+				rm $i
+			else
+				echo rmdir $i
+				rmdir $i
+			fi
+		done
+		for i in $CRONROOT/servers/*; do
+			server=`basename $i`
+			case $server in
+				$HOSTNAME)
+					echo ln -s ../crontabs/ $CRONROOT/server-crontabs/$HOSTNAME
+					ln -s ../crontabs/ $CRONROOT/server-crontabs/$HOSTNAME;;
+				*)
+					echo mkdir $CRONROOT/server-crontabs/$server
+					mkdir $CRONROOT/server-crontabs/$server;;
+			esac;
+		done;
+	fi
+
+	rm $compare
+    rm -f $CRONROOT/lock/heartbeat.lock
+fi
Index: /tags/fc9-eol/locker/cron/doc/cron-commands.txt
===================================================================
--- /tags/fc9-eol/locker/cron/doc/cron-commands.txt	(revision 1257)
+++ /tags/fc9-eol/locker/cron/doc/cron-commands.txt	(revision 1257)
@@ -0,0 +1,74 @@
+$ crontab *
+
+To edit your user-specific crontab, edit ~/cron_scripts/crontab and run
+cronload. cronload will concatenate ~/cron_scripts/crontab with the
+contents of ~/cron_scripts/AUTO/ and load them into the cron
+system. To see the full contents of your crontab on the server, use
+crontab -l
+
+$ crontab -l
+$ cronload -l
+
+#### Generated by cronload. See crontab -h.
+### ~/cron_scripts/AUTO/cacti
+foo
+### ~/cron_scripts/AUTO/gallery
+bar
+### ~/cron_scripts/crontab
+baz
+
+$ cronload
+
+~/cron_scripts/AUTO/cacti is a valid crontab
+~/cron_scripts/AUTO/gallery is a valid crontab
+~/cron_scripts/crontab has errors:
+Invalid month "foo".
+
+Not loading new crontab. Use -f to force.
+
+$ cronload -f
+
+~/cron_scripts...
+...
+
+Loading 2 crontab files... done.
+
+$ cronload -f -f
+
+~/cron_scripts...
+...
+
+Loading 3 crontab (1 BROKEN!) files... done.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Index: /tags/fc9-eol/locker/cron/src/Makefile
===================================================================
--- /tags/fc9-eol/locker/cron/src/Makefile	(revision 1257)
+++ /tags/fc9-eol/locker/cron/src/Makefile	(revision 1257)
@@ -0,0 +1,27 @@
+# Makefile for dillon's cron and crontab
+#
+
+DESTDIR ?= /usr/local
+CC  = gcc
+CFLAGS = -O2 -Wall -Wstrict-prototypes
+LIB = 
+D_SRCS = cronload.real.c subs.c
+D_OBJS = cronload.real.o subs.o
+
+all:	cronload.real
+
+cronload.real:  ${D_OBJS}
+	${CC} ${CFLAGS} -o cronload.real ${D_OBJS}
+	strip cronload.real
+
+clean:  cleano
+	rm -f cronload.real
+
+cleano:
+	rm -f *.o
+
+install:
+	install -o root -g wheel -m 4755 cronload.real ${DESTDIR}/bin/cronload.real
+#	install -o root -g wheel -m 0644 crontab.1 ${DESTDIR}/man/man1/crontab.1
+
+
Index: /tags/fc9-eol/locker/cron/src/cronload.real.c
===================================================================
--- /tags/fc9-eol/locker/cron/src/cronload.real.c	(revision 1257)
+++ /tags/fc9-eol/locker/cron/src/cronload.real.c	(revision 1257)
@@ -0,0 +1,262 @@
+
+/*
+ * cronload.real.c
+ *
+ * CRONTAB
+ *
+ * usually setuid root, -c option only works if getuid() == geteuid()
+ *
+ * Copyright 1994 Matthew Dillon (dillon@apollo.backplane.com)
+ * May be distributed under the GNU General Public License
+ */
+
+#include "defs.h"
+
+#define VERSION	"$Revision$"
+
+const char *CDir = SCRIPTS_CRONTABS;
+int   UserId;
+short LogLevel = 9;
+
+int GetReplaceStream(const char *user, const char *file);
+extern int ChangeUser(const char *user, short dochdir);
+
+int
+main(int ac, char **av)
+{
+    enum { NONE, LIST, REPLACE, DELETE } option = NONE;
+    struct passwd *pas;
+    char *repFile = NULL;
+    int repFd = 0;
+    int i;
+    char caller[256];		/* user that ran program */
+
+    UserId = getuid();
+    if ((pas = getpwuid(UserId)) == NULL) {
+        perror("getpwuid");
+        exit(1);
+    }
+    snprintf(caller, sizeof(caller), "%s", pas->pw_name);
+
+    i = 1;
+    if (ac > 1) {
+        if (av[1][0] == '-' && av[1][1] == 0) {
+            option = REPLACE;
+            ++i;
+	} else if (av[1][0] != '-') {
+            option = REPLACE;
+            ++i;
+            repFile = av[1];
+	}
+    }
+
+    for (; i < ac; ++i) {
+        char *ptr = av[i];
+
+        if (*ptr != '-')
+            break;
+	ptr += 2;
+
+	switch(ptr[-1]) {
+	case 'l':
+	    if (ptr[-1] == 'l')
+		option = LIST;
+	    /* fall through */
+	case 'd':
+	    if (ptr[-1] == 'd')
+		option = DELETE;
+	    /* fall through */
+	case 'u':
+	    if (i + 1 < ac && av[i+1][0] != '-') {
+	        ++i;
+	        if (getuid() == geteuid()) {
+		    pas = getpwnam(av[i]);
+		    if (pas) {
+			UserId = pas->pw_uid;
+		    } else {
+			errx(1, "user %s unknown\n", av[i]);
+		    }
+		} else {
+		    errx(1, "only the superuser may specify a user\n");
+		}
+	    }
+	    break;
+	case 'c':
+	    if ((getuid() == geteuid()) && (0 == getuid())) {
+		CDir = (*ptr) ? ptr : av[++i];
+	    } else {
+	        errx(1, "-c option: superuser only\n");
+	    }
+	    break;
+	default:
+	    i = ac;
+	    break;
+	}
+    }
+    if (i != ac || option == NONE) {
+	printf("cronload.real " VERSION "\n");
+	printf("cronload.real file <opts>  replace crontab from file\n");
+	printf("cronload.real -    <opts>  replace crontab from stdin\n");
+	printf("cronload.real -u user      specify user\n");
+	printf("cronload.real -l [user]    list crontab for user\n");
+	printf("cronload.real -d [user]    delete crontab for user\n");
+	printf("cronload.real -c dir       specify crontab directory\n");
+	exit(0);
+    }
+
+    /*
+     * Get password entry
+     */
+
+    if ((pas = getpwuid(UserId)) == NULL) {
+        perror("getpwuid");
+        exit(1);
+    }
+
+    /*
+     * If there is a replacement file, obtain a secure descriptor to it.
+     */
+
+    if (repFile) {
+        repFd = GetReplaceStream(caller, repFile);
+        if (repFd < 0) {
+            errx(1, "unable to read replacement file\n");
+        }
+    }
+
+    /*
+     * Change directory to our crontab directory
+     */
+
+    if (chdir(CDir) < 0) {
+        errx(1, "cannot change dir to %s: %s\n", CDir, strerror(errno));
+    }
+
+    /*
+     * Handle options as appropriate
+     */
+
+    switch(option) {
+    case LIST:
+	{
+	    FILE *fi;
+	    char buf[1024];
+
+	    if ((fi = fopen(pas->pw_name, "r"))) {
+		while (fgets(buf, sizeof(buf), fi) != NULL)
+		    fputs(buf, stdout);
+		fclose(fi);
+	    } else {
+		fprintf(stderr, "no crontab for %s\n", pas->pw_name);
+	    }
+	}
+	break;
+    case REPLACE:
+	{
+	    char buf[1024];
+	    char path[1024];
+	    int fd;
+	    int n;
+
+	    snprintf(path, sizeof(path), "%s.new", pas->pw_name);
+	    if ((fd = open(path, O_CREAT|O_TRUNC|O_EXCL|O_APPEND|O_WRONLY, 0600)) >= 0) {
+		while ((n = read(repFd, buf, sizeof(buf))) > 0) {
+		    write(fd, buf, n);
+		}
+		close(fd);
+		rename(path, pas->pw_name);
+	    } else {
+		fprintf(stderr, "unable to create %s/%s: %s\n", 
+		    CDir,
+		    path,
+		    strerror(errno)
+		);
+	    }
+	    close(repFd);
+	}
+	break;
+    case DELETE:
+        remove(pas->pw_name);
+        break;
+    case NONE:
+    default: 
+        break;
+    }
+
+    /*
+     *  Bump notification file.  Handle window where crond picks file up
+     *  before we can write our entry out.
+     */
+	/* // only applicable to dcron
+    if (option == REPLACE || option == DELETE) {
+        FILE *fo;
+        struct stat st;
+
+        while ((fo = fopen(CRONUPDATE, "a"))) {
+			fprintf(fo, "%s\n", pas->pw_name);
+			fflush(fo);
+			if (fstat(fileno(fo), &st) != 0 || st.st_nlink != 0) {
+			fclose(fo);
+			break;
+			}
+			fclose(fo);
+			// * loop * /
+		}
+		if (fo == NULL) {
+			fprintf(stderr, "unable to append to %s/%s\n", CDir, CRONUPDATE);
+		}
+    }
+    */
+    (volatile void)exit(0);
+    /* not reached */
+}
+
+int
+GetReplaceStream(const char *user, const char *file)
+{
+    int filedes[2];
+    int pid;
+    int fd;
+    int n;
+    char buf[1024];
+
+    if (pipe(filedes) < 0) {
+        perror("pipe");
+        return(-1);
+    }
+    if ((pid = fork()) < 0) {
+        perror("fork");
+        return(-1);
+    }
+    if (pid > 0) {
+        /*
+         * PARENT
+         */
+
+	close(filedes[1]);
+	if (read(filedes[0], buf, 1) != 1) {
+	    close(filedes[0]);
+	    filedes[0] = -1;
+	}
+	return(filedes[0]);
+    }
+
+    /*
+     * CHILD
+     */
+
+    close(filedes[0]);
+
+    if (ChangeUser(user, 0) < 0)
+        exit(0);
+
+    fd = open(file, O_RDONLY);
+    if (fd < 0)
+        errx(0, "unable to open %s\n", file);
+    buf[0] = 0;
+    write(filedes[1], buf, 1);
+    while ((n = read(fd, buf, sizeof(buf))) > 0) {
+        write(filedes[1], buf, n);
+    }
+    exit(0);
+}
Index: /tags/fc9-eol/locker/cron/src/defs.h
===================================================================
--- /tags/fc9-eol/locker/cron/src/defs.h	(revision 1257)
+++ /tags/fc9-eol/locker/cron/src/defs.h	(revision 1257)
@@ -0,0 +1,46 @@
+
+/*
+ * DEFS.H
+ *
+ * Copyright 1994-1998 Matthew Dillon (dillon@backplane.com)
+ * May be distributed under the GNU General Public License
+ */
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/ioctl.h>
+#include <sys/wait.h>
+#include <sys/resource.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <errno.h>
+#include <time.h>
+#include <dirent.h>
+#include <fcntl.h>
+#include <pwd.h>
+#include <unistd.h>
+#include <grp.h>
+#include <err.h>
+
+#define Prototype extern
+#define arysize(ary)	(sizeof(ary)/sizeof((ary)[0]))
+
+#ifndef SCRIPTS_CRONTABS
+#define SCRIPTS_CRONTABS	"/mit/scripts/cron/crontabs"
+#endif
+#ifndef TMPDIR
+#define TMPDIR		"/tmp"
+#endif
+#ifndef OPEN_MAX
+#define OPEN_MAX	256
+#endif
+
+#ifndef CRONUPDATE
+#define CRONUPDATE	"cron.update"
+#endif
+
+#ifndef MAXLINES
+#define MAXLINES	256		/* max lines in non-root crontabs */
+#endif
Index: /tags/fc9-eol/locker/cron/src/subs.c
===================================================================
--- /tags/fc9-eol/locker/cron/src/subs.c	(revision 1257)
+++ /tags/fc9-eol/locker/cron/src/subs.c	(revision 1257)
@@ -0,0 +1,147 @@
+
+/*
+ * SUBS.C
+ *
+ * Copyright 1994 Matthew Dillon (dillon@apollo.backplane.com)
+ * May be distributed under the GNU General Public License
+ */
+
+#include "defs.h"
+
+Prototype void logn(int level, const char *ctl, ...);
+Prototype void log9(const char *ctl, ...);
+Prototype void logfd(int fd, const char *ctl, ...);
+Prototype void fdprintf(int fd, const char *ctl, ...);
+Prototype int ChangeUser(const char *user, short dochdir);
+Prototype void vlog(int level, int fd, const char *ctl, va_list va);
+Prototype int slog(char *buf, const char *ctl, int nmax, va_list va, short useDate);
+
+extern short LogLevel;
+
+void 
+log9(const char *ctl, ...)
+{
+    va_list va;
+
+    va_start(va, ctl);
+    vlog(9, 2, ctl, va);
+    va_end(va);
+}
+
+void 
+logn(int level, const char *ctl, ...)
+{
+    va_list va;
+
+    va_start(va, ctl);
+    vlog(level, 2, ctl, va);
+    va_end(va);
+}
+
+void 
+logfd(int fd, const char *ctl, ...)
+{
+    va_list va;
+
+    va_start(va, ctl);
+    vlog(9, fd, ctl, va);
+    va_end(va);
+}
+
+void 
+fdprintf(int fd, const char *ctl, ...)
+{
+    va_list va;
+    char buf[2048];
+
+    va_start(va, ctl);
+    vsnprintf(buf, sizeof(buf), ctl, va);
+    write(fd, buf, strlen(buf));
+    va_end(va);
+}
+
+void
+vlog(int level, int fd, const char *ctl, va_list va)
+{
+    char buf[2048];
+    short n;
+    static short useDate = 1;
+
+    if (level >= LogLevel) {
+        write(fd, buf, n = slog(buf, ctl, sizeof(buf), va, useDate));
+	useDate = (n && buf[n-1] == '\n');
+    }
+}
+
+int
+slog(char *buf, const char *ctl, int nmax, va_list va, short useDate)
+{
+    time_t t = time(NULL);
+    struct tm *tp = localtime(&t);
+
+    buf[0] = 0;
+    if (useDate)
+	strftime(buf, 128, "%d-%b-%y %H:%M  ", tp);
+    vsnprintf(buf + strlen(buf), nmax, ctl, va);
+    return(strlen(buf));
+}
+
+int
+ChangeUser(const char *user, short dochdir)
+{
+    struct passwd *pas;
+
+    /*
+     * Obtain password entry and change privilages
+     */
+
+    if ((pas = getpwnam(user)) == 0) {
+        logn(9, "failed to get uid for %s", user);
+        return(-1);
+    }
+    setenv("USER", pas->pw_name, 1);
+    setenv("HOME", pas->pw_dir, 1);
+    setenv("SHELL", "/bin/sh", 1);
+
+    /*
+     * Change running state to the user in question
+     */
+
+    if (initgroups(user, pas->pw_gid) < 0) {
+	logn(9, "initgroups failed: %s %s", user, strerror(errno));
+	return(-1);
+    }
+    if (setregid(pas->pw_gid, pas->pw_gid) < 0) {
+	logn(9, "setregid failed: %s %d", user, pas->pw_gid);
+	return(-1);
+    }
+    if (setreuid(pas->pw_uid, pas->pw_uid) < 0) {
+	logn(9, "setreuid failed: %s %d", user, pas->pw_uid);
+	return(-1);
+    }
+    if (dochdir) {
+	if (chdir(pas->pw_dir) < 0) {
+	    logn(8, "chdir failed: %s %s", user, pas->pw_dir);
+	    if (chdir(TMPDIR) < 0) {
+		logn(9, "chdir failed: %s %s", user, pas->pw_dir);
+		logn(9, "chdir failed: %s " TMPDIR, user);
+		return(-1);
+	    }
+	}
+    }
+    return(pas->pw_uid);
+}
+
+#if 0
+
+char *
+strdup(const char *str)
+{
+    char *ptr = malloc(strlen(str) + 1);
+
+    if (ptr)
+        strcpy(ptr, str);
+    return(ptr);
+}
+
+#endif
Index: /tags/fc9-eol/locker/deploy/bin/advancedbook
===================================================================
--- /tags/fc9-eol/locker/deploy/bin/advancedbook	(revision 1257)
+++ /tags/fc9-eol/locker/deploy/bin/advancedbook	(revision 1257)
@@ -0,0 +1,39 @@
+#!/usr/bin/perl
+use strict;
+use FindBin qw($Bin);
+use lib $Bin;
+use onserver;
+
+setup();
+
+undef $/;
+
+open(FILE, "admin/contemp.php");
+my $a = <FILE>;
+close(FILE);
+$a =~ s/localhost/$sqlhost/g;
+$a =~ s/dbuser/$sqluser/g;
+$a =~ s/dbpass/$sqlpass/g;
+$a =~ s/guestbookdb/$sqldb/g;
+$a =~ s/useremail/$email/g;
+open(FILE, ">admin/config.inc.php");
+print FILE $a;
+close(FILE);
+
+open(FILE, "instemp.php");
+$a = <FILE>;
+close(FILE);
+$a =~ s/gbuser/$admin_username/g;
+$a =~ s/gbpass/$admin_password/g;
+open(FILE, ">install.php");
+print FILE $a;
+close(FILE);
+
+fetch_uri(
+    'install.php',
+    {},
+    {action => 'Create table',
+     db => $sqldb,
+     host => $sqlhost,
+     name => $sqluser,
+     pass => $sqlpass});
Index: /tags/fc9-eol/locker/deploy/bin/advancedpoll
===================================================================
--- /tags/fc9-eol/locker/deploy/bin/advancedpoll	(revision 1257)
+++ /tags/fc9-eol/locker/deploy/bin/advancedpoll	(revision 1257)
@@ -0,0 +1,39 @@
+#!/usr/bin/perl
+use strict;
+use FindBin qw($Bin);
+use lib $Bin;
+use onserver;
+
+setup();
+
+undef $/;
+open(FILE, "include/contemp.php");
+my $a = <FILE>;
+close(FILE);
+$a =~ s/localhost/$sqlhost/g;
+$a =~ s/dbuser/$sqluser/g;
+$a =~ s/dbpass/$sqlpass/g;
+$a =~ s/polldb/$sqldb/g;
+open(FILE, ">include/config.inc.php");
+print FILE $a;
+close(FILE);
+
+fetch_uri('install.php', {action => 'step_2'});
+fetch_uri('install.php', {action => 'step_3'});
+fetch_uri('install.php', {action => 'step_4'});
+
+fetch_uri(
+    'install.php',
+    {action => 'step_6'},
+    {action => 'step_6',
+     username => $admin_username,
+     password => $admin_password});
+
+unlink('include/contemp.php');
+
+print <<END;
+Your $sname Admin Panel is at
+http://$server/~$USER/$addrend/admin
+You can use this admin panel to create your first poll.
+END
+press_enter();
Index: /tags/fc9-eol/locker/deploy/bin/django
===================================================================
--- /tags/fc9-eol/locker/deploy/bin/django	(revision 1257)
+++ /tags/fc9-eol/locker/deploy/bin/django	(revision 1257)
@@ -0,0 +1,121 @@
+#!/usr/bin/perl
+use strict;
+use FindBin qw($Bin);
+use lib $Bin;
+use onserver;
+
+setup();
+
+print "\nEnter the code name for your project (a valid Python package name).\n";
+print "Do not use 'django' or the name of any other Python library.\n";
+print "Project name: ";
+my $name = <STDIN>;
+chomp $name;
+
+open FASTCGI, ">index.fcgi";
+print FASTCGI <<EOF;
+#!/usr/bin/env python
+import sys, os
+sys.path.insert(0, "/mit/$USER/Scripts/django")
+os.chdir("/mit/$USER/Scripts/django/$name")
+os.environ['DJANGO_SETTINGS_MODULE'] = "$name.settings"
+
+from django.core.servers.fastcgi import runfastcgi
+runfastcgi(method="threaded", daemonize="false")
+EOF
+close FASTCGI;
+chmod 0755, "index.fcgi";
+
+open HTACCESS, ">.htaccess";
+print HTACCESS <<EOF;
+RewriteEngine On
+RewriteCond %{REQUEST_FILENAME} !-f
+RewriteCond %{REQUEST_FILENAME} !-d
+RewriteRule ^(.*)\$ index.fcgi/\$1 [QSA,L]
+EOF
+close HTACCESS;
+chmod 0777, ".htaccess";
+
+chdir "/mit/$USER/Scripts/django/";
+system qw{django-admin.py startproject}, $name;
+chdir "$name";
+
+open SETTINGS, "settings.py";
+open NEWSETTINGS, ">settings.py.new";
+while (<SETTINGS>) {
+  chomp;
+  if (/Your Name/) {
+    $_ = "    ('$USER', '$email'),";
+  } elsif (/^DATABASE_ENGINE/) {
+    $_ = "DATABASE_ENGINE = 'mysql'";
+  } elsif  (/^DATABASE_NAME/) {
+    $_ = "DATABASE_NAME = '$sqldb'";
+  } elsif (/^DATABASE_USER/) {
+    $_ = "DATABASE_USER = '$sqluser'";
+  } elsif (/^DATABASE_PASSWORD/) {
+    $_ = "DATABASE_PASSWORD = '$sqlpass'";
+  } elsif (/^DATABASE_HOST/) {
+    $_ = "DATABASE_HOST = '$sqlhost'";
+  } elsif (/Chicago/) {
+    $_ =~ s/Chicago/New_York/;
+  } elsif (/^ADMIN_MEDIA_PREFIX/) {
+    $_ = "ADMIN_MEDIA_PREFIX = '/__scripts/django/media/'";
+  } elsif (/^INSTALLED_APPS/) {
+    print NEWSETTINGS "$_\n";
+    while (<SETTINGS>) {
+      if (/^\)/) {
+	print NEWSETTINGS "    'django.contrib.admin',\n";
+	print NEWSETTINGS "    'django.contrib.admindocs',\n";
+      }
+      print NEWSETTINGS $_;
+    }
+  }
+  print NEWSETTINGS "$_\n";
+}
+close NEWSETTINGS;
+close SETTNGS;
+rename "settings.py.new", "settings.py";
+
+open URLS, "urls.py";
+open NEWURLS, ">urls.py.new";
+while (<URLS>) {
+  chomp;
+  if (/^#.*from django\.contrib import admin/) {
+    $_ =~ s/^# *//;
+  } elsif (/^#.*admin.autodiscover/) {
+    $_ =~ s/^# *//;
+  } elsif (/^ *# *\(r\'\^admin\//) {
+    $_ =~ s/# *//;
+  }
+  print NEWURLS "$_\n";
+}
+close NEWURLS;
+close URLS;
+rename "urls.py.new", "urls.py";
+
+print "Initializing your project's SQL database schema...\n";
+system qw{./manage.py syncdb --noinput};
+print "...done\n";
+
+print "Creating your superuser account... ";
+system qw{./manage.py createsuperuser --username}, $admin_username, "--email", $email, "--noinput";
+print "done\n";
+print "Setting your superuser password... ";
+system qw{mysql -D}, "$USER+$addrlast", "-e", "UPDATE auth_user SET password=MD5(\'$admin_password\') WHERE username=\'$admin_username\'";
+print "done\n";
+
+print "\nDjango has been installed. The setup is roughly what's described\n";
+print "in the shared-hosting section of\n";
+print "  http://docs.djangoproject.com/en/dev/howto/deployment/fastcgi/\n";
+print "We've also enabled the admin app. You can start from the 'Creating\n";
+print "models' step of the Django tutorial:\n";
+print "  http://docs.djangoproject.com/en/dev/intro/tutorial01/#id3\n\n";
+print "Your project is located in:\n";
+print "  /mit/$USER/Scripts/django/$name/\n";
+print "To access manage.py, run 'ssh -k $USER\@scripts' and cd to the above directory.\n\n";
+print "When you edit your code, run the command\n";
+print "  touch /mit/$USER/web_scripts/$addrend/index.fcgi\n";
+print "before testing, to cause your site to reload the new code.\n";
+press_enter;
+
+exit 0;
Index: /tags/fc9-eol/locker/deploy/bin/e107
===================================================================
--- /tags/fc9-eol/locker/deploy/bin/e107	(revision 1257)
+++ /tags/fc9-eol/locker/deploy/bin/e107	(revision 1257)
@@ -0,0 +1,42 @@
+#!/usr/bin/perl
+use strict;
+use FindBin qw($Bin);
+use lib $Bin;
+use onserver;
+
+setup();
+
+my ($preva) = fetch_uri(
+    'install.php',
+    {},
+    {server => $sqlhost,
+     name => $sqluser,
+     password => $sqlpass,
+     db => $sqldb,
+     prefix => 'e107_',
+     stage => 3}) =~ /name='previous_steps' value='(.*)'/;
+
+my ($prevb) = fetch_uri(
+    'install.php',
+    {},
+    {stage => 4,
+     previous_steps => $preva}) =~ /name='previous_steps' value='(.*)'/;
+
+my ($prevc) = fetch_uri(
+    'install.php',
+    {},
+    {u_name => $admin_username,
+     d_name => $admin_username,
+     pass1 => $admin_password,
+     pass2 => $admin_password,
+     email => $email,
+     stage => 6,
+     previous_steps => $prevb}) =~ /name='previous_steps' value='(.*)'/;
+
+fetch_uri(
+    'install.php',
+    {},
+    {stage => "7",
+     previous_steps => $prevc});
+
+unlink 'install.php';
Index: /tags/fc9-eol/locker/deploy/bin/gallery2
===================================================================
--- /tags/fc9-eol/locker/deploy/bin/gallery2	(revision 1257)
+++ /tags/fc9-eol/locker/deploy/bin/gallery2	(revision 1257)
@@ -0,0 +1,62 @@
+#!/usr/bin/perl
+use strict;
+use FindBin qw($Bin);
+use lib $Bin;
+use onserver_star;
+use File::Path
+
+setup();
+
+my $dir = "/mit/$USER/scripts-gallery2/$sqldb";
+if (-e $dir) {
+    print STDERR "ERROR: The directory $dir already exists.\nTry selecting a different name.";
+    exit 1;
+}
+mkpath($dir);
+
+system("patch", "install/steps/AuthenticateStep.class",
+       "/mit/scripts/deploy$scriptsdev/gallery2.patch");
+
+$ua->cookie_jar({file => '.cookies'});
+
+fetch_uri('install/index.php');
+fetch_uri('install/index.php', {step => 1},
+	  {language => 'en_US'});
+fetch_uri('install/index.php', {step => 2}, {});
+fetch_uri('install/index.php', {step => 3}, {});
+
+my $post4 = {isMultisite => 0,
+	    dir => $dir,
+	    action => 'save'};
+fetch_uri('install/index.php', {step => 4}, $post4);
+fetch_uri('install/index.php', {step => 4}, $post4);
+
+my $post5 = {type => 'mysql',
+	     hostname => $sqlhost,
+	     action => 'save',
+	     confirmReuseTables => '',
+	     confirmCleanInstall => '',
+	     username => $sqluser,
+	     password => $sqlpass,
+	     database => $sqldb,
+	     tablePrefix => 'g2_',
+	     columnPrefix => 'g_'};
+fetch_uri('install/index.php', {step => 5}, $post5);
+fetch_uri('install/index.php', {step => 5}, $post5);
+
+fetch_uri('install/index.php', {step => 6},
+	  {adminName => $admin_username,
+	   passwordA => $admin_password,
+	   action => 'create',
+	   passwordB => $admin_password,
+	   email => $email,
+	   fullName => $USER});
+fetch_uri('install/index.php', {step => 7}, {});
+fetch_uri('install/index.php', {step => 8}, {});
+fetch_uri('install/index.php', {step => 9},
+	  {'module[imagemagick]' => 'on',
+	   activate => 1});
+fetch_uri('install/index.php', {step => 10}, {});
+fetch_uri('install/index.php', {step => 11}, {});
+
+unlink '.cookies';
Index: /tags/fc9-eol/locker/deploy/bin/joomla
===================================================================
--- /tags/fc9-eol/locker/deploy/bin/joomla	(revision 1257)
+++ /tags/fc9-eol/locker/deploy/bin/joomla	(revision 1257)
@@ -0,0 +1,86 @@
+#!/usr/bin/perl
+use strict;
+use FindBin qw($Bin);
+use lib $Bin;
+use onserver;
+use File::Path;
+
+setup();
+
+print "\nPlease decide upon a title for your site and enter it below.\n";
+print "Desired title: ";
+my $title = <STDIN>;
+chomp($title);
+
+print "\nSetting up your configuration file...\n";
+open CONFIGTEMPLATE, "configuration.php-dist";
+open CONFIGURATION, ">configuration.php";
+while (<CONFIGTEMPLATE>) {
+  chomp;
+  if (/var \$sitename /) {
+    $_ = "	var \$sitename = '$title';";
+  } elsif (/var \$dbtype /) {
+    $_ = "	var \$dbtype = 'mysql';";
+  } elsif (/var \$host /) {
+    $_ = "	var \$host = '$sqlhost';";
+  } elsif (/var \$user /) {
+    $_ = "	var \$user = '$sqluser';";
+  } elsif (/var \$password /) {
+    $_ = "	var \$password = '$sqlpass';";
+  } elsif (/var \$db /) {
+    $_ = "	var \$db = '$sqldb';";
+  } elsif (/var \$dbprefix /) {
+    $_ = "	var \$dbprefix = 'jos_';";
+  } elsif (/var \$secret /) {
+    my $random = `dd if=/dev/urandom bs=1k count=1 | md5sum | cut -c1-32`;
+    $random =~ s/\n//;
+    $_ = "	var \$secret = '$random';";
+  } elsif (/var \$mailfrom /) {
+    $_ = "	var \$mailfrom = '$email';";
+  } elsif (/var \$fromname /) {
+    $_ = "	var \$fromname = '$title';";
+  }
+  print CONFIGURATION "$_\n";
+}
+close CONFIGURATION;
+close CONFIGTEMPLATE;
+
+print "\nInitializing database schema...\n";
+my $schemafile = "installation/sql/mysql/joomla-real.sql";
+open SCHEMATEMPLATE, "installation/sql/mysql/joomla.sql";
+open SCHEMA, ">$schemafile";
+while (<SCHEMATEMPLATE>) {
+  if (/#__/) {
+    $_ =~ s/#__/jos_/g;
+  }
+  print SCHEMA "$_";
+}
+close SCHEMA;
+close SCHEMATEMPLATE;
+system("cat $schemafile | mysql $sqldb");
+
+print "\nLoading sample data...\n";
+my $sampledatafile = "installation/sql/mysql/sample_data-real.sql";
+open SAMPLETEMPLATE, "installation/sql/mysql/sample_data.sql";
+open SAMPLE, ">$sampledatafile";
+while (<SAMPLETEMPLATE>) {
+  if (/#__/) {
+    $_ =~ s/#__/jos_/g;
+  }
+  print SAMPLE "$_";
+}
+close SAMPLE;
+close SAMPLETEMPLATE;
+system("cat $sampledatafile | mysql $sqldb");
+
+print "\nCreating your admin account...\n";
+system("mysql -e \"INSERT INTO jos_users VALUES (62, 'Administrator', '$admin_username', '$email', MD5('$admin_password'), 'Super Administrator', 0, 1, 25, NOW(), NOW(), '', '')\" $sqldb");
+system("mysql -e \"INSERT INTO jos_core_acl_aro VALUES (10, 'users', '62', 0, 'Administrator', 0)\" $sqldb");
+system("mysql -e \"INSERT INTO jos_core_acl_groups_aro_map VALUES (25, '', 10)\" $sqldb");
+
+print "\nCleaning up installation tree...\n";
+rmtree('installation');
+
+print "\nDone!\n";
+exit 0;
+
Index: /tags/fc9-eol/locker/deploy/bin/mediawiki
===================================================================
--- /tags/fc9-eol/locker/deploy/bin/mediawiki	(revision 1257)
+++ /tags/fc9-eol/locker/deploy/bin/mediawiki	(revision 1257)
@@ -0,0 +1,36 @@
+#!/usr/bin/perl
+use strict;
+use FindBin qw($Bin);
+use lib $Bin;
+use onserver;
+
+setup();
+
+`cp skins/common/images/mediawiki.png skins/common/images/wiki.png`;
+`patch -s -p1 < /mit/scripts/deploy/mediawiki.patch`;
+
+print "\nPlease decide upon a title for your wiki and enter it below.\n";
+print "Desired title: ";
+my $title=<STDIN>;
+chomp($title);
+
+my $html = fetch_uri(
+    'config/index.php',
+    {},
+    {Sitename => $title,
+     EmergencyContact => $email,
+     LanguageCode => 'en',
+     DBserver => $sqlhost,
+     DBname => $sqldb,
+     DBuser => $sqluser,
+     DBpassword => $sqlpass,
+     DBpassword2 => $sqlpass,
+     defaultEmail => $email,
+     SysopName => $admin_username,
+     SysopPass => $admin_password,
+     SysopPass2 => $admin_password});
+unless ($html =~ /Installation successful/) {
+    print STDERR "ERROR: Automatic MediaWiki configuration failed.  You will need to configure\nyour MediaWiki manually, or email scripts\@mit.edu for help.\n";
+    exit;
+}
+`cp config/LocalSettings.php .`;
Index: /tags/fc9-eol/locker/deploy/bin/mediawiki-star
===================================================================
--- /tags/fc9-eol/locker/deploy/bin/mediawiki-star	(revision 1257)
+++ /tags/fc9-eol/locker/deploy/bin/mediawiki-star	(revision 1257)
@@ -0,0 +1,36 @@
+#!/usr/bin/perl
+use strict;
+use FindBin qw($Bin);
+use lib $Bin;
+use onserver_star;
+
+setup();
+
+`cp skins/common/images/mediawiki.png skins/common/images/wiki.png`;
+`patch -s -p1 < /mit/scripts/deploy/mediawiki.patch`;
+
+print "\nPlease decide upon a title for your wiki and enter it below.\n";
+print "Desired title: ";
+my $title=<STDIN>;
+chomp($title);
+
+my $html = fetch_uri(
+    'config/index.php',
+    {},
+    {Sitename => $title,
+     EmergencyContact => $email,
+     LanguageCode => 'en',
+     DBserver => $sqlhost,
+     DBname => $sqldb,
+     DBuser => $sqluser,
+     DBpassword => $sqlpass,
+     DBpassword2 => $sqlpass,
+     defaultEmail => $email,
+     SysopName => $admin_username,
+     SysopPass => $admin_password,
+     SysopPass2 => $admin_password});
+unless ($html =~ /Installation successful/) {
+    print STDERR "ERROR: Automatic MediaWiki configuration failed.  You will need to configure\nyour MediaWiki manually, or email scripts\@mit.edu for help.\n";
+    exit;
+}
+`cp config/LocalSettings.php .`;
Index: /tags/fc9-eol/locker/deploy/bin/onathena
===================================================================
--- /tags/fc9-eol/locker/deploy/bin/onathena	(revision 1257)
+++ /tags/fc9-eol/locker/deploy/bin/onathena	(revision 1257)
@@ -0,0 +1,265 @@
+#!/bin/sh
+
+checkfailed() {
+  if [ -f "$lroot/web_scripts/$addrend/.failed" ]; then
+    rm -f "$lroot/web_scripts/$addrend/.failed"
+    exit 1
+  fi
+}
+
+die() {
+  echo "== INSTALLATION FAILED =="
+  echo "Sorry, the installation failed:"
+  echo "$@"
+  echo "Please contact scripts@mit.edu and provide a copy of the output of this installer."
+  exit 1
+}
+  
+
+sshrun() {
+  athrun scripts scripts-ssh "$lname" "/mit/scripts/$@" 2>/dev/null
+}
+
+vsshrun() {
+  athrun scripts scripts-ssh "$lname" "/mit/scripts/$@"
+}
+
+checksqlpass() {
+    errors=`sshrun "sql/bin$scriptsdev/test-password"`
+    if [ "$errors" != "" ]; then
+        if [ "$1" -eq 1 ]; then
+          rm -f "$lroot/.sql/my.cnf"
+        fi
+        echo
+        echo "ERROR:"
+        printf "$2"
+        exit
+    fi
+}
+
+override=1
+if [ "$override" = "" ]; then
+echo "The scripts.mit.edu automatic installers are currently unavailable."
+echo "We hope to make them available again soon."
+echo "If you would like us to notify you as soon as they are available again,"
+echo "let us know by sending us an e-mail at scripts@mit.edu"
+exit 
+fi
+
+echo 
+echo "== Welcome to the scripts.mit.edu installer for $sname =="
+echo
+
+echo "For documentation, including a link to the Athena rules of use,"
+echo "see <http://scripts.mit.edu/start>."
+echo
+echo "Please report problems with this installer to scripts@mit.edu."
+echo
+echo "Are you performing this install for:"
+echo "1. Your personal Athena account"
+echo "2. A locker that you control (a club, a course, etc)"
+echo "If you do not understand this question, you should answer '1'."
+printf "Please enter either '1' or '2' (without quotes): "
+read whofor
+if [ "$whofor" = 1 ]; then
+    lname="${ATHENA_USER:-$USER}"
+elif [ "$whofor" = 2 ]; then
+    echo
+    echo "OK.  $sname will be installed into a locker of your choice that"
+    echo "you control.  Please enter the name of the selected locker below."
+    echo "(For the locker /mit/lsc -- which has a full path of"
+    echo "/afs/athena.mit.edu/activity/l/lsc -- you would simply enter lsc)."
+    printf "Locker name: "
+    read lname
+else
+    echo
+    echo "ERROR:"
+    echo "You must select either '1' or '2'."
+    exit 1
+fi
+while true; do
+    if attach "$lname"; then
+        break
+    fi
+    echo "$lname is not a valid locker name."
+    printf "Locker name: "
+    read lname
+done
+lroot="/mit/$lname" 
+
+echo
+echo Checking the status of your scripts.mit.edu account...
+
+attach scripts 2>/dev/null
+. "/mit/scripts/bin$scriptsdev/signup-web"
+
+echo
+echo "Your new copy of $sname will appear on the web at a URL"
+echo "that starts with http://$lname.scripts.mit.edu/"
+echo "Please decide upon a complete URL and enter it below."
+echo "You must enter one or more characters after mit.edu/"
+echo "The completed address must only contain a-z, 0-9, and /."
+printf "Desired address: http://$lname.scripts.mit.edu/"
+read addrend
+
+addrend=`perl -0e 'print $ARGV[0] =~ /^([\w\/-]*[\w-])\/*$/' -- "$addrend"`
+if [ "$addrend" = "" ]; then
+	echo
+	echo "ERROR:"
+	echo "You must enter one or more characters after mit.edu/"
+	echo "The completed address must only contain a-z, 0-9, and /."
+	exit 1
+fi
+
+if [ -d "$lroot/web_scripts/$addrend" ]; then
+    echo
+    echo "ERROR:"
+    echo "You already have a directory corresponding to that web address."
+    echo "Please remove that directory, choose a different address, or"
+    echo "contact scripts@mit.edu for assistance."
+    exit 1
+fi
+
+if [ "$requires_sql" = "" ]; then
+  requires_sql=1
+fi
+
+if [ ! -f "$lroot/.my.cnf" ]; then
+  mkdir "$lroot/.sql" 2>/dev/null
+  fs sa "$lroot/.sql" daemon.scripts write
+  fs sa "$lroot/.sql" daemon.sql write
+  ln -nfs "$lroot/.sql/my.cnf" "$lroot/.my.cnf" 2>/dev/null
+fi
+
+fs sa "$lroot/.sql" system:anyuser none
+fs sa "$lroot/.sql" system:authuser none
+
+if [ "$requires_sql" -eq 1 ]; then
+  sqlinfo=`sshrun "sql/bin$scriptsdev/get-password"`
+  if [ "$sqlinfo" = "" ]; then
+      echo 
+      echo "You already have a MySQL account but you do not have a .my.cnf file."
+      echo "If you do not remember your MySQL account password, you can change it"
+      echo "at http://sql.mit.edu using MIT certificates."
+      printf "Please type your MySQL password and press [enter]: "
+      stty -echo
+      read sqlpass
+      stty echo
+      echo
+      sqlhost="sql.mit.edu"
+      sqluser=$lname
+      . "/mit/scripts/sql/bin$scriptsdev/save-password"
+      checksqlpass 1 'The MySQL password that you typed appears to be incorrect.\n'
+      echo
+      echo "OK.  Continuing with the install..."
+  else
+      checksqlpass 0 'The MySQL login information in your .my.cnf file\nappears to be incorrect.\n'
+  fi
+fi
+
+if [ "$prompt_username" = "" ]; then
+  admin_username="admin"
+  prompt_username=0
+fi
+if [ "$prompt_password" = "" ]; then
+  prompt_password=1
+fi
+
+if [ "$prompt_username" -eq 1 ]; then
+    echo
+    echo "You will be able to log in to $sname using a username of your choice."
+    echo "Please decide upon a username and enter it below."
+    echo "Your username must contain only alphanumeric characters (a-z, 0-9)."
+    printf "Desired username: "
+    read admin_username
+    admin_username=`perl -0e 'print $ARGV[0] =~ /^([[:alnum:]]+)$/' -- "$admin_username"`
+    if [ "$admin_username" = "" ]; then
+        echo
+        echo ERROR:
+        echo "Your username must contain only alphanumeric characters (a-z, 0-9)."
+        echo "You will need to run the installer again and choose a different username."
+        exit 1
+    fi
+fi
+
+origdir=`pwd`
+mkdir -p "$lroot/web_scripts_tmp"
+cd "$lroot/web_scripts_tmp"
+fs sa . system:anyuser none
+fs sa . system:authuser none
+fs sa . daemon.scripts write
+fs sa . system:scripts-security-upd write
+echo "This directory is necessary to store login sessions and other transient files for auto-installed packages from scripts.mit.edu." > DO_NOT_DELETE.txt
+mkdir -p "$lroot/web_scripts/$addrend"
+cd "$lroot/web_scripts/$addrend"
+fs sa . system:anyuser none
+fs sa . system:authuser none
+fs sa . daemon.scripts write
+fs sa . system:scripts-security-upd write
+
+if [ "$prompt_password" -eq 1 ]; then
+    stty -echo
+    sshrun "deploy$scriptsdev/bin/prompt-password" "$sname" "$deploy" "$addrend" "$admin_username"
+    stty echo
+fi
+
+echo
+echo "Unpacking $sname... (this step might take several minutes)"
+
+# This version is deprecated, use create_scripts_dir instead
+
+if [ "$create_dir" = "" ]; then
+  create_dir=0
+fi
+
+if [ "$create_dir" -eq 1 ]; then
+  mkdir -p "$lroot/scripts-$deploy"
+  fs sa "$lroot/scripts-$deploy" system:anyuser none
+  fs sa "$lroot/scripts-$deploy" system:authuser none
+  fs sa "$lroot/scripts-$deploy" daemon.scripts write
+  fs sa "$lroot/scripts-$deploy" system:scripts-security-upd write
+fi
+
+# This is the better version
+
+if [ "$create_scripts_dir" = "" ]; then
+  create_scripts_dir=0
+fi
+
+if [ "$create_scripts_dir" -eq 1 ]; then
+  mkdir -p "$lroot/Scripts/$deploy"
+  fs sa "$lroot/Scripts/$deploy" system:anyuser none
+  fs sa "$lroot/Scripts/$deploy" system:authuser none
+  fs sa "$lroot/Scripts/$deploy" daemon.scripts write
+  fs sa "$lroot/Scripts/$deploy" system:scripts-security-upd write
+fi
+
+# xavid: use p to keep the same permissions as in the file
+athrun scripts gtar zxpf "/mit/scripts/deploy$scriptsdev/$deploy.tar.gz"
+files=`athrun scripts gfind . -mindepth 1 -maxdepth 1 | grep -v .admin`
+numfiles=`echo "$files" | wc -l`
+if [ ! -z "$files" ]; then
+    if [ "$numfiles" -eq 1 ]; then
+        athrun scripts gfind . -mindepth 2 -maxdepth 2 | xargs -i mv \{} .
+        rmdir "$files"
+    fi
+fi
+if [ -f "/mit/scripts/deploy$scriptsdev/php.ini/$deploy" ]; then
+	nodot=`echo "$lname" | sed "/\./s///"`;
+	sed -e "/SCRIPTS_USER/ s//$lname/" -e "/SCRIPTS_NODOT/ s//$nodot/" "/mit/scripts/deploy$scriptsdev/php.ini/$deploy" > php.ini
+	athrun scripts gfind . -mindepth 1 -type d -exec sh -c 'ln -sf "`echo "$1" | sed '\''s,[^/],,g; s,/,../,g'\''`php.ini" "$1/"' -- {} \;
+fi
+cd "$origdir"
+
+vsshrun "deploy$scriptsdev/bin/$deploy" "$sname" "$deploy" "$addrend" "$admin_username" "$requires_sql" "$scriptsdev" "$USER" || die "Unknown failure during configuration"
+rm -f "$lroot/web_scripts/$addrend/.scripts-tmp"
+checkfailed
+
+echo
+echo "== Installation complete! =="
+echo "You should now be able to access your new copy of $sname at"
+echo "http://$lname.scripts.mit.edu/$addrend/"
+echo "(You can replace the http with https if you want to use encryption)"
+echo "If you have trouble accessing it, feel free to contact"
+echo "the scripts.mit.edu team by e-mailing scripts@mit.edu"
+exit 0
Index: /tags/fc9-eol/locker/deploy/bin/onathena-star
===================================================================
--- /tags/fc9-eol/locker/deploy/bin/onathena-star	(revision 1257)
+++ /tags/fc9-eol/locker/deploy/bin/onathena-star	(revision 1257)
@@ -0,0 +1,239 @@
+#!/bin/sh
+
+checkfailed() {
+  if [ -f "$lroot/web_scripts/$addrend/.failed" ]; then
+    rm -f "$lroot/web_scripts/$addrend/.failed"
+    exit 1
+  fi
+}
+
+die() {
+  echo "== INSTALLATION FAILED =="
+  echo "Sorry, the installation failed:"
+  echo "$@"
+  echo "Please contact scripts@mit.edu and provide a copy of the output of this installer."
+  exit 1
+}
+  
+
+sshrun() {
+  athrun scripts scripts-ssh "$lname" "/mit/scripts/$@" 2>/dev/null
+}
+
+vsshrun() {
+  athrun scripts scripts-ssh "$lname" "/mit/scripts/$@"
+}
+
+checksqlpass() {
+    errors=`sshrun "sql/bin$scriptsdev/test-password"`
+    if [ "$errors" != "" ]; then
+        if [ "$1" -eq 1 ]; then
+          rm -f "$lroot/.sql/my.cnf"
+        fi
+        echo
+        echo "ERROR:"
+        printf "$2"
+        exit
+    fi
+}
+
+override=1
+if [ "$override" = "" ]; then
+echo "The scripts.mit.edu automatic installers are currently unavailable."
+echo "We hope to make them available again soon."
+echo "If you would like us to notify you as soon as they are available again,"
+echo "let us know by sending us an e-mail at scripts@mit.edu"
+exit 
+fi
+
+echo 
+echo "== Welcome to the scripts.mit.edu installer for $sname =="
+echo
+
+echo "For documentation, including a link to the Athena rules of use,"
+echo "see <http://scripts.mit.edu/start>."
+echo
+echo "Please report problems with this installer to scripts@mit.edu."
+echo
+echo "Are you performing this install for:"
+echo "1. Your personal Athena account"
+echo "2. A locker that you control (a club, a course, etc)"
+echo "If you do not understand this question, you should answer '1'."
+printf "Please enter either '1' or '2' (without quotes): "
+read whofor
+if [ "$whofor" = 1 ]; then
+    lname=$USER
+    lroot=$HOME 
+elif [ "$whofor" = 2 ]; then
+    echo
+    echo "OK.  $sname will be installed into a locker of your choice that"
+    echo "you control.  Please enter the name of the selected locker below."
+    echo "(For the locker /mit/lsc -- which has a full path of"
+    echo "/afs/athena.mit.edu/activity/l/lsc -- you would simply enter lsc)."
+    printf "Locker name: "
+    read lname
+    lroot="/mit/$lname" 
+else
+    echo
+    echo "ERROR:"
+    echo "You must select either '1' or '2'."
+    exit 1
+fi
+
+echo
+echo Checking the status of your scripts.mit.edu account...
+
+attach scripts 2>/dev/null
+. "/mit/scripts/bin$scriptsdev/signup-web"
+
+echo
+echo "Your new copy of $sname will appear on the web at a URL"
+echo "that starts with http://$lname.scripts.mit.edu/"
+echo "Please decide upon a complete URL and enter it below."
+echo "You must enter one or more characters after /"
+echo "The completed address must only contain a-z, 0-9, and /."
+printf "Desired address: http://$lname.scripts.mit.edu/"
+read addrend
+
+addrend=`perl -0e 'print $ARGV[0] =~ /^([\w\/-]*[\w-])\/*$/' -- "$addrend"`
+if [ "$addrend" = "" ]; then
+	echo
+	echo "ERROR:"
+	echo "You must enter one or more characters after /"
+	echo "The completed address must only contain a-z, 0-9, and /."
+	exit 1
+fi
+
+if [ -d "$lroot/web_scripts/$addrend" ]; then
+    echo
+    echo "ERROR:"
+    echo "You already have a directory corresponding to that web address."
+    echo "Please remove that directory, choose a different address, or"
+    echo "contact scripts@mit.edu for assistance."
+    exit 1
+fi
+
+if [ "$requires_sql" = "" ]; then
+  requires_sql=1
+fi
+
+if [ ! -f "$lroot/.my.cnf" ]; then
+  mkdir "$lroot/.sql" 2>/dev/null
+  fs sa "$lroot/.sql" daemon.scripts write
+  fs sa "$lroot/.sql" daemon.sql write
+  ln -nfs "$lroot/.sql/my.cnf" "$lroot/.my.cnf" 2>/dev/null
+fi
+
+fs sa "$lroot/.sql" system:anyuser none
+fs sa "$lroot/.sql" system:authuser none
+
+if [ "$requires_sql" -eq 1 ]; then
+  sqlinfo=`sshrun "sql/bin$scriptsdev/get-password"`
+  if [ "$sqlinfo" = "" ]; then
+      echo 
+      echo "You already have a MySQL account but you do not have a .my.cnf file."
+      echo "If you do not remember your MySQL account password, you can change it"
+      echo "at http://sql.mit.edu using MIT certificates."
+      printf "Please type your MySQL password and press [enter]: "
+      stty -echo
+      read sqlpass
+      stty echo
+      echo
+      sqlhost="sql.mit.edu"
+      sqluser=$lname
+      . "/mit/scripts/sql/bin$scriptsdev/save-password"
+      checksqlpass 1 'The MySQL password that you typed appears to be incorrect.\n'
+      echo
+      echo "OK.  Continuing with the install..."
+  else
+      checksqlpass 0 'The MySQL login information in your .my.cnf file\nappears to be incorrect.\n'
+  fi
+fi
+
+if [ "$prompt_username" = "" ]; then
+  admin_username="admin"
+  prompt_username=0
+fi
+if [ "$prompt_password" = "" ]; then
+  prompt_password=1
+fi
+
+if [ "$prompt_username" -eq 1 ]; then
+    echo
+    echo "You will be able to log in to $sname using a username of your choice."
+    echo "Please decide upon a username and enter it below."
+    echo "Your username must contain only alphanumeric characters (a-z, 0-9)."
+    printf "Desired username: "
+    read admin_username
+    admin_username=`perl -0e 'print $ARGV[0] =~ /^([[:alnum:]]+)$/' -- "$admin_username"`
+    if [ "$admin_username" = "" ]; then
+        echo
+        echo ERROR:
+        echo "Your username must contain only alphanumeric characters (a-z, 0-9)."
+        echo "You will need to run the installer again and choose a different username."
+        exit 1
+    fi
+fi
+
+origdir=`pwd`
+mkdir -p "$lroot/web_scripts_tmp"
+cd "$lroot/web_scripts_tmp"
+fs sa . system:anyuser none
+fs sa . system:authuser none
+fs sa . daemon.scripts write
+fs sa . system:scripts-security-upd write
+echo "This directory is necessary to store login sessions and other transient files for auto-installed packages from scripts.mit.edu." > DO_NOT_DELETE.txt
+mkdir -p "$lroot/web_scripts/$addrend"
+cd "$lroot/web_scripts/$addrend"
+fs sa . system:anyuser none
+fs sa . system:authuser none
+fs sa . daemon.scripts write
+fs sa . system:scripts-security-upd write
+
+if [ "$prompt_password" -eq 1 ]; then
+    stty -echo
+    sshrun "deploy$scriptsdev/bin/prompt-password" "$sname" "$deploy" "$addrend" "$admin_username"
+    stty echo
+fi
+
+echo
+echo "Unpacking $sname... (this step might take several minutes)"
+
+if [ "$create_dir" = "" ]; then
+  create_dir=0
+fi
+
+if [ "$create_dir" -eq 1 ]; then
+  mkdir -p "$lroot/scripts-$deploy"
+  fs sa "$lroot/scripts-$deploy" system:anyuser none
+  fs sa "$lroot/scripts-$deploy" system:authuser none
+  fs sa "$lroot/scripts-$deploy" daemon.scripts write
+  fs sa "$lroot/scripts-$deploy" system:scripts-security-upd write
+fi
+
+athrun scripts gtar zxf "/mit/scripts/deploy$scriptsdev/$deploy.tar.gz"
+files=`athrun scripts gfind . -mindepth 1 -maxdepth 1 | grep -v .admin`
+numfiles=`echo "$files" | wc -l`
+if [ "$numfiles" -eq 1 ]; then
+    athrun scripts gfind . -mindepth 2 -maxdepth 2 | xargs -i mv \{} .
+    rmdir "$files"
+fi
+if [ -f "/mit/scripts/deploy$scriptsdev/php.ini/$deploy" ]; then
+	nodot=`echo "$lname" | sed "/\./s///"`;
+	sed -e "/SCRIPTS_USER/ s//$lname/" -e "/SCRIPTS_NODOT/ s//$nodot/" "/mit/scripts/deploy$scriptsdev/php.ini/$deploy" > php.ini
+	athrun scripts gfind . -mindepth 1 -type d -exec sh -c 'ln -sf "`echo "$1" | sed '\''s,[^/],,g; s,/,../,g'\''`php.ini" "$1/"' -- {} \;
+fi
+cd "$origdir"
+
+vsshrun "deploy$scriptsdev/bin/$deploy" "$sname" "$deploy" "$addrend" "$admin_username" "$requires_sql" "$scriptsdev" "$USER" || die "Unknown failure during configuration"
+rm -f "$lroot/web_scripts/$addrend/.scripts-tmp"
+checkfailed
+
+echo
+echo "== Installation complete! =="
+echo "You should now be able to access your new copy of $sname at"
+echo "http://$lname.scripts.mit.edu/$addrend/"
+echo "(You can replace the http with https if you want to use encryption)"
+echo "If you have trouble accessing it, feel free to contact"
+echo "the scripts.mit.edu team by e-mailing scripts@mit.edu"
+exit 0
Index: /tags/fc9-eol/locker/deploy/bin/onserver.pm
===================================================================
--- /tags/fc9-eol/locker/deploy/bin/onserver.pm	(revision 1257)
+++ /tags/fc9-eol/locker/deploy/bin/onserver.pm	(revision 1257)
@@ -0,0 +1,142 @@
+package onserver;
+use strict;
+use Exporter;
+use Sys::Hostname;
+use File::Spec::Functions;
+use File::Basename;
+use Socket;
+use Cwd qw(abs_path);
+use POSIX qw(strftime);
+use LWP::UserAgent;
+use URI;
+our @ISA = qw(Exporter);
+our @EXPORT = qw(setup totmp fetch_uri print_login_info press_enter $server $tmp $USER $HOME $sname $deploy $addrend $base_uri $ua $admin_username $requires_sql $addrlast $sqlhost $sqluser $sqlpass $sqldb $admin_password $scriptsdev $human $email);
+
+our $server = "scripts.mit.edu";
+
+our ($tmp, $USER, $HOME, $sname, $deploy, $addrend, $base_uri, $ua, $admin_username, $requires_sql, $addrlast, $sqlhost, $sqluser, $sqlpass, $sqldb, $admin_password, $scriptsdev, $human, $email);
+
+$tmp = ".scripts-tmp";
+sub totmp {
+  open(FILE, ">$tmp");
+  print FILE $_[0];
+  close(FILE);
+}
+
+$ua = LWP::UserAgent->new;
+push @{$ua->requests_redirectable}, 'POST';
+
+sub fetch_uri {
+    my ($uri, $get, $post) = @_;
+    my $u = URI->new($uri);
+    my $req;
+    if (defined $post) {
+	$u->query_form($post);
+	my $content = $u->query;
+	$u->query_form($get);
+	$req = HTTP::Request->new(POST => $u->abs($base_uri));
+	$req->content_type('application/x-www-form-urlencoded');
+	$req->content($content);
+    } else {
+	$u->query_form($get) if (defined $get);
+	$req = HTTP::Request->new(GET => $u->abs($base_uri));
+    }
+    my $res = $ua->request($req);
+    if ($res->is_success) {
+	return $res->content;
+    } else {
+	print STDERR "Error fetching configuration page: ", $res->status_line, "\n";
+	return undef;
+    }
+}
+
+sub print_login_info {
+  print "\nYou will be able to log in to $sname using the following:\n";
+  print "  username: $admin_username\n";
+  print "  password: $admin_password\n";
+}
+
+sub getclienthostname {
+    if (my $sshclient = $ENV{"SSH_CLIENT"}) {
+	my ($clientip) = split(' ', $sshclient);
+	my $hostname = gethostbyaddr(inet_aton($clientip), AF_INET);
+	return $hostname || $clientip;
+    } else {
+	return hostname();
+    }
+}
+
+sub press_enter {
+  local $/ = "\n";
+  print "Press [enter] to continue with the install.";
+  my $enter = <STDIN>; 
+}
+
+sub setup {
+  $ENV{PATH} = '/bin:/usr/bin';
+  $USER = $ENV{USER};
+  $HOME = $ENV{HOME};
+  
+  ($sname, $deploy, $addrend, $admin_username, $requires_sql, $scriptsdev, $human) = @ARGV;
+  chdir "$HOME/web_scripts/$addrend";
+  $email = "$human\@mit.edu";
+  
+  if($addrend =~ /^(.*)\/$/) {
+    $addrend = $1;
+  }
+  ($addrlast) = ($addrend =~ /([^\/]*)$/);
+  
+  $base_uri = "http://$server/~$USER/$addrend/";
+  
+  if($requires_sql) {
+    print "\nCreating SQL database for $sname...\n";
+   
+    open GETPWD, '-|', "/mit/scripts/sql/bin$scriptsdev/get-password";
+    ($sqlhost, $sqluser, $sqlpass) = split(/\s/, <GETPWD>);
+    close GETPWD;
+    open SQLDB, '-|', "/mit/scripts/sql/bin$scriptsdev/get-next-database", $addrlast;
+    $sqldb = <SQLDB>;
+    close SQLDB;
+    open SQLDB, '-|', "/mit/scripts/sql/bin$scriptsdev/create-database", $sqldb;
+    $sqldb = <SQLDB>;
+    close SQLDB;
+    if($sqldb eq "") {
+      print "\nERROR:\n";
+      print "Your SQL account failed to create a SQL database.\n";
+      print "You should log in at http://sql.mit.edu to check whether\n";
+      print "your SQL account is at its database limit or its storage limit.\n";
+      print "If you cannot determine the cause of the problem, please\n";
+      print "feel free to contact sql\@mit.edu for assistance.\n";
+      open FAILED, ">.failed";
+      close FAILED;
+      exit 1;
+    }
+  }
+ 
+  if(-e "$HOME/web_scripts/$addrend/.admin") { 
+    open ADMIN, "<$HOME/web_scripts/$addrend/.admin";
+    $admin_password=<ADMIN>;
+    chomp($admin_password);
+    close ADMIN;
+    unlink "$HOME/web_scripts/$addrend/.admin";
+  } 
+
+  print "\nConfiguring $sname...\n";
+  if($requires_sql) {
+    print "A copy of ${USER}'s SQL login info will be placed in\n/mit/$USER/web_scripts/$addrend.\n";
+  }
+  
+  open(VERSION, ">.scripts-version") or die "Can't write scripts-version file: $!\n";
+  print VERSION strftime("%F %T %z\n", localtime);
+  print VERSION $ENV{'USER'}, '@', getclienthostname(), "\n";
+  my $tarball = abs_path("/mit/scripts/deploy$scriptsdev/$deploy.tar.gz");
+  print VERSION $tarball, "\n";
+  $tarball =~ s|/deploydev/|/deploy/|;
+  print VERSION dirname($tarball), "\n";
+  close(VERSION);
+
+  select STDOUT;
+  $| = 1; # STDOUT is *hot*!
+}
+
+1;
Index: /tags/fc9-eol/locker/deploy/bin/onserver_star.pm
===================================================================
--- /tags/fc9-eol/locker/deploy/bin/onserver_star.pm	(revision 1257)
+++ /tags/fc9-eol/locker/deploy/bin/onserver_star.pm	(revision 1257)
@@ -0,0 +1,142 @@
+package onserver_star;
+use strict;
+use Exporter;
+use Sys::Hostname;
+use File::Spec::Functions;
+use File::Basename;
+use Socket;
+use Cwd qw(abs_path);
+use POSIX qw(strftime);
+use LWP::UserAgent;
+use URI;
+our @ISA = qw(Exporter);
+our @EXPORT = qw(setup totmp fetch_uri print_login_info press_enter $server $tmp $USER $HOME $sname $deploy $addrend $base_uri $ua $admin_username $requires_sql $addrlast $sqlhost $sqluser $sqlpass $sqldb $admin_password $scriptsdev $human $email);
+
+our $server = "scripts.mit.edu";
+
+our ($tmp, $USER, $HOME, $sname, $deploy, $addrend, $base_uri, $ua, $admin_username, $requires_sql, $addrlast, $sqlhost, $sqluser, $sqlpass, $sqldb, $admin_password, $scriptsdev, $human, $email);
+
+$tmp = ".scripts-tmp";
+sub totmp {
+  open(FILE, ">$tmp");
+  print FILE $_[0];
+  close(FILE);
+}
+
+$ua = LWP::UserAgent->new;
+push @{$ua->requests_redirectable}, 'POST';
+
+sub fetch_uri {
+    my ($uri, $get, $post) = @_;
+    my $u = URI->new($uri);
+    my $req;
+    if (defined $post) {
+	$u->query_form($post);
+	my $content = $u->query;
+	$u->query_form($get);
+	$req = HTTP::Request->new(POST => $u->abs($base_uri));
+	$req->content_type('application/x-www-form-urlencoded');
+	$req->content($content);
+    } else {
+	$u->query_form($get) if (defined $get);
+	$req = HTTP::Request->new(GET => $u->abs($base_uri));
+    }
+    my $res = $ua->request($req);
+    if ($res->is_success) {
+	return $res->content;
+    } else {
+	print STDERR "Error fetching configuration page: ", $res->status_line, "\n";
+	return undef;
+    }
+}
+
+sub print_login_info {
+  print "\nYou will be able to log in to $sname using the following:\n";
+  print "  username: $admin_username\n";
+  print "  password: $admin_password\n";
+}
+
+sub getclienthostname {
+    if (my $sshclient = $ENV{"SSH_CLIENT"}) {
+	my ($clientip) = split(' ', $sshclient);
+	my $hostname = gethostbyaddr(inet_aton($clientip), AF_INET);
+	return $hostname || $clientip;
+    } else {
+	return hostname();
+    }
+}
+
+sub press_enter {
+  local $/ = "\n";
+  print "Press [enter] to continue with the install.";
+  my $enter = <STDIN>; 
+}
+
+sub setup {
+  $ENV{PATH} = '/bin:/usr/bin';
+  $USER = $ENV{USER};
+  $HOME = $ENV{HOME};
+  
+  ($sname, $deploy, $addrend, $admin_username, $requires_sql, $scriptsdev, $human) = @ARGV;
+  chdir "$HOME/web_scripts/$addrend";
+  $email = "$human\@mit.edu";
+  
+  if($addrend =~ /^(.*)\/$/) {
+    $addrend = $1;
+  }
+  ($addrlast) = ($addrend =~ /([^\/]*)$/);
+  
+  $base_uri = "http://$USER.$server/$addrend/";
+  
+  if($requires_sql) {
+    print "\nCreating SQL database for $sname...\n";
+   
+    open GETPWD, '-|', "/mit/scripts/sql/bin$scriptsdev/get-password";
+    ($sqlhost, $sqluser, $sqlpass) = split(/\s/, <GETPWD>);
+    close GETPWD;
+    open SQLDB, '-|', "/mit/scripts/sql/bin$scriptsdev/get-next-database", $addrlast;
+    $sqldb = <SQLDB>;
+    close SQLDB;
+    open SQLDB, '-|', "/mit/scripts/sql/bin$scriptsdev/create-database", $sqldb;
+    $sqldb = <SQLDB>;
+    close SQLDB;
+    if($sqldb eq "") {
+      print "\nERROR:\n";
+      print "Your SQL account failed to create a SQL database.\n";
+      print "You should log in at http://sql.mit.edu to check whether\n";
+      print "your SQL account is at its database limit or its storage limit.\n";
+      print "If you cannot determine the cause of the problem, please\n";
+      print "feel free to contact sql\@mit.edu for assistance.\n";
+      open FAILED, ">.failed";
+      close FAILED;
+      exit 1;
+    }
+  }
+ 
+  if(-e "$HOME/web_scripts/$addrend/.admin") { 
+    open ADMIN, "<$HOME/web_scripts/$addrend/.admin";
+    $admin_password=<ADMIN>;
+    chomp($admin_password);
+    close ADMIN;
+    unlink "$HOME/web_scripts/$addrend/.admin";
+  } 
+
+  print "\nConfiguring $sname...\n";
+  if($requires_sql) {
+    print "A copy of ${USER}'s SQL login info will be placed in\n/mit/$USER/web_scripts/$addrend.\n";
+  }
+  
+  open(VERSION, ">.scripts-version") or die "Can't write scripts-version file: $!\n";
+  print VERSION strftime("%F %T %z\n", localtime);
+  print VERSION $ENV{'USER'}, '@', getclienthostname(), "\n";
+  my $tarball = abs_path("/mit/scripts/deploy$scriptsdev/$deploy.tar.gz");
+  print VERSION $tarball, "\n";
+  $tarball =~ s|/deploydev/|/deploy/|;
+  print VERSION dirname($tarball), "\n";
+  close(VERSION);
+
+  select STDOUT;
+  $| = 1; # STDOUT is *hot*!
+}
+
+1;
Index: /tags/fc9-eol/locker/deploy/bin/phpbb
===================================================================
--- /tags/fc9-eol/locker/deploy/bin/phpbb	(revision 1257)
+++ /tags/fc9-eol/locker/deploy/bin/phpbb	(revision 1257)
@@ -0,0 +1,203 @@
+#!/usr/bin/perl
+use strict;
+use FindBin qw($Bin);
+use lib $Bin;
+use onserver_star;
+use File::Path;
+
+setup();
+
+# Initial installation page
+fetch_uri(
+    'install/index.php',
+    {mode => 'install',
+     language => 'en'},
+    {});
+print "Loaded initial installation page\n";
+
+# Requirements page
+fetch_uri(
+    'install/index.php',
+    {mode => 'install',
+     sub => 'requirements',
+     language => 'en'},
+    {});
+print "Loaded requirements page\n";
+
+# Database page
+fetch_uri(
+    'install/index.php',
+    {mode => 'install',
+     sub => 'database',
+     language => 'en'},
+    {img_imagick => '/usr/bin/'});
+print "Loaded database page\n";
+
+# Database again
+fetch_uri(
+    'install/index.php',
+    {mode => 'install',
+     sub => 'database'},
+    {dbms => 'mysql',
+     dbhost => $sqlhost,
+     dbname => $sqldb,
+     dbuser => $sqluser,
+     dbpasswd => $sqlpass,
+     table_prefix => '',
+     img_imagick => '/usr/bin/',
+     language => 'en',
+     testdb => 'true'});
+print "Loaded database page (part 2)\n";
+
+# Administrator page
+fetch_uri(
+    'install/index.php',
+    {mode => 'install',
+     sub => 'administrator'},
+    {img_imagick => '/usr/bin/',
+     language => 'en',
+     dbms => 'mysql',
+     dbhost => $sqlhost,
+     dbport => '',
+     dbname => $sqldb,
+     dbuser => $sqluser,
+     dbpasswd => $sqlpass,
+     table_prefix => ''});
+print "Loaded administrator page\n";
+
+# Administrator page again
+fetch_uri(
+    'install/index.php',
+    {mode => 'install',
+     sub => 'administrator'},
+    {default_lang => 'en',
+     admin_name => $admin_username,
+     admin_pass1 => $admin_password,
+     admin_pass2 => $admin_password,
+     board_email1 => $email,
+     board_email2 => $email,
+     img_imagick => '/usr/bin/',
+     language => 'en',
+     dbms => 'mysql',
+     dbhost => $sqlhost,
+     dbport => '',
+     dbname => $sqldb,
+     dbuser => $sqluser,
+     dbpasswd => $sqlpass,
+     table_prefix => '',
+     check => 'true'});
+print "Loaded administrator page (part 2)\n";
+
+# Config file page
+fetch_uri(
+    'install/index.php',
+    {mode => 'install',
+     sub => 'config_file'},
+    {img_imagick => '/usr/bin/',
+     default_lang => 'en',
+     admin_name => $admin_username,
+     admin_pass1 => $admin_password,
+     admin_pass2 => $admin_password,
+     board_email1 => $email,
+     board_email2 => $email,
+     language => 'en',
+     dbms => 'mysql',
+     dbhost => $sqlhost,
+     dbport => '',
+     dbname => $sqldb,
+     dbuser => $sqluser,
+     dbpasswd => $sqlpass,
+     table_prefix => ''});
+print "Loaded config file page\n";
+
+# Advanced page
+fetch_uri(
+    'install/index.php',
+    {mode => 'install',
+     sub => 'advanced'},
+    {img_imagick => '/usr/bin/',
+     language => 'en',
+     dbms => 'mysql',
+     dbhost => $sqlhost,
+     dbport => '',
+     dbname => $sqldb,
+     dbuser => $sqluser,
+     dbpasswd => $sqlpass,
+     table_prefix => '',
+     default_lang => 'en',
+     admin_name => $admin_username,
+     admin_pass1 => $admin_password,
+     admin_pass2 => $admin_password,
+     board_email1 => $email,
+     board_email2 => $email});
+print "Loaded advanced setup page\n";
+
+# Create database tables
+fetch_uri(
+    'install/index.php',
+    {mode => 'install',
+     sub => 'create_table'},
+    {email_enable => '1',
+     smtp_delivery => '0',
+     smtp_auth => 'PLAIN',
+     cookie_secure => '0',
+     force_server_vars => '0',
+     server_protocol => 'http://',
+     server_name => "$USER.scripts.mit.edu",
+     server_port => '80',
+     script_path => "/$addrend",
+     img_imagick => '/usr/bin/',
+     language => 'en',
+     dbms => 'mysql',
+     dbhost => $sqlhost,
+     dbport => '',
+     dbname => $sqldb,
+     dbuser => $sqluser,
+     dbpasswd => $sqlpass,
+     table_prefix => '',
+     default_lang => 'en',
+     admin_name => $admin_username,
+     admin_pass1 => $admin_password,
+     admin_pass2 => $admin_password,
+     board_email1 => $email,
+     board_email2 => $email});
+print "Loaded database table creation page\n";
+
+# Final page
+fetch_uri(
+    'install/index.php',
+    {mode => 'install',
+     sub => 'final'},
+    {language => 'en',
+     dbms => 'mysql',
+     dbhost => $sqlhost,
+     dbport => '',
+     dbuser => $sqluser,
+     dbpasswd => $sqlpass,
+     dbname => $sqldb,
+     table_prefix => '',
+     default_lang => 'en',
+     admin_name => $admin_username,
+     admin_pass1 => $admin_password,
+     admin_pass2 => $admin_password,
+     board_email1 => $email,
+     board_email2 => $email,
+     img_imagick => '/usr/bin/',
+     ftp_path => '',
+     ftp_user => '',
+     ftp_pass => '',
+     email_enable => '1',
+     smtp_delivery => '0',
+     smtp_host => '',
+     smtp_auth => 'PLAIN',
+     smtp_user => '',
+     smtp_pass => '',
+     cookie_secure => '0',
+     force_server_vars => '0',
+     server_protocol => 'http://',
+     server_name => "$USER.scripts.mit.edu",
+     server_port => '80',
+     script_path => "/$addrend"});
+print "Loaded installation finalization page\n";
+
+rmtree(['install']);
Index: /tags/fc9-eol/locker/deploy/bin/phpical
===================================================================
--- /tags/fc9-eol/locker/deploy/bin/phpical	(revision 1257)
+++ /tags/fc9-eol/locker/deploy/bin/phpical	(revision 1257)
@@ -0,0 +1,29 @@
+#!/usr/bin/perl
+use strict;
+use FindBin qw($Bin);
+use lib $Bin;
+use onserver;
+
+setup();
+
+undef $/;
+open(FILE, "contemp.php");
+my $a = <FILE>;
+close(FILE);
+$a =~ s/adminpass/$admin_password/g;
+$a =~ s/\$phpicalendar_publishing/\/\/ WARNING: The scripts.mit.edu maintainers have had to disable this feature on scripts.mit.edu because it contains a serious security vulnerability that has not been addressed by the software\'s authors.  Please do not try to enable this feature\n\$phpicalendar_publishing/;
+open(FILE, ">config.inc.php");
+print FILE $a;
+close(FILE);
+
+#system('cp', '/mit/scripts/deploy/phpical/MIT Academic Calendar.ics', 'calendars/');
+
+unlink('contemp.php');
+unlink('calendars/publish.ical.php');
+
+print <<END;
+Your $sname Admin Panel is at
+http://$server/~$USER/$addrend/admin
+You can use this admin panel to upload calendars for display.
+END
+press_enter();
Index: /tags/fc9-eol/locker/deploy/bin/prompt-password
===================================================================
--- /tags/fc9-eol/locker/deploy/bin/prompt-password	(revision 1257)
+++ /tags/fc9-eol/locker/deploy/bin/prompt-password	(revision 1257)
@@ -0,0 +1,40 @@
+#!/bin/sh
+
+name=$1
+deploy=$2
+addrend=$3
+admin_username=$4
+cd $HOME/web_scripts/$addrend
+
+echo
+echo You will be able to control your copy of $name by logging in to
+echo $name using username \"$admin_username\".  This account will have a
+echo password of your choice.  You should not use your Athena account password.
+
+done="0"
+while [ "$done" = "0" ]
+do
+  echo "Please decide upon an admin password, type it, and press [enter]."
+  echo "This password may only contain a-z, A-Z, and 0-9."
+  printf "As you type your password, the cursor will not move: "
+  read admin_pass1
+  echo
+  echo
+  echo "Now please type the same password again and press [enter]."
+  printf "As you type your password, the cursor will not move: "
+  read admin_pass2
+  echo
+
+  if [ "$admin_pass1" = "$admin_pass2" ]; then
+    done="1"
+  else
+    echo
+    echo == Sorry, those passwords do not match.  Please try again. ==
+  fi
+done
+
+echo
+echo OK.  Continuing with the install...
+cat <<EOF > $HOME/web_scripts/$addrend/.admin
+$admin_pass1
+EOF
Index: /tags/fc9-eol/locker/deploy/bin/scripts-chipmunkpoll
===================================================================
--- /tags/fc9-eol/locker/deploy/bin/scripts-chipmunkpoll	(revision 1257)
+++ /tags/fc9-eol/locker/deploy/bin/scripts-chipmunkpoll	(revision 1257)
@@ -0,0 +1,6 @@
+#!/bin/sh
+
+sname="Chipmunk Poll"
+deploy="chipmunkpoll"
+prompt_username=1
+. /mit/scripts/deploy/bin$scriptsdev/install-onathena
Index: /tags/fc9-eol/locker/deploy/bin/scripts-exponent
===================================================================
--- /tags/fc9-eol/locker/deploy/bin/scripts-exponent	(revision 1257)
+++ /tags/fc9-eol/locker/deploy/bin/scripts-exponent	(revision 1257)
@@ -0,0 +1,6 @@
+#!/bin/sh
+
+sname="Exponent"
+deploy="exponent"
+prompt_username=1
+. /mit/scripts/deploy/bin$scriptsdev/install-onathena
Index: /tags/fc9-eol/locker/deploy/bin/trac
===================================================================
--- /tags/fc9-eol/locker/deploy/bin/trac	(revision 1257)
+++ /tags/fc9-eol/locker/deploy/bin/trac	(revision 1257)
@@ -0,0 +1,68 @@
+#!/usr/bin/perl
+use strict;
+use FindBin qw($Bin);
+use lib $Bin;
+use onserver;
+use Cwd;
+use File::Path;
+use URI::Escape;
+use DBI;
+use Config::IniFiles;
+
+setup();
+
+print "\nEnter the name of your project (the title of this Trac instance).\n";
+print "Project name: ";
+my $name=<STDIN>;
+chomp($name);
+
+my $dbh = DBI->connect("DBI:mysql:database=$sqldb;host=$sqlhost", $sqluser, $sqlpass, {RaiseError => 1});
+$dbh->do('alter database collate utf8_general_ci');
+
+my $dbstring = "mysql://" . uri_escape($sqluser) . ":" . uri_escape($sqlpass) . "\@$sqlhost/$sqldb";
+
+print "\nEnter the type of version-control repository this project uses.\n";
+print "You'll have to set up the repo yourself; feel free to ask scripts@ for help.\n";
+print "If you don't want version-control integration, take the default.\n";
+print "Repository type (default svn; also bzr, git, hg): ";
+my $repotype=<STDIN>;
+chomp($repotype);
+$repotype = $repotype ? $repotype : 'svn';
+
+print "\nEnter the path to the version-control repository.\n";
+print "If you don't want version-control integration, leave blank.\n";
+print "Path to repository: ";
+my $repopath=<STDIN>;
+chomp($repopath);
+
+print STDERR "running trac-admin:\n";
+system(qw(/usr/bin/trac-admin tracdata initenv),
+       $name, $dbstring, $repotype, $repopath, '/usr/share/trac/templates');
+# XXX this exposes the SQL password on the command line
+
+#aka perl -pe 's/\@ADDREND\@/$addrend/g' <.htaccess.in >.htaccess
+open IN, '<.htaccess.in'; open OUT, '>.htaccess';
+while (<IN>) {
+    s/\@ADDREND\@/~$USER\/$addrend/g;
+    print OUT $_;
+}
+close IN; close OUT;
+
+my $cfg = Config::IniFiles->new(-file => 'tracdata/conf/trac.ini');
+$cfg->setval('trac', 'default_charset', 'utf-8');
+$cfg->AddSection('components');
+$cfg->newval('components', 'webadmin.*', 'enabled');
+$cfg->newval('components', 'gitplugin.*', 'enabled') if $repotype eq "git";
+$cfg->RewriteConfig();
+
+system(qw(/usr/bin/trac-admin tracdata permission add), $human, 'TRAC_ADMIN');
+
+chmod 0777, '.htaccess';
+unlink '.htaccess.in';
+
+open OUT, '>tracdata/.htaccess';
+print OUT "Deny from all\n";
+close OUT;
+chmod 0777, 'tracdata/.htaccess';
+
+exit 0;
Index: /tags/fc9-eol/locker/deploy/bin/wordpress
===================================================================
--- /tags/fc9-eol/locker/deploy/bin/wordpress	(revision 1257)
+++ /tags/fc9-eol/locker/deploy/bin/wordpress	(revision 1257)
@@ -0,0 +1,42 @@
+#!/usr/bin/perl
+use strict;
+use FindBin qw($Bin);
+use lib $Bin;
+use onserver;
+use DBI;
+
+setup();
+
+fetch_uri(
+    'wp-admin/setup-config.php',
+    {step => 2},
+    {dbhost => $sqlhost,
+     uname => $sqluser,
+     dbname => $sqldb,
+     pwd => $sqlpass,
+     prefix => '',
+     submit => 'Submit',
+     step => 2});
+
+my $html = fetch_uri(
+    'wp-admin/install.php',
+    {step => 2},
+    {weblog_title => 'My Blog',
+     admin_email => $email,
+     submit => 'Continue',
+     step => 2});
+while ($html =~ /<code>(.*)<\/code>/g) {
+    $admin_username = $admin_password;
+    $admin_password = $1;
+}
+
+my $dbh = DBI->connect("dbi:mysql:database=$sqldb;host=$sqlhost", $sqluser, $sqlpass);
+$dbh->do("update wp_options set option_value = ? where option_name = 'siteurl'",
+         {}, "/~$USER/$addrend");
+$dbh->do("update wp_options set option_value = ? where option_name = 'home'",
+         {}, "http://$USER.$server/$addrend");
+$dbh->disconnect;
+
+print_login_info();
+print "You will also receive this login information at your MIT email address.\n";
+press_enter();
Index: /tags/fc9-eol/locker/deploy/bin/wordpress-star
===================================================================
--- /tags/fc9-eol/locker/deploy/bin/wordpress-star	(revision 1257)
+++ /tags/fc9-eol/locker/deploy/bin/wordpress-star	(revision 1257)
@@ -0,0 +1,42 @@
+#!/usr/bin/perl
+use strict;
+use FindBin qw($Bin);
+use lib $Bin;
+use onserver_star;
+use DBI;
+
+setup();
+
+fetch_uri(
+    'wp-admin/setup-config.php',
+    {step => 2},
+    {dbhost => $sqlhost,
+     uname => $sqluser,
+     dbname => $sqldb,
+     pwd => $sqlpass,
+     prefix => '',
+     submit => 'Submit',
+     step => 2});
+
+my $html = fetch_uri(
+    'wp-admin/install.php',
+    {step => 2},
+    {weblog_title => 'My Blog',
+     admin_email => $email,
+     submit => 'Continue',
+     step => 2});
+while ($html =~ /<code>(.*)<\/code>/g) {
+    $admin_username = $admin_password;
+    $admin_password = $1;
+}
+
+my $dbh = DBI->connect("dbi:mysql:database=$sqldb;host=$sqlhost", $sqluser, $sqlpass);
+$dbh->do("update wp_options set option_value = ? where option_name = 'siteurl'",
+         {}, "/~$USER/$addrend");
+$dbh->do("update wp_options set option_value = ? where option_name = 'home'",
+         {}, "http://$USER.$server/$addrend");
+$dbh->disconnect;
+
+print_login_info();
+print "You will also receive this login information at your MIT email address.\n";
+press_enter();
Index: /tags/fc9-eol/locker/deploy/mediawiki-1.11.0/mediawiki-1.11.0.patch
===================================================================
--- /tags/fc9-eol/locker/deploy/mediawiki-1.11.0/mediawiki-1.11.0.patch	(revision 1257)
+++ /tags/fc9-eol/locker/deploy/mediawiki-1.11.0/mediawiki-1.11.0.patch	(revision 1257)
@@ -0,0 +1,24 @@
+diff -Nur mediawiki-1.11.0.old/AdminSettings.php mediawiki-1.11.0/AdminSettings.php
+--- mediawiki-1.11.0.old/AdminSettings.php	1969-12-31 19:00:00.000000000 -0500
++++ mediawiki-1.11.0/AdminSettings.php	2007-10-09 17:32:52.000000000 -0400
+@@ -0,0 +1,20 @@
++<?php
++/**
++ * On scripts.mit.edu, the user's sole account can be used
++ * both for regular operation of the wiki and for any
++ * maintenance.  Therefore, we just use the username and
++ * password already set in LocalSettings.php.
++ *
++ * @package MediaWiki
++ */
++          
++$wgDBadminuser      = $wgDBuser;
++$wgDBadminpassword  = $wgDBpassword;
++          
++/*
++ * Whether to enable the profileinfo.php script.
++ * (False is the default.)
++ */
++$wgEnableProfileInfo = false;
++          
++?>
Index: /tags/fc9-eol/locker/deploy/mediawiki-1.5.6/mediawiki-1.5.6.patch
===================================================================
--- /tags/fc9-eol/locker/deploy/mediawiki-1.5.6/mediawiki-1.5.6.patch	(revision 1257)
+++ /tags/fc9-eol/locker/deploy/mediawiki-1.5.6/mediawiki-1.5.6.patch	(revision 1257)
@@ -0,0 +1,15 @@
+--- includes/Setup.php	Fri Aug 26 10:05:43 2005
++++ includes/Setup.php	Fri Sep 23 18:46:34 2005
+@@ -117,12 +117,6 @@
+ wfProfileOut( $fname.'-memcached' );
+ wfProfileIn( $fname.'-SetupSession' );
+ 
+-if ( $wgDBprefix ) {
+-	session_name( $wgDBname . '_' . $wgDBprefix . '_session' );
+-} else {
+-	session_name( $wgDBname . '_session' );
+-}
+-
+ if( !$wgCommandLineMode && ( isset( $_COOKIE[session_name()] ) || isset( $_COOKIE[$wgDBname.'Token'] ) ) ) {
+ 	User::SetupSession();
+ 	$wgSessionStarted = true;
Index: /tags/fc9-eol/locker/deploy/mediawiki-1.5.8/mediawiki-1.5.8.patch
===================================================================
--- /tags/fc9-eol/locker/deploy/mediawiki-1.5.8/mediawiki-1.5.8.patch	(revision 1257)
+++ /tags/fc9-eol/locker/deploy/mediawiki-1.5.8/mediawiki-1.5.8.patch	(revision 1257)
@@ -0,0 +1,17 @@
+diff -uNr mediawiki-1.5.8/includes/Setup.php mw-scripts-158/includes/Setup.php
+--- includes/Setup.php	2006-02-11 02:26:47.000000000 -0500
++++ includes/Setup.php	2006-04-14 18:28:29.000000000 -0400
+@@ -118,11 +118,11 @@
+ wfProfileIn( $fname.'-SetupSession' );
+ 
+ if ( $wgDBprefix ) {
+-	$wgCookiePrefix = $wgDBname . '_' . $wgDBprefix;
++	$wgCookiePrefix = str_replace("+", "", $wgDBname . '_' . $wgDBprefix);
+ } elseif ( $wgSharedDB ) {
+ 	$wgCookiePrefix = $wgSharedDB;
+ } else {
+-	$wgCookiePrefix = $wgDBname;
++	$wgCookiePrefix = str_replace("+", "", $wgDBname);
+ }
+ 
+ session_name( $wgCookiePrefix . '_session' );
Index: /tags/fc9-eol/locker/doc/autoinstallers
===================================================================
--- /tags/fc9-eol/locker/doc/autoinstallers	(revision 1257)
+++ /tags/fc9-eol/locker/doc/autoinstallers	(revision 1257)
@@ -0,0 +1,63 @@
+-*- text -*-
+
+== How to update an autoinstaller to a new version of the upstream package ==
+
+Things to check beforehand:
+- Make sure /mit/scripts/deploydev is up to date from /mit/scripts/deploy (deploydev is not a svn checkout and is probably missing changes from deploy)
+
+Steps:
+# Example values
+PKG=wordpress
+NEWVERS=2.5.1
+OLDVERS=2.3.3
+URL=http://www.example.com/download/wordpress-2.5.1.tar.gz
+
+# Create a new directory in /mit/scripts/deploydev for the new version
+mkdir /mit/scripts/deploydev/$PKG-$NEWVERS
+
+# Copy any scripts patches to the new directory
+cp /mit/scripts/deploydev/$PKG-$OLDVERS/*.patch /mit/scripts/deploydev/$PKG-$NEWVERS/
+# Some scripts might have other files in here
+# Make sure the patch is still relevant for the current version of the package
+
+# Download the new package from the upstream site
+wget -O /mit/scripts/deploydev/$PKG-$NEWVERS/$PKG-$NEWVERS.tar.gz "$URL"
+
+# Update the symlink for the new package version
+cd /mit/scripts/deploydev && ln -nsf $PKG-$NEWVERS/$PKG-NEWVERS.tar.gz $PKG.tar.gz
+
+# Try an autoinstall
+ssh linerva -t env scriptsdev=dev athrun scripts
+
+# Fix any bugs that were introduced, probably in /mit/scripts/deploydev/bin/$PKG or /mit/scripts/bin/scripts-$PKG, or the patches
+
+# Commit your changes by moving them to /mit/scripts/deploy
+cp -a /mit/scripts/deploydev/$PKG-NEWVERS /mit/scripts/deploydev/$PKG.tar.gz /mit/scripts/deploy/
+
+# Test the new version from linerva and athena.dialup
+
+
+== How to generate an autoupdate ==
+
+cd /tmp
+# Use --dev if you haven't pushed to deploy yet
+/mit/scripts/sbin/propose-update --dev $PKG $OLDVERS $NEWVERS
+cd $PKG-$OLDVERS-to-$NEWVERS.proposal
+# If there is any custom setup that needs to be performed
+# (e.g. something in /mit/scripts/deploy/bin), do so to the
+# $PKG-$OLDVERS and $PKG-$NEWVERS directories, then do
+(cd .. && /mit/scripts/sbin/propose-update --redo-all --dev $PKG $OLDVERS $NEWVERS)
+# Look at the files that were generated to make sure they're sane
+# If necessary, add pre- and post- hooks, such as for a DB update script
+emacs extra/prepatch.sh
+emacs extra/postpatch.sh
+# Generate the patch
+cd ..
+# --dev here means to put the update in /mit/scripts/deploydev/updates
+/mit/scripts/sbin/build-update --dev $PKG $OLDVERS $NEWVERS
+# Test the update by running cd /mit/foo/web_scripts/bar && /mit/scripts/deploydev/updates/$PKG-#OLDVERS-to-$NEWVERS/update "foo"
+
+# If necessary, repeat this process. You can edit the files in the
+# $PKG-$OLDVERS and $PKG-$NEWVERS subdirectories of the proposal,
+# passing --redo-* options to propose-update as necessary to cause it
+# to regenerate the file lists from the subdirectories
Index: /tags/fc9-eol/locker/doc/object-identifiers
===================================================================
--- /tags/fc9-eol/locker/doc/object-identifiers	(revision 1257)
+++ /tags/fc9-eol/locker/doc/object-identifiers	(revision 1257)
@@ -0,0 +1,1 @@
+link /afs/sipb.mit.edu/admin/text/object-identifiers
Index: /tags/fc9-eol/locker/doc/scripts-admin-use-policy
===================================================================
--- /tags/fc9-eol/locker/doc/scripts-admin-use-policy	(revision 1257)
+++ /tags/fc9-eol/locker/doc/scripts-admin-use-policy	(revision 1257)
@@ -0,0 +1,49 @@
+                                                                      2008-03-15
+                                                              amended 2008-08-05
+Policy on the Use of scripts.mit.edu Administrative Rights
+
+Users of scripts.mit.edu have a reasonable expectation that the data
+and code they store on our servers, and in sections of their locker
+accessible only by our servers, will not be improperly accessed or
+modified by anyone else, including by scripts.mit.edu maintainers.  To
+fulfill this expectation, we define a policy governing the
+maintainers’ use of special permissions and credentials held by our
+servers.  This includes any administrative access to the scripts
+servers, any use of private keys stored on the servers, and any use of
+scripts-specific permissions granted on locker directories.
+
+Such use of administrative rights shall only be permitted under any of
+the following circumstances.
+
+* Maintenance of the scripts.mit.edu service itself that is unrelated
+  to private user data.
+
+* Any access that is explicitly authorized by the owners of the data
+  in question.
+
+* Handling a user support request that cannot be satisfactorily answered
+  without resorting to using administrative rights. This access should
+  be restricted to only those files and resources that are strictly
+  necessary to fully answer the request.
+
+* Performing upgrades to autoinstalled software, using permissions
+  granted to the system:scripts-security-upd group.  This group is
+  normally empty, but the root instances of scripts maintainers will
+  be added when needed to perform upgrades, at the discretion of the
+  architect.
+
+* Modifications that are necessary for server security or reliability.
+  In this case, any modifications should be clearly marked and the
+  user should be contacted.
+
+* Ensuring that updates or planned updates to the scripts.mit.edu
+  service do not break existing user deployments.  In this case, any
+  modifications should be clearly marked and the user should be
+  contacted.
+
+[The third clause formerly read
+* Handling a user support request that can reasonably be considered an
+  implicit authorization for that use.  In this case, whenever
+  possible, any modifications should be reverted and the user should
+  be told how to make these modifications themselves.
+and was changed in August 2008.]
Index: /tags/fc9-eol/locker/doc/scripts-decision-policy
===================================================================
--- /tags/fc9-eol/locker/doc/scripts-decision-policy	(revision 1257)
+++ /tags/fc9-eol/locker/doc/scripts-decision-policy	(revision 1257)
@@ -0,0 +1,131 @@
+                                                                      2007-07-07
+The Decision-Making Policy of the scripts.mit.edu Project:
+
+We, the creators of the scripts.mit.edu infrastructure, wish to define a
+policy for how decisions of the scripts.mit.edu project will be reached in
+order to avoid confusion on this subject among future contributors to the
+project.  We particularly want to avoid a situation in which the
+leadership of the project is unclear after we leave MIT.
+
+In general, we believe that all contributors to the project should have a
+say in how the service is run in approximate proportion to their
+contributions.  We furthermore believe that strong agreement among the
+project's principal contributors is highly important to the project's
+future, and so, whenever possible, the project's principal contributors
+should reach near-unanimous agreement about how the project should
+proceed.  Ultimately, the decisions of a project of this nature need to be
+made by the people who are making the project happen.
+
+Unfortunately, reaching unanimous agreement among all of the contributors
+to the project might not always be possible.  This document establishes
+two leadership positions for the scripts.mit.edu project in order to
+entrust decision-making authority to specific individuals.  These leaders
+are ultimately entrusted with the project, although they are expected to
+take significant pause before using their authority to end a disagreement
+before consensus of the principal contributors has been reached.  These
+leadership positions are based in part on the roles of "producer" and
+"director" described in Frederick P. Brooks' _The Mythical Man-Month_.
+
+The "scripts team leader" is an MIT student who:
+- "assembles the team, divides the work, and establishes the schedule"
+- "acquires and keeps on acquiring the necessary resources"
+- "establishes the pattern of communication and reporting within the team"
+- "ensures that the schedule is met, shifting resources and organization
+  in order to respond to changing circumstances"
+
+The team leader is responsible for ensuring that the project continues to
+make regular progress.  The team leader is entrusted with arbitrating
+decisions regarding the organization of the scripts team and the focus of
+its ongoing development efforts.  For example, the team leader may remove
+individuals from the project who are deemed to be having an overall
+negative influence on the project.
+
+The "scripts architect" is an MIT student who:
+- "provides unity and conceptual integrity to the whole design"
+- "serves as a limit to system complexity"
+- "invents solutions for [large-scale technical problems] or shifts the
+  system design as required"
+
+The architect is responsible for ensuring the technical quality of the
+scripts.mit.edu service.  The architect is entrusted with arbitrating
+decisions regarding the scope, design, and operation of the service.  As
+the guardian of the technical integrity of the service, the architect may
+arbitrate all decisions regarding the project's production hardware and
+software.
+
+Both positions may select their own replacement, and, in the case of a
+vacancy, either position may select a replacement for the other position.
+Before an individual assumes either position as a replacement, that
+individual should be confirmed for that position by the SIPB Executive
+Committee.  A single individual may hold both positions simultaneously if
+every individual who has significantly contributed to the project within
+the last one calendar year agrees.  Any objections must occur before the
+Executive Committee has confirmed the appointment.
+
+The creator of the scripts.mit.edu project, Jeff Arnold, will serve as the
+first team leader and architect.
+
+Any part of the scripts.mit.edu decision-making policy may be modified as
+necessary by agreement between the scripts team leader and the scripts
+architect.  When changing the scripts.mit.edu decision-making policy, as
+with any major decision, near-unanimous agreement among the project's
+principal contributors should ideally be reached.
+
+The scripts.mit.edu project is affiliated with SIPB, and while the project
+remains affiliated with SIPB, the project will follow appropriate SIPB
+procedures for projects.
+
+This policy should be distributed to contributors to the project so that
+they may decide not to contribute if they are dissatisfied with it.
+
+
+
+
+
+
+					    ____________________________________
+									jbarnold
+
+
+
+
+
+
+					    ____________________________________
+								        presbrey
+
+
+
+
+
+
+					    ____________________________________
+ 			     					        hartmans
+
+
+As contributors to the scripts.mit.edu project, we have contributed to
+the creation of this written decision-making policy and we fully support it.
+
+
+
+
+
+
+					    ____________________________________
+			     					         tabbott
+
+
+
+
+
+
+					    ____________________________________
+			     					         andersk
+
+
+
+
+
+
+					    ____________________________________
+			    					          geofft
Index: /tags/fc9-eol/locker/doc/tickets/cnames.txt
===================================================================
--- /tags/fc9-eol/locker/doc/tickets/cnames.txt	(revision 1257)
+++ /tags/fc9-eol/locker/doc/tickets/cnames.txt	(revision 1257)
@@ -0,0 +1,74 @@
+HANDLING CNAME REQUESTS
+
+When someone e-mails scripts.mit.edu asking for a foo.mit.edu hostname:
+
+1. Check that the hostname is not currently in use. The commands
+     stella foo.mit.edu
+     athrun ops qy ghal foo.mit.edu \*
+   should both say the name is not in use. (The latter checks for aliases of
+   deleted or otherwise inactive hostnames that stella ignores.)
+
+   If the name is currently an alias of a name they own, make sure to forward
+   to jweiss the permission to move that name around.
+
+   If the name is the primary name of a machine they own, ask them what they
+   would like to rename the machine to, and make it clear that they'll need to
+   have another name associated with that IP address. Or (especially if the
+   machine doesn't ping) ask them to confirm they're no longer using that IP
+   address. If they're totally confused and keep insisting they want scripts
+   to serve that name, go ahead and tell them you'll rename the current foo to
+   foo-old.
+
+   If the name belongs to a deleted host on a dorm network, e-mail rccsuper to
+   reap it; they should do so quickly. If it belongs to an FSILG, e-mail
+   ht-$ILG-acl (ht-et-acl, ht-pika-acl, etc.) and ask nicely. If it belongs
+   to an academic network, they're not getting the name back unless they can
+   negotiate with the current owner of the name
+
+2. Check that they're requesting a scripts.mit.edu path that they control
+   (preferably, they'll give you a locker.scripts.mit.edu/something URL). If
+   they want a web.mit.edu path, you'll need to tell them to set up a redirect
+   according to http://scripts.mit.edu/faq/63/ in a directory in their
+   web_scripts, and ask them to tell us the directory. This doesn't block
+   requesting the hostname.
+
+   If they want something more outlandish, make sure they're not confused
+   before proceeding.
+
+3. E-mail jweiss.
+   * Open the ticket in RT
+   * Click 'Comment' to the right of the body of the e-mail they sent
+   * CC: jweiss@mit.edu (Don't use "To:", there's a bug)
+   * Write something nice. I typically use
+   Subject: scripts CNAME request: foo.mit.edu
+
+   At your convenience, please make foo.mit.edu an alias of scripts.mit.edu.
+       (or)
+   At your convenience, please move the alias foo.mit.edu from bar.mit.edu to
+     scripts.mit.edu.
+       (or)
+   At your convenience, please rename the current host foo.mit.edu to
+     foo-old.mit.edu and make foo.mit.edu an alias of scripts.mit.edu.
+       (or)
+   If the request below is sufficient authorization, please remove....
+
+   * Set Status => Waiting and Blocking On => Moira
+
+   Occasionally jweiss is on vacation; check /mit/ops/Pager.Schedule for
+   "!jweiss" entries. It's worth asking him ahead of time if he's around. If
+   not, see if zacheiss or cfox or computing-help will handle the requests.
+   (zacheiss has been willing to do them in the past.)
+
+4. Reply to the requestor (from either RT or your e-mail client), with
+   something like "We've forwarded the hostname request to IS&T; it should take
+   effect in 2-3 business days."
+
+5. After the name updates (jweiss replies, and DNS updates - which you can
+   check on -i dns), ask someone with root access to run
+
+   vhostadd foo.mit.edu
+
+6. Reply to the requestor again, and help them with stuff like MediaWiki URLs
+   or RewriteRules if they're having trouble.
+
+--geofft, last updated 2008-08-02
Index: /tags/fc9-eol/locker/doc/tickets/rt.txt
===================================================================
--- /tags/fc9-eol/locker/doc/tickets/rt.txt	(revision 1257)
+++ /tags/fc9-eol/locker/doc/tickets/rt.txt	(revision 1257)
@@ -0,0 +1,28 @@
+RT TRICKS
+
+To edit stuff like ticket status, click "Basic" in the left.
+
+Note the multiple ways to search for tickets: you can click "All
+{new,open,waiting} Scripts Tickets" on the home page in the center, or
+"Scripts" on the right in the list of queues.
+
+You should take a look in "Preferences" at the left. Make sure "Notify
+yourself of own updates" is on. You can also set the "Default Working Queue"
+to Scripts, and give yourself a signature referring to scripts@mit.edu.
+Another useful option here is to set a password, so you don't need certs to
+log in (and so you can use the zephyrbot).
+
+The zephyrbot (currently down) will take commands to -c scripts -i [ticket
+number] of the form /set status=resolved or /set owner=geofft.
+
+You can also place these commands on a line by themselves inside e-mail; they
+will be acted upon and removed before the e-mail gets sent back out.
+
+Don't use the To field, it doesn't work. If you want to send the ticket somewhere else, use CC.
+
+Don't CC other RT queues, it doesn't work. If you really need to, use your
+e-mail client to forward it and remove the [help.mit.edu #nnn] tag.
+
+E-mail to scripts-comment that carries a [help.mit.edu #nnn] tag will be
+included in the ticket history for the scripts team to see, but will not be
+sent to the user. You can use this for asking "Help, what do I do here?"
Index: /tags/fc9-eol/locker/sbin/build-update
===================================================================
--- /tags/fc9-eol/locker/sbin/build-update	(revision 1257)
+++ /tags/fc9-eol/locker/sbin/build-update	(revision 1257)
@@ -0,0 +1,155 @@
+#!/usr/bin/env perl
+
+use File::Spec::Functions qw(:ALL);
+use File::Copy;
+use File::Path;
+use Data::Dumper;
+use Getopt::Long;
+use Archive::Tar;
+use Cwd;
+use strict;
+use warnings;
+
+my $scriptsdev = "";
+
+GetOptions(
+#"redo-delete" => \$redodelete,
+#	   "redo-add" => \$redoadd,
+#	   "redo-replace" => \$redoreplace,
+#	   "redo-diff" => \$redodiff,
+#	   "redo-all" => sub {$redodelete = $redoadd = $redoreplace = $redodiff = 1;},
+	   "dev" => sub {$scriptsdev = "dev";},
+		  );
+
+if (@ARGV < 3) {
+  print STDERR "Usage: $0 package oldversion newversion\n";
+  exit(1);
+}
+
+my ($package, $oldversion, $newversion) = @ARGV;
+my ($old, $new, $updatename) = ($package.'-'.$oldversion, $package.'-'.$newversion, $package.'-'.$oldversion.'-to-'.$newversion);
+
+my $proposaldir = $updatename.".proposal";
+my $outdir = catdir("/mit/scripts/deploy$scriptsdev/updates/", $updatename);
+
+(-d $proposaldir) or die "Can't find $proposaldir, did you run propose-update?\n";
+((! -e $outdir) && mkdir($outdir)) or die "mkdir($outdir) failed: $!";
+
+my $olddir = catdir($proposaldir,$old);
+my $newdir = catdir($proposaldir,$new);
+(-d $olddir && -d $newdir) or die "Packages not unpacked?\n";
+
+sub readFileList($) {
+  my ($list) = @_;
+  open(LIST, $list) or die "Can't read $list: $!\n";
+  my @files = map { chomp; s|$newdir\/?||g; [split(' ', $_, 2)] } <LIST>;
+  close(LIST);
+  return @files;
+}
+
+my @todelete = readFileList(catfile($proposaldir, "files.delete"));
+my @toadd = readFileList(catfile($proposaldir, "files.add"));
+my @toreplace = readFileList(catfile($proposaldir, "files.replace"));
+
+open(CHECKMD5, ">", catfile($outdir, "check.md5")) or die "Can't open check.md5: $!";
+print CHECKMD5 map { join("  ", @{$_})."\n" } @todelete, @toreplace;
+close(CHECKMD5);
+
+open(ABSENT, ">", catfile($outdir, "oldfiles.absent")) or die "Can't open oldfiles.absent: $!";
+print ABSENT map { $_->[1]."\n" } @toadd;
+close(ABSENT);
+
+open(DELETE, ">", catfile($outdir, "files.delete")) or die "Can't open files.delete: $!";
+print DELETE map { $_->[1]."\n" } @todelete, @toreplace;
+close(DELETE);
+
+my $outfiletarball = catfile($outdir, "newfiles.tar.gz");
+my $cwd = getcwd();
+
+chdir($newdir);
+my $tar = Archive::Tar->new;
+$tar->add_files(map { $_->[1] } @toadd, @toreplace);
+$tar->write($outfiletarball, 1);
+chdir($cwd) or die "Couldn't chdir back to $cwd: $!\n";
+
+if (0) {
+    my $outfiledir = catdir($outdir, "newfiles");
+    (-d $outfiledir || mkdir($outfiledir)) or die "Can't mkdir($outfiledir)\n";
+    
+    foreach my $file (@toadd, @toreplace) {
+	my $filename = $file->[1];
+	my $src = catfile($newdir, $filename);
+	my $dest = catfile($outfiledir, $filename);
+	my (undef, $dir, undef) = splitpath($dest);
+	mkpath($dir);
+	copy($src, $dest) or die "Couldn't copy $filename from $src to $dest: $!";
+    }
+}
+
+copy(catfile($proposaldir, "update.diff"), catfile($outdir, "update.diff")) or die "Couldn't copy update.diff: $!";
+if (-d catdir($proposaldir, "extra")) {
+    system('cp', '-r', catdir($proposaldir, "extra"), $outdir) && die "Couldn't copy extra: $!";
+}
+
+open (SCRIPT, ">", catfile($outdir, "update")) or die "Couldn't write update: $!";
+printf SCRIPT <<'EOF', catfile("/afs/athena.mit.edu/contrib/scripts/deploy/", $old), catfile("/afs/athena.mit.edu/contrib/scripts/deploy/", $new);
+#!/bin/bash
+set -e -o noclobber
+
+die () { echo "[$PWD] die: $1" >&2; rm .scripts-security-upd-lock; exit 1; }
+aiee () { echo "[$PWD] AIEE: $1" >&2; exit 2; }
+
+patchdir=$(dirname "$0")
+lockername="${1:-$USER}"
+
+>.scripts-security-upd-lock || die "error: Unable to obtain update lock."
+
+packages=$(tail -1 .scripts-version)
+
+echo "[$PWD] begin dry run"
+
+found=""
+newpackages=""
+for package in $packages; do
+    if [ "$package" = "%s" ]; then
+    found="yes"
+    newpackages="$newpackages%s "
+    else
+    newpackages="$newpackages$package "
+    fi
+done
+
+[ "$found" = "yes" ] || die "error: Correct version not found."
+
+if [ -e "$patchdir/extra/prepatch.sh" ]; then
+  . "$patchdir/extra/prepatch.sh" || die "error: prepatch failed"
+fi
+
+[ -s "$patchdir/oldfiles.absent" ] && (xargs -n1 test ! -e <"$patchdir/oldfiles.absent" || die "error: Conflicting files exist." )
+[ -s "$patchdir/check.md5" ] && (md5sum -c "$patchdir/check.md5" || die "error: MD5 check failed.")
+patch -stN --dry-run --no-backup-if-mismatch -p2 <"$patchdir/update.diff" || die "error: Patch dry run failed."
+
+echo "[$PWD] dry run OK, applying update"
+
+mv .scripts-version .scripts-version.old || aiee "Failed to back up scripts-version"
+patch -stN --no-backup-if-mismatch -p2 <"$patchdir/update.diff" || aiee "patch did not apply"
+xargs rm -f <"$patchdir/files.delete" || aiee "Failed to remove files"
+/afs/athena.mit.edu/contrib/scripts/bin/gtar -xzf "$patchdir/newfiles.tar.gz" || aiee "Failed to extract new files"
+[ -e "$patchdir/extra/postpatch.sh" ] && . "$patchdir/extra/postpatch.sh"
+(
+    cat .scripts-version.old
+    echo
+    date "+%%F %%T %%z"
+    echo "$USER@$(hostname)"
+    echo "$patchdir"
+    echo "$newpackages"
+) >.scripts-version
+rm -f .scripts-version.old || aiee "Failed to remove .scripts-version.old"
+
+rm -f .scripts-security-upd-lock || aiee "Failed to remove .scripts-security-upd-lock"
+
+echo "[$PWD] done"
+
+exit 0
+EOF
+chmod 0755, catfile($outdir, "update");
Index: /tags/fc9-eol/locker/sbin/check-users
===================================================================
--- /tags/fc9-eol/locker/sbin/check-users	(revision 1257)
+++ /tags/fc9-eol/locker/sbin/check-users	(revision 1257)
@@ -0,0 +1,79 @@
+#!/bin/bash
+set -e
+
+err() {
+    echo "$@"
+}
+
+if [ -z "$1" ]; then
+    filter="objectClass=posixAccount"
+else
+    filter=
+    for user; do
+	filter="$filter(uid=$user)"
+    done
+    filter="(&(objectClass=posixAccount)(|$filter))"
+fi
+
+unset "${!l_@}"
+while read attr value; do
+    if [ -n "$attr" ]; then
+	declare "l_${attr%:}=$value"
+	continue
+    fi
+
+    read f_type f_data < <(hesinfo "$l_uid" filsys) || :
+    if [ -z "$f_type" ]; then
+	err "$l_uid" "no_hesiod"
+    elif [ "$f_type" = "ERR" ]; then
+	err "$l_uid" "hesiod_err ERR $f_data"
+    elif [ "$f_type" = "AFS" ]; then
+	read f_path f_perm f_link z \
+	    < <(echo "$f_data")
+	[ "$l_homeDirectory" = "$f_path" ] || \
+	    err "$l_uid" "hesiod_path $f_path"
+    else
+	err "$l_uid" "wrong_hesiod $f_type"
+    fi
+
+    IFS=/ read p_empty p_top p_cell p \
+	< <(echo "$l_homeDirectory")
+    [ -z "${p_empty}" ] || \
+	err "$l_uid" "relative_home $l_homeDirectory"
+    [ "${p_top}" = "afs" ] || \
+	err "$l_uid" "not_afs $l_homeDirectory"
+
+    read v_vname v_vol v \
+	< <(vos exa -noauth "$l_uidNumber" -cell "$p_cell" 2>/dev/null) || :
+    [ "$v_vol" = "$l_uidNumber" ] ||
+	err "$l_uid" "no_vol $l_uidNumber"
+
+    if ! [ -d "$l_homeDirectory" ]; then
+	if ! [ -e "$l_homeDirectory" ]; then
+	    err "$l_uid" "deleted $l_homeDirectory"
+	else
+	    err "$l_uid" "not_dir $l_homeDirectory"
+	fi
+    else
+	read c c_path c c c c_cell \
+	    < <(fs whichcell "$l_homeDirectory" 2>/dev/null) || :
+	[ "$c_path" = "$l_homeDirectory" ] || \
+	    err "$l_uid" "no_cell $l_homeDirectory"
+	[ "$c_cell" = "'$p_cell'" ] || \
+	    err "$l_uid" "wrong_cell $l_homeDirectory"
+
+	read m_path m m m m m m m_vname \
+	    < <(fs lsmount "$l_homeDirectory" 2>/dev/null) || :
+	[ "$m_path" = "'$l_homeDirectory'" ] || \
+	    err "$l_uid" "no_mount $l_homeDirectory"
+	[ "$m_vname" = "'#$v_vname'" ] || [ "$m_vname" = "'%$v_vname'" ] || \
+	    err "$l_uid" "wrong_mount $m_vname ($l_uidNumber = $v_vname)"
+    fi
+
+    unset "${!l_@}"
+done < <(
+    ldapsearch -LLL -x -D 'cn=Directory Manager' -y /etc/signup-ldap-pw \
+        -b ou=People,dc=scripts,dc=mit,dc=edu "$filter" \
+        uid uidNumber homeDirectory loginShell | \
+        perl -0pe 's/\n //g;'
+    )
Index: /tags/fc9-eol/locker/sbin/commit-email.pl
===================================================================
--- /tags/fc9-eol/locker/sbin/commit-email.pl	(revision 1257)
+++ /tags/fc9-eol/locker/sbin/commit-email.pl	(revision 1257)
@@ -0,0 +1,830 @@
+#!/usr/bin/env perl
+
+# ====================================================================
+# commit-email.pl: send a notification email describing either a
+# commit or a revprop-change action on a Subversion repository.
+#
+# For usage, see the usage subroutine or run the script with no
+# command line arguments.
+#
+# This script requires Subversion 1.2.0 or later.
+#
+# $HeadURL: http://svn.collab.net/repos/svn/trunk/tools/hook-scripts/commit-email.pl.in $
+# $LastChangedDate: 2008-04-01 13:19:34 -0400 (Tue, 01 Apr 2008) $
+# $LastChangedBy: glasser $
+# $LastChangedRevision: 30158 $
+#
+# ====================================================================
+# Copyright (c) 2000-2006 CollabNet.  All rights reserved.
+#
+# This software is licensed as described in the file COPYING, which
+# you should have received as part of this distribution.  The terms
+# are also available at http://subversion.tigris.org/license-1.html.
+# If newer versions of this license are posted there, you may use a
+# newer version instead, at your option.
+#
+# This software consists of voluntary contributions made by many
+# individuals.  For exact contribution history, see the revision
+# history and logs, available at http://subversion.tigris.org/.
+# ====================================================================
+
+# Turn on warnings the best way depending on the Perl version.
+BEGIN {
+  if ( $] >= 5.006_000)
+    { require warnings; import warnings; }
+  else
+    { $^W = 1; }
+}
+
+use strict;
+use Carp;
+use POSIX qw(strftime);
+my ($sendmail, $smtp_server);
+
+######################################################################
+# Configuration section.
+
+# Sendmail path, or SMTP server address.
+# You should define exactly one of these two configuration variables,
+# leaving the other commented out, to select which method of sending
+# email should be used.
+# Using --stdout on the command line overrides both.
+$sendmail = "/usr/sbin/sendmail";
+#$smtp_server = "127.0.0.1";
+
+# Svnlook path.
+my $svnlook = "/usr/bin/svnlook";
+
+# By default, when a file is deleted from the repository, svnlook diff
+# prints the entire contents of the file.  If you want to save space
+# in the log and email messages by not printing the file, then set
+# $no_diff_deleted to 1.
+my $no_diff_deleted = 0;
+# By default, when a file is added to the repository, svnlook diff
+# prints the entire contents of the file.  If you want to save space
+# in the log and email messages by not printing the file, then set
+# $no_diff_added to 1.
+my $no_diff_added = 0;
+
+# End of Configuration section.
+######################################################################
+
+# Check that the required programs exist, and the email sending method
+# configuration is sane, to ensure that the administrator has set up
+# the script properly.
+{
+  my $ok = 1;
+  foreach my $program ($sendmail, $svnlook)
+    {
+      next if not defined $program;
+      if (-e $program)
+        {
+          unless (-x $program)
+            {
+              warn "$0: required program `$program' is not executable, ",
+                   "edit $0.\n";
+              $ok = 0;
+            }
+        }
+      else
+        {
+          warn "$0: required program `$program' does not exist, edit $0.\n";
+          $ok = 0;
+        }
+    }
+  if (not (defined $sendmail xor defined $smtp_server))
+    {
+      warn "$0: exactly one of \$sendmail or \$smtp_server must be ",
+           "set, edit $0.\n";
+      $ok = 0;
+    }
+  exit 1 unless $ok;
+}
+
+require Net::SMTP if defined $smtp_server;
+
+######################################################################
+# Initial setup/command-line handling.
+
+# Each value in this array holds a hash reference which contains the
+# associated email information for one project.  Start with an
+# implicit rule that matches all paths.
+my @project_settings_list = (&new_project);
+
+# Process the command line arguments till there are none left.
+# In commit mode: The first two arguments that are not used by a command line
+# option are the repository path and the revision number.
+# In revprop-change mode: The first four arguments that are not used by a
+# command line option are the repository path, the revision number, the
+# author, and the property name. This script has no support for the fifth
+# argument (action) added to the post-revprop-change hook in Subversion
+# 1.2.0 yet - patches welcome!
+my $repos;
+my $rev;
+my $author;
+my $propname;
+
+my $mode = 'commit';
+my $date;
+my $diff_file;
+
+# Use the reference to the first project to populate.
+my $current_project = $project_settings_list[0];
+
+# This hash matches the command line option to the hash key in the
+# project.  If a key exists but has a false value (''), then the
+# command line option is allowed but requires special handling.
+my %opt_to_hash_key = ('--from' => 'from_address',
+                       '--revprop-change' => '',
+                       '-d'     => '',
+                       '-h'     => 'hostname',
+                       '-l'     => 'log_file',
+                       '-m'     => '',
+                       '-r'     => 'reply_to',
+                       '-s'     => 'subject_prefix',
+                       '--summary' => '',
+                       '--diff' => '',
+                       '--stdout' => '');
+
+while (@ARGV)
+  {
+    my $arg = shift @ARGV;
+    if ($arg =~ /^-/)
+      {
+        my $hash_key = $opt_to_hash_key{$arg};
+        unless (defined $hash_key)
+          {
+            die "$0: command line option `$arg' is not recognized.\n";
+          }
+
+        my $value;
+        if ($arg ne '--revprop-change' and $arg ne '--stdout' and $arg ne '--summary')
+          {
+            unless (@ARGV)
+              {
+                die "$0: command line option `$arg' is missing a value.\n";
+              }
+            $value = shift @ARGV;
+          }
+
+        if ($hash_key)
+          {
+            $current_project->{$hash_key} = $value;
+          }
+        else
+          {
+            if ($arg eq '-m')
+              {
+                $current_project                = &new_project;
+                $current_project->{match_regex} = $value;
+                push(@project_settings_list, $current_project);
+              }
+            elsif ($arg eq '-d')
+              {
+                if ($mode ne 'revprop-change')
+                  {
+                    die "$0: `-d' is valid only when used after"
+                      . " `--revprop-change'.\n";
+                  }
+                if ($diff_file)
+                  {
+                    die "$0: command line option `$arg'"
+                      . " can only be used once.\n";
+                  }
+                $diff_file = $value;
+              }
+            elsif ($arg eq '--revprop-change')
+              {
+                if (defined $repos)
+                  {
+                    die "$0: `--revprop-change' must be specified before"
+                      . " the first non-option argument.\n";
+                  }
+                $mode = 'revprop-change';
+              }
+            elsif ($arg eq '--diff')
+              {
+                $current_project->{show_diff} = parse_boolean($value);
+              }
+            elsif ($arg eq '--stdout')
+              {
+                $current_project->{stdout} = 1;
+              }
+            elsif ($arg eq '--summary')
+              {
+                $current_project->{summary} = 1;
+              }
+            else
+              {
+                die "$0: internal error:"
+                  . " should not be handling `$arg' here.\n";
+              }
+          }
+      }
+    else
+      {
+        if (! defined $repos)
+          {
+            $repos = $arg;
+          }
+        elsif (! defined $rev)
+          {
+            $rev = $arg;
+          }
+        elsif (! defined $author && $mode eq 'revprop-change')
+          {
+            $author = $arg;
+          }
+        elsif (! defined $propname && $mode eq 'revprop-change')
+          {
+            $propname = $arg;
+          }
+        else
+          {
+            push(@{$current_project->{email_addresses}}, $arg);
+          }
+      }
+  }
+
+if ($mode eq 'commit')
+  {
+    &usage("$0: too few arguments.") unless defined $rev;
+  }
+elsif ($mode eq 'revprop-change')
+  {
+    &usage("$0: too few arguments.") unless defined $propname;
+  }
+
+# Check the validity of the command line arguments.  Check that the
+# revision is an integer greater than 0 and that the repository
+# directory exists.
+unless ($rev =~ /^\d+/ and $rev > 0)
+  {
+    &usage("$0: revision number `$rev' must be an integer > 0.");
+  }
+unless (-e $repos)
+  {
+    &usage("$0: repos directory `$repos' does not exist.");
+  }
+unless (-d _)
+  {
+    &usage("$0: repos directory `$repos' is not a directory.");
+  }
+
+# Check that all of the regular expressions can be compiled and
+# compile them.
+{
+  my $ok = 1;
+  for (my $i=0; $i<@project_settings_list; ++$i)
+    {
+      my $match_regex = $project_settings_list[$i]->{match_regex};
+
+      # To help users that automatically write regular expressions
+      # that match the root directory using ^/, remove the / character
+      # because subversion paths, while they start at the root level,
+      # do not begin with a /.
+      $match_regex =~ s#^\^/#^#;
+
+      my $match_re;
+      eval { $match_re = qr/$match_regex/ };
+      if ($@)
+        {
+          warn "$0: -m regex #$i `$match_regex' does not compile:\n$@\n";
+          $ok = 0;
+          next;
+        }
+      $project_settings_list[$i]->{match_re} = $match_re;
+    }
+  exit 1 unless $ok;
+}
+
+# Harvest common data needed for both commit or revprop-change.
+
+# Figure out what directories have changed using svnlook.
+my @dirschanged = &read_from_process($svnlook, 'dirs-changed', $repos,
+                                     '-r', $rev);
+
+# Lose the trailing slash in the directory names if one exists, except
+# in the case of '/'.
+my $rootchanged = 0;
+for (my $i=0; $i<@dirschanged; ++$i)
+  {
+    if ($dirschanged[$i] eq '/')
+      {
+        $rootchanged = 1;
+      }
+    else
+      {
+        $dirschanged[$i] =~ s#^(.+)[/\\]$#$1#;
+      }
+  }
+
+# Figure out what files have changed using svnlook.
+my @svnlooklines = &read_from_process($svnlook, 'changed', $repos, '-r', $rev);
+
+# Parse the changed nodes.
+my @adds;
+my @dels;
+my @mods;
+foreach my $line (@svnlooklines)
+  {
+    my $path = '';
+    my $code = '';
+
+    # Split the line up into the modification code and path, ignoring
+    # property modifications.
+    if ($line =~ /^(.).  (.*)$/)
+      {
+        $code = $1;
+        $path = $2;
+      }
+
+    if ($code eq 'A')
+      {
+        push(@adds, $path);
+      }
+    elsif ($code eq 'D')
+      {
+        push(@dels, $path);
+      }
+    else
+      {
+        push(@mods, $path);
+      }
+  }
+
+# Declare variables which carry information out of the inner scope of
+# the conditional blocks below.
+my $subject_base;
+my $subject_logbase;
+my @body;
+# $author - declared above for use as a command line parameter in
+#   revprop-change mode.  In commit mode, gets filled in below.
+
+if ($mode eq 'commit')
+  {
+    ######################################################################
+    # Harvest data using svnlook.
+
+    # Get the author, date, and log from svnlook.
+    my @infolines = &read_from_process($svnlook, 'info', $repos, '-r', $rev);
+    $author = shift @infolines;
+    $date = shift @infolines;
+    shift @infolines;
+    my @log = map { "$_\n" } @infolines;
+
+    ######################################################################
+    # Modified directory name collapsing.
+
+    # Collapse the list of changed directories only if the root directory
+    # was not modified, because otherwise everything is under root and
+    # there's no point in collapsing the directories, and only if more
+    # than one directory was modified.
+    my $commondir = '';
+    my @edited_dirschanged = @dirschanged;
+    if (!$rootchanged and @edited_dirschanged > 1)
+      {
+        my $firstline    = shift @edited_dirschanged;
+        my @commonpieces = split('/', $firstline);
+        foreach my $line (@edited_dirschanged)
+          {
+            my @pieces = split('/', $line);
+            my $i = 0;
+            while ($i < @pieces and $i < @commonpieces)
+              {
+                if ($pieces[$i] ne $commonpieces[$i])
+                  {
+                    splice(@commonpieces, $i, @commonpieces - $i);
+                    last;
+                  }
+                $i++;
+              }
+          }
+        unshift(@edited_dirschanged, $firstline);
+
+        if (@commonpieces)
+          {
+            $commondir = join('/', @commonpieces);
+            my @new_dirschanged;
+            foreach my $dir (@edited_dirschanged)
+              {
+                if ($dir eq $commondir)
+                  {
+                    $dir = '.';
+                  }
+                else
+                  {
+                    $dir =~ s#^\Q$commondir/\E##;
+                  }
+                push(@new_dirschanged, $dir);
+              }
+            @edited_dirschanged = @new_dirschanged;
+          }
+      }
+    my $dirlist = join(' ', @edited_dirschanged);
+
+    ######################################################################
+    # Assembly of log message.
+
+    if ($commondir ne '')
+      {
+        $subject_base = "r$rev - in $commondir: $dirlist";
+      }
+    else
+      {
+        $subject_base = "r$rev - $dirlist";
+      }
+    my $summary = @log ? $log[0] : '';
+    chomp($summary);
+    $subject_logbase = "r$rev - $summary";
+
+    # Put together the body of the log message.
+    push(@body, "Author: $author\n");
+    push(@body, "Date: $date\n");
+    push(@body, "New Revision: $rev\n");
+    push(@body, "\n");
+    if (@adds)
+      {
+        @adds = sort @adds;
+        push(@body, "Added:\n");
+        push(@body, map { "   $_\n" } @adds);
+      }
+    if (@dels)
+      {
+        @dels = sort @dels;
+        push(@body, "Removed:\n");
+        push(@body, map { "   $_\n" } @dels);
+      }
+    if (@mods)
+      {
+        @mods = sort @mods;
+        push(@body, "Modified:\n");
+        push(@body, map { "   $_\n" } @mods);
+      }
+    push(@body, "Log:\n");
+    push(@body, @log);
+    push(@body, "\n");
+  }
+elsif ($mode eq 'revprop-change')
+  {
+    ######################################################################
+    # Harvest data.
+
+    my @svnlines;
+    # Get the diff file if it was provided, otherwise the property value.
+    if ($diff_file)
+      {
+        open(DIFF_FILE, $diff_file) or die "$0: cannot read `$diff_file': $!\n";
+        @svnlines = <DIFF_FILE>;
+        close DIFF_FILE;
+      }
+    else
+      {
+        @svnlines = &read_from_process($svnlook, 'propget', '--revprop', '-r',
+                                       $rev, $repos, $propname);
+      }
+
+    ######################################################################
+    # Assembly of log message.
+
+    $subject_base = "propchange - r$rev $propname";
+
+    # Put together the body of the log message.
+    push(@body, "Author: $author\n");
+    push(@body, "Revision: $rev\n");
+    push(@body, "Property Name: $propname\n");
+    push(@body, "\n");
+    unless ($diff_file)
+      {
+        push(@body, "New Property Value:\n");
+      }
+    push(@body, map { /[\r\n]+$/ ? $_ : "$_\n" } @svnlines);
+    push(@body, "\n");
+  }
+
+# Cached information - calculated when first needed.
+my @difflines;
+
+# Go through each project and see if there are any matches for this
+# project.  If so, send the log out.
+foreach my $project (@project_settings_list)
+  {
+    my $match_re = $project->{match_re};
+    my $match    = 0;
+    foreach my $path (@dirschanged, @adds, @dels, @mods)
+      {
+        if ($path =~ $match_re)
+          {
+            $match = 1;
+            last;
+          }
+      }
+
+    next unless $match;
+
+    my @email_addresses = @{$project->{email_addresses}};
+    my $userlist        = join(' ', @email_addresses);
+    my $to              = join(', ', @email_addresses);
+    my $from_address    = $project->{from_address};
+    my $hostname        = $project->{hostname};
+    my $log_file        = $project->{log_file};
+    my $reply_to        = $project->{reply_to};
+    my $subject_prefix  = $project->{subject_prefix};
+    my $summary         = $project->{summary};
+    my $diff_wanted     = ($project->{show_diff} and $mode eq 'commit');
+    my $stdout          = $project->{stdout};
+
+    my $subject         = $summary ? $subject_logbase : $subject_base;
+    if ($subject_prefix =~ /\w/)
+      {
+        $subject = "$subject_prefix $subject";
+      }
+    my $mail_from = $author;
+
+    if ($from_address =~ /\w/)
+      {
+        $mail_from = $from_address;
+      }
+    elsif ($hostname =~ /\w/)
+      {
+        $mail_from = "$mail_from\@$hostname";
+      }
+    elsif (defined $smtp_server and ! $stdout)
+      {
+        die "$0: use of either `-h' or `--from' is mandatory when ",
+            "sending email using direct SMTP.\n";
+      }
+
+    my @head;
+    my $formatted_date;
+    if (defined $stdout)
+      {
+        $formatted_date = strftime('%a %b %e %X %Y', localtime());
+        push(@head, "From $mail_from $formatted_date\n");
+      }
+    $formatted_date = strftime('%a, %e %b %Y %X %z', localtime());
+    push(@head, "Date: $formatted_date\n");
+    push(@head, "To: $to\n");
+    push(@head, "From: $mail_from\n");
+    push(@head, "Subject: $subject\n");
+    push(@head, "Reply-to: $reply_to\n") if $reply_to;
+
+    ### Below, we set the content-type etc, but see these comments
+    ### from Greg Stein on why this is not a full solution.
+    #
+    # From: Greg Stein <gstein@lyra.org>
+    # Subject: Re: svn commit: rev 2599 - trunk/tools/cgi
+    # To: dev@subversion.tigris.org
+    # Date: Fri, 19 Jul 2002 23:42:32 -0700
+    #
+    # Well... that isn't strictly true. The contents of the files
+    # might not be UTF-8, so the "diff" portion will be hosed.
+    #
+    # If you want a truly "proper" commit message, then you'd use
+    # multipart MIME messages, with each file going into its own part,
+    # and labeled with an appropriate MIME type and charset. Of
+    # course, we haven't defined a charset property yet, but no biggy.
+    #
+    # Going with multipart will surely throw out the notion of "cut
+    # out the patch from the email and apply." But then again: the
+    # commit emailer could see that all portions are in the same
+    # charset and skip the multipart thang.
+    #
+    # etc etc
+    #
+    # Basically: adding/tweaking the content-type is nice, but don't
+    # think that is the proper solution.
+    push(@head, "Content-Type: text/plain; charset=UTF-8\n");
+    push(@head, "Content-Transfer-Encoding: 8bit\n");
+
+    push(@head, "\n");
+
+    if ($diff_wanted and not @difflines)
+      {
+        # Get the diff from svnlook.
+        my @no_diff_deleted = $no_diff_deleted ? ('--no-diff-deleted') : ();
+        my @no_diff_added = $no_diff_added ? ('--no-diff-added') : ();
+        @difflines = &read_from_process($svnlook, 'diff', $repos,
+                                        '-r', $rev, @no_diff_deleted,
+                                        @no_diff_added);
+        @difflines = map { /[\r\n]+$/ ? $_ : "$_\n" } @difflines;
+      }
+
+    if ($stdout)
+      {
+        print @head, @body;
+        print @difflines if $diff_wanted;
+      }
+    elsif (defined $sendmail and @email_addresses)
+      {
+        # Open a pipe to sendmail.
+        my $command = "$sendmail -f'$mail_from' $userlist";
+        if (open(SENDMAIL, "| $command"))
+          {
+            print SENDMAIL @head, @body;
+            print SENDMAIL @difflines if $diff_wanted;
+            close SENDMAIL
+              or warn "$0: error in closing `$command' for writing: $!\n";
+          }
+        else
+          {
+            warn "$0: cannot open `| $command' for writing: $!\n";
+          }
+      }
+    elsif (defined $smtp_server and @email_addresses)
+      {
+        my $smtp = Net::SMTP->new($smtp_server)
+          or die "$0: error opening SMTP session to `$smtp_server': $!\n";
+        handle_smtp_error($smtp, $smtp->mail($mail_from));
+        handle_smtp_error($smtp, $smtp->recipient(@email_addresses));
+        handle_smtp_error($smtp, $smtp->data());
+        handle_smtp_error($smtp, $smtp->datasend(@head, @body));
+        if ($diff_wanted)
+          {
+            handle_smtp_error($smtp, $smtp->datasend(@difflines));
+          }
+        handle_smtp_error($smtp, $smtp->dataend());
+        handle_smtp_error($smtp, $smtp->quit());
+      }
+
+    # Dump the output to logfile (if its name is not empty).
+    if ($log_file =~ /\w/)
+      {
+        if (open(LOGFILE, ">> $log_file"))
+          {
+            print LOGFILE @head, @body;
+            print LOGFILE @difflines if $diff_wanted;
+            close LOGFILE
+              or warn "$0: error in closing `$log_file' for appending: $!\n";
+          }
+        else
+          {
+            warn "$0: cannot open `$log_file' for appending: $!\n";
+          }
+      }
+  }
+
+exit 0;
+
+sub handle_smtp_error
+{
+  my ($smtp, $retval) = @_;
+  if (not $retval)
+    {
+      die "$0: SMTP Error: " . $smtp->message() . "\n";
+    }
+}
+
+sub usage
+{
+  warn "@_\n" if @_;
+  die "usage (commit mode):\n",
+      "  $0 REPOS REVNUM [[-m regex] [options] [email_addr ...]] ...\n",
+      "usage: (revprop-change mode):\n",
+      "  $0 --revprop-change REPOS REVNUM USER PROPNAME [-d diff_file] \\\n",
+      "    [[-m regex] [options] [email_addr ...]] ...\n",
+      "options are:\n",
+      "  -m regex              Regular expression to match committed path\n",
+      "  --from email_address  Email address for 'From:' (overrides -h)\n",
+      "  -h hostname           Hostname to append to author for 'From:'\n",
+      "  -l logfile            Append mail contents to this log file\n",
+      "  -r email_address      Email address for 'Reply-To:'\n",
+      "  -s subject_prefix     Subject line prefix\n",
+      "  --summary             Use first line of commit log in subject\n",
+      "  --diff y|n            Include diff in message (default: y)\n",
+      "                        (applies to commit mode only)\n",
+      "  --stdout              Spit the message in mbox format to stdout.\n",
+      "\n",
+      "This script supports a single repository with multiple projects,\n",
+      "where each project receives email only for actions that affect that\n",
+      "project.  A project is identified by using the -m command line\n".
+      "option with a regular expression argument.  If the given revision\n",
+      "contains modifications to a path that matches the regular\n",
+      "expression, then the action applies to the project.\n",
+      "\n",
+      "Any of the following email addresses and command line options\n",
+      "(other than -d) are associated with this project, until the next -m,\n",
+      "which resets the options and the list of email addresses.\n",
+      "\n",
+      "To support a single project conveniently, the script initializes\n",
+      "itself with an implicit -m . rule that matches any modifications\n",
+      "to the repository.  Therefore, to use the script for a single-\n",
+      "project repository, just use the other command line options and\n",
+      "a list of email addresses on the command line.  If you do not want\n",
+      "a rule that matches the entire repository, then use -m with a\n",
+      "regular expression before any other command line options or email\n",
+      "addresses.\n",
+      "\n",
+      "'revprop-change' mode:\n",
+      "The message will contain a copy of the diff_file if it is provided,\n",
+      "otherwise a copy of the (assumed to be new) property value.\n",
+      "\n";
+}
+
+# Return a new hash data structure for a new empty project that
+# matches any modifications to the repository.
+sub new_project
+{
+  return {email_addresses => [],
+          from_address    => '',
+          hostname        => '',
+          log_file        => '',
+          match_regex     => '.',
+          reply_to        => '',
+          subject_prefix  => '',
+          show_diff       => 1,
+          stdout          => 0};
+}
+
+sub parse_boolean
+{
+  if ($_[0] eq 'y') { return 1; };
+  if ($_[0] eq 'n') { return 0; };
+
+  die "$0: valid boolean options are 'y' or 'n', not '$_[0]'\n";
+}
+
+# Start a child process safely without using /bin/sh.
+sub safe_read_from_pipe
+{
+  unless (@_)
+    {
+      croak "$0: safe_read_from_pipe passed no arguments.\n";
+    }
+
+  my $openfork_available = $^O ne "MSWin32"; 
+  if ($openfork_available) # We can fork on this system.
+    {
+      my $pid = open(SAFE_READ, '-|');
+      unless (defined $pid)
+        {
+          die "$0: cannot fork: $!\n";
+        }
+      unless ($pid)
+        {
+          open(STDERR, ">&STDOUT")
+            or die "$0: cannot dup STDOUT: $!\n";
+          exec(@_)
+            or die "$0: cannot exec `@_': $!\n";
+        }
+    }
+  else  # Running on Windows.  No fork. 
+    {
+      my @commandline = ();
+      my $arg;
+      
+      while ($arg = shift)
+        {
+          $arg =~ s/\"/\\\"/g;
+          if ($arg eq "" or $arg =~ /\s/) { $arg = "\"$arg\""; }
+          push(@commandline, $arg);
+        }
+        
+      # Now do the pipe.
+      open(SAFE_READ, "@commandline |")
+        or die "$0: cannot pipe to command: $!\n";
+    }
+  my @output;
+  while (<SAFE_READ>)
+    {
+      s/[\r\n]+$//;
+      push(@output, $_);
+    }
+  close(SAFE_READ);
+  my $result = $?;
+  my $exit   = $result >> 8;
+  my $signal = $result & 127;
+  my $cd     = $result & 128 ? "with core dump" : "";
+  if ($signal or $cd)
+    {
+      warn "$0: pipe from `@_' failed $cd: exit=$exit signal=$signal\n";
+    }
+  if (wantarray)
+    {
+      return ($result, @output);
+    }
+  else
+    {
+      return $result;
+    }
+}
+
+# Use safe_read_from_pipe to start a child process safely and return
+# the output if it succeeded or an error message followed by the output
+# if it failed.
+sub read_from_process
+{
+  unless (@_)
+    {
+      croak "$0: read_from_process passed no arguments.\n";
+    }
+  my ($status, @output) = &safe_read_from_pipe(@_);
+  if ($status)
+    {
+      return ("$0: `@_' failed with this output:", @output);
+    }
+  else
+    {
+      return @output;
+    }
+}
Index: /tags/fc9-eol/locker/sbin/commit-zephyr
===================================================================
--- /tags/fc9-eol/locker/sbin/commit-zephyr	(revision 1257)
+++ /tags/fc9-eol/locker/sbin/commit-zephyr	(revision 1257)
@@ -0,0 +1,41 @@
+#!/bin/sh
+
+CLASS=scripts
+INSTANCE=@
+FULL=0
+
+OPTS=$(getopt -o c:i:f -l class:,instance:,full -n "$0" -- "$@") || exit $?
+eval set -- "$OPTS"
+while :; do
+    case "$1" in
+	-c|--class) CLASS=$2; shift 2;;
+	-i|--instance) INSTANCE=$2; shift 2;;
+	-f|--full) FULL=1; shift;;
+	--) shift; break;;
+	*) exit 1;;
+    esac
+done
+[ $# -ge 2 ] || exit 1
+REPOS=$1
+REV=$2
+
+if [ "$INSTANCE" = "${INSTANCE%@}@" ]; then
+    INSTANCE=${INSTANCE%@}r$REV
+fi
+
+dirs=$(svnlook dirs-changed "$REPOS" -r "$REV")
+svnlook info "$REPOS" -r "$REV" | (
+    read -r author
+    read -r datestamp
+    read -r logsize
+    log=$(cat)
+    echo "r$REV by $author $datestamp"
+    echo "$log"
+    svnlook changed "$REPOS" -r "$REV"
+    if [ "$FULL" -eq 1 ]; then
+	echo
+	svnlook diff "$REPOS" -r "$REV"
+    else
+	echo svnlook diff "$REPOS" -r "$REV"
+    fi
+) | zwrite -d -c "$CLASS" -i "$INSTANCE" -s "r$REV - $dirs"
Index: /tags/fc9-eol/locker/sbin/get-homedirs.sh
===================================================================
--- /tags/fc9-eol/locker/sbin/get-homedirs.sh	(revision 1257)
+++ /tags/fc9-eol/locker/sbin/get-homedirs.sh	(revision 1257)
@@ -0,0 +1,6 @@
+#!/bin/sh
+
+# Run this as root on scripts.
+
+/usr/bin/ldapsearch -LLL -z 0 -b ou=People,dc=scripts,dc=mit,dc=edu -s one -x -D 'cn=Directory Manager' -y /etc/signup-ldap-pw '' cn homeDirectory | \
+	perl -0pe 's/\n //g; s/^dn: .*\ncn: (.*)\nhomeDirectory: (.*)\n\n/$1 $2\n/gm'
Index: /tags/fc9-eol/locker/sbin/get-versions.pl
===================================================================
--- /tags/fc9-eol/locker/sbin/get-versions.pl	(revision 1257)
+++ /tags/fc9-eol/locker/sbin/get-versions.pl	(revision 1257)
@@ -0,0 +1,21 @@
+#!/usr/bin/perl
+
+system("/mit/scripts/sec-tools/get-passwd.sh");
+system("/mit/scripts/sec-tools/parallel-find.pl");
+sleep 5;
+
+while(1) {
+    my $count = `ps -ef | grep find | grep $ENV{USER} | grep -v ps | grep -v grep | wc -l | tr -d '\n'`;
+    if ($count eq '0') {
+	last;
+    }
+    else {
+	print "Current have $count find processes running.  Please wait.\n";
+	sleep 1;
+    }
+}
+
+print "Done finding files\n";
+system("cat /mit/scripts/sec-tools/store/versions/* >| /mit/scripts/sec-tools/store/scripts-versions");
+print "Done\n";
+#print `cat /mit/scripts/sec-tools/store/versions/`;
Index: /tags/fc9-eol/locker/sbin/mail-owners.pl
===================================================================
--- /tags/fc9-eol/locker/sbin/mail-owners.pl	(revision 1257)
+++ /tags/fc9-eol/locker/sbin/mail-owners.pl	(revision 1257)
@@ -0,0 +1,53 @@
+#!/usr/athena/bin/perl
+
+use strict;
+
+use warnings;
+
+open LIST, "actual";
+
+open TEMPLATE, "wordpress-email";
+
+my $template = do {local $/; <TEMPLATE>};
+
+sub bits {
+    # Given the argument of a locker, return users with rlidwka rights
+    my $DIR = shift;
+    open PERM, "fs la $DIR | ";
+    my @list = (); #to be filled with users or moira lists
+    while (my $line = <PERM>){
+	if ($line =~ m{(\S+) \s rlidwka}x) {
+	    my $temp = $1;
+	    $temp =~ s/system://g;	    
+	    push @list, $temp;
+	}
+    }
+    return @list;
+}
+
+while (my $line = <LIST>) {
+    print $line;
+    if ($line =~ m{( (.*/ ([^/]+) ) /web_scripts/(\S+) )\s.*'([.0-9]+)'}x) {  
+	my $PATH = $1;
+	#print $PATH;
+	my $DIR = $2;
+	my $LOCKER = $3;
+	my $URI = "$3.scripts.mit.edu/$4";
+	my $VERSION = $5;
+	next if $VERSION ne '2.0.2';
+	my $lockeremail = $template;
+	$lockeremail =~ s/<LOCKER>/$LOCKER/g;
+	$lockeremail =~ s/<URI>/$URI/g;
+	$lockeremail =~ s/<DIRECTORY>/$PATH/g;
+	$lockeremail =~ s/<VERSION>/$VERSION/g;
+	$lockeremail = "To: ".join(',',&bits($DIR))."\n\n".$lockeremail; 
+	open OUTPUT, ">./email/$LOCKER";
+	print OUTPUT $lockeremail; 
+    }
+}
+
+
+
+
+
+
Index: /tags/fc9-eol/locker/sbin/parallel-find.pl
===================================================================
--- /tags/fc9-eol/locker/sbin/parallel-find.pl	(revision 1257)
+++ /tags/fc9-eol/locker/sbin/parallel-find.pl	(revision 1257)
@@ -0,0 +1,69 @@
+#!/usr/bin/perl
+
+# Script to help generate find the .scripts-version files
+
+use lib '/mit/scripts/sec-tools/perl';
+
+open(FILE, "</mit/scripts/sec-tools/store/scriptslist");
+my $dump = "/mit/scripts/sec-tools/store/versions";
+
+(! -e $dump) || die "Output directory exists: $dump";
+system("mkdir", $dump) && die;
+
+use Proc::Queue size => 40, debug => 0, trace => 0;
+use POSIX ":sys_wait_h"; # imports WNOHANG
+
+# this loop creates new childs, but Proc::Queue makes it wait every
+# time the limit (50) is reached until enough childs exit
+
+# Note that we miss things where one volume is inside another if we
+# use -xdev.  May miss libraries stuff.
+
+sub updatable ($) {
+    my $filename = shift;
+    for my $l (`fs la "$filename"`) {
+        return 1 if ($l =~ /^  system:scripts-security-upd rlidwk/);
+    }
+    return 0;
+}
+
+sub version ($) {
+    my $dirname = shift;
+    open my $h, "$dirname/.scripts-version";
+    return (<$h>)[-1];
+}
+
+sub find ($$) {
+    my $user = shift;
+    my $homedir = shift;
+
+    open my $files, "find $homedir/web_scripts -xdev -name .scripts-version 2>/dev/null |";
+    open my $out, ">$dump/$user";
+    while (my $f = <$files>) {
+        chomp $f;
+        $f =~ s!/\.scripts-version$!!;
+        if (! updatable($f)) {
+            print STDERR "not updatable: $f";
+            next;
+        }
+        $v = version($f);
+        print $out "$f:$v";
+    }
+    return 0;
+}
+
+while (<FILE>) {
+    my ($user, $homedir) = /^([^ ]*) (.*)$/;
+    my $f=fork;
+    if(defined ($f) and $f==0) {
+        if ($homedir !~ m|^/afs/athena|) {
+            print "ignoring non-athena-cell $user $homedir\n";
+            exit(0);
+        }
+	print "$user\n";
+        $ret = find($user, $homedir);
+	sleep rand 1;
+	exit($ret);
+    }
+    1 while waitpid(-1, WNOHANG)>0; # avoids memory leaks in Proc::Queue
+}
Index: /tags/fc9-eol/locker/sbin/propose-update
===================================================================
--- /tags/fc9-eol/locker/sbin/propose-update	(revision 1257)
+++ /tags/fc9-eol/locker/sbin/propose-update	(revision 1257)
@@ -0,0 +1,173 @@
+#!/usr/athena/bin/perl
+
+use File::Spec::Functions;
+use Data::Dumper;
+use Getopt::Long;
+use Cwd;
+
+my ($redodelete, $redoadd, $redoreplace, $redodiff) = (0,0,0,0);
+
+my $scriptsdev = "";
+
+GetOptions("redo-delete" => \$redodelete,
+	   "redo-add" => \$redoadd,
+	   "redo-replace" => \$redoreplace,
+	   "redo-diff" => \$redodiff,
+	   "redo-all" => sub {$redodelete = $redoadd = $redoreplace = $redodiff = 1;},
+	   "dev" => sub {$scriptsdev = "dev";},
+		  );
+
+if (@ARGV < 3) {
+  print STDERR "Usage: $0 [--redo-{delete|add|replace|diff|all}] [--dev] package oldversion newversion\n";
+  exit(1);
+}
+
+my ($package, $oldversion, $newversion) = @ARGV;
+my ($old, $new, $updatename) = ($package.'-'.$oldversion, $package.'-'.$newversion, $package.'-'.$oldversion.'-to-'.$newversion);
+
+my $outdir = $updatename.".proposal";
+
+(-d $outdir || mkdir($outdir)) or die "mkdir($outdir) failed: $!";
+
+my $olddir = catdir($outdir,$old);
+my $newdir = catdir($outdir,$new);
+
+unpackPackage($old, $olddir);
+unpackPackage($new, $newdir);
+
+sub unpackPackage($$) {
+  my ($package, $dir) = @_;
+  print STDERR "Extracting $package to $dir... ";
+  if (-d $dir) {
+    warn "$dir already exists; assuming unpacking was successful";
+    return;
+  }
+  mkdir($dir) or die "mkdir($dir) failed: $!";
+  my $cwd = cwd();
+  chdir($dir) or die $!;
+  `athrun scripts gtar zxf "/mit/scripts/deploy$scriptsdev/$package/$package.tar.gz"`;
+  if ($?) { chdir($cwd); system("rmdir", "$dir"); die "Failed to unpack $package.tar.gz: $?"; }
+  my @files=`athrun scripts gfind . -mindepth 1 -maxdepth 1 | grep -v .admin`;
+  if (@files <= 1) {
+    `athrun scripts gfind . -mindepth 2 -maxdepth 2 -exec mv {} . \\;`;
+    rmdir($files[0]);
+  }
+  chdir($cwd) or die "Couldn't return to $cwd";
+  print "done.\n";
+}
+
+my @oldfiles = sort { $a->[1] cmp $b->[1] } map { chomp; s|$olddir\/?||g; [split(' ', $_, 2)] } `athrun scripts gfind $olddir -type f -exec md5sum {} \\;`;
+#print Dumper(\@oldfiles);
+my @newfiles = sort { $a->[1] cmp $b->[1] } map { chomp; s|$newdir\/?||g; [split(' ', $_, 2)] } `athrun scripts gfind $newdir -type f -exec md5sum {} \\;`;
+#print Dumper(\@newfiles);
+
+sub compareDirectories($$) {
+  my ($alist, $blist) = @_;
+  my @a = @$alist;
+  my @b = @$blist;
+  my @aonly, @bonly, @both;
+  $a = $b = 0;
+  my $debug = 0;
+  local $Data::Dumper::Indent = 0;
+  while ($a <= $#a || $b <= $#a) {
+    my $fa = $a[$a];
+    my $fb = $b[$b];
+    print STDERR "Comparing ".Dumper($fa, $fb)."\n" if $debug;
+    if ($fa->[1] eq $fb->[1]) { # Same file exists on both
+      print STDERR "Same file\n" if $debug;
+      if ($fa->[0] ne $fb->[0]) { # File has changed in some way
+	print STDERR "Different md5, pushing on \@both\n" if $debug;
+	push(@both, [$fa->[1], $fa, $fb]);
+      }
+      $a++; $b++; # increment both counters
+    } else {
+      my $a2 = $a;
+      while ($a2 <= $#a && $a[$a2]->[1] lt $fb->[1]) {
+	$a2++;
+      }
+      if ($a2 <= $#a && $a[$a2]->[1] eq $fb->[1]) {
+	for my $i ($a..$a2-1) {
+	  push @aonly, $a[$i];
+	}
+	$a = $a2;
+      } else {
+	my $b2 = $b;
+	while ($b2 <= $#b && $b[$b2]->[1] lt $fa->[1]) {
+	  $b2++;
+	}
+	if ($b2 <= $#b && $b[$b2]->[1] eq $fa->[1]) {
+	  for my $i ($b..$b2-1) {
+	    push @bonly, $b[$i];
+	  }
+	  $b = $b2;
+	} else {
+	  push @aonly, $a[$a];
+	  push @bonly, $b[$b];
+	  $a++; $b++;
+	}
+      }
+    }
+  }
+  return (\@aonly, \@bonly, \@both);
+}
+
+my (@todelete, @toadd, @changed);
+my @comp = compareDirectories(\@oldfiles, \@newfiles);
+open(DIFF, ">", catfile($outdir, "diff.pl"));
+print DIFF Dumper(@comp);
+close(DIFF);
+@todelete = @{$comp[0]};
+@toadd = @{$comp[1]};
+@changed = @{$comp[2]};
+
+if ($redodelete or ! -e catfile($outdir, "files.delete")) {
+	open(TODELETE, ">", catfile($outdir, "files.delete")) or die "Can't open files.delete: $!";
+	foreach my $file (@todelete) {
+	  printf TODELETE "%s %s\n", $file->[0], $file->[1];
+	}
+	close(TODELETE);
+	printf "Wrote %d filenames to files.delete\n", scalar(@todelete);
+} else { printf "Not overwriting existing files.delete\n"; }
+
+if ($redoadd or ! -e catfile($outdir, "files.add")) {
+	open(TOADD, ">", catfile($outdir, "files.add")) or die "Can't open files.add: $!";
+	foreach my $file (@toadd) {
+	  printf TOADD "%s %s\n", $file->[0], $file->[1];
+	}
+	close(TOADD);
+	printf "Wrote %d filenames to files.add\n", scalar(@toadd);
+} else { printf "Not overwriting existing files.add\n"; }
+
+my @toreplace;
+my @topatch;
+
+foreach my $file (@changed) {
+	if (-B catdir($newdir, $file->[0])) {
+		push (@toreplace, $file);
+	} else {
+		push (@topatch, $file);
+	}
+}
+
+if ($redoreplace or ! -e catfile($outdir, "files.replace")) {
+	open(TOREPLACE, ">", catfile($outdir, "files.replace")) or die "Can't open files.replace: $!";
+	foreach my $file (@toreplace) {
+		printf TOREPLACE "%s %s\n", $file->[1][0], $file->[0];
+	}
+	close(TOREPLACE);
+	printf "Wrote %d filenames to files.replace\n", scalar(@toreplace);
+} else { printf "Not overwriting existing files.replace\n"; }
+
+if ($redodiff or ! -e catfile($outdir, "update.diff")) {
+    open(DIFF, ">", catfile($outdir, "update.diff")) or die "Can't open update.diff: $!";
+    foreach my $file (@topatch) {
+	my $filename = $file->[0];
+	my $oldfile = catfile($olddir, $file->[1][1]);
+	my $newfile = catfile($newdir, $file->[2][1]);
+	my $cmd = "diff -urN $oldfile $newfile";
+	print DIFF "$cmd\n";
+	print DIFF `$cmd`;
+    }
+    close(DIFF);
+    printf "Wrote %d diffs to update.diff\n", scalar(@topatch);
+} else { printf "Not overwriting existing update.patch\n"; }
Index: /tags/fc9-eol/locker/sql/bin/create-database
===================================================================
--- /tags/fc9-eol/locker/sql/bin/create-database	(revision 1257)
+++ /tags/fc9-eol/locker/sql/bin/create-database	(revision 1257)
@@ -0,0 +1,11 @@
+#!/usr/bin/php
+<?php
+
+list($h,$u,$p) = explode("\t",`/mit/scripts/sql/bin/get-password`);
+$d = $argv[1];
+$create_r = explode(',',file_get_contents('https://sql.mit.edu/main/do/batch/create_db?d=' . urlencode($d) . '&u=' . urlencode($u) . '&p=' . urlencode($p)));
+$return_r = array_shift($create_r);
+$created = implode(',',$create_r);
+if ($return_r == '0') echo $created;
+
+?>
Index: /tags/fc9-eol/locker/sql/bin/drop-database
===================================================================
--- /tags/fc9-eol/locker/sql/bin/drop-database	(revision 1257)
+++ /tags/fc9-eol/locker/sql/bin/drop-database	(revision 1257)
@@ -0,0 +1,11 @@
+#!/usr/bin/php
+<?php
+
+list($h,$u,$p) = explode("\t",`/mit/scripts/sql/bin/get-password`);
+$d = $argv[1];
+$drop_r = explode(',',file_get_contents('https://sql.mit.edu/main/do/batch/drop_db?d=' . urlencode($d) . '&u=' . urlencode($u) . '&p=' . urlencode($p)));
+$return_r = array_shift($drop_r);
+$dropped = implode(',',$drop_r);
+if ($return_r == '0') echo $dropped;
+
+?>
Index: /tags/fc9-eol/locker/sql/bin/get-next-database
===================================================================
--- /tags/fc9-eol/locker/sql/bin/get-next-database	(revision 1257)
+++ /tags/fc9-eol/locker/sql/bin/get-next-database	(revision 1257)
@@ -0,0 +1,16 @@
+#!/usr/bin/php
+<?php
+
+list($h,$u,$p) = explode("\t",`/mit/scripts/sql/bin/get-password`);
+$newdb = str_replace($u.'+','',$argv[1]);
+$testdb = str_replace('.','',$u).'+'.$newdb;
+$dbs = explode("\n",file_get_contents('https://sql.mit.edu/tools/list_dbs?h=' . urlencode($h) . '&u=' . urlencode($u) . '&p=' . urlencode($p)));
+if (in_array($testdb,$dbs)) {
+	$i = 1;
+	while(in_array($testdb.$i,$dbs)) {
+		$i++;
+	}
+	echo $newdb.$i;
+} else echo $newdb;
+
+?>
Index: /tags/fc9-eol/locker/sql/bin/get-password
===================================================================
--- /tags/fc9-eol/locker/sql/bin/get-password	(revision 1257)
+++ /tags/fc9-eol/locker/sql/bin/get-password	(revision 1257)
@@ -0,0 +1,58 @@
+#!/usr/bin/php
+<?php
+
+$host = 'sql.mit.edu';
+$env_user = getenv('USER');
+$home = '/mit/'.$env_user;
+
+$cnfPath = $home.'/.sql/my.cnf';
+
+function getMyCnfInfo($path) {
+if (file_exists($path)) {
+	global $env_user;
+	$cnfFile = file_get_contents($path);
+	if (preg_match('/\[mysql\][^\[]*host *= *([^\r\n]*)/',$cnfFile,$match)) {
+		$host = $match[1];
+	} elseif (preg_match('/\[client\][^\[]*host *= *([^\r\n]*)/',$cnfFile,$match)) {
+		$host = $match[1];
+	} else {
+		$host = 'sql.mit.edu';
+	}
+	if (preg_match('/\[mysql\][^\[]*user *= *([^\r\n]*)/',$cnfFile,$match)) {
+		$user = $match[1];
+	} elseif (preg_match('/\[client\][^\[]*user *= *([^\r\n]*)/',$cnfFile,$match)) {
+		$user = $match[1];
+	} else {
+		$user = $env_user;
+	}
+	if (preg_match('/\[mysql\][^\[]*password *= *([^\r\n]*)/',$cnfFile,$match)) {
+		$password = $match[1];
+	} elseif (preg_match('/\[client\][^\[]*password *= *([^\r\n]*)/',$cnfFile,$match)) {
+		$password = $match[1];
+	} else {
+		$password = 'password';
+	}
+	return array($host,$user,$password);
+}
+}
+
+$cnfinfo = getMyCnfInfo($cnfPath);
+if (is_array($cnfinfo)) {
+	list($h,$u,$p) = $cnfinfo;
+	echo "$h\t$u\t$p";
+	exit;
+}
+
+$sql_status = file_get_contents('https://sql.mit.edu/main/do/batch/status?u=' . urlencode($env_user));
+switch($sql_status) {
+	case 1:
+		$myPassword = `/usr/bin/sql-signup`;
+        file_put_contents($cnfPath, "[mysql]\nhost=$host\nuser=$env_user\npassword=$myPassword\n");
+        $cnfinfo = getMyCnfInfo($cnfPath);
+        if (is_array($cnfinfo)) {
+            list($h,$u,$p) = $cnfinfo;
+    	    echo "$h\t$u\t$p";
+        }
+		break;
+	case 0:
+}
Index: /tags/fc9-eol/locker/sql/bin/get-status
===================================================================
--- /tags/fc9-eol/locker/sql/bin/get-status	(revision 1257)
+++ /tags/fc9-eol/locker/sql/bin/get-status	(revision 1257)
@@ -0,0 +1,6 @@
+#!/bin/sh
+
+status=`wget --no-check-certificate https://sql.mit.edu/main/do/batch/status?u=$USER -q -O-`
+
+echo $status
+exit $status
Index: /tags/fc9-eol/locker/sql/bin/save-password
===================================================================
--- /tags/fc9-eol/locker/sql/bin/save-password	(revision 1257)
+++ /tags/fc9-eol/locker/sql/bin/save-password	(revision 1257)
@@ -0,0 +1,15 @@
+#!/bin/sh
+
+mkdir $lroot/.sql 2>/dev/null
+fs sa $lroot/.sql system:anyuser none
+fs sa $lroot/.sql system:authuser none
+fs sa $lroot/.sql daemon.scripts write
+fs sa $lroot/.sql daemon.sql write
+rm -f $lroot/.sql/my.cnf $lroot/.my.cnf
+
+echo "[mysql]
+host=sql.mit.edu
+user=$sqluser
+password=$sqlpass" > $lroot/.sql/my.cnf
+
+ln -nfs $lroot/.sql/my.cnf $lroot/.my.cnf 2>/dev/null
Index: /tags/fc9-eol/locker/sql/bin/test-password
===================================================================
--- /tags/fc9-eol/locker/sql/bin/test-password	(revision 1257)
+++ /tags/fc9-eol/locker/sql/bin/test-password	(revision 1257)
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+mysql -e "select 1" 2>&1 | grep -i error
Index: /tags/fc9-eol/lvs/debian/config/etc/aliases
===================================================================
--- /tags/fc9-eol/lvs/debian/config/etc/aliases	(revision 1257)
+++ /tags/fc9-eol/lvs/debian/config/etc/aliases	(revision 1257)
@@ -0,0 +1,14 @@
+# /etc/aliases
+mailer-daemon: postmaster
+postmaster: root
+nobody: root
+hostmaster: root
+usenet: root
+news: root
+webmaster: root
+www: root
+ftp: root
+abuse: root
+noc: root
+security: root
+root: rootjoe@gmail.com, quentin@mit.edu, andersk@mit.edu, geofft@mit.edu, mitchb@mit.edu
Index: /tags/fc9-eol/lvs/debian/config/etc/cron.d/restart-inetd
===================================================================
--- /tags/fc9-eol/lvs/debian/config/etc/cron.d/restart-inetd	(revision 1257)
+++ /tags/fc9-eol/lvs/debian/config/etc/cron.d/restart-inetd	(revision 1257)
@@ -0,0 +1,3 @@
+SHELL=/bin/sh
+PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
+*/5 * * * * root /etc/init.d/inetd restart >/dev/null 2>&1
Index: /tags/fc9-eol/lvs/debian/config/etc/ha.d/cib.xml
===================================================================
--- /tags/fc9-eol/lvs/debian/config/etc/ha.d/cib.xml	(revision 1257)
+++ /tags/fc9-eol/lvs/debian/config/etc/ha.d/cib.xml	(revision 1257)
@@ -0,0 +1,66 @@
+<?xml version="1.0" ?>
+<cib admin_epoch="0" epoch="0" num_updates="0">
+	<configuration>
+		<crm_config>
+			<cluster_property_set id="cib-bootstrap-options">
+				<attributes>
+					<nvpair id="cib-bootstrap-options-symmetric_cluster" name="symmetric_cluster" value="true"/>
+					<nvpair id="cib-bootstrap-options-no_quorum_policy" name="no_quorum_policy" value="stop"/>
+					<nvpair id="cib-bootstrap-options-default_resource_stickiness" name="default_resource_stickiness" value="0"/>
+					<nvpair id="cib-bootstrap-options-default_resource_failure_stickiness" name="default_resource_failure_stickiness" value="0"/>
+					<nvpair id="cib-bootstrap-options-stonith_enabled" name="stonith_enabled" value="false"/>
+					<nvpair id="cib-bootstrap-options-stonith_action" name="stonith_action" value="reboot"/>
+					<nvpair id="cib-bootstrap-options-stop_orphan_resources" name="stop_orphan_resources" value="true"/>
+					<nvpair id="cib-bootstrap-options-stop_orphan_actions" name="stop_orphan_actions" value="true"/>
+					<nvpair id="cib-bootstrap-options-remove_after_stop" name="remove_after_stop" value="false"/>
+					<nvpair id="cib-bootstrap-options-short_resource_names" name="short_resource_names" value="true"/>
+					<nvpair id="cib-bootstrap-options-transition_idle_timeout" name="transition_idle_timeout" value="5min"/>
+					<nvpair id="cib-bootstrap-options-default_action_timeout" name="default_action_timeout" value="5s"/>
+					<nvpair id="cib-bootstrap-options-is_managed_default" name="is_managed_default" value="true"/>
+				</attributes>
+			</cluster_property_set>
+		</crm_config>
+		<nodes/>
+		<resources>
+			<group id="scripts_LVS">
+				<primitive class="heartbeat" id="scripts_LVS_ldirectord" provider="heartbeat" type="ldirectord">
+				</primitive>
+				<primitive class="ocf" id="ip_scripts.mit.edu" provider="heartbeat" type="IPaddr2">
+					<operations>
+						<op id="ip_scripts.mit.edu_mon" interval="5s" name="monitor" timeout="5s"/>
+					</operations>
+					<instance_attributes id="ip_scripts.mit.edu_inst_attr">
+						<attributes>
+							<nvpair id="ip_scripts.mit.edu_attr_0" name="ip" value="18.181.0.46"/>
+							<nvpair id="ip_scripts.mit.edu_attr_1" name="netmask" value="16"/>
+							<nvpair id="ip_scripts.mit.edu_attr_2" name="nic" value="eth0"/>
+							<nvpair id="ip_scripts.mit.edu_attr_3" name="broadcast" value="18.181.255.255"/>
+						</attributes>
+					</instance_attributes>
+				</primitive>
+				<primitive class="ocf" id="ip_scripts-cert.mit.edu" provider="heartbeat" type="IPaddr2">
+					<operations>
+						<op id="ip_scripts-cert.mit.edu_mon" interval="5s" name="monitor" timeout="5s"/>
+					</operations>
+					<instance_attributes id="ip_scripts-cert.mit.edu_inst_attr">
+						<attributes>
+							<nvpair id="ip_scripts-cert.mit.edu_attr_0" name="ip" value="18.181.0.50"/>
+							<nvpair id="ip_scripts-cert.mit.edu_attr_1" name="netmask" value="16"/>
+							<nvpair id="ip_scripts-cert.mit.edu_attr_2" name="nic" value="eth0"/>
+							<nvpair id="ip_scripts-cert.mit.edu_attr_3" name="broadcast" value="18.181.255.255"/>
+						</attributes>
+					</instance_attributes>
+				</primitive>
+			</group>
+		</resources>
+		<constraints>
+			<rsc_location id="rsc_location_scripts_LVS" rsc="scripts_LVS">
+				<rule id="prefered_location_group_1" score="100">
+					<expression attribute="#uname" id="prefered_location_group_1_expr" operation="eq" value="rack-forward"/>
+				</rule>
+			</rsc_location>
+		</constraints>
+	</configuration>
+	<status/>
+</cib>
+
Index: /tags/fc9-eol/lvs/debian/config/etc/ha.d/ha.cf
===================================================================
--- /tags/fc9-eol/lvs/debian/config/etc/ha.d/ha.cf	(revision 1257)
+++ /tags/fc9-eol/lvs/debian/config/etc/ha.d/ha.cf	(revision 1257)
@@ -0,0 +1,26 @@
+logfacility        local0
+debug 0
+use_logd on
+mcast eth0 224.0.0.181 694 1 0
+#bcast        eth0                # Linux
+#ucast	eth0	18.181.0.55
+#ucast	eth0	18.181.0.117
+deadtime 10
+initdead 60
+keepalive 1
+warntime 3
+
+auto_failback off
+node        rack-forward
+node        rack-backward
+ping	18.181.0.1
+crm on
+
+apiauth default gid=haclient uid=hacluster
+respawn root /usr/lib/heartbeat/mgmtd -v
+
+#apiauth cibmon uid=hacluster
+#respawn hacluster /usr/lib/heartbeat/cibmon -d
+
+#respawn hacluster /usr/lib/heartbeat/ipfail
+#apiauth ipfail gid=haclient uid=hacluster
Index: /tags/fc9-eol/lvs/debian/config/etc/ha.d/haresources
===================================================================
--- /tags/fc9-eol/lvs/debian/config/etc/ha.d/haresources	(revision 1257)
+++ /tags/fc9-eol/lvs/debian/config/etc/ha.d/haresources	(revision 1257)
@@ -0,0 +1,5 @@
+not-forward        \
+        ldirectord \
+        LVSSyncDaemonSwap::master \
+        IPaddr2::18.181.0.46/16/eth0/18.181.255.255 \
+        IPaddr2::18.181.0.50/16/eth0/18.181.255.255
Index: /tags/fc9-eol/lvs/debian/config/etc/ha.d/ldirectord-finger.sh
===================================================================
--- /tags/fc9-eol/lvs/debian/config/etc/ha.d/ldirectord-finger.sh	(revision 1257)
+++ /tags/fc9-eol/lvs/debian/config/etc/ha.d/ldirectord-finger.sh	(revision 1257)
@@ -0,0 +1,10 @@
+#!/bin/bash
+
+ulimit -v 10240
+
+read line
+line=${line%[:blank:]}
+line=${line%
+}
+
+/sbin/ipvsadm
Index: /tags/fc9-eol/lvs/debian/config/etc/ha.d/ldirectord-http.sh
===================================================================
--- /tags/fc9-eol/lvs/debian/config/etc/ha.d/ldirectord-http.sh	(revision 1257)
+++ /tags/fc9-eol/lvs/debian/config/etc/ha.d/ldirectord-http.sh	(revision 1257)
@@ -0,0 +1,24 @@
+#!/bin/bash
+
+ulimit -v 10240
+
+# Read and ignore the request
+line=foo
+while [ -n "$line" ]; do
+    read line
+    line=${line%[:blank:]}
+    line=${line%
+}
+done
+
+# Generate an HTTP reply
+
+echo "HTTP/1.0 200 OK
+"
+echo "Content-type: text/html
+"
+echo "
+"
+echo "<html><head><title>scripts.mit.edu server status</title></head><body><h1>scripts.mit.edu server status</h1><p>The following table shows a list of the servers that are currently handling web requests for scripts.mit.edu:</p><table>"
+/sbin/ipvsadm -L -f 2 | sed 's/:0//; s/:Port//' | awk 'BEGIN { OFS="</td><td>" } /->/ { print "<tr><td>" $2, $4, $5, $6 "</td></tr>"}'
+echo "</table></body></html>"
Index: /tags/fc9-eol/lvs/debian/config/etc/ha.d/ldirectord.cf
===================================================================
--- /tags/fc9-eol/lvs/debian/config/etc/ha.d/ldirectord.cf	(revision 1257)
+++ /tags/fc9-eol/lvs/debian/config/etc/ha.d/ldirectord.cf	(revision 1257)
@@ -0,0 +1,44 @@
+checktimeout=5
+checkinterval=1
+autoreload=yes
+logfile="/var/log/ldirectord.log"
+quiescent=no
+
+# iptables rules caused SMTP to use FWM 3
+virtual=3
+        real=18.181.0.53:25 gate 1024
+        real=18.181.0.57:25 gate 1024
+        real=18.181.0.167:25 gate 1024
+        service=smtp
+        scheduler=wlc
+        persistent=600
+        protocol=fwm
+        checktype=negotiate
+	checkport=25
+
+# Apache (80, 443, and 444) uses FWM 2
+virtual=2
+	real=18.181.0.53 gate 1024
+	real=18.181.0.57 gate 1024
+	real=18.181.0.167 gate 1024
+	fallback=127.0.0.1 gate
+	service=http
+	request="heartbeat/http"
+	virtualhost="scripts.mit.edu"
+	receive="1"
+	checktype=negotiate
+	checkport=80
+	scheduler=wlc
+	persistent=600
+	protocol=fwm
+
+# Everything else uses FWM 1 and gets sent only to the primary
+virtual=1
+        real=18.181.0.53 gate "heartbeat/services", "1"
+        real=18.181.0.57 gate "heartbeat/services", "2"
+        real=18.181.0.167 gate "heartbeat/services", "3"
+	service=http
+        scheduler=wrr
+        protocol=fwm
+        checktype=negotiate
+	checkport=80
Index: /tags/fc9-eol/lvs/debian/config/etc/inetd.conf
===================================================================
--- /tags/fc9-eol/lvs/debian/config/etc/inetd.conf	(revision 1257)
+++ /tags/fc9-eol/lvs/debian/config/etc/inetd.conf	(revision 1257)
@@ -0,0 +1,42 @@
+# /etc/inetd.conf:  see inetd(8) for further informations.
+#
+# Internet superserver configuration database
+#
+#
+# Lines starting with "#:LABEL:" or "#<off>#" should not
+# be changed unless you know what you are doing!
+#
+# If you want to disable an entry so it isn't touched during
+# package updates just comment it out with a single '#' character.
+#
+# Packages should modify this file by using update-inetd(8)
+#
+# <service_name> <sock_type> <proto> <flags> <user> <server_path> <args>
+#
+#:INTERNAL: Internal services
+#discard		stream	tcp	nowait	root	internal
+#discard		dgram	udp	wait	root	internal
+#daytime		stream	tcp	nowait	root	internal
+#time		stream	tcp	nowait	root	internal
+
+#:STANDARD: These are standard services.
+
+#:BSD: Shell, login, exec and talk are BSD protocols.
+
+#:MAIL: Mail, news and uucp services.
+
+#:INFO: Info services
+ident		stream	tcp	wait	identd	/usr/sbin/identd	identd
+
+#:BOOT: TFTP service is provided primarily for booting.  Most sites
+#       run this only on machines acting as "boot servers."
+
+#:RPC: RPC based services
+
+#:HAM-RADIO: amateur-radio services
+
+#:OTHER: Other services
+
+# Make it easy to remotely query these LVS servers
+79	stream	tcp	nowait	root	/etc/heartbeat/ldirectord-finger.sh
+78	stream	tcp	nowait	root	/etc/heartbeat/ldirectord-http.sh
Index: /tags/fc9-eol/lvs/debian/config/etc/lighttpd/lighttpd.conf
===================================================================
--- /tags/fc9-eol/lvs/debian/config/etc/lighttpd/lighttpd.conf	(revision 1257)
+++ /tags/fc9-eol/lvs/debian/config/etc/lighttpd/lighttpd.conf	(revision 1257)
@@ -0,0 +1,47 @@
+server.modules              = (
+	"mod_alias",
+	"mod_magnet",
+)
+
+server.max-connections=4096
+server.max-fds=9182
+server.max-read-idle=5
+
+## a static document-root, for virtual-hosting take look at the
+## server.virtual-* options
+server.document-root       = "/var/www/"
+
+## where to send error-messages to
+server.errorlog            = "/var/log/lighttpd/error.log"
+
+### files to check for if .../ is requested
+#index-file.names           = ( "index.php", "index.html",
+#                               "index.htm", "default.htm",
+#                               "index.lighttpd.html" )
+
+## bind to port (default: 80)
+server.port               = 80
+
+## bind to localhost only (default: all interfaces)
+## server.bind                = "localhost"
+
+## to help the rc.scripts
+server.pid-file            = "/var/run/lighttpd.pid"
+
+## change uid to <uid> (default: don't care)
+server.username            = "www-data"
+
+## change uid to <uid> (default: don't care)
+server.groupname           = "www-data"
+
+alias.url = (
+	"/__scripts/maint/" => "/etc/lighttpd/scripts-maint/"
+)
+
+$HTTP["url"] !~ "^/__scripts/maint" {
+	magnet.attract-physical-path-to = ( "/etc/lighttpd/scripts-maint.lua" )
+}
+
+#### external configuration files
+## mimetype mapping
+include_shell "/usr/share/lighttpd/create-mime.assign.pl"
Index: /tags/fc9-eol/lvs/debian/config/etc/lighttpd/scripts-maint.lua
===================================================================
--- /tags/fc9-eol/lvs/debian/config/etc/lighttpd/scripts-maint.lua	(revision 1257)
+++ /tags/fc9-eol/lvs/debian/config/etc/lighttpd/scripts-maint.lua	(revision 1257)
@@ -0,0 +1,6 @@
+-- lighty.header["X-Maintenance-Mode"] = "1" 
+-- uncomment the above if you want to add the header
+lighty.content = { { filename = "/etc/lighttpd/scripts-maint/index.html" } }
+lighty.header["Content-Type"] = "text/html"
+return 503
+-- or return 200 if you want
Index: /tags/fc9-eol/lvs/debian/config/etc/lighttpd/scripts-maint/index.html
===================================================================
--- /tags/fc9-eol/lvs/debian/config/etc/lighttpd/scripts-maint/index.html	(revision 1257)
+++ /tags/fc9-eol/lvs/debian/config/etc/lighttpd/scripts-maint/index.html	(revision 1257)
@@ -0,0 +1,99 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="content-type" content="text/html; charset=utf-8" />
+<link rel="stylesheet" href="/__scripts/maint/style.css" type="text/css" />
+<link rel="alternate" type="application/rss+xml" title="scripts.mit.edu:
+Service unavailable" href="http://scripts.mit.edu/rss/" />
+<title>scripts.mit.edu: Service unavailable</title>
+</head>
+<body>
+<div id="farouter">
+    <div id="outer">
+            <div id="masthead">
+
+                <h1 id="header"><a rel="home" href="http://scripts.mit.edu/">scripts.mit.edu</a></h1>
+                <h2 id="tagline">MIT SIPB Script Services for Athena</h2>
+            </div>
+            <div id="hmenu">
+                <div id="hnav">
+                    <ul id="navlist">
+                        <li><a href="http://scripts.mit.edu/">home</a></li>
+
+    <li><a href="http://scripts.mit.edu/start/">quick-start</a></li>
+                        <li><a href="http://scripts.mit.edu/web/">web scripts</a></li>
+                        <li><a href="http://scripts.mit.edu/mysql/">mysql databases</a></li>
+                        <li><a href="http://scripts.mit.edu/mail/">mail scripts</a></li>
+                        <li><a href="http://scripts.mit.edu/cron/">cron</a></li>
+                        <li><a href="http://scripts.mit.edu/news/">blog</a></li>
+    <li><a href="http://scripts.mit.edu/faq/">faq</a></li>
+
+                    </ul>
+                </div>
+            </div>
+        <div id="rap">
+            <div id="main">
+                <div id="content">
+
+<h3 class="storytitle"><a>Service unavailable</a></h3>
+    <p>The scripts.mit.edu service is currently unavailable. The service maintainers are working on the problem and expect to have it resolved soon.</p>
+    <p>If this message does not go away after an hour or more, contact <a href="mailto:scripts@mit.edu">scripts@mit.edu</a> for assistance.</p>
+<div class="feedback">
+</div>
+<div align="center"><img src="/__scripts/maint/1.gif" style="height:1px;width:400px" class="divider" alt="" /></div>
+
+
+
+<p>
+
+
+</p>
+
+
+
+                </div>
+                <div id="menu">
+
+                    <div id="nav">
+
+
+
+
+
+
+
+                        <h2>Contact</h2>
+                        <ul><li><a href="mailto:scripts@mit.edu">scripts@mit.edu</a></li>
+                        </ul>
+
+Feel free to contact us with any questions, comments, or suggestions.
+                        <h2>Search</h2>
+                        <ul>
+                            <li><form action="http://scripts.mit.edu/" method="get"><p>Search<br /><input type="text" name="q" value="" size="15" /></p></form></li>
+                        </ul>
+                        <h2>Feeds</h2>
+                        <ul>
+                            <li><a href="http://scripts.mit.edu/rss/?section=special" title="RSS Feed">RSS</a></li> <li><a href="http://scripts.mit.edu/atom/?section=special" title="Atom Feed">Atom</a></li>
+
+                        </ul>
+
+<a class="nobutt" href="http://scripts.mit.edu/faq/45/"><img src="/__scripts/maint/powered_by-trans.gif" alt="Powered by scripts" /></a>
+
+                    </div>
+                </div>
+		    <div id="clearer">&nbsp;</div>
+            </div>
+        </div>
+        <div id="foot">&nbsp;</div>
+
+<!--
+        <div id="footer">
+            <p class="credit">Originally "Blue Horizon" by <a href="http://kaushalsheth.com">Kaushal Sheth</a>. Mangled for scripts.mit.edu by <a href="/~presbrey/">Joe Presbrey</a><br />
+            </p>
+        </div>
+-->
+    </div>
+</div>
+</body>
+</html>
Index: /tags/fc9-eol/lvs/debian/config/etc/lighttpd/scripts-maint/style.css
===================================================================
--- /tags/fc9-eol/lvs/debian/config/etc/lighttpd/scripts-maint/style.css	(revision 1257)
+++ /tags/fc9-eol/lvs/debian/config/etc/lighttpd/scripts-maint/style.css	(revision 1257)
@@ -0,0 +1,325 @@
+/* -------  Layout CSS (Centered Fixed Width) ------ */
+
+body {
+  font-family: 'Lucida Grande', 'Lucida Sans Unicode', Verdana, sans-serif;
+  font-size: 80%;
+  margin: 0;
+  padding: 0;
+  text-align: center; /* IE 5.5 hack */
+}
+#farouter {
+	/*background: #ffffff;*/
+	width: 60em;
+	margin: 20px auto 20px auto;
+	text-align: left; /* IE 5.5 hack part II */
+}
+#outer {}
+#rap {
+	border: 1px solid #3A291F;
+}
+#masthead {
+            background: white;
+	border: 1px solid #3A291F;
+	letter-spacing: 0.2em;
+	padding: 0 10px 10px 60px;
+	font: normal 100% 'Lucida Grande', 'Lucida Sans Unicode', Verdana, sans-serif;
+	min-height: 100px;
+}
+#main { padding-left:3em; }
+#content { float: left; width: 40em; margin-top: 1em; }
+#content_wide { padding-right:35px; }
+#content_home { float: left; width: 490px; padding-top: 0px; }
+#menu { float: right; width: 14em; margin-right: 10px; border-left: 1px dashed #2050A0; }
+#nav { padding-left: 10px; }
+#logo { padding-top: 25px; padding-left: 12px; }
+#hmenu { margin: 0; padding: 0; }
+#hnav { margin: 0; padding: 0; }
+#clearer { clear: both; margin: 0; padding: 0; }
+#footer { margin: 8px 8px 8px 8px; }
+
+/* ----------------- Color CSS ------------------------ */
+
+body { background: #2050A0; color:#333; }
+#rap { background: #ffffff; }
+#masthead { background-image: url('/__scripts/maint/sb.gif'); background-repeat: no-repeat; }
+#footer { background: #2050A0; }
+#hnav { background: #2050A0; }
+a { color: #2050A0; text-decoration: none; }
+a:visited { color: #2050A0; text-decoration: none; }
+a:hover { color: #2050A0; text-decoration: underline; }
+acronym, abbr { border-bottom: #333; }
+h2 { color: #17397A; font-size: 24px; font-weight: normal; }
+h3 a { color: #17397A; }
+h3 a:hover { color: #17397A; }
+h3 a:visited { color: #17397A; }
+.meta { color: #1F6710 }
+.meta a { color: #001700; }
+.feedback a { color: #001700; }
+
+/* -------- Core CSS --------- */
+
+
+a { text-decoration: none; font-weight:bold; }
+a img { border: none; }
+acronym, abbr { border-bottom: 1px dashed; }
+acronym, abbr, span.caps { cursor: help; font-size: 90%; letter-spacing: .07em; }
+blockquote { margin-left: 1.5em; }
+cite { font-size: 90%; font-style: normal; }
+#header a:hover { text-decoration: underline; }
+h1 { margin: 0; padding: 20px; text-align: right; }
+#hidden {display:none;}
+
+h2 {
+	font: 100% 'Lucida Grande', 'Lucida Sans Unicode', Verdana, sans-serif;
+	letter-spacing: 0.2em;
+	margin: 0 20px 20px 0;
+	padding: 20px 0 0 0;
+}
+h2#tagline {
+	margin-right: 25px;
+	padding:0;
+	text-align: right;
+/*	color: #F2EEEC; */
+	border: 0px none;
+	margin-left:0;
+	margin-top:0;
+	margin-bottom:0
+}
+
+.post h2 {
+	font: 100% 'Lucida Grande', 'Lucida Sans Unicode', Verdana, sans-serif;
+	letter-spacing: 0.2em;
+	margin: 0 20px 0 30px;
+	padding: 20px 0 30px 0;
+}
+h3 {
+	font: 18px 'Lucida Grande', 'Lucida Sans Unicode', Verdana, sans-serif;
+	margin-left: 0;
+	margin-top: 20px;
+	color: #17397A;
+        border-bottom: solid thin #17397A;
+}
+h3#comments { margin-left: 20px; }
+h3#respond { margin-left: 20px; }
+h4 {
+	font-size: 16px;
+	font-weight: normal;
+}
+ol#comments li p { font-size: 100%; }
+img {
+	margin: 10px;
+	padding: 10px;
+	border: 0px solid #2F700F;
+}
+p, .feedback {
+	font: 100%/175% 'Lucida Grande', 'Lucida Sans Unicode', Verdana, sans-serif;
+}
+p {}
+.textarea { width:200px; margin:0; }
+#archvies {
+	font: 150% normal 'Lucida Grande', 'Lucida Sans Unicode', Verdana, sans-serif;
+}
+
+/* ------------------------- Classes used by the_meta() --------------------- */
+
+ul.post-meta {
+	list-style: none;
+}
+
+ul.post-meta span.post-meta-key {
+	font-weight: bold;
+}
+
+.credit {
+  color: #fff;
+  font-size: 90%;
+  margin: 10px 0 0 0;
+  padding: 3px;
+  text-align: center;
+}
+
+.credit a, .credit a:hover { color: #fff; text-decoration: none; }
+.feedback { text-align: right; clear: both; margin-right: 30px; font-size: 90% }
+.meta { font-size: .95em; }
+.meta li, ul.post-meta li { display: inline; }
+.meta ul { display: inline; list-style: none;margin: 0; padding: 0; }
+.meta, .meta a { font-weight: normal; letter-spacing: 0; }
+.post { margin: 35px 35px 20px 0; }
+.entrytext {margin-left: 30px; }
+.storytitle { margin-top: 10px; margin-bottom: 2px; }
+.storytitle a { text-decoration: none; }
+.storycontent { margin-bottom: 5px; border-bottom: 1px solid #2050A0; }
+#commentform { margin-left: 20px; }
+#commentform  #comment { width:450px; }
+#commentform #author, #commentform #email, #commentform #url, #commentform textarea {
+ 	background: #fff; padding: .2em;
+}
+#commentform textarea { width:100%; }
+#commentlist li { border: 2px solid #2050A0; margin-bottom: 20px; padding-left: 20px; }
+#commentlist li ul { border-left: 1px solid #ddd; font-size: 110%; list-style-type: none; }
+
+/* ----------  All menu styling except #menu itself (in layout above) ------- */
+
+#nav form {
+	margin: 0 0 0 13px;
+}
+
+#nav input#s {
+	width: 80%;
+	background: #eee;
+	border: 1px solid #999;
+	color: #000;
+}
+
+#nav ul li h2 {
+	font-family: 'Lucida Grande', 'Lucida Sans Unicode', Verdana, sans-serif;
+	font-weight: normal;
+	letter-spacing: 0.1em;
+	border: 0px none;
+	text-align: left;
+	padding-left:0;
+	margin-left: 0
+}
+
+#nav ul ul ul.children {
+	font-size: 100%;
+	padding-left: 4px;
+}
+
+/*#nav { width: 170px; }*/
+
+#nav ul {
+	margin-left: 0;
+	padding-left: 0;
+	padding-right: 4px;
+	list-style-type: none;
+	font-family: 'Lucida Grande', 'Lucida Sans Unicode', Verdana, sans-serif;
+	font-size: 95%;
+}
+
+#nav li {
+	display: block;
+	padding-left: 1.3em;
+	background-color: #FFF;
+	background-image: url('images/icon.gif');
+	background-repeat: no-repeat;
+	background-position: 0 55%;
+	border-bottom: 1px dotted #2050A0;
+	padding-right:3px; padding-top:3px; padding-bottom:3px;
+}
+
+#nav a.nobutt {
+	background-image: none;
+	border-bottom: none;
+}
+
+#nav a.nobutt:hover {
+	background-image: none;
+	border-bottom: none;
+}
+
+#nav a:link, #navlist a:visited {
+	text-decoration: none;
+}
+
+#nav li:hover {
+	background-image: url('images/icon2.gif'); 
+	/*color: #000*/
+}
+
+#themeswitcher {
+	font-size: 8px;
+}
+
+/*------------- hnav------------*/
+
+#hnav ul {
+	text-align: center;
+        margin: 0;
+        padding: 0;
+	background-color: #2050A0;
+	color: #F2EEEC;
+	width: 100%;
+	font-family: 'Lucida Grande', 'Lucida Sans Unicode', Verdana, sans-serif;
+	/* fixes Firefox 0.9.3 */
+}
+
+#hnav ul li {
+	display: inline;
+              margin: 0; padding: 0;
+              line-height: 2.5em;
+}
+
+#hnav ul li a {
+                padding: .5em .8em;
+	color: #F2EEEC;
+	text-decoration: none;
+	border-left: 1px solid #F2EEEC;
+}
+#hnav ul li:first-child a {
+                            border-left: none;
+                            }
+#hnav ul li a:hover {
+	background: #F2EEEC;
+	color: #3A291F;
+}
+
+#hnav #active { border-left: 1px solid #F2EEEC; }
+
+/*------------- added ------------*/
+
+.gravatar {
+	float:left;
+	padding: 3px;
+	margin-right: 5px;
+	margin-bottom: 5px;
+	border: 1px solid #2F700F;
+}	
+
+#commentbox {
+	background: #F2EEEC;
+	border: 1px solid #2F700F;
+	padding: 5px;
+	margin-bottom: 15px;
+}
+
+.commentby {
+	font-size: 14px;
+	text-transform: uppercase;
+}
+.commentinfo {
+	font-size: 10px;
+	margin-top: -10px;
+	border-bottom: 1px soild #1F6710;
+}
+
+.commentid {
+	float: right;
+	font-size: 24px;
+	font-style: italic;
+	padding-left: 10px;
+	padding-right: 5px;
+	padding-top: 5px;
+	padding-bottom: 5px;
+	color: #2050A0;
+}
+
+.commentid a {
+	color: #2050A0;
+	text-decoration: none;
+}
+
+.post ul li {
+	padding: 0px;
+	font-weight: normal;
+	list-style: url('images/icon.gif');
+	line-height: 1.5em;
+}
+
+.post ul li:hover {
+	padding: 0px;
+	font-weight: normal;
+	list-style: url('images/icon2.gif');
+	line-height: 1.5em;
+}
+
Index: /tags/fc9-eol/lvs/debian/config/etc/logd.cf
===================================================================
--- /tags/fc9-eol/lvs/debian/config/etc/logd.cf	(revision 1257)
+++ /tags/fc9-eol/lvs/debian/config/etc/logd.cf	(revision 1257)
@@ -0,0 +1,43 @@
+#	File to write debug messages to
+#	Default: /var/log/ha-debug
+debugfile /var/log/ha-debug
+
+#
+#
+# 	File to write other messages to
+#	Default: /var/log/ha-log
+logfile	/var/log/ha-log
+
+#
+#
+#	Facility to use for syslog()/logger 
+#	Default: local7
+logfacility	local7
+
+
+#	Entity to be shown at beginning of a message
+# 	for logging daemon
+# 	Default: "logd"
+entity logd
+
+
+#	Do we register to apphbd
+#	Default: no
+#useapphbd no
+
+#	There are two processes running for logging daemon
+#  		1. parent process which reads messages from all client channels 
+#  		and writes them to the child process 
+#  
+#  		2. the child process which reads messages from the parent process through IPC
+#  		and writes them to syslog/disk
+
+
+#	set the send queue length from the parent process to the child process
+#
+#sendqlen 256 
+
+#	set the recv queue length in child process
+#
+#recvqlen 256
+
Index: /tags/fc9-eol/lvs/debian/config/etc/modules
===================================================================
--- /tags/fc9-eol/lvs/debian/config/etc/modules	(revision 1257)
+++ /tags/fc9-eol/lvs/debian/config/etc/modules	(revision 1257)
@@ -0,0 +1,18 @@
+# /etc/modules: kernel modules to load at boot time.
+#
+# This file contains the names of kernel modules that should be loaded
+# at boot time, one per line. Lines beginning with "#" are ignored.
+
+loop
+ip_vs_dh
+ip_vs_ftp
+ip_vs
+ip_vs_lblc
+ip_vs_lblcr
+ip_vs_lc
+ip_vs_nq
+ip_vs_rr
+ip_vs_sed
+ip_vs_sh
+ip_vs_wlc
+ip_vs_wrr
Index: /tags/fc9-eol/lvs/debian/config/etc/munin/munin-node.conf
===================================================================
--- /tags/fc9-eol/lvs/debian/config/etc/munin/munin-node.conf	(revision 1257)
+++ /tags/fc9-eol/lvs/debian/config/etc/munin/munin-node.conf	(revision 1257)
@@ -0,0 +1,38 @@
+#
+# Example config-file for munin-node
+#
+
+log_level 4
+log_file /var/log/munin/munin-node.log
+port 4949
+pid_file /var/run/munin/munin-node.pid
+background 1
+setseid 1
+
+# Which port to bind to;
+host *
+user root
+group root
+setsid yes
+
+# Regexps for files to ignore
+
+ignore_file ~$
+ignore_file \.bak$
+ignore_file %$
+ignore_file \.dpkg-(tmp|new|old|dist)$
+ignore_file \.rpm(save|new)$
+
+# Set this if the client doesn't report the correct hostname when
+# telnetting to localhost, port 4949
+#
+#host_name localhost.localdomain
+
+# A list of addresses that are allowed to connect.  This must be a
+# regular expression, due to brain damage in Net::Server, which
+# doesn't understand CIDR-style network notation.  You may repeat
+# the allow line as many times as you'd like
+
+allow ^127\.0\.0\.1$
+allow ^18\.187\.1\.128$
+allow ^18\.181\.0\.65$
Index: /tags/fc9-eol/lvs/debian/config/etc/munin/plugin-conf.d/hddtemp_smartctl
===================================================================
--- /tags/fc9-eol/lvs/debian/config/etc/munin/plugin-conf.d/hddtemp_smartctl	(revision 1257)
+++ /tags/fc9-eol/lvs/debian/config/etc/munin/plugin-conf.d/hddtemp_smartctl	(revision 1257)
@@ -0,0 +1,3 @@
+[hddtemp_smartctl]
+env.drives hda hdb
+
Index: /tags/fc9-eol/lvs/debian/config/etc/munin/plugins/cps_1_0
===================================================================
--- /tags/fc9-eol/lvs/debian/config/etc/munin/plugins/cps_1_0	(revision 1257)
+++ /tags/fc9-eol/lvs/debian/config/etc/munin/plugins/cps_1_0	(revision 1257)
@@ -0,0 +1,268 @@
+#!/usr/bin/perl
+#
+# Plugin to monitor connections per second, for LVS loadbalancers.
+#
+# Magic name:
+#
+# 	cps_<port>
+# 	cps_<vip>_<port>
+#
+# Examples:
+#
+# 	cps_smtp
+# 	cps_mail.foo.boo_smtp
+# 	cps_pop3
+# 	cps_www.foo.boo_www
+# 	cps_vvv.foo.boo_www
+#
+# Parameters understood:
+#
+# 	config   (required)
+# 	autoconf (optional - used by munin-config)
+# 	suggest  (optional - used by munin-config)
+#
+# $Log$
+# Revision 1.8  2004/12/10 18:55:14  jimmyo
+# Removed hardcoded host_name in linux/cps_.
+#
+# Revision 1.7  2004/12/10 18:51:44  jimmyo
+# linux/apt* has been forced to LANG=C, to get predictable output.
+#
+# Revision 1.6  2004/12/10 11:48:42  jimmyo
+# linux/cps_ plugin now groks high numbers.
+#
+# Revision 1.5  2004/12/10 10:47:49  jimmyo
+# Change name from ${scale} to ${graph_period}, to be more consistent.
+#
+# Revision 1.4  2004/12/09 22:12:56  jimmyo
+# Added "graph_period" option, to make "graph_sums" usable.
+#
+# Revision 1.3  2004/11/21 00:16:57  jimmyo
+# Changed a lot of plugins so they use DERIVE instead of COUNTER.
+#
+# Revision 1.2  2004/05/20 19:02:37  jimmyo
+# Set categories on a bunch of plugins
+#
+# Revision 1.1  2004/01/02 18:50:01  jimmyo
+# Renamed occurrances of lrrd -> munin
+#
+# Revision 1.1.1.1  2004/01/02 15:18:07  jimmyo
+# Import of LRRD CVS tree after renaming to Munin
+#
+# Revision 1.4  2003/11/07 17:43:16  jimmyo
+# Cleanups and log entries
+#
+#
+#
+# Magic markers - optional - used by installation scripts and munin-config:
+#
+#%# family=manual
+#%# capabilities=autoconf suggest
+#
+
+use strict;
+
+if ( defined $ARGV[0] and $ARGV[0] eq "autoconf" )
+{
+	&autoconf ();
+}
+if ( defined $ARGV[0] and $ARGV[0] eq "suggest" )
+{
+	my $sipvs;
+	$sipvs = &ipvs (".", ".", $sipvs);
+	exit 0 if $sipvs == undef;
+	&suggest ($sipvs);
+}
+
+unless ($0 =~ /cps(?:_([^_]+)|)_(.+)\s*$/)
+{
+	die "Could not parse name $0.\n";
+}
+my $vip  = $1;
+my $port = $2;
+my $ipvs;
+
+#print "Name: $0\nPort: $port\nVip : $vip\n";
+
+# Read ipvsadm-output
+
+$ipvs = &ipvs ($vip, $port, $ipvs);
+
+if ( defined $ARGV[0] and $ARGV[0] eq "dump" )
+{
+	use Data::Dumper;
+	print Dumper($ipvs);
+}
+
+if ( defined $ARGV[0] and $ARGV[0] eq "config" )
+{
+        &config ($vip, $port, $ipvs);
+}
+
+$vip = $vip || "";
+if (exists ($ipvs->{$vip}) and exists ($ipvs->{$vip}->{$port}))
+{
+	foreach my $host (sort keys %{$ipvs->{$vip}->{$port}})
+	{
+		(my $fname = $host) =~ s/[.-]/_/g;
+		print "$fname.value ", $ipvs->{$vip}->{$port}->{$host}, "\n";;
+	}
+}
+else
+{
+	foreach my $vip (sort keys %{$ipvs})
+	{
+		foreach my $host (sort keys %{$ipvs->{$vip}->{$port}})
+		{
+			(my $fname = ($vip . "-" . $host)) =~ s/[.-]/_/g;
+			print "$fname.value ", $ipvs->{$vip}->{$port}->{$host}, "\n";;
+		}
+	}
+}
+
+sub autoconf
+{
+	system ("/sbin/ipvsadm -L --stats >/dev/null 2>/dev/null");
+
+	if ($? == 0)
+	{
+		print "yes\n";
+		exit 0;
+	}
+	elsif (($?>>8) == 2)
+	{
+		print "no (permission denied)\n";
+		exit 1;
+	}
+	elsif ($? == 127)
+	{
+		print "no (ipvsadm not found)\n";
+		exit 1;
+	}
+	else
+	{
+		print "no\n";
+		exit 1;
+	}
+}
+sub suggest
+{
+	my $ipvs = shift;
+	exit 0 unless $ipvs;
+
+	foreach my $vip (sort keys %{$ipvs})
+	{
+		foreach my $port (sort keys %{$ipvs->{$vip}})
+		{
+			print "cps_${vip}_$port\n";
+		}
+	}
+	exit 0;
+}
+
+sub config
+{
+	my $vip  = shift;
+	my $port = shift;
+	my $ipvs = shift;
+
+	print "graph_title Loadbalanced ",($vip?$vip:"*"),"->",$port," connections\n";
+	print "graph_args -l 0\n";
+	print "graph_total total\n";
+	print "graph_vlabel connections / \${graph_period}\n";
+	print "graph_category network\n";
+	my $first=1;
+	$vip = $vip || "";
+	if (exists ($ipvs->{$vip}) and exists ($ipvs->{$vip}->{$port}))
+	{
+		foreach my $host (sort keys %{$ipvs->{$vip}->{$port}})
+		{
+			(my $fname = $host) =~ s/[.-]/_/g;
+			if ( $first == 1 )
+			{
+				print "$fname.draw AREA\n";
+				$first=0
+			}
+			else
+			{
+				print "$fname.draw STACK\n";
+			}
+			print "$fname.type DERIVE\n";
+			$host =~ s/-bak//;
+			print "$fname.label $host\n";
+			print "$fname.max 1000\n";
+			print "$fname.min 0\n";
+		}
+	}
+	else
+	{
+		foreach my $vip (reverse sort keys %{$ipvs})
+		{
+			foreach my $host (sort keys %{$ipvs->{$vip}->{$port}})
+			{
+				(my $fname = ($vip . "-" . $host)) =~ s/[.-]/_/g;
+				if ( $first == 1 )
+				{
+					print "$fname.draw AREA\n";
+					$first=0
+				}
+				else
+				{
+					print "$fname.draw STACK\n";
+				}
+				print "$fname.type DERIVE\n";
+				$host =~ s/-bak//;
+				my $label = "$vip -> $host";
+				$label =~ s/\.MIT\.EDU//g;
+				print "$fname.label $label\n";
+				print "$fname.max 1000\n";
+				print "$fname.min 0\n";
+			}
+		}
+	}
+	exit 0;
+}
+
+sub ipvs
+{
+	my $vip  = shift;
+	my $port = shift;
+	my $ipvs = shift;
+	open (IPVS, "/sbin/ipvsadm -L --stats 2>/dev/null|") or return undef;
+	my $cvip  = "";
+	my $cport = "";
+	while (<IPVS>)
+	{
+		next if /^IP Virtual Server/;
+		next if /^Prot\s+LocalAddress/;
+		if (/^(\w+)\s+([\w\.-]+):([\w\d]+)\s+(\d+)[KMG]?\s+/)
+		{
+			$cvip  = $2;
+			$cport = $3;
+		}
+		elsif (/^FWM\s+([\d]+)\s/)
+		{
+		    $cvip = $1;
+		    $cport = 0;
+		}
+		elsif (/^\s+->\s+([^:]+):(\S+)\s+(\d+)G\s+/)
+		{
+			$ipvs->{$cvip}->{$cport}->{$1} += ($3*1000000000);
+		}
+		elsif (/^\s+->\s+([^:]+):(\S+)\s+(\d+)M\s+/)
+		{
+			$ipvs->{$cvip}->{$cport}->{$1} += ($3*1000000);
+		}
+		elsif (/^\s+->\s+([^:]+):(\S+)\s+(\d+)K\s+/)
+		{
+			$ipvs->{$cvip}->{$cport}->{$1} += ($3*1000);
+		}
+		elsif (/^\s+->\s+([^:]+):(\S+)\s+(\d+)\s+/)
+		{
+			$ipvs->{$cvip}->{$cport}->{$1} += $3;
+		}
+	}
+	close (IPVS) or return undef;
+	return $ipvs;
+}
+# vim:syntax=perl
Index: /tags/fc9-eol/lvs/debian/config/etc/munin/plugins/cps_2_0
===================================================================
--- /tags/fc9-eol/lvs/debian/config/etc/munin/plugins/cps_2_0	(revision 1257)
+++ /tags/fc9-eol/lvs/debian/config/etc/munin/plugins/cps_2_0	(revision 1257)
@@ -0,0 +1,1 @@
+link cps_1_0
Index: /tags/fc9-eol/lvs/debian/config/etc/munin/plugins/cps_3_0
===================================================================
--- /tags/fc9-eol/lvs/debian/config/etc/munin/plugins/cps_3_0	(revision 1257)
+++ /tags/fc9-eol/lvs/debian/config/etc/munin/plugins/cps_3_0	(revision 1257)
@@ -0,0 +1,1 @@
+link cps_1_0
Index: /tags/fc9-eol/lvs/debian/config/etc/nagios/nrpe.cfg
===================================================================
--- /tags/fc9-eol/lvs/debian/config/etc/nagios/nrpe.cfg	(revision 1257)
+++ /tags/fc9-eol/lvs/debian/config/etc/nagios/nrpe.cfg	(revision 1257)
@@ -0,0 +1,215 @@
+#############################################################################
+# Sample NRPE Config File 
+# Written by: Ethan Galstad (nagios@nagios.org)
+# 
+# Last Modified: 11-23-2007
+#
+# NOTES:
+# This is a sample configuration file for the NRPE daemon.  It needs to be
+# located on the remote host that is running the NRPE daemon, not the host
+# from which the check_nrpe client is being executed.
+#############################################################################
+
+
+# LOG FACILITY
+# The syslog facility that should be used for logging purposes.
+
+log_facility=daemon
+
+
+
+# PID FILE
+# The name of the file in which the NRPE daemon should write it's process ID
+# number.  The file is only written if the NRPE daemon is started by the root
+# user and is running in standalone mode.
+
+pid_file=/var/run/nrpe.pid
+
+
+
+# PORT NUMBER
+# Port number we should wait for connections on.
+# NOTE: This must be a non-priviledged port (i.e. > 1024).
+# NOTE: This option is ignored if NRPE is running under either inetd or xinetd
+
+server_port=5666
+
+
+
+# SERVER ADDRESS
+# Address that nrpe should bind to in case there are more than one interface
+# and you do not want nrpe to bind on all interfaces.
+# NOTE: This option is ignored if NRPE is running under either inetd or xinetd
+
+#server_address=192.168.1.1
+
+
+
+# ALLOWED HOST ADDRESSES
+# This is a comma-delimited list of IP address of hosts that are allowed
+# to talk to the NRPE daemon.
+#
+# NOTE: The daemon only does rudimentary checking of the client's IP
+#       address.  I would highly recommend adding entries in your
+#	/etc/hosts.allow file to allow only the specified host to connect
+#	to the port you are running this daemon on.
+#
+# NOTE: This option is ignored if NRPE is running under either inetd or xinetd
+
+allowed_hosts=18.187.1.128,18.181.0.65
+
+
+
+# NRPE USER
+# This determines the effective user that the NRPE daemon should run as.  
+# You can either supply a username or a UID.
+# 
+# NOTE: This option is ignored if NRPE is running under either inetd or xinetd
+
+nrpe_user=nagios
+
+
+
+# NRPE GROUP
+# This determines the effective group that the NRPE daemon should run as.  
+# You can either supply a group name or a GID.
+# 
+# NOTE: This option is ignored if NRPE is running under either inetd or xinetd
+
+nrpe_group=nagios
+
+
+
+# COMMAND ARGUMENT PROCESSING
+# This option determines whether or not the NRPE daemon will allow clients
+# to specify arguments to commands that are executed.  This option only works
+# if the daemon was configured with the --enable-command-args configure script
+# option.  
+#
+# *** ENABLING THIS OPTION IS A SECURITY RISK! *** 
+# Read the SECURITY file for information on some of the security implications
+# of enabling this variable.
+#
+# Values: 0=do not allow arguments, 1=allow command arguments
+
+dont_blame_nrpe=1
+
+
+
+# DEBUGGING OPTION
+# This option determines whether or not debugging messages are logged to the
+# syslog facility.
+# Values: 0=debugging off, 1=debugging on
+
+debug=0
+
+
+
+# COMMAND TIMEOUT
+# This specifies the maximum number of seconds that the NRPE daemon will
+# allow plugins to finish executing before killing them off.
+
+command_timeout=60
+
+
+
+# CONNECTION TIMEOUT
+# This specifies the maximum number of seconds that the NRPE daemon will
+# wait for a connection to be established before exiting. This is sometimes
+# seen where a network problem stops the SSL being established even though
+# all network sessions are connected. This causes the nrpe daemons to
+# accumulate, eating system resources. Do not set this too low.
+
+connection_timeout=300
+
+
+
+# WEEK RANDOM SEED OPTION
+# This directive allows you to use SSL even if your system does not have
+# a /dev/random or /dev/urandom (on purpose or because the necessary patches
+# were not applied). The random number generator will be seeded from a file
+# which is either a file pointed to by the environment valiable $RANDFILE
+# or $HOME/.rnd. If neither exists, the pseudo random number generator will
+# be initialized and a warning will be issued.
+# Values: 0=only seed from /dev/[u]random, 1=also seed from weak randomness
+
+#allow_weak_random_seed=1
+
+
+
+# INCLUDE CONFIG FILE
+# This directive allows you to include definitions from an external config file.
+
+#include=<somefile.cfg>
+
+
+
+# INCLUDE CONFIG DIRECTORY
+# This directive allows you to include definitions from config files (with a
+# .cfg extension) in one or more directories (with recursion).
+
+#include_dir=<somedirectory>
+#include_dir=<someotherdirectory>
+
+
+
+# COMMAND DEFINITIONS
+# Command definitions that this daemon will run.  Definitions
+# are in the following format:
+#
+# command[<command_name>]=<command_line>
+#
+# When the daemon receives a request to return the results of <command_name>
+# it will execute the command specified by the <command_line> argument.
+#
+# Unlike Nagios, the command line cannot contain macros - it must be
+# typed exactly as it should be executed.
+#
+# Note: Any plugins that are used in the command lines must reside
+# on the machine that this daemon is running on!  The examples below
+# assume that you have plugins installed in a /usr/local/nagios/libexec
+# directory.  Also note that you will have to modify the definitions below
+# to match the argument format the plugins expect.  Remember, these are
+# examples only!
+
+# The following examples use hardcoded command arguments...
+
+#command[check_users]=/usr/lib/nagios/plugins/check_users -w 5 -c 10
+#command[check_load]=/usr/lib/nagios/plugins/check_load -w 15,10,5 -c 30,25,20
+command[check_disk1]=/usr/lib/nagios/plugins/check_disk -w 20 -c 10 -p /dev/hda1
+command[check_disk2]=/usr/lib/nagios/plugins/check_disk -w 20 -c 10 -p /dev/hdb1
+command[check_zombie_procs]=/usr/lib/nagios/plugins/check_procs -w 5 -c 10 -s Z
+command[check_total_procs]=/usr/lib/nagios/plugins/check_procs -w 150 -c 200 
+
+# The following examples allow user-supplied arguments and can
+# only be used if the NRPE daemon was compiled with support for 
+# command arguments *AND* the dont_blame_nrpe directive in this
+# config file is set to '1'...
+
+command[check_users]=/usr/lib/nagios/plugins/check_users -w $ARG1$ -c $ARG2$
+command[check_load]=/usr/lib/nagios/plugins/check_load -w $ARG1$ -c $ARG2$
+command[check_disk]=/usr/lib/nagios/plugins/check_disk -w $ARG1$ -c $ARG2$
+command[check_disk_p]=/usr/lib/nagios/plugins/check_disk -w $ARG1$ -c $ARG2$ -p $ARG3$
+command[check_procs]=/usr/lib/nagios/plugins/check_procs -w $ARG1$ -c $ARG2$
+command[check_procs_C]=/usr/lib/nagios/plugins/check_procs -w $ARG1$ -c $ARG2$ -C $ARG3$
+command[check_procs_P]=/usr/lib/nagios/plugins/check_procs -w $ARG1$ -c $ARG2$ -P $ARG3$
+command[check_procs_m]=/usr/lib/nagios/plugins/check_procs -w $ARG1$ -c $ARG2$ -m $ARG3$
+command[check_procs_s]=/usr/lib/nagios/plugins/check_procs -w $ARG1$ -c $ARG2$ -s $ARG3$
+command[check_procs_u]=/usr/lib/nagios/plugins/check_procs -w $ARG1$ -c $ARG2$ -u $ARG3$
+command[check_procs_z]=/usr/lib/nagios/plugins/check_procs -w $ARG1$ -c $ARG2$ -z $ARG3$
+
+#command[check_users]=/usr/lib/nagios/plugins/check_users -w $ARG1$ -c $ARG2$
+#command[check_load]=/usr/lib/nagios/plugins/check_load -w $ARG1$ -c $ARG2$
+#command[check_disk]=/usr/lib/nagios/plugins/check_disk -w $ARG1$ -c $ARG2$ -p $ARG3$
+#command[check_procs]=/usr/lib/nagios/plugins/check_procs -w $ARG1$ -c $ARG2$ -s $ARG3$
+
+#
+# local configuration:
+#	if you'd prefer, you can instead place directives here
+include=/etc/nagios/nrpe_local.cfg
+
+# 
+# you can place your config snipplets into nrpe.d/
+include_dir=/etc/nagios/nrpe.d/
+
+
Index: /tags/fc9-eol/lvs/debian/config/etc/network/if-up.d/iptables
===================================================================
--- /tags/fc9-eol/lvs/debian/config/etc/network/if-up.d/iptables	(revision 1257)
+++ /tags/fc9-eol/lvs/debian/config/etc/network/if-up.d/iptables	(revision 1257)
@@ -0,0 +1,29 @@
+#!/bin/sh
+## Joe Presbrey <presbrey@mit.edu>
+## Quentin Smith <quentin@mit.edu>
+## SIPB Scripts LVS Firewall marks
+
+iptables -F -t mangle
+
+# Create a table for regular scripts hosts
+iptables -t mangle -N scripts 2>/dev/null || :
+
+# scripts-vhosts.mit.edu
+iptables -A PREROUTING -t mangle -d 18.181.0.46 -j scripts
+# scripts.mit.edu
+iptables -A PREROUTING -t mangle -d 18.181.0.43 -j scripts
+# scripts-cert.mit.edu
+iptables -A PREROUTING -t mangle -d 18.181.0.50 -j scripts
+
+# Send Apache-bound traffic to FWM 2 (load-balanced)
+iptables -A scripts -t mangle -m tcp -m multiport -p tcp --dports 80,443,444 -j MARK --set-mark 2
+# Send SMTP-bound traffic to FWM 3 (load-balanced)
+iptables -A scripts -t mangle -m tcp -p tcp --dport 25 -j MARK --set-mark 3
+# Send finger-bound traffic to FWM 255 (the LVS director itself)
+iptables -A scripts -t mangle -m tcp -p tcp --dport 78:79 -j MARK --set-mark 255
+# Send everything else to FWM 1 (primary)
+iptables -A scripts -t mangle -m mark --mark 0 -j MARK --set-mark 1
+
+# webzephyr.mit.edu is special because its SMTP needs to always go to the primary (FWM 1)
+iptables -A PREROUTING -t mangle -m tcp -m multiport -p tcp -d 18.181.0.49 --dports 80,443,444 -j MARK --set-mark 2
+iptables -A PREROUTING -t mangle -m mark --mark 0 -d 18.181.0.49 -j MARK --set-mark 1
Index: /tags/fc9-eol/lvs/debian/config/etc/ntp.conf
===================================================================
--- /tags/fc9-eol/lvs/debian/config/etc/ntp.conf	(revision 1257)
+++ /tags/fc9-eol/lvs/debian/config/etc/ntp.conf	(revision 1257)
@@ -0,0 +1,45 @@
+# /etc/ntp.conf, configuration for ntpd
+
+driftfile /var/lib/ntp/ntp.drift
+statsdir /var/log/ntpstats/
+
+statistics loopstats peerstats clockstats
+filegen loopstats file loopstats type day enable
+filegen peerstats file peerstats type day enable
+filegen clockstats file clockstats type day enable
+
+
+# You do need to talk to an NTP server or two (or three).
+server time.mit.edu
+
+# pool.ntp.org maps to more than 300 low-stratum NTP servers.
+# Your server will pick a different set every time it starts up.
+#  *** Please consider joining the pool! ***
+#  *** <http://www.pool.ntp.org/join.html> ***
+#server 0.debian.pool.ntp.org iburst
+#server 1.debian.pool.ntp.org iburst
+#server 2.debian.pool.ntp.org iburst
+#server 3.debian.pool.ntp.org iburst
+
+# By default, exchange time with everybody, but don't allow configuration.
+# See /usr/share/doc/ntp-doc/html/accopt.html for details.
+restrict -4 default kod notrap nomodify nopeer noquery
+restrict -6 default kod notrap nomodify nopeer noquery
+
+# Local users may interrogate the ntp server more closely.
+restrict 127.0.0.1
+restrict ::1
+
+# Clients from this (example!) subnet have unlimited access,
+# but only if cryptographically authenticated
+#restrict 192.168.123.0  mask  255.255.255.0 notrust
+
+# If you want to provide time to your local subnet, change the next line.
+# (Again, the address is an example only.)
+#broadcast 192.168.123.255
+
+# If you want to listen to time broadcasts on your local subnet,
+# de-comment the next lines. Please do this only if you trust everybody
+# on the network!
+#disable auth
+#broadcastclient
Index: /tags/fc9-eol/lvs/debian/config/etc/sysctl.conf
===================================================================
--- /tags/fc9-eol/lvs/debian/config/etc/sysctl.conf	(revision 1257)
+++ /tags/fc9-eol/lvs/debian/config/etc/sysctl.conf	(revision 1257)
@@ -0,0 +1,67 @@
+#
+# /etc/sysctl.conf - Configuration file for setting system variables
+# See /etc/sysctl.d/ for additonal system variables
+# See sysctl.conf (5) for information.
+#
+
+#kernel.domainname = example.com
+
+# Uncomment the following to stop low-level messages on console
+#kernel.printk = 4 4 1 7
+
+##############################################################3
+# Functions previously found in netbase
+#
+
+# Uncomment the next two lines to enable Spoof protection (reverse-path filter)
+# Turn on Source Address Verification in all interfaces to
+# prevent some spoofing attacks
+#net.ipv4.conf.default.rp_filter=1
+#net.ipv4.conf.all.rp_filter=1
+
+# Uncomment the next line to enable TCP/IP SYN cookies
+# This disables TCP Window Scaling (http://lkml.org/lkml/2008/2/5/167),
+# and is not recommended.
+#net.ipv4.tcp_syncookies=1
+
+# Uncomment the next line to enable packet forwarding for IPv4
+net.ipv4.ip_forward=1
+
+# Uncomment the next line to enable packet forwarding for IPv6
+#net.ipv6.conf.all.forwarding=1
+
+
+###################################################################
+# Additional settings - these settings can improve the network
+# security of the host and prevent against some network attacks
+# including spoofing attacks and man in the middle attacks through
+# redirection. Some network environments, however, require that these
+# settings are disabled so review and enable them as needed.
+#
+# Ignore ICMP broadcasts
+#net.ipv4.icmp_echo_ignore_broadcasts = 1
+#
+# Ignore bogus ICMP errors
+#net.ipv4.icmp_ignore_bogus_error_responses = 1
+# 
+# Do not accept ICMP redirects (prevent MITM attacks)
+#net.ipv4.conf.all.accept_redirects = 0
+#net.ipv6.conf.all.accept_redirects = 0
+# _or_
+# Accept ICMP redirects only for gateways listed in our default
+# gateway list (enabled by default)
+# net.ipv4.conf.all.secure_redirects = 1
+#
+# Do not send ICMP redirects (we are not a router)
+#net.ipv4.conf.all.send_redirects = 0
+#
+# Do not accept IP source route packets (we are not a router)
+#net.ipv4.conf.all.accept_source_route = 0
+#net.ipv6.conf.all.accept_source_route = 0
+#
+# Log Martian Packets
+#net.ipv4.conf.all.log_martians = 1
+#
+# The contents of /proc/<pid>/maps and smaps files are only visible to 
+# readers that are allowed to ptrace() the process
+# kernel.maps_protect = 1
Index: /tags/fc9-eol/lvs/debian/config/etc/syslog-ng/syslog-ng.conf
===================================================================
--- /tags/fc9-eol/lvs/debian/config/etc/syslog-ng/syslog-ng.conf	(revision 1257)
+++ /tags/fc9-eol/lvs/debian/config/etc/syslog-ng/syslog-ng.conf	(revision 1257)
@@ -0,0 +1,341 @@
+#
+# Configuration file for syslog-ng under Debian
+#
+# attempts at reproducing default syslog behavior
+
+# the standard syslog levels are (in descending order of priority):
+# emerg alert crit err warning notice info debug
+# the aliases "error", "panic", and "warn" are deprecated
+# the "none" priority found in the original syslogd configuration is
+# only used in internal messages created by syslogd
+
+
+######
+# options
+
+options {
+        # disable the chained hostname format in logs
+        # (default is enabled)
+        chain_hostnames(0);
+
+        # the time to wait before a died connection is re-established
+        # (default is 60)
+        time_reopen(10);
+
+        # the time to wait before an idle destination file is closed
+        # (default is 60)
+        time_reap(360);
+
+        # the number of lines buffered before written to file
+        # you might want to increase this if your disk isn't catching with
+        # all the log messages you get or if you want less disk activity
+        # (say on a laptop)
+        # (default is 0)
+        #sync(0);
+
+        # the number of lines fitting in the output queue
+        log_fifo_size(2048);
+
+        # enable or disable directory creation for destination files
+        create_dirs(yes);
+
+        # default owner, group, and permissions for log files
+        # (defaults are 0, 0, 0600)
+        #owner(root);
+        group(adm);
+        perm(0640);
+
+        # default owner, group, and permissions for created directories
+        # (defaults are 0, 0, 0700)
+        #dir_owner(root);
+        #dir_group(root);
+        dir_perm(0755);
+
+        # enable or disable DNS usage
+        # syslog-ng blocks on DNS queries, so enabling DNS may lead to
+        # a Denial of Service attack
+        # (default is yes)
+        use_dns(no);
+
+        # maximum length of message in bytes
+        # this is only limited by the program listening on the /dev/log Unix
+        # socket, glibc can handle arbitrary length log messages, but -- for
+        # example -- syslogd accepts only 1024 bytes
+        # (default is 2048)
+        #log_msg_size(2048);
+
+	#Disable statistic log messages.
+	stats_freq(0);
+};
+
+
+######
+# sources
+
+# all known message sources
+source s_all {
+        # message generated by Syslog-NG
+        internal();
+        # standard Linux log source (this is the default place for the syslog()
+        # function to send logs to)
+        unix-stream("/dev/log");
+        # messages from the kernel
+        file("/proc/kmsg" log_prefix("kernel: "));
+        # use the following line if you want to receive remote UDP logging messages
+        # (this is equivalent to the "-r" syslogd flag)
+        # udp();
+};
+
+
+######
+# destinations
+
+# some standard log files
+destination df_auth { file("/var/log/auth.log"); };
+destination df_syslog { file("/var/log/syslog"); };
+destination df_cron { file("/var/log/cron.log"); };
+destination df_daemon { file("/var/log/daemon.log"); };
+destination df_kern { file("/var/log/kern.log"); };
+destination df_lpr { file("/var/log/lpr.log"); };
+destination df_mail { file("/var/log/mail.log"); };
+destination df_user { file("/var/log/user.log"); };
+destination df_uucp { file("/var/log/uucp.log"); };
+
+# these files are meant for the mail system log files
+# and provide re-usable destinations for {mail,cron,...}.info,
+# {mail,cron,...}.notice, etc.
+destination df_facility_dot_info { file("/var/log/$FACILITY.info"); };
+destination df_facility_dot_notice { file("/var/log/$FACILITY.notice"); };
+destination df_facility_dot_warn { file("/var/log/$FACILITY.warn"); };
+destination df_facility_dot_err { file("/var/log/$FACILITY.err"); };
+destination df_facility_dot_crit { file("/var/log/$FACILITY.crit"); };
+
+# these files are meant for the news system, and are kept separated
+# because they should be owned by "news" instead of "root"
+destination df_news_dot_notice { file("/var/log/news/news.notice" owner("news")); };
+destination df_news_dot_err { file("/var/log/news/news.err" owner("news")); };
+destination df_news_dot_crit { file("/var/log/news/news.crit" owner("news")); };
+
+# some more classical and useful files found in standard syslog configurations
+destination df_debug { file("/var/log/debug"); };
+destination df_messages { file("/var/log/messages"); };
+
+# pipes
+# a console to view log messages under X
+destination dp_xconsole { pipe("/dev/xconsole"); };
+
+# consoles
+# this will send messages to everyone logged in
+destination du_all { usertty("*"); };
+
+
+######
+# filters
+
+# all messages from the auth and authpriv facilities
+filter f_auth { facility(auth, authpriv); };
+
+# all messages except from the auth and authpriv facilities
+filter f_syslog { not facility(auth, authpriv); };
+
+# respectively: messages from the cron, daemon, kern, lpr, mail, news, user,
+# and uucp facilities
+filter f_cron { facility(cron); };
+filter f_daemon { facility(daemon); };
+filter f_kern { facility(kern); };
+filter f_lpr { facility(lpr); };
+filter f_mail { facility(mail); };
+filter f_news { facility(news); };
+filter f_user { facility(user); };
+filter f_uucp { facility(uucp); };
+
+# some filters to select messages of priority greater or equal to info, warn,
+# and err
+# (equivalents of syslogd's *.info, *.warn, and *.err)
+filter f_at_least_info { level(info..emerg); };
+filter f_at_least_notice { level(notice..emerg); };
+filter f_at_least_warn { level(warn..emerg); };
+filter f_at_least_err { level(err..emerg); };
+filter f_at_least_crit { level(crit..emerg); };
+
+# all messages of priority debug not coming from the auth, authpriv, news, and
+# mail facilities
+filter f_debug { level(debug) and not facility(auth, authpriv, news, mail); };
+
+# all messages of info, notice, or warn priority not coming form the auth,
+# authpriv, cron, daemon, mail, and news facilities
+filter f_messages {
+        level(info,notice,warn)
+            and not facility(auth,authpriv,cron,daemon,mail,news);
+};
+
+# messages with priority emerg
+filter f_emerg { level(emerg); };
+
+# complex filter for messages usually sent to the xconsole
+filter f_xconsole {
+    facility(daemon,mail)
+        or level(debug,info,notice,warn)
+        or (facility(news)
+                and level(crit,err,notice));
+};
+
+
+######
+# logs
+# order matters if you use "flags(final);" to mark the end of processing in a
+# "log" statement
+
+# these rules provide the same behavior as the commented original syslogd rules
+
+# auth,authpriv.*                 /var/log/auth.log
+log {
+        source(s_all);
+        filter(f_auth);
+        destination(df_auth);
+};
+
+# *.*;auth,authpriv.none          -/var/log/syslog
+log {
+        source(s_all);
+        filter(f_syslog);
+        destination(df_syslog);
+};
+
+# this is commented out in the default syslog.conf
+# cron.*                         /var/log/cron.log
+#log {
+#        source(s_all);
+#        filter(f_cron);
+#        destination(df_cron);
+#};
+
+# daemon.*                        -/var/log/daemon.log
+log {
+        source(s_all);
+        filter(f_daemon);
+        destination(df_daemon);
+};
+
+# kern.*                          -/var/log/kern.log
+log {
+        source(s_all);
+        filter(f_kern);
+        destination(df_kern);
+};
+
+# lpr.*                           -/var/log/lpr.log
+log {
+        source(s_all);
+        filter(f_lpr);
+        destination(df_lpr);
+};
+
+# mail.*                          -/var/log/mail.log
+log {
+        source(s_all);
+        filter(f_mail);
+        destination(df_mail);
+};
+
+# user.*                          -/var/log/user.log
+log {
+        source(s_all);
+        filter(f_user);
+        destination(df_user);
+};
+
+# uucp.*                          /var/log/uucp.log
+log {
+        source(s_all);
+        filter(f_uucp);
+        destination(df_uucp);
+};
+
+# mail.info                       -/var/log/mail.info
+log {
+        source(s_all);
+        filter(f_mail);
+        filter(f_at_least_info);
+        destination(df_facility_dot_info);
+};
+
+# mail.warn                       -/var/log/mail.warn
+log {
+        source(s_all);
+        filter(f_mail);
+        filter(f_at_least_warn);
+        destination(df_facility_dot_warn);
+};
+
+# mail.err                        /var/log/mail.err
+log {
+        source(s_all);
+        filter(f_mail);
+        filter(f_at_least_err);
+        destination(df_facility_dot_err);
+};
+
+# news.crit                       /var/log/news/news.crit
+log {
+        source(s_all);
+        filter(f_news);
+        filter(f_at_least_crit);
+        destination(df_news_dot_crit);
+};
+
+# news.err                        /var/log/news/news.err
+log {
+        source(s_all);
+        filter(f_news);
+        filter(f_at_least_err);
+        destination(df_news_dot_err);
+};
+
+# news.notice                     /var/log/news/news.notice
+log {
+        source(s_all);
+        filter(f_news);
+        filter(f_at_least_notice);
+        destination(df_news_dot_notice);
+};
+
+
+# *.=debug;\
+#         auth,authpriv.none;\
+#         news.none;mail.none     -/var/log/debug
+log {
+        source(s_all);
+        filter(f_debug);
+        destination(df_debug);
+};
+
+
+# *.=info;*.=notice;*.=warn;\
+#         auth,authpriv.none;\
+#         cron,daemon.none;\
+#         mail,news.none          -/var/log/messages
+log {
+        source(s_all);
+        filter(f_messages);
+        destination(df_messages);
+};
+
+# *.emerg                         *
+log {
+        source(s_all);
+        filter(f_emerg);
+        destination(du_all);
+};
+
+
+# daemon.*;mail.*;\
+#         news.crit;news.err;news.notice;\
+#         *.=debug;*.=info;\
+#         *.=notice;*.=warn       |/dev/xconsole
+log {
+        source(s_all);
+        filter(f_xconsole);
+        destination(dp_xconsole);
+};
+
Index: /tags/fc9-eol/lvs/debian/sys/sbin/in.vs_conn
===================================================================
--- /tags/fc9-eol/lvs/debian/sys/sbin/in.vs_conn	(revision 1257)
+++ /tags/fc9-eol/lvs/debian/sys/sbin/in.vs_conn	(revision 1257)
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+cat /proc/net/ip_vs_conn
Index: /tags/fc9-eol/lvs/debian/sys/sbin/in.vs_main
===================================================================
--- /tags/fc9-eol/lvs/debian/sys/sbin/in.vs_main	(revision 1257)
+++ /tags/fc9-eol/lvs/debian/sys/sbin/in.vs_main	(revision 1257)
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+cat /proc/net/ip_vs
Index: /tags/fc9-eol/lvs/debian/sys/sbin/in.vs_stat
===================================================================
--- /tags/fc9-eol/lvs/debian/sys/sbin/in.vs_stat	(revision 1257)
+++ /tags/fc9-eol/lvs/debian/sys/sbin/in.vs_stat	(revision 1257)
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+cat /proc/net/ip_vs_stats
Index: /tags/fc9-eol/lvs/doc/install-howto
===================================================================
--- /tags/fc9-eol/lvs/doc/install-howto	(revision 1257)
+++ /tags/fc9-eol/lvs/doc/install-howto	(revision 1257)
@@ -0,0 +1,30 @@
+- TO TEMPORARILY DISABLE HEARTBEAT: on an existing node, run
+  crm_attribute -n is_managed_default -v false
+- confirm that the change occurred with crm_attribute -n is_managed_default -G
+- Install Debian 4.0 from a minimal Debian install CD
+- aptitude install openssh-server krb5-user krb5-clients
+- dpkg-reconfigure krb5-config
+- Set GSSAPIAuthentication yes in /etc/ssh/sshd_config
+- Add keytab and .k5login
+- Edit lvs/debian/config/etc/ha.d/ha.cf in SVN to add "node foo", where foo is the new machine's hostname as reported by uname -n
+- Synchronize /etc out of SVN by running
+svn co https://scripts.mit.edu:1111/lvs/config/etc /etc
+and moving files/directories out of the way as it checks out.
+- aptitude update; aptitude install heartbeat ldirectord lighttpd-mod-magnet; # should install version >= 2.1.2
+- aptitude install munin-node
+- Copy /etc/ha.d/authkeys from an existing LVS node
+- svn up on each existing LVS node and then run /etc/init.d/heartbeat reload
+- Run /etc/init.d/heartbeat start on the new node
+- No services will be allocated to this node. To allocate scripts_LVS to it, run
+cibadmin -M -X '
+       <rsc_location id="rsc_location_scripts_LVS_all" rsc="scripts_LVS">
+         <rule id="prefered_rsc_location_scripts_LVS_all" score="-INFINITY" boolean_op="and">
+           <expression attribute="#uname" id="733286ca-cde9-4941-bab0-59af8bd6b55a" operation="ne" value="rack-forward"/>
+           <expression attribute="#uname" id="55373ba0-9e5e-43de-adf6-ac77bfe5bac6" operation="ne" value="not-backward"/>
+	   <expression attribute="#uname" id="UNIQUE_ID" operation="ne" value="new-node"/>
+         </rule>
+       </rsc_location>
+'
+- TO REENABLE HEARTBEAT, run crm_attribute -n is_managed_default -v true
+- Watch /var/log/messages and /var/log/syslog to make sure heartbeat is working
+- Add machine to noc/munin/munin.conf (syn:/etc/munin/munin.conf)
Index: /tags/fc9-eol/noc/html/.attic/show.php
===================================================================
--- /tags/fc9-eol/noc/html/.attic/show.php	(revision 1257)
+++ /tags/fc9-eol/noc/html/.attic/show.php	(revision 1257)
@@ -0,0 +1,91 @@
+<?php
+/*
+(c)2006 Joe Presbrey <presbrey@mit.edu>
+*/
+
+include('rrdgraph.inc.php');
+require_once('rrdgraph.lib.php');
+
+if (isset($_GET['h'])&&isset($_GET['s'])&&isset($_GET['i'])) {
+	displayGraph($_GET['h'],$_GET['s'],$_GET['i']);
+	exit;
+}
+
+$skip_host[] = 'localhost';
+$skip_service[] = 'DISK_%2Fafs';
+$skip_service[] = 'DISK_%2Fboot';
+$skip_service[] = 'DISK_%2Fdev%2Fshm';
+$only_host = array();
+if (isset($_GET['host']))
+	$only_host[] = $_GET['host'];
+$only_service = array();
+if (isset($_GET['service']))
+	$only_service[] = $_GET['service'];
+
+function getServices($time=115200) {
+	$s = array();
+	foreach(glob("{$GLOBALS['RRD_PATH']}/*.rrd") as $f) {
+		if (time()-filemtime($f)<=$time) {
+			$e = explode('_', basename($f));
+//			//$s[$e[0]][] = $e[1];
+			if ($e[1] == 'DISK')
+				$s[array_shift($e)][] = substr(implode('_', $e),0,-4);
+			else {
+//				array_pop($e);
+				$s[$e[0]][] = $e[1];
+			}
+		}
+	}
+	return $s;
+}
+
+function displayGraph($host,$service,$time=null) {
+	$times = array(
+		'hour' => 19200,
+		'day' => 115200,
+		'week' => 691200,
+		'month' => 3024000,
+		'year' => 34560000);
+	$geom = array(
+		'hour' => '450x180',
+		'day' => '300x100',
+		'week' => '300x100',
+		'month' => '300x100',
+		'year' => '300x100');
+	$title = array(
+		'hour' => "$host: $service",
+		'day' => "$service today",
+		'week' => "$service this week",
+		'month' => "$service this month",
+		'year' => "$service this year");
+	if (is_null($time) || !isset($times[$time])) $time = 'day';
+	outputGraph($host, $service, $times[$time], array('legend'=>($time!='hour'?false:true),
+							'title'=>$title[$time],
+							'geom'=>explode('x',$geom[$time])));
+	//virtual('/ng/cgi-bin/show.cgi?host='.$host.'&service='.$service.'&graph='.$times[$time].'&geom='.$geom[$time].'&rrdopts='.str_replace(' ','_',$rrdopts[$time]));
+	//virtual('/ng/cgi-rin/show.cgi?host='.$host.'&service='.$service.'&graph=118800');
+	//virtual('/ng/cgi-bin/show.cgi?host=better-mousetrap&service=LOAD&db=load&graph=118800');
+	exit;
+}
+
+//displayGraph('better-mousetrap','LOAD');
+echo '<table border=0 cellspacing=0 cellpadding=0>';
+foreach(getServices() as $host=>$services) {
+	$host = urldecode($host);
+	if (in_array($host, $skip_host)) continue;
+	if (count($only_host) && !in_array($host, $only_host)) continue;
+	echo '<tr>';
+	foreach($services as $service) {
+		if (in_array($service, $skip_service)) continue;
+		if (count($only_service) && !in_array($service, $only_service)) continue;
+		echo '<td>';	
+		printf('<img src="show.php?h=%s&s=%s&i=%s">', $host, $service, 'hour');
+		echo '</td><td>';
+		printf('<img src="?h=%s&s=%s&i=%s">', $host, $service, 'day');
+		echo '<br />';
+		printf('<img src="?h=%s&s=%s&i=%s">', $host, $service, 'week');
+		echo '</td>';
+	}
+	echo '</tr>';
+}
+echo '</table>';
Index: /tags/fc9-eol/noc/html/.htaccess
===================================================================
--- /tags/fc9-eol/noc/html/.htaccess	(revision 1257)
+++ /tags/fc9-eol/noc/html/.htaccess	(revision 1257)
@@ -0,0 +1,6 @@
+
+RewriteEngine On
+RewriteCond %{REQUEST_FILENAME} !-f
+RewriteCond %{REQUEST_FILENAME} !-d
+RewriteCond %{REQUEST_FILENAME}.php -f
+RewriteRule ^(.*) $1.php
Index: /tags/fc9-eol/noc/html/graph.php
===================================================================
--- /tags/fc9-eol/noc/html/graph.php	(revision 1257)
+++ /tags/fc9-eol/noc/html/graph.php	(revision 1257)
@@ -0,0 +1,20 @@
+<?php
+include('rrdgraph.inc.php');
+require_once('rrdgraph.lib.php');
+
+import_request_variables('g','i_');
+
+$host = isset($i_host)?$i_host:'better-mousetrap';
+$service = isset($i_service)?$i_service:'LOAD';
+$time = isset($i_time)?$i_time:'115200';
+$legend = isset($i_legend)&&$i_legend==0?0:1;
+//$title = isset($i_title)&&strlen($i_title)?($i_title):('%h: %s');
+$title = '%h: %s';
+if (isset($i_title) && $i_title==0) $title = null;
+$geom = isset($i_geom)&&strpos($i_geom,'x')?explode('x',$i_geom):array(403,146); /* (500x200 on output) */
+$width = isset($i_width)&&is_numeric($i_width)?floor($i_width):$geom[0];
+$height = isset($i_height)&&is_numeric($i_height)?floor($i_height):$geom[1];
+
+$time = rrd_time($time);
+
+outputGraph($host, $service, $time, array('legend'=>($legend==1?true:false), 'title'=>$title, 'geom'=>array($width,$height)));
Index: /tags/fc9-eol/noc/html/index.php
===================================================================
--- /tags/fc9-eol/noc/html/index.php	(revision 1257)
+++ /tags/fc9-eol/noc/html/index.php	(revision 1257)
@@ -0,0 +1,27 @@
+<?php
+
+
+?>
+<html>
+<head>
+<title>scripts-noc.mit.edu</title>
+<style>
+* {
+	margin: 0;
+}
+</style>
+</head>
+
+<body>
+
+<div style="display: block;">
+<img src="ping" /><img src="ping?t=604800" />
+</div>
+<div style="display: block;">
+<img src="load" /><img src="load?t=604800" />
+</div>
+<div style="display: block;">
+<img src="mysql" /><img src="mysql?t=604800" />
+</div>
+
+</body>
Index: /tags/fc9-eol/noc/html/load.php
===================================================================
--- /tags/fc9-eol/noc/html/load.php	(revision 1257)
+++ /tags/fc9-eol/noc/html/load.php	(revision 1257)
@@ -0,0 +1,18 @@
+<?php
+require_once('rrdgraph.inc.php');
+require_once('rrdgraph.lib.php');
+
+$RRD_IGNORE['load'][] = 'avg1min';
+$RRD_IGNORE['load'][] = 'avg5min';
+
+$time = isset($_GET['t'])?rrd_time($_GET['t']):100000;
+
+outputGraph(array('b-m',
+		  'o-f',
+		  'k-s',
+		  's-b',
+		  'n-f',
+		  'n-b'),
+		  'LOAD', $time, array('legend'=>1,
+					'title'=>'%s',
+					'geom'=>array(403,146)));
Index: /tags/fc9-eol/noc/html/mysql.php
===================================================================
--- /tags/fc9-eol/noc/html/mysql.php	(revision 1257)
+++ /tags/fc9-eol/noc/html/mysql.php	(revision 1257)
@@ -0,0 +1,14 @@
+<?php
+require_once('rrdgraph.inc.php');
+require_once('rrdgraph.lib.php');
+
+//$RRD_IGNORE['mysql'][] = 'avg15min';
+//$RRD_IGNORE['load'][] = 'avg5min';
+
+$time = isset($_GET['t'])?rrd_time($_GET['t']):100000;
+
+outputGraph(array('k-s',
+		  's-b'),
+		  'MYSQL', $time, array('legend'=>1,
+					'title'=>'%s',
+					'geom'=>array(403,146)));
Index: /tags/fc9-eol/noc/html/ping.php
===================================================================
--- /tags/fc9-eol/noc/html/ping.php	(revision 1257)
+++ /tags/fc9-eol/noc/html/ping.php	(revision 1257)
@@ -0,0 +1,17 @@
+<?php
+require_once('rrdgraph.inc.php');
+require_once('rrdgraph.lib.php');
+
+$RRD_IGNORE['ping'][] = 'losspct';
+
+$time = isset($_GET['t'])?rrd_time($_GET['t']):100000;
+
+outputGraph(array('b-m',
+		  'o-f',
+		  'k-s',
+		  's-b',
+		  'n-f',
+		  'n-b'),
+		  'PING', $time, array('legend'=>1,
+					'title'=>'%s',
+					'geom'=>array(403,146)));
Index: /tags/fc9-eol/noc/html/rrdgraph.inc.php
===================================================================
--- /tags/fc9-eol/noc/html/rrdgraph.inc.php	(revision 1257)
+++ /tags/fc9-eol/noc/html/rrdgraph.inc.php	(revision 1257)
@@ -0,0 +1,45 @@
+<?php
+/*
+(c)2006 Joe Presbrey <presbrey@mit.edu>
+*/
+
+$RRD_PATH = realpath(dirname(__FILE__).'/../ng/rrd');
+$RRD_IGNORE['tcp'][] = 'critical_time';
+$RRD_IGNORE['tcp'][] = 'warning_time';
+$RRD_IGNORE['tcp'][] = 'socket_timeout';
+$RRD_IGNORE['users'][] = 'uwarn';
+$RRD_IGNORE['users'][] = 'ucrit';
+$RRD_IGNORE['mysql'] = $RRD_IGNORE['tcp'];
+$RRD_IGNORE['https'] = $RRD_IGNORE['tcp'];
+$RRD_IGNORE['disk'][] = 'root';
+$RRD_IGNORE['disk'][] = 'user';
+$RRD_IGNORE['disk'][] = 'blockpct';
+$RRD_IGNORE['disk'][] = 'inodepct';
+$RRD_IGNORE['disk'][] = 'inodepct';
+$RRD_IGNORE['disk'][] = 'pctfree';
+$RRD_IGNORE['disk_/'] = $RRD_IGNORE['disk'];
+$RRD_IGNORE['disk_/afs'] = $RRD_IGNORE['disk'];
+$RRD_IGNORE['disk_/boot'] = $RRD_IGNORE['disk'];
+$RRD_IGNORE['disk_/dev/shm'] = $RRD_IGNORE['disk'];
+$RRD_IGNORE['disk_/srv'] = $RRD_IGNORE['disk'];
+
+$RRD_TIMES = array(
+	'hour' => 9000,
+	'day' => 115200,
+	'week' => 691200,
+	'month' => 3024000,
+	'year' => 34560000);
+
+function rrd_time($var) {
+	global $RRD_TIMES;
+	if (isset($RRD_TIMES[$var])) {
+		$time = $RRD_TIMES[$var];
+	} elseif (is_numeric($var)) {
+		$time = floor($var);
+	} else {
+		$time = 115200;
+	}
+	return $time;
+}
+
+?>
Index: /tags/fc9-eol/noc/html/rrdgraph.lib.php
===================================================================
--- /tags/fc9-eol/noc/html/rrdgraph.lib.php	(revision 1257)
+++ /tags/fc9-eol/noc/html/rrdgraph.lib.php	(revision 1257)
@@ -0,0 +1,148 @@
+<?php
+/*
+(c)2006 Joe Presbrey <presbrey@mit.edu>
+inspired by parts of nagiosgraph in Perl
+*/
+
+function hashcolor($x) {
+  $x .= 'x'; $c=1;
+  for($i = 0; $i < strlen($x); $i++) { $c=(51*$c+ord($x{$i}))%216; }
+  $h = array(51*floor($c/36), 51*floor($c/6%6), 51*($c%6));
+  $i = $n = $m = 0;
+  for($i = 0; $i <= 2; $i++) {
+    if ($h[$i] < $h[$m]) $m = $i;
+    if ($h[$i] > $h[$n]) $n = $i;
+  }
+  if ($h[$m]>102) $h[$m] = 102;
+  if ($h[$n]<153) $h[$n] = 153;
+  $n = ($h[2])+($h[1]*256)+$h[0]*256*256;
+  $c = sprintf("%06X", ($h[2])+($h[1]*256)+$h[0]*256*256);
+  return $c;
+}
+
+function findRRD($host, $service) {
+	if (isset($GLOBALS['RRD_PATH'])) {
+		$rrd = $GLOBALS['RRD_PATH'];
+	} else {
+		$rrd = dirname(__FILE__);
+	}
+	$f = glob("$rrd/{$host}_{$service}_*.rrd");
+	if (count($f)) {
+		$o = array_shift($f);
+	} else {
+		$host = str_replace('-','%2D',rawurlencode($host));
+		$service = str_replace('-','%2D',rawurlencode($service));
+		$f = glob("$rrd/{$host}_{$service}_*.rrd");
+		if (count($f)) {
+			$o = array_shift($f);
+		} else {
+			$f = glob("$rrd/{$host}_{$service}*.rrd");
+			if (count($f))
+				$o = array_shift($f);
+		}
+	}
+	$p = realpath($o);
+	if (strlen($p)>strlen($host)+strlen($service)) {
+		if (preg_match_all('/([^_]+)_([^_]+)_(.+).rrd/iU', basename($p), $m)) {
+			return array($p, $m[1][0], $m[2][0], $m[3][0]);
+		}
+	}
+}
+
+function graphInfo($file) {
+	$rrdinfo = `rrdtool info $file`;
+	preg_match_all('/ds\[([^\]]*)\]\./',$rrdinfo,$ds);
+	$lines = array_unique($ds[1]);
+	//sort($lines);
+	return $lines;
+}
+
+function makeDefs($file, $ignores=array(), $oneHost=true) {
+	$info = graphInfo($file[0]);
+	$defs = array();
+	$def = 'DEF:$dj=$file:$di:AVERAGE' .
+               ' LINE2:$dj#$c:$dj' .
+               ' GPRINT:$dj:MAX:Max\\\\:\\ %6.2lf%s' .
+               ' GPRINT:$dj:AVERAGE:Avg\\\\:\\ %6.2lf%s' .
+               ' GPRINT:$dj:MIN:Min\\\\:\\ %6.2lf%s' .
+               ' GPRINT:$dj:LAST:Cur\\\\:\\ %6.2lf%s\\\\n';
+	foreach($info as $sv) {
+		if (in_array(strtolower($sv), $ignores)) continue;
+		$d = str_replace('$di',$sv,$def);
+		if ($oneHost) {
+			$d = str_replace('$dj',$sv,$d);
+			$d = str_replace('$c',hashcolor($sv),$d);
+		} else {
+			$d = str_replace('$dj',urldecode($file[1]).'_'.$sv,$d);
+			$d = str_replace('$c',hashcolor(md5($file[0].$sv)),$d);
+		}
+		$d = str_replace('$file',$file[0],$d);
+		$defs[] = $d;
+	}
+	return implode(' ',$defs);
+}
+
+function outputGraph($hosts, $service, $time, $opts = array()) {
+	if (!is_array($hosts)) $hosts = array($hosts);
+	$oneHost = count($hosts)<=1;
+//	if (!is_array($services)) $services = array($services);
+	$defs = array();
+	$args = array();
+	$files = array();
+	foreach($hosts as $host) {
+		$file = findRRD($host, $service);
+		if (is_array($file) && strlen($file[0])) $files[] = $file;
+	}
+	foreach($files as $file) {
+		if (isset($GLOBALS['RRD_IGNORE'])
+		   && isset($GLOBALS['RRD_IGNORE'][strtolower($service)])) {
+			$def = makeDefs($file, $GLOBALS['RRD_IGNORE'][strtolower($service)], $oneHost);
+		} else {
+			$def = makeDefs($file, array(), $oneHost);
+		}
+		if (strlen($def)) $defs[] = $def;
+	}
+
+	if (count($opts))
+		extract($opts);
+	if (isset($geom)) {
+		if (isset($geom[0]))
+			$args[] = '-w '.$geom[0];
+		if (isset($geom[1]))
+			$args[] = '-h '.$geom[1];
+	}
+	if (isset($legend) && !$legend) {
+		$args[] = '-g';
+	}
+	if (isset($title)) {
+		if (count($files)) {
+			list($fhost, $fservice, $fdb) = array_slice(explode('_',basename($files[0][0])),0,3);
+			if ($oneHost) {
+				$title = str_replace('%h', urldecode($fhost), $title);
+				$title = str_replace('%s', urldecode($fservice), $title);
+			} else {
+				$title = str_replace('%h', implode(',',$hosts), $title);
+				$title = str_replace('%s', urldecode($service), $title);
+			}
+		}
+		$title = escapeshellarg($title);
+		if (strlen($title)) $args[] = "-v$title";
+	}
+
+	if (count($defs)) {
+		$defs = implode(' ', $defs);
+		if (count($args))
+			$argstr = implode(' ', $args);
+		$cmd = "rrdtool graph - -a PNG --start -$time $defs $argstr";
+		$data = `$cmd`;
+		if (strlen($data)>0) {
+			header('Content-Type: image/png');
+			echo $data;
+			exit;
+		} else {
+			echo "failed: $cmd";
+		}
+	}
+}
+
+//outputGraph('better-mousetrap', 'DISK: /', 192000);
Index: /tags/fc9-eol/noc/munin/munin.conf
===================================================================
--- /tags/fc9-eol/noc/munin/munin.conf	(revision 1257)
+++ /tags/fc9-eol/noc/munin/munin.conf	(revision 1257)
@@ -0,0 +1,344 @@
+# Example configuration file for Munin, generated by 'make build'
+
+# The next three variables specifies where the location of the RRD
+# databases, the HTML output, and the logs, severally.  They all
+# must be writable by the user running munin-cron.
+dbdir	/var/lib/munin
+htmldir	/var/www/html/munin
+logdir	/var/log/munin
+rundir  /var/run/munin
+
+# Where to look for the HTML templates
+tmpldir	/etc/munin/templates
+
+# Make graphs show values per minute instead of per second
+#graph_period minute
+
+# Drop somejuser@fnord.comm and anotheruser@blibb.comm an email everytime 
+# something changes (OK -> WARNING, CRITICAL -> OK, etc)
+#contact.someuser.command mail -s "Munin notification" somejuser@fnord.comm
+#contact.anotheruser.command mail -s "Munin notification" anotheruser@blibb.comm
+#
+# For those with Nagios, the following might come in handy. In addition,
+# the services must be defined in the Nagios server as well.
+#contact.nagios.command /usr/sbin/send_nsca -H nagios.host.com -c /etc/send_nsca.cfg
+
+# a simple host tree
+#[localhost]
+#    address 127.0.0.1
+#    use_node_name yes
+
+# 
+# A more complex example of a host tree
+#
+## First our "normal" host.
+# [fii.foo.com]
+#       address foo
+#
+## Then our other host...
+# [fay.foo.com]
+#       address fay
+#
+## Then we want totals...
+# [foo.com;Totals] #Force it into the "foo.com"-domain...
+#       update no   # Turn off data-fetching for this "host".
+#
+#   # The graph "load1". We want to see the loads of both machines... 
+#   # "fii=fii.foo.com:load.load" means "label=machine:graph.field"
+#       load1.graph_title Loads side by side
+#       load1.graph_order fii=fii.foo.com:load.load fay=fay.foo.com:load.load
+#
+#   # The graph "load2". Now we want them stacked on top of each other.
+#       load2.graph_title Loads on top of each other
+#       load2.dummy_field.stack fii=fii.foo.com:load.load fay=fay.foo.com:load.load
+#       load2.dummy_field.draw AREA # We want area instead the default LINE2.
+#       load2.dummy_field.label dummy # This is needed. Silly, really.
+#
+#   # The graph "load3". Now we want them summarised into one field
+#       load3.graph_title Loads summarised
+#       load3.combined_loads.sum fii.foo.com:load.load fay.foo.com:load.load
+#       load3.combined_loads.label Combined loads # Must be set, as this is
+#                                                 # not a dummy field!
+#
+## ...and on a side note, I want them listen in another order (default is
+## alphabetically)
+#
+# # Since [foo.com] would be interpreted as a host in the domain "com", we
+# # specify that this is a domain by adding a semicolon.
+# [foo.com;]
+#       node_order Totals fii.foo.com fay.foo.com
+#
+[sql.mit.edu;kitchen-sink]
+	address 18.181.0.56
+	use_node_name yes
+	df._dev_mapper_vg0_lv1.warning 98
+	df._dev_mapper_vg0_lv1.critical 99
+
+[sql.mit.edu;sliced-bread]
+	address 18.181.0.47
+	use_node_name yes
+	df._dev_mapper_vg0_lv1.warning 98
+	df._dev_mapper_vg0_lv1.critical 99
+
+[scripts.mit.edu;better-mousetrap]
+	address 18.181.0.57
+	use_node_name yes
+
+[scripts.mit.edu;old-faithful]
+	address 18.181.0.53
+	use_node_name yes
+
+[scripts.mit.edu;sx-blade-4]
+	address 18.181.0.167
+	use_node_name yes
+
+[scripts-LVS;not-forward]
+	address 18.181.0.54
+	use_node_name yes
+	update no
+	cps_www.SCRIPTS_MIT_EDU_BETTER_MOUSETRAP_MIT_EDU.type DERIVE
+	cps_www.SCRIPTS_MIT_EDU_OLD_FAITHFUL_MIT_EDU.type DERIVE
+	cps_www.SCRIPTS_MIT_EDU_SX_BLADE_4_MIT_EDU.type DERIVE
+	cps_www.SCRIPTS_CERT_MIT_EDU_BETTER_MOUSETRAP_MIT_EDU.type DERIVE
+	cps_www.SCRIPTS_CERT_MIT_EDU_OLD_FAITHFUL_MIT_EDU.type DERIVE
+	cps_www.SCRIPTS_CERT_MIT_EDU_SX_BLADE_4_MIT_EDU.type DERIVE
+
+[scripts-LVS;not-backward]
+	address 18.181.0.55
+	use_node_name yes
+	update no
+	cps_www.SCRIPTS_MIT_EDU_BETTER_MOUSETRAP_MIT_EDU.type DERIVE
+	cps_www.SCRIPTS_MIT_EDU_OLD_FAITHFUL_MIT_EDU.type DERIVE
+	cps_www.SCRIPTS_MIT_EDU_SX_BLADE_4_MIT_EDU.type DERIVE
+	cps_www.SCRIPTS_CERT_MIT_EDU_BETTER_MOUSETRAP_MIT_EDU.type DERIVE
+	cps_www.SCRIPTS_CERT_MIT_EDU_OLD_FAITHFUL_MIT_EDU.type DERIVE
+	cps_www.SCRIPTS_CERT_MIT_EDU_SX_BLADE_4_MIT_EDU.type DERIVE
+
+[scripts-LVS;rack-forward]
+	address 18.181.0.117
+	use_node_name yes
+	cps_www.SCRIPTS_MIT_EDU_BETTER_MOUSETRAP_MIT_EDU.type DERIVE
+	cps_www.SCRIPTS_MIT_EDU_OLD_FAITHFUL_MIT_EDU.type DERIVE
+	cps_www.SCRIPTS_MIT_EDU_SX_BLADE_4_MIT_EDU.type DERIVE
+	cps_www.SCRIPTS_MIT_EDU_BEES_KNEES_MIT_EDU.type DERIVE
+	cps_www.SCRIPTS_CERT_MIT_EDU_BETTER_MOUSETRAP_MIT_EDU.type DERIVE
+	cps_www.SCRIPTS_CERT_MIT_EDU_OLD_FAITHFUL_MIT_EDU.type DERIVE
+	cps_www.SCRIPTS_CERT_MIT_EDU_SX_BLADE_4_MIT_EDU.type DERIVE
+	cps_www.SCRIPTS_CERT_MIT_EDU_BEES_KNEES_MIT_EDU.type DERIVE
+	cps_www.SCRIPTS_VHOSTS_MIT_EDU_BETTER_MOUSETRAP_MIT_EDU.type DERIVE
+	cps_www.SCRIPTS_VHOSTS_MIT_EDU_OLD_FAITHFUL_MIT_EDU.type DERIVE
+	cps_www.SCRIPTS_VHOSTS_MIT_EDU_BEES_KNEES_MIT_EDU.type DERIVE
+
+[scripts-LVS;rack-backward]
+	address 18.181.0.118
+	use_node_name yes
+	cps_www.SCRIPTS_MIT_EDU_BETTER_MOUSETRAP_MIT_EDU.type DERIVE
+	cps_www.SCRIPTS_MIT_EDU_OLD_FAITHFUL_MIT_EDU.type DERIVE
+	cps_www.SCRIPTS_MIT_EDU_SX_BLADE_4_MIT_EDU.type DERIVE
+	cps_www.SCRIPTS_MIT_EDU_BEES_KNEES_MIT_EDU.type DERIVE
+	cps_www.SCRIPTS_CERT_MIT_EDU_BETTER_MOUSETRAP_MIT_EDU.type DERIVE
+	cps_www.SCRIPTS_CERT_MIT_EDU_OLD_FAITHFUL_MIT_EDU.type DERIVE
+	cps_www.SCRIPTS_CERT_MIT_EDU_SX_BLADE_4_MIT_EDU.type DERIVE
+	cps_www.SCRIPTS_CERT_MIT_EDU_BEES_KNEES_MIT_EDU.type DERIVE
+	cps_www.SCRIPTS_VHOSTS_MIT_EDU_BETTER_MOUSETRAP_MIT_EDU.type DERIVE
+	cps_www.SCRIPTS_VHOSTS_MIT_EDU_OLD_FAITHFUL_MIT_EDU.type DERIVE
+	cps_www.SCRIPTS_VHOSTS_MIT_EDU_BEES_KNEES_MIT_EDU.type DERIVE
+
+[scripts-LVS;Aggregated]
+        update no
+        contacts no
+ 
+        cps_www.update no
+        cps_www.graph_args -l 0
+        cps_www.graph_category network
+        cps_www.graph_title Loadbalanced *->www connections
+        cps_www.graph_vlabel connections / ${graph_period}
+
+	cps_www.SCRIPTS_MIT_EDU_BETTER_MOUSETRAP_MIT_EDU.draw AREA
+	cps_www.SCRIPTS_MIT_EDU_BETTER_MOUSETRAP_MIT_EDU.type DERIVE
+	cps_www.SCRIPTS_MIT_EDU_BETTER_MOUSETRAP_MIT_EDU.label SCRIPTS -> BETTER-MOUSETRAP
+	cps_www.SCRIPTS_MIT_EDU_BETTER_MOUSETRAP_MIT_EDU.max 1000
+	cps_www.SCRIPTS_MIT_EDU_BETTER_MOUSETRAP_MIT_EDU.min 0
+
+	cps_www.SCRIPTS_MIT_EDU_OLD_FAITHFUL_MIT_EDU.draw STACK
+	cps_www.SCRIPTS_MIT_EDU_OLD_FAITHFUL_MIT_EDU.type DERIVE
+	cps_www.SCRIPTS_MIT_EDU_OLD_FAITHFUL_MIT_EDU.label SCRIPTS -> OLD-FAITHFUL
+	cps_www.SCRIPTS_MIT_EDU_OLD_FAITHFUL_MIT_EDU.max 1000
+	cps_www.SCRIPTS_MIT_EDU_OLD_FAITHFUL_MIT_EDU.min 0
+
+	cps_www.SCRIPTS_MIT_EDU_SX_BLADE_4_MIT_EDU.draw STACK
+	cps_www.SCRIPTS_MIT_EDU_SX_BLADE_4_MIT_EDU.type DERIVE
+	cps_www.SCRIPTS_MIT_EDU_SX_BLADE_4_MIT_EDU.label SCRIPTS -> BEES-KNEES
+	cps_www.SCRIPTS_MIT_EDU_SX_BLADE_4_MIT_EDU.max 1000
+	cps_www.SCRIPTS_MIT_EDU_SX_BLADE_4_MIT_EDU.min 0
+
+	cps_www.SCRIPTS_VHOSTS_MIT_EDU_BETTER_MOUSETRAP_MIT_EDU.draw STACK
+	cps_www.SCRIPTS_VHOSTS_MIT_EDU_BETTER_MOUSETRAP_MIT_EDU.type DERIVE
+	cps_www.SCRIPTS_VHOSTS_MIT_EDU_BETTER_MOUSETRAP_MIT_EDU.label SCRIPTS-VHOSTS -> BETTER-MOUSETRAP
+	cps_www.SCRIPTS_VHOSTS_MIT_EDU_BETTER_MOUSETRAP_MIT_EDU.max 1000
+	cps_www.SCRIPTS_VHOSTS_MIT_EDU_BETTER_MOUSETRAP_MIT_EDU.min 0
+
+	cps_www.SCRIPTS_VHOSTS_MIT_EDU_OLD_FAITHFUL_MIT_EDU.draw STACK
+	cps_www.SCRIPTS_VHOSTS_MIT_EDU_OLD_FAITHFUL_MIT_EDU.type DERIVE
+	cps_www.SCRIPTS_VHOSTS_MIT_EDU_OLD_FAITHFUL_MIT_EDU.label SCRIPTS-VHOSTS -> OLD-FAITHFUL
+	cps_www.SCRIPTS_VHOSTS_MIT_EDU_OLD_FAITHFUL_MIT_EDU.max 1000
+	cps_www.SCRIPTS_VHOSTS_MIT_EDU_OLD_FAITHFUL_MIT_EDU.min 0
+
+##	cps_www.SCRIPTS_VHOSTS_MIT_EDU_SX_BLADE_4_MIT_EDU.draw STACK
+##	cps_www.SCRIPTS_VHOSTS_MIT_EDU_SX_BLADE_4_MIT_EDU.type DERIVE
+##	cps_www.SCRIPTS_VHOSTS_MIT_EDU_SX_BLADE_4_MIT_EDU.label SCRIPTS-VHOSTS -> BEES-KNEES
+##	cps_www.SCRIPTS_VHOSTS_MIT_EDU_SX_BLADE_4_MIT_EDU.max 1000
+##	cps_www.SCRIPTS_VHOSTS_MIT_EDU_SX_BLADE_4_MIT_EDU.min 0
+
+	cps_www.SCRIPTS_CERT_MIT_EDU_BETTER_MOUSETRAP_MIT_EDU.draw STACK
+	cps_www.SCRIPTS_CERT_MIT_EDU_BETTER_MOUSETRAP_MIT_EDU.type DERIVE
+	cps_www.SCRIPTS_CERT_MIT_EDU_BETTER_MOUSETRAP_MIT_EDU.label SCRIPTS-CERT -> BETTER-MOUSETRAP
+	cps_www.SCRIPTS_CERT_MIT_EDU_BETTER_MOUSETRAP_MIT_EDU.max 1000
+	cps_www.SCRIPTS_CERT_MIT_EDU_BETTER_MOUSETRAP_MIT_EDU.min 0
+
+	cps_www.SCRIPTS_CERT_MIT_EDU_OLD_FAITHFUL_MIT_EDU.draw STACK
+	cps_www.SCRIPTS_CERT_MIT_EDU_OLD_FAITHFUL_MIT_EDU.type DERIVE
+	cps_www.SCRIPTS_CERT_MIT_EDU_OLD_FAITHFUL_MIT_EDU.label SCRIPTS-CERT -> OLD-FAITHFUL
+	cps_www.SCRIPTS_CERT_MIT_EDU_OLD_FAITHFUL_MIT_EDU.max 1000
+	cps_www.SCRIPTS_CERT_MIT_EDU_OLD_FAITHFUL_MIT_EDU.min 0
+
+	cps_www.SCRIPTS_CERT_MIT_EDU_SX_BLADE_4_MIT_EDU.draw STACK
+	cps_www.SCRIPTS_CERT_MIT_EDU_SX_BLADE_4_MIT_EDU.type DERIVE
+	cps_www.SCRIPTS_CERT_MIT_EDU_SX_BLADE_4_MIT_EDU.label SCRIPTS-CERT -> BEES-KNEES
+	cps_www.SCRIPTS_CERT_MIT_EDU_SX_BLADE_4_MIT_EDU.max 1000
+	cps_www.SCRIPTS_CERT_MIT_EDU_SX_BLADE_4_MIT_EDU.min 0
+
+	cps_www.SCRIPTS_MIT_EDU_BETTER_MOUSETRAP_MIT_EDU.sum \
+		rack-forward:cps_www.SCRIPTS_MIT_EDU_BETTER_MOUSETRAP_MIT_EDU \
+		rack-backward:cps_www.SCRIPTS_MIT_EDU_BETTER_MOUSETRAP_MIT_EDU \
+		not-forward:cps_www.SCRIPTS_MIT_EDU_BETTER_MOUSETRAP_MIT_EDU \
+		not-backward:cps_www.SCRIPTS_MIT_EDU_BETTER_MOUSETRAP_MIT_EDU
+
+	cps_www.SCRIPTS_MIT_EDU_OLD_FAITHFUL_MIT_EDU.sum \
+		rack-forward:cps_www.SCRIPTS_MIT_EDU_OLD_FAITHFUL_MIT_EDU \
+		rack-backward:cps_www.SCRIPTS_MIT_EDU_OLD_FAITHFUL_MIT_EDU \
+		not-forward:cps_www.SCRIPTS_MIT_EDU_OLD_FAITHFUL_MIT_EDU \
+		not-backward:cps_www.SCRIPTS_MIT_EDU_OLD_FAITHFUL_MIT_EDU
+
+    cps_www.SCRIPTS_MIT_EDU_SX_BLADE_4_MIT_EDU.sum \
+        rack-forward:cps_www.SCRIPTS_MIT_EDU_SX_BLADE_4_MIT_EDU \
+        rack-backward:cps_www.SCRIPTS_MIT_EDU_SX_BLADE_4_MIT_EDU \
+        rack-forward:cps_www.SCRIPTS_MIT_EDU_BEES_KNEES_MIT_EDU
+
+	cps_www.SCRIPTS_VHOSTS_MIT_EDU_BETTER_MOUSETRAP_MIT_EDU.sum \
+		rack-forward:cps_www.SCRIPTS_VHOSTS_MIT_EDU_BETTER_MOUSETRAP_MIT_EDU \
+		rack-backward:cps_www.SCRIPTS_VHOSTS_MIT_EDU_BETTER_MOUSETRAP_MIT_EDU
+
+	cps_www.SCRIPTS_VHOSTS_MIT_EDU_OLD_FAITHFUL_MIT_EDU.sum \
+		rack-forward:cps_www.SCRIPTS_VHOSTS_MIT_EDU_OLD_FAITHFUL_MIT_EDU \
+		rack-backward:cps_www.SCRIPTS_VHOSTS_MIT_EDU_OLD_FAITHFUL_MIT_EDU
+
+##    cps_www.SCRIPTS_VHOSTS_MIT_EDU_SX_BLADE_4_MIT_EDU.sum \
+##        rack-forward:cps_www.SCRIPTS_VHOSTS_MIT_EDU_BEES_KNEES_MIT_EDU
+
+	cps_www.SCRIPTS_CERT_MIT_EDU_BETTER_MOUSETRAP_MIT_EDU.sum \
+		rack-forward:cps_www.SCRIPTS_CERT_MIT_EDU_BETTER_MOUSETRAP_MIT_EDU \
+		rack-backward:cps_www.SCRIPTS_CERT_MIT_EDU_BETTER_MOUSETRAP_MIT_EDU \
+		not-forward:cps_www.SCRIPTS_CERT_MIT_EDU_BETTER_MOUSETRAP_MIT_EDU \
+		not-backward:cps_www.SCRIPTS_CERT_MIT_EDU_BETTER_MOUSETRAP_MIT_EDU
+
+	cps_www.SCRIPTS_CERT_MIT_EDU_OLD_FAITHFUL_MIT_EDU.sum \
+		rack-forward:cps_www.SCRIPTS_CERT_MIT_EDU_OLD_FAITHFUL_MIT_EDU \
+		rack-backward:cps_www.SCRIPTS_CERT_MIT_EDU_OLD_FAITHFUL_MIT_EDU \
+		not-forward:cps_www.SCRIPTS_CERT_MIT_EDU_OLD_FAITHFUL_MIT_EDU \
+		not-backward:cps_www.SCRIPTS_CERT_MIT_EDU_OLD_FAITHFUL_MIT_EDU
+
+    cps_www.SCRIPTS_CERT_MIT_EDU_SX_BLADE_4_MIT_EDU.sum \
+        rack-forward:cps_www.SCRIPTS_CERT_MIT_EDU_SX_BLADE_4_MIT_EDU \
+        rack-backward:cps_www.SCRIPTS_CERT_MIT_EDU_SX_BLADE_4_MIT_EDU \
+        rack-forward:cps_www.SCRIPTS_CERT_MIT_EDU_BEES_KNEES_MIT_EDU
+
+	cps_www.graph_order SCRIPTS_MIT_EDU_BETTER_MOUSETRAP_MIT_EDU \
+			    SCRIPTS_MIT_EDU_OLD_FAITHFUL_MIT_EDU \
+			    SCRIPTS_MIT_EDU_SX_BLADE_4_MIT_EDU \
+			    SCRIPTS_VHOSTS_MIT_EDU_BETTER_MOUSETRAP_MIT_EDU \
+			    SCRIPTS_VHOSTS_MIT_EDU_OLD_FAITHFUL_MIT_EDU \
+			    SCRIPTS_CERT_MIT_EDU_BETTER_MOUSETRAP_MIT_EDU \
+			    SCRIPTS_CERT_MIT_EDU_OLD_FAITHFUL_MIT_EDU \
+			    SCRIPTS_CERT_MIT_EDU_SX_BLADE_4_MIT_EDU
+
+[linerva.mit.edu;linerva]
+	address 18.181.0.51
+	use_node_name yes
+
+[sipb-xen.mit.edu;black-mesa]
+	address 18.181.0.60
+	use_node_name yes
+
+[xvm-prod-sysvms.mit.edu;console]
+	address 18.181.0.134
+	use_node_name yes
+
+[xvm-prod-sysvms.mit.edu;remote]
+	address 18.181.0.188
+	use_node_name yes
+
+[xvm-prod-sysvms.mit.edu;xvm]
+	address 18.181.0.62
+	use_node_name yes
+
+[sipb-xen.mit.edu;sx-blade-2]
+	address 18.181.0.165
+	use_node_name yes
+
+[xvm-prod-hosts.mit.edu;citadel-station]
+	address 18.181.0.221
+	use_node_name yes
+
+[xvm-prod-hosts.mit.edu;aperture-science]
+	address 18.181.0.222
+	use_node_name yes
+
+[xvm-prod-hosts.mit.edu;shadow-moses]
+	address 18.181.0.223
+	use_node_name yes
+
+[xvm-prod-hosts.mit.edu;arklay-mansion]
+	address 18.181.0.224
+	use_node_name yes
+
+[lamp.mit.edu;lamp-www]
+	address 18.89.2.197
+	use_node_name yes
+
+[lamp.mit.edu;lamp-www2]
+	address 18.181.0.45
+	use_node_name yes
+
+[lamp.mit.edu;lamp-mp3]
+	address 18.181.0.45
+	port 24949
+
+[mit.edu;syn]
+	address 18.181.0.65
+	use_node_name yes
+
+[mit.edu;hodge-podge]
+	address 18.187.1.128
+	use_node_name yes
+	update no
+
+[sipb.mit.edu;ronald-ann]
+	address 18.181.0.23
+	use_node_name yes
+
+[sipb.mit.edu;rosebud2]
+	address 18.181.0.22
+	use_node_name yes
+
+[UPS;childrens-television-workshop]
+	address 18.181.0.65
+	use_node_name no
+
+[UPS;split-atom-blues]
+	address 18.181.0.65
+	use_node_name no
+
+[sipb-tor.mit.edu;sipb-tor]
+	address 18.187.1.68
+	use_node_name yes
Index: /tags/fc9-eol/noc/munin/plugins/afs_df_athena.mit.edu
===================================================================
--- /tags/fc9-eol/noc/munin/plugins/afs_df_athena.mit.edu	(revision 1257)
+++ /tags/fc9-eol/noc/munin/plugins/afs_df_athena.mit.edu	(revision 1257)
@@ -0,0 +1,1 @@
+link afs_df_sipb.mit.edu
Index: /tags/fc9-eol/noc/munin/plugins/afs_df_sipb.mit.edu
===================================================================
--- /tags/fc9-eol/noc/munin/plugins/afs_df_sipb.mit.edu	(revision 1257)
+++ /tags/fc9-eol/noc/munin/plugins/afs_df_sipb.mit.edu	(revision 1257)
@@ -0,0 +1,53 @@
+#!/bin/sh
+#
+# Script to monitor disk usage.
+#
+# Parameters understood:
+#
+# 	config   (required)
+# 	autoconf (optional - used by munin-config)
+#
+#
+#
+# Magic markers (optional - used by munin-config and installation
+# scripts):
+#
+#%# family=auto
+#%# capabilities=autoconf
+
+MAXLABEL=20
+
+CELL=`basename $0 | sed 's/^afs_df_//g'`
+
+if [ "$1" = "autoconf" ]; then
+	echo yes
+	exit 0
+fi
+
+clean_name() {
+    echo $1 | sed 's/[\/.-]/_/g'
+}
+
+
+if [ "$1" = "config" ]; then
+
+	echo 'graph_title '"$CELL"' partition usage (in %)'
+	echo 'graph_args --upper-limit 100 -l 0'
+	echo 'graph_vlabel %'
+	echo 'graph_category AFS'
+	echo 'graph_info This graph shows disk usage on the '"$CELL"' cell.'
+	fs df /afs/"$CELL"/service/partitions/* | grep '^disk.' | while read i; do
+	    name=`clean_name $i`
+	    echo -n "$name.label "
+	    echo $i | awk "{ print \$1; }"
+	    echo "$name.warning 90"
+	    echo "$name.critical 98"
+	done
+	exit 0
+fi
+
+fs df /afs/"$CELL"/service/partitions/* | grep '^disk.' | while read i; do
+	name=`clean_name $i`
+	echo -n "$name.value "
+	echo $i | awk '{ print $3/$2*100 }'
+done
Index: /tags/fc9-eol/noc/munin/plugins/cps_https
===================================================================
--- /tags/fc9-eol/noc/munin/plugins/cps_https	(revision 1257)
+++ /tags/fc9-eol/noc/munin/plugins/cps_https	(revision 1257)
@@ -0,0 +1,1 @@
+link cps_www
Index: /tags/fc9-eol/noc/munin/plugins/cps_www
===================================================================
--- /tags/fc9-eol/noc/munin/plugins/cps_www	(revision 1257)
+++ /tags/fc9-eol/noc/munin/plugins/cps_www	(revision 1257)
@@ -0,0 +1,263 @@
+#!/usr/bin/perl
+#
+# Plugin to monitor connections per second, for LVS loadbalancers.
+#
+# Magic name:
+#
+# 	cps_<port>
+# 	cps_<vip>_<port>
+#
+# Examples:
+#
+# 	cps_smtp
+# 	cps_mail.foo.boo_smtp
+# 	cps_pop3
+# 	cps_www.foo.boo_www
+# 	cps_vvv.foo.boo_www
+#
+# Parameters understood:
+#
+# 	config   (required)
+# 	autoconf (optional - used by munin-config)
+# 	suggest  (optional - used by munin-config)
+#
+# $Log$
+# Revision 1.8  2004/12/10 18:55:14  jimmyo
+# Removed hardcoded host_name in linux/cps_.
+#
+# Revision 1.7  2004/12/10 18:51:44  jimmyo
+# linux/apt* has been forced to LANG=C, to get predictable output.
+#
+# Revision 1.6  2004/12/10 11:48:42  jimmyo
+# linux/cps_ plugin now groks high numbers.
+#
+# Revision 1.5  2004/12/10 10:47:49  jimmyo
+# Change name from ${scale} to ${graph_period}, to be more consistent.
+#
+# Revision 1.4  2004/12/09 22:12:56  jimmyo
+# Added "graph_period" option, to make "graph_sums" usable.
+#
+# Revision 1.3  2004/11/21 00:16:57  jimmyo
+# Changed a lot of plugins so they use DERIVE instead of COUNTER.
+#
+# Revision 1.2  2004/05/20 19:02:37  jimmyo
+# Set categories on a bunch of plugins
+#
+# Revision 1.1  2004/01/02 18:50:01  jimmyo
+# Renamed occurrances of lrrd -> munin
+#
+# Revision 1.1.1.1  2004/01/02 15:18:07  jimmyo
+# Import of LRRD CVS tree after renaming to Munin
+#
+# Revision 1.4  2003/11/07 17:43:16  jimmyo
+# Cleanups and log entries
+#
+#
+#
+# Magic markers - optional - used by installation scripts and munin-config:
+#
+#%# family=manual
+#%# capabilities=autoconf suggest
+#
+
+use strict;
+
+if ( defined $ARGV[0] and $ARGV[0] eq "autoconf" )
+{
+	&autoconf ();
+}
+if ( defined $ARGV[0] and $ARGV[0] eq "suggest" )
+{
+	my $sipvs;
+	$sipvs = &ipvs (".", ".", $sipvs);
+	exit 0 if $sipvs == undef;
+	&suggest ($sipvs);
+}
+
+unless ($0 =~ /cps(?:_([^_]+)|)_(.+)\s*$/)
+{
+	die "Could not parse name $0.\n";
+}
+my $vip  = $1;
+my $port = $2;
+my $ipvs;
+
+#print "Name: $0\nPort: $port\nVip : $vip\n";
+
+# Read ipvsadm-output
+
+$ipvs = &ipvs ($vip, $port, $ipvs);
+
+if ( defined $ARGV[0] and $ARGV[0] eq "dump" )
+{
+	use Data::Dumper;
+	print Dumper($ipvs);
+}
+
+if ( defined $ARGV[0] and $ARGV[0] eq "config" )
+{
+        &config ($vip, $port, $ipvs);
+}
+
+$vip = $vip || "";
+if (exists ($ipvs->{$vip}) and exists ($ipvs->{$vip}->{$port}))
+{
+	foreach my $host (sort keys %{$ipvs->{$vip}->{$port}})
+	{
+		(my $fname = $host) =~ s/[.-]/_/g;
+		print "$fname.value ", $ipvs->{$vip}->{$port}->{$host}, "\n";;
+	}
+}
+else
+{
+	foreach my $vip (sort keys %{$ipvs})
+	{
+		foreach my $host (sort keys %{$ipvs->{$vip}->{$port}})
+		{
+			(my $fname = ($vip . "-" . $host)) =~ s/[.-]/_/g;
+			print "$fname.value ", $ipvs->{$vip}->{$port}->{$host}, "\n";;
+		}
+	}
+}
+
+sub autoconf
+{
+	system ("/sbin/ipvsadm -L --stats >/dev/null 2>/dev/null");
+
+	if ($? == 0)
+	{
+		print "yes\n";
+		exit 0;
+	}
+	elsif (($?>>8) == 2)
+	{
+		print "no (permission denied)\n";
+		exit 1;
+	}
+	elsif ($? == 127)
+	{
+		print "no (ipvsadm not found)\n";
+		exit 1;
+	}
+	else
+	{
+		print "no\n";
+		exit 1;
+	}
+}
+sub suggest
+{
+	my $ipvs = shift;
+	exit 0 unless $ipvs;
+
+	foreach my $vip (sort keys %{$ipvs})
+	{
+		foreach my $port (sort keys %{$ipvs->{$vip}})
+		{
+			print "cps_${vip}_$port\n";
+		}
+	}
+	exit 0;
+}
+
+sub config
+{
+	my $vip  = shift;
+	my $port = shift;
+	my $ipvs = shift;
+
+	print "graph_title Loadbalanced ",($vip?$vip:"*"),"->",$port," connections\n";
+	print "graph_args -l 0\n";
+	print "graph_total total\n";
+	print "graph_vlabel connections / \${graph_period}\n";
+	print "graph_category network\n";
+	my $first=1;
+	$vip = $vip || "";
+	if (exists ($ipvs->{$vip}) and exists ($ipvs->{$vip}->{$port}))
+	{
+		foreach my $host (sort keys %{$ipvs->{$vip}->{$port}})
+		{
+			(my $fname = $host) =~ s/[.-]/_/g;
+			if ( $first == 1 )
+			{
+				print "$fname.draw AREA\n";
+				$first=0
+			}
+			else
+			{
+				print "$fname.draw STACK\n";
+			}
+			print "$fname.type DERIVE\n";
+			$host =~ s/-bak//;
+			print "$fname.label $host\n";
+			print "$fname.max 1000\n";
+			print "$fname.min 0\n";
+		}
+	}
+	else
+	{
+		foreach my $vip (reverse sort keys %{$ipvs})
+		{
+			foreach my $host (sort keys %{$ipvs->{$vip}->{$port}})
+			{
+				(my $fname = ($vip . "-" . $host)) =~ s/[.-]/_/g;
+				if ( $first == 1 )
+				{
+					print "$fname.draw AREA\n";
+					$first=0
+				}
+				else
+				{
+					print "$fname.draw STACK\n";
+				}
+				print "$fname.type DERIVE\n";
+				$host =~ s/-bak//;
+				my $label = "$vip -> $host";
+				$label =~ s/\.MIT\.EDU//g;
+				print "$fname.label $label\n";
+				print "$fname.max 1000\n";
+				print "$fname.min 0\n";
+			}
+		}
+	}
+	exit 0;
+}
+
+sub ipvs
+{
+	my $vip  = shift;
+	my $port = shift;
+	my $ipvs = shift;
+	open (IPVS, "/sbin/ipvsadm -L --stats 2>/dev/null|") or return undef;
+	my $cvip  = "";
+	my $cport = "";
+	while (<IPVS>)
+	{
+		next if /^IP Virtual Server/;
+		next if /^Prot\s+LocalAddress/;
+		if (/^(\w+)\s+([\w\.-]+):([\w\d]+)\s+(\d+)[KMG]?\s+/)
+		{
+			$cvip  = $2;
+			$cport = $3;
+		}
+		elsif (/^\s+->\s+([^:]+):(\S+)\s+(\d+)G\s+/)
+		{
+			$ipvs->{$cvip}->{$cport}->{$1} += ($3*1000000000);
+		}
+		elsif (/^\s+->\s+([^:]+):(\S+)\s+(\d+)M\s+/)
+		{
+			$ipvs->{$cvip}->{$cport}->{$1} += ($3*1000000);
+		}
+		elsif (/^\s+->\s+([^:]+):(\S+)\s+(\d+)K\s+/)
+		{
+			$ipvs->{$cvip}->{$cport}->{$1} += ($3*1000);
+		}
+		elsif (/^\s+->\s+([^:]+):(\S+)\s+(\d+)\s+/)
+		{
+			$ipvs->{$cvip}->{$cport}->{$1} += $3;
+		}
+	}
+	close (IPVS) or return undef;
+	return $ipvs;
+}
+# vim:syntax=perl
Index: /tags/fc9-eol/noc/munin/templates/definitions.html
===================================================================
--- /tags/fc9-eol/noc/munin/templates/definitions.html	(revision 1257)
+++ /tags/fc9-eol/noc/munin/templates/definitions.html	(revision 1257)
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
+          "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+<head>
+  <link rel="stylesheet" href="style.css" type="text/css" /> 
+  <meta http-equiv="refresh" content="300" />
+  <title>Munin :: definitions</title>
+  <meta http-equiv="content-type" content="application/xhtml+xml; charset=iso-8859-1" />
+  <meta name="author" content="Jimmy Olsen" />
+</head>
+<body> 
+ <table cellpadding="3" border="0">
+  <tr>
+     <td><div class="logo">&nbsp;</div></td>
+     <td valign="top"><h1>Definition of terms used in Munin</h1></td>
+    </tr>
+ </table>
+ <div class="box">
+ <table cellpadding="2" cellspacing="4" border="0">
+   <tr>
+     <td valign="top" align="left"><a id="data_types">Data&nbsp;types:</a></td>
+   </tr>
+   <tr>
+     <td colspan="2"><hr class="ruler" /></td>
+   </tr>
+   <tr>
+     <td valign="top" align="left">&ndash;&nbsp;<a id="gauge">Gauge</a></td>
+	 <td valign="top" align="left">A data source of type gauge shows the state of the data source at the
+	 exact moment that Munin is run (every 5 minutes). Any peaks in-between data gatherings, will not be in
+	 the graph.</td>
+   </tr>
+   <tr>
+     <td valign="top" align="left">&ndash;&nbsp;<a id="counter">Counter</a></td>
+	 <td valign="top" align="left">A data source of type counter shows the state of the data source as an
+	 average between two plots (i.e. 5 minutes). Short peaks will therefore be hard to spot, but long peaks
+	 will be spottable, even though it occurs between plots.</td>
+   </tr>
+   <tr>
+     <td valign="top" align="left">&ndash;&nbsp;<a id="derive">Derive</a></td>
+	 <td valign="top" align="left">For the purposes of viewing data, the derive type works the same way as a
+	 counter</td>
+   </tr>
+   <tr>
+     <td valign="top" align="left">&ndash;&nbsp;<a id="absolute">Absolute</a></td>
+	 <td valign="top" align="left">Absolute works much as a counter, with the exception that it is assumed
+	 that the counter value is set to 0 upon each read of it. It's not a good idea to run these plugins by
+	 hand in-between Munin runs, since Munin won't receive all the data it expects.</td>
+   </tr>
+   <tr>
+     <td colspan="2"><hr class="ruler2" /></td>
+   </tr>
+   <tr>
+     <td valign="top" align="left"></td>
+   </tr>
+ </table>
+ </div>
+<table cellpadding="2" cellspacing="4" border="0">        
+  <tr>
+    <td><i class="small"><a href="http://www.linpro.no/projects/munin/">Munin</a></i></td>
+  </tr>
+</table>
+</body>
+</html>
Index: /tags/fc9-eol/noc/munin/templates/munin-comparison-day.tmpl
===================================================================
--- /tags/fc9-eol/noc/munin/templates/munin-comparison-day.tmpl	(revision 1257)
+++ /tags/fc9-eol/noc/munin/templates/munin-comparison-day.tmpl	(revision 1257)
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
+          "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+<head>
+  <link rel="stylesheet" href="../style.css" type="text/css" /> 
+  <meta http-equiv="refresh" content="300" />
+  <title>Munin :: <TMPL_VAR ESCAPE="HTML" NAME="DOMAIN"> :: day</title>
+  <meta http-equiv="content-type" content="application/xhtml+xml; charset=iso-8859-1" />
+  <meta name="author" content="Auto-generated by Munin" />
+</head>
+<body>
+<table cellpadding="3" border="0">
+  <tr>
+    <td rowspan="2"><div class="logo">&nbsp;</div></td>
+    <td valign="top">
+      <h2><a href="../index.html">Overview</a> :: <a href="index.html">
+      <TMPL_VAR ESCAPE="HTML" NAME="DOMAIN"></a> :: [ day <a href="comparison-week.html">week</a> <a href="comparison-month.html">month</a> <a href="comparison-year.html">year</a> ]</h2>
+    </td>    
+  </tr>
+  <tr>
+    <td valign="top">
+      <h2><TMPL_VAR ESCAPE="HTML" NAME="DOMAIN"> :: [ <TMPL_LOOP NAME="CATEGORIES"><a <TMPL_IF NAME="STATE_WARNING">class="warn"</TMPL_IF> <TMPL_IF NAME="STATE_CRITICAL">class="crit"</TMPL_IF> href="#<TMPL_VAR ESCAPE="HTML" NAME="NAME">"><TMPL_VAR ESCAPE="HTML" NAME="NAME"></a> </TMPL_LOOP>]</h2>
+    </td>
+  </tr>
+</table>
+
+<table class="invisiblebox">
+  <tr><td>
+    <hr class="ruler" />
+  </td></tr>
+
+  <TMPL_LOOP NAME="CATEGORIES">
+  <tr><td class="graphbox" id="<TMPL_VAR ESCAPE="HTML" NAME="NAME">">
+  <table>
+      <!-- <a id="<TMPL_VAR ESCAPE="HTML" NAME="NAME">">&nbsp;</a> -->
+        <tr><td colspan="<TMPL_VAR NAME="numnodes">"><h3 class="nobottom"> <TMPL_VAR ESCAPE="HTML" NAME="NAME"></h3></td></tr>
+        <tr><td colspan="<TMPL_VAR NAME="numnodes">"><hr class="ruler2" /></td></tr>
+        <TMPL_LOOP NAME="SERVICES">
+          <tr>
+		    <TMPL_LOOP NAME="NODES">
+            <td valign="top">
+			<table class="invisiblebox">
+			  <tr><td colspan="2"></td></tr>
+			  <tr><td colspan="2"><div class="lighttext"><TMPL_VAR ESCAPE="HTML" NAME="NODE"> :: <TMPL_IF NAME="URL"><a <TMPL_IF NAME="STATE_WARNING">class="warn"</TMPL_IF> <TMPL_IF NAME="STATE_CRITICAL">class="crit"</TMPL_IF> href="<TMPL_VAR NAME="URL">"></TMPL_IF><TMPL_VAR ESCAPE="HTML" NAME="LABEL"><TMPL_IF NAME="URL"></a></TMPL_IF></div></td></tr>
+			  <tr><td>
+			<a title="<TMPL_VAR ESCAPE="HTML" NAME="LABEL">"/><TMPL_IF NAME="IMGDAY"><a href="<TMPL_VAR NAME="URL">"><img src="<TMPL_VAR NAME="IMGDAY">" alt="<TMPL_VAR ESCAPE="HTML" NAME="LABEL">" <TMPL_IF NAME="IMGDAYWIDTH">width="<TMPL_VAR NAME="IMGDAYWIDTH">" </TMPL_IF> <TMPL_IF NAME="IMGDAYHEIGHT">height="<TMPL_VAR NAME="IMGDAYHEIGHT">"</TMPL_IF>/></a></TMPL_IF>
+			</td></tr>
+			</table>
+			</td>
+			</TMPL_LOOP>
+          </tr>
+        </TMPL_LOOP>
+	</table>
+  </td></tr>
+
+  <tr><td></td></tr>
+
+  </TMPL_LOOP>
+  <tr><td class="linkbox">
+ <TMPL_LOOP NAME="DOMAINS">
+<a href="../<TMPL_VAR NAME="DOMAIN">/index.html"><TMPL_VAR ESCAPE="HTML" NAME="DOMAIN"></a> :
+    </TMPL_LOOP>
+ </td></tr>
+</table>
+
+ <table cellpadding="2" cellspacing="4" border="0">        
+  <tr>
+    <td><i class="small">This page was generated by <a href="http://munin.sourceforge.net/">Munin</a> version 1.2.5 at <TMPL_VAR NAME="TIMESTAMP"></i></td>
+  </tr>
+ </table>
+</body>
+</html>
Index: /tags/fc9-eol/noc/munin/templates/munin-comparison-month.tmpl
===================================================================
--- /tags/fc9-eol/noc/munin/templates/munin-comparison-month.tmpl	(revision 1257)
+++ /tags/fc9-eol/noc/munin/templates/munin-comparison-month.tmpl	(revision 1257)
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
+          "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+<head>
+  <link rel="stylesheet" href="../style.css" type="text/css" /> 
+  <meta http-equiv="refresh" content="300" />
+  <title>Munin :: <TMPL_VAR ESCAPE="HTML" NAME="DOMAIN"> :: month</title>
+  <meta http-equiv="content-type" content="application/xhtml+xml; charset=iso-8859-1" />
+  <meta name="author" content="Auto-generated by Munin" />
+</head>
+<body>
+<table cellpadding="3" border="0">
+  <tr>
+    <td rowspan="2"><div class="logo">&nbsp;</div></td>
+    <td valign="top">
+      <h2><a href="../index.html">Overview</a> :: <a href="index.html">
+      <TMPL_VAR ESCAPE="HTML" NAME="DOMAIN"></a> :: [ <a href="comparison-day.html">day</a> <a href="comparison-week.html">week</a> month <a href="comparison-year.html">year</a> ]</h2>
+    </td>    
+  </tr>
+  <tr>
+    <td valign="top">
+      <h2><TMPL_VAR ESCAPE="HTML" NAME="DOMAIN"> :: [ <TMPL_LOOP NAME="CATEGORIES"><a <TMPL_IF NAME="STATE_WARNING">class="warn"</TMPL_IF> <TMPL_IF NAME="STATE_CRITICAL">class="crit"</TMPL_IF> href="#<TMPL_VAR ESCAPE="HTML" NAME="NAME">"><TMPL_VAR ESCAPE="HTML" NAME="NAME"></a> </TMPL_LOOP>]</h2>
+    </td>
+  </tr>
+</table>
+
+<table class="invisiblebox">
+  <tr><td>
+    <hr class="ruler" />
+  </td></tr>
+
+  <TMPL_LOOP NAME="CATEGORIES">
+  <tr><td class="graphbox" id="<TMPL_VAR ESCAPE="HTML" NAME="NAME">">
+  <table>
+      <!-- <a id="<TMPL_VAR ESCAPE="HTML" NAME="NAME">">&nbsp;</a> -->
+        <tr><td colspan="<TMPL_VAR NAME="numnodes">"><h3 class="nobottom"> <TMPL_VAR ESCAPE="HTML" NAME="NAME"></h3></td></tr>
+        <tr><td colspan="<TMPL_VAR NAME="numnodes">"><hr class="ruler2" /></td></tr>
+        <TMPL_LOOP NAME="SERVICES">
+          <tr>
+		    <TMPL_LOOP NAME="NODES">
+            <td valign="top">
+			<table class="invisiblebox">
+			  <tr><td colspan="2"></td></tr>
+			  <tr><td colspan="2"><div class="lighttext"><TMPL_VAR ESCAPE="HTML" NAME="NODE"> :: <TMPL_IF NAME="URL"><a <TMPL_IF NAME="STATE_WARNING">class="warn"</TMPL_IF> <TMPL_IF NAME="STATE_CRITICAL">class="crit"</TMPL_IF> href="<TMPL_VAR NAME="URL">"></TMPL_IF><TMPL_VAR ESCAPE="HTML" NAME="LABEL"><TMPL_IF NAME="URL"></a></TMPL_IF></div></td></tr>
+			  <tr><td>
+			<a title="<TMPL_VAR ESCAPE="HTML" NAME="LABEL">"/><TMPL_IF NAME="IMGMONTH"><a href="<TMPL_VAR NAME="URL">"><img src="<TMPL_VAR NAME="IMGMONTH">" alt="<TMPL_VAR ESCAPE="HTML" NAME="LABEL">" <TMPL_IF NAME="IMGMONTHWIDTH">width="<TMPL_VAR NAME="IMGMONTHWIDTH">" </TMPL_IF> <TMPL_IF NAME="IMGMONTHHEIGHT">height="<TMPL_VAR NAME="IMGMONTHHEIGHT">"</TMPL_IF>/></a></TMPL_IF>
+			</td></tr>
+			</table>
+			</td>
+			</TMPL_LOOP>
+          </tr>
+        </TMPL_LOOP>
+	</table>
+  </td></tr>
+
+  <tr><td></td></tr>
+
+  </TMPL_LOOP>
+  <tr><td class="linkbox">
+ <TMPL_LOOP NAME="DOMAINS">
+<a href="../<TMPL_VAR NAME="DOMAIN">/index.html"><TMPL_VAR ESCAPE="HTML" NAME="DOMAIN"></a> :
+    </TMPL_LOOP>
+ </td></tr>
+</table>
+
+ <table cellpadding="2" cellspacing="4" border="0">        
+  <tr>
+    <td><i class="small">This page was generated by <a href="http://munin.sourceforge.net/">Munin</a> version 1.2.5 at <TMPL_VAR NAME="TIMESTAMP"></i></td>
+  </tr>
+ </table>
+</body>
+</html>
Index: /tags/fc9-eol/noc/munin/templates/munin-comparison-week.tmpl
===================================================================
--- /tags/fc9-eol/noc/munin/templates/munin-comparison-week.tmpl	(revision 1257)
+++ /tags/fc9-eol/noc/munin/templates/munin-comparison-week.tmpl	(revision 1257)
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
+          "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+<head>
+  <link rel="stylesheet" href="../style.css" type="text/css" /> 
+  <meta http-equiv="refresh" content="300" />
+  <title>Munin :: <TMPL_VAR ESCAPE="HTML" NAME="DOMAIN"> :: week</title>
+  <meta http-equiv="content-type" content="application/xhtml+xml; charset=iso-8859-1" />
+  <meta name="author" content="Auto-generated by Munin" />
+</head>
+<body>
+<table cellpadding="3" border="0">
+  <tr>
+    <td rowspan="2"><div class="logo">&nbsp;</div></td>
+    <td valign="top">
+      <h2><a href="../index.html">Overview</a> :: <a href="index.html">
+      <TMPL_VAR ESCAPE="HTML" NAME="DOMAIN"></a> :: [ <a href="comparison-day.html">day</a> week <a href="comparison-month.html">month</a> <a href="comparison-year.html">year</a> ]</h2>
+    </td>    
+  </tr>
+  <tr>
+    <td valign="top">
+      <h2><TMPL_VAR ESCAPE="HTML" NAME="DOMAIN"> :: [ <TMPL_LOOP NAME="CATEGORIES"><a <TMPL_IF NAME="STATE_WARNING">class="warn"</TMPL_IF> <TMPL_IF NAME="STATE_CRITICAL">class="crit"</TMPL_IF> href="#<TMPL_VAR ESCAPE="HTML" NAME="NAME">"><TMPL_VAR ESCAPE="HTML" NAME="NAME"></a> </TMPL_LOOP>]</h2>
+    </td>
+  </tr>
+</table>
+
+<table class="invisiblebox">
+  <tr><td>
+    <hr class="ruler" />
+  </td></tr>
+
+  <TMPL_LOOP NAME="CATEGORIES">
+  <tr><td class="graphbox" id="<TMPL_VAR ESCAPE="HTML" NAME="NAME">">
+  <table>
+      <!-- <a id="<TMPL_VAR ESCAPE="HTML" NAME="NAME">">&nbsp;</a> -->
+        <tr><td colspan="<TMPL_VAR NAME="numnodes">"><h3 class="nobottom"> <TMPL_VAR ESCAPE="HTML" NAME="NAME"></h3></td></tr>
+        <tr><td colspan="<TMPL_VAR NAME="numnodes">"><hr class="ruler2" /></td></tr>
+        <TMPL_LOOP NAME="SERVICES">
+          <tr>
+		    <TMPL_LOOP NAME="NODES">
+            <td valign="top">
+			<table class="invisiblebox">
+			  <tr><td colspan="2"></td></tr>
+			  <tr><td colspan="2"><div class="lighttext"><TMPL_VAR ESCAPE="HTML" NAME="NODE"> :: <TMPL_IF NAME="URL"><a <TMPL_IF NAME="STATE_WARNING">class="warn"</TMPL_IF> <TMPL_IF NAME="STATE_CRITICAL">class="crit"</TMPL_IF> href="<TMPL_VAR NAME="URL">"></TMPL_IF><TMPL_VAR ESCAPE="HTML" NAME="LABEL"><TMPL_IF NAME="URL"></a></TMPL_IF></div></td></tr>
+			  <tr><td>
+			<a title="<TMPL_VAR ESCAPE="HTML" NAME="LABEL">"/><TMPL_IF NAME="IMGWEEK"><a href="<TMPL_VAR NAME="URL">"><img src="<TMPL_VAR NAME="IMGWEEK">" alt="<TMPL_VAR ESCAPE="HTML" NAME="LABEL">" <TMPL_IF NAME="IMGWEEKWIDTH">width="<TMPL_VAR NAME="IMGWEEKWIDTH">" </TMPL_IF> <TMPL_IF NAME="IMGWEEKHEIGHT">height="<TMPL_VAR NAME="IMGWEEKHEIGHT">"</TMPL_IF>/></a></TMPL_IF>
+			</td></tr>
+			</table>
+			</td>
+			</TMPL_LOOP>
+          </tr>
+        </TMPL_LOOP>
+	</table>
+  </td></tr>
+
+  <tr><td></td></tr>
+
+  </TMPL_LOOP>
+  <tr><td class="linkbox">
+ <TMPL_LOOP NAME="DOMAINS">
+<a href="../<TMPL_VAR NAME="DOMAIN">/index.html"><TMPL_VAR ESCAPE="HTML" NAME="DOMAIN"></a> :
+    </TMPL_LOOP>
+ </td></tr>
+</table>
+
+ <table cellpadding="2" cellspacing="4" border="0">        
+  <tr>
+    <td><i class="small">This page was generated by <a href="http://munin.sourceforge.net/">Munin</a> version 1.2.5 at <TMPL_VAR NAME="TIMESTAMP"></i></td>
+  </tr>
+ </table>
+</body>
+</html>
Index: /tags/fc9-eol/noc/munin/templates/munin-comparison-year.tmpl
===================================================================
--- /tags/fc9-eol/noc/munin/templates/munin-comparison-year.tmpl	(revision 1257)
+++ /tags/fc9-eol/noc/munin/templates/munin-comparison-year.tmpl	(revision 1257)
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
+          "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+<head>
+  <link rel="stylesheet" href="../style.css" type="text/css" /> 
+  <meta http-equiv="refresh" content="300" />
+  <title>Munin :: <TMPL_VAR ESCAPE="HTML" NAME="DOMAIN"> :: year</title>
+  <meta http-equiv="content-type" content="application/xhtml+xml; charset=iso-8859-1" />
+  <meta name="author" content="Auto-generated by Munin" />
+</head>
+<body>
+<table cellpadding="3" border="0">
+  <tr>
+    <td rowspan="2"><div class="logo">&nbsp;</div></td>
+    <td valign="top">
+      <h2><a href="../index.html">Overview</a> :: <a href="index.html">
+      <TMPL_VAR ESCAPE="HTML" NAME="DOMAIN"></a> :: [ <a href="comparison-day.html">day</a> <a href="comparison-week.html">week</a> <a href="comparison-month.html">month</a> year ]</h2>
+    </td>    
+  </tr>
+  <tr>
+    <td valign="top">
+      <h2><TMPL_VAR ESCAPE="HTML" NAME="DOMAIN"> :: [ <TMPL_LOOP NAME="CATEGORIES"><a <TMPL_IF NAME="STATE_WARNING">class="warn"</TMPL_IF> <TMPL_IF NAME="STATE_CRITICAL">class="crit"</TMPL_IF> href="#<TMPL_VAR ESCAPE="HTML" NAME="NAME">"><TMPL_VAR ESCAPE="HTML" NAME="NAME"></a> </TMPL_LOOP>]</h2>
+    </td>
+  </tr>
+</table>
+
+<table class="invisiblebox">
+  <tr><td>
+    <hr class="ruler" />
+  </td></tr>
+
+  <TMPL_LOOP NAME="CATEGORIES">
+  <tr><td class="graphbox" id="<TMPL_VAR ESCAPE="HTML" NAME="NAME">">
+  <table>
+      <!-- <a id="<TMPL_VAR ESCAPE="HTML" NAME="NAME">">&nbsp;</a> -->
+        <tr><td colspan="<TMPL_VAR NAME="numnodes">"><h3 class="nobottom"> <TMPL_VAR ESCAPE="HTML" NAME="NAME"></h3></td></tr>
+        <tr><td colspan="<TMPL_VAR NAME="numnodes">"><hr class="ruler2" /></td></tr>
+        <TMPL_LOOP NAME="SERVICES">
+          <tr>
+		    <TMPL_LOOP NAME="NODES">
+            <td valign="top">
+			<table class="invisiblebox">
+			  <tr><td colspan="2"></td></tr>
+			  <tr><td colspan="2"><div class="lighttext"><TMPL_VAR ESCAPE="HTML" NAME="NODE"> :: <TMPL_IF NAME="URL"><a <TMPL_IF NAME="STATE_WARNING">class="warn"</TMPL_IF> <TMPL_IF NAME="STATE_CRITICAL">class="crit"</TMPL_IF> href="<TMPL_VAR NAME="URL">"></TMPL_IF><TMPL_VAR ESCAPE="HTML" NAME="LABEL"><TMPL_IF NAME="URL"></a></TMPL_IF></div></td></tr>
+			  <tr><td>
+			<a title="<TMPL_VAR ESCAPE="HTML" NAME="LABEL">"/><TMPL_IF NAME="IMGYEAR"><a href="<TMPL_VAR NAME="URL">"><img src="<TMPL_VAR NAME="IMGYEAR">" alt="<TMPL_VAR ESCAPE="HTML" NAME="LABEL">" <TMPL_IF NAME="IMGYEARWIDTH">width="<TMPL_VAR NAME="IMGYEARWIDTH">" </TMPL_IF> <TMPL_IF NAME="IMGYEARHEIGHT">height="<TMPL_VAR NAME="IMGYEARHEIGHT">"</TMPL_IF>/></a></TMPL_IF>
+			</td></tr>
+			</table>
+			</td>
+			</TMPL_LOOP>
+          </tr>
+        </TMPL_LOOP>
+	</table>
+  </td></tr>
+
+  <tr><td></td></tr>
+
+  </TMPL_LOOP>
+  <tr><td class="linkbox">
+ <TMPL_LOOP NAME="DOMAINS">
+<a href="../<TMPL_VAR NAME="DOMAIN">/index.html"><TMPL_VAR ESCAPE="HTML" NAME="DOMAIN"></a> :
+    </TMPL_LOOP>
+ </td></tr>
+</table>
+
+ <table cellpadding="2" cellspacing="4" border="0">        
+  <tr>
+    <td><i class="small">This page was generated by <a href="http://munin.sourceforge.net/">Munin</a> version 1.2.5 at <TMPL_VAR NAME="TIMESTAMP"></i></td>
+  </tr>
+ </table>
+</body>
+</html>
Index: /tags/fc9-eol/noc/munin/templates/munin-domainview.tmpl
===================================================================
--- /tags/fc9-eol/noc/munin/templates/munin-domainview.tmpl	(revision 1257)
+++ /tags/fc9-eol/noc/munin/templates/munin-domainview.tmpl	(revision 1257)
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
+          "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+<head>
+  <link rel="stylesheet" href="../style.css" type="text/css" /> 
+  <meta http-equiv="refresh" content="300" />
+  <title>Munin :: <TMPL_VAR NAME="DOMAIN"></title>
+  <meta http-equiv="content-type" content="application/xhtml+xml; charset=iso-8859-1" />
+  <meta name="author" content="Auto-generated by Munin" />
+</head>
+<body> 
+<table cellpadding="3" border="0">
+  <tr>
+    <td rowspan="2"><div class="logo">&nbsp;</div></td>
+    <td valign="top">
+         <h2><a href="../index.html">Overview</a> :: <TMPL_VAR ESCAPE="HTML" NAME="DOMAIN"></h2>
+    </td>    
+  </tr>
+  <TMPL_IF NAME="COMPARE">
+  <tr>
+    <td valign="top">
+      <h2><TMPL_VAR ESCAPE="HTML" NAME="DOMAIN"> :: [ <a href="comparison-day.html">day</a> <a href="comparison-week.html">week</a> <a href="comparison-month.html">month</a> <a href="comparison-year.html">year</a> ]</h2>
+    </td>
+  </tr></TMPL_IF>
+</table>
+
+ <table class="largeinvisiblebox">
+ <tr>
+   <td class="linkbox">
+ <ul>	
+  <TMPL_LOOP NAME="NODES">
+  <li><span class="domain"><a href="<TMPL_VAR NAME="NODE">.html"><TMPL_VAR ESCAPE="HTML" NAME="NODE"></a></span>
+      <ul>
+	<TMPL_LOOP NAME="CATEGORIES">
+      <li><span class="domain"><a href="<TMPL_VAR NAME="NODE">.html#<TMPL_VAR NAME="NAME">"><TMPL_VAR ESCAPE="HTML" NAME="NAME"></a></span>
+      <ul>
+	<TMPL_LOOP NAME="SERVICES">
+	<li><span class="host"><a <TMPL_IF NAME="STATE_WARNING">class="warn"</TMPL_IF> <TMPL_IF NAME="STATE_CRITICAL">class="crit"</TMPL_IF> href="<TMPL_VAR NAME="NODE">-<TMPL_VAR NAME="SERVICE">.html"><TMPL_VAR ESCAPE="HTML" NAME="LABEL"></a></span></li>
+        </TMPL_LOOP> 
+      </ul>
+   </li>
+   </TMPL_LOOP>
+      </ul>
+   </li>
+   </TMPL_LOOP>
+ </ul>
+ </td></tr>
+ <tr><td></td></tr>
+ <tr>
+   <td class="linkbox">
+ <TMPL_LOOP NAME="DOMAINS">
+<a href="../<TMPL_VAR NAME="DOMAIN">/index.html"><TMPL_VAR NAME="DOMAIN"></a> :
+    </TMPL_LOOP>
+ </td>
+ </tr>
+ </table>
+ <table cellpadding="2" cellspacing="4" border="0">        
+  <tr>
+    <td><i class="small">This page was generated by <a href="http://munin.sourceforge.net/">Munin</a> version 1.2.5 at <TMPL_VAR NAME="TIMESTAMP"></i></td>
+  </tr>
+ </table>
+</body>
+</html>
Index: /tags/fc9-eol/noc/munin/templates/munin-nodeview.tmpl
===================================================================
--- /tags/fc9-eol/noc/munin/templates/munin-nodeview.tmpl	(revision 1257)
+++ /tags/fc9-eol/noc/munin/templates/munin-nodeview.tmpl	(revision 1257)
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
+          "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+<head>
+  <link rel="stylesheet" href="../style.css" type="text/css" /> 
+  <meta http-equiv="refresh" content="300" />
+  <title>Munin :: <TMPL_VAR ESCAPE="HTML" NAME="DOMAIN"> :: <TMPL_VAR ESCAPE="HTML" NAME="NODE"></title>
+  <meta http-equiv="content-type" content="application/xhtml+xml; charset=iso-8859-1" />
+  <meta name="author" content="Auto-generated by Munin" />
+</head>
+<body>
+<table cellpadding="3" border="0">
+  <tr>
+    <td rowspan="2"><div class="logo">&nbsp;</div></td>
+    <td valign="top">
+      <h2><a href="../index.html">Overview</a> :: <a href="index.html">
+      <TMPL_VAR ESCAPE="HTML" NAME="DOMAIN"></a> :: <TMPL_VAR ESCAPE="HTML" NAME="NODE"></h2>
+    </td>    
+  </tr>
+  <tr>
+    <td valign="top">
+      <h2><TMPL_VAR NAME="NODE"> :: [ <TMPL_LOOP NAME="CATEGORIES"><a <TMPL_IF NAME="STATE_WARNING">class="warn"</TMPL_IF> <TMPL_IF NAME="STATE_CRITICAL">class="crit"</TMPL_IF> href="#<TMPL_VAR ESCAPE="HTML" NAME="NAME">"><TMPL_VAR ESCAPE="HTML" NAME="NAME"></a> </TMPL_LOOP>]</h2>
+    </td>
+  </tr>
+</table>
+
+<table class="invisiblebox">
+  <tr><td>
+    <hr class="ruler" />
+  </td></tr>
+
+  <TMPL_LOOP NAME="CATEGORIES">
+  <tr><td class="graphbox" id="<TMPL_VAR ESCAPE="HTML" NAME="NAME">">
+  <table>
+      <!-- <a id="<TMPL_VAR ESCAPE="HTML" NAME="NAME">">&nbsp;</a> -->
+        <tr><td colspan="2"><h3 class="nobottom"> <TMPL_VAR ESCAPE="HTML" NAME="NAME"></h3></td></tr>
+        <tr><td colspan="2"><hr class="ruler2" /></td></tr>
+        <TMPL_LOOP NAME="SERVICES">
+		  <tr><td></td></tr>
+		  <tr><td><div class="lighttext">:: <a <TMPL_IF NAME="STATE_WARNING">class="warn"</TMPL_IF> <TMPL_IF NAME="STATE_CRITICAL">class="crit"</TMPL_IF> href="<TMPL_VAR NAME="URL">"><TMPL_VAR ESCAPE="HTML" NAME="LABEL"></a></div></td></tr>
+          <tr>
+            <td><a href="<TMPL_VAR NAME="URL">"><img src="<TMPL_VAR NAME="IMGDAY">" alt="<TMPL_VAR ESCAPE="HTML" NAME="LABEL">" <TMPL_IF NAME="IMGDAYWIDTH">width="<TMPL_VAR NAME="IMGDAYWIDTH">" </TMPL_IF> <TMPL_IF NAME="IMGDAYHEIGHT">height="<TMPL_VAR NAME="IMGDAYHEIGHT">"</TMPL_IF>/></a></td>
+            <td><a href="<TMPL_VAR NAME="URL">"><img src="<TMPL_VAR NAME="IMGWEEK">" alt="<TMPL_VAR ESCAPE="HTML" NAME="LABEL">" <TMPL_IF NAME="IMGWEEKWIDTH">width="<TMPL_VAR NAME="IMGWEEKWIDTH">" </TMPL_IF> <TMPL_IF NAME="IMGWEEKHEIGHT">height="<TMPL_VAR NAME="IMGWEEKHEIGHT">"</TMPL_IF>/></a></td>
+          </tr>
+        </TMPL_LOOP>
+	</table>
+  </td></tr>
+
+  <tr><td></td></tr>
+
+  </TMPL_LOOP>
+  <tr><td class="linkbox">
+ <TMPL_LOOP NAME="DOMAINS">
+<a href="../<TMPL_VAR NAME="DOMAIN">/index.html"><TMPL_VAR ESCAPE="HTML" NAME="DOMAIN"></a> :
+    </TMPL_LOOP>
+ </td></tr>
+</table>
+
+ <table cellpadding="2" cellspacing="4" border="0">        
+  <tr>
+    <td><i class="small">This page was generated by <a href="http://munin.sourceforge.net/">Munin</a> version 1.2.5 at <TMPL_VAR NAME="TIMESTAMP"></i></td>
+  </tr>
+ </table>
+</body>
+</html>
Index: /tags/fc9-eol/noc/munin/templates/munin-overview.tmpl
===================================================================
--- /tags/fc9-eol/noc/munin/templates/munin-overview.tmpl	(revision 1257)
+++ /tags/fc9-eol/noc/munin/templates/munin-overview.tmpl	(revision 1257)
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
+          "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+<head>
+  <link rel="stylesheet" href="style.css" type="text/css" /> 
+  <meta http-equiv="refresh" content="300" />
+  <title>Munin :: overview</title>
+  <meta http-equiv="content-type" content="application/xhtml+xml; charset=iso-8859-1" />
+  <meta name="author" content="Auto-generated by Munin" />
+</head>
+<body> 
+ <table cellpadding="3" border="0">
+  <tr>
+     <td><div class="logo">&nbsp;</div></td>
+     <td valign="top"><h1>Overview</h1></td>
+    </tr>
+ </table>
+ <div class="box">
+ <TMPL_LOOP NAME="DOMAINS">
+ <ul>
+  <li><span class="domain"><a href="<TMPL_VAR NAME="DOMAIN">/index.html"><TMPL_VAR ESCAPE="HTML" NAME="DOMAIN"></a></span><TMPL_IF NAME="COMPARE"> :: [ <a href="<TMPL_VAR NAME="DOMAIN">/comparison-day.html">day</a> <a href="<TMPL_VAR NAME="DOMAIN">/comparison-week.html">week</a> <a href="<TMPL_VAR NAME="DOMAIN">/comparison-month.html">month</a> <a href="<TMPL_VAR NAME="DOMAIN">/comparison-year.html">year</a> ]</TMPL_IF>
+      <ul>	
+	<TMPL_LOOP NAME="NODES">
+	<li><span class="host"><a href="<TMPL_VAR NAME="DOMAIN">/<TMPL_VAR NAME="NODE">.html"><TMPL_VAR ESCAPE="HTML" NAME="NODE"></a></span> :: 
+	[ <TMPL_LOOP NAME="CATEGORIES"><a <TMPL_IF NAME="STATE_WARNING">class="warn"</TMPL_IF> <TMPL_IF NAME="STATE_CRITICAL">class="crit"</TMPL_IF> href="<TMPL_VAR NAME="DOMAIN">/<TMPL_VAR NAME="NODE">.html#<TMPL_VAR NAME="NAME">"><TMPL_VAR ESCAPE="HTML" NAME="NAME"></a> </TMPL_LOOP>]</li>
+        </TMPL_LOOP>
+      </ul>
+   </li>
+ </ul>
+ </TMPL_LOOP>
+ </div>
+<table cellpadding="2" cellspacing="4" border="0">        
+  <tr>
+    <td><i class="small">This page was generated by <a href="http://munin.sourceforge.net/">Munin</a> version 1.2.5 at <TMPL_VAR NAME="TIMESTAMP"></i></td>
+  </tr>
+</table>
+</body>
+</html>
Index: /tags/fc9-eol/noc/munin/templates/munin-serviceview.tmpl
===================================================================
--- /tags/fc9-eol/noc/munin/templates/munin-serviceview.tmpl	(revision 1257)
+++ /tags/fc9-eol/noc/munin/templates/munin-serviceview.tmpl	(revision 1257)
@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
+          "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
+<head>
+  <link rel="stylesheet" href="../style.css" type="text/css" /> 
+  <meta http-equiv="refresh" content="300" />
+  <title>Munin :: <TMPL_VAR NAME="DOMAIN"> :: <TMPL_VAR NAME="NODE"> :: <TMPL_VAR ESCAPE="HTML" NAME="SERVICE"></title>
+  <meta http-equiv="content-type" content="application/xhtml+xml; charset=iso-8859-1" />
+  <meta name="author" content="Auto-generated by Munin" />
+</head>
+<body>
+ <table cellpadding="3" border="0">
+  <tr>
+     <td><div class="logo">&nbsp;</div></td>
+     <td valign="top">
+         <h2><a href="../index.html">Overview</a> :: <a href="index.html">
+<TMPL_VAR NAME="DOMAIN"></a> :: 
+<a href="<TMPL_VAR NAME="NODE">.html"><TMPL_VAR NAME="NODE"></a> :: <TMPL_VAR ESCAPE="HTML" NAME="SERVICE"></h2>
+     </td>    
+    </tr>
+ </table>
+ <TMPL_LOOP NAME="SERVICES">
+
+  <table class="invisiblebox">
+    <tr>
+	  <td colspan="2"><hr class="ruler" /></td>
+	</tr>
+    <tr>
+      <td><img src="<TMPL_VAR NAME="IMGDAY">" alt="daily graph" <TMPL_IF NAME="IMGDAYWIDTH">width="<TMPL_VAR NAME="IMGDAYWIDTH">" </TMPL_IF> <TMPL_IF NAME="IMGDAYHEIGHT">height="<TMPL_VAR NAME="IMGDAYHEIGHT">"</TMPL_IF>/></td>
+      <td><img src="<TMPL_VAR NAME="IMGWEEK">" alt="weekly graph" <TMPL_IF NAME="IMGWEEKWIDTH">width="<TMPL_VAR NAME="IMGWEEKWIDTH">" </TMPL_IF> <TMPL_IF NAME="IMGWEEKHEIGHT">height="<TMPL_VAR NAME="IMGWEEKHEIGHT">"</TMPL_IF>/></td>
+    </tr>
+    <tr>
+      <td><img src="<TMPL_VAR NAME="IMGMONTH">" alt="monthly graph" <TMPL_IF NAME="IMGMONTHWIDTH">width="<TMPL_VAR NAME="IMGMONTHWIDTH">" </TMPL_IF> <TMPL_IF NAME="IMGMONTHHEIGHT">height="<TMPL_VAR NAME="IMGMONTHHEIGHT">"</TMPL_IF>/></td>
+      <td><img src="<TMPL_VAR NAME="IMGYEAR">" alt="yearly graph" <TMPL_IF NAME="IMGYEARWIDTH">width="<TMPL_VAR NAME="IMGYEARWIDTH">" </TMPL_IF> <TMPL_IF NAME="IMGYEARHEIGHT">height="<TMPL_VAR NAME="IMGYEARHEIGHT">"</TMPL_IF>/></td>
+    </tr>
+<TMPL_IF NAME="IMGWEEKSUM">
+    <tr>
+      <td><img src="<TMPL_VAR NAME="IMGWEEKSUM">" alt="summed weekly graph" <TMPL_IF NAME="IMGWEEKSUMWIDTH">width="<TMPL_VAR NAME="IMGWEEKSUMWIDTH">" </TMPL_IF> <TMPL_IF NAME="IMGWEEKSUMHEIGHT">height="<TMPL_VAR NAME="IMGWEEKSUMHEIGHT">"</TMPL_IF>/></td>
+      <td><img src="<TMPL_VAR NAME="IMGYEARSUM">" alt="summed monthly graph" <TMPL_IF NAME="IMGYEARSUMWIDTH">width="<TMPL_VAR NAME="IMGYEARSUMWIDTH">" </TMPL_IF> <TMPL_IF NAME="IMGYEARSUMHEIGHT">height="<TMPL_VAR NAME="IMGYEARSUMHEIGHT">"</TMPL_IF>/></td>
+    </tr>
+</TMPL_IF>
+	<tr>
+	  <td colspan="2" class="legendbox">
+	    <table width='100%'>
+		  <TMPL_LOOP NAME="GRAPHINFO">
+		    <tr>
+		      <td class='wrap' colspan="6" align='left' valign='top'><TMPL_VAR NAME="INFO"></td>
+		    </tr>
+		    <tr>
+		      <td colspan="6"><hr class="ruler2" /></td>
+		    </tr>
+		  </TMPL_LOOP>
+		    <tr>
+			  <th align='left' valign='top'>Field</th>
+			  <th align='left' valign='top'><span title="For use in munin.conf">Internal name</span></th>
+			  <th align='center' valign='top'><a href="../definitions.html#data_types">Type</a></th>
+			  <th align='center' valign='top'>Warn</th>
+			  <th align='center' valign='top'>Crit</th>
+			  <th>&nbsp;</th>
+		    </tr>
+		  <TMPL_LOOP NAME="FIELDINFO">
+		    <TMPL_IF NAME="HR">
+		      <tr>
+		        <td colspan="6"><hr class="ruler" /></td>
+		      </tr>
+		    </TMPL_IF>
+		    <tr>
+		      <td align='left' valign='top'><TMPL_VAR ESCAPE="HTML" NAME="LABEL"></td>
+		      <td align='left' valign='top'><span title="For use in munin.conf"><TMPL_VAR ESCAPE="HTML" NAME="FIELD"></span></td>
+		      <td align='center' valign='top'><TMPL_VAR NAME="TYPE"></td>
+		      <td align='center' valign='top'><TMPL_IF NAME="STATE_WARNING"><div class='warntext'></TMPL_IF><TMPL_VAR NAME="WARN"><TMPL_IF NAME="STATE_WARNING"></div></TMPL_IF></td>
+		      <td align='center' valign='top'><TMPL_IF NAME="STATE_CRITICAL"><div class='crittext'></TMPL_IF><TMPL_VAR NAME="CRIT"><TMPL_IF NAME="STATE_CRITICAL"></div></TMPL_IF></td>
+		      <td class='wrap' align='left' valign='top'><TMPL_VAR ESCAPE="HTML" NAME="INFO"></td>
+		    </tr>
+		  </TMPL_LOOP>
+	    </table>
+	  </td>
+	</tr>
+  </TMPL_LOOP>
+  <tr><td></td></tr>
+  <tr>
+    <td colspan="2" class="linkbox">
+      <TMPL_LOOP NAME="DOMAINS">
+        <a href="../<TMPL_VAR NAME="DOMAIN">/index.html"><TMPL_VAR NAME="DOMAIN"></a> :
+      </TMPL_LOOP>
+    </td>
+  </tr>
+</table>
+
+<table cellpadding="2" cellspacing="4" border="0">        
+  <tr>
+    <td><i class="small">This page was generated by <a href="http://munin.sourceforge.net/">Munin</a> version 1.2.5 at <TMPL_VAR NAME="TIMESTAMP"></i></td>
+  </tr>
+</table>
+
+</body>
+</html>
+  
Index: /tags/fc9-eol/noc/munin/templates/style.css
===================================================================
--- /tags/fc9-eol/noc/munin/templates/style.css	(revision 1257)
+++ /tags/fc9-eol/noc/munin/templates/style.css	(revision 1257)
@@ -0,0 +1,199 @@
+body, h1, h2, h3, p, span, div { 
+  font-family: verdana, helvetica, arial, sans-serif;
+  font-size: small;
+ }
+
+body { 
+  background-color: #ffffff;
+  color: #000000;
+  
+ }
+
+h3.nobottom {
+    margin-top: 20px;
+    margin-bottom: 0px;
+}
+
+div.logo { 
+  background-image: url(logo.png);
+  background-repeat: no-repeat;  
+  width: 41px;
+  height: 59px;
+} 
+
+div.lighttext { 
+  background-color: #ffffff;
+  color: #777777;
+  font-style: italic;
+  
+ }
+
+.domain { 
+  font-size: medium;
+  font-weight: bold;
+ }
+
+.host { 
+  font-weight: bold;
+ }
+
+.center { 
+  text-align: center;
+}
+
+.small { 
+  font-size: smaller;
+ }
+
+.noborder { 
+  border-width: 0px;
+  border-collapse: collapse;
+ }
+
+table.largeinvisiblebox {
+        border-width: thin;
+        border-top: 0px;
+        border-bottom: 0px;
+        border-left: 0px;
+        border-right: 0px;
+        border-color: #999;
+        border-style: solid;
+        padding: 0px 0px 0px 0px;
+	margin: 0px 0px 0px 0px;
+	white-space: nowrap;
+	max-width: 90%;
+        width: 80%;
+}
+
+table.invisiblebox {
+        border-width: thin;
+        border-top: 0px;
+        border-bottom: 0px;
+        border-left: 0px;
+        border-right: 0px;
+        border-color: #999;
+        border-style: solid;
+        padding: 0px 0px 0px 0px;
+	margin: 0px 0px 0px 0px;
+	white-space: nowrap;
+	width: 1%;
+}
+
+td.graphbox {
+        border-width: thin;
+        border-top: 1px;
+        border-bottom: 1px;
+        border-left: 1px;
+        border-right: 1px;
+        border-color: #999;
+        border-style: solid;
+        padding: 4px 4px 4px 4px;
+	margin: 0px 0px 0px 0px;
+	white-space: nowrap;
+	width: 100%;
+}
+
+.box {
+        border-width: thin;
+        border-top: 1px;
+        border-bottom: 1px;
+        border-left: 1px;
+        border-right: 1px;
+        border-color: #999;
+        border-style: solid;
+        padding: 4px 4px 4px 4px;
+        margin: 2px 2px 2px 2px;
+        text-align: left;
+        width: 80%;
+        max-width: 90%
+}
+
+td.legendbox {
+        border-width: thin;
+        border-top: 1px;
+        border-bottom: 1px;
+        border-left: 1px;
+        border-right: 1px;
+        border-color: #999;
+        border-style: solid;
+        padding: 8px 4px 2px 2px;
+        margin: 2px 2px 2px 2px;
+        text-align: left;
+	width: 100%;
+}
+
+td.wrap {
+	white-space: normal;
+	max-width: 1%;
+}
+
+td.linkbox {
+        border-width: thin;
+        border-top: 1px;
+        border-bottom: 1px;
+        border-left: 1px;
+        border-right: 1px;
+        border-color: #999;
+        border-style: solid;
+        padding: 4px 4px 4px 4px;
+        margin: 2px 2px 2px 2px;
+	width: 100%;
+}
+
+.warntext {
+  font-weight: bold;
+  background-color: #cccc00;
+}
+
+.crittext {
+  font-weight: bold;
+  background-color: #ff6f22;
+}
+
+.ruler {
+  background-color: #999999;
+  border: 0px;
+  height: 1px;
+}
+
+.ruler2 {
+  background-color: #999999;
+  border: 0px;
+  height: 2px;
+}
+
+a.meek:link { 
+  color: #486aaf;
+  font-size: small;
+ }
+
+a.meek:visited { 
+  color: #af1a00;
+  font-size: small;
+ }
+
+a.meek:active { 
+  color: #486aaf;
+  font-size: small;
+ }
+
+a.meek:hover { 
+  color: #999999;
+  font-size: small;
+ }
+
+
+a.warn:link    { color: #cc9900; }
+a.warn:visited { color: #cc9900; }
+a.warn:active  { color: #cc9900; }
+a.warn:hover   { color: #cc9900; }
+
+a.crit:link    { color: #cc0000; } 
+a.crit:visited { color: #cc0000; } 
+a.crit:active  { color: #cc0000; } 
+a.crit:hover   { color: #cc0000; } 
+
+a:link    { color: #486aaf; } 
+a:visited { color: #486aaf; } 
+a:active  { color: #486aaf; } 
+a:hover   { color: #486aaf; } 
Index: /tags/fc9-eol/noc/nagios/base.cfg
===================================================================
--- /tags/fc9-eol/noc/nagios/base.cfg	(revision 1257)
+++ /tags/fc9-eol/noc/nagios/base.cfg	(revision 1257)
@@ -0,0 +1,149 @@
+define timeperiod{
+        timeperiod_name 24x7
+        alias           24 Hours A Day, 7 Days A Week
+        sunday          00:00-24:00
+        monday          00:00-24:00
+        tuesday         00:00-24:00
+        wednesday       00:00-24:00
+        thursday        00:00-24:00
+        friday          00:00-24:00
+        saturday        00:00-24:00
+        }
+
+define timeperiod{
+        timeperiod_name afs
+        alias           24 Hours A Day, 7 Days A Week, except Sunday Morning
+        sunday          00:00-05:59,08:00-24:00
+        monday          00:00-24:00
+        tuesday         00:00-24:00
+        wednesday       00:00-24:00
+        thursday        00:00-24:00
+        friday          00:00-24:00
+        saturday        00:00-24:00
+        }
+
+define timeperiod{
+        timeperiod_name 9x5
+        alias           9 Hours A Day, 5 Days A Week
+        monday          09:00-17:00
+        tuesday         09:00-17:00
+        wednesday       09:00-17:00
+        thursday        09:00-17:00
+        friday          09:00-17:00
+        }
+
+define timeperiod{
+        timeperiod_name never
+        alias           Never
+        }
+
+define contact{
+        contact_name                    nagios-admin
+        alias                           Nagios Admin
+        service_notification_period     24x7
+        host_notification_period        24x7
+        service_notification_options    n
+        host_notification_options       n
+        service_notification_commands   notify-by-email
+        host_notification_commands      host-notify-by-email
+        email                           nagios-admin@localhost
+}
+
+define contactgroup{
+        contactgroup_name       admins
+        alias                   Administrators
+        members                 nagios-admin
+        }
+
+define host{
+        name                            generic-host    ; The name of this host template
+        notifications_enabled           1       ; Host notifications are enabled
+        event_handler_enabled           1       ; Host event handler is enabled
+        flap_detection_enabled          1       ; Flap detection is enabled
+        failure_prediction_enabled      1       ; Failure prediction is enabled
+        process_perf_data               1       ; Process performance data
+        retain_status_information       1       ; Retain status information across program restarts
+        retain_nonstatus_information    1       ; Retain non-status information across program restarts
+        register                        0       ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL HOST, JUST A TEMPLATE!
+        }
+
+define host {
+        use                     generic-host            ; Name of host template to use
+        host_name               localhost
+        alias                   localhost
+        address                 127.0.0.1
+        check_command           check-host-alive
+        max_check_attempts      10
+        check_period		24x7
+        notification_interval   240
+        notification_period     24x7
+        contact_groups  admins
+        }
+#        notification_options    n
+
+define hostgroup {
+	hostgroup_name	all
+	alias	All Servers
+	members	*
+	}
+
+define service{
+        name                            generic-service ; The 'name' of this service template
+        active_checks_enabled           1       ; Active service checks are enabled
+        passive_checks_enabled          1       ; Passive service checks are enabled/accepted
+        parallelize_check               1       ; Active service checks should be parallelized (disabling this can lead to major performance problems)
+        obsess_over_service             1       ; We should obsess over this service (if necessary)
+        check_freshness                 0       ; Default is to NOT check service 'freshness'
+        notifications_enabled           1       ; Service notifications are enabled
+        event_handler_enabled           1       ; Service event handler is enabled
+        flap_detection_enabled          1       ; Flap detection is enabled
+        failure_prediction_enabled      1       ; Failure prediction is enabled
+        process_perf_data               1       ; Process performance data
+        retain_status_information       1       ; Retain status information across program restarts
+        retain_nonstatus_information    1       ; Retain non-status information across program restarts
+        register                        0       ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL SERVICE, JUST A TEMPLATE!
+        check_period                    24x7
+        max_check_attempts              4
+        normal_check_interval           5
+        retry_check_interval            1
+        contact_groups                  admins
+        notification_interval           1920
+        notification_period             24x7
+        is_volatile                     0
+}
+#	notification_options		n
+
+define service {
+        use                             generic-service
+        host_name			localhost
+        service_description             PING
+	check_command			check_ping!100.0,20%!500.0,60%
+        }
+
+define service {
+        use                             generic-service
+        host_name                       localhost
+        service_description             DISK: /
+	check_command			check_local_disk!20%!10%!/
+}
+
+define service {
+        use                             generic-service
+        host_name                       localhost
+        service_description             USERS
+	check_command			check_local_users!20!50
+}
+
+define service{
+        use                             generic-service
+        host_name                       localhost
+        service_description             PROCS
+	check_command			check_local_procs!250!400
+}
+
+define service{
+        use                             generic-service
+        host_name                       localhost
+        service_description             LOAD
+	check_command			check_local_load!5.0,4.0,3.0!10.0,6.0,4.0
+}
Index: /tags/fc9-eol/noc/nagios/cgi.cfg
===================================================================
--- /tags/fc9-eol/noc/nagios/cgi.cfg	(revision 1257)
+++ /tags/fc9-eol/noc/nagios/cgi.cfg	(revision 1257)
@@ -0,0 +1,288 @@
+#################################################################
+#
+# CGI.CFG - CGI Configuration File for Nagios 
+#
+#################################################################
+
+
+# MAIN CONFIGURATION FILE
+# This tells the CGIs where to find your main configuration file.
+# The CGIs will read the main and host config files for any other
+# data they might need.
+
+main_config_file=/etc/nagios3/nagios.cfg
+
+
+
+# PHYSICAL HTML PATH
+# This is the path where the HTML files for Nagios reside.  This
+# value is used to locate the logo images needed by the statusmap
+# and statuswrl CGIs.
+
+physical_html_path=/usr/share/nagios3/htdocs
+
+
+
+# URL HTML PATH
+# This is the path portion of the URL that corresponds to the
+# physical location of the Nagios HTML files (as defined above).
+# This value is used by the CGIs to locate the online documentation
+# and graphics.  If you access the Nagios pages with an URL like
+# http://www.myhost.com/nagios, this value should be '/nagios'
+# (without the quotes).
+
+url_html_path=/nagios3
+
+
+
+# CONTEXT-SENSITIVE HELP
+# This option determines whether or not a context-sensitive
+# help icon will be displayed for most of the CGIs.
+# Values: 0 = disables context-sensitive help
+#         1 = enables context-sensitive help
+
+show_context_help=1
+
+
+
+# PENDING STATES OPTION
+# This option determines what states should be displayed in the web
+# interface for hosts/services that have not yet been checked.
+# Values: 0 = leave hosts/services that have not been check yet in their original state
+#         1 = mark hosts/services that have not been checked yet as PENDING
+
+use_pending_states=1
+
+nagios_check_command=/usr/lib/nagios/plugins/check_nagios /var/cache/nagios3/status.dat 5 '/usr/sbin/nagios3'
+
+
+# AUTHENTICATION USAGE
+# This option controls whether or not the CGIs will use any 
+# authentication when displaying host and service information, as
+# well as committing commands to Nagios for processing.  
+#
+# Read the HTML documentation to learn how the authorization works!
+#
+# NOTE: It is a really *bad* idea to disable authorization, unless
+# you plan on removing the command CGI (cmd.cgi)!  Failure to do
+# so will leave you wide open to kiddies messing with Nagios and
+# possibly hitting you with a denial of service attack by filling up
+# your drive by continuously writing to your command file!
+#
+# Setting this value to 0 will cause the CGIs to *not* use
+# authentication (bad idea), while any other value will make them
+# use the authentication functions (the default).
+
+use_authentication=1
+
+
+
+
+# x509 CERT AUTHENTICATION
+# When enabled, this option allows you to use x509 cert (SSL)
+# authentication in the CGIs.  This is an advanced option and should
+# not be enabled unless you know what you're doing.
+
+use_ssl_authentication=0
+
+
+
+
+# DEFAULT USER
+# Setting this variable will define a default user name that can
+# access pages without authentication.  This allows people within a
+# secure domain (i.e., behind a firewall) to see the current status
+# without authenticating.  You may want to use this to avoid basic
+# authentication if you are not using a secure server since basic
+# authentication transmits passwords in the clear.
+#
+# Important:  Do not define a default username unless you are
+# running a secure web server and are sure that everyone who has
+# access to the CGIs has been authenticated in some manner!  If you
+# define this variable, anyone who has not authenticated to the web
+# server will inherit all rights you assign to this user!
+ 
+default_user_name=guest
+
+
+
+# SYSTEM/PROCESS INFORMATION ACCESS
+# This option is a comma-delimited list of all usernames that
+# have access to viewing the Nagios process information as
+# provided by the Extended Information CGI (extinfo.cgi).  By
+# default, *no one* has access to this unless you choose to
+# not use authorization.  You may use an asterisk (*) to
+# authorize any user who has authenticated to the web server.
+
+authorized_for_system_information=presbrey@MIT.EDU,andersk@MIT.EDU,quentin@MIT.EDU,geofft@MIT.EDU,mitchb@MIT.EDU
+
+
+
+# CONFIGURATION INFORMATION ACCESS
+# This option is a comma-delimited list of all usernames that
+# can view ALL configuration information (hosts, commands, etc).
+# By default, users can only view configuration information
+# for the hosts and services they are contacts for. You may use
+# an asterisk (*) to authorize any user who has authenticated
+# to the web server.
+
+authorized_for_configuration_information=presbrey@MIT.EDU,andersk@MIT.EDU,quentin@MIT.EDU,geofft@MIT.EDU,mitchb@MIT.EDU
+
+
+
+# SYSTEM/PROCESS COMMAND ACCESS
+# This option is a comma-delimited list of all usernames that
+# can issue shutdown and restart commands to Nagios via the
+# command CGI (cmd.cgi).  Users in this list can also change
+# the program mode to active or standby. By default, *no one*
+# has access to this unless you choose to not use authorization.
+# You may use an asterisk (*) to authorize any user who has
+# authenticated to the web server.
+
+authorized_for_system_commands=presbrey@MIT.EDU,andersk@MIT.EDU,quentin@MIT.EDU,geofft@MIT.EDU,mitchb@MIT.EDU
+
+
+
+# GLOBAL HOST/SERVICE VIEW ACCESS
+# These two options are comma-delimited lists of all usernames that
+# can view information for all hosts and services that are being
+# monitored.  By default, users can only view information
+# for hosts or services that they are contacts for (unless you
+# you choose to not use authorization). You may use an asterisk (*)
+# to authorize any user who has authenticated to the web server.
+
+
+authorized_for_all_services=*
+authorized_for_all_hosts=*
+#authorized_for_all_services=presbrey@MIT.EDU,andersk@MIT.EDU
+#authorized_for_all_hosts=presbrey@MIT.EDU,andersk@MIT.EDU
+
+
+
+# GLOBAL HOST/SERVICE COMMAND ACCESS
+# These two options are comma-delimited lists of all usernames that
+# can issue host or service related commands via the command
+# CGI (cmd.cgi) for all hosts and services that are being monitored. 
+# By default, users can only issue commands for hosts or services 
+# that they are contacts for (unless you you choose to not use 
+# authorization).  You may use an asterisk (*) to authorize any
+# user who has authenticated to the web server.
+
+authorized_for_all_service_commands=presbrey@MIT.EDU,andersk@MIT.EDU,quentin@MIT.EDU,geofft@MIT.EDU,mitchb@MIT.EDU
+authorized_for_all_host_commands=presbrey@MIT.EDU,andersk@MIT.EDU,quentin@MIT.EDU,geofft@MIT.EDU,mitchb@MIT.EDU
+
+
+
+
+# STATUSMAP BACKGROUND IMAGE
+# This option allows you to specify an image to be used as a 
+# background in the statusmap CGI.  It is assumed that the image
+# resides in the HTML images path (i.e. /usr/local/nagios/share/images).
+# This path is automatically determined by appending "/images"
+# to the path specified by the 'physical_html_path' directive.
+# Note:  The image file may be in GIF, PNG, JPEG, or GD2 format.
+# However, I recommend that you convert your image to GD2 format
+# (uncompressed), as this will cause less CPU load when the CGI
+# generates the image.
+
+#statusmap_background_image=smbackground.gd2
+
+
+
+# DEFAULT STATUSMAP LAYOUT METHOD
+# This option allows you to specify the default layout method
+# the statusmap CGI should use for drawing hosts.  If you do
+# not use this option, the default is to use user-defined
+# coordinates.  Valid options are as follows:
+#	0 = User-defined coordinates
+#	1 = Depth layers
+#       2 = Collapsed tree
+#       3 = Balanced tree
+#       4 = Circular
+#       5 = Circular (Marked Up)
+
+default_statusmap_layout=5
+
+
+
+# DEFAULT STATUSWRL LAYOUT METHOD
+# This option allows you to specify the default layout method
+# the statuswrl (VRML) CGI should use for drawing hosts.  If you
+# do not use this option, the default is to use user-defined
+# coordinates.  Valid options are as follows:
+#	0 = User-defined coordinates
+#       2 = Collapsed tree
+#       3 = Balanced tree
+#       4 = Circular
+
+default_statuswrl_layout=4
+
+
+
+# STATUSWRL INCLUDE
+# This option allows you to include your own objects in the 
+# generated VRML world.  It is assumed that the file
+# resides in the HTML path (i.e. /usr/local/nagios/share).
+
+#statuswrl_include=myworld.wrl
+
+
+
+# PING SYNTAX
+# This option determines what syntax should be used when
+# attempting to ping a host from the WAP interface (using
+# the statuswml CGI.  You must include the full path to
+# the ping binary, along with all required options.  The
+# $HOSTADDRESS$ macro is substituted with the address of
+# the host before the command is executed.
+# Please note that the syntax for the ping binary is
+# notorious for being different on virtually ever *NIX
+# OS and distribution, so you may have to tweak this to
+# work on your system.
+
+ping_syntax=/bin/ping -n -U -c 5 $HOSTADDRESS$
+
+
+
+# REFRESH RATE
+# This option allows you to specify the refresh rate in seconds
+# of various CGIs (status, statusmap, extinfo, and outages).  
+
+refresh_rate=90
+
+
+
+# ESCAPE HTML TAGS
+# This option determines whether HTML tags in host and service
+# status output is escaped in the web interface.  If enabled,
+# your plugin output will not be able to contain clickable links.
+
+escape_html_tags=1
+
+
+
+
+# SOUND OPTIONS
+# These options allow you to specify an optional audio file
+# that should be played in your browser window when there are
+# problems on the network.  The audio files are used only in
+# the status CGI.  Only the sound for the most critical problem
+# will be played.  Order of importance (higher to lower) is as
+# follows: unreachable hosts, down hosts, critical services,
+# warning services, and unknown services. If there are no
+# visible problems, the sound file optionally specified by
+# 'normal_sound' variable will be played.
+#
+#
+# <varname>=<sound_file>
+#
+# Note: All audio files must be placed in the /media subdirectory
+# under the HTML path (i.e. /usr/local/nagios/share/media/).
+
+#host_unreachable_sound=hostdown.wav
+#host_down_sound=hostdown.wav
+#service_critical_sound=critical.wav
+#service_warning_sound=warning.wav
+#service_unknown_sound=warning.wav
+#normal_sound=noproblem.wav
+
Index: /tags/fc9-eol/noc/nagios/checkcommands.cfg
===================================================================
--- /tags/fc9-eol/noc/nagios/checkcommands.cfg	(revision 1257)
+++ /tags/fc9-eol/noc/nagios/checkcommands.cfg	(revision 1257)
@@ -0,0 +1,198 @@
+################################################################################
+# Sample object config file for Nagios 
+#
+# Read the documentation for more information on this configuration file.  I've
+# provided some comments here, but things may not be so clear without further
+# explanation, so make sure to read the HTML documentation!
+# 
+# Last Modified: 12-15-2005
+#
+################################################################################
+
+
+################################################################################
+# COMMAND DEFINITIONS
+#
+# SYNTAX:
+#
+#	define command{
+#               template      <templatename>
+#		name          <objectname>
+#               command_name  <commandname>
+#               command_line  <commandline>
+#               }
+#
+# WHERE:
+#
+# <templatename> = object name of another command definition that should be
+#                  used as a template for this definition (optional)
+# <objectname>   = object name of command definition, referenced by other
+#                  command definitions that use it as a template (optional)
+# <commandname>  = name of the command, as recognized/used by Nagios
+# <commandline>  = command line
+#
+################################################################################
+
+# 'check_http_heartbeat' command definition
+define command{
+       command_name	check_http_heartbeat
+       command_line	$USER1$/check_http -H $HOSTADDRESS$ -u /heartbeat/http -s 1
+       }
+
+# 'check_https_cert' command definition
+define command{
+       command_name	check_https_cert
+       command_line	$USER1$/check_https -H $HOSTADDRESS$ -S -C $ARG1$
+       }
+
+# 'check_https_cert' command definition
+define command{
+       command_name	check_https_cert_444
+       command_line	$USER1$/check_https -H $HOSTADDRESS$ -p 444 -S -C $ARG1$
+       }
+
+# 'check_local_disk' command definition
+define command{
+        command_name    check_local_disk
+        command_line    $USER1$/check_disk -w $ARG1$ -c $ARG2$ -p $ARG3$
+        }
+
+
+# 'check_local_load' command definition
+define command{
+        command_name    check_local_load
+        command_line    $USER1$/check_load -w $ARG1$ -c $ARG2$
+        }
+
+
+# 'check_local_procs' command definition
+define command{
+        command_name    check_local_procs
+        command_line    $USER1$/check_procs -w $ARG1$ -c $ARG2$
+        }
+#command_line    $USER1$/check_procs -w $ARG1$ -c $ARG2$ -s $ARG3$
+
+
+# 'check_local_users' command definition
+define command{
+        command_name    check_local_users
+        command_line    $USER1$/check_users -w $ARG1$ -c $ARG2$
+        }
+
+################################################################################
+#
+# SAMPLE HOST CHECK COMMANDS
+#
+################################################################################
+
+
+# This command checks to see if a host is "alive" by pinging it
+# The check must result in a 100% packet loss or 5 second (5000ms) round trip 
+# average time to produce a critical error.
+# Note: Only one ICMP echo packet is sent (determined by the '-p 1' argument)
+
+# 'check-host-alive' command definition
+#define command{
+#        command_name    check-host-alive
+#        command_line    $USER1$/check_ping -H $HOSTADDRESS$ -w 3000.0,80% -c 5000.0,100% -p 1
+#        }
+
+#define command{
+#        command_name    check-host-alive
+#        command_line    $USER1$/check_ping -H $HOSTADDRESS$ -w 99,99% -c 100,100% -p 1 
+#        }
+
+define command {
+	command_name	check_nrpe_alive
+	command_line	$USER1$/check_nrpe -H $HOSTADDRESS$
+}
+
+define command {
+	command_name	check_remote_users
+	command_line	$USER1$/check_nrpe -H $HOSTADDRESS$ -u -c check_users -a $ARG1$ $ARG2$
+}
+
+define command {
+	command_name	check_remote_load
+	command_line	$USER1$/check_nrpe -H $HOSTADDRESS$ -u -c check_load -a $ARG1$ $ARG2$
+}
+
+define command {
+	command_name	check_remote_disk
+	command_line	$USER1$/check_nrpe -H $HOSTADDRESS$ -u -c check_disk -a $ARG1$ $ARG2$
+}
+
+define command {
+	command_name	check_remote_disk_p
+	command_line	$USER1$/check_nrpe -H $HOSTADDRESS$ -u -c check_disk_p -a $ARG1$ $ARG2$ $ARG3$
+}
+
+define command {
+	command_name	check_remote_procs
+	command_line	$USER1$/check_nrpe -H $HOSTADDRESS$ -u -c check_procs -a $ARG1$ $ARG2$
+}
+
+define command {
+	command_name	check_remote_procs_C
+	command_line	$USER1$/check_nrpe -H $HOSTADDRESS$ -u -c check_procs_C -a $ARG1$ $ARG2$ $ARG3$
+}
+
+define command {
+	command_name	check_remote_procs_P
+	command_line	$USER1$/check_nrpe -H $HOSTADDRESS$ -u -c check_procs_P -a $ARG1$ $ARG2$ $ARG3$
+}
+
+define command {
+	command_name	check_remote_procs_m
+	command_line	$USER1$/check_nrpe -H $HOSTADDRESS$ -u -c check_procs_m -a $ARG1$ $ARG2$ $ARG3$
+}
+
+define command {
+	command_name	check_remote_procs_s
+	command_line	$USER1$/check_nrpe -H $HOSTADDRESS$ -u -c check_procs_s -a $ARG1$ $ARG2$ $ARG3$
+}
+
+define command {
+	command_name	check_remote_procs_u
+	command_line	$USER1$/check_nrpe -H $HOSTADDRESS$ -u -c check_procs_u -a $ARG1$ $ARG2$ $ARG3$
+}
+
+define command {
+	command_name	check_remote_procs_z
+	command_line	$USER1$/check_nrpe -H $HOSTADDRESS$ -u -c check_procs_z -a $ARG1$ $ARG2$ $ARG3$
+}
+
+define command {
+	command_name	check_remote_mysql
+	command_line	$USER1$/check_nrpe -H $HOSTADDRESS$ -u -c check_mysql -a $USER3$ $USER4$
+}
+
+define command {
+	command_name	check_remote_mysql_slave
+	command_line	$USER1$/check_nrpe -H $HOSTADDRESS$ -u -c check_mysql_S -a $USER3$ $USER4$
+}
+
+define command {
+	command_name	check_remote_afs
+	command_line	$USER1$/check_nrpe -H $HOSTADDRESS$ -u -c check_afs
+}
+
+define command {
+	command_name	check_remote_cron_working
+	command_line	$USER1$/check_nrpe -H $HOSTADDRESS$ -u -c check_cron_working
+}
+
+define command {
+    command_name    check_scripts_ldap
+    command_line    $USER1$/check_ldap -H $HOSTADDRESS$ -b dc=scripts,dc=mit,dc=edu
+}
+
+define command {
+	command_name	check_svn
+	command_line	$USER5$/check_svn -H $HOSTNAME$ -T
+}
+
+define command {
+	command_name	check_dns_server
+	command_line	/usr/lib/nagios/plugins/check_dns -H $ARG1$ -s '$HOSTADDRESS$'
+}
Index: /tags/fc9-eol/noc/nagios/cnagios.help
===================================================================
--- /tags/fc9-eol/noc/nagios/cnagios.help	(revision 1257)
+++ /tags/fc9-eol/noc/nagios/cnagios.help	(revision 1257)
@@ -0,0 +1,23 @@
+  
+  Cnagios Commands
+  ----------------
+    u       display all host objects
+    d       display UNKNOWN and DOWN hosts
+    o       display all service objects
+    w       display UNKNOWN, PENDING, WARNING and CRITICAL services
+    c       display CRITICAL services
+    t       toggle between sort-by-age and sort-by-name (also s)
+    space   intelligent scroll 
+    >       go to next page (also ^f)
+    <       go to previous page (also ^b)
+    0       go to first page
+    G       go to last page
+    =       set a text filter (also g) (use \n to clear)
+    !       set a negative text filter (also v) (use \n to clear)
+    a       set an age filter (use \n to clear)
+    A       set an age filter for UP/OK objects only (use \n to clear)
+    x       clear all filters
+    r       reread the status.log and refresh display (also ^l)
+    h       display (this) help screen (also ?)
+    q       quit (also ^d)
+
Index: /tags/fc9-eol/noc/nagios/cnagios.pl
===================================================================
--- /tags/fc9-eol/noc/nagios/cnagios.pl	(revision 1257)
+++ /tags/fc9-eol/noc/nagios/cnagios.pl	(revision 1257)
@@ -0,0 +1,220 @@
+#
+# the current cnagios.pl for UW-HEP
+#
+
+use strict;
+
+#------------------------------------------------------------------
+
+sub host_plugin_hook {
+  local($_) = $_[0];
+
+  s/\(Host assumed to be up\)/assumed up/;
+  s/\(Host check timed out\)/timed out/;
+  s/\(Not enough data to determine host status yet\)/none/;
+  s/\(No Information Returned From Host Check\)/none/;
+  s/Ping .*? - (\d+)% packet loss.*/$1% pkt loss/;
+
+  return $_;
+}
+
+#------------------------------------------------------------------
+
+sub service_plugin_hook {
+  local($_) = $_[0];
+
+  # generic...
+  s/Plugin timed out after \d+ seconds/timed out/;
+
+  # check_pingwithperl...
+  s/.* (\d+)% packet loss, \d+.\d+ ms ave rtt/$1% pkt loss/;
+
+  # check_tcp...
+  s/.* (\d+\.\d+) second[s]? response time.*/$1 sec response/;
+  s/.* (\d+) second[s]? response time.*/$1 sec response/;
+  s/.* (\d+\.\d+) sec[s]? response time.*/$1 sec response/;
+
+  # check_ftp
+  s/.*Invalid response from host/bad response/;
+
+  # chech_ssh...
+  s/.* (.*?OpenSSH.*?) .*/$1/;
+  s/.*OpenSSH_3.5p1.*/OpenSSH_3.5p1/;
+  s/.*Connection refused.*/connection refused/i;
+
+  # check_netsnmp_disk & check_netsnmp_bigdisk...
+  # also works for check_dcache_usage...
+  while ( $_ =~ /(\d+\.\d+) TB/ ) {
+     my $tb = $1;
+     # WARNING: will fail for > 9999 GB...
+     my $gb = sprintf("%4.4s",int($tb *1024)); 
+     $_ =~ s/$tb TB/$gb GB/;
+  }
+  while ( $_ =~ /(\d+\.\d+) GB/ ) {
+     my $gb = $1;
+     # WARNING: will fail for > 9999 GB...
+     my $gb_new = sprintf("%4.4s",int($gb)); 
+     $_ =~ s/$gb GB/$gb_new GB/;
+  }
+  s/.*?(\d+ GB total,).*?,(\s*\d+ GB avail)/$1$2/;
+
+  # check_netsnmp_loadave...
+  s/.* load average: (\d+\.\d+).*/$1 loadave/;
+
+  # check_ntp...
+  s/.* Offset ([-]*\d+\.\d+) secs.*/$1 sec offset/;
+  s/.* stratum (\d+), offset ([-]*\d+\.\d+).*/stratum $1, $2 sec offset/;
+  s/.*Jitter\s+too high.*/jittering/;
+  s/.*desynchronized peer server.*/desynchronized peer server/i;
+  s/.*probably down.*/down/;
+
+  # check_dhcp et al...
+  s/.* Received \d+ DHCPOFFER.*max lease time = (\d+) sec.*/$1 sec lease time/;
+  s/.* \d+ in use, (\d+) free/$1 free leases/;
+  if ( s/DHCP problem: (.*)/$1/ ) { $_ = lc($_); }
+
+  # check_afs_*...
+  s/File Server Performance/Performance/;
+  s/.* (\d+ blocked) connections/$1/;
+  s/(.*?) AFS (\/.*)/$1 $2/;
+  s/(.*?) AFS Volume Quotas/$1 AFS Volumes/;
+  s/(\d+) processes running normally/$1 ok processes/;
+  s/one process running normally/one ok process/;
+  s/% used/%/g;
+  s/user.(.*?)/$1/g;
+  s/(\d+) volumes under quota/$1 ok volumes/;
+  s/db version (\d+.\d+)/db $1/;
+
+  # check_condor_client...
+  s/.* vm1 = .*?\/(\S+), vm2 = .*?\/(\S+),.*/$1\/$2/;
+  s/.* vm1 = .*?\/(\S+), vm2 = .*?\/(\S+).*/$1\/$2/;
+  s/.* cpu = (\S+)/$1/;
+  s/CondorQueue.*?(\d+ job[s]?, \d+ running).*/$1/;
+  s/.*?No condor status.*/no condor status/;
+
+  # check_condor_pool...
+  s/.*?(\d+) nodes.*/$1 nodes/;
+
+  # check_condor_queue...
+  s/.*?(\d+ idle, \d+ held)/$1/;
+
+  # check_nsr...
+  s/.*?(\d+\.\d+ GB), (\d+ saves) since.*/$1, $2/;
+  s/.*?(\d+ GB), (\d+ saves) since.*/$1, $2/;
+  s/(\d+ GB avail)able, \d+ GB total/$1/;
+
+  # check_hpjd...
+  s/.*? - \(\".*\"\)/printer okay/;
+  if ( s/(.*)\s+\(\".*\"\)/$1/ ) { $_ = lc($_); }
+
+  # check_LPRng_queue...
+  s/(\d+) active job[s]?/$1 active/;
+  s/(\d+) stalled job[s]?/$1 stalled/;
+  s/(\d+) spooled job[s]?/$1 spooled/;
+  s/(\d+) incoming job[s]?/$1 incoming/;
+  s/(\d+) incoming job[s]?/$1 incoming/;
+
+  # check_jug_*...
+  s/(\d+) JugRPC processes.*/$1 processes/;
+  s/.*JugJobs.*?(\d+) running.*/$1 running/;
+  s/.*Jug Storage.*?(\d+) unassigned.*/$1 unassigned/;
+
+  # check_dcache*...
+  s/.*no status available.*/not found/;
+  s/.*not found in the cellInfo.*/not found/;
+  s/service is (.*)/$1/;
+  s/.*(\d+) ms ave ping time/$1 ms ping time/;
+  s/.*(\d+) ms ping time/$1 ms ping time/;
+
+  # (my) check_traffic & check_ifHighSpeed_traffic...
+  # makes columnized XXX.XX Mbps output...
+  s/.*? (.*) Traffic/$1 Traffic/;
+  s/Internet Traffic/Traffic/;
+  if ( $_ =~ /(\d+\.\d+) Gbps in/ ) {
+    my $rate = $1;
+    my $gbps = sprintf("%6.6s",$rate);
+    $_ =~ s/$rate Gbps in/$gbps Gbps in/;
+  }
+  if ( $_ =~ /(\d+\.\d+) Gbps out/ ) {
+    my $rate = $1;
+    my $gbps = sprintf("%6.6s",$rate);
+    $_ =~ s/$rate Gbps out/$gbps Gbps out/;
+  }
+  if ( $_ =~ /(\d+\.\d+) Mbps in/ ) {
+    my $rate = $1;
+    my $mbps = sprintf("%6.6s",$rate);
+    $_ =~ s/$rate Mbps in/$mbps Mbps in/;
+  }
+  if ( $_ =~ /(\d+\.\d+) Mbps out/ ) {
+    my $rate = $1;
+    my $mbps = sprintf("%6.6s",$rate);
+    $_ =~ s/$rate Mbps out/$mbps Mbps out/;
+  }
+  while ( $_ =~ /(\d+\.\d+) Kbps/ ) {
+    my $rate = $1;
+    my $mbps = sprintf("%.2f",$rate/1000);
+    $mbps = sprintf("%6.6s",$mbps);
+    $_ =~ s/$rate Kbps/$mbps Mbps/;
+  }
+  s/\d+\.\d+ bps/  0.00 Mbps/g;
+
+  # check_airport...
+  s/(.*? AirPort) Usage/$1/;
+  s/no connected clients/no clients/;
+  s/(\d+) connected clients/$1 clients/;
+
+  # check_netsnmp_raid...
+  s/.*connect failed.*/connect failed/;
+  s/.*degraded.*/degraded/;
+  s/.*degraded/degraded/;
+  s/.*rebuilding.*/rebuilding/;
+  s/.*rebuilding/rebuilding/;
+  s/.*built.*/building/;
+  s/.*built/building/;
+  s/.*optimal.*/optimal/;
+  s/.*optimal/optimal/;
+
+  # check_ip_routing_with_mtr
+  s/\S+ to \S+ hop not found, first hop out is (\S+)/hop is $1/i;
+
+  # check_phedex
+  s/.*(\d+ UP agents).*/$1/;
+
+  # plugin generic...
+  s/.*no response.*/connection timed out/i;
+  s/.*no route to host.*/no route to host/i;
+  s/Socket timeout.*/socket timed out/;
+
+  # nagios generic...
+  s/\(Service Check Timed Out\)/check timed out/;
+  s/\(No output returned from plugin\)/no output from plugin/;
+  s/Service check scheduled for.*/none/;
+  s/No data yet.*/no data yet/;
+  s/\.$//;
+
+  # generic generic...
+  s/.*?OK - //i;
+  s/.*?WARNING - //i;
+  s/.*?CRITICAL - //i;
+  s/.*?UNKNOWN - //i;
+
+  return $_;
+
+}
+
+#------------------------------------------------------------------
+
+# this sub is used for host/service/plugin-output 
+# filtering... it should not change...
+
+sub regex_hook {
+  my($str,$regex,$mode) = @_;
+  if ( $mode == 0 ) { 
+    if ( $str =~ /$regex/ ) { return 0 } else { return 1 }
+  }
+  if ( $mode == 1 ) { 
+    if ( $str !~ /$regex/ ) { return 0 } else { return 1 }
+  }
+  return 2;
+}
+
Index: /tags/fc9-eol/noc/nagios/cnagiosrc
===================================================================
--- /tags/fc9-eol/noc/nagios/cnagiosrc	(revision 1257)
+++ /tags/fc9-eol/noc/nagios/cnagiosrc	(revision 1257)
@@ -0,0 +1,21 @@
+
+# add a site name to the upper left hand corner...
+default site_name = sipb-nagios
+
+## display OKAY services...
+#default level = OKAY
+
+## sort by age...
+#default sort_order = by_name
+
+# don't display hosts/services/plugin output that 
+# matches our compute node names... eg g12n01...
+#default text !~ /^g\d+n\d+/
+
+# only display OKAY services that have changed 
+# states within the last eight hours...
+#default okay_age = 8h
+
+# the "F1" key sets a /Ping/ filter... 
+#f1 text =~ /Ping/
+
Index: /tags/fc9-eol/noc/nagios/contacts.cfg
===================================================================
--- /tags/fc9-eol/noc/nagios/contacts.cfg	(revision 1257)
+++ /tags/fc9-eol/noc/nagios/contacts.cfg	(revision 1257)
@@ -0,0 +1,84 @@
+define contactgroup {
+        contactgroup_name       scripts
+        alias                   Scripts Maintainers
+        members                 scripts,scripts-zephyr
+}
+
+define contactgroup {
+        contactgroup_name       sql
+        alias                   SQL Maintainers
+        members                 sql
+}
+
+define contactgroup {
+        contactgroup_name       pagers
+        alias                   Scripts Maintainers (Pagers)
+        members                 quentin-cell,geofft-pager
+}
+
+define contact {
+        contact_name                    scripts
+        alias                           scripts
+        service_notification_period     24x7
+        host_notification_period        24x7
+        service_notification_options    w,u,c,r
+        host_notification_options       d,u,r
+        service_notification_commands   notify-by-email
+        host_notification_commands      host-notify-by-email
+        email                           scripts-alerts@mit.edu
+}
+define contact {
+        contact_name                    sql
+        alias                           sql
+        service_notification_period     24x7
+        host_notification_period        24x7
+        service_notification_options    w,u,c,r
+        host_notification_options       d,u,r
+        service_notification_commands   notify-by-email
+        host_notification_commands      host-notify-by-email
+        email                           sql@mit.edu
+}
+define contact {
+       contact_name			quentin-cell
+       alias				Quentin Smith (cell)
+       service_notification_period	24x7
+       host_notification_period		24x7
+       host_notification_options	d,r
+       service_notification_options	c,r
+       host_notification_commands	host-notify-by-epager
+       service_notification_commands	notify-by-epager
+       pager				6037598233@vtext.com
+}
+define contact {
+       contact_name			geofft-pager
+       alias				Geoff Thomas (cell)
+       service_notification_period	24x7
+       host_notification_period		24x7
+       host_notification_options	d,r
+       service_notification_options	c,r
+       host_notification_commands	host-notify-by-epager
+       service_notification_commands	notify-by-epager
+       pager				page-geofft@mit.edu
+}
+define contact {
+       contact_name			andersk-cell
+       alias				Anders Kaseorg (cell)
+       service_notification_period	24x7
+       host_notification_period		24x7
+       host_notification_options	d,r
+       service_notification_options	c,r
+       host_notification_commands	host-notify-by-epager
+       service_notification_commands	notify-by-epager
+       pager				7046182192@vtext.com
+}
+define contact {
+        contact_name                    scripts-zephyr
+        alias                           scripts-zephyr
+        service_notification_period     24x7
+        host_notification_period        24x7
+        service_notification_options    w,u,c,r
+        host_notification_options       d,u,r
+        service_notification_commands   notify-by-zephyr
+        host_notification_commands      host-notify-by-zephyr
+        email                           scripts
+}
Index: /tags/fc9-eol/noc/nagios/hostgroups.cfg
===================================================================
--- /tags/fc9-eol/noc/nagios/hostgroups.cfg	(revision 1257)
+++ /tags/fc9-eol/noc/nagios/hostgroups.cfg	(revision 1257)
@@ -0,0 +1,59 @@
+define hostgroup {
+	hostgroup_name	scripts-http
+	alias	Web servers
+	members	scripts,scripts-cert
+}
+
+define hostgroup {
+	hostgroup_name	scripts-https
+	alias	SSL servers
+	members	scripts,scripts-cert,wildcard.scripts
+}
+
+define hostgroup {
+	hostgroup_name	scripts-mysql
+	alias	MySQL servers
+	members	sql
+}
+
+define hostgroup {
+	hostgroup_name	mysql-masters
+	alias	MySQL master servers
+	members	sql
+}
+
+define hostgroup {
+	hostgroup_name	mysql-slaves
+	alias	MySQL slave servers
+	members	k-s,s-b
+}
+
+define hostgroup {
+	hostgroup_name	scripts-mail
+	alias	Mail servers
+	members	b-m,o-f,b-k,c-w,p-b,b-b
+}
+
+define hostgroup {
+	hostgroup_name	scripts-cron
+	alias	Cron servers
+	members	b-m,o-f,b-k,c-w,p-b,b-b
+}
+
+define hostgroup {
+	hostgroup_name	scripts-user
+	alias	User servers
+	members	b-m,o-f,b-k,c-w,p-b,b-b
+}
+
+define hostgroup {
+	hostgroup_name	scripts-all
+	alias	All scripts hosts
+	members	b-b,b-k,b-m,c-w,k-s,o-f,p-b,r-f,r-b,s-b,scripts,scripts-cert,sipb-ether,sql,wildcard.scripts
+}
+
+define hostgroup {
+	hostgroup_name	scripts-real
+	alias	All physical scripts servers
+	members	b-b,b-k,b-m,c-w,k-s,o-f,p-b,r-f,r-b,s-b
+}
Index: /tags/fc9-eol/noc/nagios/hosts.cfg
===================================================================
--- /tags/fc9-eol/noc/nagios/hosts.cfg	(revision 1257)
+++ /tags/fc9-eol/noc/nagios/hosts.cfg	(revision 1257)
@@ -0,0 +1,194 @@
+
+define host {
+	name	scripts-host
+	use	generic-host
+	register	0
+        max_check_attempts      10
+        check_period		24x7
+	check_command	check-host-alive
+        notification_interval   240
+        notification_period     24x7
+        notification_options    d,r
+        contact_groups  scripts
+}
+
+define host {
+	name	scripts-sipb-host
+	use	scripts-host
+	register	0
+	parents		sipb-ether
+}
+
+define host {
+       use  scripts-host
+       host_name	sipb-ether
+       address		18.181.0.1
+}
+
+# SQL
+
+define host {
+	name sql-sipb-host
+	use scripts-sipb-host
+	register 0
+	contact_groups sql,scripts
+}
+
+define host {
+	use	sql-sipb-host
+	host_name	sql
+	alias		sql
+	address		18.181.0.52
+	contact_groups	sql,scripts,pagers
+}
+
+define host {
+	use	sql-sipb-host
+	host_name	k-s
+	alias		kitchen-sink
+	address		18.181.0.56
+	notes		SQL
+	notes_url	http://stuff.mit.edu/afs/sipb/project/mrtg/data/kitchen-sink.html
+}
+
+define host {
+	use	sql-sipb-host
+	host_name	s-b
+	alias		sliced-bread
+	address		18.181.0.47
+	notes		SQL
+	notes_url	http://stuff.mit.edu/afs/sipb/project/mrtg/data/sliced-bread.html
+}
+
+# Scripts
+
+define host {
+	use	scripts-sipb-host
+	host_name	o-f
+	alias		old-faithful
+	address		18.181.0.53
+#	contact_groups	scripts,pagers
+	notes		Scripts
+	notes_url	http://stuff.mit.edu/afs/sipb/project/mrtg/data/old-faithful.html
+}
+
+define host {
+	use	scripts-sipb-host
+	host_name	scripts
+	alias		scripts
+	address		18.181.0.46
+	contact_groups	scripts,pagers
+}
+
+define host {
+	use	scripts-sipb-host
+	host_name	scripts-cert
+	alias		scripts-cert
+	parents		scripts
+	address		18.181.0.50
+	contact_groups	scripts,pagers
+}
+
+define host {
+	use	scripts-sipb-host
+	host_name	wildcard.scripts
+	alias		wildcard.scripts
+	parents		scripts
+	address		wildcard.scripts.mit.edu
+	contact_groups	scripts,pagers
+}
+
+define host {
+	use	scripts-sipb-host
+	host_name	b-m
+	alias		better-mousetrap
+	address		18.181.0.57
+#	contact_groups	scripts,pagers
+	notes		Scripts
+	notes_url	http://stuff.mit.edu/afs/sipb/project/mrtg/data/better-mousetrap.html
+}
+
+define host {
+	use	scripts-sipb-host
+	host_name	b-k
+	alias   	bees-knees
+	address		18.181.0.167
+}
+
+define host {
+	use	scripts-sipb-host
+	host_name	c-w
+	alias		cats-whiskers
+	address		18.181.0.228
+}
+
+define host {
+	use	scripts-sipb-host
+	host_name	p-b
+	alias		pancake-bunny
+	address		18.181.0.237
+}
+
+define host {
+	use	scripts-sipb-host
+	host_name	b-b
+	alias		busy-beaver
+	address		18.181.0.234
+}
+
+# LVS
+
+#define host {
+#	use	scripts-sipb-host
+#	host_name	n-f
+#	alias		not-forward
+#	address		18.181.0.54
+##	contact_groups	scripts,pagers
+#}
+
+#define hostextinfo {
+#	host_name	n-f
+#	notes		LVS Server
+#	notes_url	http://stuff.mit.edu/afs/sipb/project/mrtg/data/18.181.0.3_9.html
+#}
+
+#define host {
+#	use	scripts-sipb-host
+#	host_name	n-b
+#	alias		not-backward
+#	address		18.181.0.55
+##	contact_groups	scripts,pagers
+#}
+
+#define hostextinfo {
+#	host_name	n-b
+#	notes		LVS Server
+#	notes_url	http://stuff.mit.edu/afs/sipb/project/mrtg/data/18.181.0.3_5.html
+#}
+
+define host {
+	use	scripts-sipb-host
+	host_name	r-f
+	alias		rack-forward
+	address		18.181.0.117
+#	contact_groups	scripts,pagers
+}
+
+define host {
+	use	scripts-sipb-host
+	host_name	r-b
+	alias		rack-backward
+	address		18.181.0.118
+#	contact_groups	scripts,pagers
+}
+
+# Test
+
+define host {
+	use	scripts-sipb-host
+	host_name	asdfasdfasdf
+	alias		nagios-test
+	address		18.187.1.70
+	register	0
+}
+
Index: /tags/fc9-eol/noc/nagios/misccommands.cfg
===================================================================
--- /tags/fc9-eol/noc/nagios/misccommands.cfg	(revision 1257)
+++ /tags/fc9-eol/noc/nagios/misccommands.cfg	(revision 1257)
@@ -0,0 +1,122 @@
+################################################################################
+# Sample object config file for Nagios 
+#
+# Read the documentation for more information on this configuration file.  I've
+# provided some comments here, but things may not be so clear without further
+# explanation, so make sure to read the HTML documentation!
+# 
+# Last Modified: 12-17-2005
+#
+################################################################################
+
+
+################################################################################
+# COMMAND DEFINITIONS
+#
+# SYNTAX:
+#
+#	define command{
+#               template      <templatename>
+#		name          <objectname>
+#               command_name  <commandname>
+#               command_line  <commandline>
+#               }
+#
+# WHERE:
+#
+# <templatename> = object name of another command definition that should be
+#                  used as a template for this definition (optional)
+# <objectname>   = object name of command definition, referenced by other
+#                  command definitions that use it as a template (optional)
+# <commandname>  = name of the command, as recognized/used by Nagios
+# <commandline>  = command line
+#
+################################################################################
+
+
+
+
+################################################################################
+#
+# SAMPLE NOTIFICATION COMMANDS
+#
+# These are some example notification commands.  They may or may not work on
+# your system without modification.
+#
+################################################################################
+
+# 'host-notify-by-email' command definition
+define command{
+	command_name	host-notify-by-email
+	command_line	/usr/bin/printf "%b" "***** Nagios  *****\n\nNotification Type: $NOTIFICATIONTYPE$\nHost: $HOSTNAME$\nState: $HOSTSTATE$\nAddress: $HOSTADDRESS$\nInfo: $HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n" | /usr/bin/mail -s "Host $HOSTSTATE$ alert for $HOSTNAME$!" $CONTACTEMAIL$
+	}
+
+
+# 'host-notify-by-zephyr' command definition
+define command{
+	command_name	host-notify-by-zephyr
+	command_line	/usr/bin/printf "%b" "Host $HOSTSTATE$ $NOTIFICATIONTYPE$ alert for $HOSTNAME$!\n$HOSTOUTPUT$" | /usr/bin/zwrite -d -s "Nagios" -c $CONTACTEMAIL$ -i "nagios.$HOSTALIAS$"
+	}
+
+
+# 'host-notify-by-epager' command definition
+define command{
+	command_name	host-notify-by-epager
+	command_line	/usr/bin/printf "%b" "Host '$HOSTALIAS$' is $HOSTSTATE$\nInfo: $HOSTOUTPUT$\nTime: $LONGDATETIME$" | /usr/bin/mail -s "Host $HOSTNAME$ is $HOSTSTATE$" $CONTACTPAGER$
+	}
+
+# 'notify-by-email' command definition
+define command{
+	command_name	notify-by-email
+	command_line	/usr/bin/printf "%b" "***** Nagios  *****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost: $HOSTALIAS$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\n\nDate/Time: $LONGDATETIME$\n\nAdditional Info:\n\n$SERVICEOUTPUT$" | /usr/bin/mail -s "** $NOTIFICATIONTYPE$ alert - $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" $CONTACTEMAIL$
+	}
+
+
+# 'notify-by-zephyr' command definition
+define command{
+	command_name	notify-by-zephyr
+	command_line	/usr/bin/printf "%b" "$NOTIFICATIONTYPE$ alert - $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$\n$SERVICEOUTPUT$" | /usr/bin/zwrite -d -s "Nagios" -c $CONTACTEMAIL$ -i "nagios.$HOSTALIAS$.$SERVICEDESC$"
+	}
+
+
+# 'notify-by-epager' command definition
+define command{
+	command_name	notify-by-epager
+	command_line	/usr/bin/printf "%b" "Info: $SERVICEOUTPUT$\nDate: $LONGDATETIME$" | /usr/bin/mail -s "$NOTIFICATIONTYPE$: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$" $CONTACTPAGER$
+	}
+
+
+
+
+
+################################################################################
+#
+# SAMPLE PERFORMANCE DATA COMMANDS
+#
+# These are sample performance data commands that can be used to send performance
+# data output to two text files (one for hosts, another for services).  If you
+# plan on simply writing performance data out to a file, consider using the 
+# host_perfdata_file and service_perfdata_file options in the main config file.
+#
+################################################################################
+
+
+# 'process-host-perfdata' command definition
+define command{
+	command_name	process-host-perfdata
+	command_line	/usr/bin/printf "%b" "$LASTHOSTCHECK$\t$HOSTNAME$\t$HOSTSTATE$\t$HOSTATTEMPT$\t$HOSTSTATETYPE$\t$HOSTEXECUTIONTIME$\t$HOSTOUTPUT$\t$HOSTPERFDATA$\n" >> /var/log/nagios/host-perfdata.out
+	}
+
+
+# 'process-service-perfdata' command definition
+define command{
+	command_name	process-service-perfdata
+	command_line	/usr/bin/printf "%b" "$LASTSERVICECHECK$\t$HOSTNAME$\t$SERVICEDESC$\t$SERVICESTATE$\t$SERVICEATTEMPT$\t$SERVICESTATETYPE$\t$SERVICEEXECUTIONTIME$\t$SERVICELATENCY$\t$SERVICEOUTPUT$\t$SERVICEPERFDATA$\n" >> /var/log/nagios/service-perfdata.out
+	}
+
+
+define command {
+  command_name  ng-service-perfdata
+  command_line  /home/noc/ng/bin/insert.pl
+}
+#  command_line  /home/nagios/ng/bin/test.sh
Index: /tags/fc9-eol/noc/nagios/nagios.cfg
===================================================================
--- /tags/fc9-eol/noc/nagios/nagios.cfg	(revision 1257)
+++ /tags/fc9-eol/noc/nagios/nagios.cfg	(revision 1257)
@@ -0,0 +1,1280 @@
+##############################################################################
+#
+# NAGIOS.CFG - Sample Main Config File for Nagios 
+#
+#
+##############################################################################
+
+
+# LOG FILE
+# This is the main log file where service and host events are logged
+# for historical purposes.  This should be the first option specified 
+# in the config file!!!
+
+log_file=/var/log/nagios3/nagios.log
+
+# Debian also defaults to using the check commands defined by the debian
+# nagios-plugins package
+cfg_dir=/etc/nagios-plugins/config
+
+# OBJECT CONFIGURATION FILE(S)
+# These are the object configuration files in which you define hosts,
+# host groups, contacts, contact groups, services, etc.
+# You can split your object definitions across several config files
+# if you wish (as shown below), or keep them all in a single config file.
+
+# You can specify individual object config files as shown below:
+cfg_file=/etc/nagios3/checkcommands.cfg
+cfg_file=/etc/nagios3/misccommands.cfg
+cfg_file=/etc/nagios3/base.cfg
+cfg_file=/etc/nagios3/contacts.cfg
+cfg_file=/etc/nagios3/hostgroups.cfg
+cfg_file=/etc/nagios3/hosts.cfg
+cfg_file=/etc/nagios3/services.cfg
+
+cfg_file=/etc/nagios3/xvm.cfg
+cfg_file=/etc/nagios3/sipb.cfg
+
+cfg_dir=/etc/nagios3/users
+
+
+# OBJECT CACHE FILE
+# This option determines where object definitions are cached when
+# Nagios starts/restarts.  The CGIs read object definitions from 
+# this cache file (rather than looking at the object config files
+# directly) in order to prevent inconsistencies that can occur
+# when the config files are modified after Nagios starts.
+
+object_cache_file=/var/cache/nagios3/objects.cache
+
+
+
+# PRE-CACHED OBJECT FILE
+# This options determines the location of the precached object file.
+# If you run Nagios with the -p command line option, it will preprocess
+# your object configuration file(s) and write the cached config to this
+# file.  You can then start Nagios with the -u option to have it read
+# object definitions from this precached file, rather than the standard
+# object configuration files (see the cfg_file and cfg_dir options above).
+# Using a precached object file can speed up the time needed to (re)start 
+# the Nagios process if you've got a large and/or complex configuration.
+# Read the documentation section on optimizing Nagios to find our more
+# about how this feature works.
+
+precached_object_file=/var/lib/nagios3/objects.precache
+
+
+
+# RESOURCE FILE
+# This is an optional resource file that contains $USERx$ macro
+# definitions. Multiple resource files can be specified by using
+# multiple resource_file definitions.  The CGIs will not attempt to
+# read the contents of resource files, so information that is
+# considered to be sensitive (usernames, passwords, etc) can be
+# defined as macros in this file and restrictive permissions (600)
+# can be placed on this file.
+
+resource_file=/etc/nagios3/private/resource.cfg
+
+
+
+# STATUS FILE
+# This is where the current status of all monitored services and
+# hosts is stored.  Its contents are read and processed by the CGIs.
+# The contents of the status file are deleted every time Nagios
+#  restarts.
+
+status_file=/var/cache/nagios3/status.dat
+
+
+
+# STATUS FILE UPDATE INTERVAL
+# This option determines the frequency (in seconds) that
+# Nagios will periodically dump program, host, and 
+# service status data.
+
+status_update_interval=10
+
+
+
+# NAGIOS USER
+# This determines the effective user that Nagios should run as.  
+# You can either supply a username or a UID.
+
+nagios_user=nagios
+
+
+
+# NAGIOS GROUP
+# This determines the effective group that Nagios should run as.  
+# You can either supply a group name or a GID.
+
+nagios_group=nagios
+
+
+
+# EXTERNAL COMMAND OPTION
+# This option allows you to specify whether or not Nagios should check
+# for external commands (in the command file defined below).  By default
+# Nagios will *not* check for external commands, just to be on the
+# cautious side.  If you want to be able to use the CGI command interface
+# you will have to enable this.
+# Values: 0 = disable commands, 1 = enable commands
+
+check_external_commands=1
+
+
+
+# EXTERNAL COMMAND CHECK INTERVAL
+# This is the interval at which Nagios should check for external commands.
+# This value works of the interval_length you specify later.  If you leave
+# that at its default value of 60 (seconds), a value of 1 here will cause
+# Nagios to check for external commands every minute.  If you specify a
+# number followed by an "s" (i.e. 15s), this will be interpreted to mean
+# actual seconds rather than a multiple of the interval_length variable.
+# Note: In addition to reading the external command file at regularly 
+# scheduled intervals, Nagios will also check for external commands after
+# event handlers are executed.
+# NOTE: Setting this value to -1 causes Nagios to check the external
+# command file as often as possible.
+
+#command_check_interval=15s
+command_check_interval=-1
+
+
+
+# EXTERNAL COMMAND FILE
+# This is the file that Nagios checks for external command requests.
+# It is also where the command CGI will write commands that are submitted
+# by users, so it must be writeable by the user that the web server
+# is running as (usually 'nobody').  Permissions should be set at the 
+# directory level instead of on the file, as the file is deleted every
+# time its contents are processed.
+# Debian Users: In case you didn't read README.Debian yet, _NOW_ is the
+# time to do it.
+
+command_file=/var/lib/nagios3/rw/nagios.cmd
+
+
+
+# EXTERNAL COMMAND BUFFER SLOTS
+# This settings is used to tweak the number of items or "slots" that
+# the Nagios daemon should allocate to the buffer that holds incoming 
+# external commands before they are processed.  As external commands 
+# are processed by the daemon, they are removed from the buffer.  
+
+external_command_buffer_slots=4096
+
+
+
+# LOCK FILE
+# This is the lockfile that Nagios will use to store its PID number
+# in when it is running in daemon mode.
+
+lock_file=/var/run/nagios3/nagios3.pid
+
+
+
+# TEMP FILE
+# This is a temporary file that is used as scratch space when Nagios
+# updates the status log, cleans the comment file, etc.  This file
+# is created, used, and deleted throughout the time that Nagios is
+# running.
+
+temp_file=/var/cache/nagios3/nagios.tmp
+
+
+
+# TEMP PATH
+# This is path where Nagios can create temp files for service and
+# host check results, etc.
+
+temp_path=/tmp
+
+
+
+# EVENT BROKER OPTIONS
+# Controls what (if any) data gets sent to the event broker.
+# Values:  0      = Broker nothing
+#         -1      = Broker everything
+#         <other> = See documentation
+
+event_broker_options=-1
+
+
+
+# EVENT BROKER MODULE(S)
+# This directive is used to specify an event broker module that should
+# by loaded by Nagios at startup.  Use multiple directives if you want
+# to load more than one module.  Arguments that should be passed to
+# the module at startup are seperated from the module path by a space.
+#
+#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+# WARNING !!! WARNING !!! WARNING !!! WARNING !!! WARNING !!! WARNING
+#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+#
+# Do NOT overwrite modules while they are being used by Nagios or Nagios
+# will crash in a fiery display of SEGFAULT glory.  This is a bug/limitation
+# either in dlopen(), the kernel, and/or the filesystem.  And maybe Nagios...
+#
+# The correct/safe way of updating a module is by using one of these methods:
+#    1. Shutdown Nagios, replace the module file, restart Nagios
+#    2. Delete the original module file, move the new module file into place, restart Nagios
+#
+# Example:
+#
+#   broker_module=<modulepath> [moduleargs]
+
+#broker_module=/somewhere/module1.o
+#broker_module=/somewhere/module2.o arg1 arg2=3 debug=0
+
+
+
+# LOG ROTATION METHOD
+# This is the log rotation method that Nagios should use to rotate
+# the main log file. Values are as follows..
+#	n	= None - don't rotate the log
+#	h	= Hourly rotation (top of the hour)
+#	d	= Daily rotation (midnight every day)
+#	w	= Weekly rotation (midnight on Saturday evening)
+#	m	= Monthly rotation (midnight last day of month)
+
+log_rotation_method=d
+
+
+
+# LOG ARCHIVE PATH
+# This is the directory where archived (rotated) log files should be 
+# placed (assuming you've chosen to do log rotation).
+
+log_archive_path=/var/log/nagios3/archives
+
+
+
+# LOGGING OPTIONS
+# If you want messages logged to the syslog facility, as well as the
+# Nagios log file set this option to 1.  If not, set it to 0.
+
+use_syslog=0
+
+
+
+# NOTIFICATION LOGGING OPTION
+# If you don't want notifications to be logged, set this value to 0.
+# If notifications should be logged, set the value to 1.
+
+log_notifications=1
+
+
+
+# SERVICE RETRY LOGGING OPTION
+# If you don't want service check retries to be logged, set this value
+# to 0.  If retries should be logged, set the value to 1.
+
+log_service_retries=1
+
+
+
+# HOST RETRY LOGGING OPTION
+# If you don't want host check retries to be logged, set this value to
+# 0.  If retries should be logged, set the value to 1.
+
+log_host_retries=1
+
+
+
+# EVENT HANDLER LOGGING OPTION
+# If you don't want host and service event handlers to be logged, set
+# this value to 0.  If event handlers should be logged, set the value
+# to 1.
+
+log_event_handlers=1
+
+
+
+# INITIAL STATES LOGGING OPTION
+# If you want Nagios to log all initial host and service states to
+# the main log file (the first time the service or host is checked)
+# you can enable this option by setting this value to 1.  If you
+# are not using an external application that does long term state
+# statistics reporting, you do not need to enable this option.  In
+# this case, set the value to 0.
+
+log_initial_states=0
+
+
+
+# EXTERNAL COMMANDS LOGGING OPTION
+# If you don't want Nagios to log external commands, set this value
+# to 0.  If external commands should be logged, set this value to 1.
+# Note: This option does not include logging of passive service
+# checks - see the option below for controlling whether or not
+# passive checks are logged.
+
+log_external_commands=1
+
+
+
+# PASSIVE CHECKS LOGGING OPTION
+# If you don't want Nagios to log passive host and service checks, set
+# this value to 0.  If passive checks should be logged, set
+# this value to 1.
+
+log_passive_checks=1
+
+
+
+# GLOBAL HOST AND SERVICE EVENT HANDLERS
+# These options allow you to specify a host and service event handler
+# command that is to be run for every host or service state change.
+# The global event handler is executed immediately prior to the event
+# handler that you have optionally specified in each host or
+# service definition. The command argument is the short name of a
+# command definition that you define in your host configuration file.
+# Read the HTML docs for more information.
+
+#global_host_event_handler=somecommand
+#global_service_event_handler=somecommand
+
+
+
+# SERVICE INTER-CHECK DELAY METHOD
+# This is the method that Nagios should use when initially
+# "spreading out" service checks when it starts monitoring.  The
+# default is to use smart delay calculation, which will try to
+# space all service checks out evenly to minimize CPU load.
+# Using the dumb setting will cause all checks to be scheduled
+# at the same time (with no delay between them)!  This is not a
+# good thing for production, but is useful when testing the
+# parallelization functionality.
+#	n	= None - don't use any delay between checks
+#	d	= Use a "dumb" delay of 1 second between checks
+#	s	= Use "smart" inter-check delay calculation
+#       x.xx    = Use an inter-check delay of x.xx seconds
+
+service_inter_check_delay_method=s
+
+
+
+# MAXIMUM SERVICE CHECK SPREAD
+# This variable determines the timeframe (in minutes) from the
+# program start time that an initial check of all services should
+# be completed.  Default is 30 minutes.
+
+max_service_check_spread=30
+
+
+
+# SERVICE CHECK INTERLEAVE FACTOR
+# This variable determines how service checks are interleaved.
+# Interleaving the service checks allows for a more even
+# distribution of service checks and reduced load on remote
+# hosts.  Setting this value to 1 is equivalent to how versions
+# of Nagios previous to 0.0.5 did service checks.  Set this
+# value to s (smart) for automatic calculation of the interleave
+# factor unless you have a specific reason to change it.
+#       s       = Use "smart" interleave factor calculation
+#       x       = Use an interleave factor of x, where x is a
+#                 number greater than or equal to 1.
+
+service_interleave_factor=s
+
+
+
+# HOST INTER-CHECK DELAY METHOD
+# This is the method that Nagios should use when initially
+# "spreading out" host checks when it starts monitoring.  The
+# default is to use smart delay calculation, which will try to
+# space all host checks out evenly to minimize CPU load.
+# Using the dumb setting will cause all checks to be scheduled
+# at the same time (with no delay between them)!
+#	n	= None - don't use any delay between checks
+#	d	= Use a "dumb" delay of 1 second between checks
+#	s	= Use "smart" inter-check delay calculation
+#       x.xx    = Use an inter-check delay of x.xx seconds
+
+host_inter_check_delay_method=s
+
+
+
+# MAXIMUM HOST CHECK SPREAD
+# This variable determines the timeframe (in minutes) from the
+# program start time that an initial check of all hosts should
+# be completed.  Default is 30 minutes.
+
+max_host_check_spread=30
+
+
+
+# MAXIMUM CONCURRENT SERVICE CHECKS
+# This option allows you to specify the maximum number of 
+# service checks that can be run in parallel at any given time.
+# Specifying a value of 1 for this variable essentially prevents
+# any service checks from being parallelized.  A value of 0
+# will not restrict the number of concurrent checks that are
+# being executed.
+
+max_concurrent_checks=0
+
+
+
+# HOST AND SERVICE CHECK REAPER FREQUENCY
+# This is the frequency (in seconds!) that Nagios will process
+# the results of host and service checks.
+
+check_result_reaper_frequency=10
+
+
+
+
+# MAX CHECK RESULT REAPER TIME
+# This is the max amount of time (in seconds) that  a single
+# check result reaper event will be allowed to run before 
+# returning control back to Nagios so it can perform other
+# duties.
+
+max_check_result_reaper_time=30
+
+
+
+
+# CHECK RESULT PATH
+# This is directory where Nagios stores the results of host and
+# service checks that have not yet been processed.
+#
+# Note: Make sure that only one instance of Nagios has access
+# to this directory!  
+
+check_result_path=/var/lib/nagios3/spool/checkresults
+
+
+
+
+# MAX CHECK RESULT FILE AGE
+# This option determines the maximum age (in seconds) which check
+# result files are considered to be valid.  Files older than this 
+# threshold will be mercilessly deleted without further processing.
+
+max_check_result_file_age=3600
+
+
+
+
+# CACHED HOST CHECK HORIZON
+# This option determines the maximum amount of time (in seconds)
+# that the state of a previous host check is considered current.
+# Cached host states (from host checks that were performed more
+# recently that the timeframe specified by this value) can immensely
+# improve performance in regards to the host check logic.
+# Too high of a value for this option may result in inaccurate host
+# states being used by Nagios, while a lower value may result in a
+# performance hit for host checks.  Use a value of 0 to disable host
+# check caching.
+
+cached_host_check_horizon=15
+
+
+
+# CACHED SERVICE CHECK HORIZON
+# This option determines the maximum amount of time (in seconds)
+# that the state of a previous service check is considered current.
+# Cached service states (from service checks that were performed more
+# recently that the timeframe specified by this value) can immensely
+# improve performance in regards to predictive dependency checks.
+# Use a value of 0 to disable service check caching.
+
+cached_service_check_horizon=15
+
+
+
+# ENABLE PREDICTIVE HOST DEPENDENCY CHECKS
+# This option determines whether or not Nagios will attempt to execute
+# checks of hosts when it predicts that future dependency logic test
+# may be needed.  These predictive checks can help ensure that your
+# host dependency logic works well.
+# Values:
+#  0 = Disable predictive checks
+#  1 = Enable predictive checks (default)
+
+enable_predictive_host_dependency_checks=1
+
+
+
+# ENABLE PREDICTIVE SERVICE DEPENDENCY CHECKS
+# This option determines whether or not Nagios will attempt to execute
+# checks of service when it predicts that future dependency logic test
+# may be needed.  These predictive checks can help ensure that your
+# service dependency logic works well.
+# Values:
+#  0 = Disable predictive checks
+#  1 = Enable predictive checks (default)
+
+enable_predictive_service_dependency_checks=1
+
+
+
+# SOFT STATE DEPENDENCIES
+# This option determines whether or not Nagios will use soft state 
+# information when checking host and service dependencies. Normally 
+# Nagios will only use the latest hard host or service state when 
+# checking dependencies. If you want it to use the latest state (regardless
+# of whether its a soft or hard state type), enable this option. 
+# Values:
+#  0 = Don't use soft state dependencies (default) 
+#  1 = Use soft state dependencies 
+
+soft_state_dependencies=1
+
+
+
+# TIME CHANGE ADJUSTMENT THRESHOLDS
+# These options determine when Nagios will react to detected changes
+# in system time (either forward or backwards).
+
+#time_change_threshold=900
+
+
+
+# AUTO-RESCHEDULING OPTION
+# This option determines whether or not Nagios will attempt to
+# automatically reschedule active host and service checks to
+# "smooth" them out over time.  This can help balance the load on
+# the monitoring server.  
+# WARNING: THIS IS AN EXPERIMENTAL FEATURE - IT CAN DEGRADE
+# PERFORMANCE, RATHER THAN INCREASE IT, IF USED IMPROPERLY
+
+auto_reschedule_checks=0
+
+
+
+# AUTO-RESCHEDULING INTERVAL
+# This option determines how often (in seconds) Nagios will
+# attempt to automatically reschedule checks.  This option only
+# has an effect if the auto_reschedule_checks option is enabled.
+# Default is 30 seconds.
+# WARNING: THIS IS AN EXPERIMENTAL FEATURE - IT CAN DEGRADE
+# PERFORMANCE, RATHER THAN INCREASE IT, IF USED IMPROPERLY
+
+auto_rescheduling_interval=30
+
+
+
+# AUTO-RESCHEDULING WINDOW
+# This option determines the "window" of time (in seconds) that
+# Nagios will look at when automatically rescheduling checks.
+# Only host and service checks that occur in the next X seconds
+# (determined by this variable) will be rescheduled. This option
+# only has an effect if the auto_reschedule_checks option is
+# enabled.  Default is 180 seconds (3 minutes).
+# WARNING: THIS IS AN EXPERIMENTAL FEATURE - IT CAN DEGRADE
+# PERFORMANCE, RATHER THAN INCREASE IT, IF USED IMPROPERLY
+
+auto_rescheduling_window=180
+
+
+
+# SLEEP TIME
+# This is the number of seconds to sleep between checking for system
+# events and service checks that need to be run.
+
+sleep_time=0.25
+
+
+
+# TIMEOUT VALUES
+# These options control how much time Nagios will allow various
+# types of commands to execute before killing them off.  Options
+# are available for controlling maximum time allotted for
+# service checks, host checks, event handlers, notifications, the
+# ocsp command, and performance data commands.  All values are in
+# seconds.
+
+service_check_timeout=60
+host_check_timeout=30
+event_handler_timeout=30
+notification_timeout=30
+ocsp_timeout=5
+perfdata_timeout=5
+
+
+
+# RETAIN STATE INFORMATION
+# This setting determines whether or not Nagios will save state
+# information for services and hosts before it shuts down.  Upon
+# startup Nagios will reload all saved service and host state
+# information before starting to monitor.  This is useful for 
+# maintaining long-term data on state statistics, etc, but will
+# slow Nagios down a bit when it (re)starts.  Since its only
+# a one-time penalty, I think its well worth the additional
+# startup delay.
+
+retain_state_information=1
+
+
+
+# STATE RETENTION FILE
+# This is the file that Nagios should use to store host and
+# service state information before it shuts down.  The state 
+# information in this file is also read immediately prior to
+# starting to monitor the network when Nagios is restarted.
+# This file is used only if the preserve_state_information
+# variable is set to 1.
+
+state_retention_file=/var/lib/nagios3/retention.dat
+
+
+
+# RETENTION DATA UPDATE INTERVAL
+# This setting determines how often (in minutes) that Nagios
+# will automatically save retention data during normal operation.
+# If you set this value to 0, Nagios will not save retention
+# data at regular interval, but it will still save retention
+# data before shutting down or restarting.  If you have disabled
+# state retention, this option has no effect.
+
+retention_update_interval=60
+
+
+
+# USE RETAINED PROGRAM STATE
+# This setting determines whether or not Nagios will set 
+# program status variables based on the values saved in the
+# retention file.  If you want to use retained program status
+# information, set this value to 1.  If not, set this value
+# to 0.
+
+use_retained_program_state=1
+
+
+
+# USE RETAINED SCHEDULING INFO
+# This setting determines whether or not Nagios will retain
+# the scheduling info (next check time) for hosts and services
+# based on the values saved in the retention file.  If you
+# If you want to use retained scheduling info, set this
+# value to 1.  If not, set this value to 0.
+
+use_retained_scheduling_info=1
+
+
+
+# RETAINED ATTRIBUTE MASKS (ADVANCED FEATURE)
+# The following variables are used to specify specific host and
+# service attributes that should *not* be retained by Nagios during
+# program restarts.
+#
+# The values of the masks are bitwise ANDs of values specified
+# by the "MODATTR_" definitions found in include/common.h.  
+# For example, if you do not want the current enabled/disabled state
+# of flap detection and event handlers for hosts to be retained, you
+# would use a value of 24 for the host attribute mask...
+# MODATTR_EVENT_HANDLER_ENABLED (8) + MODATTR_FLAP_DETECTION_ENABLED (16) = 24
+
+# This mask determines what host attributes are not retained
+retained_host_attribute_mask=0
+
+# This mask determines what service attributes are not retained
+retained_service_attribute_mask=0
+
+# These two masks determine what process attributes are not retained.
+# There are two masks, because some process attributes have host and service
+# options.  For example, you can disable active host checks, but leave active
+# service checks enabled.
+retained_process_host_attribute_mask=0
+retained_process_service_attribute_mask=0
+
+# These two masks determine what contact attributes are not retained.
+# There are two masks, because some contact attributes have host and
+# service options.  For example, you can disable host notifications for
+# a contact, but leave service notifications enabled for them.
+retained_contact_host_attribute_mask=0
+retained_contact_service_attribute_mask=0
+
+
+
+# INTERVAL LENGTH
+# This is the seconds per unit interval as used in the
+# host/contact/service configuration files.  Setting this to 60 means
+# that each interval is one minute long (60 seconds).  Other settings
+# have not been tested much, so your mileage is likely to vary...
+
+interval_length=30
+
+
+
+# AGGRESSIVE HOST CHECKING OPTION
+# If you don't want to turn on aggressive host checking features, set
+# this value to 0 (the default).  Otherwise set this value to 1 to
+# enable the aggressive check option.  Read the docs for more info
+# on what aggressive host check is or check out the source code in
+# base/checks.c
+
+use_aggressive_host_checking=0
+
+
+
+# SERVICE CHECK EXECUTION OPTION
+# This determines whether or not Nagios will actively execute
+# service checks when it initially starts.  If this option is 
+# disabled, checks are not actively made, but Nagios can still
+# receive and process passive check results that come in.  Unless
+# you're implementing redundant hosts or have a special need for
+# disabling the execution of service checks, leave this enabled!
+# Values: 1 = enable checks, 0 = disable checks
+
+execute_service_checks=1
+
+
+
+# PASSIVE SERVICE CHECK ACCEPTANCE OPTION
+# This determines whether or not Nagios will accept passive
+# service checks results when it initially (re)starts.
+# Values: 1 = accept passive checks, 0 = reject passive checks
+
+accept_passive_service_checks=1
+
+
+
+# HOST CHECK EXECUTION OPTION
+# This determines whether or not Nagios will actively execute
+# host checks when it initially starts.  If this option is 
+# disabled, checks are not actively made, but Nagios can still
+# receive and process passive check results that come in.  Unless
+# you're implementing redundant hosts or have a special need for
+# disabling the execution of host checks, leave this enabled!
+# Values: 1 = enable checks, 0 = disable checks
+
+execute_host_checks=1
+
+
+
+# PASSIVE HOST CHECK ACCEPTANCE OPTION
+# This determines whether or not Nagios will accept passive
+# host checks results when it initially (re)starts.
+# Values: 1 = accept passive checks, 0 = reject passive checks
+
+accept_passive_host_checks=1
+
+
+
+# NOTIFICATIONS OPTION
+# This determines whether or not Nagios will sent out any host or
+# service notifications when it is initially (re)started.
+# Values: 1 = enable notifications, 0 = disable notifications
+
+enable_notifications=1
+
+
+
+# EVENT HANDLER USE OPTION
+# This determines whether or not Nagios will run any host or
+# service event handlers when it is initially (re)started.  Unless
+# you're implementing redundant hosts, leave this option enabled.
+# Values: 1 = enable event handlers, 0 = disable event handlers
+
+enable_event_handlers=1
+
+
+
+# PROCESS PERFORMANCE DATA OPTION
+# This determines whether or not Nagios will process performance
+# data returned from service and host checks.  If this option is
+# enabled, host performance data will be processed using the
+# host_perfdata_command (defined below) and service performance
+# data will be processed using the service_perfdata_command (also
+# defined below).  Read the HTML docs for more information on
+# performance data.
+# Values: 1 = process performance data, 0 = do not process performance data
+
+process_performance_data=0
+
+
+
+# HOST AND SERVICE PERFORMANCE DATA PROCESSING COMMANDS
+# These commands are run after every host and service check is
+# performed.  These commands are executed only if the
+# enable_performance_data option (above) is set to 1.  The command
+# argument is the short name of a command definition that you 
+# define in your host configuration file.  Read the HTML docs for
+# more information on performance data.
+
+#host_perfdata_command=process-host-perfdata
+#service_perfdata_command=process-service-perfdata
+
+
+
+# HOST AND SERVICE PERFORMANCE DATA FILES
+# These files are used to store host and service performance data.
+# Performance data is only written to these files if the
+# enable_performance_data option (above) is set to 1.
+
+#host_perfdata_file=/tmp/host-perfdata
+#service_perfdata_file=/tmp/service-perfdata
+
+
+
+# HOST AND SERVICE PERFORMANCE DATA FILE TEMPLATES
+# These options determine what data is written (and how) to the
+# performance data files.  The templates may contain macros, special
+# characters (\t for tab, \r for carriage return, \n for newline)
+# and plain text.  A newline is automatically added after each write
+# to the performance data file.  Some examples of what you can do are
+# shown below.
+
+#host_perfdata_file_template=[HOSTPERFDATA]\t$TIMET$\t$HOSTNAME$\t$HOSTEXECUTIONTIME$\t$HOSTOUTPUT$\t$HOSTPERFDATA$
+#service_perfdata_file_template=[SERVICEPERFDATA]\t$TIMET$\t$HOSTNAME$\t$SERVICEDESC$\t$SERVICEEXECUTIONTIME$\t$SERVICELATENCY$\t$SERVICEOUTPUT$\t$SERVICEPERFDATA$
+
+
+
+# HOST AND SERVICE PERFORMANCE DATA FILE MODES
+# This option determines whether or not the host and service
+# performance data files are opened in write ("w") or append ("a")
+# mode. If you want to use named pipes, you should use the special
+# pipe ("p") mode which avoid blocking at startup, otherwise you will
+# likely want the defult append ("a") mode.
+
+#host_perfdata_file_mode=a
+#service_perfdata_file_mode=a
+
+
+
+# HOST AND SERVICE PERFORMANCE DATA FILE PROCESSING INTERVAL
+# These options determine how often (in seconds) the host and service
+# performance data files are processed using the commands defined
+# below.  A value of 0 indicates the files should not be periodically
+# processed.
+
+#host_perfdata_file_processing_interval=0
+#service_perfdata_file_processing_interval=0
+
+
+
+# HOST AND SERVICE PERFORMANCE DATA FILE PROCESSING COMMANDS
+# These commands are used to periodically process the host and
+# service performance data files.  The interval at which the
+# processing occurs is determined by the options above.
+
+#host_perfdata_file_processing_command=process-host-perfdata-file
+#service_perfdata_file_processing_command=process-service-perfdata-file
+
+
+
+# OBSESS OVER SERVICE CHECKS OPTION
+# This determines whether or not Nagios will obsess over service
+# checks and run the ocsp_command defined below.  Unless you're
+# planning on implementing distributed monitoring, do not enable
+# this option.  Read the HTML docs for more information on
+# implementing distributed monitoring.
+# Values: 1 = obsess over services, 0 = do not obsess (default)
+
+obsess_over_services=0
+
+
+
+# OBSESSIVE COMPULSIVE SERVICE PROCESSOR COMMAND
+# This is the command that is run for every service check that is
+# processed by Nagios.  This command is executed only if the
+# obsess_over_services option (above) is set to 1.  The command 
+# argument is the short name of a command definition that you
+# define in your host configuration file. Read the HTML docs for
+# more information on implementing distributed monitoring.
+
+#ocsp_command=somecommand
+
+
+
+# OBSESS OVER HOST CHECKS OPTION
+# This determines whether or not Nagios will obsess over host
+# checks and run the ochp_command defined below.  Unless you're
+# planning on implementing distributed monitoring, do not enable
+# this option.  Read the HTML docs for more information on
+# implementing distributed monitoring.
+# Values: 1 = obsess over hosts, 0 = do not obsess (default)
+
+obsess_over_hosts=0
+
+
+
+# OBSESSIVE COMPULSIVE HOST PROCESSOR COMMAND
+# This is the command that is run for every host check that is
+# processed by Nagios.  This command is executed only if the
+# obsess_over_hosts option (above) is set to 1.  The command 
+# argument is the short name of a command definition that you
+# define in your host configuration file. Read the HTML docs for
+# more information on implementing distributed monitoring.
+
+#ochp_command=somecommand
+
+
+
+# TRANSLATE PASSIVE HOST CHECKS OPTION
+# This determines whether or not Nagios will translate
+# DOWN/UNREACHABLE passive host check results into their proper
+# state for this instance of Nagios.  This option is useful
+# if you have distributed or failover monitoring setup.  In
+# these cases your other Nagios servers probably have a different
+# "view" of the network, with regards to the parent/child relationship
+# of hosts.  If a distributed monitoring server thinks a host
+# is DOWN, it may actually be UNREACHABLE from the point of
+# this Nagios instance.  Enabling this option will tell Nagios
+# to translate any DOWN or UNREACHABLE host states it receives
+# passively into the correct state from the view of this server.
+# Values: 1 = perform translation, 0 = do not translate (default)
+
+translate_passive_host_checks=0
+
+
+
+# PASSIVE HOST CHECKS ARE SOFT OPTION
+# This determines whether or not Nagios will treat passive host
+# checks as being HARD or SOFT.  By default, a passive host check
+# result will put a host into a HARD state type.  This can be changed
+# by enabling this option.
+# Values: 0 = passive checks are HARD, 1 = passive checks are SOFT
+
+passive_host_checks_are_soft=0
+
+
+
+# ORPHANED HOST/SERVICE CHECK OPTIONS
+# These options determine whether or not Nagios will periodically 
+# check for orphaned host service checks.  Since service checks are
+# not rescheduled until the results of their previous execution 
+# instance are processed, there exists a possibility that some
+# checks may never get rescheduled.  A similar situation exists for
+# host checks, although the exact scheduling details differ a bit
+# from service checks.  Orphaned checks seem to be a rare
+# problem and should not happen under normal circumstances.
+# If you have problems with service checks never getting
+# rescheduled, make sure you have orphaned service checks enabled.
+# Values: 1 = enable checks, 0 = disable checks
+
+check_for_orphaned_services=1
+check_for_orphaned_hosts=1
+
+
+
+# SERVICE FRESHNESS CHECK OPTION
+# This option determines whether or not Nagios will periodically
+# check the "freshness" of service results.  Enabling this option
+# is useful for ensuring passive checks are received in a timely
+# manner.
+# Values: 1 = enabled freshness checking, 0 = disable freshness checking
+
+check_service_freshness=1
+
+
+
+# SERVICE FRESHNESS CHECK INTERVAL
+# This setting determines how often (in seconds) Nagios will
+# check the "freshness" of service check results.  If you have
+# disabled service freshness checking, this option has no effect.
+
+service_freshness_check_interval=60
+
+
+
+# HOST FRESHNESS CHECK OPTION
+# This option determines whether or not Nagios will periodically
+# check the "freshness" of host results.  Enabling this option
+# is useful for ensuring passive checks are received in a timely
+# manner.
+# Values: 1 = enabled freshness checking, 0 = disable freshness checking
+
+check_host_freshness=0
+
+
+
+# HOST FRESHNESS CHECK INTERVAL
+# This setting determines how often (in seconds) Nagios will
+# check the "freshness" of host check results.  If you have
+# disabled host freshness checking, this option has no effect.
+
+host_freshness_check_interval=60
+
+
+
+
+# ADDITIONAL FRESHNESS THRESHOLD LATENCY
+# This setting determines the number of seconds that Nagios
+# will add to any host and service freshness thresholds that
+# it calculates (those not explicitly specified by the user).
+
+additional_freshness_latency=15
+
+
+
+
+# FLAP DETECTION OPTION
+# This option determines whether or not Nagios will try
+# and detect hosts and services that are "flapping".  
+# Flapping occurs when a host or service changes between
+# states too frequently.  When Nagios detects that a 
+# host or service is flapping, it will temporarily suppress
+# notifications for that host/service until it stops
+# flapping.  Flap detection is very experimental, so read
+# the HTML documentation before enabling this feature!
+# Values: 1 = enable flap detection
+#         0 = disable flap detection (default)
+
+enable_flap_detection=1
+
+
+
+# FLAP DETECTION THRESHOLDS FOR HOSTS AND SERVICES
+# Read the HTML documentation on flap detection for
+# an explanation of what this option does.  This option
+# has no effect if flap detection is disabled.
+
+low_service_flap_threshold=5.0
+high_service_flap_threshold=20.0
+low_host_flap_threshold=5.0
+high_host_flap_threshold=20.0
+
+
+
+# DATE FORMAT OPTION
+# This option determines how short dates are displayed. Valid options
+# include:
+#	us		(MM-DD-YYYY HH:MM:SS)
+#	euro    	(DD-MM-YYYY HH:MM:SS)
+#	iso8601		(YYYY-MM-DD HH:MM:SS)
+#	strict-iso8601	(YYYY-MM-DDTHH:MM:SS)
+#
+
+date_format=iso8601
+
+
+
+
+# TIMEZONE OFFSET
+# This option is used to override the default timezone that this
+# instance of Nagios runs in.  If not specified, Nagios will use
+# the system configured timezone.
+#
+# NOTE: In order to display the correct timezone in the CGIs, you
+# will also need to alter the Apache directives for the CGI path 
+# to include your timezone.  Example:
+#
+#   <Directory "/usr/local/nagios/sbin/">
+#      SetEnv TZ "Australia/Brisbane"
+#      ...
+#   </Directory>
+
+#use_timezone=US/Mountain
+#use_timezone=Australia/Brisbane
+
+
+
+
+# P1.PL FILE LOCATION
+# This value determines where the p1.pl perl script (used by the
+# embedded Perl interpreter) is located.  If you didn't compile
+# Nagios with embedded Perl support, this option has no effect.
+
+p1_file=/usr/lib/nagios3/p1.pl
+
+
+
+# EMBEDDED PERL INTERPRETER OPTION
+# This option determines whether or not the embedded Perl interpreter
+# will be enabled during runtime.  This option has no effect if Nagios
+# has not been compiled with support for embedded Perl.
+# Values: 0 = disable interpreter, 1 = enable interpreter
+
+enable_embedded_perl=1
+
+
+
+# EMBEDDED PERL USAGE OPTION
+# This option determines whether or not Nagios will process Perl plugins
+# and scripts with the embedded Perl interpreter if the plugins/scripts
+# do not explicitly indicate whether or not it is okay to do so. Read
+# the HTML documentation on the embedded Perl interpreter for more 
+# information on how this option works.
+
+use_embedded_perl_implicitly=1
+
+
+
+# ILLEGAL OBJECT NAME CHARACTERS
+# This option allows you to specify illegal characters that cannot
+# be used in host names, service descriptions, or names of other
+# object types.
+
+illegal_object_name_chars=`~!$%^&*|'"<>?,()=
+
+
+
+# ILLEGAL MACRO OUTPUT CHARACTERS
+# This option allows you to specify illegal characters that are
+# stripped from macros before being used in notifications, event
+# handlers, etc.  This DOES NOT affect macros used in service or
+# host check commands.
+# The following macros are stripped of the characters you specify:
+#	$HOSTOUTPUT$
+#	$HOSTPERFDATA$
+#	$HOSTACKAUTHOR$
+#	$HOSTACKCOMMENT$
+#	$SERVICEOUTPUT$
+#	$SERVICEPERFDATA$
+#	$SERVICEACKAUTHOR$
+#	$SERVICEACKCOMMENT$
+
+illegal_macro_output_chars=`~$&|'"<>
+
+
+
+# REGULAR EXPRESSION MATCHING
+# This option controls whether or not regular expression matching
+# takes place in the object config files.  Regular expression
+# matching is used to match host, hostgroup, service, and service
+# group names/descriptions in some fields of various object types.
+# Values: 1 = enable regexp matching, 0 = disable regexp matching
+
+use_regexp_matching=0
+
+
+
+# "TRUE" REGULAR EXPRESSION MATCHING
+# This option controls whether or not "true" regular expression 
+# matching takes place in the object config files.  This option
+# only has an effect if regular expression matching is enabled
+# (see above).  If this option is DISABLED, regular expression
+# matching only occurs if a string contains wildcard characters
+# (* and ?).  If the option is ENABLED, regexp matching occurs
+# all the time (which can be annoying).
+# Values: 1 = enable true matching, 0 = disable true matching
+
+use_true_regexp_matching=0
+
+
+
+# ADMINISTRATOR EMAIL/PAGER ADDRESSES
+# The email and pager address of a global administrator (likely you).
+# Nagios never uses these values itself, but you can access them by
+# using the $ADMINEMAIL$ and $ADMINPAGER$ macros in your notification
+# commands.
+
+admin_email=sipb-nagios@mit.edu
+admin_pager=sipb-nagios@mit.edu
+
+
+
+# DAEMON CORE DUMP OPTION
+# This option determines whether or not Nagios is allowed to create
+# a core dump when it runs as a daemon.  Note that it is generally
+# considered bad form to allow this, but it may be useful for
+# debugging purposes.  Enabling this option doesn't guarantee that
+# a core file will be produced, but that's just life...
+# Values: 1 - Allow core dumps
+#         0 - Do not allow core dumps (default)
+
+daemon_dumps_core=0
+
+
+
+# LARGE INSTALLATION TWEAKS OPTION
+# This option determines whether or not Nagios will take some shortcuts
+# which can save on memory and CPU usage in large Nagios installations.
+# Read the documentation for more information on the benefits/tradeoffs
+# of enabling this option.
+# Values: 1 - Enabled tweaks
+#         0 - Disable tweaks (default)
+
+use_large_installation_tweaks=0
+
+
+
+# ENABLE ENVIRONMENT MACROS
+# This option determines whether or not Nagios will make all standard
+# macros available as environment variables when host/service checks
+# and system commands (event handlers, notifications, etc.) are
+# executed.  Enabling this option can cause performance issues in 
+# large installations, as it will consume a bit more memory and (more
+# importantly) consume more CPU.
+# Values: 1 - Enable environment variable macros (default)
+#         0 - Disable environment variable macros
+
+enable_environment_macros=1
+
+
+
+# CHILD PROCESS MEMORY OPTION
+# This option determines whether or not Nagios will free memory in
+# child processes (processed used to execute system commands and host/
+# service checks).  If you specify a value here, it will override
+# program defaults.
+# Value: 1 - Free memory in child processes
+#        0 - Do not free memory in child processes
+
+#free_child_process_memory=1
+
+
+
+# CHILD PROCESS FORKING BEHAVIOR
+# This option determines how Nagios will fork child processes
+# (used to execute system commands and host/service checks).  Normally
+# child processes are fork()ed twice, which provides a very high level
+# of isolation from problems.  Fork()ing once is probably enough and will
+# save a great deal on CPU usage (in large installs), so you might
+# want to consider using this.  If you specify a value here, it will
+# program defaults.
+# Value: 1 - Child processes fork() twice
+#        0 - Child processes fork() just once
+
+#child_processes_fork_twice=1
+
+
+
+# DEBUG LEVEL
+# This option determines how much (if any) debugging information will
+# be written to the debug file.  OR values together to log multiple
+# types of information.
+# Values: 
+#          -1 = Everything
+#          0 = Nothing
+#	   1 = Functions
+#          2 = Configuration
+#          4 = Process information
+#	   8 = Scheduled events
+#          16 = Host/service checks
+#          32 = Notifications
+#          64 = Event broker
+#          128 = External commands
+#          256 = Commands
+#          512 = Scheduled downtime
+#          1024 = Comments
+#          2048 = Macros
+
+debug_level=0
+
+
+
+# DEBUG VERBOSITY
+# This option determines how verbose the debug log out will be.
+# Values: 0 = Brief output
+#         1 = More detailed
+#         2 = Very detailed
+
+debug_verbosity=1
+
+
+
+# DEBUG FILE
+# This option determines where Nagios should write debugging information.
+
+debug_file=/var/lib/nagios3/nagios.debug
+
+
+
+# MAX DEBUG FILE SIZE
+# This option determines the maximum size (in bytes) of the debug file.  If
+# the file grows larger than this size, it will be renamed with a .old
+# extension.  If a file already exists with a .old extension it will
+# automatically be deleted.  This helps ensure your disk space usage doesn't
+# get out of control when debugging Nagios.
+
+max_debug_file_size=1000000
+
+
Index: /tags/fc9-eol/noc/nagios/private/resource-dist.cfg
===================================================================
--- /tags/fc9-eol/noc/nagios/private/resource-dist.cfg	(revision 1257)
+++ /tags/fc9-eol/noc/nagios/private/resource-dist.cfg	(revision 1257)
@@ -0,0 +1,9 @@
+# Sets $USER1$ to be the path to the plugins
+$USER1$=/usr/lib/nagios/plugins
+
+# Sets $USER2$ to be the path to event handlers
+#$USER2$=/usr/lib/nagios/plugins/eventhandlers
+
+# Store some usernames and passwords (hidden from the CGIs)
+$USER3$=%MYSQL_USERNAME%
+$USER4$=%MYSQL_PASSWORD%
Index: /tags/fc9-eol/noc/nagios/scripts-plugins/check_svn
===================================================================
--- /tags/fc9-eol/noc/nagios/scripts-plugins/check_svn	(revision 1257)
+++ /tags/fc9-eol/noc/nagios/scripts-plugins/check_svn	(revision 1257)
@@ -0,0 +1,452 @@
+#!/usr/bin/env python
+#
+#   Copyright Hari Sekhon 2008
+#
+#   This program is free software; you can redistribute it and/or modify
+#   it under the terms of the GNU General Public License as published by
+#   the Free Software Foundation; either version 2 of the License, or
+#   (at your option) any later version.
+#
+#   This program is distributed in the hope that it will be useful,
+#   but WITHOUT ANY WARRANTY; without even the implied warranty of
+#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#   GNU General Public License for more details.
+#
+#   You should have received a copy of the GNU General Public License
+#   along with this program; if not, write to the Free Software
+#   Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+# 
+
+"""Nagios plugin to test the status of a Subversion (SVN) server. Requires
+   the subversion client "svn" to be installed somewhere in the path"""
+
+# Standard Nagios return codes
+OK       = 0
+WARNING  = 1
+CRITICAL = 2
+UNKNOWN  = 3
+
+import os
+import re
+import sys
+import signal
+import time
+try:
+    from subprocess import Popen, PIPE, STDOUT
+except ImportError:
+    print "UNKNOWN: Failed to import python subprocess module.",
+    print "Perhaps you are using a version of python older than 2.4?"
+    sys.exit(CRITICAL)
+from optparse import OptionParser
+
+__author__      = "Hari Sekhon"
+__title__       = "Nagios Plugin for Subversion"
+__version__     = 0.4
+
+DEFAULT_TIMEOUT = 10
+
+
+def end(status, message):
+    """Prints a message and exits. First arg is the status code
+    Second Arg is the string message"""
+    
+    check_name = "SVN "
+    if status == OK:
+        print "%sOK: %s" % (check_name, message)
+        sys.exit(OK)
+    elif status == WARNING:
+        print "%sWARNING: %s" % (check_name, message)
+        sys.exit(WARNING)
+    elif status == CRITICAL:
+        print "%sCRITICAL: %s" % (check_name, message)
+        sys.exit(CRITICAL)
+    else:
+        # This one is intentionally different
+        print "UNKNOWN: %s" % message
+        sys.exit(UNKNOWN)
+
+
+# Pythonic version of "which", inspired by my beloved *nix core utils
+# although I've decided it makes more sense to fetch a non-executable
+# program and alert on it rather than say it wasn't found in the path 
+# at all from a user perspective.
+def which(executable):
+    """Takes an executable name as a string and tests if it is in the path.
+    Returns the full path of the executable if it exists in path, or None if it
+    does not"""
+
+    for basepath in os.environ['PATH'].split(os.pathsep):
+        path = os.path.join(basepath, executable)
+        if os.path.isfile(path):
+            if os.access(path, os.X_OK):
+                return path
+            else:
+                #print >> sys.stderr, "Warning: '%s' in path is not executable"
+                end(UNKNOWN, "svn utility '%s' is not executable" % path)
+
+    return None
+
+
+BIN = which("svn")
+if not BIN:
+    end(UNKNOWN, "'svn' cannot be found in path. Please install the " \
+               + "subversion client or fix your PATH environment variable")
+
+
+class SvnTester:
+    """Holds state for the svn test"""
+
+    def __init__(self):
+        """Initializes all variables to their default states"""
+
+        self.directory  = ""
+        self.http       = False
+        self.https      = False
+        self.password   = ""
+        self.port       = ""
+        self.protocol   = "svn"
+        self.server     = ""
+        self.timeout    = DEFAULT_TIMEOUT
+        self.username   = ""
+        self.verbosity  = 0
+
+
+    def validate_variables(self):
+        """Runs through the validation of all test variables
+        Should be called before the main test to perform a sanity check
+        on the environment and settings"""
+
+        self.validate_host()
+        self.validate_protocol()
+        self.validate_port()
+        self.validate_timeout()
+
+
+    def validate_host(self):
+        """Exits with an error if the hostname 
+        does not conform to expected format"""
+
+        # Input Validation - Rock my regex ;-)
+        re_hostname = re.compile("^[a-zA-Z0-9]+[a-zA-Z0-9-]*((([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,6})?$")
+        re_ipaddr   = re.compile("^((25[0-5]|2[0-4]\d|[01]\d\d|\d?\d)\.){3}(25[0-5]|2[0-4]\d|[01]\d\d|\d?\d)$")
+
+        if self.server == None:
+            end(UNKNOWN, "You must supply a server hostname or ip address. " \
+                       + "See --help for details")
+
+        if not re_hostname.match(self.server) and \
+           not re_ipaddr.match(self.server):
+            end(UNKNOWN, "Server given does not appear to be a valid " \
+                       + "hostname or ip address")
+    
+
+    def validate_protocol(self):
+        """Determines the protocol to use and sets it in the object"""
+
+        if self.http and self.https:
+            end(UNKNOWN, "cannot choose both http and https, they are " \
+                       + "mutually exclusive")
+        elif self.http:    
+            self.protocol = "http"
+        elif self.https:
+            self.protocol = "https"
+        else:
+            self.protocol = "svn"
+
+
+    def validate_port(self):
+        """Exits with an error if the port is not valid"""
+
+        if self.port == None:
+            self.port = ""
+        else:
+            try:
+                self.port = int(self.port)
+                if not 1 <= self.port <= 65535:
+                    raise ValueError
+            except ValueError:
+                end(UNKNOWN, "port number must be a whole number between " \
+                           + "1 and 65535")
+
+
+    def validate_timeout(self):
+        """Exits with an error if the timeout is not valid"""
+
+        if self.timeout == None:
+            self.timeout = DEFAULT_TIMEOUT
+        try:
+            self.timeout = int(self.timeout)
+            if not 1 <= self.timeout <= 65535:
+                end(UNKNOWN, "timeout must be between 1 and 3600 seconds")
+        except ValueError:
+            end(UNKNOWN, "timeout number must be a whole number between " \
+                       + "1 and 3600 seconds")
+
+        if self.verbosity == None:
+            self.verbosity = 0
+
+
+    def run(self, cmd):
+        """runs a system command and returns a tuple containing 
+        the return code and the output as a single text block"""
+
+        if cmd == "" or cmd == None:
+            end(UNKNOWN, "Internal python error - " \
+                       + "no cmd supplied for run function")
+        
+        self.vprint(3, "running command: %s" % cmd)
+
+        try:
+            process = Popen( cmd.split(), 
+                             shell=False, 
+                             stdin=PIPE, 
+                             stdout=PIPE, 
+                             stderr=STDOUT )
+        except OSError, error:
+            error = str(error)
+            if error == "No such file or directory":
+                end(UNKNOWN, "Cannot find utility '%s'" % cmd.split()[0])
+            else:
+                end(UNKNOWN, "Error trying to run utility '%s' - %s" \
+                                                      % (cmd.split()[0], error))
+
+        stdout, stderr = process.communicate()
+
+        if stderr == None:
+            pass
+
+        if stdout == None or stdout == "":
+            end(UNKNOWN, "No output from utility '%s'" % cmd.split()[0])
+        
+        returncode = process.returncode
+
+        self.vprint(3, "Returncode: '%s'\nOutput: '%s'" % (returncode, stdout))
+        return (returncode, str(stdout))
+
+
+    def set_timeout(self):
+        """Sets an alarm to time out the test"""
+
+        if self.timeout == 1:
+            self.vprint(2, "setting plugin timeout to 1 second")
+        else:
+            self.vprint(2, "setting plugin timeout to %s seconds"\
+                                                                % self.timeout)
+
+        signal.signal(signal.SIGALRM, self.sighandler)
+        signal.alarm(self.timeout)
+
+
+    def sighandler(self, discarded, discarded2):
+        """Function to be called by signal.alarm to kill the plugin"""
+
+        # Nop for these variables
+        discarded = discarded2
+        discarded2 = discarded
+
+        if self.timeout == 1:
+            timeout = "(1 second)"
+        else:
+            timeout = "(%s seconds)" % self.timeout
+
+        end(CRITICAL, "svn plugin has self terminated after exceeding " \
+                    + "the timeout %s" % timeout)
+
+
+    def generate_uri(self):
+        """Creates the uri and returns it as a string"""
+
+        if self.port == "" or self.port == None:
+            port = ""
+        else:
+            port = ":" + str(self.port)
+
+        if self.directory == None:
+            directory = ""
+        else:
+            directory = "/" + str(self.directory).lstrip("/")
+
+        uri = self.protocol + "://"  \
+              + str(self.server)     \
+              + str(port)            \
+              + str(directory)
+
+        return str(uri)
+
+
+    def test_svn(self):
+        """Performs the test of the subversion server"""
+
+        self.validate_variables()
+        self.set_timeout()
+
+        self.vprint(2, "now running subversion test")
+
+        uri = self.generate_uri()
+
+        self.vprint(3, "subversion server address is '%s'" % uri)
+
+        cmd = BIN + " ls " + uri + " --no-auth-cache --non-interactive"
+        if self.username:
+            cmd += " --username=%s" % self.username
+        if self.password:
+            cmd += " --password=%s" % self.password
+
+        result, output = self.run(cmd)
+        
+        if result == 0:
+            if len(output) == 0:
+                return (WARNING, "Test passed but no output was received " \
+                               + "from svn program, abnormal condition, "  \
+                               + "please check.")
+            else:
+                if self.verbosity >= 1:
+                    return(OK, "svn repository online - directory listing: %s" \
+                                        % output.replace("\n", " ").rstrip(" "))
+                else:
+                    return (OK, "svn repository online - " \
+                              + "directory listing successful")
+        else:
+            if len(output) == 0:
+                return (CRITICAL, "Connection failed. " \
+                                + "There was no output from svn")
+            else:
+                if output == "svn: Can't get password\n":
+                    output = "password required to access this repository but" \
+                           + " none was given or cached"
+                output = output.lstrip("svn: ")
+                return (CRITICAL, "Error connecting to svn server - %s " \
+                                        % output.replace("\n", " ").rstrip(" "))
+ 
+
+    def vprint(self, threshold, message):
+        """Prints a message if the first arg is numerically greater than the
+        verbosity level"""
+
+        if self.verbosity >= threshold:
+            print "%s" % message
+
+
+def main():
+    """Parses args and calls func to test svn server"""
+
+    tester = SvnTester()
+    parser = OptionParser()
+    parser.add_option( "-H",
+                       "-S",
+                       "--host",
+                       "--server",
+                       dest="server",
+                       help="The Hostname or IP Address of the subversion "    \
+                          + "server")
+
+    parser.add_option( "-p",
+                       "--port",
+                       dest="port",
+                       help="The port on the server to test if not using the " \
+                          + "default port which is 3690 for svn://, 80 for "   \
+                          + "http:// or 443 for https://.")
+
+    parser.add_option( "--http",
+                       action="store_true",
+                       dest="http",
+                       help="Connect to the server using the http:// " \
+                          + "protocol (Default is svn://)")
+
+    parser.add_option( "--https",
+                       action="store_true",
+                       dest="https",
+                       help="Connect to the server using the https:// " \
+                          + "protocol (Default is svn://)")
+
+    parser.add_option( "--dir",
+                       "--directory",
+                       dest="directory",
+                       help="The directory on the host. Optional but usually " \
+                          + "necessary if using http/https, eg if using an "   \
+                          + "http WebDAV repository "                          \
+                          + "http://somehost.domain.com/repos/svn so this "    \
+                          + "would be --dir /repos/svn. Not usually needed "   \
+                          + "for the default svn:// unless you want to test "  \
+                          + "a specific directory in the repository")
+
+    parser.add_option( "-U",
+                       "--username",
+                       dest="username",
+                       help="The username to use to connect to the subversion" \
+                          + " server.")
+
+    parser.add_option( "-P",
+                       "--password",
+                       dest="password",
+                       help="The password to use to connect to the subversion" \
+                          + " server.")
+
+    parser.add_option( "-t",
+                       "--timeout",
+                       dest="timeout",
+                       help="Sets a timeout after which the the plugin will"   \
+                          + " self terminate. Defaults to %s seconds." \
+                                                              % DEFAULT_TIMEOUT)
+
+    parser.add_option( "-T",
+                       "--timing",
+                       action="store_true",
+                       dest="timing",
+                       help="Enable timer output")
+
+    parser.add_option(  "-v",
+                        "--verbose",
+                        action="count",
+                        dest="verbosity",
+                        help="Verbose mode. Good for testing plugin. By "     \
+                           + "default only one result line is printed as per" \
+                           + " Nagios standards")
+
+    parser.add_option( "-V",
+                        "--version",
+                        action = "store_true",
+                        dest = "version",
+                        help = "Print version number and exit" )
+
+    (options, args) = parser.parse_args()
+
+    if args:
+        parser.print_help()
+        sys.exit(UNKNOWN)
+
+    if options.version:
+        print "%s %s" % (__title__, __version__)
+        sys.exit(UNKNOWN)
+
+    tester.directory  = options.directory
+    tester.http       = options.http
+    tester.https      = options.https
+    tester.password   = options.password
+    tester.port       = options.port
+    tester.server     = options.server
+    tester.timeout    = options.timeout
+    tester.username   = options.username
+    tester.verbosity  = options.verbosity
+
+    if options.timing:
+        start_time = time.time()
+
+    returncode, output = tester.test_svn()
+
+    if options.timing:
+        finish_time = time.time()
+        total_time = finish_time - start_time
+        
+        output += ". Test completed in %.3f seconds" % total_time
+
+    end(returncode, output)
+    sys.exit(UNKNOWN)
+
+
+if __name__ == "__main__":
+    try:
+        main()
+    except KeyboardInterrupt:
+        print "Caught Control-C..."
+        sys.exit(CRITICAL)
Index: /tags/fc9-eol/noc/nagios/services.cfg
===================================================================
--- /tags/fc9-eol/noc/nagios/services.cfg	(revision 1257)
+++ /tags/fc9-eol/noc/nagios/services.cfg	(revision 1257)
@@ -0,0 +1,259 @@
+define service {
+	name	scripts-service
+	use	generic-service
+        max_check_attempts	6
+        normal_check_interval	2
+	retry_check_interval	1
+        contact_groups  scripts
+	notification_interval	240
+        notification_period	24x7
+        notification_options    w,u,c,r
+	register 0
+}
+
+define service {
+	name	scripts-nrpe-service
+	use	scripts-service
+	notification_options	w,c,r
+	register 0
+}
+
+define service {
+        use                             scripts-service
+        hostgroup_name			scripts-all
+        service_description             PING
+	check_command			check_ping!500.0,30%!3000.0,80%
+        }
+
+
+define service {
+	use	scripts-service
+	hostgroup_name	scripts-real
+	service_description	SSH
+	check_command	check_ssh
+}
+
+define service {
+	use	scripts-service
+	host_name	scripts
+	service_description	SSH
+	check_command	check_ssh
+	notification_period	afs
+	contact_groups	scripts,pagers
+}
+
+define service {
+	use	scripts-service
+	hostgroup_name	scripts-http
+	service_description	HTTP
+	notification_period	afs
+	check_command	check_http_heartbeat
+	contact_groups	scripts,pagers
+}
+
+define service {
+	use	scripts-service
+	hostgroup_name		scripts-https
+	service_description	HTTPS
+	notification_period	afs
+	check_command	check_https_cert!14
+	contact_groups	scripts,pagers
+}
+
+define service {
+	use	scripts-service
+	hostgroup_name		scripts-https
+	service_description	HTTPS-CERT
+	notification_period	afs
+	check_command	check_https_cert_444!14
+	contact_groups	scripts,pagers
+}
+
+define service {
+	use	scripts-service
+	host_name	scripts
+	service_description	SVN
+	check_command	check_svn
+	notification_period	afs
+}
+
+define service {
+	use	scripts-service
+	hostgroup_name	scripts-user
+	service_description	SVN
+	check_command	check_svn
+	notification_period	afs
+}
+
+define servicedependency{
+	host_name			scripts
+	service_description		HTTP
+	dependent_host_name		scripts,scripts-cert,wildcard.scripts
+	dependent_service_description	HTTPS,HTTPS-CERT
+	execution_failure_criteria	n
+	notification_failure_criteria	w,u,c
+	}
+
+define servicedependency{
+	host_name			scripts
+	service_description		HTTP
+	dependent_host_name		scripts-cert
+	dependent_service_description	HTTP
+	execution_failure_criteria	n
+	notification_failure_criteria	w,u,c
+	}
+
+
+define service {
+	use	scripts-nrpe-service
+	hostgroup_name	scripts-mail
+	service_description	POSTFIX
+	check_command	check_remote_procs_u!1:128!1:256!postfix
+}
+
+define service {
+	use	scripts-service
+	hostgroup_name	scripts-user
+	service_description	HTTP
+	notification_period	afs
+	check_command	check_http_heartbeat
+	contact_groups	scripts
+}
+
+define service {
+	use	scripts-service
+	hostgroup_name		scripts-user
+	service_description	HTTPS
+	notification_period	afs
+	check_command	check_https_cert!14
+	contact_groups	scripts
+}
+
+define service {
+	use	scripts-nrpe-service
+	hostgroup_name	scripts-user
+	service_description	NSCD
+	check_command	check_remote_procs_u!1:256!1:512!nscd
+}
+
+define service {
+	use scripts-nrpe-service
+	hostgroup_name scripts-user
+	service_description	AFS
+	notification_period	afs
+	check_command	check_remote_afs
+}
+
+define service {
+	use scripts-nrpe-service
+	hostgroup_name scripts-user
+	service_description	CRON-WORKING
+	notification_period	afs
+	check_command	check_remote_cron_working
+}
+
+define service {
+	use	scripts-nrpe-service
+	hostgroup_name	scripts-user
+	service_description	USERS
+	check_command	check_remote_users!50!25
+}
+
+define service {
+    use scripts-service
+    hostgroup_name scripts-user
+    service_description LDAP
+    check_command check_scripts_ldap
+}
+
+define service {
+       use     scripts-service
+       hostgroup_name	scripts-mail
+       service_description	SMTP
+       check_command	check_smtp
+}
+
+define service {
+       use     scripts-service
+       host_name	scripts
+       notification_period	afs
+       service_description	SMTP
+       check_command	check_smtp
+}
+
+define service {
+	use	scripts-nrpe-service
+	hostgroup_name	scripts-cron
+	service_description	CRON
+	check_command	check_remote_procs_C!1:!1:!crond
+}
+
+define service {
+	use	scripts-service
+	hostgroup_name	scripts-real
+	service_description	NRPE
+	check_command	check_nrpe_alive
+}
+
+define service {
+	use	scripts-nrpe-service
+	hostgroup_name	scripts-real
+	service_description	DISK
+	check_command	check_remote_disk!10%!5%
+}
+
+define service {
+	use	scripts-nrpe-service
+	hostgroup_name	scripts-user
+	service_description	LOAD
+	check_command	check_remote_load!50:50:50!100:50:50
+}
+
+define service {
+	use	scripts-nrpe-service
+	hostgroup_name	mysql-masters,mysql-slaves
+	service_description	LOAD
+	check_command	check_remote_load!16:10:10!20:15:15
+	contact_groups  sql
+}
+
+define service {
+	use	scripts-service
+	hostgroup_name	scripts-mysql
+	service_description	MYSQL
+	check_command	check_tcp!3306
+	contact_groups	sql,scripts,pagers
+}
+
+define service {
+	use	scripts-service
+	hostgroup_name	scripts-mysql
+	service_description	HTTP
+	notification_period	afs
+	check_command	check_http
+	contact_groups	sql,scripts,pagers
+}
+
+define service {
+	use	scripts-nrpe-service
+	hostgroup_name	mysql-masters
+	service_description	MYSQL-M
+	check_command	check_remote_mysql
+	contact_groups  sql,scripts
+}
+
+define service {
+	use	scripts-nrpe-service
+	hostgroup_name	mysql-slaves
+	service_description	MYSQL-S
+	check_command	check_remote_mysql_slave
+	contact_groups  sql,scripts
+}
+
+define service {
+	use	scripts-nrpe-service
+	hostgroup_name	scripts-user
+	service_description	CPU
+	notifications_enabled	0
+	check_command	check_remote_procs_P!4!6!50
+}
Index: /tags/fc9-eol/noc/nagios/sipb.cfg
===================================================================
--- /tags/fc9-eol/noc/nagios/sipb.cfg	(revision 1257)
+++ /tags/fc9-eol/noc/nagios/sipb.cfg	(revision 1257)
@@ -0,0 +1,75 @@
+# XVM
+
+define contactgroup {
+        contactgroup_name       sipb
+        alias                   sipb Zephyr
+        members                 sipb-auto-zephyr
+}
+
+define contact {
+	use				xvm-contact
+        contact_name                    sipb-auto-zephyr
+        alias                           sipb-auto-zephyr
+	host_notification_period	24x7
+	service_notification_period	24x7
+        service_notification_options    w,u,c,r
+        host_notification_options       d,u,r
+        host_notification_commands      host-notify-by-zephyr
+        service_notification_commands   notify-by-zephyr
+        email                           sipb-auto
+}
+
+define host {
+	name sipb-host
+	use	generic-host
+	register	0
+        max_check_attempts      10
+        check_period		24x7
+	check_command	check-host-alive
+        notification_interval   120
+        notification_period     24x7
+        notification_options    d,r
+        contact_groups  sipb
+	parents	sipb-ether
+}
+
+define service {
+	name	sipb-service
+	use	generic-service
+        max_check_attempts	6
+        normal_check_interval	2
+	retry_check_interval	1
+        contact_groups  sipb
+	notification_interval	120
+        notification_period	24x7
+        notification_options    w,u,c,r
+	register 0
+}
+
+define host {
+	use	sipb-host
+	host_name	stuff
+	address	18.181.0.31
+}
+
+define service {
+        use                             sipb-service
+        host_name			stuff
+        service_description             PING
+	check_command			check_ping!500.0,30%!3000.0,80%
+}
+
+#define service {
+#	use	sipb-service
+#	host_name	stuff
+#	service_description	SSH
+#	check_command	check_ssh
+#}
+
+define service {
+	use	sipb-service
+	host_name	stuff
+	service_description	HTTP
+	notification_period	afs
+	check_command	check_http
+}
Index: /tags/fc9-eol/noc/nagios/status-user/finger.sh
===================================================================
--- /tags/fc9-eol/noc/nagios/status-user/finger.sh	(revision 1257)
+++ /tags/fc9-eol/noc/nagios/status-user/finger.sh	(revision 1257)
@@ -0,0 +1,71 @@
+#!/bin/bash
+
+ulimit -v 10240
+
+export LINES=1000
+export COLUMNS=80
+docnagios() {
+	echo q | env TERM=ansi /usr/local/nagios/bin/cnagios -b "$@" | sed 's/
+\[B/\n/g; s/
+/\n/g' | perl -pe '
+s/^.*(?=sipb-nagios)//; # remove garbage at beginning
+s/(.)\\[(\d+)b/$1x($2+1)/ge; # (\d+)b means repeat previous character n times
+s/\\[(\d+)d//g; # absolute go to line; ignored
+1 while s/\\[(\d+)G/" "x($1-$-[0]-1)/e; # go to absolute horizontal position
+1 while s/\\[\d+;(\d+)H/" "x($1-$-[0]-1)/e; # go to absolute position; line ignored
+'
+}
+
+gethostgroups() {
+    cat /etc/nagios3/*.cfg | perl -ne 'print if ( /^(\s*)define hostgroup [\{[]/ ... /[\}\]]/ )' | perl -ne 'm|hostgroup_name\s+(\S+)| and $name = $1; m|members\s+(.+)\s*$| and $members = $1; m|\}| and print "$name\t$members\n"'
+}
+
+gethgmembers() {
+    gethostgroups | grep "^$1	" | cut -f 2 -d "	" | sed 's/,/\n/g' | sort -u | perl -pe 's/\n/|/g' | sed 's/|$//'
+}
+
+read line
+line=${line%[:blank:]}
+line=${line%
+}
+
+cols=${line##*-}
+if [ "$cols" -eq "$cols" ] 2>/dev/null; then
+    export COLUMNS="$cols"
+    line=${line%-*}
+fi
+case "$line" in
+    status)
+	docnagios
+	;;
+    broken)
+	docnagios -l w
+	;;
+    load)
+	docnagios -g /LOAD/
+	;;
+    scripts-user)
+	docnagios -g "/$(gethgmembers "scripts-user.*")/"
+	;;
+    scripts)
+	docnagios -g "/$(gethgmembers "scripts.*")/"
+	;;
+    xvm)
+	docnagios -g "/$(gethgmembers "xvm.*")/"
+	;;
+    *)
+	cat <<EOF
+Available information:
+finger status@sipb-noc -- all services
+finger broken@sipb-noc -- services that are not OKAY
+finger load@sipb-noc   -- all LOAD services
+finger scripts-user@sipb-noc-- all scripts user services
+finger scripts@sipb-noc-- all scripts services
+finger xvm@sipb-noc    -- only XVM servers
+EOF
+	;;
+esac
+#s/\\[\d*[a-zA-Z]//g'
+#perl -pe 's/^.*?\[H //s; s/.\[\d+;1H/\n/g; s/^\s+//mg;'
+
+# s/^\s+$//mg; s/Command: .*//s; s/$/\[0m/'
Index: /tags/fc9-eol/noc/ng/CHANGELOG
===================================================================
--- /tags/fc9-eol/noc/ng/CHANGELOG	(revision 1257)
+++ /tags/fc9-eol/noc/ng/CHANGELOG	(revision 1257)
@@ -0,0 +1,51 @@
+0.8.2 2006-04-12
+
+* Fix to match rrd files. Patch from elfrinjo.
+
+0.8.1 2006-04-08
+
+* Db-file-has-a-number bug fixed. Patch from Ton Voon.
+
+0.8 2006-04-05
+
+* Use stylesheet. Contribution from Ton Voon.
+* Splitting graphs is now default. Contribution from Doug Farley.
+
+0.7 2005-10-27
+
+* Another significant performance increase by eval of rules only once
+* Header flush bug fixed
+
+0.6 2005-10-18
+
+* Only using RRD perl modules is supported. Removed binary rrdtool 
+  dependency.
+* Added support for perfdata log file for performance increase.  
+  Contribution from Alex.
+
+0.5 2005-06-22
+
+* Color bug fixed
+* Support for customized heartbeat
+
+0.4 2005-04-22
+
+* Better color handling
+* New webpage design
+* Added rrdopts feature
+* Several bug fixes
+
+0.3 2004-12-04
+
+* Added logging of system errors
+* Added customized graph sizes feature
+* Several bug fixes
+
+0.2 2004-10-14
+
+* Added documentation.
+* Delimiter bug fixed.
+
+0.1 2004-08-03
+
+* Initial release
Index: /tags/fc9-eol/noc/ng/INSTALL
===================================================================
--- /tags/fc9-eol/noc/ng/INSTALL	(revision 1257)
+++ /tags/fc9-eol/noc/ng/INSTALL	(revision 1257)
@@ -0,0 +1,124 @@
+nagiosgraph Installation
+------------------------
+
+File:    $Id: INSTALL,v 1.14 2006/04/05 12:37:11 sauber Exp $
+Author:  (c) Soren Dossing, 2005
+License: OSI Artistic License
+         http://www.opensource.org/licenses/artistic-license.php
+
+Follow instructions below to install and use nagiosgraph. The
+instructions are for Nagios 2.0b4, and might differ in other versions of
+Nagios.
+
+ - Check required packaged are installed: perl, CGI, nagios and rrdtool
+
+ - Install nagiosgraph.conf, map, insert.pl and show.cgi somewhere, for 
+   example in /usr/local/nagios/nagiosgraph/
+
+ - Edit paths, debug level etc. in nagiosgraph.conf.
+
+ - Check that nagios user can write to rrd dir, and www user can read.
+
+ - Check that nagios and www user can write to log file.
+
+ - In insert.pl and show.cgi edit path to nagiosgraph.conf file.
+
+ - In nagios.cfg set:
+
+     process_performance_data=1
+     service_perfdata_file=/var/spool/nagios/perfdata.log
+     service_perfdata_file_template=$LASTSERVICECHECK$||$HOSTNAME$||$SERVICEDESC$||$SERVICEOUTPUT$||$SERVICEPERFDATA$
+     service_perfdata_file_mode=a
+     service_perfdata_file_processing_interval=30
+     service_perfdata_file_processing_command=process-service-perfdata
+
+   Make sure that service_perfdata_command is not defined.
+
+   Make sure that location of perfdata_file matches definition in 
+   nagiosgraph.conf .
+
+ - In checkcommands.cfg or misccommands.cfg:
+
+     define command {
+       command_name  process-service-perfdata
+       command_line  /usr/local/nagios/nagiosgraph/insert.pl
+     }
+
+   Make sure there is only one definition for process-service-perfdata.
+
+ - Alternative to the two points above: The old style is still possible. 
+   It uses far more CPU but inserts data in rrd files immediately for 
+   every service check.
+
+   In nagios.cfg:
+
+     service_perfdata_command=process-service-perfdata
+
+   Make sure that service_perfdata_file_processing_command is not 
+   defined.
+
+   In misccommands.cfg:
+
+     define command{
+       command_name    process-service-perfdata
+       command_line  /usr/local/nagios/nagiosgraph/insert.pl "$LASTSERVICECHECK$||$HOSTNAME$||$SERVICEDESC$||$SERVICEOUTPUT$||$SERVICEPERFDATA$"
+     }
+
+ - Put an icon approx. 40x40 in .../share/images/logos/ for nagios to link
+   to graphs.
+
+ - Copy nagiosgraph.css to .../nagios/stylesheets/ .
+
+ - In cgi.cfg have:
+
+     xedtemplate_config_file=/usr/local/etc/nagios/serviceextinfo.cfg
+
+ - Edit serviceextinfo.cfg
+
+   Most services can be graphed with no particular configuration like this:
+
+     define serviceextinfo {
+       service_description  DNS
+       hostgroup       servers
+       notes_url       /nagiosgraph/show.cgi?host=$HOSTNAME$&service=$SERVICEDESC$
+       icon_image      graph.gif
+       icon_image_alt  View graphs
+     }
+
+   Instead of hostgroup line a host_name line with all hosts where this
+   type of data are being collected.
+
+   Some type of services have data values that have big differences in the
+   magnitude. In such cases it's good idea to split up into seperate
+   graphs. Here's an example for ntp:
+
+     define serviceextinfo {
+       service_description  NTP
+       host_name       server01,server02,server03,server04
+       notes_url       /nagiosgraph/show.cgi?host=$HOSTNAME$&service=$SERVICEDESC$&db=ntp,jitter,offset&db=ntp,stratum
+       icon_image      graph.gif
+       icon_image_alt  View graphs
+     }
+
+ - Add for example &geom=350x100 to notes_url line for custom sizes of 
+   graphs.
+
+ - Add for example &rrdopts=%2Dl%200%20%2Du%20100 (meaning: 
+   "-l 0 -u 100") to notes_url line for custom Y axis ranges. Any 
+   rrdgraph options can be specified, but has to be url encoded.
+
+ - Configure Apache to point to show.cgi. For example:
+
+     ScriptAlias /nagiosgraph/ /usr/local/nagios/nagiosgraph/
+
+ - To add new service types, edit the map file. This contains regular
+   expression to identify service types, and defines how to store data in 
+   rrd files. Use testentry.pl for testing before inserting in map file.
+
+ - Consider security.
+
+ - Start Nagios. Increase debug level in nagiosgraph.conf if things don't
+   work right away.
+
+ - Keep an eye on the log file. It can grow big. Perhaps rotate it, or
+   decrease log level when everything works fine.
Index: /tags/fc9-eol/noc/ng/README
===================================================================
--- /tags/fc9-eol/noc/ng/README	(revision 1257)
+++ /tags/fc9-eol/noc/ng/README	(revision 1257)
@@ -0,0 +1,95 @@
+Nagiosgraph
+-----------
+
+File:    $Id: README,v 1.10 2006/04/05 12:37:11 sauber Exp $
+Author:  (c) Soren Dossing, 2005
+License: OSI Artistic License
+         http://www.opensource.org/licenses/artistic-license.php
+
+
+Summary:
+
+Collects perfdata from Nagios check scripts and inserts data into rrd
+files. Data in the rrdfiles can be displayed in html pages with cgi
+script.
+
+
+Note:
+
+Nagios is a registered trademark of Ethan Galstad.
+
+
+Files:
+
+CHANGELOG         - History of changes
+INSTALL           - Dcoument for how to install and use nagiosgraph
+README            - This file
+README.map        - Document for how to create map file entries
+insert.pl         - Reads perfdata log from nagios and insert into rrd 
+                    files.
+show.cgi          - Generates a html page for the host/sevice specified, 
+                    and generates graphs on-the-fly.
+nagiosgraph.conf  - paths and other configuration
+nagiosgraph.css   - CSS stylesheet
+map               - Regular expression to identify services and 
+                    specification for how to create rrd files.
+testcolor.cgi     - Preview of colors for keywords in each color scheme
+testentry.pl      - A script for testing new map file entries.
+
+
+Usage:
+
+Follow the instructions in INSTALL for how to install and configure 
+nagiosgraph.
+
+
+Getting Help:
+
+Discussions related to nagiosgraph are located in a Sourceforge help
+forum; http://sourceforge.net/forum/forum.php?forum_id=394748 . A
+Sourceforge account is necessary for posting.
+
+
+Principles of Operation:
+
+nagiosgraph is basically a simple interface between Nagios and rrd data
+files. Simplicity comes from three factors; it doesn't do much, behavior
+is programmed rather than configurable, and automatically detects new
+data from Nagios.
+
+nagiosgraphs is operating in two modes. One is to collect performance
+data from servicechecks from nagios, and the other is to display graphs
+of the performance data collected.
+
+All the data collected are stored in rrd files by using rrdtools. A file
+called 'map' defines how identify the data from nagios and how to store
+it in the rrd files. Nagios passes all the service data collected to a
+nagiosgraph script called 'insert.pl'. This script will look up in
+'map', which rrd file to insert the data into, and how to name the data.
+
+In Nagios it's also possible to have extended service information pages.
+A nagiosgraph cgi script called 'show.cgi' can be used for such service
+information links. 'show.cgi' will look up in 'map' which performance
+data is stored in rrd files, and display graphs of this data. 
+
+nagiosgraph will automatically detect when new hosts or services has
+been added in Nagios, so generally no configuration of nagiosgraph is
+necessary when configuration of Nagios changes.
+
+nagiosgraph is designed to only require very little configuration.
+Integrating with Nagios is a complicated process nevertheless. The
+'README' file describes how to configure nagiosgraph and integrate with
+Nagios.
+
+The 'map' configuration file is actually perl code, that will be eval'ed
+by 'insert.pl' and 'show.cgi'. Several examples of servicechecks are
+included in the distributed 'map' file, but generally it's necessary to
+make modifications or add entries to match the output of the particular
+nagiosplugins in use. Knowing perl is helpful when making modifications,
+but the examples supplied should cover most types of performance data.
+
+By default all available data for a servicecheck will be displayed in
+the same graph. With extra configuration, embedded in the url, it's
+possible to display less data or to split values into multiple graphs.
+There is also a general method for specifying any rrd graph options.
+
Index: /tags/fc9-eol/noc/ng/README.map
===================================================================
--- /tags/fc9-eol/noc/ng/README.map	(revision 1257)
+++ /tags/fc9-eol/noc/ng/README.map	(revision 1257)
@@ -0,0 +1,100 @@
+map file
+--------
+
+File:    $Id: README.map,v 1.3 2005/10/08 05:55:08 sauber Exp $
+Author:  (c) Soren Dossing, 2005
+License: OSI Artistic License
+         http://www.opensource.org/licenses/artistic-license.php
+
+This describes how to work with the map file.
+
+The file called 'map' contains regular expressions to identify services 
+and define content in RRD databases. All entries are written in perl, so 
+editing, adding or deleting entries requires some perl programming 
+knowledge. Knowledge of RRD is also necessary.
+
+There has to be one entry for each type of service. The distributed map 
+file already have several examples for cpu, memory, disk, network etc.
+Most examples follow the same schema of identifying data from either 
+Nagios output or Nagios perfdata and defining a number of rrd data 
+sources.
+
+insert.pl is the script receiving data from Nagios. It format data for map 
+file by creating one string consisting of three lines of text. This string 
+might look like this:
+
+  servicedesc:ping
+  output:PING OK - Packet loss = 0%, RTA = 0.00 ms
+  perfdata:
+
+Or like this:
+
+  servicedescr:CPU Load 
+  output:OK - load average: 0.06, 0.12, 0.10
+  perfdata:load1=0;15;30;0 load5=0;10;25;0 load15=0;5;20;0 
+
+perfdata is not always set, so depending on type of service, the most 
+useful data can be in either the output or perfdata line.
+
+For the ping example above, data can be extracted from the output line 
+with a regular expression like this:
+
+  /output:PING.*?(\d+)%.+?([.\d]+)\sms/
+
+In this case, two values are extracted and available in $1 and $2. We can 
+then create a data structure describing the content of the database. The 
+general format is
+
+  [ db-name,
+    [ DS-name, TYPE, DS-value ],
+    [ DS-name, TYPE, DS-value ],
+    ...
+  ]
+
+Where DS-name is the name that will be assigned to a line showing on rrd 
+graphs. TYPE is either GAUGE or DERIVE. the DS value is the data 
+extracted in the regular expression. The DS value can be an expression, 
+for example to normalize to SI units.
+
+Each database definition must be added to the @s array.
+
+So the complete code to define and insert into and rrd database for the 
+PING example above, becomes:
+
+  /output:PING.*?(\d+)%.+?([.\d]+)\sms/
+  and push @s, [ ping,
+                [ losspct, GAUGE, $1      ],
+                [ rta,     GAUGE, $2/1000 ] ];
+
+In this case the database name is called 'ping' and the DS-names stored 
+are losspct and rta. The Nagios output reports round trip time in 
+milliseconds, so the value is multiplied by 1000 to convert to seconds. 
+Both DS type are GAUGE.
+
+Be careful about the database names and DS names. In the code example 
+above the names are barewords, which only works as long as the don't 
+conflict with perl functions or subroutines. For example the word 'sleep' 
+will not work without quoting.
+
+A safer version of the above example is
+
+  /output:PING.*?(\d+)%.+?([.\d]+)\sms/
+  and push @s, [ 'ping',
+                [ 'losspct', 'GAUGE', $1      ],
+                [ 'rta',     'GAUGE', $2/1000 ] ];
+
+After editing map file, the syntax can be checked with
+
+  perl -c map
+
+Again a word of caution. If map file has syntax errors, nothing will be 
+inserted into rrd files until the file is fixed. So don't edit production 
+map files. Instead do something like this:
+
+  cp map map.edit
+  vi map.edit
+  perl -c map.edit
+  mv map.edit map
+
+Share your work. If you have a good map file entry for standard Nagios 
+plugins, then please post it on the forum, or send it to me.
Index: /tags/fc9-eol/noc/ng/bin/insert.pl
===================================================================
--- /tags/fc9-eol/noc/ng/bin/insert.pl	(revision 1257)
+++ /tags/fc9-eol/noc/ng/bin/insert.pl	(revision 1257)
@@ -0,0 +1,210 @@
+#!/usr/bin/perl
+
+# File:    $Id: insert.pl,v 1.17 2005/10/26 14:42:57 sauber Exp $
+# Author:  (c) Soren Dossing, 2005
+# License: OSI Artistic License
+#          http://www.opensource.org/licenses/artistic-license.php
+
+use strict;
+use RRDs;
+
+# Configuration
+my $configfile = '/home/noc/ng/etc/nagiosgraph.conf';
+
+# Main program - change nothing below
+
+my %Config;
+
+# Read in config file
+#
+sub readconfig {
+  die "config file not found" unless -r $configfile;
+
+  # Read configuration data
+  open FH, $configfile;
+    while (<FH>) {
+      s/\s*#.*//;    # Strip comments
+      /^(\w+)\s*=\s*(.*?)\s*$/ and do {
+        $Config{$1} = $2;
+        debug(5, "INSERT Config $1:$2");
+      };
+    }
+  close FH;
+
+  # Make sure log file can be written to
+  die "Log file $Config{logfile} not writable" unless -w $Config{logfile};
+
+  # Make sure rrddir exist and is writable
+  unless ( -w $Config{rrddir} ) {
+    mkdir $Config{rrddir};
+    die "rrd dir $Config{rrddir} not writable" unless -w $Config{rrddir};
+  }
+}
+
+# Parse performance data from input
+#
+sub parseinput {
+  my $data = shift;
+  #debug(5, "INSERT perfdata: $data");
+  my @d = split( /\|\|/, $data);
+  return ( lastcheck    => $d[0],
+           hostname     => $d[1],
+           servicedescr => $d[2],
+           output       => $d[3],
+           perfdata     => $d[4],
+         );
+}
+
+# Write debug information to log file
+#
+sub debug { 
+  my($l, $text) = @_;
+  if ( $l <= $Config{debug} ) {
+    $l = qw(none critical error warn info debug)[$l];
+    $text =~ s/(\w+)/$1 $l:/;
+    open LOG, ">>$Config{logfile}";
+      print LOG scalar localtime;
+      print LOG " $text\n";
+    close LOG;
+  }
+}
+
+# Dump to log the files read from Nagios
+#
+sub dumpperfdata {
+  my %P = @_;
+  for ( keys %P ) {
+    debug(4, "INSERT Input $_:$P{$_}");
+  }
+}
+
+# URL encode a string
+#
+sub urlencode {
+  $_[0] =~ s/([\W])/"%" . uc(sprintf("%2.2x",ord($1)))/eg;
+  return $_[0];
+}
+
+# Create new rrd databases if necessary
+#
+sub createrrd {
+  my($host,$service,$start,$labels) = @_;
+  my($f,$v,$t,$ds,$db);
+
+  $db = shift @$labels;
+  $f = urlencode("${host}_${service}_${db}") . '.rrd';
+  debug(5, "INSERT Checking $Config{rrddir}/$f");
+  unless ( -e "$Config{rrddir}/$f" ) {
+    $ds = "$Config{rrddir}/$f --start $start";
+    for ( @$labels ) {
+      ($v,$t) = ($_->[0],$_->[1]);
+      my $u = $t eq 'DERIVE' ? '0' : 'U' ;
+      $ds .= " DS:$v:$t:$Config{heartbeat}:$u:U";
+    }
+    $ds .= " RRA:AVERAGE:0.5:1:600";
+    $ds .= " RRA:AVERAGE:0.5:6:700";
+    $ds .= " RRA:AVERAGE:0.5:24:775";
+    $ds .= " RRA:AVERAGE:0.5:288:797";
+
+    my @ds = split /\s+/, $ds;
+    debug(4, "INSERT RRDs::create $ds");
+    RRDs::create(@ds);
+    debug(2, "INSERT RRDs::create ERR " . RRDs::error) if RRDs::error;
+  }
+  return $f;
+}
+
+# Use RRDs to update rrd file
+#
+sub rrdupdate {
+  my($file,$time,$values) = @_;
+  my($ds,$c);
+
+  $ds = "$Config{rrddir}/$file $time";
+  for ( @$values ) {
+    $_->[2] ||= 0;
+    $ds .= ":$_->[2]";
+  }
+
+  my @ds = split /\s+/, $ds;
+  debug(4, "INSERT RRDs::update ". join ' ', @ds);
+  RRDs::update(@ds);
+  debug(2, "INSERT RRDs::update ERR " . RRDs::error) if RRDs::error;
+}
+
+# See if we can recognize any of the data we got
+#
+sub parseperfdata {
+  my %P = @_;
+
+  $_="servicedescr:$P{servicedescr}\noutput:$P{output}\nperfdata:$P{perfdata}";
+  evalrules($_);
+}
+
+# Check that we have some data to work on
+#
+sub inputdata {
+  my @inputlines;
+  if ( $ARGV[0] ) {
+    @inputlines = $ARGV[0];
+  } elsif ( defined $Config{perflog} ) {
+    open PERFLOG, $Config{perflog};
+      @inputlines = <PERFLOG>;
+    close PERFLOG
+  }
+
+  # Quit if there are no data to process
+  unless ( @inputlines ) {
+    debug(4, 'INSERT No inputdata. Exiting.');
+    exit 1;
+  }
+  return @inputlines;
+}
+
+# Process all input performance data
+#
+sub processdata {
+  my @perfdatalines = @_;
+  for my $l ( @perfdatalines ) {
+    debug(5, "INSERT processing perfdata: $l");
+    my %P = parseinput($l);
+    dumpperfdata(%P);
+    my $S = parseperfdata(%P);
+    for my $s ( @$S ) {
+      my $rrd = createrrd($P{hostname}, $P{servicedescr}, $P{lastcheck}-1, $s);
+      rrdupdate($rrd, $P{lastcheck}, $s);
+    }
+  }
+}
+
+### Main loop
+#  - Read config and input
+#  - Update rrd files
+#  - Create them first if necesary.
+
+readconfig();
+debug(5, 'INSERT nagiosgraph spawned');
+my @perfdata = inputdata();
+
+# Read the map file and define a subroutine that parses performance data
+my($rules);
+undef $/;
+open FH, $Config{mapfile};
+  $rules = <FH>;
+close FH;
+$rules = '
+sub evalrules {
+  $_=$_[0];
+  my @s;
+  no strict "subs";
+' . $rules . '
+  use strict "subs";
+  debug(3, "INSERT perfdata not recognized") unless @s;
+  return \@s;
+}';
+undef $@;
+eval $rules;
+debug(2, "INSERT Map file eval error: $@") if $@;
+
+processdata( @perfdata );
+debug(5, 'INSERT nagiosgraph exited');
Index: /tags/fc9-eol/noc/ng/cgi-bin/show.cgi
===================================================================
--- /tags/fc9-eol/noc/ng/cgi-bin/show.cgi	(revision 1257)
+++ /tags/fc9-eol/noc/ng/cgi-bin/show.cgi	(revision 1257)
@@ -0,0 +1,276 @@
+#!/usr/bin/perl
+
+# File:    $Id: show.cgi,v 1.22 2006/04/12 09:42:16 sauber Exp $
+# Author:  (c) Soren Dossing, 2005
+# License: OSI Artistic License
+#          http://www.opensource.org/licenses/artistic-license.php
+
+use strict;
+use RRDs;
+use CGI qw/:standard/;
+
+# Configuration
+my $configfile = '/home/nagios/ng/etc/nagiosgraph.conf';
+
+# Main program - change nothing below
+
+my %Config;
+
+# Read in configuration data
+#
+sub readconfig {
+  die "config file not found" unless -r $configfile;
+
+  # Read configuration data
+  open FH, $configfile;
+    while (<FH>) {
+      s/\s*#.*//;    # Strip comments
+      /^(\w+)\s*=\s*(.*?)\s*$/ and do {
+        $Config{$1} = $2;
+        debug(5, "CGI Config $1:$2");
+      };
+    }
+  close FH;
+
+  # Make sure log file can be written to
+  unless ( -w $Config{logfile} ) {
+    my $msg = "Log file $Config{logfile} not writable";
+    print header(-type => "text/html", -expires => 0);
+    print p($msg);
+    debug (2, "CGI Config $msg");
+    return undef;
+  }
+
+  # Make sure rrddir is readable
+  unless ( -r $Config{rrddir} ) {
+    my $msg = "rrd dir $Config{rrddir} not readable";
+    print header(-type => "text/html", -expires => 0);
+    print p($msg);
+    debug (2, "CGI Config $msg");
+    return undef;
+  }
+
+  return 1;
+}
+
+# Write debug information to log file
+#
+sub debug {
+  my($l, $text) = @_;
+  if ( $l <= $Config{debug} ) {
+    $l = qw(none critical error warn info debug)[$l];
+    $text =~ s/(\w+)/$1 $l:/;
+    open LOG, ">>$Config{logfile}";
+      print LOG scalar localtime;
+      print LOG " $text\n";
+    close LOG;
+  }
+}
+
+# URL encode a string
+#
+sub urlencode {
+  $_[0] =~ s/([\W])/"%" . uc(sprintf("%2.2x",ord($1)))/eg;
+  return $_[0];
+}
+
+# Get list of matching rrd files
+#
+sub dbfilelist {
+  my($host,$service) = @_;
+  my $hs = urlencode "${host}_${service}";
+  my @rrd;
+  opendir DH, $Config{rrddir};
+    @rrd = grep s/^${hs}_(.+)\.rrd$/$1/, readdir DH;
+  closedir DH;
+  return @rrd;
+}
+
+# Find graphs and values
+#
+sub graphinfo {
+  my($host,$service,@db) = @_;
+  my(@rrd,$ds,$f,$dsout,@values,$hs,%H,%R);
+
+  $hs = urlencode "${host}_${service}";
+
+  debug(5, 'CGI @db=' . join '&', @db);
+
+  # Determine which files to read lines from
+  if ( @db ) {
+    my $n = 0;
+    for my $d ( @db ) {
+      my($db,@lines) = split ',', $d;
+      $rrd[$n]{file} = $hs . urlencode("_$db") . '.rrd';
+      for my $l ( @lines ) {
+        my($line,$unit) = split '~', $l;
+        if ( $unit ) {
+          $rrd[$n]{line}{$line}{unit} = $unit if $unit;
+        } else {
+          $rrd[$n]{line}{$line} = 1;
+        }
+      }
+      $n++;
+    }
+    debug(4, "CGI Specified $hs db files in $Config{rrddir}: "
+           . join ', ', map { $_->{file} } @rrd);
+  } else {
+    @rrd = map {{ file=>$_ }}
+           map { "${hs}_${_}.rrd" }
+           dbfilelist($host,$service);
+    debug(4, "CGI Listing $hs db files in $Config{rrddir}: "
+           . join ', ', map { $_->{file} } @rrd);
+  }
+
+  for $f ( @rrd ) {
+    unless ( $f->{line} ) {
+      $ds = RRDs::info "$Config{rrddir}/$f->{file}";
+      debug(2, "CGI RRDs::info ERR " . RRDs::error) if RRDs::error;
+      map { $f->{line}{$_} = 1}
+      grep {!$H{$_}++}
+      map { /ds\[(.*)\]/; $1 }
+      grep /ds\[(.*)\]/,
+      keys %$ds;
+    }
+    debug(5, "CGI DS $f->{file} lines: "
+           . join ', ', keys %{ $f->{line} } );
+  }
+  return \@rrd;
+}
+
+# Choose a color for service
+#
+sub hashcolor {
+  my$c=$Config{colorscheme};
+  map{
+    $c=(51*$c+ord)%(216)
+  } split//,"$_[0]x";
+  my($i,$n,$m,@h);
+  @h=(51*int$c/36,
+      51*int$c/6%6,
+      51*($c%6));
+#debug(2, "hashcolor $_[0], $c, $h[0]");
+  for$i(0..2){
+	$m=$i if$h[$i]<$h[$m];
+	$n=$i if$h[$i]>$h[$n]
+  }
+  $h[$m]=102 if$h[$m]>102;
+  $h[$n]=153 if$h[$n]<153;
+#debug(2, "hashcolor $_[0]\t$c\t$h[0]\t$h[1]\t$h[2]");
+  #$c=sprintf"%06X",$h[2]+$h[1]*256+$h[0]*16**4;
+  $n = $h[2]+$h[1]*256+$h[0]*16**4;
+  $c=sprintf"%06X",$n;
+#debug(2, "hashcolor $_[0]\t$n\t$c");
+  return $c;
+}
+
+# Generate all the parameters for rrd to produce a graph
+#
+sub rrdline {
+  my($host,$service,$geom,$rrdopts,$G,$time) = @_;
+  my($g,$f,$v,$c,@ds);
+
+  @ds = ('-', '-a', 'PNG', '--start', "-$time");
+  # Identify where to pull data from and what to call it
+  for $g ( @$G ) {
+    $f = $g->{file};
+    debug(5, "CGI file=$f");
+    for $v ( sort keys %{ $g->{line} } ) {
+      $c = hashcolor($v);
+      debug(5, "CGI file=$f line=$v color=$c");
+      my $sv = "$v";
+      push @ds , "DEF:$sv=$Config{rrddir}/$f:$v:AVERAGE"
+               , "LINE2:${sv}#$c:$sv"
+               , "GPRINT:$sv:MAX:Max\\: %6.2lf%s"
+               , "GPRINT:$sv:AVERAGE:Avg\\: %6.2lf%s"
+               , "GPRINT:$sv:MIN:Min\\: %6.2lf%s"
+               , "GPRINT:$sv:LAST:Cur\\: %6.2lf%s\\n";
+    }
+  }
+
+  # Dimensions of graph if geom is specified
+  if ( $geom ) {
+    my($w,$h) = split 'x', $geom;
+    push @ds, '-w', $w, '-h', $h;
+  }
+  # Additional parameters to rrd graph, if specified
+  if ( $rrdopts ) {
+    push @ds, split /\s+/, $rrdopts;
+  }
+  return @ds;
+}
+
+# Write a pretty page with various graphs
+#
+sub page {
+  my($h,$s,$d,$o,@db) = @_;
+
+  # Reencode rrdopts
+  $o = urlencode $o;
+
+  # Detect available db files
+  @db = dbfilelist($h,$s) unless @db;
+  debug(5, "CGI dbfilelist @db");
+
+  # Define graph sizes
+  #   Daily   =  33h =   118800s
+  #   Weekly  =   9d =   777600s
+  #   Monthly =   5w =  3024000s
+  #   Yearly  = 400d = 34560000s
+  my @T=(['dai',118800], ['week',777600], ['month',3024000], ['year',34560000]);
+  print h1("Nagiosgraph");
+  print p("Performance data for ".strong("Host: ").tt($h).' &#183; '.strong("Service: ").tt($s));
+  for my $l ( @T ) {
+    my($p,$t) = ($l->[0],$l->[1]);
+    print h2(ucfirst $p . "ly");
+    if ( @db ) {
+      for my $g ( @db ) {
+        my $arg = join '&', "host=$h", "service=$s", "db=$g", "graph=$t",
+                            "geom=$d", "rrdopts=$o";
+        my @gl = split ',', $g;
+        my $ds = shift @gl;
+        print div({-class => "graphs"}, img( {-src => "?$arg", -alt => "Graph"} ) );
+        print div({-class => "graph_description"}, cite(strong($ds).br().small(join(", ", @gl))));
+      }
+    } else {
+      my $arg = join '&', "host=$h", "service=$s", "graph=$t",
+                          "geom=$d", "rrdopts=$o";
+      print div({-class => "graphs"}, img( {-src => "?$arg", -alt => "Graph"} ) );
+    }
+  }
+}
+
+exit unless readconfig();
+
+# Expect host, service and db input
+my $host = param('host') if param('host');
+my $service = param('service') if param('service');
+my @db = param('db') if param('db');
+my $graph = param('graph') if param('graph');
+my $geom = param('geom') if param('geom');
+my $rrdopts = param('rrdopts') if param('rrdopts');
+
+# Draw a graph or a page
+if ( $graph ) {
+  $| = 1; # Make sure headers arrive before image data
+  print header(-type => "image/png");
+  # Figure out db files and line labels
+  my $G = graphinfo($host,$service,@db);
+  my @ds = rrdline($host,$service,$geom,$rrdopts,$G,$graph);
+  debug(4, "CGI RRDs::graph ". join ' ', @ds);
+  RRDs::graph(@ds);
+  debug(2, "CGI RRDs::graph ERR " . RRDs::error) if RRDs::error;
+  exit;
+} else {
+  my @style;
+  if ($Config{stylesheet}) {
+    @style = ( -style => {-src => "$Config{stylesheet}"} );
+  }
+  print header, start_html(-id=>"nagiosgraph", -title => "nagiosgraph: $host-$service",
+    -meta => { -http_equiv => "Refresh", -content => "300" },
+    @style
+    );
+  page($host,$service,$geom,$rrdopts,@db);
+  print div({-id => "footer"}, hr(), small( "Created by ". a( {-href=>"http://nagiosgraph.sf.net/"}, "nagiosgraph"). "." ));
+  print end_html();
+}
Index: /tags/fc9-eol/noc/ng/cgi-bin/testcolor.cgi
===================================================================
--- /tags/fc9-eol/noc/ng/cgi-bin/testcolor.cgi	(revision 1257)
+++ /tags/fc9-eol/noc/ng/cgi-bin/testcolor.cgi	(revision 1257)
@@ -0,0 +1,55 @@
+#!/usr/bin/perl
+
+# File:    $Id: testcolor.cgi,v 1.2 2005/10/08 05:55:08 sauber Exp $
+# Author:  (c) Soren Dossing, 2005
+# License: OSI Artistic License
+#          http://www.opensource.org/licenses/artistic-license.php
+
+use strict;
+use CGI qw/:standard/;
+
+# Suggest some commonly used keywords
+my $w = param('words') ? join ' ', param('words') : 'response rta pctfree';
+
+# Start each page with an input field
+print <<EOF;
+Content-type: text/html
+
+<html><body>
+<form>
+Type some space seperated nagiosgraph line names here:<br>
+<input name=words size=80 value="$w">
+<input type=submit>
+</form><br>
+EOF
+
+# Render a table of colors of all schemes for each keyword
+if ( param('words') ) {
+  print "<table cellpadding=0><tr><td></td>";
+  print "<th>$_</th>" for 1..8;
+  print "</tr>\n";
+  for my $w ( split /\s+/, param('words') ) {
+    print "<tr><td>$w</td>";
+    for my $c ( 1..8 ) {
+      my $h = hashcolor($w, $c);
+      print "<td><table bgcolor=#000000><tr><td bgcolor=#$h>&nbsp;</td></tr></table></td>";
+    }
+    print "</tr>\n";
+  }
+  print "</table>\n";
+}
+
+# End of page
+print "</body></html>\n";
+
+# Calculate a color for a keyword
+#
+sub hashcolor {
+  my$c=$_[1];map{$c=1+(51*$c+ord)%(216)}split//,$_[0];
+  my($i,$n,$m,@h);@h=(51*int$c/36,51*int$c/6%6,51*($c%6));
+  for$i(0..2){$m=$i if$h[$i]<$h[$m];$n=$i if$h[$i]>$h[$n]}
+  $h[$m]=102if$h[$m]>102;$h[$n]=153if$h[$n]<153;
+  $c=sprintf"%06X",$h[2]+$h[1]*256+$h[0]*16**4;
+  return $c;
+}
+
Index: /tags/fc9-eol/noc/ng/cgi-bin/testentry.pl
===================================================================
--- /tags/fc9-eol/noc/ng/cgi-bin/testentry.pl	(revision 1257)
+++ /tags/fc9-eol/noc/ng/cgi-bin/testentry.pl	(revision 1257)
@@ -0,0 +1,35 @@
+#!/usr/bin/perl
+
+# File:    $Id: testentry.pl,v 1.4 2005/10/08 05:55:08 sauber Exp $
+# Author:  (c) Soren Dossing, 2005
+# License: OSI Artistic License
+#          http://www.opensource.org/licenses/artistic-license.php
+
+# Modify this script to test map entries before inserting into real
+# map file. Run the script and check if the output is as expected.
+
+use strict;
+no strict "subs";
+use Data::Dumper;
+my @s;
+
+# Insert servicesdescr, output and perfdata here as it appears in log file.
+#
+$_ = <<DATA;
+servicedescr:ping
+output:Total RX Bytes: 4058.14 MB, Total TX Bytes: 2697.28 MB<br>Average Traffic: 3.57 kB/s (0.0%) in, 4.92 kB/s (0.0%) out| inUsage=0.0,85,98 outUsage=0.0,85,98
+perfdata:
+DATA
+
+eval {
+
+# Insert here a map entry to parse the nagios plugin data above.
+#
+/output:.*Average Traffic.*?([.\d]+) kB.+?([.\d]+) kB/
+and push @s, [ rxbytes,
+               [ in,  GAUGE, $1 ],
+               [ out, GAUGE, $2 ] ];
+
+};
+
+print Data::Dumper->Dump([\@s], [qw(*s)]);
Index: /tags/fc9-eol/noc/ng/etc/httpd-ng.conf
===================================================================
--- /tags/fc9-eol/noc/ng/etc/httpd-ng.conf	(revision 1257)
+++ /tags/fc9-eol/noc/ng/etc/httpd-ng.conf	(revision 1257)
@@ -0,0 +1,13 @@
+#ScriptAlias /ng/cgi-bin/ /home/noc/ng/cgi-bin/
+#
+#<Directory /home/noc/ng/cgi-bin/>
+#   Options ExecCGI
+#   SSLRequireSSL
+#</Directory>
+#
+#Alias /ng/ /home/noc/ng/html/
+#
+#<Directory /home/noc/ng/html/>
+#   Options None
+#   SSLRequireSSL
+#</Directory>
Index: /tags/fc9-eol/noc/ng/etc/map
===================================================================
--- /tags/fc9-eol/noc/ng/etc/map	(revision 1257)
+++ /tags/fc9-eol/noc/ng/etc/map	(revision 1257)
@@ -0,0 +1,192 @@
+# File:    $Id: map,v 1.9 2005/10/08 05:55:08 sauber Exp $
+# Author:  (c) Soren Dossing, 2005
+# License: OSI Artistic License
+#          http://www.opensource.org/licenses/artistic-license.php
+
+########################################################################
+#
+# INSTRUCTIONS:
+#
+# This file contains several example of service types. Edit this file to 
+# add more service types. The data string from Nagios is in $_ . Use 
+# regular expressions to identify and extract data like the examples below
+# below.  Match on either output: or perfdata: . The code is pure perl, 
+# that will be run inside and eval{}. Results are expected in @s. The
+# general format is:
+# 
+# /output|perfdata:<servicetype> <key>=<value> <key2=value2> .../
+# and push @s, [ <databasename>,
+#                [ <key>,  GAUGE|DERIVE, <value>  ],
+#                [ <key2>, GAUGE|DERIVE, <value2> ],
+#                [ .       .              .        ],
+#                [ .       .              .        ] ];
+# 
+# But more advanced code is possible, as long as the resulting 
+# datastructure is correct.
+# 
+########################################################################
+
+# Service type: ping
+#   output:PING OK - Packet loss = 0%, RTA = 0.00 ms
+/output:PING.*?(\d+)%.+?([.\d]+)\sms/
+and push @s, [ "ping",
+               [ "losspct", GAUGE, $1      ],
+               [ "rta",     GAUGE, $2/1000 ] ];
+
+# Service type: single disk
+#  output:DISK OK - free space: /tmp 663 MB (90%):
+/output:DISK.*free space: (\S+) (\d+) MB \((\d+)\%\)/
+and push @s, [ $1,
+               [ "bytesfree", GAUGE, $2*1024**2 ],
+               [ "bytesmax", GAUGE, $3 ? $2*1024**2/$3*100 : 'U' ],
+               [ "pctfree", GAUGE, $3 ] ];
+
+# Service type: all unix-disk
+# Note: nagiosplugin requires the inode patch
+#   ouput:DISK OK - free space: / 12372 mB (77% inode=96%): /raid 882442 mB (88% inode=91%):
+#   perfdata: /=12372mB;14417;15698;96;16019 /raid=882441mB;999780;999780;91;999780
+/output:DISK.*inode=/ and do {
+  my @_pct = /: (\/.*?) .*?(\d+)% inode=(\d+)%/g;
+  while ( my($_d,$_b,$_i) = splice @_pct,0,3 ) {
+    my @_s;
+    /perfdata:.*$_d=(\d+)\w*?;(\d+);(\d+);(\d+);(\d+)/;
+    push @s, [ $_d,
+               [ "free",     GAUGE, $1*1024**2  ],
+               [ "user",     GAUGE, $2*1024**2  ],
+               [ "root",     GAUGE, $3*1024**2  ],
+               [ "max",      GAUGE, $5*1024**2  ],
+               [ "blockpct", GAUGE, $_b ],
+               [ "inodepct", GAUGE, $_i ] ];
+  }
+};
+
+# Service type: unix-dns
+#   output:DNS OK - 0.008 seconds response time (test.test.1M IN A192.169.0.47)
+#   perfdata:time=8260us;;;0
+/output:DNS.*?([.0-9]+) sec/
+and push @s, [ "dns",
+               [ "response",  GAUGE, $1 ] ];
+
+# Service type: unix-imap
+#   output:IMAP OK - 0.009 second response time on port 143
+/output:IMAP.*?([-.0-9]+) sec/
+and push @s, [ "imap",
+               [ "response", GAUGE, $1 ] ];
+
+# Service type: unix-ldap
+#   ouput:LDAP OK - 0.004 seconds response time
+#   perfdata:time=3657us;;;0
+/output:LDAP.*?([.0-9]+) sec/
+and push @s, [ "ldap",
+               [ "response", GAUGE, $1 ] ];
+
+# Service type: unix-load
+#   output: OK - load average: 0.66, 0.70, 0.73
+#   perfdata:load1=0;15;30;0 load5=0;10;25;0 load15=0;5;20;0
+/output:.*load average: ([.0-9]+), ([.0-9]+), ([.0-9]+)/
+and push @s, [ "load",
+               [ "avg1min",  GAUGE, $1 ],
+               [ "avg5min",  GAUGE, $2 ],
+               [ "avg15min", GAUGE, $3 ] ];
+
+# Service type: unix-mailq
+#   output:WARNING: mailq is 5717 (threshold w = 5000)
+#   perfdata:unsent=5717;5000;10000;0
+/perfdata:unsent=(\d+);(\d+);(\d+);(\d+)/
+and push @s, [ "mailq",
+               [ "qsize", GAUGE, $1 ],
+               [ "qwarn", GAUGE, $2 ],
+               [ "qcrit", GAUGE, $3 ] ];
+
+# Service type: unix-netstat
+#   output:OK
+#   perfdata:udpInDatagrams=46517147, udpOutDatagrams=46192507, udpInErrors=0, 
+#   tcpActiveOpens=1451583, tcpPassiveOpens=1076181, tcpAttemptFails=1909, 
+#   tcpEstabResets=5045, tcpCurrEstab=6, tcpOutDataBytes=3162434373, 
+#   tcpInDataBytes=1942718261, tcpRetransBytes=215439
+/perfdata:.*udpInDatagrams=(\d+), udpOutDatagrams=(\d+), udpInErrors=(\d+), tcpActiveOpens=(\d+), tcpPassiveOpens=(\d+), tcpAttemptFails=(\d+), tcpEstabResets=(\d+), tcpCurrEstab=(\d+), tcpOutDataBytes=(\d+), tcpInDataBytes=(\d+), tcpRetransBytes=(\d+)/
+and push @s, [ "udp",
+               [ "InPkts",  DERIVE, int $1/300 ],
+               [ "OutPkts", DERIVE, int $2/300 ],
+               [ "Errors",  DERIVE, int $3/300 ] ],
+             [ "tcp",
+               [ "ActOpens",    DERIVE, int $4/300    ],
+               [ "PsvOpens",    DERIVE, int $5/300    ],
+               [ "AttmptFails", DERIVE, int $6/300    ],
+               [ "OutBytes",    DERIVE, int $9/300*8  ],
+               [ "InBytes",     DERIVE, int $10/300*8 ] ];
+
+# Service type: unix-ntp
+#   output:NTP OK: Offset 0.001083 secs, jitter 14.84 msec, peer is stratum 1
+/output:NTP.*Offset ([-.0-9]+).*jitter ([-.0-9]+).*stratum (\d+)/
+and push @s, [ "ntp",
+               [ "offset",  GAUGE, $1      ],
+               [ "jitter",  GAUGE, $2/1000 ],
+               [ "stratum", GAUGE, $3+1    ] ];
+
+# Service type: unix-pop
+#   output:POP OK - 0.008 second response time on port 110
+/output:POP.*?([.0-9]+) second/
+and push @s, [ "pop3",
+               [ "response", GAUGE, $1 ] ];
+
+# Service type: unix-procs
+#   output:PROCS OK: 43 processes
+/output:PROCS.*?(\d+) processes\n/
+and push @s, [ "procs",
+               [ "procs", GAUGE, $1 ] ];
+
+# Service type: unix-smtp
+#   output:SMTP OK - 0.187 sec. response time
+/output:SMTP.*?([-.0-9]+) sec/
+and push @s, [ "smtp",
+               [ "response", GAUGE, $1 ] ];
+
+# Service type: unix-swap
+#   output:SWAP OK: 96% free (2616 MB out of 2744 MB)
+#   perfdata:swap=2616MB;274;54;0;2744
+/perfdata:swap=(\d+)MB;(\d+);(\d+);\d+;(\d+)/
+and push @s, [ "swap",
+               [ "swapfree", GAUGE, $1*1024**2 ],
+               [ "swapwarn", GAUGE, $2*1024**2 ],
+               [ "swapcrit", GAUGE, $3*1024**2 ],
+               [ "swapmax",  GAUGE, $4*1024**2 ] ];
+
+# Service type: unix-users
+#   output:USERS OK - 4 users currently logged in
+#   perfdata:users=4;5;10;0 
+/perfdata:users=(\d+);(\d+);(\d+)/
+and push @s, [ "procs",
+               [ "users", GAUGE, $1 ],
+               [ "uwarn",  GAUGE, $2 ],
+               [ "ucrit",  GAUGE, $3 ] ];
+
+# Service type: unix-zombies
+#   ouput:PROCS OK: 0 processes with STATE = Z
+/output:PROCS.*?(\d+) processes.*Z/
+and push @s, [ "zombie",
+               [ "zombies", GAUGE, $1 ] ];
+
+# Service type: unix-www
+#   ouput:HTTP OK HTTP/1.1 200 OK - 1456 bytes in 0.003 seconds
+/output:HTTP.*?(\d+) byte.*?([.0-9]+) sec/
+and push @s, [ "http",
+               [ "bps", GAUGE, $1/$2 ] ];
+
+# Service type: unix-tcp
+#   output:TCP OK - 0.061 second response time on port 22
+#   perfdata:time=0.060777s;0.000000;0.000000;0.000000;10.000000
+/output:TCP.*?on port (\d+)\s*perfdata:time=(\d+\.\d+).*(\d+\.\d+)\D*(\d+\.\d+)\D*(\d+\.\d+)\D*(\d+\.\d+)/
+and push @s, [ "tcp_$1",
+               [ 'connect_time',   GAUGE, $2 ],
+               [ 'warning_time',   GAUGE, $3 ],
+               [ 'critical_time',  GAUGE, $4 ],
+               [ 'socket_timeout', GAUGE, $6 ],
+             ];
+
+# Service type: mysql
+#   output: Uptime: 1659115  Threads: 1  Questions: 6424617  Slow queries: 0  Opens: 0  Flush tables: 1  Open tables: 512  Queries per second avg: 3.872 Slave IO: Yes Slave SQL: Yes Seconds Behind Master: 0
+/output:Uptime.*Questions: (\d+).*Queries per second avg: (\d+\.?\d+)/
+and push @s, [ "mysql",
+		[ 'qps', DERIVE, $1 ],
+		[ 'avgqps', GAUGE, $2 ]];
Index: /tags/fc9-eol/noc/ng/etc/nagios-ng.cfg
===================================================================
--- /tags/fc9-eol/noc/ng/etc/nagios-ng.cfg	(revision 1257)
+++ /tags/fc9-eol/noc/ng/etc/nagios-ng.cfg	(revision 1257)
@@ -0,0 +1,13 @@
+# /etc/nagios/nagios.cfg
+process_performance_data=1
+service_perfdata_file=/home/noc/ng/log/perfdata
+service_perfdata_file_template=$LASTSERVICECHECK$||$HOSTNAME$||$SERVICEDESC$||$SERVICEOUTPUT$||$SERVICEPERFDATA$
+service_perfdata_file_mode=a
+service_perfdata_file_processing_interval=60
+service_perfdata_file_processing_command=ng-service-perfdata
+
+# /etc/nagios/misccommands.cfg
+define command {
+  command_name  ng-service-perfdata
+  command_line  /home/noc/ng/bin/insert.pl
+}
Index: /tags/fc9-eol/noc/ng/etc/nagiosgraph.conf
===================================================================
--- /tags/fc9-eol/noc/ng/etc/nagiosgraph.conf	(revision 1257)
+++ /tags/fc9-eol/noc/ng/etc/nagiosgraph.conf	(revision 1257)
@@ -0,0 +1,35 @@
+# File:    $Id: nagiosgraph.conf,v 1.8 2006/04/06 10:00:06 sauber Exp $
+# Author:  (c) Soren Dossing, 2005
+# License: OSI Artistic License
+#          http://www.opensource.org/licenses/artistic-license.php
+
+# Debug levels
+# 0 = None
+# 1 = Critical
+# 2 = Error
+# 3 = Warn
+# 4 = Info
+# 5 = Debug
+debug = 2
+
+# Location of debug log file
+logfile = /home/noc/ng/log/debug
+
+# Directory to store rrd database files
+rrddir =  /home/noc/ng/rrd
+
+# File containing regular expressions to identify service and perf data
+mapfile = /home/noc/ng/etc/map
+
+# Color scheme for graphs. Choose a number between 1 and 8.
+colorscheme = 1
+
+# Heartbeat. In seconds, twice the size of servicecheck intervals
+#heartbeat = 600
+heartbeat = 60
+
+# Location of performance data log file. Comment out it not used.
+perflog = /home/noc/ng/log/perfdata
+
+# Stylesheet - added to head of show.cgi. Comment out if not used
+stylesheet = /ng/nagiosgraph.css
Index: /tags/fc9-eol/noc/ng/html/nagiosgraph.css
===================================================================
--- /tags/fc9-eol/noc/ng/html/nagiosgraph.css	(revision 1257)
+++ /tags/fc9-eol/noc/ng/html/nagiosgraph.css	(revision 1257)
@@ -0,0 +1,27 @@
+body#nagiosgraph {
+	color: #000000;
+	background-color: #BBBBFF;
+}
+h1 {
+	font-size: x-large;
+}
+div.graphs, div#footer {
+	clear: both;
+}
+h2 {
+	font-size: large;
+	padding-top: 1em;
+	margin-bottom: 0.5em;
+	clear: left;
+}
+img {
+	float: left;
+	margin-left: 15px;
+	margin-bottom: 1em;
+	padding-right: 10px;
+}
+div.graph_description {
+	/* to valign the text */
+	margin-top: 0;
+	padding-top: 70px;
+}
Index: /tags/fc9-eol/noc/setup.sh
===================================================================
--- /tags/fc9-eol/noc/setup.sh	(revision 1257)
+++ /tags/fc9-eol/noc/setup.sh	(revision 1257)
@@ -0,0 +1,25 @@
+#!/bin/sh
+
+chown -R nagios:nagios /home/noc/
+chmod 711 /home/noc/
+
+find /home/noc/ -type f | xargs -n1 chmod 644
+find /home/noc/ -type d | xargs -n1 chmod 755
+find /home/noc/ -name '*.cgi' -or -name '*.php' -or -name '*.pl' -or -name '*.sh' | xargs -n1 chmod a+x
+
+chown -R nagios:apache /home/noc/html/ /home/noc/ng/html/ /home/noc/ng/log/ /home/noc/ng/rrd/
+chmod -R g-w /home/noc/html/* /home/noc/ng/html/*
+chmod -R g+w /home/noc/ng/log/ /home/noc/ng/rrd/
+chmod g+w /home/noc/ng/log/ /home/noc/ng/rrd/
+
+if [ ! -h /etc/nagios ]; then
+	mv /etc/nagios /etc/nagios_OLD
+	ln -nfs /home/noc/nagios/ /etc/nagios
+fi
+
+chown -R root:root /home/noc/nagios/
+find /home/noc/nagios/ -type f | xargs -n1 chmod 644
+find /home/noc/nagios/ -type d | xargs -n1 chmod 755
+
+chown -R root:nagios /home/noc/nagios/private/
+chmod -R o-rwx /home/noc/nagios/private/
Index: /tags/fc9-eol/selinux/Makefile
===================================================================
--- /tags/fc9-eol/selinux/Makefile	(revision 1257)
+++ /tags/fc9-eol/selinux/Makefile	(revision 1257)
@@ -0,0 +1,18 @@
+include /usr/share/selinux/devel/Makefile
+#include /usr/share/selinux/devel/include/Makefile
+
+/usr/share/selinux/devel/include/Makefile:
+	yum -y install selinux-policy-devel
+
+build/%.fc: %.fc
+	rm -rf tmp
+
+install:
+	/usr/sbin/semodule -n -i openafs.pp;
+	/usr/sbin/semodule -n -i scripts.pp;
+	/usr/sbin/semodule -n -i signup.pp;
+	/usr/sbin/semodule -n -i admof.pp;
+	/usr/sbin/semodule -n -i nagios-nrpe.pp;
+	/usr/sbin/semodule -n -i zephyr.pp;
+	/usr/sbin/semodule -R
+	/usr/sbin/getenforce
Index: /tags/fc9-eol/selinux/build/admof.fc
===================================================================
--- /tags/fc9-eol/selinux/build/admof.fc	(revision 1257)
+++ /tags/fc9-eol/selinux/build/admof.fc	(revision 1257)
@@ -0,0 +1,5 @@
+# Joe Presbrey
+# presbrey@mit.edu
+# 2006/1/15
+
+/usr/local/sbin/admof					gen_context(system_u:object_r:admof_exec_t,s0)
Index: /tags/fc9-eol/selinux/build/admof.if
===================================================================
--- /tags/fc9-eol/selinux/build/admof.if	(revision 1257)
+++ /tags/fc9-eol/selinux/build/admof.if	(revision 1257)
@@ -0,0 +1,4 @@
+# Joe Presbrey
+# presbrey@mit.edu
+# 2006/1/15
+
Index: /tags/fc9-eol/selinux/build/admof.te
===================================================================
--- /tags/fc9-eol/selinux/build/admof.te	(revision 1257)
+++ /tags/fc9-eol/selinux/build/admof.te	(revision 1257)
@@ -0,0 +1,41 @@
+# Joe Presbrey
+# presbrey@mit.edu
+# 2006/1/15
+
+policy_module(admof,1.0.0)
+
+require {
+	type sshd_t, sshd_tmp_t, proc_t;
+};
+
+type admof_t;
+type admof_exec_t;
+role system_r types admof_t;
+domain_type(admof_t)
+domain_auto_trans(sshd_t,admof_exec_t,admof_t)
+domain_entry_file(admof_t, admof_exec_t)
+files_read_etc_files(admof_t)
+libs_use_ld_so(admof_t)
+libs_use_shared_libs(admof_t)
+miscfiles_read_localization(admof_t)
+
+allow admof_t sshd_t:fd use;
+allow admof_t sshd_t:fifo_file write;
+allow admof_t sshd_t:tcp_socket { read write };
+allow admof_t sshd_tmp_t:file all_file_perms;
+allow admof_t sshd_t:process sigchld;
+allow admof_t self:fifo_file { getattr ioctl read write };
+allow admof_t proc_t:file { getattr read };
+
+dev_read_urand(admof_t)
+corecmd_exec_all_executables(admof_t)
+
+allow sshd_t admof_exec_t:file rx_file_perms;
+
+require { type afs_t; };
+
+afs_access(admof_t)
+allow afs_t admof_t:fifo_file { getattr write };
+allow afs_t sshd_t:fifo_file write;
+allow afs_t sshd_t:tcp_socket { read write };
+allow afs_t sshd_tmp_t:file { read write };
Index: /tags/fc9-eol/selinux/build/nagios-nrpe.fc
===================================================================
--- /tags/fc9-eol/selinux/build/nagios-nrpe.fc	(revision 1257)
+++ /tags/fc9-eol/selinux/build/nagios-nrpe.fc	(revision 1257)
@@ -0,0 +1,5 @@
+# Joe Presbrey
+# presbrey@mit.edu
+# 2006/1/15
+
+/usr/sbin/nrpe gen_context(system_u:object_r:nrpe_exec_t,s0)
Index: /tags/fc9-eol/selinux/build/nagios-nrpe.if
===================================================================
--- /tags/fc9-eol/selinux/build/nagios-nrpe.if	(revision 1257)
+++ /tags/fc9-eol/selinux/build/nagios-nrpe.if	(revision 1257)
@@ -0,0 +1,25 @@
+# Joe Presbrey
+# presbrey@mit.edu
+# 2006/1/15
+
+interface(`nrpe_domtrans',`
+        gen_requires(`
+                type nrpe_t, nrpe_exec_t;
+        ')
+
+        domain_auto_trans($1,nrpe_exec_t,nrpe_t)
+
+        allow $1 nrpe_t:fd use;
+        allow nrpe_t $1:fd use;
+        allow nrpe_t:$1:fifo_file rw_file_perms;
+        allow nrpe_t $1:process sigchld;
+')
+
+template(`nrpe_access',`
+        require {
+                type nrpe_etc_t;
+        }
+
+	allow $1 nrpe_etc_t:file r_file_perms;
+	allow $1 nrpe_etc_t:dir r_dir_perms;
+')
Index: /tags/fc9-eol/selinux/build/nagios-nrpe.te
===================================================================
--- /tags/fc9-eol/selinux/build/nagios-nrpe.te	(revision 1257)
+++ /tags/fc9-eol/selinux/build/nagios-nrpe.te	(revision 1257)
@@ -0,0 +1,56 @@
+# Joe Presbrey
+# presbrey@mit.edu
+# 2006/1/15
+
+policy_module(nrpe,1.0.0)
+
+require {
+	type nrpe_t, nrpe_exec_t;
+        type inaddr_any_node_t;
+        type inetd_child_port_t;
+        type initrc_var_run_t;
+        type nrpe_t;
+        type port_t;
+        type var_run_t;
+};
+
+########################################
+#
+# nrpe local policy
+
+files_read_etc_files(nrpe_t)
+files_rw_etc_runtime_files(nrpe_t)
+libs_use_ld_so(nrpe_t)
+libs_use_shared_libs(nrpe_t)
+miscfiles_read_localization(nrpe_t)
+
+sysnet_dns_name_resolve(nrpe_t)
+corenet_tcp_sendrecv_all_nodes(nrpe_t)
+corenet_udp_sendrecv_all_nodes(nrpe_t)
+
+nagios_read_config(nrpe_t)
+files_rw_generic_pids(nrpe_t)
+allow nrpe_t self:capability { setgid setuid };
+allow nrpe_t self:tcp_socket { accept bind create listen setopt };
+
+require {
+	attribute domain;
+	attribute file_type;
+	attribute filesystem_type;
+};
+
+domain_read_all_domains_state(nrpe_t)
+dontaudit nrpe_t domain:dir getattr;
+dontaudit nrpe_t file_type:dir all_dir_perms;
+dontaudit nrpe_t file_type:file all_file_perms;
+files_getattr_all_dirs(nrpe_t)
+files_getattr_all_files(nrpe_t)
+fs_getattr_all_fs(nrpe_t)
+fs_get_xattr_fs_quotas(nrpe_t)
+
+allow nrpe_t inaddr_any_node_t:tcp_socket node_bind;
+allow nrpe_t inetd_child_port_t:tcp_socket name_bind;
+allow nrpe_t initrc_var_run_t:file { lock read };
+allow nrpe_t port_t:tcp_socket { recv_msg send_msg };
+allow nrpe_t var_run_t:dir { add_name write };
+allow nrpe_t var_run_t:file create;
Index: /tags/fc9-eol/selinux/build/openafs.fc
===================================================================
--- /tags/fc9-eol/selinux/build/openafs.fc	(revision 1257)
+++ /tags/fc9-eol/selinux/build/openafs.fc	(revision 1257)
@@ -0,0 +1,40 @@
+# Joe Presbrey
+# presbrey@mit.edu
+# 2006/1/15
+
+/afs			-d	gen_context(system_u:object_r:default_t,s0)
+/etc/openafs(/.*)?		gen_context(system_u:object_r:afsd_etc_t,s0)
+/usr/vice/etc(/.*)?		gen_context(system_u:object_r:afsd_etc_t,s0)
+/usr/vice/etc/afsd	--	gen_context(system_u:object_r:afsd_exec_t,s0)
+/usr/vice/cache(/.*)?		gen_context(system_u:object_r:afsd_cache_t,s0)
+
+/usr/bin/afsmonitor		gen_context(system_u:object_r:afs_bin_t,s0)
+/usr/bin/bos			gen_context(system_u:object_r:afs_bin_t,s0)
+/usr/bin/fs			gen_context(system_u:object_r:afs_bin_t,s0)
+/usr/bin/kapasswd		gen_context(system_u:object_r:afs_bin_t,s0)
+/usr/bin/klog			gen_context(system_u:object_r:afs_bin_t,s0)
+/usr/bin/klog.krb		gen_context(system_u:object_r:afs_bin_t,s0)
+/usr/bin/kpasswd		gen_context(system_u:object_r:afs_bin_t,s0)
+/usr/bin/pagsh			gen_context(system_u:object_r:afs_bin_t,s0)
+/usr/bin/pagsh.krb		gen_context(system_u:object_r:afs_bin_t,s0)
+/usr/bin/pts			gen_context(system_u:object_r:afs_bin_t,s0)
+/usr/bin/scout			gen_context(system_u:object_r:afs_bin_t,s0)
+/usr/bin/sys			gen_context(system_u:object_r:afs_bin_t,s0)
+/usr/bin/tokens			gen_context(system_u:object_r:afs_bin_t,s0)
+/usr/bin/tokens.krb		gen_context(system_u:object_r:afs_bin_t,s0)
+/usr/bin/translate_et		gen_context(system_u:object_r:afs_bin_t,s0)
+/usr/bin/udebug			gen_context(system_u:object_r:afs_bin_t,s0)
+/usr/bin/unlog			gen_context(system_u:object_r:afs_bin_t,s0)
+/usr/sbin/backup		gen_context(system_u:object_r:afs_bin_t,s0)
+/usr/sbin/butc			gen_context(system_u:object_r:afs_bin_t,s0)
+/usr/sbin/copyauth		gen_context(system_u:object_r:afs_bin_t,s0)
+/usr/sbin/fms			gen_context(system_u:object_r:afs_bin_t,s0)
+/usr/sbin/fstrace		gen_context(system_u:object_r:afs_bin_t,s0)
+/usr/sbin/kas			gen_context(system_u:object_r:afs_bin_t,s0)
+/usr/sbin/kseal			gen_context(system_u:object_r:afs_bin_t,s0)
+/usr/sbin/read_tape		gen_context(system_u:object_r:afs_bin_t,s0)
+/usr/sbin/restorevol		gen_context(system_u:object_r:afs_bin_t,s0)
+/usr/sbin/rxdebug		gen_context(system_u:object_r:afs_bin_t,s0)
+/usr/sbin/uss			gen_context(system_u:object_r:afs_bin_t,s0)
+/usr/sbin/vos			gen_context(system_u:object_r:afs_bin_t,s0)
+/usr/sbin/vsys			gen_context(system_u:object_r:afs_bin_t,s0)
Index: /tags/fc9-eol/selinux/build/openafs.if
===================================================================
--- /tags/fc9-eol/selinux/build/openafs.if	(revision 1257)
+++ /tags/fc9-eol/selinux/build/openafs.if	(revision 1257)
@@ -0,0 +1,41 @@
+# Joe Presbrey
+# presbrey@mit.edu
+# 2006/1/15
+
+interface(`afsd_domtrans',`
+	gen_require(`
+		type afsd_t, afsd_exec_t;
+	')
+
+	domain_auto_trans($1,afsd_exec_t,afsd_t)
+
+	allow $1 afsd_t:fd use;
+	allow afsd_t $1:fd use;
+	allow afsd_t $1:fifo_file rw_file_perms;
+	allow afsd_t $1:process sigchld;
+')
+
+interface(`afs_access',`
+	gen_require(`
+		type afs_t, afs_bin_t;
+		type afsd_t, afsd_etc_t;
+	')
+
+	allow $1 afs_bin_t:file rx_file_perms;
+	domain_auto_trans($1, afs_bin_t, afs_t)
+	allow afs_t $1:fd use;
+	allow afs_t $1:process sigchld;
+
+	allow $1 afsd_t:udp_socket write;
+	allow $1 afsd_etc_t:dir r_dir_perms;
+	allow $1 afsd_etc_t:file r_file_perms;
+	allow $1 afsd_etc_t:lnk_file r_file_perms;
+	fs_manage_autofs_symlinks($1)
+	fs_manage_nfs_dirs($1)
+	fs_manage_nfs_files($1)
+	fs_manage_nfs_symlinks($1)
+	fs_manage_nfs_named_pipes($1)
+	fs_manage_nfs_named_sockets($1)
+	allow $1 nfs_t:file entrypoint;
+	allow $1 nfs_t:{file dir} rx_file_perms;
+')
Index: /tags/fc9-eol/selinux/build/openafs.te
===================================================================
--- /tags/fc9-eol/selinux/build/openafs.te	(revision 1257)
+++ /tags/fc9-eol/selinux/build/openafs.te	(revision 1257)
@@ -0,0 +1,103 @@
+# Joe Presbrey
+# presbrey@mit.edu
+# 2006/1/15
+
+policy_module(openafs,1.0.0)
+
+type afs_t;
+type afs_bin_t;
+domain_type(afs_t)
+domain_entry_file(afs_t, afs_bin_t)
+corecmd_executable_file(afs_bin_t)
+
+role system_r types afs_t;
+role user_r types afs_t;
+
+type afsd_t;
+type afsd_exec_t;
+domain_type(afsd_t)
+init_daemon_domain(afsd_t, afsd_exec_t)
+
+type afsd_etc_t;
+type afsd_cache_t;
+files_type(afsd_etc_t)
+files_type(afsd_cache_t)
+
+allow afsd_t { afsd_etc_t afsd_cache_t }:dir manage_dir_perms;
+allow afsd_t { afsd_etc_t afsd_cache_t }:file_class_set manage_file_perms;
+
+########################################
+#
+# AFS local policy
+
+files_read_etc_files(afs_t)
+files_read_etc_runtime_files(afs_t)
+libs_use_ld_so(afs_t)
+libs_use_shared_libs(afs_t)
+miscfiles_read_localization(afs_t)
+
+files_read_etc_files(afsd_t)
+files_rw_etc_runtime_files(afsd_t)
+libs_use_ld_so(afsd_t)
+libs_use_shared_libs(afsd_t)
+miscfiles_read_localization(afsd_t)
+
+init_use_fds(afsd_t)
+init_use_script_ptys(afsd_t)
+domain_use_interactive_fds(afsd_t)
+term_use_console(afsd_t)
+
+files_mounton_default(afsd_t)
+kernel_read_system_state(afsd_t)
+kernel_write_proc_files(afsd_t)
+fs_mount_nfs(afsd_t)
+fs_remount_nfs(afsd_t)
+fs_unmount_nfs(afsd_t)
+fs_manage_nfs_dirs(afsd_t)
+fs_manage_nfs_files(afsd_t)
+fs_manage_nfs_symlinks(afsd_t)
+fs_manage_nfs_named_pipes(afsd_t)
+fs_manage_nfs_named_sockets(afsd_t)
+
+allow afsd_t self:dir mounton;
+allow afsd_t self:process setsched;
+allow afsd_t self:capability { sys_admin sys_nice sys_tty_config };
+
+sysnet_dns_name_resolve(afsd_t)
+corenet_tcp_sendrecv_all_nodes(afsd_t)
+corenet_udp_sendrecv_all_nodes(afsd_t)
+
+# some redundancy here
+afs_access(afsd_t);
+
+require {
+	type afs_bos_port_t,afs_fs_port_t,afs_fs_port_t,afs_ka_port_t,afs_pt_port_t,afs_vl_port_t;
+	type netif_t, node_t;
+	type kernel_t;
+}
+allow afsd_t { self afs_bos_port_t afs_fs_port_t afs_fs_port_t afs_ka_port_t afs_pt_port_t afs_vl_port_t }:tcp_socket all_tcp_socket_perms;
+allow afsd_t { self afs_bos_port_t afs_fs_port_t afs_fs_port_t afs_ka_port_t afs_pt_port_t afs_vl_port_t }:udp_socket all_udp_socket_perms;
+allow afsd_t netif_t:netif { udp_recv udp_send };
+allow afsd_t node_t:node { udp_recv udp_send };
+
+allow kernel_t afsd_t:udp_socket all_udp_socket_perms;
+
+allow afsd_t kernel_t:key all_key_perms;
+allow kernel_t self:key all_key_perms;
+
+require {
+	type inaddr_any_node_t;
+};
+
+afs_access(afs_t)
+allow afs_t afs_pt_port_t:udp_socket all_udp_socket_perms;
+allow afs_t self:udp_socket all_udp_socket_perms;
+allow afs_t afsd_t:udp_socket all_udp_socket_perms; 
+allow afs_t inaddr_any_node_t:udp_socket all_udp_socket_perms;
+allow afs_t netif_t:netif { udp_recv udp_send };
+allow afs_t node_t:node { udp_recv udp_send };
+allow afs_t proc_t:file { ioctl read write };
+term_use_all_user_ptys(afs_t)
+
+require { type sshd_t; };
+dontaudit afs_t sshd_t:key all_key_perms;
Index: /tags/fc9-eol/selinux/build/scripts.fc
===================================================================
--- /tags/fc9-eol/selinux/build/scripts.fc	(revision 1257)
+++ /tags/fc9-eol/selinux/build/scripts.fc	(revision 1257)
@@ -0,0 +1,5 @@
+# Joe Presbrey
+# presbrey@mit.edu
+# 2006/1/15
+
+/tmp/sessions	-d	gen_context(system_u:object_r:tmp_t,s0)
Index: /tags/fc9-eol/selinux/build/scripts.if
===================================================================
--- /tags/fc9-eol/selinux/build/scripts.if	(revision 1257)
+++ /tags/fc9-eol/selinux/build/scripts.if	(revision 1257)
@@ -0,0 +1,4 @@
+# Joe Presbrey
+# presbrey@mit.edu
+# 2006/1/15
+
Index: /tags/fc9-eol/selinux/build/scripts.te
===================================================================
--- /tags/fc9-eol/selinux/build/scripts.te	(revision 1257)
+++ /tags/fc9-eol/selinux/build/scripts.te	(revision 1257)
@@ -0,0 +1,218 @@
+# Joe Presbrey
+# presbrey@mit.edu
+# 2006/1/15
+
+policy_module(scripts,1.0.0)
+
+### USER ###
+
+require {
+	attribute domain, userdomain, unpriv_userdomain;
+	attribute can_change_process_identity, can_change_process_role;
+	type user_t, user_tmp_t;
+	type staff_t, sysadm_t;
+};
+
+corenet_tcp_bind_all_nodes(user_t)
+corenet_tcp_bind_all_ports(user_t)
+#corenet_udp_bind_generic_port(user_t)
+
+## user_setuid_t ##
+
+type user_setuid_t, domain, userdomain, unpriv_userdomain;
+role user_r types user_setuid_t;
+domain_interactive_fd(user_setuid_t)
+files_read_etc_files(user_setuid_t)
+libs_use_ld_so(user_setuid_t)
+libs_use_shared_libs(user_setuid_t)
+miscfiles_read_localization(user_setuid_t)
+corecmd_exec_all_executables(user_setuid_t)
+term_use_all_user_ptys(user_setuid_t)
+kernel_read_system_state(user_setuid_t)
+
+allow user_setuid_t bin_t:file entrypoint;
+allow user_setuid_t sbin_t:file entrypoint;
+
+# allow user_setuid_t domain to call setuid and setgid
+allow user_setuid_t self:capability { setuid setgid };
+
+# transition back to the user domain when executing "user" binaries
+domain_auto_trans(user_setuid_t, nfs_t, user_t)
+
+# allow user_setuid_t domain to signal its caller
+allow user_setuid_t user_t:process sigchld;
+
+## user_script_t ##
+userdom_base_user_template(user_script)
+userdom_basic_networking_template(user_script)
+domain_interactive_fd(user_script_t)
+corecmd_exec_all_executables(user_script_t)
+files_exec_usr_files(user_script_t)
+corenet_tcp_bind_all_nodes(user_script_t)
+corenet_tcp_bind_all_ports(user_script_t)
+corenet_udp_bind_all_nodes(user_script_t)
+corenet_udp_bind_all_ports(user_script_t)
+#corenet_udp_bind_generic_port(user_script_t)
+kerberos_use(user_script_t)
+files_read_kernel_symbol_table(user_script_t)
+kernel_dontaudit_read_ring_buffer(user_script_t)
+dev_read_urand(user_script_t)
+apache_append_log(user_script_t)
+allow user_script_t user_tmp_t:file all_file_perms;
+allow user_script_t user_tmp_t:dir all_dir_perms;
+allow user_script_t user_tmp_t:fifo_file all_fifo_file_perms;
+kernel_read_system_state(user_script_t)
+
+afs_access(user_t);
+afs_access(user_script_t);
+afs_access(user_setuid_t);
+afs_access(staff_t);
+afs_access(sysadm_t);
+zephyr_access(user_t);
+zephyr_access(user_script_t);
+
+# permit aklog:
+kernel_write_proc_files(user_t)
+#allow user_t proc_t:file write;
+
+### AFS ###
+
+require {
+	type kernel_t;
+};
+
+afs_access(kernel_t);
+zephyr_access(kernel_t);
+
+### INIT ###
+
+require {
+	type initrc_t, tmp_t;
+};
+
+# init.d script sets up cell files:
+afs_access(initrc_t);
+allow initrc_t afsd_etc_t:file { rw_file_perms setattr };
+
+# init.d makes the sessions directory:
+allow initrc_t tmp_t:dir { create setattr };
+
+# AFS fs
+kernel_write_proc_files(initrc_t)
+
+### CRON ###
+
+require {
+	type crond_t, user_cron_spool_t, user_crontab_t;
+	type system_crond_t;
+	type var_log_t;
+};
+
+afs_access(crond_t);
+afs_access(user_crontab_t);
+### crond can switch to user_t rather than user_crond_t
+### (we have pam_env set SELINUX_ROLE_TYPE to accomplish this)
+domain_cron_exemption_target(user_t)
+domain_entry_file(user_t, user_cron_spool_t)
+domain_trans(crond_t, user_cron_spool_t, user_t)
+allow user_t crond_t:process sigchld;
+allow crond_t self:process setrlimit;
+allow crond_t user_t:fd use;
+allow user_t crond_t:fd use;
+allow user_t crond_t:fifo_file rw_file_perms;
+allow crond_t user_t:fifo_file rw_file_perms;
+allow system_crond_t var_log_t:file rw_file_perms;
+
+### SSH ###
+
+require {
+	type sshd_t, sshd_tmp_t;
+};
+
+afs_access(sshd_t);
+### sshd GSSAPI authentication
+kerberos_read_keytab(sshd_t)
+# forwarded kerberos tickets via ssh -K
+allow user_t sshd_tmp_t:file r_file_perms;
+
+dontaudit user_t kernel_t:key all_key_perms;
+dontaudit user_script_t kernel_t:key all_key_perms;
+
+# (for admof)
+corecmd_exec_all_executables(sshd_t)
+kernel_write_proc_files(sshd_t)
+
+### MAIL ###
+
+require {
+	type postfix_local_t, procmail_t, sendmail_t;
+};
+
+afs_access(postfix_local_t);
+afs_access(procmail_t);
+mta_sendmail_exec(user_t)
+mta_sendmail_exec(user_script_t)
+mta_sendmail_exec(system_crond_t)
+can_exec(user_t, sendmail_exec_t)
+can_exec(user_script_t, sendmail_exec_t)
+can_exec(system_crond_t, sendmail_exec_t)
+allow sendmail_t postfix_local_t:fd use;
+allow sendmail_t postfix_local_t:fifo_file { getattr write };
+corecmd_exec_bin(procmail_t)
+corecmd_exec_sbin(procmail_t)
+
+### HTTPD ###
+
+require {
+	type httpd_t, httpd_suexec_exec_t, httpd_suexec_t;
+	role user_r;
+};
+
+afs_access(httpd_t);
+dontaudit httpd_t self:key all_key_perms;
+dontaudit httpd_t sshd_t:key all_key_perms;
+dontaudit httpd_t kernel_t:key all_key_perms;
+allow httpd_t self:process setrlimit;
+
+# SUEXEC PHASE 1
+can_exec(httpd_t, httpd_suexec_exec_t)
+domain_auto_trans(httpd_t, httpd_suexec_exec_t, httpd_suexec_t)
+apache_read_config(httpd_suexec_t)
+apache_read_log(httpd_suexec_t)
+apache_append_log(httpd_suexec_t)
+
+# SUEXEC PHASE 2
+allow httpd_suexec_t self:process { setexec };
+allow httpd_suexec_t { user_t user_script_t }:process { transition siginh rlimitinh noatsecure };
+
+# SUEXEC PHASE 3
+allow { httpd_suexec_t user_t user_script_t } httpd_t:fd { use };
+allow { httpd_suexec_t user_t user_script_t } httpd_t:fifo_file { read write };
+allow { httpd_suexec_t user_t user_script_t } httpd_t:process { sigchld };
+allow { user_t user_script_t } httpd_suexec_t:fd { use };
+allow httpd_suexec_t { user_t user_script_t }:process transition;
+typeattribute httpd_suexec_t can_change_process_identity, can_change_process_role;
+#domain_unconfined(httpd_suexec_t)
+apache_append_log(user_t)
+
+# mod_fcgid in user_t
+allow { httpd_suexec_t user_t user_script_t } httpd_t:unix_stream_socket all_unix_stream_socket_perms;
+allow httpd_t { user_t user_script_t }:process { sigkill signal };
+
+### *** ###
+
+require {
+	type var_run_t;
+};
+
+# named.pid
+allow initrc_t var_run_t:lnk_file create;
+
+# semodule -i
+require { type semanage_t, sysadm_home_t; };
+allow semanage_t sysadm_home_t:dir rw_dir_perms;
+allow semanage_t sysadm_home_t:file rw_file_perms;
+
+require { type restorecond_t, crond_t; };
+dontaudit restorecond_t kernel_t:key all_key_perms;
+dontaudit { domain userdomain crond_t } sshd_t:key all_key_perms;
Index: /tags/fc9-eol/selinux/build/signup.fc
===================================================================
--- /tags/fc9-eol/selinux/build/signup.fc	(revision 1257)
+++ /tags/fc9-eol/selinux/build/signup.fc	(revision 1257)
@@ -0,0 +1,4 @@
+# Joe Presbrey
+# presbrey@mit.edu
+# 2006/1/15
+
Index: /tags/fc9-eol/selinux/build/signup.if
===================================================================
--- /tags/fc9-eol/selinux/build/signup.if	(revision 1257)
+++ /tags/fc9-eol/selinux/build/signup.if	(revision 1257)
@@ -0,0 +1,4 @@
+# Joe Presbrey
+# presbrey@mit.edu
+# 2006/1/15
+
Index: /tags/fc9-eol/selinux/build/signup.te
===================================================================
--- /tags/fc9-eol/selinux/build/signup.te	(revision 1257)
+++ /tags/fc9-eol/selinux/build/signup.te	(revision 1257)
@@ -0,0 +1,60 @@
+# Joe Presbrey
+# presbrey@mit.edu
+# 2006/1/15
+
+policy_module(signup,1.0.0)
+
+require {
+	attribute domain, userdomain, unpriv_userdomain;
+};
+
+require { type sudo_exec_t; };
+type signup_t, domain, userdomain, unpriv_userdomain;
+type signup_su_t, domain, userdomain;
+role system_r types { signup_t signup_su_t };
+role user_r types { signup_t signup_su_t };
+afs_access(signup_t)
+afs_access(signup_su_t)
+afs_access(useradd_t)
+files_read_etc_files(signup_t)
+libs_use_ld_so(signup_t)
+libs_use_shared_libs(signup_t)
+miscfiles_read_localization(signup_t)
+files_read_etc_files(signup_su_t)
+libs_use_ld_so(signup_su_t)
+libs_use_shared_libs(signup_su_t)
+miscfiles_read_localization(signup_su_t)
+domain_auto_trans(signup_t, sudo_exec_t, signup_su_t)
+auth_rw_shadow(signup_su_t)
+sysnet_dns_name_resolve(signup_t)
+sysnet_dns_name_resolve(signup_su_t)
+usermanage_run_useradd(signup_su_t,system_r,signup_t)
+usermanage_run_groupadd(signup_su_t,system_r,signup_t)
+allow groupadd_t signup_t:fifo_file { getattr ioctl read write };
+allow groupadd_t signup_t:process sigchld;
+
+allow useradd_t { httpd_t signup_t }:fd use;
+allow useradd_t { httpd_t signup_t }:fifo_file { getattr ioctl read write};
+allow useradd_t signup_t:process sigchld;
+allow signup_su_t signup_t:fd use;
+allow signup_su_t signup_t:fifo_file { ioctl write };
+allow signup_su_t signup_t:process sigchld;
+allow signup_su_t sudo_exec_t:file entrypoint;
+allow signup_su_t self:capability { audit_write setgid setuid };
+dev_read_urand(signup_t)
+kernel_read_system_state(signup_t)
+logging_send_syslog_msg(signup_su_t)
+
+corecmd_exec_all_executables(signup_t)
+allow signup_t sbin_t:dir search;
+allow signup_t sbin_t:file { execute execute_no_trans read };
+allow signup_t shell_exec_t:file { execute execute_no_trans getattr read };
+allow signup_t self:fifo_file { getattr ioctl read write };
+
+# SUEXEC #
+require { type httpd_suexec_t, httpd_t; };
+allow httpd_suexec_t { signup_t }:process { transition siginh rlimitinh noatsecure };
+allow { signup_t } httpd_t:fd { use };
+allow { signup_t } httpd_t:fifo_file { getattr ioctl read write };
+allow { signup_t } httpd_t:process { sigchld };
+allow { signup_t } httpd_suexec_t:fd { use };
Index: /tags/fc9-eol/selinux/build/zephyr.fc
===================================================================
--- /tags/fc9-eol/selinux/build/zephyr.fc	(revision 1257)
+++ /tags/fc9-eol/selinux/build/zephyr.fc	(revision 1257)
@@ -0,0 +1,13 @@
+# Joe Presbrey
+# presbrey@mit.edu
+# 2006/1/15
+
+/usr/sbin/zhm           --      gen_context(system_u:object_r:zephyr_exec_t,s0)
+/usr/bin/zaway          --      gen_context(system_u:object_r:zephyr_bin_t,s0)
+/usr/bin/zctl           --      gen_context(system_u:object_r:zephyr_bin_t,s0)
+/usr/bin/zleave         --      gen_context(system_u:object_r:zephyr_bin_t,s0)
+/usr/bin/zlocate        --      gen_context(system_u:object_r:zephyr_bin_t,s0)
+/usr/bin/znol           --      gen_context(system_u:object_r:zephyr_bin_t,s0)
+/usr/bin/zstat          --      gen_context(system_u:object_r:zephyr_bin_t,s0)
+/usr/bin/zwgc           --      gen_context(system_u:object_r:zephyr_bin_t,s0)
+/usr/bin/zwrite         --      gen_context(system_u:object_r:zephyr_bin_t,s0)
Index: /tags/fc9-eol/selinux/build/zephyr.if
===================================================================
--- /tags/fc9-eol/selinux/build/zephyr.if	(revision 1257)
+++ /tags/fc9-eol/selinux/build/zephyr.if	(revision 1257)
@@ -0,0 +1,26 @@
+# Joe Presbrey
+# presbrey@mit.edu
+# 2006/1/15
+
+interface(`zephyr_domtrans',`
+        gen_requires(`
+                type zephyr_t, zephyr_exec_t;
+        ')
+
+        domain_auto_trans($1,zephyr_exec_t,zephyr_t)
+
+        allow $1 zephyr_t:fd use;
+        allow zephyr_t $1:fd use;
+        allow zephyr_t:$1:fifo_file rw_file_perms;
+        allow zephyr_t $1:process sigchld;
+')
+
+template(`zephyr_access',`
+        require {
+                type zephyr_t, zephyr_bin_t;
+        }
+
+        allow $1 zephyr_t:udp_socket { read write };
+        can_exec($1, zephyr_t)
+        can_exec($1, zephyr_bin_t)
+')
Index: /tags/fc9-eol/selinux/build/zephyr.te
===================================================================
--- /tags/fc9-eol/selinux/build/zephyr.te	(revision 1257)
+++ /tags/fc9-eol/selinux/build/zephyr.te	(revision 1257)
@@ -0,0 +1,43 @@
+# Joe Presbrey
+# presbrey@mit.edu
+# 2006/1/15
+
+policy_module(zephyr,1.0.0)
+
+########################################
+#
+# Declarations
+#
+
+type zephyr_t;
+type zephyr_bin_t;
+type zephyr_exec_t;
+domain_type(zephyr_t)
+corecmd_executable_file(zephyr_bin_t)
+init_daemon_domain(zephyr_t, zephyr_exec_t)
+
+########################################
+#
+# zephyr local policy
+
+files_read_etc_files(zephyr_t)
+files_rw_etc_runtime_files(zephyr_t)
+libs_use_ld_so(zephyr_t)
+libs_use_shared_libs(zephyr_t)
+miscfiles_read_localization(zephyr_t)
+
+init_use_fds(zephyr_t)
+init_use_script_ptys(zephyr_t)
+domain_use_interactive_fds(zephyr_t)
+term_use_console(zephyr_t)
+corenet_udp_bind_generic_port(zephyr_t)
+dev_read_urand(zephyr_t)
+sysnet_dns_name_resolve(zephyr_t)
+corenet_tcp_sendrecv_all_nodes(zephyr_t)
+corenet_udp_sendrecv_all_nodes(zephyr_t)
+corenet_tcp_sendrecv_all_ports(zephyr_t)
+corenet_udp_sendrecv_all_ports(zephyr_t)
+kerberos_use(zephyr_t)
+
+allow zephyr_t self:process setsched;
+allow zephyr_t self:capability { sys_admin sys_nice sys_tty_config };
Index: /tags/fc9-eol/selinux/selinux.conf
===================================================================
--- /tags/fc9-eol/selinux/selinux.conf	(revision 1257)
+++ /tags/fc9-eol/selinux/selinux.conf	(revision 1257)
@@ -0,0 +1,15 @@
+# This file controls the state of SELinux on the system.
+# SELINUX= can take one of these three values:
+#	enforcing - SELinux security policy is enforced.
+#	permissive - SELinux prints warnings instead of enforcing.
+#	disabled - SELinux is fully disabled.
+SELINUX=enforcing
+# SELINUXTYPE= type of policy in use. Possible values are:
+#	targeted - Only targeted network daemons are protected.
+#	strict - Full SELinux protection.
+SELINUXTYPE=strict
+
+# SETLOCALDEFS= Check local definition changes
+SETLOCALDEFS=0 
+
+CRONTYPE=relabel
Index: /tags/fc9-eol/selinux/set_booleans.sh
===================================================================
--- /tags/fc9-eol/selinux/set_booleans.sh	(revision 1257)
+++ /tags/fc9-eol/selinux/set_booleans.sh	(revision 1257)
@@ -0,0 +1,35 @@
+#!/bin/bash
+
+setsebool -P \
+	allow_gssd_read_tmp=1 \
+	allow_httpd_anon_write=1 \
+	allow_httpd_staff_script_anon_write=1 \
+	allow_httpd_sys_script_anon_write=1 \
+	allow_httpd_sysadm_script_anon_write=1 \
+	allow_httpd_user_script_anon_write=1 \
+	allow_java_execstack=1 \
+	allow_kerberos=1 \
+	allow_mounton_anydir=1 \
+	allow_nfsd_anon_write=1 \
+	allow_ssh_keysign=1 \
+	allow_user_mysql_connect=1 \
+	cron_can_relabel=1 \
+	httpd_builtin_scripting=0 \
+	httpd_can_network_connect=1 \
+	httpd_can_network_connect_db=1 \
+	httpd_can_network_relay=1 \
+	httpd_enable_cgi=1 \
+	httpd_enable_homedirs=1 \
+	httpd_ssi_exec=0 \
+	httpd_tty_comm=1 \
+	nfs_export_all_ro=1 \
+	nfs_export_all_rw=1 \
+	ssh_sysadm_login=1 \
+	use_nfs_home_dirs=1 \
+	use_samba_home_dirs=1 \
+	user_ping=1 \
+	user_rw_noexattrfile=1 \
+	user_tcp_server=1
+#	allow_daemons_use_tty=1 \
+#	allow_mount_anyfile=1 \
+#	staff_read_sysadm_file=1 \
Index: /tags/fc9-eol/server/README
===================================================================
--- /tags/fc9-eol/server/README	(revision 1257)
+++ /tags/fc9-eol/server/README	(revision 1257)
@@ -0,0 +1,11 @@
+common: 
+  distribution-independent code needed to run a scripts.mit.edu server
+
+fedora:
+  distribution-dependent code needed to run a fedora scripts.mit.edu server
+
+debian:
+  distribution-dependent code needed to run a debian scripts.mit.edu server
+
+doc:
+  documentation related to running a scripts.mit.edu server
Index: /tags/fc9-eol/server/common/oursrc/accountadm/Makefile.in
===================================================================
--- /tags/fc9-eol/server/common/oursrc/accountadm/Makefile.in	(revision 1257)
+++ /tags/fc9-eol/server/common/oursrc/accountadm/Makefile.in	(revision 1257)
@@ -0,0 +1,32 @@
+CC = @CC@
+CPPFLAGS = @CPPFLAGS@
+CFLAGS = @CFLAGS@
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+sbindir = @sbindir@
+bindir = @bindir@
+sysconfdir = @sysconfdir@
+
+all-local: admof signup-scripts-frontend
+
+admof: admof.c
+	$(CC) $(CPPFLAGS) $(CFLAGS) $< -L/usr/lib/afs -L/usr/lib64/afs -lprot -lauth -lrxkad -lubik -laudit -lsys -lrx -llwp -lsys -lafsutil -lcom_err -lresolv -lkrb5 -ldes -lkrb4 -o $@
+
+install:
+	install -p -m644 -D mbashrc $(DESTDIR)$(sysconfdir)/mbashrc
+	install -p -m755 -D mbash $(DESTDIR)$(bindir)/mbash
+	install -p -m755 -D admof $(DESTDIR)$(bindir)/admof
+	install -p -m755 -D admof $(DESTDIR)$(sbindir)/ssh-admof
+	install -p -m755 -D signup-scripts-frontend $(DESTDIR)$(sbindir)/signup-scripts-frontend
+	install -p -m755 -D signup-scripts-backend $(DESTDIR)$(sbindir)/signup-scripts-backend
+	install -p -m755 -D cronload $(DESTDIR)$(bindir)/cronload
+	install -p -m755 -D vhostadd $(DESTDIR)$(sbindir)/vhostadd
+	install -p -m755 -D vhostedit $(DESTDIR)$(sbindir)/vhostedit
+
+clean:
+	rm -f admof signup-scripts-frontend
+
+distclean: clean
+	rm -f mbash signup-scripts-backend
+	rm -f configure config.* Makefile
+	rm -rf auto*.cache
Index: /tags/fc9-eol/server/common/oursrc/accountadm/admof.c
===================================================================
--- /tags/fc9-eol/server/common/oursrc/accountadm/admof.c	(revision 1257)
+++ /tags/fc9-eol/server/common/oursrc/accountadm/admof.c	(revision 1257)
@@ -0,0 +1,232 @@
+/* admof
+ * Version 2.0, released 2007-12-30
+ * Anders Kaseorg <andersk@mit.edu>
+ * replacing Perl version by Jeff Arnold <jbarnold@mit.edu>
+ *
+ * Usage:
+ *   admof scripts andersk/root@ATHENA.MIT.EDU
+ * Outputs "yes" and exits with status 33 if the given principal is an
+ * administrator of the locker.
+ */
+
+#include <stdio.h>
+#include <limits.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <pwd.h>
+#include <unistd.h>
+#include <netinet/in.h>
+#include <afs/vice.h>
+#include <afs/venus.h>
+#include <afs/ptclient.h>
+#include <afs/ptuser.h>
+#include <afs/prs_fs.h>
+#include <afs/ptint.h>
+#include <afs/cellconfig.h>
+#include <afs/afsutil.h>
+#include <krb5.h>
+#include <kerberosIV/krb.h>
+#include <stdbool.h>
+#include <syslog.h>
+
+extern int pioctl(char *, afs_int32, struct ViceIoctl *, afs_int32);
+
+#define die(args...) do { fprintf(stderr, args); pr_End(); exit(1); } while(0)
+#define _STR(x) #x
+#define STR(x) _STR(x)
+
+#define OVERLORDS "system:scripts-root"
+
+static bool
+ismember(const char *user, const char *group)
+{
+    int flag;
+    if (pr_IsAMemberOf((char *)user, (char *)group, &flag) == 0)
+	return flag;
+    else
+	return 0;
+}
+
+/* Parse an ACL of n entries, returning the rights for user. */
+static int
+parse_rights(int n, const char **p, const char *user)
+{
+    int rights = 0;
+
+    int i;
+    for (i = 0; i < n; ++i) {
+	char tname[PR_MAXNAMELEN];
+	int trights;
+
+	int off;
+	if (sscanf(*p, "%" STR(PR_MAXNAMELEN) "s %d\n%n", tname, &trights, &off) < 2)
+	    die("internal error: can't parse output from pioctl\n");
+	*p += off;
+
+	if (~rights & trights &&
+	    (strcasecmp(tname, user) == 0 ||
+	     (strchr(tname, ':') != 0 && ismember(user, tname))))
+	    rights |= trights;
+    }
+
+    return rights;
+}
+
+int
+main(int argc, const char *argv[])
+{
+    /* Get arguments. */
+    if (argc != 3)
+	die("Usage: %s LOCKER PRINCIPAL\n", argv[0]);
+    const char *locker = argv[1], *name = argv[2];
+
+    /* Convert the locker into a directory. */
+    char dir[PATH_MAX];
+    int n;
+    struct passwd *pwd = getpwnam(locker);
+    if (pwd != NULL)
+	n = snprintf(dir, sizeof dir, "%s", pwd->pw_dir);
+    else
+	n = snprintf(dir, sizeof dir, "/mit/%s", locker);
+    if (n < 0 || n >= sizeof dir)
+	die("internal error\n");
+
+    /* For non-AFS homedirs, read the .k5login file. */
+    if (strncmp(dir, "/afs/", 5) != 0 && strncmp(dir, "/mit/", 5) != 0) {
+	if (chdir(dir) != 0)
+	    die("internal error: chdir: %m\n");
+	FILE *fp = fopen(".k5login", "r");
+	if (fp == NULL)
+	    die("internal error: .k5login: %m\n");
+	struct stat st;
+	if (fstat(fileno(fp), &st) != 0)
+	    die("internal error: fstat: %m\n");
+	if (st.st_uid != pwd->pw_uid && st.st_uid != 0) {
+	    fclose(fp);
+	    die("internal error: bad .k5login permissions\n");
+	}
+	bool found = false;
+	char *line = NULL;
+	size_t len = 0;
+	ssize_t read;
+	while ((read = getline(&line, &len, fp)) != -1) {
+	    if (read > 0 && line[read - 1] == '\n')
+		line[read - 1] = '\0';
+	    if (strcmp(name, line) == 0) {
+		found = true;
+		break;
+	    }
+	}
+	if (line)
+	    free(line);
+	fclose(fp);
+	if (found) {
+	    printf("yes\n");
+	    exit(33);
+	} else {
+	    printf("no\n");
+	    exit(1);
+	}
+    }
+
+    /* Get the locker's cell. */
+    char cell[MAXCELLCHARS];
+    struct ViceIoctl vi;
+    vi.in = NULL;
+    vi.in_size = 0;
+    vi.out = cell;
+    vi.out_size = sizeof cell;
+    if (pioctl(dir, VIOC_FILE_CELL_NAME, &vi, 1) != 0)
+	die("internal error: pioctl: %m\n");
+
+    if (pr_Initialize(3, (char *)AFSDIR_CLIENT_ETC_DIRPATH, cell) != 0)
+	die("internal error: pr_Initialize failed\n");
+
+    /* Get the cell configuration. */
+    struct afsconf_dir *configdir = afsconf_Open(AFSDIR_CLIENT_ETC_DIRPATH);
+    if (configdir == NULL)
+	die("internal error: afsconf_Open failed\n");
+    struct afsconf_cell cellconfig;
+    if (afsconf_GetCellInfo(configdir, cell, NULL, &cellconfig) != 0)
+	die("internal error: afsconf_GetCellInfo failed\n");
+    afsconf_Close(configdir);
+
+    /* Figure out the cell's realm. */
+    krb5_context context;
+    krb5_init_context(&context);
+
+    char **realm_list;
+    if (krb5_get_host_realm(context, cellconfig.hostName[0], &realm_list) != 0 ||
+	realm_list[0] == NULL)
+	die("internal error: krb5_get_host_realm failed");
+
+    /* Convert the Kerberos 5 principal into a (Kerberos IV-style) AFS
+       name, omitting the realm if it equals the cell's realm. */
+    krb5_principal principal;
+    if (krb5_parse_name(context, name, &principal) != 0)
+	die("internal error: krb5_parse_name failed");
+    char pname[ANAME_SZ], pinst[INST_SZ], prealm[REALM_SZ];
+    if (krb5_524_conv_principal(context, principal, pname, pinst, prealm) != 0)
+	die("internal error: krb5_524_conv_principal failed\n");
+    char user[MAX(PR_MAXNAMELEN, MAX_K_NAME_SZ)];
+    if (kname_unparse(user, pname, pinst,
+		      strcmp(prealm, realm_list[0]) == 0 ? NULL : prealm) != 0)
+	die("internal error: kname_unparse failed\n");
+
+    krb5_free_principal(context, principal);
+    krb5_free_host_realm(context, realm_list);
+    krb5_free_context(context);
+
+    /* Instead of canonicalizing the name as below, we just use
+       strcasecmp above. */
+#if 0
+    afs_int32 id;
+    if (pr_SNameToId((char *)user, &id) != 0)
+	die("bad principal\n");
+    if (id == ANONYMOUSID)
+	die("anonymous\n");
+    if (pr_SIdToName(id, user) != 0)
+	die("internal error: pr_SIdToName failed\n");
+#endif
+
+    /* Read the locker ACL. */
+    char acl[2048];
+    vi.in = NULL;
+    vi.in_size = 0;
+    vi.out = acl;
+    vi.out_size = sizeof acl;
+    if (pioctl(dir, VIOCGETAL, &vi, 1) != 0)
+	die("internal error: pioctl: %m\n");
+
+    /* Parse the locker ACL to compute the user's rights. */
+    const char *p = acl;
+
+    int nplus, nminus;
+    int off;
+    if (sscanf(p, "%d\n%d\n%n", &nplus, &nminus, &off) < 2)
+	die("internal error: can't parse output from pioctl\n");
+    p += off;
+
+    int rights = parse_rights(nplus, &p, user);
+    rights &= ~parse_rights(nminus, &p, user);
+#ifdef OVERLORDS
+    if (~rights & PRSFS_ADMINISTER && ismember(user, OVERLORDS)) {
+	openlog("admof", 0, LOG_AUTHPRIV);
+	syslog(LOG_NOTICE, "giving %s admin rights on %s", user, locker);
+	closelog();
+	rights |= PRSFS_ADMINISTER;
+    }
+#endif
+
+    pr_End();
+
+    /* Output whether the user is an administrator. */
+    if (rights & PRSFS_ADMINISTER) {
+	printf("yes\n");
+	exit(33);
+    } else {
+	printf("no\n");
+	exit(1);
+    }
+}
Index: /tags/fc9-eol/server/common/oursrc/accountadm/configure.in
===================================================================
--- /tags/fc9-eol/server/common/oursrc/accountadm/configure.in	(revision 1257)
+++ /tags/fc9-eol/server/common/oursrc/accountadm/configure.in	(revision 1257)
@@ -0,0 +1,29 @@
+AC_INIT(signup-scripts-frontend.c)
+
+AC_PROG_CC
+
+AC_DEFUN(REQUIRE_PATH,[
+AC_SUBST($1_path)
+if test "[$]$1_path" = ""; then
+        AC_ERROR(Cannot find $1)
+fi
+])
+
+AC_DEFUN(LOCATE,[
+AC_PATH_PROG($1_path, $1)
+REQUIRE_PATH($1)
+])
+
+dnl Needed by signup-scripts-backend.in
+
+LOCATE(hesinfo)
+LOCATE(ldapadd)
+LOCATE(sudo)
+
+dnl Needed by mbash.in
+
+LOCATE(bash)
+
+AC_OUTPUT(Makefile)
+AC_OUTPUT(signup-scripts-backend)
+AC_OUTPUT(mbash)
Index: /tags/fc9-eol/server/common/oursrc/accountadm/cronload
===================================================================
--- /tags/fc9-eol/server/common/oursrc/accountadm/cronload	(revision 1257)
+++ /tags/fc9-eol/server/common/oursrc/accountadm/cronload	(revision 1257)
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+if [ -n "$2" ]; then
+  cd "$2"
+fi
+
+/bin/cat "$1" | /usr/bin/crontab -
+
+echo "New crontab for $USER:"
+echo ""
+/usr/bin/crontab -l
Index: /tags/fc9-eol/server/common/oursrc/accountadm/mbash.in
===================================================================
--- /tags/fc9-eol/server/common/oursrc/accountadm/mbash.in	(revision 1257)
+++ /tags/fc9-eol/server/common/oursrc/accountadm/mbash.in	(revision 1257)
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+@bash_path@ --rcfile /usr/local/etc/mbashrc "$@"
Index: /tags/fc9-eol/server/common/oursrc/accountadm/mbashrc
===================================================================
--- /tags/fc9-eol/server/common/oursrc/accountadm/mbashrc	(revision 1257)
+++ /tags/fc9-eol/server/common/oursrc/accountadm/mbashrc	(revision 1257)
@@ -0,0 +1,37 @@
+# System-wide .bashrc file for interactive bash(1) shells.
+
+. /etc/bashrc
+
+shopt -s checkwinsize
+
+# enable bash completion in interactive shells
+
+#if [ "$PS1" -a -f /etc/bash_completion ]; then
+#    . /etc/bash_completion
+#fi
+# ~/.bashrc: executed by bash(1) for non-login shells.
+
+export PS1='[\u@\h]:\w\$ '
+umask 022
+
+alias su='echo "Instead of running su USERNAME, ssh USERNAME@scripts.mit.edu from Athena" #'
+
+# You may uncomment the following lines if you want `ls' to be colorized:
+# export LS_OPTIONS='--color=auto'
+# eval `dircolors`
+# alias ls='ls $LS_OPTIONS'
+# alias ll='ls $LS_OPTIONS -l'
+# alias l='ls $LS_OPTIONS -lA'
+#
+# Some more alias to avoid making mistakes:
+# alias rm='rm -i'
+# alias cp='cp -i'
+# alias mv='mv -i'
+
+if [ -f ~/.bashrc.scripts ]; then
+	. ~/.bashrc.scripts
+fi
+
+if [ -d ~/web_scripts ]; then
+	cd ~/web_scripts
+fi
Index: /tags/fc9-eol/server/common/oursrc/accountadm/mrproper
===================================================================
--- /tags/fc9-eol/server/common/oursrc/accountadm/mrproper	(revision 1257)
+++ /tags/fc9-eol/server/common/oursrc/accountadm/mrproper	(revision 1257)
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+rm -f signup-scripts-frontend admof signup-scripts-backend mbash
+rm -f configure config.* Makefile
+rm -rf auto*.cache
Index: /tags/fc9-eol/server/common/oursrc/accountadm/signup-scripts-backend.in
===================================================================
--- /tags/fc9-eol/server/common/oursrc/accountadm/signup-scripts-backend.in	(revision 1257)
+++ /tags/fc9-eol/server/common/oursrc/accountadm/signup-scripts-backend.in	(revision 1257)
@@ -0,0 +1,136 @@
+#!/usr/bin/perl
+use strict;
+
+# signup-scripts-backend
+# Copyright (C) 2006  Jeff Arnold <jbarnold@mit.edu>
+# 
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
+# 
+# See /COPYRIGHT in this repository for more information.
+
+$ENV{PATH} = '';
+
+my $username = $ARGV[0];
+
+# Complain unless submitted username contains only valid characters
+complain("bad username") unless($username =~ /^[\w._-]+$/);
+
+open BANNEDUSERS, "</afs/athena.mit.edu/contrib/scripts/admin/users.banned" or
+    complain("internal error");
+while (<BANNEDUSERS>) {
+    chomp;
+    complain("banned username") if ($_ eq $username);
+}
+close(BANNEDUSERS);
+
+my %filsys;
+open HESINFO, '-|', '@hesinfo_path@', '--', $username, 'filsys' or
+    complain("internal error");
+while (<HESINFO>) {
+	chomp;
+	my %f; @f{qw(type path rw mount order)} = split / /;
+	%filsys = %f if (($f{order} || 9999) <= ($filsys{order} || 9999));
+}
+close HESINFO;
+unless (%filsys &&
+	$filsys{type} eq 'AFS' &&
+	$filsys{path} =~ /^\/afs\/[\w\._\/-]+/ &&
+	$filsys{mount} eq "/mit/$username") {
+	complain("athena user not found");
+}
+my $homedir = $filsys{path};
+
+# Tell AFS that we don't want to trigger fakestat, and confirm user's homedir
+chdir $homedir or complain("athena homedir not found");
+opendir TEMP, '.';
+closedir TEMP;
+
+# Obtain user's homedir uid
+my (undef, undef, undef, undef, $uid1, $gid1, undef, undef, undef, undef, undef, undef, undef) = stat '.' or complain("athena homedir not found");
+
+# Complain if user's uid is too low or too high
+complain("bad uid") unless($uid1 > 110 and $uid1 < (1 << 31));
+
+# Complain if user's .scripts-signup file does not exist
+#complain("scripts-signup file not found") unless(-e '.scripts-signup');
+
+# Complain if the user's username is already taken
+complain("username already taken") if(getpwnam $username);
+
+# Complain if user's uid is already taken
+complain("uid already taken") if(getpwuid $uid1);
+
+if($homedir !~ /\/afs\/athena\.mit\.edu\/user\//) {
+	$gid1 = $uid1;
+}
+
+# Complain if user's gid is already taken
+complain("gid already taken") if(getgrgid $gid1);
+
+my $pid;
+defined ($pid = open LDAP, '|-') or complain("internal error");
+if (!$pid) {
+	close STDOUT;
+	open STDOUT, '>/dev/null';
+	exec '@ldapadd_path@', '-c', '-x', '-D', 'cn=Directory Manager', '-y', '/etc/signup-ldap-pw';
+	exit 1;
+}
+print LDAP <<EOF;
+dn: uid=$username,ou=People,dc=scripts,dc=mit,dc=edu
+objectClass: posixAccount
+cn: $username
+uid: $username
+uidNumber: $uid1
+gidNumber: $gid1
+homeDirectory: $homedir
+loginShell: /usr/local/bin/mbash
+
+dn: cn=$username,ou=Groups,dc=scripts,dc=mit,dc=edu
+objectClass: posixGroup
+cn: $username
+gidNumber: $gid1
+
+dn: apacheServerName=$username.scripts.mit.edu,ou=VirtualHosts,dc=scripts,dc=mit,dc=edu
+objectClass: apacheConfig
+apacheServerName: $username.scripts.mit.edu
+apacheServerAlias: $username.scripts
+apacheDocumentRoot: $homedir/web_scripts
+apacheSuexecUid: $uid1
+apacheSuexecGid: $gid1
+
+dn: scriptsVhostName=$username.scripts.mit.edu,ou=VirtualHosts,dc=scripts,dc=mit,dc=edu
+objectClass: scriptsVhost
+scriptsVhostName: $username.scripts.mit.edu
+scriptsVhostAlias: $username.scripts
+scriptsVhostAccount: uid=$username,ou=People,dc=scripts,dc=mit,dc=edu
+scriptsVhostDirectory: 
+
+EOF
+close LDAP or complain("internal error");
+# Add disk quota for user
+#system('@sudo_path@', '-u', 'root', '/usr/sbin/setquota', $username, '0', '25000', '0', '10000', '-a');
+
+printexit("done", 0);
+
+sub complain {
+  my ($complaint) = @_;
+  printexit($complaint, 1);
+}
+
+sub printexit {
+  my ($msg, $status) = @_;
+  print $msg;
+  exit($status);
+}
Index: /tags/fc9-eol/server/common/oursrc/accountadm/signup-scripts-frontend.c
===================================================================
--- /tags/fc9-eol/server/common/oursrc/accountadm/signup-scripts-frontend.c	(revision 1257)
+++ /tags/fc9-eol/server/common/oursrc/accountadm/signup-scripts-frontend.c	(revision 1257)
@@ -0,0 +1,48 @@
+/*
+ * signup-scripts-frontend
+ * Copyright (C) 2006  Jeff Arnold <jbarnold@mit.edu>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ *
+ * See /COPYRIGHT in this repository for more information.
+ */
+
+#include <stdlib.h>
+#include <stdio.h>
+
+extern char **environ;
+
+int main(int argc, char **argv) {
+	environ=NULL;
+	if(argc != 2) {
+		exit(1);
+	}
+
+	char uid[21]; // 64-bit uid requires 21
+	int retval = snprintf(uid, 21, "%d", getuid());
+	if(retval < 0 || retval >= 21) {
+		exit(1);
+	}
+	if(setreuid(geteuid(), -1) != 0) {
+		exit(1);
+	}
+	char *v[3];
+#define BACKEND_PATH "/usr/local/sbin/signup-scripts-backend"
+	v[0] = BACKEND_PATH;
+	v[1] = argv[1];
+	v[2] = NULL;
+	execv(BACKEND_PATH, v);
+	return 1;
+}
Index: /tags/fc9-eol/server/common/oursrc/accountadm/vhostadd
===================================================================
--- /tags/fc9-eol/server/common/oursrc/accountadm/vhostadd	(revision 1257)
+++ /tags/fc9-eol/server/common/oursrc/accountadm/vhostadd	(revision 1257)
@@ -0,0 +1,74 @@
+#!/bin/bash
+set -e
+
+printf "Host name: " >&2
+if [ "$1" ]; then
+    host="$1"; shift
+    echo "$host"
+else
+    read host
+fi
+
+if ! grep -Fq "." <<< "$host"; then host=$host.mit.edu; fi
+
+printf "User: " >&2
+if [ "$1" ]; then
+    user="$1"; shift
+    echo "$user"
+else
+    read user
+fi
+
+while read attr value; do
+    echo "$attr" "$value"
+    case "$attr" in
+	dn:) user_dn=$value;;
+	uid:) user=$value;;
+	uidNumber:) uid=$value;;
+	gidNumber:) gid=$value;;
+	homeDirectory:) home=$value;;
+    esac
+done < <(ldapsearch -LLL -x -b ou=People,dc=scripts,dc=mit,dc=edu "(uid=$user)" dn uid uidNumber gidNumber homeDirectory | perl -0pe 's/\n //g;')
+
+printf "Docroot: $home/web_scripts" >&2
+read subdir
+
+tmpfile=$(mktemp -t vhostadd.XXXXXX) || exit $?
+trap 'rm -f "$tmpfile"' EXIT
+
+cat <<EOF > "$tmpfile"
+dn: apacheServerName=$host,ou=VirtualHosts,dc=scripts,dc=mit,dc=edu
+objectClass: apacheConfig
+objectClass: top
+apacheServerName: $host
+EOF
+
+if [ "${host%mit.edu}" != "$host" ]; then
+    cat <<EOF >> "$tmpfile"
+apacheServerAlias: ${host%.mit.edu}
+EOF
+fi
+
+cat <<EOF >> "$tmpfile"
+apacheDocumentRoot: $home/web_scripts$subdir
+apacheSuexecUid: $uid
+apacheSuexecGid: $gid
+
+dn: scriptsVhostName=$host,ou=VirtualHosts,dc=scripts,dc=mit,dc=edu
+objectClass: scriptsVhost
+objectClass: top
+scriptsVhostName: $host
+EOF
+
+if [ "${host%mit.edu}" != "$host" ]; then
+    cat <<EOF >> "$tmpfile"
+scriptsVhostAlias: ${host%.mit.edu}
+EOF
+fi
+
+cat <<EOF >> "$tmpfile"
+scriptsVhostAccount: $user_dn
+scriptsVhostDirectory: ${subdir#/}
+EOF
+
+exec ldapvi --add --in "$tmpfile"
Index: /tags/fc9-eol/server/common/oursrc/accountadm/vhostedit
===================================================================
--- /tags/fc9-eol/server/common/oursrc/accountadm/vhostedit	(revision 1257)
+++ /tags/fc9-eol/server/common/oursrc/accountadm/vhostedit	(revision 1257)
@@ -0,0 +1,8 @@
+#!/bin/sh
+
+if [ ! "$1" ]; then
+    echo "Usage: $0 <vhost>"
+    exit 2
+fi
+
+exec ldapvi -b dc=scripts,dc=mit,dc=edu "(|(&(objectClass=apacheConfig)(|(apacheServerName=$1)(apacheServerAlias=$1)))(&(objectClass=scriptsVhost)(|(scriptsVhostName=$1)(scriptsVhostAlias=$1))))"
Index: /tags/fc9-eol/server/common/oursrc/athrun/Makefile.in
===================================================================
--- /tags/fc9-eol/server/common/oursrc/athrun/Makefile.in	(revision 1257)
+++ /tags/fc9-eol/server/common/oursrc/athrun/Makefile.in	(revision 1257)
@@ -0,0 +1,14 @@
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+bindir = @bindir@
+
+all-local:
+
+install:
+	install -p -m755 -D athrun.sh $(DESTDIR)$(bindir)/athrun
+
+clean:
+
+distclean: clean
+	rm -f configure config.* Makefile
+	rm -rf auto*.cache
Index: /tags/fc9-eol/server/common/oursrc/athrun/athrun.sh
===================================================================
--- /tags/fc9-eol/server/common/oursrc/athrun/athrun.sh	(revision 1257)
+++ /tags/fc9-eol/server/common/oursrc/athrun/athrun.sh	(revision 1257)
@@ -0,0 +1,23 @@
+#!/bin/sh
+
+# An analog of the Athena athrun utility for scripts.mit.edu.
+# The Athena athrun was written by Greg Hudson.
+# This version was kludged by Mitchell Berger.
+# "athrun moira" runs moira from the moira locker.
+# "athrun gnu gls -l" runs gls -l from the gnu locker.
+
+case $# in
+0)
+  echo "Usage: athrun locker [program] [args ...]" >&2
+  exit 1
+  ;;
+1)
+  exec "/mit/$1/arch/@sys/bin/$1"
+  ;;
+*)
+  locker=$1
+  program=$2
+  shift 2;
+  exec "/mit/$locker/arch/@sys/bin/$program" "$@"
+  ;;
+esac
Index: /tags/fc9-eol/server/common/oursrc/athrun/configure.in
===================================================================
--- /tags/fc9-eol/server/common/oursrc/athrun/configure.in	(revision 1257)
+++ /tags/fc9-eol/server/common/oursrc/athrun/configure.in	(revision 1257)
@@ -0,0 +1,5 @@
+AC_INIT()
+
+AC_PROG_CC
+
+AC_OUTPUT(Makefile)
Index: /tags/fc9-eol/server/common/oursrc/athrun/mrproper
===================================================================
--- /tags/fc9-eol/server/common/oursrc/athrun/mrproper	(revision 1257)
+++ /tags/fc9-eol/server/common/oursrc/athrun/mrproper	(revision 1257)
@@ -0,0 +1,4 @@
+#!/bin/sh
+
+rm -f configure config.* Makefile
+rm -rf auto*.cache
Index: /tags/fc9-eol/server/common/oursrc/execsys/Makefile.in
===================================================================
--- /tags/fc9-eol/server/common/oursrc/execsys/Makefile.in	(revision 1257)
+++ /tags/fc9-eol/server/common/oursrc/execsys/Makefile.in	(revision 1257)
@@ -0,0 +1,36 @@
+CC = @CC@
+CFLAGS = @CFLAGS@
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+libexecdir = @libexecdir@
+sysconfdir = @sysconfdir@
+sbindir = @sbindir@
+APACHEDIR = /etc/httpd
+SYSCATPATH = /usr/local/bin
+trusteddir = /usr/libexec/scripts-trusted
+
+all-local: static-cat execsys-binfmt
+
+static-cat.c execsys-binfmt: static-cat.c.pre execsys-binfmt.pre
+	@UPD_VARS@ syscat_path=$(SYSCATPATH)/static-cat perl upd-execsys
+
+install: all-local
+	install -D -p -m644 execsys.conf $(DESTDIR)$(APACHEDIR)/conf.d/execsys.conf
+	install -D -p -m755 execsys-binfmt $(DESTDIR)/etc/init.d/execsys-binfmt
+	install -D -p -m755 static-cat $(DESTDIR)$(SYSCATPATH)/static-cat
+	install -D -p -m755 ldapize.pl $(DESTDIR)$(sbindir)/ldapize.pl
+
+	install -D -p -m755 svnproxy.pl $(DESTDIR)$(sbindir)/svnproxy.pl
+	install -D -p -m755 svn $(DESTDIR)$(trusteddir)/svn
+	install -D -p -m644 scripts-svn.xinetd $(DESTDIR)/etc/xinetd.d/scripts-svn
+
+	install -D -p -m755 gitproxy.pl $(DESTDIR)$(sbindir)/gitproxy.pl
+	install -D -p -m755 git $(DESTDIR)$(trusteddir)/git
+	install -D -p -m644 scripts-git.xinetd $(DESTDIR)/etc/xinetd.d/scripts-git
+
+clean:
+	rm -f static-cat
+
+distclean: clean
+	rm -f configure config.* Makefile
+	rm -rf auto*.cache
Index: /tags/fc9-eol/server/common/oursrc/execsys/configure.in
===================================================================
--- /tags/fc9-eol/server/common/oursrc/execsys/configure.in	(revision 1257)
+++ /tags/fc9-eol/server/common/oursrc/execsys/configure.in	(revision 1257)
@@ -0,0 +1,30 @@
+AC_INIT(static-cat.c.pre)
+
+AC_PROG_CC
+
+AC_ARG_WITH(afsagent,
+[  --with-afsagent[=UID]        afsagent will have user id UID],[
+  if test "$withval" != "no" -a "$withval" != "yes"; then
+    CFLAGS="-DAFSAGENT_UID=$withval $CCFLAGS"
+  fi
+])
+
+AC_DEFUN(SUPPORT,[AC_ARG_WITH($1,
+[  --with-$1[=PATH]$2       associate .$1 with PATH],[
+  if test "$withval" != "no" -a "$withval" != "yes"; then
+    UPD_VARS="$1_path=$withval $UPD_VARS"
+  fi
+])])
+
+# the second argument should contain no spaces ("[]") if the corresponding
+# extension is three characters long (eg, "php"), and it should contain
+# one space ("[ ]") if the corresponding extension is two characters long
+# (eg, "pl")
+
+SUPPORT([pl], [ ])
+SUPPORT([php], [])
+SUPPORT([py], [ ])
+SUPPORT([exe], [])
+
+AC_SUBST(UPD_VARS)
+AC_OUTPUT(Makefile)
Index: /tags/fc9-eol/server/common/oursrc/execsys/execsys-binfmt.pre
===================================================================
--- /tags/fc9-eol/server/common/oursrc/execsys/execsys-binfmt.pre	(revision 1257)
+++ /tags/fc9-eol/server/common/oursrc/execsys/execsys-binfmt.pre	(revision 1257)
@@ -0,0 +1,56 @@
+#!/bin/sh
+#
+# execsys-binfmt: test1
+#
+# chkconfig: 2345 2 98
+# description: test2
+#
+### BEGIN INIT INFO
+# Provides:          execsys-binfmt
+# Required-Start:    $syslog
+# Required-Stop:     $syslog
+# Should-Start:      $local_fs
+# Should-Stop:       $local_fs
+# Default-Start:     2 3 4 5
+# Default-Stop:      0 1 6
+# Short-Description: Start scripts.mit.edu execsys system
+# Description:       Decides what interpreter to use to execute files
+### END INIT INFO
+
+stop ()
+{
+    echo "-1" > /proc/sys/fs/binfmt_misc/status
+    umount /proc/sys/fs/binfmt_misc
+}
+
+start ()
+{
+    mount -t binfmt_misc none /proc/sys/fs/binfmt_misc
+# START-AUTOGENERATED: DO NOT EDIT THIS SECTION, INCLUDING THIS LINE!
+# This section is populated by the script upd-execsys
+# END-AUTOGENERATED: DO NOT EDIT THIS SECTION, INCLUDING THIS LINE!
+}
+
+case "$1" in
+start)
+    stop 2>/dev/null || :
+    start
+    ;;
+stop)
+    stop
+    ;;
+force-reload)
+    stop
+    start
+    ;;
+restart)
+    stop
+    start
+    ;;
+*)
+    echo "Usage: $0 [start|stop|restart|force-reload]" >&2
+    exit 2
+    ;;
+esac
+
+exit $?
Index: /tags/fc9-eol/server/common/oursrc/execsys/git
===================================================================
--- /tags/fc9-eol/server/common/oursrc/execsys/git	(revision 1257)
+++ /tags/fc9-eol/server/common/oursrc/execsys/git	(revision 1257)
@@ -0,0 +1,13 @@
+#!/bin/sh
+
+case "$1" in
+*/.. | */../*)
+    exit 1
+    ;;
+${HOME%/Scripts}/Scripts/git/*)
+    exec /usr/bin/git daemon --inetd --base-path="$1"
+    ;;
+*)
+    exit 1
+    ;;
+esac
Index: /tags/fc9-eol/server/common/oursrc/execsys/gitproxy.pl
===================================================================
--- /tags/fc9-eol/server/common/oursrc/execsys/gitproxy.pl	(revision 1257)
+++ /tags/fc9-eol/server/common/oursrc/execsys/gitproxy.pl	(revision 1257)
@@ -0,0 +1,106 @@
+#!/usr/bin/perl
+#
+# gitproxy: Wrapper around git daemon for Git virtual hosting.
+# version 1.1, released 2008-12-28
+# Copyright © 2008 Anders Kaseorg <andersk@mit.edu>
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+
+use strict;
+use warnings;
+use IPC::Open2;
+use Errno qw(EINTR);
+use IO::Poll qw(POLLIN POLLOUT POLLHUP);
+
+# Receive the first message from the client, and parse out the URL.
+my $host;
+my $msg = '';
+for (;;) {
+    my $n = sysread(STDIN, my $buf, 4096);
+    next if $n < 0 and $! == EINTR;
+    $n >= 0 or die "$0: read: $!";
+    $n > 0 or die "$0: unexpected message from client";
+    $msg .= $buf;
+    my $len;
+    if (($len) = $msg =~ m/^([[:xdigit:]]{4})/ and length($msg) >= hex($len)) {
+	foreach (split("\0", $')) {
+	    last if ($host) = m/^host=(.*)$/;
+	}
+	last if defined($host);
+	die "$0: no host found in client message";
+    } elsif ($msg !~ m/^[[:xdigit:]]{0,3}$/) {
+	die "$0: unexpected message from client";
+    }
+}
+
+# Now start the real git daemon based on the URL.
+my $pid = open2(\*IN, \*OUT, '/usr/local/sbin/ldapize.pl', "git://$host/") or die "$0: open: $!";
+
+# Finally, go into a poll loop to transfer the remaining data
+# (STDIN -> OUT, IN -> STDOUT), including the client's message to git daemon.
+my ($cbuf, $sbuf) = ($msg, '');
+my $poll = new IO::Poll;
+$poll->mask(\*STDOUT => POLLHUP);
+$poll->mask(\*OUT => POLLOUT);
+$poll->remove(\*STDIN);
+$poll->mask(\*IN => POLLIN);
+while ($poll->handles()) {
+    my $n = $poll->poll();
+    next if $n < 0 and $! == EINTR;
+    $n >= 0 or die "select: $!";
+    if ($poll->events(\*STDIN)) {
+	my $n = sysread(STDIN, $cbuf, 4096);
+	next if $n < 0 and $! == EINTR;
+	$n >= 0 or die "read: $!";
+	$poll->remove(\*STDIN);
+	$poll->mask(\*OUT => POLLOUT);
+    } elsif ($poll->events(\*IN)) {
+	my $n = sysread(IN, $sbuf, 4096);
+	next if $n < 0 and $! == EINTR;
+	$n >= 0 or die "read: $!";
+	$poll->remove(\*IN);
+	$poll->mask(\*STDOUT => POLLOUT);
+    } elsif ($poll->events(\*STDOUT) & POLLOUT && $sbuf ne '') {
+	my $n = syswrite(STDOUT, $sbuf);
+	next if $n < 0 and $! == EINTR;
+	$n >= 0 or die "write: $!";
+	$sbuf = substr($sbuf, $n);
+	if ($sbuf eq '') {
+	    $poll->mask(\*STDOUT => POLLHUP);
+	    $poll->mask(\*IN => POLLIN);
+	}
+    } elsif ($poll->events(\*STDOUT)) {
+	$poll->remove(\*STDOUT);
+	$poll->remove(\*IN);
+	close(STDOUT) or die "close: $!";
+	close(IN) or die "close: $!";
+    } elsif ($poll->events(\*OUT) & POLLOUT && $cbuf ne '') {
+	my $n = syswrite(OUT, $cbuf);
+	next if $n < 0 and $! == EINTR;
+	$n >= 0 or die "write: $!";
+	$cbuf = substr($cbuf, $n);
+	if ($cbuf eq '') {
+	    $poll->mask(\*OUT => POLLHUP);
+	    $poll->mask(\*STDIN => POLLIN);
+	}
+    } elsif ($poll->events(\*OUT)) {
+	$poll->remove(\*OUT);
+	$poll->remove(\*STDIN);
+	close(OUT) or die "close: $!";
+	close(STDIN) or die "close: $!";
+    }
+}
+
+while (waitpid($pid, 0) == -1 && $! == EINTR) { }
Index: /tags/fc9-eol/server/common/oursrc/execsys/ldapize.pl
===================================================================
--- /tags/fc9-eol/server/common/oursrc/execsys/ldapize.pl	(revision 1257)
+++ /tags/fc9-eol/server/common/oursrc/execsys/ldapize.pl	(revision 1257)
@@ -0,0 +1,53 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+use Net::LDAP;
+use Net::LDAP::Filter;
+
+my $url = $ARGV[0];
+my ($proto, $hostname, $path) = $url =~ m|^(.*?)://([^/]*)(.*)| or die "Could not match URL";
+my $mesg;
+
+# oh my gosh Net::LDAP::Filter SUCKS
+my $filter = bless({and =>
+    [{equalityMatch => {attributeDesc  => 'objectClass',
+                        assertionValue => 'scriptsVhost'}},
+     {or =>
+         [{equalityMatch => {attributeDesc  => 'scriptsVhostName',
+                             assertionValue => $hostname}},
+          {equalityMatch => {attributeDesc  => 'scriptsVhostAlias',
+                             assertionValue => $hostname}}]}]},
+    'Net::LDAP::Filter');
+
+my $ldap = Net::LDAP->new("ldapi://%2fvar%2frun%2fdirsrv%2fslapd-scripts.socket/");
+$mesg = $ldap->bind();
+$mesg->code && die $mesg->error;
+
+$mesg = $ldap->search(base => "ou=VirtualHosts,dc=scripts,dc=mit,dc=edu",
+                      filter => $filter);
+$mesg->code && die $mesg->error;
+
+my $vhostEntry = $mesg->pop_entry;
+my $vhostDirectory = $vhostEntry->get_value('scriptsVhostDirectory');
+
+$mesg = $ldap->search(base => $vhostEntry->get_value('scriptsVhostAccount'),
+                      scope => 'base', filter => 'objectClass=posixAccount');
+$mesg->code && die $mesg->error;
+
+my $userEntry = $mesg->pop_entry;
+my ($homeDirectory, $uidNumber, $gidNumber) =
+    map { $userEntry->get_value($_) } qw(homeDirectory uidNumber gidNumber);
+
+if ($proto eq 'svn') {
+  chdir '/usr/libexec/scripts-trusted';
+  exec('/usr/sbin/suexec', $uidNumber, $gidNumber, '/usr/libexec/scripts-trusted/svn', "$homeDirectory/Scripts/svn/$vhostDirectory");
+} elsif ($proto eq 'git') {
+  chdir '/usr/libexec/scripts-trusted';
+  exec('/usr/sbin/suexec', $uidNumber, $gidNumber, '/usr/libexec/scripts-trusted/git', "$homeDirectory/Scripts/git/$vhostDirectory");
+} elsif ($proto eq 'http') {
+  print "suexec $uidNumber $gidNumber $homeDirectory/Scripts/web/$vhostDirectory/$path\n";
+} else {
+  die "Unknown protocol\n";
+}
Index: /tags/fc9-eol/server/common/oursrc/execsys/mime.types
===================================================================
--- /tags/fc9-eol/server/common/oursrc/execsys/mime.types	(revision 1257)
+++ /tags/fc9-eol/server/common/oursrc/execsys/mime.types	(revision 1257)
@@ -0,0 +1,509 @@
+# This is a comment. I love comments.
+
+# This file controls what Internet media types are sent to the client for
+# given file extension(s).  Sending the correct media type to the client
+# is important so they know how to handle the content of the file.
+# Extra types can either be added here or by using an AddType directive
+# in your config files. For more information about Internet media types,
+# please read RFC 2045, 2046, 2047, 2048, and 2077.  The Internet media type
+# registry is at <http://www.iana.org/assignments/media-types/>.
+
+# MIME type			Extension
+application/EDI-Consent
+application/EDI-X12
+application/EDIFACT
+application/activemessage
+application/andrew-inset	ez
+application/applefile
+application/atomicmail
+application/batch-SMTP
+application/beep+xml
+application/cals-1840
+application/commonground
+application/cybercash
+application/dca-rft
+application/dec-dx
+application/dvcs
+application/eshop
+application/http
+application/hyperstudio
+application/iges
+application/index
+application/index.cmd
+application/index.obj
+application/index.response
+application/index.vnd
+application/iotp
+application/ipp
+application/isup
+application/font-tdpfr
+application/java-archive	jar
+application/mac-binhex40	hqx
+application/mac-compactpro	cpt
+application/macwriteii
+application/marc
+application/mathematica
+application/mathematica-old
+application/msword		doc
+application/news-message-id
+application/news-transmission
+application/ocsp-request
+application/ocsp-response
+application/octet-stream	bin dms lha lzh exe class so dll img iso il
+application/ogg			ogg
+application/parityfec
+application/pdf			pdf
+application/pgp-encrypted
+application/pgp-keys
+application/pgp-signature
+application/pkcs10
+application/pkcs7-mime
+application/pkcs7-signature
+application/pkix-cert
+application/pkix-crl
+application/pkixcmp
+application/postscript		ai eps ps
+application/prs.alvestrand.titrax-sheet
+application/prs.cww
+application/prs.nprend
+application/qsig
+application/remote-printing
+application/riscos
+application/rtf			rtf
+application/sdp
+application/set-payment
+application/set-payment-initiation
+application/set-registration
+application/set-registration-initiation
+application/sgml
+application/sgml-open-catalog
+application/sieve
+application/slate
+application/smil		smi smil
+application/timestamp-query
+application/timestamp-reply
+application/vemmi
+application/vnd.3M.Post-it-Notes
+application/vnd.FloGraphIt
+application/vnd.accpac.simply.aso
+application/vnd.accpac.simply.imp
+application/vnd.acucobol
+application/vnd.aether.imp
+application/vnd.anser-web-certificate-issue-initiation
+application/vnd.anser-web-funds-transfer-initiation
+application/vnd.audiograph
+application/vnd.businessobjects
+application/vnd.bmi
+application/vnd.canon-cpdl
+application/vnd.canon-lips
+application/vnd.claymore
+application/vnd.commerce-battelle
+application/vnd.commonspace
+application/vnd.comsocaller
+application/vnd.contact.cmsg
+application/vnd.cosmocaller
+application/vnd.cups-postscript
+application/vnd.cups-raster
+application/vnd.cups-raw
+application/vnd.ctc-posml
+application/vnd.cybank
+application/vnd.dna
+application/vnd.dpgraph
+application/vnd.dxr
+application/vnd.ecdis-update
+application/vnd.ecowin.chart
+application/vnd.ecowin.filerequest
+application/vnd.ecowin.fileupdate
+application/vnd.ecowin.series
+application/vnd.ecowin.seriesrequest
+application/vnd.ecowin.seriesupdate
+application/vnd.enliven
+application/vnd.epson.esf
+application/vnd.epson.msf
+application/vnd.epson.quickanime
+application/vnd.epson.salt
+application/vnd.epson.ssf
+application/vnd.ericsson.quickcall
+application/vnd.eudora.data
+application/vnd.fdf
+application/vnd.ffsns
+application/vnd.framemaker
+application/vnd.fsc.weblaunch
+application/vnd.fujitsu.oasys
+application/vnd.fujitsu.oasys2
+application/vnd.fujitsu.oasys3
+application/vnd.fujitsu.oasysgp
+application/vnd.fujitsu.oasysprs
+application/vnd.fujixerox.ddd
+application/vnd.fujixerox.docuworks
+application/vnd.fujixerox.docuworks.binder
+application/vnd.fut-misnet
+application/vnd.grafeq
+application/vnd.groove-account
+application/vnd.groove-identity-message
+application/vnd.groove-injector
+application/vnd.groove-tool-message
+application/vnd.groove-tool-template
+application/vnd.groove-vcard
+application/vnd.hhe.lesson-player
+application/vnd.hp-HPGL
+application/vnd.hp-PCL
+application/vnd.hp-PCLXL
+application/vnd.hp-hpid
+application/vnd.hp-hps
+application/vnd.httphone
+application/vnd.hzn-3d-crossword
+application/vnd.ibm.afplinedata
+application/vnd.ibm.MiniPay
+application/vnd.ibm.modcap
+application/vnd.informix-visionary
+application/vnd.intercon.formnet
+application/vnd.intertrust.digibox
+application/vnd.intertrust.nncp
+application/vnd.intu.qbo
+application/vnd.intu.qfx
+application/vnd.irepository.package+xml
+application/vnd.is-xpr
+application/vnd.japannet-directory-service
+application/vnd.japannet-jpnstore-wakeup
+application/vnd.japannet-payment-wakeup
+application/vnd.japannet-registration
+application/vnd.japannet-registration-wakeup
+application/vnd.japannet-setstore-wakeup
+application/vnd.japannet-verification
+application/vnd.japannet-verification-wakeup
+application/vnd.koan
+application/vnd.lotus-1-2-3
+application/vnd.lotus-approach
+application/vnd.lotus-freelance
+application/vnd.lotus-notes
+application/vnd.lotus-organizer
+application/vnd.lotus-screencam
+application/vnd.lotus-wordpro
+application/vnd.mcd
+application/vnd.mediastation.cdkey
+application/vnd.meridian-slingshot
+application/vnd.mif		mif
+application/vnd.minisoft-hp3000-save
+application/vnd.mitsubishi.misty-guard.trustweb
+application/vnd.mobius.daf
+application/vnd.mobius.dis
+application/vnd.mobius.msl
+application/vnd.mobius.plc
+application/vnd.mobius.txf
+application/vnd.motorola.flexsuite
+application/vnd.motorola.flexsuite.adsi
+application/vnd.motorola.flexsuite.fis
+application/vnd.motorola.flexsuite.gotap
+application/vnd.motorola.flexsuite.kmr
+application/vnd.motorola.flexsuite.ttc
+application/vnd.motorola.flexsuite.wem
+application/vnd.mozilla.xul+xml
+application/vnd.ms-artgalry
+application/vnd.ms-asf
+application/vnd.ms-excel	xls
+application/vnd.ms-lrm
+application/vnd.ms-powerpoint	ppt
+application/vnd.ms-project
+application/vnd.ms-tnef
+application/vnd.ms-works
+application/vnd.mseq
+application/vnd.msign
+application/vnd.music-niff
+application/vnd.musician
+application/vnd.netfpx
+application/vnd.noblenet-directory
+application/vnd.noblenet-sealer
+application/vnd.noblenet-web
+application/vnd.novadigm.EDM
+application/vnd.novadigm.EDX
+application/vnd.novadigm.EXT
+application/vnd.oasis.opendocument.chart	odc
+application/vnd.oasis.opendocument.database	odb
+application/vnd.oasis.opendocument.formula	odf
+application/vnd.oasis.opendocument.graphics	odg
+application/vnd.oasis.opendocument.graphics-template	otg
+application/vnd.oasis.opendocument.image	odi
+application/vnd.oasis.opendocument.presentation	odp
+application/vnd.oasis.opendocument.presentation-template	otp
+application/vnd.oasis.opendocument.spreadsheet	ods
+application/vnd.oasis.opendocument.spreadsheet-template	ots
+application/vnd.oasis.opendocument.text	odt
+application/vnd.oasis.opendocument.text-master	odm
+application/vnd.oasis.opendocument.text-template	ott
+application/vnd.oasis.opendocument.text-web	oth
+application/vnd.osa.netdeploy
+application/vnd.palm
+application/vnd.pg.format
+application/vnd.pg.osasli
+application/vnd.powerbuilder6
+application/vnd.powerbuilder6-s
+application/vnd.powerbuilder7
+application/vnd.powerbuilder7-s
+application/vnd.powerbuilder75
+application/vnd.powerbuilder75-s
+application/vnd.previewsystems.box
+application/vnd.publishare-delta-tree
+application/vnd.pvi.ptid1
+application/vnd.pwg-xhtml-print+xml
+application/vnd.rapid
+application/vnd.s3sms
+application/vnd.seemail
+application/vnd.shana.informed.formdata
+application/vnd.shana.informed.formtemplate
+application/vnd.shana.informed.interchange
+application/vnd.shana.informed.package
+application/vnd.sss-cod
+application/vnd.sss-dtf
+application/vnd.sss-ntf
+application/vnd.sun.xml.writer	sxw
+application/vnd.sun.xml.writer.template	stw
+application/vnd.sun.xml.calc	sxc
+application/vnd.sun.xml.calc.template	stc
+application/vnd.sun.xml.draw	sxd
+application/vnd.sun.xml.draw.template	std
+application/vnd.sun.xml.impress	sxi
+application/vnd.sun.xml.impress.template	sti
+application/vnd.sun.xml.writer.global	sxg
+application/vnd.sun.xml.math	sxm
+application/vnd.street-stream
+application/vnd.svd
+application/vnd.swiftview-ics
+application/vnd.triscape.mxs
+application/vnd.trueapp
+application/vnd.truedoc
+application/vnd.tve-trigger
+application/vnd.ufdl
+application/vnd.uplanet.alert
+application/vnd.uplanet.alert-wbxml
+application/vnd.uplanet.bearer-choice-wbxml
+application/vnd.uplanet.bearer-choice
+application/vnd.uplanet.cacheop
+application/vnd.uplanet.cacheop-wbxml
+application/vnd.uplanet.channel
+application/vnd.uplanet.channel-wbxml
+application/vnd.uplanet.list
+application/vnd.uplanet.list-wbxml
+application/vnd.uplanet.listcmd
+application/vnd.uplanet.listcmd-wbxml
+application/vnd.uplanet.signal
+application/vnd.vcx
+application/vnd.vectorworks
+application/vnd.vidsoft.vidconference
+application/vnd.visio
+application/vnd.vividence.scriptfile
+application/vnd.wap.sic
+application/vnd.wap.slc
+application/vnd.wap.wbxml	wbxml
+application/vnd.wap.wmlc	wmlc
+application/vnd.wap.wmlscriptc	wmlsc
+application/vnd.webturbo
+application/vnd.wrq-hp3000-labelled
+application/vnd.wt.stf
+application/vnd.xara
+application/vnd.xfdl
+application/vnd.yellowriver-custom-menu
+application/whoispp-query
+application/whoispp-response
+application/wita
+application/wordperfect5.1
+application/x-bcpio		bcpio
+application/x-bittorrent	torrent
+application/x-bzip2		bz2
+application/x-cdlink		vcd
+application/x-chess-pgn		pgn
+application/x-compress
+application/x-cpio		cpio
+application/x-csh		csh
+application/x-director		dcr dir dxr
+application/x-dvi		dvi
+application/x-futuresplash	spl
+application/x-gtar		gtar
+application/x-gzip		gz tgz
+application/x-hdf		hdf
+application/x-javascript	js
+application/x-kword		kwd kwt
+application/x-kspread		ksp
+application/x-kpresenter	kpr kpt
+application/x-kchart		chrt
+application/x-killustrator	kil
+application/x-koan		skp skd skt skm
+application/x-latex		latex
+application/x-netcdf		nc cdf
+# This conflicts with audio/x-pn-realaudio-plugin, which is commented out below.
+application/x-rpm		rpm
+application/x-sh		sh
+application/x-shar		shar
+application/x-shockwave-flash	swf
+application/x-stuffit		sit
+application/x-sv4cpio		sv4cpio
+application/x-sv4crc		sv4crc
+application/x-tar		tar
+application/x-tcl		tcl
+application/x-tex		tex
+application/x-texinfo		texinfo texi
+application/x-troff		t tr roff
+application/x-troff-man		man
+application/x-troff-me		me
+application/x-troff-ms		ms
+application/x-ustar		ustar
+application/x-wais-source	src
+application/x400-bp
+application/xhtml+xml		xhtml xht
+application/xml
+application/xml-dtd
+application/xml-external-parsed-entity
+application/zip			zip
+audio/32kadpcm
+audio/basic			au snd
+audio/g.722.1
+audio/l16
+audio/midi			mid midi kar
+audio/mp4a-latm
+audio/mpa-robust
+audio/mpeg			mpga mp2 mp3
+audio/parityfec
+audio/prs.sid
+audio/telephone-event
+audio/tone
+audio/vnd.cisco.nse
+audio/vnd.cns.anp1
+audio/vnd.cns.inf1
+audio/vnd.digital-winds
+audio/vnd.everad.plj
+audio/vnd.lucent.voice
+audio/vnd.nortel.vbk
+audio/vnd.nuera.ecelp4800
+audio/vnd.nuera.ecelp7470
+audio/vnd.nuera.ecelp9600
+audio/vnd.octel.sbc
+audio/vnd.qcelp
+audio/vnd.rhetorex.32kadpcm
+audio/vnd.vmx.cvsd
+audio/x-aiff			aif aiff aifc
+audio/x-mpegurl			m3u
+audio/x-pn-realaudio		ram rm
+#audio/x-pn-realaudio-plugin	rpm
+audio/x-realaudio		ra
+audio/x-wav			wav
+chemical/x-pdb			pdb
+chemical/x-xyz			xyz
+image/bmp			bmp
+image/cgm
+image/g3fax
+image/gif			gif
+image/ief			ief
+image/jpeg			jpeg jpg jpe
+image/naplps
+image/png			png
+image/prs.btif
+image/prs.pti
+image/tiff			tiff tif
+image/vnd.cns.inf2
+image/vnd.djvu			djvu djv
+image/vnd.dwg
+image/vnd.dxf
+image/vnd.fastbidsheet
+image/vnd.fpx
+image/vnd.fst
+image/vnd.fujixerox.edmics-mmr
+image/vnd.fujixerox.edmics-rlc
+image/vnd.microsoft.icon	ico
+image/vnd.mix
+image/vnd.net-fpx
+image/vnd.svf
+image/vnd.wap.wbmp		wbmp
+image/vnd.xiff
+image/x-cmu-raster		ras
+image/x-portable-anymap		pnm
+image/x-portable-bitmap		pbm
+image/x-portable-graymap	pgm
+image/x-portable-pixmap		ppm
+image/x-rgb			rgb
+image/x-xbitmap			xbm
+image/x-xpixmap			xpm
+image/x-xwindowdump		xwd
+message/delivery-status
+message/disposition-notification
+message/external-body
+message/http
+message/news
+message/partial
+message/rfc822
+message/s-http
+model/iges			igs iges
+model/mesh			msh mesh silo
+model/vnd.dwf
+model/vnd.flatland.3dml
+model/vnd.gdl
+model/vnd.gs-gdl
+model/vnd.gtw
+model/vnd.mts
+model/vnd.vtu
+model/vrml			wrl vrml
+multipart/alternative
+multipart/appledouble
+multipart/byteranges
+multipart/digest
+multipart/encrypted
+multipart/form-data
+multipart/header-set
+multipart/mixed
+multipart/parallel
+multipart/related
+multipart/report
+multipart/signed
+multipart/voice-message
+text/calendar
+text/css			css
+text/directory
+text/enriched
+text/html			html htm
+text/parityfec
+text/plain			asc txt
+text/prs.lines.tag
+text/rfc822-headers
+text/richtext			rtx
+text/rtf			rtf
+text/sgml			sgml sgm
+text/tab-separated-values	tsv
+text/t140
+text/uri-list
+text/vnd.DMClientScript
+text/vnd.IPTC.NITF
+text/vnd.IPTC.NewsML
+text/vnd.abc
+text/vnd.curl
+text/vnd.flatland.3dml
+text/vnd.fly
+text/vnd.fmi.flexstor
+text/vnd.in3d.3dml
+text/vnd.in3d.spot
+text/vnd.latex-z
+text/vnd.motorola.reflex
+text/vnd.ms-mediapackage
+text/vnd.wap.si
+text/vnd.wap.sl
+text/vnd.wap.wml		wml
+text/vnd.wap.wmlscript		wmls
+text/x-setext			etx
+text/xml			xml xsl
+text/xml-external-parsed-entity
+video/mp4v-es
+video/mpeg			mpeg mpg mpe
+video/parityfec
+video/pointer
+video/quicktime			qt mov
+video/vnd.fvt
+video/vnd.motorola.video
+video/vnd.motorola.videop
+video/vnd.mpegurl		mxu
+video/vnd.mts
+video/vnd.nokia.interleaved-multimedia
+video/vnd.vivo
+video/x-msvideo			avi
+video/x-sgi-movie		movie
+video/x-ms-wmv			wmv
+x-conference/x-cooltalk		ice
+application/xaml+xml		xaml
+application/x-silverlight-app	xap
Index: /tags/fc9-eol/server/common/oursrc/execsys/mrproper
===================================================================
--- /tags/fc9-eol/server/common/oursrc/execsys/mrproper	(revision 1257)
+++ /tags/fc9-eol/server/common/oursrc/execsys/mrproper	(revision 1257)
@@ -0,0 +1,6 @@
+#!/bin/sh
+
+rm -f static-cat
+rm -f configure config.* Makefile
+rm -f execsys-binfmt static-cat.c execsys.conf
+rm -rf auto*.cache
Index: /tags/fc9-eol/server/common/oursrc/execsys/scripts-git.xinetd
===================================================================
--- /tags/fc9-eol/server/common/oursrc/execsys/scripts-git.xinetd	(revision 1257)
+++ /tags/fc9-eol/server/common/oursrc/execsys/scripts-git.xinetd	(revision 1257)
@@ -0,0 +1,11 @@
+service git
+{
+	disable			= no
+	port			= 9418
+	socket_type		= stream
+	protocol		= tcp
+	wait			= no
+	user			= apache
+	passenv			= PATH
+	server			= /usr/local/sbin/gitproxy.pl
+}
Index: /tags/fc9-eol/server/common/oursrc/execsys/scripts-svn.xinetd
===================================================================
--- /tags/fc9-eol/server/common/oursrc/execsys/scripts-svn.xinetd	(revision 1257)
+++ /tags/fc9-eol/server/common/oursrc/execsys/scripts-svn.xinetd	(revision 1257)
@@ -0,0 +1,12 @@
+service svn
+{
+	disable			= no
+	port			= 3690
+	socket_type		= stream
+	protocol		= tcp
+	wait			= no
+	user			= apache
+	passenv			= PATH
+	server			= /usr/local/sbin/svnproxy.pl
+#	bind			= 127.0.0.1
+}
Index: /tags/fc9-eol/server/common/oursrc/execsys/static-cat.c.pre
===================================================================
--- /tags/fc9-eol/server/common/oursrc/execsys/static-cat.c.pre	(revision 1257)
+++ /tags/fc9-eol/server/common/oursrc/execsys/static-cat.c.pre	(revision 1257)
@@ -0,0 +1,357 @@
+/*
+ * static-cat
+ * Copyright (C) 2006  Jeff Arnold <jbarnold@mit.edu>
+ * 
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ * 
+ * See /COPYRIGHT in this repository for more information.
+ */
+
+#include <fcntl.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/stat.h>
+#include <time.h>
+
+// Map from extensions to content-types
+
+// START-AUTOGENERATED: DO NOT EDIT THIS SECTION, INCLUDING THIS LINE!
+// This section is populated by the script upd-execsys
+// END-AUTOGENERATED: DO NOT EDIT THIS SECTION, INCLUDING THIS LINE!
+
+// Start code from w3c's libwww library
+// (as obtained from http://www.w3.org/Library/src/HTWWWStr.html)
+
+char *months[12] = {
+	"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep",
+	"Oct", "Nov", "Dec"
+};
+
+char *wkdays[7] = {
+	"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"
+};
+
+/*
+**	Returns a string pointer to a static area of the current calendar
+**	time in RFC 1123 format, for example
+**
+**		Sun, 06 Nov 1994 08:49:37 GMT
+**
+**	The result can be given in both local and GMT dependent on the flag
+*/
+const char *HTDateTimeStr(time_t * calendar, int local)
+{
+	static char buf[40];
+
+#ifdef HAVE_STRFTIME
+	if (local) {
+		/*
+		 ** Solaris 2.3 has a bug so we _must_ use reentrant version
+		 ** Thomas Maslen <tmaslen@verity.com>
+		 */
+#if defined(HT_REENTRANT) || defined(SOLARIS)
+		struct tm loctime;
+		localtime_r(calendar, &loctime);
+		strftime(buf, 40, "%a, %d %b %Y %H:%M:%S", &loctime);
+#else
+		struct tm *loctime = localtime(calendar);
+		strftime(buf, 40, "%a, %d %b %Y %H:%M:%S", loctime);
+#endif				/* SOLARIS || HT_REENTRANT */
+	} else {
+#if defined(HT_REENTRANT) || defined(SOLARIS)
+		struct tm gmt;
+		gmtime_r(calendar, &gmt);
+		strftime(buf, 40, "%a, %d %b %Y %H:%M:%S GMT", &gmt);
+#else
+		struct tm *gmt = gmtime(calendar);
+		strftime(buf, 40, "%a, %d %b %Y %H:%M:%S GMT", gmt);
+#endif				/* SOLARIS || HT_REENTRANT */
+	}
+#else
+	if (local) {
+#if defined(HT_REENTRANT)
+		struct tm loctime;
+		localtime_r(calendar, &loctime);
+#else
+		struct tm *loctime = localtime(calendar);
+#endif				/* HT_REENTRANT */
+		sprintf(buf, "%s, %02d %s %04d %02d:%02d:%02d",
+			wkdays[loctime->tm_wday],
+			loctime->tm_mday,
+			months[loctime->tm_mon],
+			loctime->tm_year + 1900,
+			loctime->tm_hour, loctime->tm_min,
+			loctime->tm_sec);
+	} else {
+#if defined(HT_REENTRANT) || defined(SOLARIS)
+		struct tm gmt;
+		gmtime_r(calendar, &gmt);
+#else
+		struct tm *gmt = gmtime(calendar);
+#endif
+		sprintf(buf, "%s, %02d %s %04d %02d:%02d:%02d GMT",
+			wkdays[gmt->tm_wday],
+			gmt->tm_mday,
+			months[gmt->tm_mon],
+			gmt->tm_year + 1900, gmt->tm_hour, gmt->tm_min,
+			gmt->tm_sec);
+	}
+#endif
+	return buf;
+}
+
+// End code from w3c's libwww library
+
+// Start code from gnu
+// (as obtained from "apt-get source coreutils" on debian sarge)
+
+// JBA: included by safe_read.h, safe_write.h, full_read.h, and full_write.h
+#include <stddef.h>
+
+// JBA: included by safe_read.c and full_write.c
+#if HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+// JBA: included by safe_read.c and full_write.c
+#include <errno.h>
+#ifndef errno
+extern int errno;
+#endif
+
+// Code from system.h:
+
+#ifndef STDOUT_FILENO
+# define STDOUT_FILENO 1
+#endif
+
+// Code from safe_read.h:
+
+#define SAFE_READ_ERROR ((size_t) -1)
+
+// Code from safe_write.h
+
+#define SAFE_WRITE_ERROR ((size_t) -1)
+
+// Code from safe_read.c
+
+/* Get ssize_t.  */
+#include <sys/types.h>
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#endif
+
+#ifdef EINTR
+# define IS_EINTR(x) ((x) == EINTR)
+#else
+# define IS_EINTR(x) 0
+#endif
+
+#include <limits.h>
+
+/* Read(write) up to COUNT bytes at BUF from(to) descriptor FD, retrying if
+   interrupted.  Return the actual number of bytes read(written), zero for EOF,
+   or SAFE_READ_ERROR(SAFE_WRITE_ERROR) upon error.  */
+size_t safe_read(int fd, void *buf, size_t count)
+{
+	size_t result;
+
+	/* POSIX limits COUNT to SSIZE_MAX, but we limit it further, requiring
+	   that COUNT <= INT_MAX, to avoid triggering a bug in Tru64 5.1.
+	   When decreasing COUNT, keep the file pointer block-aligned.
+	   Note that in any case, read(write) may succeed, yet read(write)
+	   fewer than COUNT bytes, so the caller must be prepared to handle
+	   partial results.  */
+	if (count > INT_MAX)
+		count = INT_MAX & ~8191;
+
+	do {
+		result = read(fd, buf, count);
+	}
+	while (result < 0 && IS_EINTR(errno));
+
+	return (size_t) result;
+}
+
+/* Read(write) up to COUNT bytes at BUF from(to) descriptor FD, retrying if
+   interrupted.  Return the actual number of bytes read(written), zero for EOF,
+   or SAFE_READ_ERROR(SAFE_WRITE_ERROR) upon error.  */
+size_t safe_write(int fd, const void *buf, size_t count)
+{
+	size_t result;
+
+	/* POSIX limits COUNT to SSIZE_MAX, but we limit it further, requiring
+	   that COUNT <= INT_MAX, to avoid triggering a bug in Tru64 5.1.
+	   When decreasing COUNT, keep the file pointer block-aligned.
+	   Note that in any case, read(write) may succeed, yet read(write)
+	   fewer than COUNT bytes, so the caller must be prepared to handle
+	   partial results.  */
+	if (count > INT_MAX)
+		count = INT_MAX & ~8191;
+
+	do {
+		result = write(fd, buf, count);
+	}
+	while (result < 0 && IS_EINTR(errno));
+
+	return (size_t) result;
+}
+
+// Code from full_write.c
+
+/* Write(read) COUNT bytes at BUF to(from) descriptor FD, retrying if
+   interrupted or if a partial write(read) occurs.  Return the number
+   of bytes transferred.
+   When writing, set errno if fewer than COUNT bytes are written.
+   When reading, if fewer than COUNT bytes are read, you must examine
+   errno to distinguish failure from EOF (errno == 0).  */
+size_t full_read(int fd, void *buf, size_t count)
+{
+	size_t total = 0;
+	char *ptr = buf;
+
+	while (count > 0) {
+		size_t n_rw = safe_read(fd, ptr, count);
+		if (n_rw == (size_t) - 1)
+			break;
+		if (n_rw == 0) {
+			errno = 0;
+			break;
+		}
+		total += n_rw;
+		ptr += n_rw;
+		count -= n_rw;
+	}
+
+	return total;
+}
+
+/* Write(read) COUNT bytes at BUF to(from) descriptor FD, retrying if
+   interrupted or if a partial write(read) occurs.  Return the number
+   of bytes transferred.
+   When writing, set errno if fewer than COUNT bytes are written.
+   When reading, if fewer than COUNT bytes are read, you must examine
+   errno to distinguish failure from EOF (errno == 0).  */
+size_t full_write(int fd, const void *buf, size_t count)
+{
+	size_t total = 0;
+	const char *ptr = buf;
+
+	while (count > 0) {
+		size_t n_rw = safe_write(fd, ptr, count);
+		if (n_rw == (size_t) - 1)
+			break;
+		if (n_rw == 0) {
+			errno = ENOSPC;
+			break;
+		}
+		total += n_rw;
+		ptr += n_rw;
+		count -= n_rw;
+	}
+
+	return total;
+}
+
+// Code from cat.c
+
+/* Nonzero if a non-fatal error has occurred.  */
+static int exit_status = 0;
+
+static int input_desc;
+
+/* Plain cat.  Copies the file behind `input_desc' to STDOUT_FILENO.  */
+
+static void simple_cat(
+			      /* Pointer to the buffer, used by reads and writes.  */
+			      char *buf,
+			      /* Number of characters preferably read or written by each read and write
+			         call.  */
+			      int bufsize)
+{
+	/* Actual number of characters read, and therefore written.  */
+	size_t n_read;
+
+	/* Loop until the end of the file.  */
+
+	for (;;) {
+		/* Read a block of input.  */
+
+		n_read = safe_read(input_desc, buf, bufsize);
+		if (n_read == SAFE_READ_ERROR) {
+			// JBA: simplified to "exit_status=1; return;"
+			exit_status = 1;
+			return;
+		}
+
+		/* End of this file?  */
+
+		if (n_read == 0)
+			break;
+
+		/* Write this block out.  */
+
+		{
+			/* The following is ok, since we know that 0 < n_read.  */
+			size_t n = n_read;
+			if (full_write(STDOUT_FILENO, buf, n) != n)
+				exit(1);	// JBA: simplified to "exit(1);"
+		}
+	}
+}
+
+// End code from gnu
+
+int main(int argc, char **argv)
+{
+	input_desc = open(argv[1], O_RDONLY);
+	if (input_desc == -1) {
+		input_desc =
+		    open("/mit/scripts/www/403-404.html", O_RDONLY);
+		if (input_desc == -1)
+			exit(0);
+		printf("Status: 404 Not Found\n");
+		printf("Content-type: text/html;\n\n");
+	} else {
+		int i, j;
+		const char *content_type = "application/octet-stream";
+		for (i = strlen(argv[1]) - 1; i > 0; i--) {
+			if (argv[1][i - 1] == '.')
+				break;
+		}
+		if (i == 0)
+			exit(0);
+		for (j = 0; j < 2 * NEXTS; j += 2) {
+			if (strcmp(map[j], &argv[1][i]) == 0) {
+				content_type = map[j + 1];
+			}
+		}
+
+		struct stat statbuf;
+		if (fstat(input_desc, &statbuf) == 0) {
+			const char *dtstr =
+			    HTDateTimeStr(&statbuf.st_mtime, 0);
+			printf("Last-Modified: %s\n", dtstr);
+		}
+		printf("Content-type: %s\n\n", content_type);
+	}
+	fflush(stdout);
+	char *buf = malloc(4096);
+	simple_cat(buf, 4096);
+	free(buf);
+	close(input_desc);
+	return exit_status;
+}
Index: /tags/fc9-eol/server/common/oursrc/execsys/svn
===================================================================
--- /tags/fc9-eol/server/common/oursrc/execsys/svn	(revision 1257)
+++ /tags/fc9-eol/server/common/oursrc/execsys/svn	(revision 1257)
@@ -0,0 +1,13 @@
+#!/bin/sh
+
+case "$1" in
+*/.. | */../*)
+    exit 1
+    ;;
+${HOME%/Scripts}/Scripts/svn/*)
+    exec /usr/bin/svnserve -i -r "$1"
+    ;;
+*)
+    exit 1
+    ;;
+esac
Index: /tags/fc9-eol/server/common/oursrc/execsys/svnproxy.pl
===================================================================
--- /tags/fc9-eol/server/common/oursrc/execsys/svnproxy.pl	(revision 1257)
+++ /tags/fc9-eol/server/common/oursrc/execsys/svnproxy.pl	(revision 1257)
@@ -0,0 +1,140 @@
+#!/usr/bin/perl
+#
+# svnproxy: Wrapper around svnserve for Subversion virtual hosting.
+# version 1.1, released 2008-12-28
+# Copyright © 2008 Anders Kaseorg <andersk@mit.edu>
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+
+use strict;
+use warnings;
+use IPC::Open2;
+use Errno qw(EINTR);
+use IO::Poll qw(POLLIN POLLOUT POLLHUP);
+
+# Read the initial greeting from a dummy svnserve process.
+my $pid = open(IN, '-|');
+defined $pid or die "$0: open: $!";
+if ($pid == 0) {
+    close(STDIN) or die "$0: close: $!";
+    exec('svnserve', '-i') or die "$0: exec svnproxy: $!";
+}
+my $greeting = '';
+for (;;) {
+    my $n = sysread(IN, my $buf, 4096);
+    next if $n < 0 and $! == EINTR;
+    $n >= 0 or die "$0: read: $!";
+    last if $n == 0;
+    $greeting .= $buf;
+}
+
+# Send the greeting to the client.
+my $buf = $greeting;
+while ($buf ne '') {
+    my $n = syswrite(STDOUT, $buf);
+    next if $n < 0 and $! == EINTR;
+    $n >= 0 or die "$0: write: $!";
+    $buf = substr($buf, $n);
+}
+close(IN) or die "$0: close: $!";
+waitpid(-1, 0) or die "$0: waitpid: $!";
+
+# Receive the response from the client, and parse out the URL.
+my $url;
+my $response = '';
+for (;;) {
+    my $n = sysread(STDIN, my $buf, 4096);
+    next if $n < 0 and $! == EINTR;
+    $n >= 0 or die "$0: read: $!";
+    $n > 0 or die "$0: unexpected response from client";
+    $response .= $buf;
+    my $url_len;
+    if (($url_len) = $response =~ m/^\(\s\S+\s\(\s[^)]*\)\s(\d+):/ and
+	length($') >= $url_len) {
+	$url = substr($', 0, $url_len);
+	last;
+    } elsif ($response !~ m/^(?:\((?:\s(?:\S+(?:\s(?:\((?:\s(?:[^)]*(?:\)(?:\s(?:\d+:?)?)?)?)?)?)?)?)?)?)?$/) {
+	die "$0: unexpected response from client";
+    }
+}
+
+# Now start the real svnserve based on the URL.
+$pid = open2(\*IN, \*OUT, '/usr/local/sbin/ldapize.pl', $url) or die "$0: open: $!";
+
+# Read the greeting, expecting it to be identical to the dummy greeting.
+while ($greeting ne '') {
+    my $n = sysread(IN, my $buf, length($greeting));
+    next if $n < 0 and $! == EINTR;
+    $n >= 0 or die "$0: read: $!";
+    $n > 0 or die "$0: svnserve unexpectedly closed connection";
+    $greeting =~ s/^\Q$buf\E// or die "$0: unexpected greeting from svnserve";
+}
+
+# Finally, go into a select loop to transfer the remaining data
+# (STDIN -> OUT, IN -> STDOUT), including the client's response to svnserve.
+my ($cbuf, $sbuf) = ($response, '');
+my $poll = new IO::Poll;
+$poll->mask(\*STDOUT => POLLHUP);
+$poll->mask(\*OUT => POLLOUT);
+$poll->remove(\*STDIN);
+$poll->mask(\*IN => POLLIN);
+while ($poll->handles()) {
+    my $n = $poll->poll();
+    next if $n < 0 and $! == EINTR;
+    $n >= 0 or die "select: $!";
+    if ($poll->events(\*STDIN)) {
+	my $n = sysread(STDIN, $cbuf, 4096);
+	next if $n < 0 and $! == EINTR;
+	$n >= 0 or die "read: $!";
+	$poll->remove(\*STDIN);
+	$poll->mask(\*OUT => POLLOUT);
+    } elsif ($poll->events(\*IN)) {
+	my $n = sysread(IN, $sbuf, 4096);
+	next if $n < 0 and $! == EINTR;
+	$n >= 0 or die "read: $!";
+	$poll->remove(\*IN);
+	$poll->mask(\*STDOUT => POLLOUT);
+    } elsif ($poll->events(\*STDOUT) & POLLOUT && $sbuf ne '') {
+	my $n = syswrite(STDOUT, $sbuf);
+	next if $n < 0 and $! == EINTR;
+	$n >= 0 or die "write: $!";
+	$sbuf = substr($sbuf, $n);
+	if ($sbuf eq '') {
+	    $poll->mask(\*STDOUT => POLLHUP);
+	    $poll->mask(\*IN => POLLIN);
+	}
+    } elsif ($poll->events(\*STDOUT)) {
+	$poll->remove(\*STDOUT);
+	$poll->remove(\*IN);
+	close(STDOUT) or die "close: $!";
+	close(IN) or die "close: $!";
+    } elsif ($poll->events(\*OUT) & POLLOUT && $cbuf ne '') {
+	my $n = syswrite(OUT, $cbuf);
+	next if $n < 0 and $! == EINTR;
+	$n >= 0 or die "write: $!";
+	$cbuf = substr($cbuf, $n);
+	if ($cbuf eq '') {
+	    $poll->mask(\*OUT => POLLHUP);
+	    $poll->mask(\*STDIN => POLLIN);
+	}
+    } elsif ($poll->events(\*OUT)) {
+	$poll->remove(\*OUT);
+	$poll->remove(\*STDIN);
+	close(OUT) or die "close: $!";
+	close(STDIN) or die "close: $!";
+    }
+}
+
+while (waitpid($pid, 0) == -1 && $! == EINTR) { }
Index: /tags/fc9-eol/server/common/oursrc/execsys/upd-execsys
===================================================================
--- /tags/fc9-eol/server/common/oursrc/execsys/upd-execsys	(revision 1257)
+++ /tags/fc9-eol/server/common/oursrc/execsys/upd-execsys	(revision 1257)
@@ -0,0 +1,138 @@
+#!/usr/bin/perl -w
+use strict;
+
+# upd-execsys
+# Copyright (C) 2006  Jeff Arnold <jbarnold@mit.edu>
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
+#
+# See /COPYRIGHT in this repository for more information.
+
+my @dynamic = qw(
+ pl
+ php
+ py
+ cgi
+ scm
+ exe
+);
+
+my @static = qw(
+ html
+ css
+ gif
+ jpg
+ png
+ htm
+ jpeg
+ js
+ ico
+ xml
+ xsl
+ tiff
+ tif
+ tgz
+ tar
+ jar
+ zip
+ pdf
+ ps
+ doc
+ xls
+ ppt
+ swf
+ mp3
+ mov
+ wmv
+ mpg
+ mpeg
+ avi
+ il
+ JPG
+ xhtml
+ svg
+ xaml
+ xap
+);
+
+my %map;
+open(TYPES, "./mime.types");
+while(my $line = <TYPES>) {
+	next if($line =~ /^\#/ or $line =~ /^\s*$/);
+	my ($type, $exts) = ($line =~ /^(\S*)\s+(.*)$/);
+	next if($exts =~ /^\s*$/);
+	
+	foreach my $ext (split " ", $exts) {
+		$map{$ext} = $type;
+		$map{uc($ext)} = $type;
+	}
+}
+close(TYPES);
+
+undef $/;
+my $regexp = '(.*[\/\#]+\sSTART-AUTOGENERATED:[^!]*!).*\s([\/\#]+\sEND-AUTOGENERATED.*)';
+
+# Read existing binfmt file
+
+open(BINFMT, "./execsys-binfmt.pre");
+my $file = <BINFMT>;
+my ($fstart, $fend) = ($file =~ /$regexp/s);
+close(BINFMT);
+
+# Write new binfmt file
+
+open(BINFMT, ">./execsys-binfmt");
+print BINFMT $fstart, "\n";
+
+foreach my $ext (@dynamic) {
+  my $path = $ENV{"${ext}_path"};
+  print BINFMT "echo \":${ext}:E::${ext}::${path}:\" > /proc/sys/fs/binfmt_misc/register\n" if($path);
+}
+
+#foreach my $ext (@static) {
+#	print BINFMT "echo \":${ext}:E::${ext}::$ENV{syscat_path}:\" > /proc/sys/fs/binfmt_misc/register\n";
+#}
+print BINFMT $fend;
+close(BINFMT);
+
+open(CONF, ">./execsys.conf");
+
+foreach my $ext (@dynamic, @static) {
+	print CONF <<END
+<Files *.$ext>
+	SetHandler cgi-script
+	Options +ExecCGI
+</Files>
+
+END
+}
+close(CONF);
+
+open(CAT, "./static-cat.c.pre");
+$file = <CAT>;
+($fstart, $fend) = ($file =~ /$regexp/s);
+close(CAT);
+
+open(CAT, ">./static-cat.c");
+print CAT $fstart, "\n";
+print CAT '#define NEXTS ', scalar(@static), "\n";
+print CAT "const char *map[2 * NEXTS] = {\n";
+for(my $i = 0; $i < scalar(@static); $i++) {
+	my $comma = ( $i < scalar(@static)-1 ? "," : "" );
+	print CAT "\t\"$static[$i]\", \"$map{$static[$i]}\"$comma\n";
+}
+print CAT "};\n";
+print CAT $fend;
+close(CAT);
Index: /tags/fc9-eol/server/common/oursrc/httpdmods/Makefile.in
===================================================================
--- /tags/fc9-eol/server/common/oursrc/httpdmods/Makefile.in	(revision 1257)
+++ /tags/fc9-eol/server/common/oursrc/httpdmods/Makefile.in	(revision 1257)
@@ -0,0 +1,17 @@
+APXS = apxs
+
+MODS = mod_auth_sslcert mod_authz_afsgroup mod_auth_optional mod_vhost_ldap
+
+all-local: $(patsubst %,.libs/%.so,$(MODS))
+
+APXSFLAGS_mod_vhost_ldap = -Wc,-DMOD_VHOST_LDAP_VERSION=\\\"mod_vhost_ldap/1.2.0scripts\\\" -lldap_r
+
+.libs/%.so: %.c
+	$(APXS) $(APXSFLAGS_$*) -c $<
+
+clean:
+	rm -f $(MODS:=.o) $(MODS:=.la) $(MODS:=.lo) $(MODS:=.slo)
+	rm -rf .libs
+
+distclean: clean
+	rm -f config.log config.cache config.status Makefile
Index: /tags/fc9-eol/server/common/oursrc/httpdmods/configure.in
===================================================================
--- /tags/fc9-eol/server/common/oursrc/httpdmods/configure.in	(revision 1257)
+++ /tags/fc9-eol/server/common/oursrc/httpdmods/configure.in	(revision 1257)
@@ -0,0 +1,5 @@
+AC_INIT()
+
+AC_PROG_CC
+
+AC_OUTPUT(Makefile)
Index: /tags/fc9-eol/server/common/oursrc/httpdmods/mod_auth_optional.c
===================================================================
--- /tags/fc9-eol/server/common/oursrc/httpdmods/mod_auth_optional.c	(revision 1257)
+++ /tags/fc9-eol/server/common/oursrc/httpdmods/mod_auth_optional.c	(revision 1257)
@@ -0,0 +1,80 @@
+/* mod_auth_optional
+ * version 1.0, released 2007-09-01
+ * Anders Kaseorg <andersk@mit.edu>
+ *
+ * This module can pretend that authentication succeeded even if no
+ * authorization module is authoritative, instead of returning a
+ * Forbidden error.
+ */
+
+#include "ap_config.h"
+#include "httpd.h"
+#include "http_config.h"
+#include "http_request.h"
+
+typedef struct {
+    int optional;
+    char *default_user;
+} auth_optional_config_rec;
+
+static void *create_auth_optional_dir_config(apr_pool_t *p, char *d)
+{
+    auth_optional_config_rec *conf = apr_pcalloc(p, sizeof(*conf));
+    conf->optional = 0;
+    conf->default_user = NULL;
+    return conf;
+}
+
+static const command_rec auth_optional_cmds[] =
+{
+    AP_INIT_FLAG("AuthOptional", ap_set_flag_slot,
+                 (void *)APR_OFFSETOF(auth_optional_config_rec, optional),
+                 OR_AUTHCFG,
+                 "Make authentication succeed if no authorization module is authoritative"),
+    AP_INIT_TAKE1("AuthOptionalDefaultUser", ap_set_string_slot,
+                   (void*)APR_OFFSETOF(auth_optional_config_rec, default_user),
+                  OR_AUTHCFG,
+                  "Default username to use if no authorization module is authoritative"),
+    {NULL}
+};
+
+module AP_MODULE_DECLARE_DATA auth_optional_module;
+
+static int auth_optional_check_user_id(request_rec *r)
+{
+    auth_optional_config_rec *conf = ap_get_module_config(r->per_dir_config,
+							  &auth_optional_module);
+    if (!conf->optional)
+	return DECLINED;
+
+    r->user = conf->default_user;
+    return OK;
+}
+
+static int auth_optional_auth_checker(request_rec *r)
+{
+    auth_optional_config_rec *conf = ap_get_module_config(r->per_dir_config,
+							  &auth_optional_module);
+    if (!conf->optional || conf->default_user != NULL)
+	return DECLINED;
+
+    return OK;
+}
+
+static void register_hooks(apr_pool_t *p)
+{
+    /* Right before mod_authz_default. */
+    ap_hook_check_user_id(auth_optional_check_user_id, NULL, NULL, APR_HOOK_LAST - 1);
+    ap_hook_auth_checker(auth_optional_auth_checker, NULL, NULL, APR_HOOK_REALLY_FIRST);
+}
+
+module AP_MODULE_DECLARE_DATA auth_optional_module =
+{
+    STANDARD20_MODULE_STUFF,
+    create_auth_optional_dir_config, /* dir config creater */
+    NULL,                            /* dir merger --- default is to override */
+    NULL,                            /* server config */
+    NULL,                            /* merge server config */
+    auth_optional_cmds,              /* command apr_table_t */
+    register_hooks                   /* register hooks */
+};
Index: /tags/fc9-eol/server/common/oursrc/httpdmods/mod_auth_sslcert.c
===================================================================
--- /tags/fc9-eol/server/common/oursrc/httpdmods/mod_auth_sslcert.c	(revision 1257)
+++ /tags/fc9-eol/server/common/oursrc/httpdmods/mod_auth_sslcert.c	(revision 1257)
@@ -0,0 +1,170 @@
+/* mod_auth_sslcert
+ * version 1.1.1, released 2007-10-01
+ * Anders Kaseorg <andersk@mit.edu>
+ *
+ * This module does authentication based on SSL client certificates:
+ *   AuthType SSLCert
+ *   AuthSSLCertVar SSL_CLIENT_S_DN_Email
+ *   AuthSSLCertStripSuffix "@MIT.EDU"
+ */
+
+#include "apr_strings.h"
+#define APR_WANT_STRFUNC        /* for strcasecmp */
+#include "apr_want.h"
+
+#include "ap_config.h"
+#include "httpd.h"
+#include "http_config.h"
+#include "http_core.h"
+#include "http_log.h"
+#include "http_request.h"
+
+#include "mod_auth.h"
+#include "mod_ssl.h"
+
+static APR_OPTIONAL_FN_TYPE(ssl_var_lookup) *ssl_var_lookup;
+
+typedef struct {
+    int authoritative;
+    char *var;
+    char *strip_suffix;
+    int strip_suffix_required;
+} auth_sslcert_config_rec;
+
+static void *create_auth_sslcert_dir_config(apr_pool_t *p, char *dirspec)
+{
+    auth_sslcert_config_rec *conf = apr_pcalloc(p, sizeof(*conf));
+
+    conf->authoritative = -1;
+    conf->var = NULL;
+    conf->strip_suffix = NULL;
+    conf->strip_suffix_required = -1;
+
+    return conf;
+}
+
+static void *merge_auth_sslcert_dir_config(apr_pool_t *p, void *parent_conf, void *newloc_conf)
+{
+    auth_sslcert_config_rec *pconf = parent_conf, *nconf = newloc_conf,
+	*conf = apr_pcalloc(p, sizeof(*conf));
+
+    conf->authoritative = (nconf->authoritative != -1) ?
+	nconf->authoritative : pconf->authoritative;
+    conf->var = (nconf->var != NULL) ?
+	nconf->var : pconf->var;
+    conf->strip_suffix = (nconf->var != NULL || nconf->strip_suffix != NULL) ?
+	nconf->strip_suffix : pconf->strip_suffix;
+    conf->strip_suffix_required = (nconf->var != NULL || nconf->strip_suffix_required != -1) ?
+	nconf->authoritative : pconf->authoritative;
+
+    return conf;
+}
+
+static const command_rec auth_sslcert_cmds[] =
+{
+    AP_INIT_FLAG("AuthSSLCertAuthoritative", ap_set_flag_slot,
+                 (void *)APR_OFFSETOF(auth_sslcert_config_rec, authoritative),
+                 OR_AUTHCFG,
+                 "Set to 'Off' to allow access control to be passed along to "
+                 "lower modules if the UserID is not known to this module"),
+    AP_INIT_TAKE1("AuthSSLCertVar", ap_set_string_slot,
+		  (void*)APR_OFFSETOF(auth_sslcert_config_rec, var),
+		  OR_AUTHCFG,
+		  "SSL variable to use as the username"),
+    AP_INIT_TAKE1("AuthSSLCertStripSuffix", ap_set_string_slot,
+		  (void*)APR_OFFSETOF(auth_sslcert_config_rec, strip_suffix),
+		  OR_AUTHCFG,
+		  "An optional suffix to strip from the username"),
+    AP_INIT_FLAG("AuthSSLCertStripSuffixRequired", ap_set_flag_slot,
+		 (void *)APR_OFFSETOF(auth_sslcert_config_rec, strip_suffix_required),
+		 OR_AUTHCFG,
+		 "Set to 'Off' to allow certs that don't end with a recognized "
+		 "suffix to still authenticate"),
+    {NULL}
+};
+
+module AP_MODULE_DECLARE_DATA auth_sslcert_module;
+
+static int authenticate_sslcert_user(request_rec *r)
+{
+    auth_sslcert_config_rec *conf = ap_get_module_config(r->per_dir_config,
+							 &auth_sslcert_module);
+    const char *current_auth;
+
+    /* Are we configured to be SSLCert auth? */
+    current_auth = ap_auth_type(r);
+    if (!current_auth || strcasecmp(current_auth, "SSLCert") != 0) {
+        return DECLINED;
+    }
+
+    r->ap_auth_type = "SSLCert";
+
+    if (strcasecmp((char *)ssl_var_lookup(r->pool, r->server, r->connection, r,
+					  "SSL_CLIENT_VERIFY"),
+		   "SUCCESS") == 0) {
+	if (conf->var == NULL) {
+	    ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
+			  "AuthSSLCertVar is not set: \"%s\"", r->uri);
+	    return HTTP_INTERNAL_SERVER_ERROR;
+	}
+	char *user = (char *)ssl_var_lookup(r->pool, r->server, r->connection, r,
+					    conf->var);
+	if (user != NULL && user[0] != '\0') {
+	    if (conf->strip_suffix != NULL) {
+		int i = strlen(user) - strlen(conf->strip_suffix);
+		if (i >= 0 && strcasecmp(user + i, conf->strip_suffix) == 0) {
+		    r->user = apr_pstrmemdup(r->pool, user, i);
+		    return OK;
+		} else if (!conf->strip_suffix_required) {
+		    r->user = user;
+		    return OK;
+		} else {
+		    ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
+				  "SSL username for \"%s\" has wrong suffix: \"%s\"",
+				  r->uri, user);
+		}
+	    } else {
+		r->user = user;
+		return OK;
+	    }
+	} else {
+	    ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
+			  "no SSL username for \"%s\"", r->uri);
+	}
+    } else if (conf->authoritative) {
+	ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
+		      "SSL client not verified for \"%s\"", r->uri);
+    }
+
+    /* If we're not authoritative, then any error is ignored. */
+    if (!conf->authoritative) {
+	return DECLINED;
+    }
+
+    ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
+		  "SSLCert authentication failure for \"%s\"",
+		  r->uri);
+    return HTTP_UNAUTHORIZED;
+}
+
+static void import_ssl_var_lookup()
+{
+    ssl_var_lookup = APR_RETRIEVE_OPTIONAL_FN(ssl_var_lookup);
+}
+
+static void register_hooks(apr_pool_t *p)
+{
+    ap_hook_check_user_id(authenticate_sslcert_user, NULL, NULL, APR_HOOK_MIDDLE);
+    ap_hook_optional_fn_retrieve(import_ssl_var_lookup, NULL, NULL, APR_HOOK_MIDDLE);
+}
+
+module AP_MODULE_DECLARE_DATA auth_sslcert_module =
+{
+    STANDARD20_MODULE_STUFF,
+    create_auth_sslcert_dir_config,  /* dir config creater */
+    merge_auth_sslcert_dir_config,   /* dir merger */
+    NULL,                            /* server config */
+    NULL,                            /* merge server config */
+    auth_sslcert_cmds,               /* command apr_table_t */
+    register_hooks                   /* register hooks */
+};
Index: /tags/fc9-eol/server/common/oursrc/httpdmods/mod_authz_afsgroup.c
===================================================================
--- /tags/fc9-eol/server/common/oursrc/httpdmods/mod_authz_afsgroup.c	(revision 1257)
+++ /tags/fc9-eol/server/common/oursrc/httpdmods/mod_authz_afsgroup.c	(revision 1257)
@@ -0,0 +1,182 @@
+/* mod_authz_afsgroup
+ * version 1.1, released 2007-03-13
+ * Anders Kaseorg <anders@kaseorg.com>
+ *
+ * This module does authorization based on AFS groups:
+ *   Require afsgroup system:administrators
+ *
+ * It currently works by parsing the output of `pts membership
+ * <group>`.
+ */
+
+#include "apr_strings.h"
+
+#include "ap_config.h"
+#include "httpd.h"
+#include "http_config.h"
+#include "http_core.h"
+#include "http_log.h"
+#include "http_protocol.h"
+#include "http_request.h"
+
+#include <unistd.h>
+#include <stdio.h>
+
+typedef struct {
+    int authoritative;
+} authz_afsgroup_config_rec;
+
+static void *create_authz_afsgroup_dir_config(apr_pool_t *p, char *d)
+{
+    authz_afsgroup_config_rec *conf = apr_palloc(p, sizeof(*conf));
+
+    conf->authoritative = 1;
+    return conf;
+}
+
+static const command_rec authz_afsgroup_cmds[] =
+{
+    AP_INIT_FLAG("AuthzAFSGroupAuthoritative", ap_set_flag_slot,
+                 (void *)APR_OFFSETOF(authz_afsgroup_config_rec, authoritative),
+                 OR_AUTHCFG,
+                 "Set to 'Off' to allow access control to be passed along to "
+                 "lower modules if the 'require afsgroup' statement is not "
+                 "met. (default: On)."),
+    {NULL}
+};
+
+module AP_MODULE_DECLARE_DATA authz_afsgroup_module;
+
+static int check_afsgroup_access(request_rec *r)
+{
+    authz_afsgroup_config_rec *conf = ap_get_module_config(r->per_dir_config,
+							   &authz_afsgroup_module);
+    char *user = r->user;
+    int m = r->method_number;
+    int required_afsgroup = 0;
+    register int x;
+    const char *t;
+    char *w;
+    const apr_array_header_t *reqs_arr = ap_requires(r);
+    require_line *reqs;
+
+    if (!reqs_arr) {
+        return DECLINED;
+    }
+    reqs = (require_line *)reqs_arr->elts;
+
+    for (x = 0; x < reqs_arr->nelts; x++) {
+
+        if (!(reqs[x].method_mask & (AP_METHOD_BIT << m))) {
+            continue;
+        }
+
+        t = reqs[x].requirement;
+        w = ap_getword_white(r->pool, &t);
+        if (!strcasecmp(w, "afsgroup")) {
+            required_afsgroup = 1;
+            while (t[0]) {
+		int pfd[2];
+		pid_t cpid;
+		int status;
+		FILE *fp;
+		char *line = NULL;
+		char buf[256];
+		size_t len = 0;
+		ssize_t read;
+		int found = 0;
+                w = ap_getword_conf(r->pool, &t);
+		if (pipe(pfd) == -1) {
+		    ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
+				  "pipe() failed!");
+		    return HTTP_INTERNAL_SERVER_ERROR;
+		}
+		cpid = fork();
+		if (cpid == -1) {
+		    close(pfd[0]);
+		    close(pfd[1]);
+		    ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
+				  "fork() failed!");
+		    return HTTP_INTERNAL_SERVER_ERROR;
+		}
+		if (cpid == 0) {
+		    close(pfd[0]);
+		    dup2(pfd[1], STDOUT_FILENO);
+		    execve("/usr/bin/pts",
+			   (char *const[]) {
+			       "pts", "membership", "-nameorid", w, NULL
+			   },
+			   NULL);
+		    _exit(1);
+		}
+		close(pfd[1]);
+		fp = fdopen(pfd[0], "r");
+		if (fp == NULL) {
+		    close(pfd[0]);
+		    ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
+				  "fdopen() failed!");
+		    return HTTP_INTERNAL_SERVER_ERROR;
+		}
+		if (snprintf(buf, sizeof(buf), "  %s\n", user) >= sizeof(buf)) {
+		    ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
+				  "access to %s failed, reason: username '%s' "
+				  "is too long!",
+				  r->uri, user);
+		    continue;
+		}
+		while ((read = getline(&line, &len, fp)) != -1) {
+		    if (strcmp(line, buf) == 0)
+			found = 1;
+		}
+		if (line)
+		    free(line);
+		fclose(fp);
+		if (waitpid(cpid, &status, 0) == -1) {
+		    ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
+				  "waitpid() failed!");
+		    return HTTP_INTERNAL_SERVER_ERROR;
+		}
+		if (!WIFEXITED(status) || WEXITSTATUS(status) != 0) {
+		    ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
+				  "`pts membership -nameorid %s` failed!",
+				  w);
+		    return HTTP_INTERNAL_SERVER_ERROR;
+		}
+		if (found)
+		    return OK;
+            }
+        }
+    }
+
+    if (!required_afsgroup) {
+        return DECLINED;
+    }
+
+    if (!conf->authoritative) {
+        return DECLINED;
+    }
+
+    ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
+                  "access to %s failed, reason: user '%s' does not meet "
+                  "'require'ments for afsgroup to be allowed access",
+                  r->uri, user);
+
+    ap_note_auth_failure(r);
+    return HTTP_FORBIDDEN;
+}
+
+static void register_hooks(apr_pool_t *p)
+{
+    ap_hook_auth_checker(check_afsgroup_access, NULL, NULL, APR_HOOK_MIDDLE);
+}
+
+module AP_MODULE_DECLARE_DATA authz_afsgroup_module =
+{
+    STANDARD20_MODULE_STUFF,
+    create_authz_afsgroup_dir_config, /* dir config creater */
+    NULL,                             /* dir merger --- default is to override */
+    NULL,                             /* server config */
+    NULL,                             /* merge server config */
+    authz_afsgroup_cmds,              /* command apr_table_t */
+    register_hooks                    /* register hooks */
+};
Index: /tags/fc9-eol/server/common/oursrc/httpdmods/mod_vhost_ldap.c
===================================================================
--- /tags/fc9-eol/server/common/oursrc/httpdmods/mod_vhost_ldap.c	(revision 1257)
+++ /tags/fc9-eol/server/common/oursrc/httpdmods/mod_vhost_ldap.c	(revision 1257)
@@ -0,0 +1,704 @@
+/* ============================================================
+ * Copyright (c) 2003-2004, Ondrej Sury
+ * All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * 
+ */
+
+/*
+ * mod_vhost_ldap.c --- read virtual host config from LDAP directory
+ */
+
+#define CORE_PRIVATE
+
+#include <unistd.h>
+
+#include "httpd.h"
+#include "http_config.h"
+#include "http_core.h"
+#include "http_log.h"
+#include "http_request.h"
+#include "apr_version.h"
+#include "apr_ldap.h"
+#include "apr_strings.h"
+#include "apr_reslist.h"
+#include "util_ldap.h"
+
+#if !defined(APU_HAS_LDAP) && !defined(APR_HAS_LDAP)
+#error mod_vhost_ldap requires APR-util to have LDAP support built in
+#endif
+
+#if !defined(WIN32) && !defined(OS2) && !defined(BEOS) && !defined(NETWARE)
+#define HAVE_UNIX_SUEXEC
+#endif
+
+#ifdef HAVE_UNIX_SUEXEC
+#include "unixd.h"              /* Contains the suexec_identity hook used on Unix */
+#endif
+
+#define MIN_UID 100
+#define MIN_GID 100
+const char USERDIR[] = "web_scripts";
+
+module AP_MODULE_DECLARE_DATA vhost_ldap_module;
+
+typedef enum {
+    MVL_UNSET, MVL_DISABLED, MVL_ENABLED
+} mod_vhost_ldap_status_e;
+
+typedef struct mod_vhost_ldap_config_t {
+    mod_vhost_ldap_status_e enabled;			/* Is vhost_ldap enabled? */
+
+    /* These parameters are all derived from the VhostLDAPURL directive */
+    char *url;				/* String representation of LDAP URL */
+
+    char *host;				/* Name of the LDAP server (or space separated list) */
+    int port;				/* Port of the LDAP server */
+    char *basedn;			/* Base DN to do all searches from */
+    int scope;				/* Scope of the search */
+    char *filter;			/* Filter to further limit the search  */
+    deref_options deref;		/* how to handle alias dereferening */
+
+    char *binddn;			/* DN to bind to server (can be NULL) */
+    char *bindpw;			/* Password to bind to server (can be NULL) */
+
+    int have_deref;                     /* Set if we have found an Deref option */
+    int have_ldap_url;			/* Set if we have found an LDAP url */
+
+    int secure;				/* True if SSL connections are requested */
+
+    char *fallback;                     /* Fallback virtual host */
+
+} mod_vhost_ldap_config_t;
+
+typedef struct mod_vhost_ldap_request_t {
+    char *dn;				/* The saved dn from a successful search */
+    char *name;				/* ServerName */
+    char *admin;			/* ServerAdmin */
+    char *docroot;			/* DocumentRoot */
+    char *cgiroot;			/* ScriptAlias */
+    char *uid;				/* Suexec Uid */
+    char *gid;				/* Suexec Gid */
+} mod_vhost_ldap_request_t;
+
+char *attributes[] =
+  { "apacheServerName", "apacheDocumentRoot", "apacheScriptAlias", "apacheSuexecUid", "apacheSuexecGid", "apacheServerAdmin", 0 };
+
+#if (APR_MAJOR_VERSION >= 1)
+static APR_OPTIONAL_FN_TYPE(uldap_connection_close) *util_ldap_connection_close;
+static APR_OPTIONAL_FN_TYPE(uldap_connection_find) *util_ldap_connection_find;
+static APR_OPTIONAL_FN_TYPE(uldap_cache_comparedn) *util_ldap_cache_comparedn;
+static APR_OPTIONAL_FN_TYPE(uldap_cache_compare) *util_ldap_cache_compare;
+static APR_OPTIONAL_FN_TYPE(uldap_cache_checkuserid) *util_ldap_cache_checkuserid;
+static APR_OPTIONAL_FN_TYPE(uldap_cache_getuserdn) *util_ldap_cache_getuserdn;
+static APR_OPTIONAL_FN_TYPE(uldap_ssl_supported) *util_ldap_ssl_supported;
+
+static void ImportULDAPOptFn(void)
+{
+    util_ldap_connection_close  = APR_RETRIEVE_OPTIONAL_FN(uldap_connection_close);
+    util_ldap_connection_find   = APR_RETRIEVE_OPTIONAL_FN(uldap_connection_find);
+    util_ldap_cache_comparedn   = APR_RETRIEVE_OPTIONAL_FN(uldap_cache_comparedn);
+    util_ldap_cache_compare     = APR_RETRIEVE_OPTIONAL_FN(uldap_cache_compare);
+    util_ldap_cache_checkuserid = APR_RETRIEVE_OPTIONAL_FN(uldap_cache_checkuserid);
+    util_ldap_cache_getuserdn   = APR_RETRIEVE_OPTIONAL_FN(uldap_cache_getuserdn);
+    util_ldap_ssl_supported     = APR_RETRIEVE_OPTIONAL_FN(uldap_ssl_supported);
+}
+#endif 
+
+static int mod_vhost_ldap_post_config(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp, server_rec *s)
+{
+    /* make sure that mod_ldap (util_ldap) is loaded */
+    if (ap_find_linked_module("util_ldap.c") == NULL) {
+        ap_log_error(APLOG_MARK, APLOG_ERR|APLOG_NOERRNO, 0, s,
+                     "Module mod_ldap missing. Mod_ldap (aka. util_ldap) "
+                     "must be loaded in order for mod_vhost_ldap to function properly");
+        return HTTP_INTERNAL_SERVER_ERROR;
+
+    }
+
+    ap_add_version_component(p, MOD_VHOST_LDAP_VERSION);
+
+    return OK;
+}
+
+static void *
+mod_vhost_ldap_create_server_config (apr_pool_t *p, server_rec *s)
+{
+    mod_vhost_ldap_config_t *conf =
+	(mod_vhost_ldap_config_t *)apr_pcalloc(p, sizeof (mod_vhost_ldap_config_t));
+
+    conf->enabled = MVL_UNSET;
+    conf->have_ldap_url = 0;
+    conf->have_deref = 0;
+    conf->binddn = NULL;
+    conf->bindpw = NULL;
+    conf->deref = always;
+    conf->fallback = NULL;
+
+    return conf;
+}
+
+static void *
+mod_vhost_ldap_merge_server_config(apr_pool_t *p, void *parentv, void *childv)
+{
+    mod_vhost_ldap_config_t *parent = (mod_vhost_ldap_config_t *) parentv;
+    mod_vhost_ldap_config_t *child  = (mod_vhost_ldap_config_t *) childv;
+    mod_vhost_ldap_config_t *conf =
+	(mod_vhost_ldap_config_t *)apr_pcalloc(p, sizeof(mod_vhost_ldap_config_t));
+
+    if (child->enabled == MVL_UNSET) {
+	conf->enabled = parent->enabled;
+    } else {
+	conf->enabled = child->enabled;
+    }
+
+    if (child->have_ldap_url) {
+	conf->have_ldap_url = child->have_ldap_url;
+	conf->url = child->url;
+	conf->host = child->host;
+	conf->port = child->port;
+	conf->basedn = child->basedn;
+	conf->scope = child->scope;
+	conf->filter = child->filter;
+	conf->secure = child->secure;
+    } else {
+	conf->have_ldap_url = parent->have_ldap_url;
+	conf->url = parent->url;
+	conf->host = parent->host;
+	conf->port = parent->port;
+	conf->basedn = parent->basedn;
+	conf->scope = parent->scope;
+	conf->filter = parent->filter;
+	conf->secure = parent->secure;
+    }
+    if (child->have_deref) {
+	conf->have_deref = child->have_deref;
+	conf->deref = child->deref;
+    } else {
+	conf->have_deref = parent->have_deref;
+	conf->deref = parent->deref;
+    }
+
+    conf->binddn = (child->binddn ? child->binddn : parent->binddn);
+    conf->bindpw = (child->bindpw ? child->bindpw : parent->bindpw);
+
+    conf->fallback = (child->fallback ? child->fallback : parent->fallback);
+
+    return conf;
+}
+
+/* 
+ * Use the ldap url parsing routines to break up the ldap url into
+ * host and port.
+ */
+static const char *mod_vhost_ldap_parse_url(cmd_parms *cmd, 
+					    void *dummy,
+					    const char *url)
+{
+    int result;
+    apr_ldap_url_desc_t *urld;
+#if (APR_MAJOR_VERSION >= 1)
+    apr_ldap_err_t *result_err;
+#endif
+
+    mod_vhost_ldap_config_t *conf =
+	(mod_vhost_ldap_config_t *)ap_get_module_config(cmd->server->module_config,
+							&vhost_ldap_module);
+
+    ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0,
+	         cmd->server, "[mod_vhost_ldap.c] url parse: `%s'", 
+	         url);
+    
+#if (APR_MAJOR_VERSION >= 1)    /* for apache >= 2.2 */
+    result = apr_ldap_url_parse(cmd->pool, url, &(urld), &(result_err));
+    if (result != LDAP_SUCCESS) {
+        return result_err->reason;
+    }
+#else
+    result = apr_ldap_url_parse(url, &(urld));
+    if (result != LDAP_SUCCESS) {
+        switch (result) {
+            case LDAP_URL_ERR_NOTLDAP:
+                return "LDAP URL does not begin with ldap://";
+            case LDAP_URL_ERR_NODN:
+                return "LDAP URL does not have a DN";
+            case LDAP_URL_ERR_BADSCOPE:
+                return "LDAP URL has an invalid scope";
+            case LDAP_URL_ERR_MEM:
+                return "Out of memory parsing LDAP URL";
+            default:
+                return "Could not parse LDAP URL";
+        }
+    }
+#endif
+    conf->url = apr_pstrdup(cmd->pool, url);
+
+    ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0,
+	         cmd->server, "[mod_vhost_ldap.c] url parse: Host: %s", urld->lud_host);
+    ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0,
+	         cmd->server, "[mod_vhost_ldap.c] url parse: Port: %d", urld->lud_port);
+    ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0,
+	         cmd->server, "[mod_vhost_ldap.c] url parse: DN: %s", urld->lud_dn);
+    ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0,
+	         cmd->server, "[mod_vhost_ldap.c] url parse: attrib: %s", urld->lud_attrs? urld->lud_attrs[0] : "(null)");
+    ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0,
+	         cmd->server, "[mod_vhost_ldap.c] url parse: scope: %s", 
+	         (urld->lud_scope == LDAP_SCOPE_SUBTREE? "subtree" : 
+		 urld->lud_scope == LDAP_SCOPE_BASE? "base" : 
+		 urld->lud_scope == LDAP_SCOPE_ONELEVEL? "onelevel" : "unknown"));
+    ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0,
+	         cmd->server, "[mod_vhost_ldap.c] url parse: filter: %s", urld->lud_filter);
+
+    /* Set all the values, or at least some sane defaults */
+    if (conf->host) {
+        char *p = apr_palloc(cmd->pool, strlen(conf->host) + strlen(urld->lud_host) + 2);
+        strcpy(p, urld->lud_host);
+        strcat(p, " ");
+        strcat(p, conf->host);
+        conf->host = p;
+    }
+    else {
+        conf->host = urld->lud_host? apr_pstrdup(cmd->pool, urld->lud_host) : "localhost";
+    }
+    conf->basedn = urld->lud_dn? apr_pstrdup(cmd->pool, urld->lud_dn) : "";
+
+    conf->scope = urld->lud_scope == LDAP_SCOPE_ONELEVEL ?
+        LDAP_SCOPE_ONELEVEL : LDAP_SCOPE_SUBTREE;
+
+    if (urld->lud_filter) {
+        if (urld->lud_filter[0] == '(') {
+            /* 
+	     * Get rid of the surrounding parens; later on when generating the
+	     * filter, they'll be put back.
+             */
+            conf->filter = apr_pstrdup(cmd->pool, urld->lud_filter+1);
+            conf->filter[strlen(conf->filter)-1] = '\0';
+        }
+        else {
+            conf->filter = apr_pstrdup(cmd->pool, urld->lud_filter);
+        }
+    }
+    else {
+        conf->filter = "objectClass=apacheConfig";
+    }
+
+      /* "ldaps" indicates secure ldap connections desired
+      */
+    if (strncasecmp(url, "ldaps", 5) == 0)
+    {
+        conf->secure = 1;
+        conf->port = urld->lud_port? urld->lud_port : LDAPS_PORT;
+        ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, cmd->server,
+                     "LDAP: vhost_ldap using SSL connections");
+    }
+    else
+    {
+        conf->secure = 0;
+        conf->port = urld->lud_port? urld->lud_port : LDAP_PORT;
+        ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, cmd->server, 
+                     "LDAP: vhost_ldap not using SSL connections");
+    }
+
+    conf->have_ldap_url = 1;
+#if (APR_MAJOR_VERSION < 1) /* free only required for older apr */
+    apr_ldap_free_urldesc(urld);
+#endif
+    return NULL;
+}
+
+static const char *mod_vhost_ldap_set_enabled(cmd_parms *cmd, void *dummy, int enabled)
+{
+    mod_vhost_ldap_config_t *conf =
+	(mod_vhost_ldap_config_t *)ap_get_module_config(cmd->server->module_config,
+							&vhost_ldap_module);
+
+    conf->enabled = (enabled) ? MVL_ENABLED : MVL_DISABLED;
+
+    return NULL;
+}
+
+static const char *mod_vhost_ldap_set_binddn(cmd_parms *cmd, void *dummy, const char *binddn)
+{
+    mod_vhost_ldap_config_t *conf =
+	(mod_vhost_ldap_config_t *)ap_get_module_config(cmd->server->module_config,
+							&vhost_ldap_module);
+
+    conf->binddn = apr_pstrdup(cmd->pool, binddn);
+    return NULL;
+}
+
+static const char *mod_vhost_ldap_set_bindpw(cmd_parms *cmd, void *dummy, const char *bindpw)
+{
+    mod_vhost_ldap_config_t *conf =
+	(mod_vhost_ldap_config_t *)ap_get_module_config(cmd->server->module_config,
+							&vhost_ldap_module);
+
+    conf->bindpw = apr_pstrdup(cmd->pool, bindpw);
+    return NULL;
+}
+
+static const char *mod_vhost_ldap_set_deref(cmd_parms *cmd, void *dummy, const char *deref)
+{
+    mod_vhost_ldap_config_t *conf = 
+	(mod_vhost_ldap_config_t *)ap_get_module_config (cmd->server->module_config,
+							 &vhost_ldap_module);
+
+    if (strcmp(deref, "never") == 0 || strcasecmp(deref, "off") == 0) {
+        conf->deref = never;
+	conf->have_deref = 1;
+    }
+    else if (strcmp(deref, "searching") == 0) {
+        conf->deref = searching;
+	conf->have_deref = 1;
+    }
+    else if (strcmp(deref, "finding") == 0) {
+        conf->deref = finding;
+	conf->have_deref = 1;
+    }
+    else if (strcmp(deref, "always") == 0 || strcasecmp(deref, "on") == 0) {
+        conf->deref = always;
+	conf->have_deref = 1;
+    }
+    else {
+        return "Unrecognized value for VhostLDAPAliasDereference directive";
+    }
+    return NULL;
+}
+
+static const char *mod_vhost_ldap_set_fallback(cmd_parms *cmd, void *dummy, const char *fallback)
+{
+    mod_vhost_ldap_config_t *conf =
+	(mod_vhost_ldap_config_t *)ap_get_module_config(cmd->server->module_config,
+							&vhost_ldap_module);
+
+    conf->fallback = apr_pstrdup(cmd->pool, fallback);
+    return NULL;
+}
+
+command_rec mod_vhost_ldap_cmds[] = {
+    AP_INIT_TAKE1("VhostLDAPURL", mod_vhost_ldap_parse_url, NULL, RSRC_CONF,
+                  "URL to define LDAP connection. This should be an RFC 2255 compliant\n"
+                  "URL of the form ldap://host[:port]/basedn[?attrib[?scope[?filter]]].\n"
+                  "<ul>\n"
+                  "<li>Host is the name of the LDAP server. Use a space separated list of hosts \n"
+                  "to specify redundant servers.\n"
+                  "<li>Port is optional, and specifies the port to connect to.\n"
+                  "<li>basedn specifies the base DN to start searches from\n"
+                  "</ul>\n"),
+
+    AP_INIT_TAKE1 ("VhostLDAPBindDN", mod_vhost_ldap_set_binddn, NULL, RSRC_CONF,
+		   "DN to use to bind to LDAP server. If not provided, will do an anonymous bind."),
+    
+    AP_INIT_TAKE1("VhostLDAPBindPassword", mod_vhost_ldap_set_bindpw, NULL, RSRC_CONF,
+                  "Password to use to bind to LDAP server. If not provided, will do an anonymous bind."),
+
+    AP_INIT_FLAG("VhostLDAPEnabled", mod_vhost_ldap_set_enabled, NULL, RSRC_CONF,
+                 "Set to off to disable vhost_ldap, even if it's been enabled in a higher tree"),
+
+    AP_INIT_TAKE1("VhostLDAPDereferenceAliases", mod_vhost_ldap_set_deref, NULL, RSRC_CONF,
+                  "Determines how aliases are handled during a search. Can be one of the"
+                  "values \"never\", \"searching\", \"finding\", or \"always\". "
+                  "Defaults to always."),
+
+    AP_INIT_TAKE1("VhostLDAPFallback", mod_vhost_ldap_set_fallback, NULL, RSRC_CONF,
+		  "Set default virtual host which will be used when requested hostname"
+		  "is not found in LDAP database. This option can be used to display"
+		  "\"virtual host not found\" type of page."),
+
+    {NULL}
+};
+
+#define FILTER_LENGTH MAX_STRING_LEN
+static int mod_vhost_ldap_translate_name(request_rec *r)
+{
+    request_rec *top = (r->main)?r->main:r;
+    mod_vhost_ldap_request_t *reqc;
+    apr_table_t *e;
+    int failures = 0;
+    const char **vals = NULL;
+    char filtbuf[FILTER_LENGTH];
+    mod_vhost_ldap_config_t *conf =
+	(mod_vhost_ldap_config_t *)ap_get_module_config(r->server->module_config, &vhost_ldap_module);
+    core_server_config * core =
+	(core_server_config *) ap_get_module_config(r->server->module_config, &core_module);
+    util_ldap_connection_t *ldc = NULL;
+    int result = 0;
+    const char *dn = NULL;
+    char *cgi;
+    const char *hostname = NULL;
+    int is_fallback = 0;
+
+    reqc =
+	(mod_vhost_ldap_request_t *)apr_pcalloc(r->pool, sizeof(mod_vhost_ldap_request_t));
+    memset(reqc, 0, sizeof(mod_vhost_ldap_request_t)); 
+
+    ap_set_module_config(r->request_config, &vhost_ldap_module, reqc);
+
+    // mod_vhost_ldap is disabled or we don't have LDAP Url
+    if ((conf->enabled != MVL_ENABLED)||(!conf->have_ldap_url)) {
+	return DECLINED;
+    }
+
+start_over:
+
+    if (conf->host) {
+        ldc = util_ldap_connection_find(r, conf->host, conf->port,
+					conf->binddn, conf->bindpw, conf->deref,
+					conf->secure);
+    }
+    else {
+        ap_log_rerror(APLOG_MARK, APLOG_WARNING|APLOG_NOERRNO, 0, r, 
+                      "[mod_vhost_ldap.c] translate: no conf->host - weird...?");
+        return DECLINED;
+    }
+
+    hostname = r->hostname;
+    if (hostname == NULL || hostname[0] == '\0')
+	goto null;
+
+fallback:
+
+    ap_log_rerror(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r,
+		   "[mod_vhost_ldap.c]: translating %s", r->uri);
+
+    struct berval hostnamebv, shostnamebv;
+    ber_str2bv(hostname, 0, 0, &hostnamebv);
+    if (ldap_bv2escaped_filter_value(&hostnamebv, &shostnamebv) != 0)
+	goto null;
+    apr_snprintf(filtbuf, FILTER_LENGTH, "(&(%s)(|(apacheServerName=%s)(apacheServerAlias=%s)))", conf->filter, shostnamebv.bv_val, shostnamebv.bv_val);
+    ber_memfree(shostnamebv.bv_val);
+
+    result = util_ldap_cache_getuserdn(r, ldc, conf->url, conf->basedn, conf->scope,
+				       attributes, filtbuf, &dn, &vals);
+
+    util_ldap_connection_close(ldc);
+
+    /* sanity check - if server is down, retry it up to 5 times */
+    if (result == LDAP_SERVER_DOWN) {
+        if (failures++ <= 5) {
+            goto start_over;
+        }
+    }
+
+    if ((result == LDAP_NO_SUCH_OBJECT)) {
+	if (strcmp(hostname, "*") != 0) {
+	    if (strncmp(hostname, "*.", 2) == 0)
+		hostname += 2;
+	    hostname += strcspn(hostname, ".");
+	    hostname = apr_pstrcat(r->pool, "*", hostname, NULL);
+	    ap_log_rerror(APLOG_MARK, APLOG_NOTICE|APLOG_NOERRNO, 0, r,
+		          "[mod_vhost_ldap.c] translate: "
+			  "virtual host not found, trying wildcard %s",
+			  hostname);
+	    goto fallback;
+	}
+
+    null:
+	if (conf->fallback && (is_fallback++ <= 0)) {
+	    ap_log_rerror(APLOG_MARK, APLOG_NOTICE|APLOG_NOERRNO, 0, r,
+			  "[mod_vhost_ldap.c] translate: "
+			  "virtual host %s not found, trying fallback %s",
+			  hostname, conf->fallback);
+	    hostname = conf->fallback;
+	    goto fallback;
+	}
+
+	ap_log_rerror(APLOG_MARK, APLOG_WARNING|APLOG_NOERRNO, 0, r,
+		      "[mod_vhost_ldap.c] translate: "
+		      "virtual host %s not found",
+		      hostname);
+
+	return DECLINED;
+    }
+
+    /* handle bind failure */
+    if (result != LDAP_SUCCESS) {
+        ap_log_rerror(APLOG_MARK, APLOG_WARNING|APLOG_NOERRNO, 0, r, 
+                      "[mod_vhost_ldap.c] translate: "
+                      "translate failed; virtual host %s; URI %s [%s]",
+		      hostname, r->uri, ldap_err2string(result));
+	return DECLINED;
+    }
+
+    /* mark the user and DN */
+    reqc->dn = apr_pstrdup(r->pool, dn);
+
+    /* Optimize */
+    if (vals) {
+	int i = 0;
+	while (attributes[i]) {
+
+	    if (strcasecmp (attributes[i], "apacheServerName") == 0) {
+		reqc->name = apr_pstrdup (r->pool, vals[i]);
+	    }
+	    else if (strcasecmp (attributes[i], "apacheServerAdmin") == 0) {
+		reqc->admin = apr_pstrdup (r->pool, vals[i]);
+	    }
+	    else if (strcasecmp (attributes[i], "apacheDocumentRoot") == 0) {
+		reqc->docroot = apr_pstrdup (r->pool, vals[i]);
+	    }
+	    else if (strcasecmp (attributes[i], "apacheScriptAlias") == 0) {
+		reqc->cgiroot = apr_pstrdup (r->pool, vals[i]);
+	    }
+	    else if (strcasecmp (attributes[i], "apacheSuexecUid") == 0) {
+		reqc->uid = apr_pstrdup(r->pool, vals[i]);
+	    }
+	    else if (strcasecmp (attributes[i], "apacheSuexecGid") == 0) {
+		reqc->gid = apr_pstrdup(r->pool, vals[i]);
+	    }
+	    i++;
+	}
+    }
+
+    ap_log_rerror(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r,
+		  "[mod_vhost_ldap.c]: loaded from ldap: "
+		  "apacheServerName: %s, "
+		  "apacheServerAdmin: %s, "
+		  "apacheDocumentRoot: %s, "
+		  "apacheScriptAlias: %s, "
+		  "apacheSuexecUid: %s, "
+		  "apacheSuexecGid: %s",
+		  reqc->name, reqc->admin, reqc->docroot, reqc->cgiroot, reqc->uid, reqc->gid);
+
+    if ((reqc->name == NULL)||(reqc->docroot == NULL)) {
+        ap_log_rerror(APLOG_MARK, APLOG_ERR|APLOG_NOERRNO, 0, r, 
+                      "[mod_vhost_ldap.c] translate: "
+                      "translate failed; ServerName or DocumentRoot not defined");
+	return DECLINED;
+    }
+
+    cgi = NULL;
+  
+#if 0
+    if (reqc->cgiroot) {
+	cgi = strstr(r->uri, "cgi-bin/");
+	if (cgi && (cgi != r->uri + strspn(r->uri, "/"))) {
+	    cgi = NULL;
+	}
+    }
+    if (cgi) {
+	r->filename = apr_pstrcat (r->pool, reqc->cgiroot, cgi + strlen("cgi-bin"), NULL);
+	r->handler = "cgi-script";
+	apr_table_setn(r->notes, "alias-forced-type", r->handler);
+#endif
+    /* This is a quick, dirty hack. I should be shot for taking 6.170
+     * this term and being willing to write a quick, dirty hack. */
+    
+    if (strncmp(r->uri, "/~", 2) == 0) {
+	char *username;
+	uid_t uid = (uid_t)atoll(reqc->uid);
+	if (apr_uid_name_get(&username, uid, r->pool) != APR_SUCCESS) {
+	    ap_log_rerror(APLOG_MARK, APLOG_ERR|APLOG_NOERRNO, 0, r, 
+		          "could not get username for uid %d", uid);
+	    return DECLINED;
+	}
+	if (strncmp(r->uri + 2, username, strlen(username)) == 0 &&
+	    (r->uri[2 + strlen(username)] == '/' ||
+	     r->uri[2 + strlen(username)] == '\0')) {
+	    char *homedir;
+	    if (apr_uid_homepath_get(&homedir, username, r->pool) != APR_SUCCESS) {
+		ap_log_rerror(APLOG_MARK, APLOG_ERR|APLOG_NOERRNO, 0, r, 
+			      "could not get home directory for user %s", username);
+		return DECLINED;
+	    }
+	    r->filename = apr_pstrcat(r->pool, homedir, "/", USERDIR, r->uri + 2 + strlen(username), NULL);
+	}
+    } else if (r->uri[0] == '/') {
+	r->filename = apr_pstrcat (r->pool, reqc->docroot, r->uri, NULL);
+    } else {
+	return DECLINED;
+    }
+
+    top->server->server_hostname = apr_pstrdup (top->pool, reqc->name);
+
+    if (reqc->admin) {
+	top->server->server_admin = apr_pstrdup (top->pool, reqc->admin);
+    }
+
+    // set environment variables
+    e = top->subprocess_env;
+    apr_table_addn (e, "SERVER_ROOT", reqc->docroot);
+
+    core->ap_document_root = apr_pstrdup(top->pool, reqc->docroot);
+
+    ap_log_rerror(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r,
+		  "[mod_vhost_ldap.c]: translated to %s", r->filename);
+
+    return OK;
+}
+
+#ifdef HAVE_UNIX_SUEXEC
+static ap_unix_identity_t *mod_vhost_ldap_get_suexec_id_doer(const request_rec * r)
+{
+  ap_unix_identity_t *ugid = NULL;
+  mod_vhost_ldap_config_t *conf = 
+      (mod_vhost_ldap_config_t *)ap_get_module_config(r->server->module_config,
+						      &vhost_ldap_module);
+  mod_vhost_ldap_request_t *req =
+      (mod_vhost_ldap_request_t *)ap_get_module_config(r->request_config,
+						       &vhost_ldap_module);
+
+  uid_t uid = -1;
+  gid_t gid = -1;
+
+  // mod_vhost_ldap is disabled or we don't have LDAP Url
+  if ((conf->enabled != MVL_ENABLED)||(!conf->have_ldap_url)) {
+      return NULL;
+  }
+
+  if ((req == NULL)||(req->uid == NULL)||(req->gid == NULL)) {
+      return NULL;
+  }
+
+  if ((ugid = apr_palloc(r->pool, sizeof(ap_unix_identity_t))) == NULL) {
+      return NULL;
+  }
+
+  uid = (uid_t)atoll(req->uid);
+  gid = (gid_t)atoll(req->gid);
+
+  if ((uid < MIN_UID)||(gid < MIN_GID)) {
+      return NULL;
+  }
+
+  ugid->uid = uid;
+  ugid->gid = gid;
+  ugid->userdir = 0;
+  
+  return ugid;
+}
+#endif
+
+static void
+mod_vhost_ldap_register_hooks (apr_pool_t * p)
+{
+    ap_hook_post_config(mod_vhost_ldap_post_config, NULL, NULL, APR_HOOK_MIDDLE);
+    ap_hook_translate_name(mod_vhost_ldap_translate_name, NULL, NULL, APR_HOOK_MIDDLE);
+#ifdef HAVE_UNIX_SUEXEC
+    ap_hook_get_suexec_identity(mod_vhost_ldap_get_suexec_id_doer, NULL, NULL, APR_HOOK_MIDDLE);
+#endif
+#if (APR_MAJOR_VERSION >= 1)
+    ap_hook_optional_fn_retrieve(ImportULDAPOptFn,NULL,NULL,APR_HOOK_MIDDLE);
+#endif
+}
+
+module AP_MODULE_DECLARE_DATA vhost_ldap_module = {
+  STANDARD20_MODULE_STUFF,
+  NULL,
+  NULL,
+  mod_vhost_ldap_create_server_config,
+  mod_vhost_ldap_merge_server_config,
+  mod_vhost_ldap_cmds,
+  mod_vhost_ldap_register_hooks,
+};
Index: /tags/fc9-eol/server/common/oursrc/httpdmods/mrproper
===================================================================
--- /tags/fc9-eol/server/common/oursrc/httpdmods/mrproper	(revision 1257)
+++ /tags/fc9-eol/server/common/oursrc/httpdmods/mrproper	(revision 1257)
@@ -0,0 +1,4 @@
+#!/bin/sh
+
+rm -f configure config.* Makefile
+rm -rf auto*.cache
Index: /tags/fc9-eol/server/common/oursrc/logview/Makefile.in
===================================================================
--- /tags/fc9-eol/server/common/oursrc/logview/Makefile.in	(revision 1257)
+++ /tags/fc9-eol/server/common/oursrc/logview/Makefile.in	(revision 1257)
@@ -0,0 +1,18 @@
+CC = @CC@
+CFLAGS = @CFLAGS@
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+bindir = @bindir@
+
+all-local: logview
+
+install:
+	install -p -m755 -D logview $(DESTDIR)$(bindir)/logview
+	install -p -m755 -D logview.pl $(DESTDIR)$(bindir)/logview.pl
+
+clean:
+	rm -f logview
+
+distclean: clean
+	rm -f configure config.* Makefile
+	rm -rf auto*.cache
Index: /tags/fc9-eol/server/common/oursrc/logview/configure.in
===================================================================
--- /tags/fc9-eol/server/common/oursrc/logview/configure.in	(revision 1257)
+++ /tags/fc9-eol/server/common/oursrc/logview/configure.in	(revision 1257)
@@ -0,0 +1,5 @@
+AC_INIT()
+
+AC_PROG_CC
+
+AC_OUTPUT(Makefile)
Index: /tags/fc9-eol/server/common/oursrc/logview/logview.c
===================================================================
--- /tags/fc9-eol/server/common/oursrc/logview/logview.c	(revision 1257)
+++ /tags/fc9-eol/server/common/oursrc/logview/logview.c	(revision 1257)
@@ -0,0 +1,8 @@
+#include <unistd.h>
+
+#define REALPATH "/usr/local/bin/logview.pl"
+
+int main (int argc, char** argv)
+{
+  execv(REALPATH, argv);
+}
Index: /tags/fc9-eol/server/common/oursrc/logview/logview.pl
===================================================================
--- /tags/fc9-eol/server/common/oursrc/logview/logview.pl	(revision 1257)
+++ /tags/fc9-eol/server/common/oursrc/logview/logview.pl	(revision 1257)
@@ -0,0 +1,18 @@
+#!/usr/bin/perl -T -w
+
+%ENV = ();
+$ENV{'PATH'} = '/bin:/usr/bin';
+my $elogsrc = '/home/logview/error_log';
+# get by uid the caller's name to find the corresponding locker name
+my $caller = (getpwuid $<)[0];
+$\ = "\n";
+
+print "--- Error logs for $caller ---";
+open FOO, $elogsrc;
+while (<FOO>) {
+    # Prevent deviousness, like web_scripts directories within web_scripts
+    if (m|/afs/athena.mit.edu/| &&
+        m|/([^/]+)/web_scripts/| && $caller eq $1) {
+        print;
+    }
+}
Index: /tags/fc9-eol/server/common/oursrc/logview/mrproper
===================================================================
--- /tags/fc9-eol/server/common/oursrc/logview/mrproper	(revision 1257)
+++ /tags/fc9-eol/server/common/oursrc/logview/mrproper	(revision 1257)
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+rm -f logview
+rm -f configure config.* Makefile
+rm -rf auto*.cache
Index: /tags/fc9-eol/server/common/oursrc/nss_nonlocal/Makefile.am
===================================================================
--- /tags/fc9-eol/server/common/oursrc/nss_nonlocal/Makefile.am	(revision 1257)
+++ /tags/fc9-eol/server/common/oursrc/nss_nonlocal/Makefile.am	(revision 1257)
@@ -0,0 +1,16 @@
+lib_LTLIBRARIES = libnss_nonlocal.la
+libnss_nonlocal_la_SOURCES = \
+    nonlocal-passwd.c nonlocal-group.c nonlocal-shadow.c \
+    nonlocal.h nsswitch-internal.h
+libnss_nonlocal_la_LDFLAGS = \
+    -version-info 2:0:0 \
+    -export-symbols-regex '^_nss_nonlocal_'
+
+noinst_PROGRAMS = .linktest
+_linktest_SOURCES =
+_linktest_LDADD = libnss_nonlocal.la
+_linktest_LDFLAGS = -nostdlib -entry=0
+
+install-exec-hook:
+	rm -f $(DESTDIR)$(libdir)/libnss_nonlocal.so
+	rm -f $(DESTDIR)$(libdir)/libnss_nonlocal.la
Index: /tags/fc9-eol/server/common/oursrc/nss_nonlocal/README
===================================================================
--- /tags/fc9-eol/server/common/oursrc/nss_nonlocal/README	(revision 1257)
+++ /tags/fc9-eol/server/common/oursrc/nss_nonlocal/README	(revision 1257)
@@ -0,0 +1,10 @@
+This is nss_nonlocal, an nsswitch module that acts as a proxy for other 
+nsswitch modules like hesiod, but prevents non-local users from 
+potentially gaining local privileges by spoofing local UIDs and GIDs.
+
+To use it, configure /etc/nsswitch.conf as follows:
+
+passwd:         compat nonlocal
+passwd_nonlocal: hesiod
+group:          compat nonlocal
+group_nonlocal: hesiod
Index: /tags/fc9-eol/server/common/oursrc/nss_nonlocal/configure.ac
===================================================================
--- /tags/fc9-eol/server/common/oursrc/nss_nonlocal/configure.ac	(revision 1257)
+++ /tags/fc9-eol/server/common/oursrc/nss_nonlocal/configure.ac	(revision 1257)
@@ -0,0 +1,20 @@
+AC_INIT([nss_nonlocal], [1.9], [andersk@mit.edu])
+AC_CANONICAL_TARGET
+AM_INIT_AUTOMAKE([-Wall -Werror foreign])
+
+AC_PREFIX_DEFAULT([/])
+AC_DISABLE_STATIC
+AC_PROG_CC
+AC_PROG_INSTALL
+AC_PROG_LIBTOOL
+
+case "$target_cpu" in
+    i386 | i486 | i586 | i686 | i786)
+	AC_DEFINE([USE_REGPARMS], [],
+	          [Define if the regparm attribute shall be used for local functions (gcc on ix86 only).])
+ 	;;
+esac
+
+AC_CONFIG_HEADERS([config.h])
+AC_CONFIG_FILES([Makefile])
+AC_OUTPUT
Index: /tags/fc9-eol/server/common/oursrc/nss_nonlocal/nonlocal-group.c
===================================================================
--- /tags/fc9-eol/server/common/oursrc/nss_nonlocal/nonlocal-group.c	(revision 1257)
+++ /tags/fc9-eol/server/common/oursrc/nss_nonlocal/nonlocal-group.c	(revision 1257)
@@ -0,0 +1,512 @@
+/*
+ * nonlocal-group.c
+ * group database for nss_nonlocal proxy
+ *
+ * Copyright © 2007 Anders Kaseorg <andersk@mit.edu> and Tim Abbott
+ * <tabbott@mit.edu>
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use, copy,
+ * modify, merge, publish, distribute, sublicense, and/or sell copies
+ * of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+#define _GNU_SOURCE
+#include <sys/types.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <string.h>
+#include <dlfcn.h>
+#include <stdio.h>
+#include <syslog.h>
+#include <errno.h>
+#include <grp.h>
+#include <nss.h>
+#include "nsswitch-internal.h"
+#include "nonlocal.h"
+
+#define MAGIC_NONLOCAL_GROUPNAME "nss-nonlocal-users"
+#define MAGIC_LOCAL_GROUPNAME "nss-local-users"
+
+
+enum nss_status
+_nss_nonlocal_getgrnam_r(const char *name, struct group *grp,
+			 char *buffer, size_t buflen, int *errnop);
+
+enum nss_status
+_nss_nonlocal_getgrgid_r(gid_t gid, struct group *grp,
+			 char *buffer, size_t buflen, int *errnop);
+
+
+static service_user *
+nss_group_nonlocal_database(void)
+{
+    static service_user *nip = NULL;
+    if (nip == NULL)
+	__nss_database_lookup("group_nonlocal", NULL, "", &nip);
+
+    return nip;
+}
+
+
+enum nss_status
+check_nonlocal_gid(const char *user, gid_t gid, int *errnop)
+{
+    static const char *fct_name = "getgrgid_r";
+    static service_user *startp = NULL;
+    static void *fct_start = NULL;
+    enum nss_status status;
+    service_user *nip;
+    union {
+	enum nss_status (*l)(gid_t gid, struct group *grp,
+			     char *buffer, size_t buflen, int *errnop);
+	void *ptr;
+    } fct;
+    struct group gbuf;
+    int old_errno = errno;
+
+    int buflen = sysconf(_SC_GETGR_R_SIZE_MAX);
+    char *buf = malloc(buflen);
+    if (buf == NULL) {
+	*errnop = ENOMEM;
+	errno = old_errno;
+	return NSS_STATUS_TRYAGAIN;
+    }
+
+    if (fct_start == NULL &&
+	__nss_group_lookup(&startp, fct_name, &fct_start) != 0) {
+	free(buf);
+	return NSS_STATUS_UNAVAIL;
+    }
+    nip = startp;
+    fct.ptr = fct_start;
+    do {
+    morebuf:
+	if (fct.l == _nss_nonlocal_getgrgid_r)
+	    status = NSS_STATUS_NOTFOUND;
+	else
+	    status = DL_CALL_FCT(fct.l, (gid, &gbuf, buf, buflen, errnop));
+	if (status == NSS_STATUS_TRYAGAIN && *errnop == ERANGE) {
+	    free(buf);
+	    buflen *= 2;
+	    buf = malloc(buflen);
+	    if (buf == NULL) {
+		*errnop = ENOMEM;
+		errno = old_errno;
+		return NSS_STATUS_TRYAGAIN;
+	    }
+	    goto morebuf;
+	}
+    } while (__nss_next(&nip, fct_name, &fct.ptr, status, 0) == 0);
+
+    if (status == NSS_STATUS_SUCCESS) {
+	syslog(LOG_WARNING, "nss_nonlocal: removing local group %u (%s) from non-local user %s\n", gbuf.gr_gid, gbuf.gr_name, user);
+	status = NSS_STATUS_NOTFOUND;
+    } else if (status != NSS_STATUS_TRYAGAIN) {
+	status = NSS_STATUS_SUCCESS;
+    }
+
+    free(buf);
+    return status;
+}
+
+enum nss_status
+get_local_group(const char *name, struct group *grp, char **buffer, int *errnop)
+{
+    static const char *fct_name = "getgrnam_r";
+    static service_user *startp = NULL;
+    static void *fct_start = NULL;
+    enum nss_status status;
+    service_user *nip;
+    union {
+	enum nss_status (*l)(const char *name, struct group *grp,
+			     char *buffer, size_t buflen, int *errnop);
+	void *ptr;
+    } fct;
+    size_t buflen;
+    int old_errno = errno;
+
+    buflen = sysconf(_SC_GETGR_R_SIZE_MAX);
+    *buffer = malloc(buflen);
+    if (*buffer == NULL) {
+	*errnop = ENOMEM;
+	errno = old_errno;
+	return NSS_STATUS_TRYAGAIN;
+    }
+
+    if (fct_start == NULL &&
+	__nss_group_lookup(&startp, fct_name, &fct_start) != 0) {
+	free(*buffer);
+	*buffer = NULL;
+	return NSS_STATUS_UNAVAIL;
+    }
+    nip = startp;
+    fct.ptr = fct_start;
+    do {
+    morebuf:
+	if (fct.l == _nss_nonlocal_getgrnam_r)
+	    status = NSS_STATUS_NOTFOUND;
+	else
+	    status = DL_CALL_FCT(fct.l, (name, grp, *buffer, buflen, errnop));
+	if (status == NSS_STATUS_TRYAGAIN && *errnop == ERANGE) {
+	    free(*buffer);
+	    buflen *= 2;
+	    *buffer = malloc(buflen);
+	    if (*buffer == NULL) {
+		*errnop = ENOMEM;
+		errno = old_errno;
+		return NSS_STATUS_TRYAGAIN;
+	    }
+	    goto morebuf;
+	}
+    } while (__nss_next(&nip, fct_name, &fct.ptr, status, 0) == 0);
+
+    if (status != NSS_STATUS_SUCCESS) {
+	free(*buffer);
+	*buffer = NULL;
+    }
+
+    return status;
+}
+
+static service_user *grent_nip = NULL;
+static void *grent_fct_start;
+static union {
+    enum nss_status (*l)(struct group *grp, char *buffer, size_t buflen,
+			 int *errnop);
+    void *ptr;
+} grent_fct;
+static const char *grent_fct_name = "getgrent_r";
+
+enum nss_status
+_nss_nonlocal_setgrent(int stayopen)
+{
+    static const char *fct_name = "setgrent";
+    static void *fct_start = NULL;
+    enum nss_status status;
+    service_user *nip;
+    union {
+	enum nss_status (*l)(int stayopen);
+	void *ptr;
+    } fct;
+
+    nip = nss_group_nonlocal_database();
+    if (nip == NULL)
+	return NSS_STATUS_UNAVAIL;
+    if (fct_start == NULL)
+	fct_start = __nss_lookup_function(nip, fct_name);
+    fct.ptr = fct_start;
+    do {
+	if (fct.ptr == NULL)
+	    status = NSS_STATUS_UNAVAIL;
+	else
+	    status = DL_CALL_FCT(fct.l, (stayopen));
+    } while (__nss_next(&nip, fct_name, &fct.ptr, status, 0) == 0);
+    if (status != NSS_STATUS_SUCCESS)
+	return status;
+
+    grent_nip = nip;
+    if (grent_fct_start == NULL)
+	grent_fct_start = __nss_lookup_function(nip, grent_fct_name);
+    grent_fct.ptr = grent_fct_start;
+    return NSS_STATUS_SUCCESS;
+}
+
+enum nss_status
+_nss_nonlocal_endgrent(void)
+{
+    static const char *fct_name = "endgrent";
+    static void *fct_start = NULL;
+    enum nss_status status;
+    service_user *nip;
+    union {
+	enum nss_status (*l)(void);
+	void *ptr;
+    } fct;
+
+    grent_nip = NULL;
+
+    nip = nss_group_nonlocal_database();
+    if (nip == NULL)
+	return NSS_STATUS_UNAVAIL;
+    if (fct_start == NULL)
+	fct_start = __nss_lookup_function(nip, fct_name);
+    fct.ptr = fct_start;
+    do {
+	if (fct.ptr == NULL)
+	    status = NSS_STATUS_UNAVAIL;
+	else
+	    status = DL_CALL_FCT(fct.l, ());
+    } while (__nss_next(&nip, fct_name, &fct.ptr, status, 0) == 0);
+    return status;
+}
+
+enum nss_status
+_nss_nonlocal_getgrent_r(struct group *grp, char *buffer, size_t buflen,
+			 int *errnop)
+{
+    enum nss_status status;
+
+    char *nonlocal_ignore = getenv(NONLOCAL_IGNORE_ENV);
+    if (nonlocal_ignore != NULL && nonlocal_ignore[0] != '\0')
+	return NSS_STATUS_UNAVAIL;
+
+    if (grent_nip == NULL) {
+	status = _nss_nonlocal_setgrent(0);
+	if (status != NSS_STATUS_SUCCESS)
+	    return status;
+    }
+    do {
+	if (grent_fct.ptr == NULL)
+	    status = NSS_STATUS_UNAVAIL;
+	else {
+	    int nonlocal_errno;
+	    do
+		status = DL_CALL_FCT(grent_fct.l, (grp, buffer, buflen, errnop));
+	    while (status == NSS_STATUS_SUCCESS &&
+		   check_nonlocal_gid("(unknown)", grp->gr_gid, &nonlocal_errno) != NSS_STATUS_SUCCESS);
+	}
+	if (status == NSS_STATUS_TRYAGAIN && *errnop == ERANGE)
+	    return status;
+
+	if (status == NSS_STATUS_SUCCESS)
+	    return NSS_STATUS_SUCCESS;
+    } while (__nss_next(&grent_nip, grent_fct_name, &grent_fct.ptr, status, 0) == 0);
+
+    grent_nip = NULL;
+    return NSS_STATUS_NOTFOUND;
+}
+
+
+enum nss_status
+_nss_nonlocal_getgrnam_r(const char *name, struct group *grp,
+			 char *buffer, size_t buflen, int *errnop)
+{
+    static const char *fct_name = "getgrnam_r";
+    static void *fct_start = NULL;
+    enum nss_status status;
+    service_user *nip;
+    union {
+	enum nss_status (*l)(const char *name, struct group *grp,
+			     char *buffer, size_t buflen, int *errnop);
+	void *ptr;
+    } fct;
+
+    char *nonlocal_ignore = getenv(NONLOCAL_IGNORE_ENV);
+    if (nonlocal_ignore != NULL && nonlocal_ignore[0] != '\0')
+	return NSS_STATUS_UNAVAIL;
+
+    nip = nss_group_nonlocal_database();
+    if (nip == NULL)
+	return NSS_STATUS_UNAVAIL;
+    if (fct_start == NULL)
+	fct_start = __nss_lookup_function(nip, fct_name);
+    fct.ptr = fct_start;
+    do {
+	if (fct.ptr == NULL)
+	    status = NSS_STATUS_UNAVAIL;
+	else
+	    status = DL_CALL_FCT(fct.l, (name, grp, buffer, buflen, errnop));
+	if (status == NSS_STATUS_TRYAGAIN && *errnop == ERANGE)
+	    break;
+    } while (__nss_next(&nip, fct_name, &fct.ptr, status, 0) == 0);
+    if (status != NSS_STATUS_SUCCESS)
+	return status;
+
+    return check_nonlocal_gid(name, grp->gr_gid, errnop);
+}
+
+enum nss_status
+_nss_nonlocal_getgrgid_r(gid_t gid, struct group *grp,
+			 char *buffer, size_t buflen, int *errnop)
+{
+    static const char *fct_name = "getgrgid_r";
+    static void *fct_start = NULL;
+    enum nss_status status;
+    service_user *nip;
+    union {
+	enum nss_status (*l)(gid_t gid, struct group *grp,
+			     char *buffer, size_t buflen, int *errnop);
+	void *ptr;
+    } fct;
+
+    char *nonlocal_ignore = getenv(NONLOCAL_IGNORE_ENV);
+    if (nonlocal_ignore != NULL && nonlocal_ignore[0] != '\0')
+	return NSS_STATUS_UNAVAIL;
+
+    nip = nss_group_nonlocal_database();
+    if (nip == NULL)
+	return NSS_STATUS_UNAVAIL;
+    if (fct_start == NULL)
+	fct_start = __nss_lookup_function(nip, fct_name);
+    fct.ptr = fct_start;
+    do {
+	if (fct.ptr == NULL)
+	    status = NSS_STATUS_UNAVAIL;
+	else
+	    status = DL_CALL_FCT(fct.l, (gid, grp, buffer, buflen, errnop));
+	if (status == NSS_STATUS_TRYAGAIN && *errnop == ERANGE)
+	    break;
+    } while (__nss_next(&nip, fct_name, &fct.ptr, status, 0) == 0);
+    if (status != NSS_STATUS_SUCCESS)
+	return status;
+
+    return check_nonlocal_gid(grp->gr_name, grp->gr_gid, errnop);
+}
+
+enum nss_status
+_nss_nonlocal_initgroups_dyn(const char *user, gid_t group, long int *start,
+			     long int *size, gid_t **groupsp, long int limit,
+			     int *errnop)
+{
+    static const char *fct_name = "initgroups_dyn";
+    static void *fct_start = NULL;
+    enum nss_status status;
+    service_user *nip;
+    union {
+	enum nss_status (*l)(const char *user, gid_t group, long int *start,
+			     long int *size, gid_t **groupsp, long int limit,
+			     int *errnop);
+	void *ptr;
+    } fct;
+
+    struct group local_users_group, nonlocal_users_group;
+    gid_t local_users_gid, gid;
+    int is_local = 0;
+    char *buffer;
+
+    /* Check that the user is a nonlocal user before adding any groups. */
+    status = check_nonlocal_user(user, errnop);
+    if (status == NSS_STATUS_TRYAGAIN)
+	return status;
+    else if (status != NSS_STATUS_SUCCESS)
+	is_local = 1;
+
+    int old_errno = errno;
+
+    status = get_local_group(MAGIC_LOCAL_GROUPNAME,
+			     &local_users_group, &buffer, errnop);
+    if (status == NSS_STATUS_SUCCESS) {
+	local_users_gid = local_users_group.gr_gid;
+	free(buffer);
+    } else if (status == NSS_STATUS_TRYAGAIN) {
+	return status;
+    } else {
+	syslog(LOG_WARNING, "nss_nonlocal: Group %s does not exist locally!",
+	       MAGIC_LOCAL_GROUPNAME);
+	local_users_gid = -1;
+    }
+
+    if (is_local) {
+	gid = local_users_gid;
+    } else {
+ 	status = get_local_group(MAGIC_NONLOCAL_GROUPNAME,
+				 &nonlocal_users_group, &buffer, errnop);
+	if (status == NSS_STATUS_SUCCESS) {
+	    gid = nonlocal_users_group.gr_gid;
+	    free(buffer);
+	} else if (status == NSS_STATUS_TRYAGAIN) {
+	    return status;
+	} else {
+	    syslog(LOG_WARNING, "nss_nonlocal: Group %s does not exist locally!",
+		   MAGIC_NONLOCAL_GROUPNAME);
+	    gid = -1;
+	}
+    }
+
+    if (gid != -1) {
+	int i;
+	for (i = 0; i < *start; ++i)
+	    if ((*groupsp)[i] == gid)
+		break;
+	if (i >= *start) {
+	    if (*start + 1 > *size) {
+		gid_t *newgroups;
+		long int newsize = 2 * *size;
+		if (limit > 0) {
+		    if (*size >= limit)
+			return NSS_STATUS_SUCCESS;
+		    if (newsize > limit)
+			newsize = limit;
+		}
+		newgroups = realloc(*groupsp, newsize * sizeof((*groupsp)[0]));
+		if (newgroups == NULL) {
+		    *errnop = ENOMEM;
+		    errno = old_errno;
+		    return NSS_STATUS_TRYAGAIN;
+		}
+		*groupsp = newgroups;
+		*size = newsize;
+	    }
+	    (*groupsp)[(*start)++] = gid;
+	}
+    }
+
+    if (is_local)
+	return NSS_STATUS_SUCCESS;
+
+    int in = *start, out = *start, i;
+
+    nip = nss_group_nonlocal_database();
+    if (nip == NULL)
+	return NSS_STATUS_UNAVAIL;
+    if (fct_start == NULL)
+	fct_start = __nss_lookup_function(nip, fct_name);
+    fct.ptr = fct_start;
+
+    do {
+	if (fct.ptr == NULL)
+	    status = NSS_STATUS_UNAVAIL;
+	else
+	    status = DL_CALL_FCT(fct.l, (user, group, start, size, groupsp, limit, errnop));
+        if (status == NSS_STATUS_TRYAGAIN && *errnop == ERANGE)
+            break;
+    } while (__nss_next(&nip, fct_name, &fct.ptr, status, 0) == 0);
+    if (status != NSS_STATUS_SUCCESS)
+        return status;
+
+    for (; in < *start; ++in) {
+	int nonlocal_errno = *errnop;
+
+	for (i = 0; i < out; ++i)
+	    if ((*groupsp)[i] == (*groupsp)[in])
+		break;
+	if (i < out)
+	    continue;
+
+	/* Don't let users get into MAGIC_LOCAL_GROUPNAME from nonlocal reasons. */
+	if (local_users_gid == (*groupsp)[in]) {
+	    syslog(LOG_WARNING, "nss_nonlocal: Nonlocal user %s removed from special local users group %s",
+		   user, MAGIC_LOCAL_GROUPNAME);
+	    continue;
+	}
+
+	status = check_nonlocal_gid(user, (*groupsp)[in], &nonlocal_errno);
+	if (status == NSS_STATUS_SUCCESS) {
+	    (*groupsp)[out++] = (*groupsp)[in];
+	} else if (status == NSS_STATUS_TRYAGAIN) {
+	    *start = out;
+	    *errnop = nonlocal_errno;
+	    return status;
+	}
+    }
+
+    *start = out;
+    return NSS_STATUS_SUCCESS;
+}
Index: /tags/fc9-eol/server/common/oursrc/nss_nonlocal/nonlocal-passwd.c
===================================================================
--- /tags/fc9-eol/server/common/oursrc/nss_nonlocal/nonlocal-passwd.c	(revision 1257)
+++ /tags/fc9-eol/server/common/oursrc/nss_nonlocal/nonlocal-passwd.c	(revision 1257)
@@ -0,0 +1,386 @@
+/*
+ * nonlocal-passwd.c
+ * passwd database for nss_nonlocal proxy.
+ *
+ * Copyright © 2007 Anders Kaseorg <andersk@mit.edu> and Tim Abbott
+ * <tabbott@mit.edu>
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use, copy,
+ * modify, merge, publish, distribute, sublicense, and/or sell copies
+ * of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+
+#define _GNU_SOURCE
+#include <sys/types.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <string.h>
+#include <dlfcn.h>
+#include <stdio.h>
+#include <syslog.h>
+#include <errno.h>
+#include <pwd.h>
+#include <grp.h>
+#include <nss.h>
+#include "nsswitch-internal.h"
+#include "nonlocal.h"
+
+
+enum nss_status
+_nss_nonlocal_getpwuid_r(uid_t uid, struct passwd *pwd,
+			 char *buffer, size_t buflen, int *errnop);
+enum nss_status
+_nss_nonlocal_getpwnam_r(const char *name, struct passwd *pwd,
+			 char *buffer, size_t buflen, int *errnop);
+
+
+static service_user *
+nss_passwd_nonlocal_database(void)
+{
+    static service_user *nip = NULL;
+    if (nip == NULL)
+	__nss_database_lookup("passwd_nonlocal", NULL, "", &nip);
+
+    return nip;
+}
+
+
+enum nss_status
+check_nonlocal_uid(const char *user, uid_t uid, int *errnop)
+{
+    static const char *fct_name = "getpwuid_r";
+    static service_user *startp = NULL;
+    static void *fct_start = NULL;
+    enum nss_status status;
+    service_user *nip;
+    union {
+	enum nss_status (*l)(uid_t uid, struct passwd *pwd,
+			     char *buffer, size_t buflen, int *errnop);
+	void *ptr;
+    } fct;
+    struct passwd pwbuf;
+    int old_errno = errno;
+
+    int buflen = sysconf(_SC_GETPW_R_SIZE_MAX);
+    char *buf = malloc(buflen);
+    if (buf == NULL) {
+	*errnop = ENOMEM;
+	errno = old_errno;
+	return NSS_STATUS_TRYAGAIN;
+    }
+
+    if (fct_start == NULL &&
+	__nss_passwd_lookup(&startp, fct_name, &fct_start) != 0) {
+	free(buf);
+	return NSS_STATUS_UNAVAIL;
+    }
+    nip = startp;
+    fct.ptr = fct_start;
+    do {
+    morebuf:
+	if (fct.l == _nss_nonlocal_getpwuid_r)
+	    status = NSS_STATUS_NOTFOUND;
+	else
+	    status = DL_CALL_FCT(fct.l, (uid, &pwbuf, buf, buflen, errnop));
+	if (status == NSS_STATUS_TRYAGAIN && *errnop == ERANGE) {
+	    free(buf);
+	    buflen *= 2;
+	    buf = malloc(buflen);
+	    if (buf == NULL) {
+		*errnop = ENOMEM;
+		errno = old_errno;
+		return NSS_STATUS_TRYAGAIN;
+	    }
+	    goto morebuf;
+	}
+    } while (__nss_next(&nip, fct_name, &fct.ptr, status, 0) == 0);
+
+    if (status == NSS_STATUS_SUCCESS) {
+	syslog(LOG_ERR, "nss_nonlocal: possible spoofing attack: non-local user %s has same UID as local user %s!\n", user, pwbuf.pw_name);
+	status = NSS_STATUS_NOTFOUND;
+    } else if (status != NSS_STATUS_TRYAGAIN) {
+	status = NSS_STATUS_SUCCESS;
+    }
+
+    free(buf);
+    return status;
+}
+
+enum nss_status
+check_nonlocal_user(const char *user, int *errnop)
+{
+    static const char *fct_name = "getpwnam_r";
+    static service_user *startp = NULL;
+    static void *fct_start = NULL;
+    enum nss_status status;
+    service_user *nip;
+    union {
+	enum nss_status (*l)(const char *name, struct passwd *pwd,
+			     char *buffer, size_t buflen, int *errnop);
+	void *ptr;
+    } fct;
+    struct passwd pwbuf;
+    int old_errno = errno;
+
+    int buflen = sysconf(_SC_GETPW_R_SIZE_MAX);
+    char *buf = malloc(buflen);
+    if (buf == NULL) {
+	*errnop = ENOMEM;
+	errno = old_errno;
+	return NSS_STATUS_TRYAGAIN;
+    }
+
+    if (fct_start == NULL &&
+	__nss_passwd_lookup(&startp, fct_name, &fct_start) != 0) {
+	free(buf);
+	return NSS_STATUS_UNAVAIL;
+    }
+    nip = startp;
+    fct.ptr = fct_start;
+    do {
+    morebuf:
+	if (fct.l == _nss_nonlocal_getpwnam_r)
+	    status = NSS_STATUS_NOTFOUND;
+	else
+	    status = DL_CALL_FCT(fct.l, (user, &pwbuf, buf, buflen, errnop));
+	if (status == NSS_STATUS_TRYAGAIN && *errnop == ERANGE) {
+	    free(buf);
+	    buflen *= 2;
+	    buf = malloc(buflen);
+	    if (buf == NULL) {
+		*errnop = ENOMEM;
+		errno = old_errno;
+		return NSS_STATUS_TRYAGAIN;
+	    }
+	    goto morebuf;
+	}
+    } while (__nss_next(&nip, fct_name, &fct.ptr, status, 0) == 0);
+
+    if (status == NSS_STATUS_SUCCESS)
+	status = NSS_STATUS_NOTFOUND;
+    else if (status != NSS_STATUS_TRYAGAIN)
+	status = NSS_STATUS_SUCCESS;
+
+    free(buf);
+    return status;
+}
+
+
+static service_user *pwent_nip = NULL;
+static void *pwent_fct_start;
+static union {
+    enum nss_status (*l)(struct passwd *pwd, char *buffer, size_t buflen,
+			 int *errnop);
+    void *ptr;
+} pwent_fct;
+static const char *pwent_fct_name = "getpwent_r";
+
+enum nss_status
+_nss_nonlocal_setpwent(int stayopen)
+{
+    static const char *fct_name = "setpwent";
+    static void *fct_start = NULL;
+    enum nss_status status;
+    service_user *nip;
+    union {
+	enum nss_status (*l)(int stayopen);
+	void *ptr;
+    } fct;
+
+    nip = nss_passwd_nonlocal_database();
+    if (nip == NULL)
+	return NSS_STATUS_UNAVAIL;
+    if (fct_start == NULL)
+	fct_start = __nss_lookup_function(nip, fct_name);
+    fct.ptr = fct_start;
+    do {
+	if (fct.ptr == NULL)
+	    status = NSS_STATUS_UNAVAIL;
+	else
+	    status = DL_CALL_FCT(fct.l, (stayopen));
+    } while (__nss_next(&nip, fct_name, &fct.ptr, status, 0) == 0);
+    if (status != NSS_STATUS_SUCCESS)
+	return status;
+
+    pwent_nip = nip;
+    if (pwent_fct_start == NULL)
+	pwent_fct_start = __nss_lookup_function(nip, pwent_fct_name);
+    pwent_fct.ptr = pwent_fct_start;
+    return NSS_STATUS_SUCCESS;
+}
+
+enum nss_status
+_nss_nonlocal_endpwent(void)
+{
+    static const char *fct_name = "endpwent";
+    static void *fct_start = NULL;
+    enum nss_status status;
+    service_user *nip;
+    union {
+	enum nss_status (*l)(void);
+	void *ptr;
+    } fct;
+
+    pwent_nip = NULL;
+
+    nip = nss_passwd_nonlocal_database();
+    if (nip == NULL)
+	return NSS_STATUS_UNAVAIL;
+    if (fct_start == NULL)
+	fct_start = __nss_lookup_function(nip, fct_name);
+    fct.ptr = fct_start;
+    do {
+	if (fct.ptr == NULL)
+	    status = NSS_STATUS_UNAVAIL;
+	else
+	    status = DL_CALL_FCT(fct.l, ());
+    } while (__nss_next(&nip, fct_name, &fct.ptr, status, 0) == 0);
+    return status;
+}
+
+enum nss_status
+_nss_nonlocal_getpwent_r(struct passwd *pwd, char *buffer, size_t buflen,
+			 int *errnop)
+{
+    enum nss_status status;
+
+    char *nonlocal_ignore = getenv(NONLOCAL_IGNORE_ENV);
+    if (nonlocal_ignore != NULL && nonlocal_ignore[0] != '\0')
+	return NSS_STATUS_UNAVAIL;
+
+    if (pwent_nip == NULL) {
+	status = _nss_nonlocal_setpwent(0);
+	if (status != NSS_STATUS_SUCCESS)
+	    return status;
+    }
+    do {
+	if (pwent_fct.ptr == NULL)
+	    status = NSS_STATUS_UNAVAIL;
+	else {
+	    int nonlocal_errno;
+	    do
+		status = DL_CALL_FCT(pwent_fct.l, (pwd, buffer, buflen, errnop));
+	    while (status == NSS_STATUS_SUCCESS &&
+		   check_nonlocal_uid(pwd->pw_name, pwd->pw_uid, &nonlocal_errno) != NSS_STATUS_SUCCESS);
+	}
+	if (status == NSS_STATUS_TRYAGAIN && *errnop == ERANGE)
+	    return status;
+
+	if (status == NSS_STATUS_SUCCESS)
+	    return NSS_STATUS_SUCCESS;
+    } while (__nss_next(&pwent_nip, pwent_fct_name, &pwent_fct.ptr, status, 0) == 0);
+
+    pwent_nip = NULL;
+    return NSS_STATUS_NOTFOUND;
+}
+
+
+enum nss_status
+_nss_nonlocal_getpwnam_r(const char *name, struct passwd *pwd,
+			 char *buffer, size_t buflen, int *errnop)
+{
+    static const char *fct_name = "getpwnam_r";
+    static void *fct_start = NULL;
+    enum nss_status status;
+    service_user *nip;
+    union {
+	enum nss_status (*l)(const char *name, struct passwd *pwd,
+			     char *buffer, size_t buflen, int *errnop);
+	void *ptr;
+    } fct;
+    int group_errno;
+
+    char *nonlocal_ignore = getenv(NONLOCAL_IGNORE_ENV);
+    if (nonlocal_ignore != NULL && nonlocal_ignore[0] != '\0')
+	return NSS_STATUS_UNAVAIL;
+
+    nip = nss_passwd_nonlocal_database();
+    if (nip == NULL)
+	return NSS_STATUS_UNAVAIL;
+    if (fct_start == NULL)
+	fct_start = __nss_lookup_function(nip, fct_name);
+    fct.ptr = fct_start;
+    do {
+	if (fct.ptr == NULL)
+	    status = NSS_STATUS_UNAVAIL;
+	else
+	    status = DL_CALL_FCT(fct.l, (name, pwd, buffer, buflen, errnop));
+	if (status == NSS_STATUS_TRYAGAIN && *errnop == ERANGE)
+	    break;
+    } while (__nss_next(&nip, fct_name, &fct.ptr, status, 0) == 0);
+    if (status != NSS_STATUS_SUCCESS)
+	return status;
+
+    status = check_nonlocal_uid(name, pwd->pw_uid, errnop);
+    if (status != NSS_STATUS_SUCCESS)
+	return status;
+
+    if (check_nonlocal_gid(name, pwd->pw_gid, &group_errno) !=
+	NSS_STATUS_SUCCESS)
+	pwd->pw_gid = 65534 /* nogroup */;
+    return NSS_STATUS_SUCCESS;
+}
+
+enum nss_status
+_nss_nonlocal_getpwuid_r(uid_t uid, struct passwd *pwd,
+			 char *buffer, size_t buflen, int *errnop)
+{
+    static const char *fct_name = "getpwuid_r";
+    static void *fct_start = NULL;
+    enum nss_status status;
+    service_user *nip;
+    union {
+	enum nss_status (*l)(uid_t uid, struct passwd *pwd,
+			     char *buffer, size_t buflen, int *errnop);
+	void *ptr;
+    } fct;
+    int group_errno;
+
+    char *nonlocal_ignore = getenv(NONLOCAL_IGNORE_ENV);
+    if (nonlocal_ignore != NULL && nonlocal_ignore[0] != '\0')
+	return NSS_STATUS_UNAVAIL;
+
+    nip = nss_passwd_nonlocal_database();
+    if (nip == NULL)
+	return NSS_STATUS_UNAVAIL;
+    if (fct_start == NULL)
+	fct_start = __nss_lookup_function(nip, fct_name);
+    fct.ptr = fct_start;
+    do {
+	if (fct.ptr == NULL)
+	    status = NSS_STATUS_UNAVAIL;
+	else
+	    status = DL_CALL_FCT(fct.l, (uid, pwd, buffer, buflen, errnop));
+	if (status == NSS_STATUS_TRYAGAIN && *errnop == ERANGE)
+	    break;
+    } while (__nss_next(&nip, fct_name, &fct.ptr, status, 0) == 0);
+    if (status != NSS_STATUS_SUCCESS)
+	return status;
+
+    status = check_nonlocal_uid(pwd->pw_name, pwd->pw_uid, errnop);
+    if (status != NSS_STATUS_SUCCESS)
+	return status;
+
+    if (check_nonlocal_gid(pwd->pw_name, pwd->pw_gid, &group_errno) !=
+	NSS_STATUS_SUCCESS)
+	pwd->pw_gid = 65534 /* nogroup */;
+    return NSS_STATUS_SUCCESS;
+}
Index: /tags/fc9-eol/server/common/oursrc/nss_nonlocal/nonlocal-shadow.c
===================================================================
--- /tags/fc9-eol/server/common/oursrc/nss_nonlocal/nonlocal-shadow.c	(revision 1257)
+++ /tags/fc9-eol/server/common/oursrc/nss_nonlocal/nonlocal-shadow.c	(revision 1257)
@@ -0,0 +1,183 @@
+/*
+ * nonlocal-shadow.c
+ * shadow database for nss_nonlocal proxy.
+ *
+ * Copyright © 2007 Anders Kaseorg <andersk@mit.edu>
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use, copy,
+ * modify, merge, publish, distribute, sublicense, and/or sell copies
+ * of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+#define _GNU_SOURCE
+#include <sys/types.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <string.h>
+#include <dlfcn.h>
+#include <stdio.h>
+#include <errno.h>
+#include <shadow.h>
+#include <nss.h>
+
+#include "nsswitch-internal.h"
+#include "nonlocal.h"
+
+
+static service_user *
+nss_shadow_nonlocal_database(void)
+{
+    static service_user *nip = NULL;
+    if (nip == NULL)
+        __nss_database_lookup("shadow_nonlocal", NULL, "", &nip);
+
+    return nip;
+}
+
+
+static service_user *spent_nip = NULL;
+static void *spent_fct_start;
+static union {
+    enum nss_status (*l)(struct spwd *pwd, char *buffer, size_t buflen,
+			 int *errnop);
+    void *ptr;
+} spent_fct;
+static const char *spent_fct_name = "getspent_r";
+
+enum nss_status
+_nss_nonlocal_setspent(int stayopen)
+{
+    static const char *fct_name = "setspent";
+    static void *fct_start = NULL;
+    enum nss_status status;
+    service_user *nip;
+    union {
+	enum nss_status (*l)(int stayopen);
+	void *ptr;
+    } fct;
+
+    nip = nss_shadow_nonlocal_database();
+    if (nip == NULL)
+	return NSS_STATUS_UNAVAIL;
+    if (fct_start == NULL)
+	fct_start = __nss_lookup_function(nip, fct_name);
+    fct.ptr = fct_start;
+    do {
+	if (fct.ptr == NULL)
+	    status = NSS_STATUS_UNAVAIL;
+	else
+	    status = DL_CALL_FCT(fct.l, (stayopen));
+    } while (__nss_next(&nip, fct_name, &fct.ptr, status, 0) == 0);
+    if (status != NSS_STATUS_SUCCESS)
+	return status;
+
+    spent_nip = nip;
+    if (spent_fct_start == NULL)
+	spent_fct_start = __nss_lookup_function(nip, spent_fct_name);
+    spent_fct.ptr = spent_fct_start;
+    return NSS_STATUS_SUCCESS;
+}
+
+enum nss_status
+_nss_nonlocal_endspent(void)
+{
+    static const char *fct_name = "endspent";
+    static void *fct_start = NULL;
+    enum nss_status status;
+    service_user *nip;
+    union {
+	enum nss_status (*l)(void);
+	void *ptr;
+    } fct;
+
+    spent_nip = NULL;
+
+    nip = nss_shadow_nonlocal_database();
+    if (nip == NULL)
+	return NSS_STATUS_UNAVAIL;
+    if (fct_start == NULL)
+	fct_start = __nss_lookup_function(nip, fct_name);
+    fct.ptr = fct_start;
+    do {
+	if (fct.ptr == NULL)
+	    status = NSS_STATUS_UNAVAIL;
+	else
+	    status = DL_CALL_FCT(fct.l, ());
+    } while (__nss_next(&nip, fct_name, &fct.ptr, status, 0) == 0);
+    return status;
+}
+
+enum nss_status
+_nss_nonlocal_getspent_r(struct spwd *pwd, char *buffer, size_t buflen,
+			 int *errnop)
+{
+    enum nss_status status;
+    if (spent_nip == NULL) {
+	status = _nss_nonlocal_setspent(0);
+	if (status != NSS_STATUS_SUCCESS)
+	    return status;
+    }
+    do {
+	if (spent_fct.ptr == NULL)
+	    status = NSS_STATUS_UNAVAIL;
+	else
+	    status = DL_CALL_FCT(spent_fct.l, (pwd, buffer, buflen, errnop));	
+	if (status == NSS_STATUS_TRYAGAIN && *errnop == ERANGE)
+	    return status;
+
+	if (status == NSS_STATUS_SUCCESS)
+	    return NSS_STATUS_SUCCESS;
+    } while (__nss_next(&spent_nip, spent_fct_name, &spent_fct.ptr, status, 0) == 0);
+
+    spent_nip = NULL;
+    return NSS_STATUS_NOTFOUND;
+}
+
+
+enum nss_status
+_nss_nonlocal_getspnam_r(const char *name, struct spwd *pwd,
+			 char *buffer, size_t buflen, int *errnop)
+{
+    static const char *fct_name = "getspnam_r";
+    static void *fct_start = NULL;
+    enum nss_status status;
+    service_user *nip;
+    union {
+	enum nss_status (*l)(const char *name, struct spwd *pwd,
+			     char *buffer, size_t buflen, int *errnop);
+	void *ptr;
+    } fct;
+
+    nip = nss_shadow_nonlocal_database();
+    if (nip == NULL)
+	return NSS_STATUS_UNAVAIL;
+    if (fct_start == NULL)
+	fct_start = __nss_lookup_function(nip, fct_name);
+    fct.ptr = fct_start;
+    do {
+	if (fct.ptr == NULL)
+	    status = NSS_STATUS_UNAVAIL;
+	else
+	    status = DL_CALL_FCT(fct.l, (name, pwd, buffer, buflen, errnop));
+	if (status == NSS_STATUS_TRYAGAIN && *errnop == ERANGE)
+	    break;
+    } while (__nss_next(&nip, fct_name, &fct.ptr, status, 0) == 0);
+    return status;
+}
Index: /tags/fc9-eol/server/common/oursrc/nss_nonlocal/nonlocal.h
===================================================================
--- /tags/fc9-eol/server/common/oursrc/nss_nonlocal/nonlocal.h	(revision 1257)
+++ /tags/fc9-eol/server/common/oursrc/nss_nonlocal/nonlocal.h	(revision 1257)
@@ -0,0 +1,12 @@
+#ifndef NONLOCAL_H
+#define NONLOCAL_H
+
+#include "config.h"
+
+enum nss_status check_nonlocal_uid(const char *user, uid_t uid, int *errnop);
+enum nss_status check_nonlocal_gid(const char *user, gid_t gid, int *errnop);
+enum nss_status check_nonlocal_user(const char *user, int *errnop);
+
+#define NONLOCAL_IGNORE_ENV "NSS_NONLOCAL_IGNORE"
+
+#endif /* NON_LOCAL_H */
Index: /tags/fc9-eol/server/common/oursrc/nss_nonlocal/nsswitch-internal.h
===================================================================
--- /tags/fc9-eol/server/common/oursrc/nss_nonlocal/nsswitch-internal.h	(revision 1257)
+++ /tags/fc9-eol/server/common/oursrc/nss_nonlocal/nsswitch-internal.h	(revision 1257)
@@ -0,0 +1,34 @@
+/*
+ * nsswitch_internal.h
+ * Prototypes for some internal glibc functions that we use.  Shhh.
+ */
+
+#ifndef NSSWITCH_INTERNAL_H
+#define NSSWITCH_INTERNAL_H
+
+#include "config.h"
+
+/* glibc/config.h.in */
+#if defined USE_REGPARMS && !defined PROF && !defined __BOUNDED_POINTERS__
+# define internal_function __attribute__ ((regparm (3), stdcall))
+#else
+# define internal_function
+#endif
+
+/* glibc/nss/nsswitch.h */
+typedef struct service_user service_user;
+
+extern int __nss_next (service_user **ni, const char *fct_name, void **fctp,
+		       int status, int all_values);
+extern int __nss_database_lookup (const char *database,
+				  const char *alternative_name,
+				  const char *defconfig, service_user **ni);
+extern void *__nss_lookup_function (service_user *ni, const char *fct_name);
+
+/* glibc/nss/XXX-lookup.c */
+extern int __nss_passwd_lookup (service_user **ni, const char *fct_name,
+				void **fctp) internal_function;
+extern int __nss_group_lookup (service_user **ni, const char *fct_name,
+			        void **fctp) internal_function;
+
+#endif /* NSSWITCH_INTERNAL_H */
Index: /tags/fc9-eol/server/common/oursrc/php_scripts/Makefile.in
===================================================================
--- /tags/fc9-eol/server/common/oursrc/php_scripts/Makefile.in	(revision 1257)
+++ /tags/fc9-eol/server/common/oursrc/php_scripts/Makefile.in	(revision 1257)
@@ -0,0 +1,22 @@
+CC = @CC@
+CFLAGS = @CFLAGS@
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+bindir = @bindir@
+MODS = scripts
+
+all-local: $(patsubst %,.libs/%.so,$(MODS))
+
+.libs/%.so: %.c
+	$(CC) $(CFLAGS) -c $<
+
+install:
+	install -p -m755 -D .libs/scripts.so $(DESTDIR)/usr/lib64/php/modules/scripts.so
+
+clean:
+	rm -f $(MODS:=.so) $(MODS:=.o) $(MODS:=.la) $(MODS:=.lo) $(MODS:=.slo) $(MODS:=.lai)
+	rm -rf .libs modules
+
+distclean: clean
+	rm -f configure config.* Makefile
+	rm -rf auto*.cache
Index: /tags/fc9-eol/server/common/oursrc/php_scripts/mrproper
===================================================================
--- /tags/fc9-eol/server/common/oursrc/php_scripts/mrproper	(revision 1257)
+++ /tags/fc9-eol/server/common/oursrc/php_scripts/mrproper	(revision 1257)
@@ -0,0 +1,6 @@
+#!/bin/sh
+
+rm -f scripts.so
+rm -f configure config.* Makefile
+rm -rf auto*.cache
+rm -rf .libs
Index: /tags/fc9-eol/server/common/oursrc/php_scripts/php_scripts-config.m4
===================================================================
--- /tags/fc9-eol/server/common/oursrc/php_scripts/php_scripts-config.m4	(revision 1257)
+++ /tags/fc9-eol/server/common/oursrc/php_scripts/php_scripts-config.m4	(revision 1257)
@@ -0,0 +1,7 @@
+PHP_ARG_ENABLE(scripts, whether to enable scripts.mit.edu support,
+[ --enable-scripts   Enable scripts.mit.edu support])
+
+if test "$PHP_SCRIPTS" != "no"; then
+  AC_DEFINE(HAVE_SCRIPTS, 1, [Whether you have scripts.mit.edu support])
+  PHP_NEW_EXTENSION(scripts, php_scripts.c, $ext_shared)
+fi
Index: /tags/fc9-eol/server/common/oursrc/php_scripts/php_scripts.c
===================================================================
--- /tags/fc9-eol/server/common/oursrc/php_scripts/php_scripts.c	(revision 1257)
+++ /tags/fc9-eol/server/common/oursrc/php_scripts/php_scripts.c	(revision 1257)
@@ -0,0 +1,85 @@
+/***
+ * scripts.mit.edu PHP enhancement extension
+ *
+ * Joe Presbrey <presbrey@mit.edu>
+ * 2008-06-19
+ *
+ ***/
+
+#include "php.h"
+#include "zend_extensions.h"
+
+#include "php_scripts.h"
+
+#ifndef ZEND_EXT_API
+#define ZEND_EXT_API    ZEND_DLEXPORT
+#endif
+ZEND_EXTENSION();
+
+ZEND_MODULE_STARTUP_D(scripts)
+{
+	return SUCCESS;
+}
+
+ZEND_MODULE_SHUTDOWN_D(scripts)
+{
+}
+
+ZEND_MODULE_ACTIVATE_D(scripts)
+{
+    // replace error handler callback with our own
+    old_error_cb = zend_error_cb;
+    new_error_cb = scripts_error_cb;
+    zend_error_cb = new_error_cb;
+
+	return SUCCESS;
+}
+
+ZEND_MODULE_DEACTIVATE_D(scripts)
+{
+    // restore original error handler callback
+    zend_error_cb = old_error_cb;
+}
+
+void scripts_error_cb(int type, const char *error_filename, const uint error_lineno, const char *format, va_list args)
+{
+    char *buffer;
+    const char *user = php_get_current_user();
+
+    // enhance the log message
+    spprintf(&buffer, 0, "(%s) %s", user, format);
+
+    // pass through to builtin error callback
+    if (strncmp(format, "Module '%s' already loaded", 26)==0) {
+        // demote from E_CORE_WARNING
+        old_error_cb(E_NOTICE, error_filename, error_lineno, buffer, args);
+    } else {
+        old_error_cb(type, error_filename, error_lineno, buffer, args);
+    }
+
+    efree(buffer);
+}
+
+ZEND_DLEXPORT zend_extension zend_extension_entry = {
+    PHP_SCRIPTS_EXTNAME,
+    PHP_SCRIPTS_VERSION,
+    PHP_SCRIPTS_AUTHOR,
+    PHP_SCRIPTS_URL,
+    PHP_SCRIPTS_YEAR,
+    ZEND_MODULE_STARTUP_N(scripts),		/* startup_func_t */
+    ZEND_MODULE_SHUTDOWN_N(scripts),	/* shutdown_func_t */
+    ZEND_MODULE_ACTIVATE_N(scripts),	/* activate_func_t */
+    ZEND_MODULE_DEACTIVATE_N(scripts),	/* deactivate_func_t */
+    NULL,           					/* message_handler_func_t */
+    NULL,           					/* op_array_handler_func_t */
+    NULL,           					/* statement_handler_func_t */
+    NULL,           					/* fcall_begin_handler_func_t */
+    NULL,           					/* fcall_end_handler_func_t */
+    NULL,           					/* op_array_ctor_func_t */
+    NULL,           					/* op_array_dtor_func_t */
+    STANDARD_ZEND_EXTENSION_PROPERTIES
+};
+
+#ifdef COMPILE_DL_SCRIPTS
+ZEND_GET_MODULE(scripts)
+#endif
Index: /tags/fc9-eol/server/common/oursrc/php_scripts/php_scripts.h
===================================================================
--- /tags/fc9-eol/server/common/oursrc/php_scripts/php_scripts.h	(revision 1257)
+++ /tags/fc9-eol/server/common/oursrc/php_scripts/php_scripts.h	(revision 1257)
@@ -0,0 +1,51 @@
+/***
+ * scripts.mit.edu PHP extension
+ *
+ * Joe Presbrey <presbrey@mit.edu>
+ * 2008-06-19
+ *
+ ***/
+
+#ifndef PHP_SCRIPTS_H
+#define PHP_SCRIPTS_H 1
+
+#define PHP_SCRIPTS_VERSION "1.0"
+#define PHP_SCRIPTS_EXTNAME "scripts"
+#define PHP_SCRIPTS_AUTHOR "presbrey@mit.edu"
+#define PHP_SCRIPTS_URL "http://scripts.mit.edu/"
+#define PHP_SCRIPTS_YEAR "2008"
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+extern zend_module_entry scripts_module_entry;
+#define phpext_scripts_ptr &scripts_module_entry
+
+/* error callback repalcement functions */
+void (*old_error_cb)(int type, const char *error_filename, const uint error_lineno, const char *format, va_list args);
+void (*new_error_cb)(int type, const char *error_filename, const uint error_lineno, const char *format, va_list args);
+void scripts_error_cb(int type, const char *error_filename, const uint error_lineno, const char *format, va_list args);
+
+static function_entry scripts_functions[] = {
+    {NULL, NULL, NULL}
+};
+
+zend_module_entry scripts_module_entry = {
+#if ZEND_MODULE_API_NO >= 20010901
+    STANDARD_MODULE_HEADER,
+#endif
+    PHP_SCRIPTS_EXTNAME,
+    scripts_functions,
+    NULL, //PHP_MINIT(scripts),
+    NULL, //PHP_MSHUTDOWN(scripts),
+    NULL,
+    NULL,
+    NULL,
+#if ZEND_MODULE_API_NO >= 20010901
+    PHP_SCRIPTS_VERSION,
+#endif
+    STANDARD_MODULE_PROPERTIES
+};
+
+#endif
Index: /tags/fc9-eol/server/common/oursrc/python-routefs/routefs/__init__.py
===================================================================
--- /tags/fc9-eol/server/common/oursrc/python-routefs/routefs/__init__.py	(revision 1257)
+++ /tags/fc9-eol/server/common/oursrc/python-routefs/routefs/__init__.py	(revision 1257)
@@ -0,0 +1,219 @@
+"""
+RouteFS is a base class for developing read-only FUSE filesystems that
+lets you focus on the directory tree instead of the system calls.
+
+RouteFS uses the Routes library developed for Pylons. URLs were
+inspired by filesystems, and now you can have filesystems inspired by
+URLs.
+
+When developing a descendent of RouteFS, any methods defined in that
+class are considered "controllers", and receive any other parameters
+specified by the URL as keyword arguments.
+"""
+
+import fuse
+import routes
+import errno
+import stat
+
+fuse.fuse_python_api = (0, 2)
+
+class RouteStat(fuse.Stat):
+    """
+    RouteStat is a descendent of fuse.Stat, defined to make sure that
+    all of the necessary attributes are always defined
+    """
+    def __init__(self):
+        self.st_mode = 0
+        self.st_ino = 0
+        self.st_dev = 0
+        self.st_nlink = 0
+        self.st_uid = 0
+        self.st_gid = 0
+        self.st_size = 0
+        self.st_atime = 0
+        self.st_mtime = 0
+        self.st_ctime = 0
+
+class RouteMeta(type):
+    """
+    Metaclass to calculate controller methods
+    
+    Routes needs to be pre-seeded with a list of "controllers". For
+    all descendents of RouteFS, the list of controllers is defined to
+    be any non-private methods of the class that were not in the
+    RouteFS class.
+    """
+    def __init__(cls, classname, bases, dict_):
+        super(RouteMeta, cls).__init__(classname, bases, dict_)
+        if bases != (fuse.Fuse,):
+            new_funcs = set(dict_.keys()).difference(dir(RouteFS))
+            cls.controllers([func for func in new_funcs \
+                                 if not func.startswith('_')])
+
+class RouteFS(fuse.Fuse):
+    """
+    RouteFS: Web 2.0 for filesystems
+    """
+    __metaclass__ = RouteMeta
+    def __init__(self, *args, **kwargs):
+        super(RouteFS, self).__init__(*args, **kwargs)
+        
+        self.map = self.make_map()
+        self.map.create_regs(self.controller_list)
+        
+    def make_map(self):
+        """
+        This method should be overridden by descendents of RouteFS to
+        define the routing for the filesystem
+        """
+        m = routes.Mapper()
+        
+        m.connect(':controller')
+        
+        return m
+    
+    @classmethod
+    def controllers(cls, lst):
+        cls.controller_list = lst
+    
+    def _get_file(self, path):
+        """
+        Find the filesystem entry object for a given path
+        """
+        match = self.map.match(path)
+        if match is None:
+            return NoEntry()
+        controller = match.pop('controller')
+        result = getattr(self, controller)(**match)
+        if type(result) is str:
+            result = File(result)
+        if type(result) is list:
+            result = Directory(result)
+        return result
+    
+    def readdir(self, path, offset):
+        """
+        If the path referred to is a directory, return the elements of
+        that diectory
+        """
+        return self._get_file(path).readdir(offset)
+    
+    def getattr(self, path):
+        """
+        Return the stat information for a path
+        
+        The stat information for a directory, symlink, or file is
+        predetermined based on which it is.
+        """
+        return self._get_file(path).getattr()
+    
+    def read(self, path, length, offset):
+        """
+        If the path specified is a file, return the requested portion
+        of the file
+        """
+        return self._get_file(path).read(length, offset)
+    
+    def readlink(self, path):
+        """
+        If the path specified is a symlink, return the target
+        """
+        return self._get_file(path).readlink()
+
+class TreeKey(object):
+    def getattr(self):
+        return -errno.EINVAL
+    def readdir(self, offset):
+        return -errno.EINVAL
+    def read(self, length, offset):
+        return -errno.EINVAL
+    def readlink(self):
+        return -errno.EINVAL
+
+class NoEntry(TreeKey):
+    def getattr(self):
+        return -errno.ENOENT
+    def readdir(self, offset):
+        return -errno.ENOENT
+    def read(self, length, offset):
+        return -errno.ENOENT
+    def readlink(self):
+        return -errno.ENOENT
+
+class TreeEntry(TreeKey):
+    default_mode = 0444
+    
+    def __new__(cls, contents, mode=None):
+        return super(TreeEntry, cls).__new__(cls, contents)
+    
+    def __init__(self, contents, mode=None):
+        if mode is None:
+            self.mode = self.default_mode
+        else:
+            self.mode = mode
+        
+        super(TreeEntry, self).__init__(contents)
+
+class Directory(TreeEntry, list):
+    """
+    A dummy class representing a filesystem entry that should be a
+    directory
+    """
+    default_mode = 0555
+
+    def getattr(self):
+        st = RouteStat()
+        st.st_mode = stat.S_IFDIR | self.mode
+        st.st_nlink = 2
+        return st
+
+    def readdir(self, offset):
+        for member in ['.', '..'] + self:
+            yield fuse.Direntry(str(member))
+
+class Symlink(TreeEntry, str):
+    """
+    A dummy class representing something that should be a symlink
+    """
+    default_mode = 0777
+
+    def getattr(self):
+        st = RouteStat()
+        st.st_mode = stat.S_IFLNK | self.mode
+        st.st_nlink = 1
+        st.st_size = len(self)
+        return st
+
+    def readlink(self):
+        return self
+
+class File(TreeEntry, str):
+    """
+    A dummy class representing something that should be a file
+    """
+    default_mode = 0444
+
+    def getattr(self):
+        st = RouteStat()
+        st.st_mode = stat.S_IFREG | self.mode
+        st.st_nlink = 1
+        st.st_size = len(self)
+        return st
+
+    def read(self, length, offset):
+        return self[offset:offset + length]
+
+def main(cls):
+    """
+    A convenience function for initializing a RouteFS filesystem
+    """
+    server = cls(version="%prog " + fuse.__version__,
+                 usage=fuse.Fuse.fusage,
+                 dash_s_do='setsingle')
+    server.parse(values=server, errex=1)
+    server.main()
+
+from dictfs import DictFS
+
+__all__ = ['RouteFS', 'DictFS', 'Symlink', 'Directory', 'File', 'main']
Index: /tags/fc9-eol/server/common/oursrc/python-routefs/routefs/dictfs.py
===================================================================
--- /tags/fc9-eol/server/common/oursrc/python-routefs/routefs/dictfs.py	(revision 1257)
+++ /tags/fc9-eol/server/common/oursrc/python-routefs/routefs/dictfs.py	(revision 1257)
@@ -0,0 +1,48 @@
+"""
+DictFS allows you to easily create read-only filesystems when the
+file tree is known in advance.
+
+To create your own DictFS descendent, simply override the files
+property, which can be created either using the property
+decorator, or just a simple assignment.
+
+A dictionary represents a directory, with keys corresponding to
+file names and the values corresponding to the file contents.
+"""
+
+import routefs
+from routes import Mapper
+import os
+
+class DictFS(routefs.RouteFS):
+    @property
+    def files(self):
+        """
+        This property should be overridden in your DictFS descendant
+        """
+        return dict()
+    
+    def make_map(self):
+        m = Mapper()
+        
+        m.connect('*path', controller='handler')
+        
+        return m
+    
+    def handler(self, path, **kwargs):
+        if path != '':
+            elements = path.split(os.path.sep)
+        else:
+            elements = []
+        
+        try:
+            tree = self.files
+            for elt in elements:
+                tree = tree[elt]
+        except KeyError:
+            return
+        
+        if type(tree) is dict:
+            return tree.keys()
+        else:
+            return tree
Index: /tags/fc9-eol/server/common/oursrc/python-routefs/routefs/examples/dictexfs.py
===================================================================
--- /tags/fc9-eol/server/common/oursrc/python-routefs/routefs/examples/dictexfs.py	(revision 1257)
+++ /tags/fc9-eol/server/common/oursrc/python-routefs/routefs/examples/dictexfs.py	(revision 1257)
@@ -0,0 +1,10 @@
+#!/usr/bin/python
+
+import routefs
+
+class DictExFS(routefs.DictFS):
+    files = dict(Hello='World',
+                 Directory=dict(a='a', b='b', c=routefs.Symlink('a')))
+
+if __name__ == '__main__':
+    routefs.main(DictExFS)
Index: /tags/fc9-eol/server/common/oursrc/python-routefs/routefs/examples/pyhesiodfs.py
===================================================================
--- /tags/fc9-eol/server/common/oursrc/python-routefs/routefs/examples/pyhesiodfs.py	(revision 1257)
+++ /tags/fc9-eol/server/common/oursrc/python-routefs/routefs/examples/pyhesiodfs.py	(revision 1257)
@@ -0,0 +1,46 @@
+#!/usr/bin/python
+
+import hesiod
+import routefs
+from routes import Mapper
+
+class PyHesiodFS(routefs.RouteFS):
+    def __init__(self, *args, **kwargs):
+        super(PyHesiodFS, self).__init__(*args, **kwargs)
+        self.fuse_args.add("allow_other", True)
+        
+        self.cache = {}
+    
+    def make_map(self):
+        m = Mapper()
+        m.connect('', controller='getList')
+        m.connect('README.txt', controller='getReadme')
+        m.connect(':action', controller='getLocker')
+        return m
+    
+    def getLocker(self, action, **kwargs):
+        if action in self.cache:
+            return routefs.Symlink(self.cache[action])
+        
+        try:
+            filsys = hesiod.FilsysLookup(action).filsys[0]
+            if filsys['type'] == 'AFS':
+                self.cache[action] = filsys['location']
+                return routefs.Symlink(self.cache[action])
+        except (TypeError, KeyError, IndexError):
+            return
+    
+    def getList(self, **kwargs):
+        return self.cache.keys() + ['README.txt']
+    
+    def getReadme(self, **kwargs):
+        return """
+This is the pyHesiodFS FUSE automounter. To access a Hesiod filsys,
+just access /mit/name.
+
+If you're using the Finder, try pressing Cmd+Shift+G and then entering
+/mit/name
+"""
+
+if __name__ == '__main__':
+    routefs.main(PyHesiodFS)
Index: /tags/fc9-eol/server/common/oursrc/python-routefs/setup.py
===================================================================
--- /tags/fc9-eol/server/common/oursrc/python-routefs/setup.py	(revision 1257)
+++ /tags/fc9-eol/server/common/oursrc/python-routefs/setup.py	(revision 1257)
@@ -0,0 +1,15 @@
+#!/usr/bin/python
+
+from setuptools import setup, find_packages
+
+setup(
+    name="RouteFS",
+    version="0.0.1",
+    description="RouteFS: A FUSE API wrapper based on URL routing",
+    author="Evan Broder",
+    author_email="broder@mit.edu",
+    #url="http://ebroder.net/code/RouteFS",
+    license="MIT",
+    packages=find_packages(),
+    install_requires=['fuse_python>=0.2a', 'Routes>=1.7']
+)
Index: /tags/fc9-eol/server/common/oursrc/scripts-python-path/00scripts-home.pth
===================================================================
--- /tags/fc9-eol/server/common/oursrc/scripts-python-path/00scripts-home.pth	(revision 1257)
+++ /tags/fc9-eol/server/common/oursrc/scripts-python-path/00scripts-home.pth	(revision 1257)
@@ -0,0 +1,1 @@
+import site, os.path; site.addsitedir(os.path.expanduser("~/lib/python2.5/site-packages"))
Index: /tags/fc9-eol/server/common/oursrc/sql-signup/Makefile
===================================================================
--- /tags/fc9-eol/server/common/oursrc/sql-signup/Makefile	(revision 1257)
+++ /tags/fc9-eol/server/common/oursrc/sql-signup/Makefile	(revision 1257)
@@ -0,0 +1,12 @@
+install:
+	install -Dpm 644 sql-signup-capps ${DESTDIR}/etc/security/console.apps/sql-signup
+	install -Dpm 644 sql-signup-pam ${DESTDIR}/etc/pam.d/sql-signup
+	install -DpT sql-signup-sbin ${DESTDIR}/usr/sbin/sql-signup
+	mkdir -p ${DESTDIR}/usr/bin
+	ln -nfs /usr/bin/consolehelper ${DESTDIR}/usr/bin/sql-signup
+
+clean:
+	rm -f ${DESTDIR}/usr/bin/sql-signup
+	rm -f ${DESTDIR}/usr/sbin/sql-signup
+	rm -f ${DESTDIR}/etc/pam.d/sql-signup
+	rm -f ${DESTDIR}/etc/security/console.apps/sql-signup
Index: /tags/fc9-eol/server/common/oursrc/sql-signup/sql-signup-capps
===================================================================
--- /tags/fc9-eol/server/common/oursrc/sql-signup/sql-signup-capps	(revision 1257)
+++ /tags/fc9-eol/server/common/oursrc/sql-signup/sql-signup-capps	(revision 1257)
@@ -0,0 +1,1 @@
+PROGRAM=/usr/sbin/sql-signup
Index: /tags/fc9-eol/server/common/oursrc/sql-signup/sql-signup-pam
===================================================================
--- /tags/fc9-eol/server/common/oursrc/sql-signup/sql-signup-pam	(revision 1257)
+++ /tags/fc9-eol/server/common/oursrc/sql-signup/sql-signup-pam	(revision 1257)
@@ -0,0 +1,5 @@
+#%PAM-1.0
+auth		sufficient	pam_succeed_if.so uid >= 500 quiet
+auth		include		config-util
+account		include		config-util
+session		include		config-util
Index: /tags/fc9-eol/server/common/oursrc/sql-signup/sql-signup-sbin
===================================================================
--- /tags/fc9-eol/server/common/oursrc/sql-signup/sql-signup-sbin	(revision 1257)
+++ /tags/fc9-eol/server/common/oursrc/sql-signup/sql-signup-sbin	(revision 1257)
@@ -0,0 +1,23 @@
+#!/usr/bin/python
+
+from pwd import getpwuid
+from os import getenv, setuid, setgid, execv
+from sys import exit
+
+SQLUID = 537704221
+SQLGID = 537704221
+SQLBIN = '/afs/athena.mit.edu/contrib/sql/web_scripts/main/batch/signup.php'
+
+caller = int(getenv('USERHELPER_UID'))
+if caller is None or caller == 0:
+	exit('No user specified.')
+else:
+	pw = getpwuid(caller)
+	(user_name, user_uid, user_gid) = (pw[0], pw[2], pw[3])
+
+	if len(user_name) and user_uid > 1000:
+		setgid(SQLGID)
+		setuid(SQLUID)
+		execv(SQLBIN, [SQLBIN, str(user_name), str(user_uid), str(user_gid)])
+	else:
+		print 'Invalid UID:', user_uid
Index: /tags/fc9-eol/server/common/oursrc/tokensys/Makefile.in
===================================================================
--- /tags/fc9-eol/server/common/oursrc/tokensys/Makefile.in	(revision 1257)
+++ /tags/fc9-eol/server/common/oursrc/tokensys/Makefile.in	(revision 1257)
@@ -0,0 +1,16 @@
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+libdir = @libdir@
+
+all:
+
+install:
+	mkdir -p $(DESTDIR)$(libdir)
+	install -m a=rx,u+w -p renew $(DESTDIR)$(libdir)/
+
+clean:
+	rm -f renew
+
+distclean: clean
+	rm -f configure config.* Makefile
+	rm -rf auto*.cache
Index: /tags/fc9-eol/server/common/oursrc/tokensys/configure.in
===================================================================
--- /tags/fc9-eol/server/common/oursrc/tokensys/configure.in	(revision 1257)
+++ /tags/fc9-eol/server/common/oursrc/tokensys/configure.in	(revision 1257)
@@ -0,0 +1,27 @@
+AC_INIT()
+
+AC_DEFUN(REQUIRE_PATH,[
+AC_SUBST($1_path)
+if test "[$]$1_path" = ""; then
+        AC_ERROR(Cannot find $1)
+fi
+])
+
+AC_ARG_WITH(kinit,
+[  --with-kinit[=PATH]       kinit is located at PATH],[
+  if test "$withval" != "no" -a "$withval" != "yes"; then
+    kinit_path="$withval"
+  fi
+])
+REQUIRE_PATH(kinit)
+
+AC_ARG_WITH(aklog,
+[  --with-aklog[=PATH]       aklog is located at PATH],[
+  if test "$withval" != "no" -a "$withval" != "yes"; then
+    aklog_path="$withval"
+  fi
+])
+REQUIRE_PATH(aklog)
+
+AC_OUTPUT(Makefile)
+AC_OUTPUT(renew)
Index: /tags/fc9-eol/server/common/oursrc/tokensys/crontab
===================================================================
--- /tags/fc9-eol/server/common/oursrc/tokensys/crontab	(revision 1257)
+++ /tags/fc9-eol/server/common/oursrc/tokensys/crontab	(revision 1257)
@@ -0,0 +1,2 @@
+@reboot	afsagent /home/afsagent/renew
+0 */3 * * * afsagent /home/afsagent/renew
Index: /tags/fc9-eol/server/common/oursrc/tokensys/mrproper
===================================================================
--- /tags/fc9-eol/server/common/oursrc/tokensys/mrproper	(revision 1257)
+++ /tags/fc9-eol/server/common/oursrc/tokensys/mrproper	(revision 1257)
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+rm -f renew
+rm -f configure config.* Makefile
+rm -rf auto*.cache
Index: /tags/fc9-eol/server/common/oursrc/tokensys/renew.in
===================================================================
--- /tags/fc9-eol/server/common/oursrc/tokensys/renew.in	(revision 1257)
+++ /tags/fc9-eol/server/common/oursrc/tokensys/renew.in	(revision 1257)
@@ -0,0 +1,17 @@
+#!/bin/sh
+
+# This script renews afsagent's tickets and tokens.
+# It is called by afsagent's crontab every 8 hours.
+
+export KRB5CCNAME=/home/afsagent/krb5cc
+export KRBTKFILE=/home/afsagent/tkt
+
+# Option #1: invoke kinit with a password
+#echo "password" | @kinit_path@ >/dev/null daemon/scripts.mit.edu
+
+# Option #2: invoke kinit with a keytab
+@kinit_path@ -k -t /etc/daemon.keytab daemon/scripts.mit.edu
+
+# Obtain AFS tokens
+@aklog_path@
+@aklog_path@ -c sipb
Index: /tags/fc9-eol/server/common/oursrc/whoisd/Makefile.in
===================================================================
--- /tags/fc9-eol/server/common/oursrc/whoisd/Makefile.in	(revision 1257)
+++ /tags/fc9-eol/server/common/oursrc/whoisd/Makefile.in	(revision 1257)
@@ -0,0 +1,7 @@
+install:
+	install -Dpm 644 whoisd.tac ${DESTDIR}@libexecdir@/whoisd.tac
+	install -Dpm 644 crontab ${DESTDIR}/etc/cron.d/whoisd
+
+clean:
+	rm -f ${DESTDIR}@libexecdir@/whoisd.tac
+	rm -f ${DESTDIR}/etc/cron.d/whoisd
Index: /tags/fc9-eol/server/common/oursrc/whoisd/configure.in
===================================================================
--- /tags/fc9-eol/server/common/oursrc/whoisd/configure.in	(revision 1257)
+++ /tags/fc9-eol/server/common/oursrc/whoisd/configure.in	(revision 1257)
@@ -0,0 +1,2 @@
+AC_INIT()
+AC_OUTPUT(Makefile)
Index: /tags/fc9-eol/server/common/oursrc/whoisd/crontab
===================================================================
--- /tags/fc9-eol/server/common/oursrc/whoisd/crontab	(revision 1257)
+++ /tags/fc9-eol/server/common/oursrc/whoisd/crontab	(revision 1257)
@@ -0,0 +1,1 @@
+@reboot root /usr/bin/twistd -l /var/log/scripts-whoisd.log --pidfile /var/run/whoisd.pid -y /usr/local/libexec/whoisd.tac
Index: /tags/fc9-eol/server/common/oursrc/whoisd/mrproper
===================================================================
--- /tags/fc9-eol/server/common/oursrc/whoisd/mrproper	(revision 1257)
+++ /tags/fc9-eol/server/common/oursrc/whoisd/mrproper	(revision 1257)
@@ -0,0 +1,4 @@
+#!/bin/sh
+
+rm -f configure config.* Makefile
+rm -rf auto*.cache
Index: /tags/fc9-eol/server/common/oursrc/whoisd/whoisd.tac
===================================================================
--- /tags/fc9-eol/server/common/oursrc/whoisd/whoisd.tac	(revision 1257)
+++ /tags/fc9-eol/server/common/oursrc/whoisd/whoisd.tac	(revision 1257)
@@ -0,0 +1,99 @@
+from twisted.application import internet, service
+from twisted.internet import protocol, reactor, defer
+from twisted.protocols import basic
+import ldap, ldap.filter
+import os, sys, pwd, glob
+
+class WhoisProtocol(basic.LineReceiver):
+    def lineReceived(self, hostname):
+    	(key, hostname) = hostname.split('=',2)
+	if key != self.factory.key:
+            self.transport.write("Unauthorized to use whois"+"\r\n")
+	    self.transport.loseConnection()
+	else:
+            self.factory.getWhois(hostname
+            ).addErrback(lambda _: "Internal error in server"
+            ).addCallback(lambda m:
+                          (self.transport.write(m+"\r\n"),
+                           self.transport.loseConnection()))
+class WhoisFactory(protocol.ServerFactory):
+    protocol = WhoisProtocol
+    def __init__(self, vhostDir, ldap_URL, ldap_base, keyFile):
+        self.vhostDir = vhostDir
+        self.ldap_URL = ldap_URL
+        self.ldap = ldap.initialize(self.ldap_URL)
+        self.ldap_base = ldap_base
+        self.vhosts = {}
+        if vhostDir:
+            self.rescanVhosts()
+        self.key = file(keyFile).read()
+    def rescanVhosts(self):
+        newVhosts = {}
+        for f in glob.iglob(os.path.join(self.vhostDir, "*.conf")):
+            locker = os.path.splitext(os.path.basename(f))[0]
+            newVhosts.update(self.parseApacheConf(file(f)))
+        self.vhosts = newVhosts
+        self.vhostTime = os.stat(self.vhostDir).st_mtime
+    def parseApacheConf(self, f):
+        vhosts = {}
+        hostnames = []
+        locker = None
+        docroot = None
+        for l in f:
+            parts = l.split()
+            if not parts: continue
+            command = parts.pop(0)
+            if command in ("ServerName", "ServerAlias"):
+                hostnames.extend(parts)
+            elif command in ("SuExecUserGroup",):
+                locker = parts[0]
+            elif command in ("DocumentRoot",):
+                docroot = parts[0]
+            elif command == "</VirtualHost>":
+                d = {'locker': locker, 'apacheDocumentRoot': docroot, 'apacheServerName': hostnames[0]}
+                for h in hostnames: vhosts[h] = d
+                hostnames = []
+                locker = None
+                docroot = None
+        return vhosts
+    def canonicalize(self, vhost):
+        vhost = vhost.lower().rstrip(".")
+        return vhost
+#        if vhost.endswith(".mit.edu"):
+#            return vhost
+#        else:
+#            return vhost + ".mit.edu"
+    def searchLDAP(self, vhost):
+        results = self.ldap.search_s(self.ldap_base, ldap.SCOPE_SUBTREE,
+            ldap.filter.filter_format(
+                '(|(apacheServername=%s)(apacheServerAlias=%s))', (vhost,)*2))
+        if len(results) >= 1:
+            result = results[0]
+            attrs = result[1]
+            for attr in ('apacheServerName','apacheDocumentRoot', 'apacheSuexecUid', 'apacheSuexecGid'):
+                attrs[attr] = attrs[attr][0]
+            user = pwd.getpwuid(int(attrs['apacheSuexecUid']))
+            if user:
+                attrs['locker'] = user.pw_name
+            else:
+                attrs['locker'] = None
+            return attrs
+        else:
+            return None
+    def getWhois(self, vhost):
+        vhost = self.canonicalize(vhost)
+        info = self.vhosts.get(vhost)
+        if not info:
+            info = self.searchLDAP(vhost)
+        if info:
+            ret = "Hostname: %s\nAlias: %s\nLocker: %s\nDocument Root: %s" % \
+                (info['apacheServerName'], vhost, info['locker'], info['apacheDocumentRoot'])
+        else:
+            ret = "No such hostname"
+        return defer.succeed(ret)
+
+application = service.Application('whois', uid=99, gid=99)
+factory = WhoisFactory(None,
+    "ldap://localhost", "ou=VirtualHosts,dc=scripts,dc=mit,dc=edu", "/etc/whoisd-password")
+internet.TCPServer(43, factory).setServiceParent(
+    service.IServiceCollection(application))
Index: /tags/fc9-eol/server/common/patches/httpd-2.2.x-304.patch
===================================================================
--- /tags/fc9-eol/server/common/patches/httpd-2.2.x-304.patch	(revision 1257)
+++ /tags/fc9-eol/server/common/patches/httpd-2.2.x-304.patch	(revision 1257)
@@ -0,0 +1,14 @@
+--- httpd-2.2.10/server/util_script.c.orig	2006-09-15 09:19:25.000000000 -0400
++++ httpd-2.2.10/server/util_script.c	2009-03-28 14:33:17.000000000 -0400
+@@ -482,6 +482,11 @@
+             if ((cgi_status == HTTP_UNSET) && (r->method_number == M_GET)) {
+                 cond_status = ap_meets_conditions(r);
+             }
++            else if ((cgi_status == HTTP_NO_CONTENT) ||
++                     (cgi_status == HTTP_NOT_MODIFIED) ||
++                     ap_is_HTTP_INFO(cgi_status)) {
++                r->header_only = 1; /* discard any body */
++            }
+             apr_table_overlap(r->err_headers_out, merge,
+                 APR_OVERLAP_TABLES_MERGE);
+             if (!apr_is_empty_table(cookie_table)) {
Index: /tags/fc9-eol/server/common/patches/httpd-2.2.x-log-docroot.patch
===================================================================
--- /tags/fc9-eol/server/common/patches/httpd-2.2.x-log-docroot.patch	(revision 1257)
+++ /tags/fc9-eol/server/common/patches/httpd-2.2.x-log-docroot.patch	(revision 1257)
@@ -0,0 +1,13 @@
+--- httpd-2.2.8/server/log.c.orig	2009-02-20 01:48:06.000000000 -0500
++++ httpd-2.2.8/server/log.c	2009-02-20 01:55:40.000000000 -0500
+@@ -621,6 +621,10 @@
+         len += apr_snprintf(errstr + len, MAX_STRING_LEN - len,
+                             "[client %s] ", c->remote_ip);
+     }
++    if (r) { // Extract the document root and print it
++      len += apr_sprintf(errstr + len, MAX_STRING_LEN - len,
++			 "[docroot %s] ", ap_document_root(r));
++    }
+     if (status != 0) {
+         if (status < APR_OS_START_EAIERR) {
+             len += apr_snprintf(errstr + len, MAX_STRING_LEN - len,
Index: /tags/fc9-eol/server/common/patches/httpd-2.2.x-mod_status-security.patch
===================================================================
--- /tags/fc9-eol/server/common/patches/httpd-2.2.x-mod_status-security.patch	(revision 1257)
+++ /tags/fc9-eol/server/common/patches/httpd-2.2.x-mod_status-security.patch	(revision 1257)
@@ -0,0 +1,70 @@
+Prevents mod_status from taking effect in .htaccess files, by requiring
+a directive that's only permitted in directory context.
+
+Signed-off-by: Quentin Smith <quentin@mit.edu>
+Signed-off-by: Geoffrey Thomas <geofft@mit.edu>
+--- a/modules/generators/mod_status.c	2008-01-02 04:43:52.000000000 -0500
++++ b/modules/generators/mod_status.c	2008-08-06 01:31:26.000000000 -0400
+@@ -115,6 +115,10 @@
+ static pid_t child_pid;
+ #endif
+ 
++typedef struct {
++  int permit_status_handler;
++} status_config_rec;
++
+ /*
+  * command-related code. This is here to prevent use of ExtendedStatus
+  * without status_module included.
+@@ -139,6 +143,13 @@
+     return NULL;
+ }
+ 
++static void *create_status_dir_config(apr_pool_t *p, char *d)
++{
++  status_config_rec *conf = apr_pcalloc(p, sizeof(*conf));
++  conf->permit_status_handler = 0;
++  return conf;
++}
++
+ 
+ static const command_rec status_module_cmds[] =
+ {
+@@ -147,6 +158,11 @@
+     AP_INIT_FLAG("SeeRequestTail", set_reqtail, NULL, RSRC_CONF,
+       "For verbose requests, \"On\" to see the last 63 chars of the request, "
+       "\"Off\" (default) to see the first 63 in extended status display"),
++    AP_INIT_FLAG("PermitStatusHandler", ap_set_flag_slot,
++		 (void *)APR_OFFSETOF(status_config_rec, permit_status_handler),
++		 ACCESS_CONF,
++      "As a security measure, only permit status handlers where this flag "
++      "is set. Only legal in directory context, not .htaccess."),
+     {NULL}
+ };
+ 
+@@ -247,9 +263,13 @@
+     pid_t *pid_buffer, worker_pid;
+     clock_t tu, ts, tcu, tcs;
+     ap_generation_t worker_generation;
+-
+-    if (strcmp(r->handler, STATUS_MAGIC_TYPE) &&
+-        strcmp(r->handler, "server-status")) {
++    
++    status_config_rec *conf = ap_get_module_config(r->per_dir_config,
++                                                      &status_module);
++
++    if ((strcmp(r->handler, STATUS_MAGIC_TYPE) &&
++         strcmp(r->handler, "server-status")) ||
++	!conf->permit_status_handler) {
+         return DECLINED;
+     }
+ 
+@@ -871,7 +891,7 @@
+ module AP_MODULE_DECLARE_DATA status_module =
+ {
+     STANDARD20_MODULE_STUFF,
+-    NULL,                       /* dir config creater */
++    create_status_dir_config,   /* dir config creater */
+     NULL,                       /* dir merger --- default is to override */
+     NULL,                       /* server config */
+     NULL,                       /* merge server config */
Index: /tags/fc9-eol/server/common/patches/httpd-2.2.x-sni.patch
===================================================================
--- /tags/fc9-eol/server/common/patches/httpd-2.2.x-sni.patch	(revision 1257)
+++ /tags/fc9-eol/server/common/patches/httpd-2.2.x-sni.patch	(revision 1257)
@@ -0,0 +1,1028 @@
+http://sni.velox.ch/httpd-2.2.11-sni.20090427.patch - server name indication
+support for mod_ssl / Apache 2.2.11 (RFC 4366, section 3.1)
+
+Last updated 2009-04-27, by Kaspar Brand.
+Provided AS IS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND.
+
+Based on a patch from the EdelKey project (http://www.edelweb.fr/EdelKey/files/),
+includes further improvements by Ruediger Pluem (from httpd trunk).
+
+Needs openssl-SNAP-20060330 / OpenSSL 0.9.8f or later
+to work properly (ftp://ftp.openssl.org/snapshot/). OpenSSL versions
+prior to 0.9.8j must be configured explicitly for TLS extension support
+at compile time ("./config enable-tlsext").
+
+Index: httpd-2.2.11/modules/ssl/ssl_private.h
+===================================================================
+--- httpd-2.2.11/modules/ssl/ssl_private.h	(revision 768863)
++++ httpd-2.2.11/modules/ssl/ssl_private.h	(working copy)
+@@ -35,6 +35,7 @@
+ #include "http_connection.h"
+ #include "http_request.h"
+ #include "http_protocol.h"
++#include "http_vhost.h"
+ #include "util_script.h"
+ #include "util_filter.h"
+ #include "util_ebcdic.h"
+@@ -129,6 +130,9 @@ ap_set_module_config(c->conn_config, &ssl_module,
+ #define mySrvConfig(srv) (SSLSrvConfigRec *)ap_get_module_config(srv->module_config,  &ssl_module)
+ #define myDirConfig(req) (SSLDirConfigRec *)ap_get_module_config(req->per_dir_config, &ssl_module)
+ #define myModConfig(srv) (mySrvConfig((srv)))->mc
++#define mySrvFromConn(c) (myConnConfig(c))->server
++#define mySrvConfigFromConn(c) mySrvConfig(mySrvFromConn(c))
++#define myModConfigFromConn(c) myModConfig(mySrvFromConn(c))
+ 
+ #define myCtxVarSet(mc,num,val)  mc->rCtx.pV##num = val
+ #define myCtxVarGet(mc,num,type) (type)(mc->rCtx.pV##num)
+@@ -347,6 +351,7 @@ typedef struct {
+     int is_proxy;
+     int disabled;
+     int non_ssl_request;
++    server_rec *server;
+ } SSLConnRec;
+ 
+ typedef struct {
+@@ -449,6 +454,9 @@ struct SSLSrvConfigRec {
+     BOOL             cipher_server_pref;
+     modssl_ctx_t    *server;
+     modssl_ctx_t    *proxy;
++#ifndef OPENSSL_NO_TLSEXT
++    ssl_enabled_t    strict_sni_vhost_check;
++#endif
+ };
+ 
+ /**
+@@ -513,6 +521,9 @@ const char  *ssl_cmd_SSLOptions(cmd_parms *, void
+ const char  *ssl_cmd_SSLRequireSSL(cmd_parms *, void *);
+ const char  *ssl_cmd_SSLRequire(cmd_parms *, void *, const char *);
+ const char  *ssl_cmd_SSLUserName(cmd_parms *, void *, const char *);
++#ifndef OPENSSL_NO_TLSEXT
++const char  *ssl_cmd_SSLStrictSNIVHostCheck(cmd_parms *cmd, void *dcfg, int flag);
++#endif
+ 
+ const char  *ssl_cmd_SSLProxyEngine(cmd_parms *cmd, void *dcfg, int flag);
+ const char  *ssl_cmd_SSLProxyProtocol(cmd_parms *, void *, const char *);
+@@ -555,6 +566,9 @@ int          ssl_callback_NewSessionCacheEntry(SSL
+ SSL_SESSION *ssl_callback_GetSessionCacheEntry(SSL *, unsigned char *, int, int *);
+ void         ssl_callback_DelSessionCacheEntry(SSL_CTX *, SSL_SESSION *);
+ void         ssl_callback_LogTracingState(MODSSL_INFO_CB_ARG_TYPE, int, int);
++#ifndef OPENSSL_NO_TLSEXT
++int          ssl_callback_ServerNameIndication(SSL *, int *, modssl_ctx_t *);
++#endif
+ 
+ /**  Session Cache Support  */
+ void         ssl_scache_init(server_rec *, apr_pool_t *);
+Index: httpd-2.2.11/modules/ssl/ssl_engine_init.c
+===================================================================
+--- httpd-2.2.11/modules/ssl/ssl_engine_init.c	(revision 768863)
++++ httpd-2.2.11/modules/ssl/ssl_engine_init.c	(working copy)
+@@ -358,6 +358,33 @@ static void ssl_init_server_check(server_rec *s,
+     }
+ }
+ 
++#ifndef OPENSSL_NO_TLSEXT
++static void ssl_init_ctx_tls_extensions(server_rec *s,
++                                        apr_pool_t *p,
++                                        apr_pool_t *ptemp,
++                                        modssl_ctx_t *mctx)
++{
++    /*
++     * Configure TLS extensions support
++     */
++    ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, s,
++                 "Configuring TLS extension handling");
++
++    /*
++     * Server name indication (SNI)
++     */
++    if (!SSL_CTX_set_tlsext_servername_callback(mctx->ssl_ctx,
++                          ssl_callback_ServerNameIndication) ||
++        !SSL_CTX_set_tlsext_servername_arg(mctx->ssl_ctx, mctx)) {
++        ap_log_error(APLOG_MARK, APLOG_ERR, 0, s,
++                     "Unable to initialize TLS servername extension "
++                     "callback (incompatible OpenSSL version?)");
++        ssl_log_ssl_error(APLOG_MARK, APLOG_ERR, s);
++        ssl_die();
++    }
++}
++#endif
++
+ static void ssl_init_ctx_protocol(server_rec *s,
+                                   apr_pool_t *p,
+                                   apr_pool_t *ptemp,
+@@ -690,6 +717,9 @@ static void ssl_init_ctx(server_rec *s,
+     if (mctx->pks) {
+         /* XXX: proxy support? */
+         ssl_init_ctx_cert_chain(s, p, ptemp, mctx);
++#ifndef OPENSSL_NO_TLSEXT
++        ssl_init_ctx_tls_extensions(s, p, ptemp, mctx);
++#endif
+     }
+ }
+ 
+@@ -1039,9 +1069,19 @@ void ssl_init_CheckServers(server_rec *base_server
+         klen = strlen(key);
+ 
+         if ((ps = (server_rec *)apr_hash_get(table, key, klen))) {
+-            ap_log_error(APLOG_MARK, APLOG_WARNING, 0,
++            ap_log_error(APLOG_MARK, 
++#ifdef OPENSSL_NO_TLSEXT
++                         APLOG_WARNING, 
++#else
++                         APLOG_DEBUG, 
++#endif
++                         0,
+                          base_server,
++#ifdef OPENSSL_NO_TLSEXT
+                          "Init: SSL server IP/port conflict: "
++#else
++                         "Init: SSL server IP/port overlap: "
++#endif
+                          "%s (%s:%d) vs. %s (%s:%d)",
+                          ssl_util_vhostid(p, s),
+                          (s->defn_name ? s->defn_name : "unknown"),
+@@ -1058,8 +1098,14 @@ void ssl_init_CheckServers(server_rec *base_server
+ 
+     if (conflict) {
+         ap_log_error(APLOG_MARK, APLOG_WARNING, 0, base_server,
++#ifdef OPENSSL_NO_TLSEXT
+                      "Init: You should not use name-based "
+                      "virtual hosts in conjunction with SSL!!");
++#else
++                     "Init: Name-based SSL virtual hosts only "
++                     "work for clients with TLS server name indication "
++                     "support (RFC 4366)");
++#endif
+     }
+ }
+ 
+Index: httpd-2.2.11/modules/ssl/ssl_engine_config.c
+===================================================================
+--- httpd-2.2.11/modules/ssl/ssl_engine_config.c	(revision 768863)
++++ httpd-2.2.11/modules/ssl/ssl_engine_config.c	(working copy)
+@@ -169,6 +169,9 @@ static SSLSrvConfigRec *ssl_config_server_new(apr_
+     sc->vhost_id_len           = 0;     /* set during module init */
+     sc->session_cache_timeout  = UNSET;
+     sc->cipher_server_pref     = UNSET;
++#ifndef OPENSSL_NO_TLSEXT
++    sc->strict_sni_vhost_check = SSL_ENABLED_UNSET;
++#endif
+ 
+     modssl_ctx_init_proxy(sc, p);
+ 
+@@ -257,6 +260,9 @@ void *ssl_config_server_merge(apr_pool_t *p, void
+     cfgMergeBool(proxy_enabled);
+     cfgMergeInt(session_cache_timeout);
+     cfgMergeBool(cipher_server_pref);
++#ifndef OPENSSL_NO_TLSEXT
++    cfgMerge(strict_sni_vhost_check, SSL_ENABLED_UNSET);
++#endif
+ 
+     modssl_ctx_cfg_merge_proxy(base->proxy, add->proxy, mrg->proxy);
+ 
+@@ -1411,6 +1417,17 @@ const char *ssl_cmd_SSLUserName(cmd_parms *cmd, vo
+     return NULL;
+ }
+ 
++#ifndef OPENSSL_NO_TLSEXT
++const char  *ssl_cmd_SSLStrictSNIVHostCheck(cmd_parms *cmd, void *dcfg, int flag)
++{
++    SSLSrvConfigRec *sc = mySrvConfig(cmd->server);
++
++    sc->strict_sni_vhost_check = flag ? SSL_ENABLED_TRUE : SSL_ENABLED_FALSE;
++
++    return NULL;
++}
++#endif
++
+ void ssl_hook_ConfigTest(apr_pool_t *pconf, server_rec *s)
+ {
+     if (!ap_exists_config_define("DUMP_CERTS")) {
+Index: httpd-2.2.11/modules/ssl/ssl_engine_io.c
+===================================================================
+--- httpd-2.2.11/modules/ssl/ssl_engine_io.c	(revision 768863)
++++ httpd-2.2.11/modules/ssl/ssl_engine_io.c	(working copy)
+@@ -695,7 +695,7 @@ static apr_status_t ssl_io_input_read(bio_filter_i
+                  */
+                 ap_log_cerror(APLOG_MARK, APLOG_INFO, inctx->rc, c,
+                               "SSL library error %d reading data", ssl_err);
+-                ssl_log_ssl_error(APLOG_MARK, APLOG_INFO, c->base_server);
++                ssl_log_ssl_error(APLOG_MARK, APLOG_INFO, mySrvFromConn(c));
+ 
+             }
+             if (inctx->rc == APR_SUCCESS) {
+@@ -799,7 +799,7 @@ static apr_status_t ssl_filter_write(ap_filter_t *
+              */
+             ap_log_cerror(APLOG_MARK, APLOG_INFO, outctx->rc, c,
+                           "SSL library error %d writing data", ssl_err);
+-            ssl_log_ssl_error(APLOG_MARK, APLOG_INFO, c->base_server);
++            ssl_log_ssl_error(APLOG_MARK, APLOG_INFO, mySrvFromConn(c));
+         }
+         if (outctx->rc == APR_SUCCESS) {
+             outctx->rc = APR_EGENERAL;
+@@ -861,7 +861,7 @@ static apr_status_t ssl_io_filter_error(ap_filter_
+             ap_log_cerror(APLOG_MARK, APLOG_INFO, 0, f->c,
+                          "SSL handshake failed: HTTP spoken on HTTPS port; "
+                          "trying to send HTML error page");
+-            ssl_log_ssl_error(APLOG_MARK, APLOG_INFO, f->c->base_server);
++            ssl_log_ssl_error(APLOG_MARK, APLOG_INFO, sslconn->server);
+ 
+             sslconn->non_ssl_request = 1;
+             ssl_io_filter_disable(sslconn, f);
+@@ -971,11 +971,11 @@ static apr_status_t ssl_filter_io_shutdown(ssl_fil
+     SSL_smart_shutdown(ssl);
+ 
+     /* and finally log the fact that we've closed the connection */
+-    if (c->base_server->loglevel >= APLOG_INFO) {
++    if (mySrvFromConn(c)->loglevel >= APLOG_INFO) {
+         ap_log_cerror(APLOG_MARK, APLOG_INFO, 0, c,
+                       "Connection closed to child %ld with %s shutdown "
+                       "(server %s)",
+-                      c->id, type, ssl_util_vhostid(c->pool, c->base_server));
++                      c->id, type, ssl_util_vhostid(c->pool, mySrvFromConn(c)));
+     }
+ 
+     /* deallocate the SSL connection */
+@@ -1021,21 +1021,23 @@ static int ssl_io_filter_connect(ssl_filter_ctx_t
+ {
+     conn_rec *c         = (conn_rec *)SSL_get_app_data(filter_ctx->pssl);
+     SSLConnRec *sslconn = myConnConfig(c);
+-    SSLSrvConfigRec *sc = mySrvConfig(c->base_server);
++    SSLSrvConfigRec *sc;
+     X509 *cert;
+     int n;
+     int ssl_err;
+     long verify_result;
++    server_rec *server;
+ 
+     if (SSL_is_init_finished(filter_ctx->pssl)) {
+         return APR_SUCCESS;
+     }
+ 
++    server = mySrvFromConn(c);
+     if (sslconn->is_proxy) {
+         if ((n = SSL_connect(filter_ctx->pssl)) <= 0) {
+             ap_log_cerror(APLOG_MARK, APLOG_INFO, 0, c,
+                           "SSL Proxy connect failed");
+-            ssl_log_ssl_error(APLOG_MARK, APLOG_INFO, c->base_server);
++            ssl_log_ssl_error(APLOG_MARK, APLOG_INFO, server);
+             /* ensure that the SSL structures etc are freed, etc: */
+             ssl_filter_io_shutdown(filter_ctx, c, 1);
+             return HTTP_BAD_GATEWAY;
+@@ -1092,8 +1094,8 @@ static int ssl_io_filter_connect(ssl_filter_ctx_t
+             ap_log_cerror(APLOG_MARK, APLOG_INFO, rc, c,
+                           "SSL library error %d in handshake "
+                           "(server %s)", ssl_err,
+-                          ssl_util_vhostid(c->pool, c->base_server));
+-            ssl_log_ssl_error(APLOG_MARK, APLOG_INFO, c->base_server);
++                          ssl_util_vhostid(c->pool, server));
++            ssl_log_ssl_error(APLOG_MARK, APLOG_INFO, server);
+ 
+         }
+         if (inctx->rc == APR_SUCCESS) {
+@@ -1102,6 +1104,7 @@ static int ssl_io_filter_connect(ssl_filter_ctx_t
+ 
+         return ssl_filter_io_shutdown(filter_ctx, c, 1);
+     }
++    sc = mySrvConfig(sslconn->server);
+ 
+     /*
+      * Check for failed client authentication
+@@ -1127,7 +1130,7 @@ static int ssl_io_filter_connect(ssl_filter_ctx_t
+                           "accepting certificate based on "
+                           "\"SSLVerifyClient optional_no_ca\" "
+                           "configuration");
+-            ssl_log_ssl_error(APLOG_MARK, APLOG_INFO, c->base_server);
++            ssl_log_ssl_error(APLOG_MARK, APLOG_INFO, server);
+         }
+         else {
+             const char *error = sslconn->verify_error ?
+@@ -1137,7 +1140,7 @@ static int ssl_io_filter_connect(ssl_filter_ctx_t
+             ap_log_cerror(APLOG_MARK, APLOG_INFO, 0, c,
+                          "SSL client authentication failed: %s",
+                          error ? error : "unknown");
+-            ssl_log_ssl_error(APLOG_MARK, APLOG_INFO, c->base_server);
++            ssl_log_ssl_error(APLOG_MARK, APLOG_INFO, server);
+ 
+             return ssl_filter_io_shutdown(filter_ctx, c, 1);
+         }
+@@ -1809,7 +1812,7 @@ long ssl_io_data_cb(BIO *bio, int cmd,
+         return rc;
+     if ((c = (conn_rec *)SSL_get_app_data(ssl)) == NULL)
+         return rc;
+-    s = c->base_server;
++    s = mySrvFromConn(c);
+ 
+     if (   cmd == (BIO_CB_WRITE|BIO_CB_RETURN)
+         || cmd == (BIO_CB_READ |BIO_CB_RETURN) ) {
+Index: httpd-2.2.11/modules/ssl/ssl_engine_vars.c
+===================================================================
+--- httpd-2.2.11/modules/ssl/ssl_engine_vars.c	(revision 768863)
++++ httpd-2.2.11/modules/ssl/ssl_engine_vars.c	(working copy)
+@@ -320,6 +320,12 @@ static char *ssl_var_lookup_ssl(apr_pool_t *p, con
+     else if (ssl != NULL && strcEQ(var, "COMPRESS_METHOD")) {
+         result = ssl_var_lookup_ssl_compress_meth(ssl);
+     }
++#ifndef OPENSSL_NO_TLSEXT
++    else if (ssl != NULL && strcEQ(var, "TLS_SNI")) {
++        result = apr_pstrdup(p, SSL_get_servername(ssl,
++                                                   TLSEXT_NAMETYPE_host_name));
++    }
++#endif
+     return result;
+ }
+ 
+@@ -589,7 +595,7 @@ static char *ssl_var_lookup_ssl_cert_verify(apr_po
+     vrc   = SSL_get_verify_result(ssl);
+     xs    = SSL_get_peer_certificate(ssl);
+ 
+-    if (vrc == X509_V_OK && verr == NULL && vinfo == NULL && xs == NULL)
++    if (vrc == X509_V_OK && verr == NULL && xs == NULL)
+         /* no client verification done at all */
+         result = "NONE";
+     else if (vrc == X509_V_OK && verr == NULL && vinfo == NULL && xs != NULL)
+Index: httpd-2.2.11/modules/ssl/ssl_engine_kernel.c
+===================================================================
+--- httpd-2.2.11/modules/ssl/ssl_engine_kernel.c	(revision 768863)
++++ httpd-2.2.11/modules/ssl/ssl_engine_kernel.c	(working copy)
+@@ -31,6 +31,9 @@
+ #include "ssl_private.h"
+ 
+ static void ssl_configure_env(request_rec *r, SSLConnRec *sslconn);
++#ifndef OPENSSL_NO_TLSEXT
++static int ssl_find_vhost(void *servername, conn_rec *c, server_rec *s);
++#endif
+ 
+ /*
+  *  Post Read Request Handler
+@@ -39,6 +42,9 @@ int ssl_hook_ReadReq(request_rec *r)
+ {
+     SSLConnRec *sslconn = myConnConfig(r->connection);
+     SSL *ssl;
++#ifndef OPENSSL_NO_TLSEXT
++    const char *servername;
++#endif
+ 
+     if (!sslconn) {
+         return DECLINED;
+@@ -87,6 +93,51 @@ int ssl_hook_ReadReq(request_rec *r)
+     if (!ssl) {
+         return DECLINED;
+     }
++#ifndef OPENSSL_NO_TLSEXT
++    if ((servername = SSL_get_servername(ssl, TLSEXT_NAMETYPE_host_name))) {
++        char *host, *scope_id;
++        apr_port_t port;
++        apr_status_t rv;
++
++        /*
++         * The SNI extension supplied a hostname. So don't accept requests
++         * with either no hostname or a different hostname.
++         */
++        if (!r->hostname) {
++            ap_log_error(APLOG_MARK, APLOG_ERR, 0, r->server,
++                        "Hostname %s provided via SNI, but no hostname"
++                        " provided in HTTP request", servername);
++            return HTTP_BAD_REQUEST;
++        }
++        rv = apr_parse_addr_port(&host, &scope_id, &port, r->hostname, r->pool);
++        if (rv != APR_SUCCESS || scope_id) {
++            return HTTP_BAD_REQUEST;
++        }
++        if (strcmp(host, servername)) {
++            ap_log_error(APLOG_MARK, APLOG_ERR, 0, r->server,
++                        "Hostname %s provided via SNI and hostname %s provided"
++                        " via HTTP are different", servername, host);
++            return HTTP_BAD_REQUEST;
++        }
++    }
++    else if ((((mySrvConfig(r->server))->strict_sni_vhost_check
++                == SSL_ENABLED_TRUE)
++             || (mySrvConfig(sslconn->server))->strict_sni_vhost_check
++                == SSL_ENABLED_TRUE)
++             && r->connection->vhost_lookup_data) {
++        /*
++         * We are using a name based configuration here, but no hostname was
++         * provided via SNI. Don't allow that if are requested to do strict
++         * checking. Check whether this strict checking was setup either in the
++         * server config we used for handshaking or in our current server.
++         * This should avoid insecure configuration by accident.
++         */
++        ap_log_error(APLOG_MARK, APLOG_ERR, 0, r->server,
++                     "No hostname was provided via SNI for a name based"
++                     " virtual host");
++        return HTTP_FORBIDDEN;
++    }
++#endif
+     SSL_set_app_data2(ssl, r);
+ 
+     /*
+@@ -155,10 +206,11 @@ static void ssl_configure_env(request_rec *r, SSLC
+  */
+ int ssl_hook_Access(request_rec *r)
+ {
+-    SSLDirConfigRec *dc = myDirConfig(r);
+-    SSLSrvConfigRec *sc = mySrvConfig(r->server);
+-    SSLConnRec *sslconn = myConnConfig(r->connection);
+-    SSL *ssl            = sslconn ? sslconn->ssl : NULL;
++    SSLDirConfigRec *dc         = myDirConfig(r);
++    SSLSrvConfigRec *sc         = mySrvConfig(r->server);
++    SSLConnRec *sslconn         = myConnConfig(r->connection);
++    SSL *ssl                    = sslconn ? sslconn->ssl : NULL;
++    server_rec *handshakeserver = sslconn ? sslconn->server : NULL;
+     SSL_CTX *ctx = NULL;
+     apr_array_header_t *requires;
+     ssl_require_t *ssl_requires;
+@@ -252,7 +304,7 @@ int ssl_hook_Access(request_rec *r)
+      *   has to enable this via ``SSLOptions +OptRenegotiate''. So we do no
+      *   implicit optimizations.
+      */
+-    if (dc->szCipherSuite) {
++    if (dc->szCipherSuite || (r->server != handshakeserver)) {
+         /* remember old state */
+ 
+         if (dc->nOptions & SSL_OPT_OPTRENEGOTIATE) {
+@@ -267,7 +319,10 @@ int ssl_hook_Access(request_rec *r)
+         }
+ 
+         /* configure new state */
+-        if (!modssl_set_cipher_list(ssl, dc->szCipherSuite)) {
++        if ((dc->szCipherSuite || sc->server->auth.cipher_suite) &&
++            !modssl_set_cipher_list(ssl, dc->szCipherSuite ?
++                                         dc->szCipherSuite :
++                                         sc->server->auth.cipher_suite)) {
+             ap_log_error(APLOG_MARK, APLOG_WARNING, 0,
+                          r->server,
+                          "Unable to reconfigure (per-directory) "
+@@ -334,8 +389,13 @@ int ssl_hook_Access(request_rec *r)
+             sk_SSL_CIPHER_free(cipher_list_old);
+         }
+ 
+-        /* tracing */
+         if (renegotiate) {
++#ifdef SSL_OP_CIPHER_SERVER_PREFERENCE
++            if (sc->cipher_server_pref == TRUE) {
++                SSL_set_options(ssl, SSL_OP_CIPHER_SERVER_PREFERENCE);
++            }
++#endif
++            /* tracing */
+             ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server,
+                          "Reconfigured cipher suite will force renegotiation");
+         }
+@@ -348,24 +408,22 @@ int ssl_hook_Access(request_rec *r)
+      * function and not by OpenSSL internally (and our function is aware of
+      * both the per-server and per-directory contexts). So we cannot ask
+      * OpenSSL about the currently verify depth. Instead we remember it in our
+-     * ap_ctx attached to the SSL* of OpenSSL.  We've to force the
++     * SSLConnRec attached to the SSL* of OpenSSL.  We've to force the
+      * renegotiation if the reconfigured/new verify depth is less than the
+      * currently active/remembered verify depth (because this means more
+      * restriction on the certificate chain).
+      */
+-    if (dc->nVerifyDepth != UNSET) {
+-        /* XXX: doesnt look like sslconn->verify_depth is actually used */
+-        if (!(n = sslconn->verify_depth)) {
+-            sslconn->verify_depth = n = sc->server->auth.verify_depth;
+-        }
+-
+-        /* determine whether a renegotiation has to be forced */
+-        if (dc->nVerifyDepth < n) {
+-            renegotiate = TRUE;
+-            ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server,
+-                         "Reduced client verification depth will force "
+-                         "renegotiation");
+-        }
++    n = sslconn->verify_depth ?
++        sslconn->verify_depth :
++        (mySrvConfig(handshakeserver))->server->auth.verify_depth;
++    /* determine the new depth */
++    sslconn->verify_depth = (dc->nVerifyDepth != UNSET) ?
++                            dc->nVerifyDepth : sc->server->auth.verify_depth;
++    if (sslconn->verify_depth < n) {
++        renegotiate = TRUE;
++        ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server,
++                     "Reduced client verification depth will force "
++                     "renegotiation");
+     }
+ 
+     /*
+@@ -382,18 +440,22 @@ int ssl_hook_Access(request_rec *r)
+      * verification but at least skip the I/O-intensive renegotation
+      * handshake.
+      */
+-    if (dc->nVerifyClient != SSL_CVERIFY_UNSET) {
++    if ((dc->nVerifyClient != SSL_CVERIFY_UNSET) ||
++        (sc->server->auth.verify_mode != SSL_CVERIFY_UNSET)) {
+         /* remember old state */
+         verify_old = SSL_get_verify_mode(ssl);
+         /* configure new state */
+         verify = SSL_VERIFY_NONE;
+ 
+-        if (dc->nVerifyClient == SSL_CVERIFY_REQUIRE) {
++        if ((dc->nVerifyClient == SSL_CVERIFY_REQUIRE) ||
++            (sc->server->auth.verify_mode == SSL_CVERIFY_REQUIRE)) {
+             verify |= SSL_VERIFY_PEER_STRICT;
+         }
+ 
+         if ((dc->nVerifyClient == SSL_CVERIFY_OPTIONAL) ||
+-            (dc->nVerifyClient == SSL_CVERIFY_OPTIONAL_NO_CA))
++            (dc->nVerifyClient == SSL_CVERIFY_OPTIONAL_NO_CA) ||
++            (sc->server->auth.verify_mode == SSL_CVERIFY_OPTIONAL) ||
++            (sc->server->auth.verify_mode == SSL_CVERIFY_OPTIONAL_NO_CA))
+         {
+             verify |= SSL_VERIFY_PEER;
+         }
+@@ -430,6 +492,45 @@ int ssl_hook_Access(request_rec *r)
+                              renegotiate_quick ? "quick " : "");
+              }
+         }
++        /* If we're handling a request for a vhost other than the default one,
++         * then we need to make sure that client authentication is properly
++         * enforced. For clients supplying an SNI extension, the peer
++         * certificate verification has happened in the handshake already
++         * (and r->server == handshakeserver). For non-SNI requests,
++         * an additional check is needed here. If client authentication
++         * is configured as mandatory, then we can only proceed if the
++         * CA list doesn't have to be changed (OpenSSL doesn't provide
++         * an option to change the list for an existing session).
++         */
++        if ((r->server != handshakeserver)
++            && renegotiate
++            && ((verify & SSL_VERIFY_PEER) ||
++                (verify & SSL_VERIFY_FAIL_IF_NO_PEER_CERT))) {
++            SSLSrvConfigRec *hssc = mySrvConfig(handshakeserver);
++
++#define MODSSL_CFG_CA_NE(f, sc1, sc2) \
++            (sc1->server->auth.f && \
++             (!sc2->server->auth.f || \
++              strNE(sc1->server->auth.f, sc2->server->auth.f)))
++
++            if (MODSSL_CFG_CA_NE(ca_cert_file, sc, hssc) ||
++                MODSSL_CFG_CA_NE(ca_cert_path, sc, hssc)) {
++                if (verify & SSL_VERIFY_FAIL_IF_NO_PEER_CERT) {
++                    ap_log_rerror(APLOG_MARK, APLOG_INFO, 0, r,
++                         "Non-default virtual host with SSLVerify set to "
++                         "'require' and VirtualHost-specific CA certificate "
++                         "list is only available to clients with TLS server "
++                         "name indication (SNI) support");
++                    modssl_set_verify(ssl, verify_old, NULL);
++                    return HTTP_FORBIDDEN;
++                } else
++                    /* let it pass, possibly with an "incorrect" peer cert,
++                     * so make sure the SSL_CLIENT_VERIFY environment variable
++                     * will indicate partial success only, later on.
++                     */
++                    sslconn->verify_info = "GENEROUS";
++            }
++        }
+     }
+ 
+     /*
+@@ -666,8 +767,10 @@ int ssl_hook_Access(request_rec *r)
+         /*
+          * Finally check for acceptable renegotiation results
+          */
+-        if (dc->nVerifyClient != SSL_CVERIFY_NONE) {
+-            BOOL do_verify = (dc->nVerifyClient == SSL_CVERIFY_REQUIRE);
++        if ((dc->nVerifyClient != SSL_CVERIFY_NONE) ||
++            (sc->server->auth.verify_mode != SSL_CVERIFY_NONE)) {
++            BOOL do_verify = ((dc->nVerifyClient == SSL_CVERIFY_REQUIRE) ||
++                              (sc->server->auth.verify_mode == SSL_CVERIFY_REQUIRE));
+ 
+             if (do_verify && (SSL_get_verify_result(ssl) != X509_V_OK)) {
+                 ap_log_error(APLOG_MARK, APLOG_ERR, 0, r->server,
+@@ -997,6 +1100,9 @@ int ssl_hook_Fixup(request_rec *r)
+     SSLDirConfigRec *dc = myDirConfig(r);
+     apr_table_t *env = r->subprocess_env;
+     char *var, *val = "";
++#ifndef OPENSSL_NO_TLSEXT
++    const char *servername;
++#endif
+     STACK_OF(X509) *peer_certs;
+     SSL *ssl;
+     int i;
+@@ -1018,6 +1124,13 @@ int ssl_hook_Fixup(request_rec *r)
+     /* the always present HTTPS (=HTTP over SSL) flag! */
+     apr_table_setn(env, "HTTPS", "on");
+ 
++#ifndef OPENSSL_NO_TLSEXT
++    /* add content of SNI TLS extension (if supplied with ClientHello) */
++    if ((servername = SSL_get_servername(ssl, TLSEXT_NAMETYPE_host_name))) {
++        apr_table_set(env, "SSL_TLS_SNI", servername);
++    }
++#endif
++
+     /* standard SSL environment variables */
+     if (dc->nOptions & SSL_OPT_STDENVVARS) {
+         for (i = 0; ssl_hook_Fixup_vars[i]; i++) {
+@@ -1105,7 +1218,7 @@ int ssl_hook_Fixup(request_rec *r)
+ RSA *ssl_callback_TmpRSA(SSL *ssl, int export, int keylen)
+ {
+     conn_rec *c = (conn_rec *)SSL_get_app_data(ssl);
+-    SSLModConfigRec *mc = myModConfig(c->base_server);
++    SSLModConfigRec *mc = myModConfigFromConn(c);
+     int idx;
+ 
+     ap_log_cerror(APLOG_MARK, APLOG_DEBUG, 0, c,
+@@ -1137,7 +1250,7 @@ RSA *ssl_callback_TmpRSA(SSL *ssl, int export, int
+ DH *ssl_callback_TmpDH(SSL *ssl, int export, int keylen)
+ {
+     conn_rec *c = (conn_rec *)SSL_get_app_data(ssl);
+-    SSLModConfigRec *mc = myModConfig(c->base_server);
++    SSLModConfigRec *mc = myModConfigFromConn(c);
+     int idx;
+ 
+     ap_log_cerror(APLOG_MARK, APLOG_DEBUG, 0, c,
+@@ -1166,8 +1279,8 @@ int ssl_callback_SSLVerify(int ok, X509_STORE_CTX
+     SSL *ssl = X509_STORE_CTX_get_ex_data(ctx,
+                                           SSL_get_ex_data_X509_STORE_CTX_idx());
+     conn_rec *conn      = (conn_rec *)SSL_get_app_data(ssl);
+-    server_rec *s       = conn->base_server;
+     request_rec *r      = (request_rec *)SSL_get_app_data2(ssl);
++    server_rec *s       = r ? r->server : mySrvFromConn(conn);
+ 
+     SSLSrvConfigRec *sc = mySrvConfig(s);
+     SSLDirConfigRec *dc = r ? myDirConfig(r) : NULL;
+@@ -1290,7 +1403,10 @@ int ssl_callback_SSLVerify(int ok, X509_STORE_CTX
+ 
+ int ssl_callback_SSLVerify_CRL(int ok, X509_STORE_CTX *ctx, conn_rec *c)
+ {
+-    server_rec *s       = c->base_server;
++    SSL *ssl = X509_STORE_CTX_get_ex_data(ctx,
++                                          SSL_get_ex_data_X509_STORE_CTX_idx());
++    request_rec *r      = (request_rec *)SSL_get_app_data2(ssl);
++    server_rec *s       = r ? r->server : mySrvFromConn(c);
+     SSLSrvConfigRec *sc = mySrvConfig(s);
+     SSLConnRec *sslconn = myConnConfig(c);
+     modssl_ctx_t *mctx  = myCtxConfig(sslconn, sc);
+@@ -1515,7 +1631,7 @@ static void modssl_proxy_info_log(server_rec *s,
+ int ssl_callback_proxy_cert(SSL *ssl, MODSSL_CLIENT_CERT_CB_ARG_TYPE **x509, EVP_PKEY **pkey)
+ {
+     conn_rec *c = (conn_rec *)SSL_get_app_data(ssl);
+-    server_rec *s = c->base_server;
++    server_rec *s = mySrvFromConn(c);
+     SSLSrvConfigRec *sc = mySrvConfig(s);
+     X509_NAME *ca_name, *issuer;
+     X509_INFO *info;
+@@ -1613,7 +1729,7 @@ int ssl_callback_NewSessionCacheEntry(SSL *ssl, SS
+ {
+     /* Get Apache context back through OpenSSL context */
+     conn_rec *conn      = (conn_rec *)SSL_get_app_data(ssl);
+-    server_rec *s       = conn->base_server;
++    server_rec *s       = mySrvFromConn(conn);
+     SSLSrvConfigRec *sc = mySrvConfig(s);
+     long timeout        = sc->session_cache_timeout;
+     BOOL rc;
+@@ -1661,7 +1777,7 @@ SSL_SESSION *ssl_callback_GetSessionCacheEntry(SSL
+ {
+     /* Get Apache context back through OpenSSL context */
+     conn_rec *conn = (conn_rec *)SSL_get_app_data(ssl);
+-    server_rec *s  = conn->base_server;
++    server_rec *s  = mySrvFromConn(conn);
+     SSL_SESSION *session;
+ 
+     /*
+@@ -1739,7 +1855,7 @@ void ssl_callback_LogTracingState(MODSSL_INFO_CB_A
+         return;
+     }
+ 
+-    s = c->base_server;
++    s = mySrvFromConn(c);
+     if (!(sc = mySrvConfig(s))) {
+         return;
+     }
+@@ -1810,3 +1926,138 @@ void ssl_callback_LogTracingState(MODSSL_INFO_CB_A
+     }
+ }
+ 
++#ifndef OPENSSL_NO_TLSEXT
++/*
++ * This callback function is executed when OpenSSL encounters an extended
++ * client hello with a server name indication extension ("SNI", cf. RFC 4366).
++ */
++int ssl_callback_ServerNameIndication(SSL *ssl, int *al, modssl_ctx_t *mctx)
++{
++    const char *servername =
++                SSL_get_servername(ssl, TLSEXT_NAMETYPE_host_name);
++
++    if (servername) {
++        conn_rec *c = (conn_rec *)SSL_get_app_data(ssl);
++        if (c) {
++            if (ap_vhost_iterate_given_conn(c, ssl_find_vhost,
++                                            (void *)servername)) {
++                ap_log_cerror(APLOG_MARK, APLOG_DEBUG, 0, c,
++                              "SSL virtual host for servername %s found",
++                              servername);
++                return SSL_TLSEXT_ERR_OK;
++            }
++            else {
++                ap_log_cerror(APLOG_MARK, APLOG_DEBUG, 0, c,
++                              "No matching SSL virtual host for servername "
++                              "%s found (using default/first virtual host)",
++                              servername);
++                return SSL_TLSEXT_ERR_ALERT_WARNING;
++            }
++        }
++    }
++
++    return SSL_TLSEXT_ERR_NOACK;
++}
++
++/*
++ * Find a (name-based) SSL virtual host where either the ServerName
++ * or one of the ServerAliases matches the supplied name (to be used
++ * with ap_vhost_iterate_given_conn())
++ */
++static int ssl_find_vhost(void *servername, conn_rec *c, server_rec *s) 
++{
++    SSLSrvConfigRec *sc;
++    SSL *ssl;
++    BOOL found = FALSE;
++    apr_array_header_t *names;
++    int i;
++    SSLConnRec *sslcon;
++
++    /* check ServerName */
++    if (!strcasecmp(servername, s->server_hostname)) {
++        found = TRUE;
++    }
++
++    /* 
++     * if not matched yet, check ServerAlias entries
++     * (adapted from vhost.c:matches_aliases())
++     */
++    if (!found) {
++        names = s->names;
++        if (names) {
++            char **name = (char **)names->elts;
++            for (i = 0; i < names->nelts; ++i) {
++                if (!name[i])
++                    continue;
++                if (!strcasecmp(servername, name[i])) {
++                    found = TRUE;
++                    break;
++                }
++            }
++        }
++    }
++
++    /* if still no match, check ServerAlias entries with wildcards */
++    if (!found) {
++        names = s->wild_names;
++        if (names) {
++            char **name = (char **)names->elts;
++            for (i = 0; i < names->nelts; ++i) {
++                if (!name[i])
++                    continue;
++                if (!ap_strcasecmp_match(servername, name[i])) {
++                    found = TRUE;
++                    break;
++                }
++            }
++        }
++    }
++
++    /* set SSL_CTX (if matched) */
++    sslcon = myConnConfig(c);
++    if (found && (ssl = sslcon->ssl) &&
++        (sc = mySrvConfig(s))) {
++        SSL_set_SSL_CTX(ssl, sc->server->ssl_ctx);
++        /*
++         * SSL_set_SSL_CTX() only deals with the server cert,
++         * so we need to duplicate a few additional settings
++         * from the ctx by hand
++         */
++        SSL_set_options(ssl, SSL_CTX_get_options(ssl->ctx));
++        if ((SSL_get_verify_mode(ssl) == SSL_VERIFY_NONE) ||
++            (SSL_num_renegotiations(ssl) == 0)) {
++           /*
++            * Only initialize the verification settings from the ctx
++            * if they are not yet set, or if we're called when a new
++            * SSL connection is set up (num_renegotiations == 0).
++            * Otherwise, we would possibly reset a per-directory
++            * configuration which was put into effect by ssl_hook_Access.
++            */
++            SSL_set_verify(ssl, SSL_CTX_get_verify_mode(ssl->ctx),
++                           SSL_CTX_get_verify_callback(ssl->ctx));
++        }
++
++        /*
++         * Save the found server into our SSLConnRec for later
++         * retrieval
++         */
++        sslcon->server = s;
++
++        /*
++         * There is one special filter callback, which is set
++         * very early depending on the base_server's log level.
++         * If this is not the first vhost we're now selecting
++         * (and the first vhost doesn't use APLOG_DEBUG), then
++         * we need to set that callback here.
++         */
++        if (s->loglevel >= APLOG_DEBUG) {
++            BIO_set_callback(SSL_get_rbio(ssl), ssl_io_data_cb);
++            BIO_set_callback_arg(SSL_get_rbio(ssl), (void *)ssl);
++        }
++
++        return 1;
++    }
++
++    return 0;
++}
++#endif
+Index: httpd-2.2.11/modules/ssl/mod_ssl.c
+===================================================================
+--- httpd-2.2.11/modules/ssl/mod_ssl.c	(revision 768863)
++++ httpd-2.2.11/modules/ssl/mod_ssl.c	(working copy)
+@@ -145,6 +145,10 @@ static const command_rec ssl_config_cmds[] = {
+                 "Use the server's cipher ordering preference")
+     SSL_CMD_ALL(UserName, TAKE1,
+                 "Set user name to SSL variable value")
++#ifndef OPENSSL_NO_TLSEXT
++    SSL_CMD_SRV(StrictSNIVHostCheck, FLAG,
++                "Strict SNI virtual host checking")
++#endif
+ 
+     /*
+      * Proxy configuration for remote SSL connections
+@@ -295,6 +299,8 @@ static SSLConnRec *ssl_init_connection_ctx(conn_re
+ 
+     sslconn = apr_pcalloc(c->pool, sizeof(*sslconn));
+ 
++    sslconn->server = c->base_server;
++
+     myConnConfigSet(c, sslconn);
+ 
+     return sslconn;
+@@ -302,9 +308,10 @@ static SSLConnRec *ssl_init_connection_ctx(conn_re
+ 
+ int ssl_proxy_enable(conn_rec *c)
+ {
+-    SSLSrvConfigRec *sc = mySrvConfig(c->base_server);
++    SSLSrvConfigRec *sc;
+ 
+     SSLConnRec *sslconn = ssl_init_connection_ctx(c);
++    sc = mySrvConfig(sslconn->server);
+ 
+     if (!sc->proxy_enabled) {
+         ap_log_cerror(APLOG_MARK, APLOG_ERR, 0, c,
+@@ -322,10 +329,16 @@ int ssl_proxy_enable(conn_rec *c)
+ 
+ int ssl_engine_disable(conn_rec *c)
+ {
+-    SSLSrvConfigRec *sc = mySrvConfig(c->base_server);
++    SSLSrvConfigRec *sc;
+ 
+-    SSLConnRec *sslconn;
++    SSLConnRec *sslconn = myConnConfig(c);
+ 
++    if (sslconn) {
++        sc = mySrvConfig(sslconn->server);
++    }
++    else {
++        sc = mySrvConfig(c->base_server);
++    }
+     if (sc->enabled == SSL_ENABLED_FALSE) {
+         return 0;
+     }
+@@ -339,21 +352,24 @@ int ssl_engine_disable(conn_rec *c)
+ 
+ int ssl_init_ssl_connection(conn_rec *c)
+ {
+-    SSLSrvConfigRec *sc = mySrvConfig(c->base_server);
++    SSLSrvConfigRec *sc;
+     SSL *ssl;
+     SSLConnRec *sslconn = myConnConfig(c);
+     char *vhost_md5;
+     modssl_ctx_t *mctx;
++    server_rec *server;
+ 
++    if (!sslconn) {
++        sslconn = ssl_init_connection_ctx(c);
++    }
++    server = sslconn->server;
++    sc = mySrvConfig(server);
++
+     /*
+      * Seed the Pseudo Random Number Generator (PRNG)
+      */
+-    ssl_rand_seed(c->base_server, c->pool, SSL_RSCTX_CONNECT, "");
++    ssl_rand_seed(server, c->pool, SSL_RSCTX_CONNECT, "");
+ 
+-    if (!sslconn) {
+-        sslconn = ssl_init_connection_ctx(c);
+-    }
+-
+     mctx = sslconn->is_proxy ? sc->proxy : sc->server;
+ 
+     /*
+@@ -365,7 +381,7 @@ int ssl_init_ssl_connection(conn_rec *c)
+         ap_log_cerror(APLOG_MARK, APLOG_ERR, 0, c,
+                       "Unable to create a new SSL connection from the SSL "
+                       "context");
+-        ssl_log_ssl_error(APLOG_MARK, APLOG_ERR, c->base_server);
++        ssl_log_ssl_error(APLOG_MARK, APLOG_ERR, server);
+ 
+         c->aborted = 1;
+ 
+@@ -380,7 +396,7 @@ int ssl_init_ssl_connection(conn_rec *c)
+     {
+         ap_log_cerror(APLOG_MARK, APLOG_ERR, 0, c,
+                       "Unable to set session id context to `%s'", vhost_md5);
+-        ssl_log_ssl_error(APLOG_MARK, APLOG_ERR, c->base_server);
++        ssl_log_ssl_error(APLOG_MARK, APLOG_ERR, server);
+ 
+         c->aborted = 1;
+ 
+@@ -429,9 +445,15 @@ static apr_port_t ssl_hook_default_port(const requ
+ 
+ static int ssl_hook_pre_connection(conn_rec *c, void *csd)
+ {
+-    SSLSrvConfigRec *sc = mySrvConfig(c->base_server);
++    SSLSrvConfigRec *sc;
+     SSLConnRec *sslconn = myConnConfig(c);
+ 
++    if (sslconn) {
++        sc = mySrvConfig(sslconn->server);
++    }
++    else {
++        sc = mySrvConfig(c->base_server);
++    }
+     /*
+      * Immediately stop processing if SSL is disabled for this connection
+      */
+Index: httpd-2.2.11/modules/ssl/ssl_toolkit_compat.h
+===================================================================
+--- httpd-2.2.11/modules/ssl/ssl_toolkit_compat.h	(revision 768863)
++++ httpd-2.2.11/modules/ssl/ssl_toolkit_compat.h	(working copy)
+@@ -264,6 +264,12 @@ typedef void (*modssl_popfree_fn)(char *data);
+ #define SSL_SESS_CACHE_NO_INTERNAL  SSL_SESS_CACHE_NO_INTERNAL_LOOKUP
+ #endif
+ 
++#ifndef OPENSSL_NO_TLSEXT
++#ifndef SSL_CTRL_SET_TLSEXT_HOSTNAME
++#define OPENSSL_NO_TLSEXT
++#endif
++#endif
++
+ #endif /* SSL_TOOLKIT_COMPAT_H */
+ 
+ /** @} */
+Index: httpd-2.2.11/docs/manual/mod/mod_ssl.html.en
+===================================================================
+--- httpd-2.2.11/docs/manual/mod/mod_ssl.html.en	(revision 768863)
++++ httpd-2.2.11/docs/manual/mod/mod_ssl.html.en	(working copy)
+@@ -75,6 +75,7 @@ to provide the cryptography engine.</p>
+ <li><img alt="" src="../images/down.gif" /> <a href="#sslrequiressl">SSLRequireSSL</a></li>
+ <li><img alt="" src="../images/down.gif" /> <a href="#sslsessioncache">SSLSessionCache</a></li>
+ <li><img alt="" src="../images/down.gif" /> <a href="#sslsessioncachetimeout">SSLSessionCacheTimeout</a></li>
++<li><img alt="" src="../images/down.gif" /> <a href="#sslstrictsnivhostcheck">SSLStrictSNIVHostCheck</a></li>
+ <li><img alt="" src="../images/down.gif" /> <a href="#sslusername">SSLUserName</a></li>
+ <li><img alt="" src="../images/down.gif" /> <a href="#sslverifyclient">SSLVerifyClient</a></li>
+ <li><img alt="" src="../images/down.gif" /> <a href="#sslverifydepth">SSLVerifyDepth</a></li>
+@@ -1613,6 +1614,37 @@ SSLSessionCacheTimeout 600
+ 
+ </div>
+ <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
++<div class="directive-section"><h2><a name="SSLStrictSNIVHostCheck" id="SSLStrictSNIVHostCheck">SSLStrictSNIVHostCheck</a> <a name="sslstrictsnivhostcheck" id="sslstrictsnivhostcheck">Directive</a></h2>
++<table class="directive">
++<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Whether to allow non SNI clients to access a name based virtual
++host.
++</td></tr>
++<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>SSLStrictSNIVHostCheck on|off</code></td></tr>
++<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>SSLStrictSNIVHostCheck off</code></td></tr>
++<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
++<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Extension</td></tr>
++<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_ssl</td></tr>
++</table>
++<p>
++This directive sets whether a non SNI client is allowed to access a name based
++virtual host. If set to <code>on</code> in the non default name based virtual
++host, non SNI clients are not allowed to access this particular virtual host.
++If set to <code>on</code> in the default name based virtual host, non SNI
++clients are not allowed to access any name based virtual host belonging to
++this IP / port combination.
++</p>
++
++<div class="warning"><p>
++This option is only available if httpd was compiled against an SNI capable
++version of OpenSSL.
++</p></div>
++
++<div class="example"><h3>Example</h3><p><code>
++SSLStrictSNIVHostCheck on
++</code></p></div>
++
++</div>
++<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
+ <div class="directive-section"><h2><a name="SSLUserName" id="SSLUserName">SSLUserName</a> <a name="sslusername" id="sslusername">Directive</a></h2>
+ <table class="directive">
+ <tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Variable name to determine user name</td></tr>
+@@ -1717,6 +1749,6 @@ SSLVerifyDepth 10
+ <div class="bottomlang">
+ <p><span>Available Languages: </span><a href="../en/mod/mod_ssl.html" title="English">&nbsp;en&nbsp;</a></p>
+ </div><div id="footer">
+-<p class="apache">Copyright 2008 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
++<p class="apache">Copyright 2009 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
+ <p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
+ </body></html>
Index: /tags/fc9-eol/server/common/patches/httpd-suexec-scripts.patch
===================================================================
--- /tags/fc9-eol/server/common/patches/httpd-suexec-scripts.patch	(revision 1257)
+++ /tags/fc9-eol/server/common/patches/httpd-suexec-scripts.patch	(revision 1257)
@@ -0,0 +1,310 @@
+# scripts.mit.edu httpd suexec patch
+# Copyright (C) 2006, 2007, 2008  Jeff Arnold <jbarnold@mit.edu>,
+#                                 Joe Presbrey <presbrey@mit.edu>,
+#                                 Anders Kaseorg <andersk@mit.edu>,
+#                                 Geoffrey Thomas <geofft@mit.edu>
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
+#
+# See /COPYRIGHT in this repository for more information.
+#
+--- httpd-2.2.2/support/Makefile.in.old	2005-07-06 19:15:34.000000000 -0400
++++ httpd-2.2.2/support/Makefile.in	2007-01-20 17:12:51.000000000 -0500
+@@ -60,7 +60,7 @@
+
+ suexec_OBJECTS = suexec.lo
+ suexec: $(suexec_OBJECTS)
+-	$(LINK) $(suexec_OBJECTS)
++	$(LINK) -lselinux $(suexec_OBJECTS)
+
+ htcacheclean_OBJECTS = htcacheclean.lo
+ htcacheclean: $(htcacheclean_OBJECTS)
+--- httpd-2.2.2/configure.in.old	2007-07-17 10:48:25.000000000 -0400
++++ httpd-2.2.2/configure.in	2008-08-29 08:15:41.000000000 -0400
+@@ -559,6 +559,10 @@
+ APACHE_HELP_STRING(--with-suexec-userdir,User subdirectory),[
+   AC_DEFINE_UNQUOTED(AP_USERDIR_SUFFIX, "$withval", [User subdirectory] ) ] )
+ 
++AC_ARG_WITH(suexec-trusteddir,
++APACHE_HELP_STRING(--with-suexec-trusteddir,Trusted SuExec directory),[
++  AC_DEFINE_UNQUOTED(AP_TRUSTED_DIRECTORY, "$withval", [Trusted SuExec directory] ) ] )
++
+ AC_ARG_WITH(suexec-docroot,
+ APACHE_HELP_STRING(--with-suexec-docroot,SuExec root directory),[
+   AC_DEFINE_UNQUOTED(AP_DOC_ROOT, "$withval", [SuExec root directory] ) ] )
+--- httpd-2.2.2/support/suexec.c.old	2006-04-21 21:53:06.000000000 -0400
++++ httpd-2.2.2/support/suexec.c	2007-05-22 10:32:04.000000000 -0400
+@@ -30,6 +30,9 @@
+  *
+  */
+ 
++#define STATIC_CAT_PATH "/usr/local/bin/static-cat"
++#define PHP_PATH "/usr/bin/php-cgi"
++
+ #include "apr.h"
+ #include "ap_config.h"
+ #include "suexec.h"
+@@ -46,6 +48,7 @@
+ #include <stdio.h>
+ #include <stdarg.h>
+ #include <stdlib.h>
++#include <selinux/selinux.h>
+ 
+ #ifdef HAVE_PWD_H
+ #include <pwd.h>
+@@ -95,6 +98,7 @@
+ {
+     /* variable name starts with */
+     "HTTP_",
++    "HTTPS_",
+     "SSL_",
+ 
+     /* variable name is */
+@@ -245,9 +250,67 @@
+     environ = cleanenv;
+ }
+ 
++static const char *static_extensions[] = {
++    "html",
++    "css",
++    "gif",
++    "jpg",
++    "png",
++    "htm",
++    "jpeg",
++    "js",
++    "ico",
++    "xml",
++    "xsl",
++    "tiff",
++    "tif",
++    "tgz",
++    "tar",
++    "jar",
++    "zip",
++    "pdf",
++    "ps",
++    "doc",
++    "xls",
++    "ppt",
++    "swf",
++    "mp3",
++    "mov",
++    "wmv",
++    "mpg",
++    "mpeg",
++    "avi",
++    "il",
++    "JPG",
++    "xhtml",
++    "svg",
++    "xaml",
++    "xap",
++    NULL
++};
++
++static int is_static_extension(const char *file)
++{
++    const char *extension = strrchr(file, '.');
++    const char **p;
++    if (extension == NULL) return 0;
++    for (p = static_extensions; *p; ++p) {
++        if (strcmp(extension + 1, *p) == 0) return 1;
++    }
++    return 0;
++}
++
++static int is_php_extension(const char *file)
++{
++    const char *extension = strrchr(file, '.');
++    if (extension == NULL) return 0;
++    return strcmp(extension + 1, "php") == 0;
++}
++
+ int main(int argc, char *argv[])
+ {
+     int userdir = 0;        /* ~userdir flag             */
++    int trusteddir = 0;     /* TRUSTED_DIRECTORY flag    */
+     uid_t uid;              /* user information          */
+     gid_t gid;              /* target group placeholder  */
+     char *target_uname;     /* target user name          */
+@@ -268,6 +331,7 @@
+      * Start with a "clean" environment
+      */
+     clean_env();
++    setenv("JAVA_TOOL_OPTIONS", "-Xmx128M", 1); /* scripts.mit.edu local hack */
+
+     prog = argv[0];
+     /*
+@@ -350,6 +406,20 @@
+ #endif /*_OSD_POSIX*/
+ 
+     /*
++     * First check if this is an absolute path to the directory
++     * of trusted executables. These are supposed to be security
++     * audited to check parameters and validity on their own...
++     */
++    if (strstr(cmd, AP_TRUSTED_DIRECTORY) == cmd) {
++        if (strstr(cmd, "/../") != NULL) {
++            log_err("invalid command (%s)\n", cmd);
++            exit(104);
++        }
++        trusteddir = 1;
++        goto TRUSTED_DIRECTORY;
++    }
++
++    /*
+      * Check for a leading '/' (absolute path) in the command to be executed,
+      * or attempts to back up out of the current directory,
+      * to protect against attacks.  If any are
+@@ -371,6 +441,7 @@
+         userdir = 1;
+     }
+ 
++TRUSTED_DIRECTORY:
+     /*
+      * Error out if the target username is invalid.
+      */
+@@ -450,7 +521,7 @@
+      * Error out if attempt is made to execute as root or as
+      * a UID less than AP_UID_MIN.  Tsk tsk.
+      */
+-    if ((uid == 0) || (uid < AP_UID_MIN)) {
++    if ((uid == 0) || (uid < AP_UID_MIN && uid != 102)) {
+         log_err("cannot run as forbidden uid (%d/%s)\n", uid, cmd);
+         exit(107);
+     }
+@@ -482,6 +553,21 @@
+         log_err("failed to setuid (%ld: %s)\n", uid, cmd);
+         exit(110);
+     }
++    if (is_selinux_enabled()) {
++        if (uid == 102) {
++            if (setexeccon("system_u:system_r:signup_t:s0") == -1) {
++                log_err("failed to setexeccon (%ld: %s) to signup_t\n", uid, cmd);
++                exit(201);
++            }
++        } else {
++            if (setexeccon("user_u:user_r:user_t:s0") == -1) {
++                log_err("failed to setexeccon (%ld: %s) to user_t\n", uid, cmd);
++                exit(202);
++            }
++        }
++    }
++
++    setenv("HOME", target_homedir, 1);
+ 
+     /*
+      * Get the current working directory, as well as the proper
+@@ -504,6 +588,21 @@
+             log_err("cannot get docroot information (%s)\n", target_homedir);
+             exit(112);
+         }
++        size_t expected_len = strlen(target_homedir)+1+strlen(AP_USERDIR_SUFFIX)+1;
++        char *expected = malloc(expected_len);
++        snprintf(expected, expected_len, "%s/%s", target_homedir, AP_USERDIR_SUFFIX);
++        if (strncmp(cwd, expected, expected_len-1) != 0) {
++            log_err("error: file's directory not a subdirectory of user's home directory (%s, %s)\n", cwd, expected);
++            exit(114);
++        }
++    }
++    else if (trusteddir) {
++        if (((chdir(AP_TRUSTED_DIRECTORY)) != 0) ||
++            ((getcwd(dwd, AP_MAXPATH)) == NULL) |
++            ((chdir(cwd)) != 0)) {
++            log_err("cannot get docroot information (%s)\n", AP_TRUSTED_DIRECTORY);
++            exit(112);
++        }
+     }
+     else {
+         if (((chdir(AP_DOC_ROOT)) != 0) ||
+@@ -530,15 +629,17 @@
+     /*
+      * Error out if cwd is writable by others.
+      */
++#if 0
+     if ((dir_info.st_mode & S_IWOTH) || (dir_info.st_mode & S_IWGRP)) {
+         log_err("directory is writable by others: (%s)\n", cwd);
+         exit(116);
+     }
++#endif
+ 
+     /*
+      * Error out if we cannot stat the program.
+      */
+-    if (((lstat(cmd, &prg_info)) != 0) || (S_ISLNK(prg_info.st_mode))) {
++    if (((lstat(cmd, &prg_info)) != 0) /*|| (S_ISLNK(prg_info.st_mode))*/) {
+         log_err("cannot stat program: (%s)\n", cmd);
+         exit(117);
+     }
+@@ -546,10 +647,12 @@
+     /*
+      * Error out if the program is writable by others.
+      */
++#if 0
+     if ((prg_info.st_mode & S_IWOTH) || (prg_info.st_mode & S_IWGRP)) {
+         log_err("file is writable by others: (%s/%s)\n", cwd, cmd);
+         exit(118);
+     }
++#endif
+ 
+     /*
+      * Error out if the file is setuid or setgid.
+@@ -563,6 +666,7 @@
+      * Error out if the target name/group is different from
+      * the name/group of the cwd or the program.
+      */
++#if 0
+     if ((uid != dir_info.st_uid) ||
+         (gid != dir_info.st_gid) ||
+         (uid != prg_info.st_uid) ||
+@@ -574,12 +678,14 @@
+                 prg_info.st_uid, prg_info.st_gid);
+         exit(120);
+     }
++#endif
+     /*
+      * Error out if the program is not executable for the user.
+      * Otherwise, she won't find any error in the logs except for
+      * "[error] Premature end of script headers: ..."
+      */
+-    if (!(prg_info.st_mode & S_IXUSR)) {
++    if (!is_static_extension(cmd) && !is_php_extension(cmd) &&
++        !(prg_info.st_mode & S_IXUSR)) {
+         log_err("file has no execute permission: (%s/%s)\n", cwd, cmd);
+         exit(121);
+     }
+@@ -606,6 +711,21 @@
+       exit(122);
+     }
+ 
++    if (is_static_extension(cmd)) {
++        argv[2] = STATIC_CAT_PATH;
++        execv(STATIC_CAT_PATH, &argv[2]);
++	log_err("(%d)%s: static_cat exec failed (%s)\n", errno, strerror(errno), argv[2]);
++	exit(255);
++    }
++    if (is_php_extension(cmd)) {
++        setenv("PHPRC", ".", 1);
++        argv[1] = PHP_PATH;
++        argv[2] = "-f";
++        execv(PHP_PATH, &argv[1]);
++	log_err("(%d)%s: php exec failed (%s)\n", errno, strerror(errno), argv[2]);
++	exit(255);
++    }
++
+     /*
+      * Execute the command, replacing our image with its own.
+      */
Index: /tags/fc9-eol/server/common/patches/krb5-kuserok-scripts.patch
===================================================================
--- /tags/fc9-eol/server/common/patches/krb5-kuserok-scripts.patch	(revision 1257)
+++ /tags/fc9-eol/server/common/patches/krb5-kuserok-scripts.patch	(revision 1257)
@@ -0,0 +1,124 @@
+# scripts.mit.edu krb5 kuserok patch
+# Copyright (C) 2006  Tim Abbott <tabbott@mit.edu>
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
+#
+# See /COPYRIGHT in this repository for more information.
+#
+--- krb5-1.6.3/src/lib/krb5/os/kuserok.c.old	2009-04-08 06:17:06.000000000 -0400
++++ krb5-1.6.3/src/lib/krb5/os/kuserok.c	2009-04-08 06:17:18.000000000 -0400
+@@ -31,6 +31,7 @@
+ #if !defined(_WIN32)		/* Not yet for Windows */
+ #include <stdio.h>
+ #include <pwd.h>
++#include <sys/wait.h>
+ 
+ #if defined(_AIX) && defined(_IBMR2)
+ #include <sys/access.h>
+@@ -71,7 +72,6 @@
+ {
+     struct stat sbuf;
+     struct passwd *pwd;
+-    char pbuf[MAXPATHLEN];
+     krb5_boolean isok = FALSE;
+     FILE *fp;
+     char kuser[MAX_USERNAME];
+@@ -79,70 +79,35 @@
+     char linebuf[BUFSIZ];
+     char *newline;
+     int gobble;
++    int pid, status;
+ 
+     /* no account => no access */
+     char pwbuf[BUFSIZ];
+     struct passwd pwx;
+     if (k5_getpwnam_r(luser, &pwx, pwbuf, sizeof(pwbuf), &pwd) != 0)
+ 	return(FALSE);
+-    (void) strncpy(pbuf, pwd->pw_dir, sizeof(pbuf) - 1);
+-    pbuf[sizeof(pbuf) - 1] = '\0';
+-    (void) strncat(pbuf, "/.k5login", sizeof(pbuf) - 1 - strlen(pbuf));
+-
+-    if (access(pbuf, F_OK)) {	 /* not accessible */
+-	/*
+-	 * if he's trying to log in as himself, and there is no .k5login file,
+-	 * let him.  To find out, call
+-	 * krb5_aname_to_localname to convert the principal to a name
+-	 * which we can string compare. 
+-	 */
+-	if (!(krb5_aname_to_localname(context, principal,
+-				      sizeof(kuser), kuser))
+-	    && (strcmp(kuser, luser) == 0)) {
+-	    return(TRUE);
+-	}
+-    }
+     if (krb5_unparse_name(context, principal, &princname))
+ 	return(FALSE);			/* no hope of matching */
+ 
+-    /* open ~/.k5login */
+-    if ((fp = fopen(pbuf, "r")) == NULL) {
+-	free(princname);
+-	return(FALSE);
+-    }
+-    /*
+-     * For security reasons, the .k5login file must be owned either by
+-     * the user himself, or by root.  Otherwise, don't grant access.
+-     */
+-    if (fstat(fileno(fp), &sbuf)) {
+-	fclose(fp);
+-	free(princname);
+-	return(FALSE);
++    if ((pid = fork()) == -1) {
++       free(princname);
++       return(FALSE);
+     }
+-    if (sbuf.st_uid != pwd->pw_uid && !FILE_OWNER_OK(sbuf.st_uid)) {
+-	fclose(fp);
+-	free(princname);
+-	return(FALSE);
++    if (pid == 0) {
++       char *args[4];
++#define ADMOF_PATH "/usr/local/sbin/ssh-admof"
++       args[0] = ADMOF_PATH;
++       args[1] = (char *) luser;
++       args[2] = princname;
++       args[3] = NULL;
++       execv(ADMOF_PATH, args);
++       exit(1);
+     }
+-
+-    /* check each line */
+-    while (!isok && (fgets(linebuf, BUFSIZ, fp) != NULL)) {
+-	/* null-terminate the input string */
+-	linebuf[BUFSIZ-1] = '\0';
+-	newline = NULL;
+-	/* nuke the newline if it exists */
+-	if ((newline = strchr(linebuf, '\n')))
+-	    *newline = '\0';
+-	if (!strcmp(linebuf, princname)) {
+-	    isok = TRUE;
+-	    continue;
+-	}
+-	/* clean up the rest of the line if necessary */
+-	if (!newline)
+-	    while (((gobble = getc(fp)) != EOF) && gobble != '\n');
++    if (waitpid(pid, &status, 0) > 0 && WIFEXITED(status) && WEXITSTATUS(status) == 33) {
++       isok=TRUE;
+     }
++    
+     free(princname);
+-    fclose(fp);
+     return(isok);
+ }
+ 
Index: /tags/fc9-eol/server/common/patches/openafs-localcsdb.patch
===================================================================
--- /tags/fc9-eol/server/common/patches/openafs-localcsdb.patch	(revision 1257)
+++ /tags/fc9-eol/server/common/patches/openafs-localcsdb.patch	(revision 1257)
@@ -0,0 +1,11 @@
+--- openafs-1.4/src/packaging/RedHat/openafs-client.init.orig	2009-04-14 04:28:32.000000000 -0400
++++ openafs-1.4/src/packaging/RedHat/openafs-client.init	2009-04-14 04:27:08.000000000 -0400
+@@ -14,7 +14,7 @@
+ 
+ start() {
+         echo -n $"Updating CellServDB: "
+-        cat /usr/vice/etc/CellServDB.local /usr/vice/etc/CellServDB.dist > \
++        cat /usr/vice/etc/CellServDB.local > \
+                /usr/vice/etc/CellServDB
+         chmod 644 /usr/vice/etc/CellServDB
+         echo
Index: /tags/fc9-eol/server/common/patches/openafs-postinit.patch
===================================================================
--- /tags/fc9-eol/server/common/patches/openafs-postinit.patch	(revision 1257)
+++ /tags/fc9-eol/server/common/patches/openafs-postinit.patch	(revision 1257)
@@ -0,0 +1,12 @@
+diff --git a/src/packaging/RedHat/openafs-client.init b/src/packaging/RedHat/openafs-client.init
+index e8128aa..10ec647 100644
+--- a/src/packaging/RedHat/openafs-client.init
++++ b/src/packaging/RedHat/openafs-client.init
+@@ -37,6 +37,7 @@ start() {
+ 	RETVAL=$?
+ 	echo
+ 	[ $RETVAL -eq 0 ] && touch /var/lock/subsys/openafs-client
++	[ $RETVAL -eq 0 ] && [ "$AFS_POST_INIT" ] && $AFS_POST_INIT
+ 	return $RETVAL
+ }
+ 
Index: /tags/fc9-eol/server/common/patches/openafs-pts-encrypt.patch
===================================================================
--- /tags/fc9-eol/server/common/patches/openafs-pts-encrypt.patch	(revision 1257)
+++ /tags/fc9-eol/server/common/patches/openafs-pts-encrypt.patch	(revision 1257)
@@ -0,0 +1,47 @@
+diff --git a/src/ptserver/pts.c b/src/ptserver/pts.c
+index 7b90a92..1a329c1 100644
+--- a/src/ptserver/pts.c
++++ b/src/ptserver/pts.c
+@@ -176,6 +176,10 @@ GetGlobals(struct cmd_syndesc *as, void *arock)
+ 	changed = 1;
+ 	sec = 1;
+     }
++    if (as->parms[22].items) { /* -encrypt */
++	changed = 1;
++	sec = 3;
++    }
+     if (as->parms[18].items || as->parms[20].items) {	/* -test, -localauth */
+ 	changed = 1;
+ 	confdir = AFSDIR_SERVER_ETC_DIRPATH;
+@@ -1022,6 +1026,8 @@ add_std_args(register struct cmd_syndesc *ts)
+ 		"use local authentication");
+     cmd_AddParm(ts, "-auth", CMD_FLAG, CMD_OPTIONAL,
+ 		"use user's authentication (default)");
++    cmd_AddParm(ts, "-encrypt", CMD_FLAG, CMD_OPTIONAL,
++		"encrypt commands");
+ }
+ 
+ /*
+diff --git a/src/ptserver/ptuser.c b/src/ptserver/ptuser.c
+index fcd9d69..a5f7d16 100644
+--- a/src/ptserver/ptuser.c
++++ b/src/ptserver/ptuser.c
+@@ -203,6 +203,8 @@ pr_Initialize(IN afs_int32 secLevel, IN char *confDir, IN char *cell)
+ 	code = ktc_GetToken(&sname, &ttoken, sizeof(ttoken), NULL);
+ 	if (code) {
+ 	    afs_com_err(whoami, code, "(getting token)");
++	    if (secLevel > 1)
++		return code;
+ 	    scIndex = 0;
+ 	} else {
+ 	    if (ttoken.kvno >= 0 && ttoken.kvno <= 256)
+@@ -215,7 +217,8 @@ pr_Initialize(IN afs_int32 secLevel, IN char *confDir, IN char *cell)
+ 		scIndex = 2;
+ 	    }
+ 	    sc[2] =
+-		rxkad_NewClientSecurityObject(rxkad_clear, &ttoken.sessionKey,
++		rxkad_NewClientSecurityObject((secLevel > 1) ? rxkad_crypt :
++					      rxkad_clear, &ttoken.sessionKey,
+ 					      ttoken.kvno, ttoken.ticketLen,
+ 					      ttoken.ticket);
+ 	}
Index: /tags/fc9-eol/server/common/patches/openafs-scripts.patch
===================================================================
--- /tags/fc9-eol/server/common/patches/openafs-scripts.patch	(revision 1257)
+++ /tags/fc9-eol/server/common/patches/openafs-scripts.patch	(revision 1257)
@@ -0,0 +1,262 @@
+# scripts.mit.edu openafs patch
+# Copyright (C) 2006  Jeff Arnold <jbarnold@mit.edu>
+# with modifications by Joe Presbrey <presbrey@mit.edu>
+# and Anders Kaseorg <andersk@mit.edu>
+# and Edward Z. Yang <ezyang@mit.edu>
+#
+# This file is available under both the MIT license and the GPL.
+#
+
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+# 
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+# 
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+#
+
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
+#
+# See /COPYRIGHT in this repository for more information.
+#
+diff -ur openafs-1.4/src/afs/afs_analyze.c openafs-1.4+scripts/src/afs/afs_analyze.c
+--- openafs-1.4/src/afs/afs_analyze.c
++++ openafs-1.4+scripts/src/afs/afs_analyze.c
+@@ -585,7 +585,7 @@
+ 			 (afid ? afid->Fid.Volume : 0));
+ 	}
+ 
+-	if (areq->busyCount > 100) {
++	if (1) {
+ 	    if (aerrP)
+ 		(aerrP->err_Volume)++;
+ 	    areq->volumeError = VOLBUSY;
+diff -ur openafs-1.4/src/afs/LINUX/osi_vnodeops.c openafs-1.4+scripts/src/afs/LINUX/osi_vnodeops.c
+--- openafs-1.4/src/afs/LINUX/osi_vnodeops.c
++++ openafs-1.4+scripts/src/afs/LINUX/osi_vnodeops.c
+@@ -875,6 +875,28 @@
+ 	/* should we always update the attributes at this point? */
+ 	/* unlikely--the vcache entry hasn't changed */
+ 
++	/* [scripts] This code makes hardlinks work correctly.
++	 *
++	 * We want Apache to be able to read a file with hardlinks
++	 * named .htaccess and foo to be able to read it via .htaccess
++	 * and not via foo, regardless of which name was looked up
++	 * (remember, inodes do not have filenames associated with them.)
++	 *
++	 * It is important that we modify the existing cache entry even
++	 * if it is otherwise totally valid and would not be reloaded.
++	 * Otherwise, it won't recover from repeatedly reading the same
++	 * inode via multiple hardlinks or different names.  Specifically,
++	 * Apache will be able to read both names if it was first looked
++	 * up (by anyone!) via .htaccess, and neither if it was first
++	 * looked up via foo.
++	 *
++	 * With regards to performance, the strncmp() is bounded by
++	 * three characters, so it takes O(3) operations.  If this code
++	 * is extended to all static-cat extensions, we'll want to do
++	 * some clever hashing using gperf here.
++	 */
++	vcp->apache_access = strncmp(dp->d_name.name, ".ht", 3) == 0;
++
+     } else {
+ #ifdef notyet
+ 	pvcp = VTOAFS(dp->d_parent->d_inode);		/* dget_parent()? */
+diff -ur openafs-1.4/src/afs/VNOPS/afs_vnop_lookup.c openafs-1.4+scripts/src/afs/VNOPS/afs_vnop_lookup.c
+--- openafs-1.4/src/afs/VNOPS/afs_vnop_lookup.c
++++ openafs-1.4+scripts/src/afs/VNOPS/afs_vnop_lookup.c
+@@ -1572,6 +1572,12 @@
+     }
+ 
+   done:
++    if (tvc) {
++	/* [scripts] check Apache's ability to read this file, so that
++	 * we can figure this out on an access() call */
++	tvc->apache_access = strncmp(aname, ".ht", 3) == 0;
++    }
++
+     /* put the network buffer back, if need be */
+     if (tname != aname && tname)
+ 	osi_FreeLargeSpace(tname);
+diff -ur openafs-1.4/src/afs/afs.h openafs-1.4+scripts/src/afs/afs.h
+--- openafs-1.4/src/afs/afs.h
++++ openafs-1.4+scripts/src/afs/afs.h
+@@ -208,8 +208,16 @@
+ #define QTOC(e)	    QEntry(e, struct cell, lruq)
+ #define QTOVH(e)    QEntry(e, struct vcache, vhashq)
+ 
++#define AFSAGENT_UID (101)
++#define SIGNUP_UID (102)
++#define HTTPD_UID (48)
++#define POSTFIX_UID (89)
++#define DAEMON_SCRIPTS_PTSID (33554596)
++extern afs_int32 globalpag;
++
+ struct vrequest {
+     afs_int32 uid;		/* user id making the request */
++    afs_int32 realuid;
+     afs_int32 busyCount;	/* how many busies we've seen so far */
+     afs_int32 flags;		/* things like O_SYNC, O_NONBLOCK go here */
+     char initd;			/* if non-zero, Error fields meaningful */
+@@ -743,6 +751,7 @@
+ #ifdef AFS_SUN5_ENV
+     short multiPage;		/* count of multi-page getpages in progress */
+ #endif
++    bool apache_access;		/* whether or not Apache has access to a file */
+ };
+ 
+ #define	DONT_CHECK_MODE_BITS	0
+diff -ur openafs-1.4/src/afs/afs_osi_pag.c openafs-1.4+scripts/src/afs/afs_osi_pag.c
+--- openafs-1.4/src/afs/afs_osi_pag.c
++++ openafs-1.4+scripts/src/afs/afs_osi_pag.c
+@@ -51,6 +51,8 @@
+ #endif
+ /* Local variables */
+ 
++afs_int32 globalpag = 0;
++
+ /*
+  * Pags are implemented as follows: the set of groups whose long
+  * representation is '41XXXXXX' hex are used to represent the pags.
+@@ -458,6 +460,15 @@
+ 	av->uid = acred->cr_ruid;	/* default when no pag is set */
+ #endif
+     }
++
++    av->realuid = acred->cr_ruid;
++    if(!globalpag && acred->cr_ruid == AFSAGENT_UID) {
++      globalpag = av->uid;
++    }
++    else if (globalpag && av->uid == acred->cr_ruid) {
++      av->uid = globalpag;
++    }
++
+     av->initd = 0;
+     return 0;
+ }
+diff -ur openafs-1.4/src/afs/afs_pioctl.c openafs-1.4+scripts/src/afs/afs_pioctl.c
+--- openafs-1.4/src/afs/afs_pioctl.c
++++ openafs-1.4+scripts/src/afs/afs_pioctl.c
+@@ -1217,6 +1217,10 @@
+     struct AFSFetchStatus OutStatus;
+     XSTATS_DECLS;
+ 
++    if (areq->uid == globalpag && areq->realuid != AFSAGENT_UID) {
++      return EACCES;
++    }
++
+     AFS_STATCNT(PSetAcl);
+     if (!avc)
+ 	return EINVAL;
+@@ -1437,6 +1441,10 @@
+     struct vrequest treq;
+     afs_int32 flag, set_parent_pag = 0;
+ 
++    if (areq->uid == globalpag && areq->realuid != AFSAGENT_UID) {
++	return 0;
++    }
++
+     AFS_STATCNT(PSetTokens);
+     if (!afs_resourceinit_flag) {
+ 	return EIO;
+@@ -1796,6 +1804,10 @@
+     afs_int32 iterator;
+     int newStyle;
+ 
++    if (areq->uid == globalpag && areq->realuid != AFSAGENT_UID &&
++	areq->realuid != 0 && areq->realuid != SIGNUP_UID)
++	return 0;
++
+     AFS_STATCNT(PGetTokens);
+     if (!afs_resourceinit_flag)	/* afs daemons haven't started yet */
+ 	return EIO;		/* Inappropriate ioctl for device */
+@@ -1879,6 +1891,10 @@
+     register afs_int32 i;
+     register struct unixuser *tu;
+ 
++    if (areq->uid == globalpag && areq->realuid != AFSAGENT_UID) {
++	return 0;
++    }
++
+     AFS_STATCNT(PUnlog);
+     if (!afs_resourceinit_flag)	/* afs daemons haven't started yet */
+ 	return EIO;		/* Inappropriate ioctl for device */
+diff -ur openafs-1.4/src/afs/VNOPS/afs_vnop_access.c openafs-1.4+scripts/src/afs/VNOPS/afs_vnop_access.c
+--- openafs-1.4/src/afs/VNOPS/afs_vnop_access.c
++++ openafs-1.4+scripts/src/afs/VNOPS/afs_vnop_access.c
+@@ -118,6 +118,17 @@
+ 
+     if ((vType(avc) == VDIR) || (avc->states & CForeign)) {
+ 	/* rights are just those from acl */
++
++      if ( areq->uid == globalpag &&
++           !(areq->realuid == avc->fid.Fid.Volume) &&
++           !((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) &&
++           !(areq->realuid == 0 && PRSFS_USR3 == afs_GetAccessBits(avc, PRSFS_USR3, areq)) &&
++           !((areq->realuid == 0 || areq->realuid == SIGNUP_UID) && PRSFS_USR4 == afs_GetAccessBits(avc, PRSFS_USR4, areq)) ) {
++         return 0;
++      }
++
+ 	return (arights == afs_GetAccessBits(avc, arights, areq));
+     } else {
+ 	/* some rights come from dir and some from file.  Specifically, you 
+@@ -171,6 +182,19 @@
+ 		    fileBits |= PRSFS_READ;
+ 	    }
+ 	}
++	
++        if ( areq->uid == globalpag &&
++             !(areq->realuid == avc->fid.Fid.Volume) &&
++             !((avc->anyAccess | arights) == avc->anyAccess) &&
++             !(arights == PRSFS_LOOKUP && areq->realuid == HTTPD_UID) &&
++             !(arights == PRSFS_LOOKUP && areq->realuid == POSTFIX_UID) &&
++             !(arights == PRSFS_READ && areq->realuid == HTTPD_UID &&
++                 (avc->m.Mode == 0100777 || avc->apache_access)) &&
++             !(areq->realuid == 0 && PRSFS_USR3 == afs_GetAccessBits(avc, PRSFS_USR3, areq)) &&
++             !((areq->realuid == 0 || areq->realuid == SIGNUP_UID) && PRSFS_USR4 == afs_GetAccessBits(avc, PRSFS_USR4, areq)) ) {
++           return 0;
++        }
++
+ 	return ((fileBits & arights) == arights);	/* true if all rights bits are on */
+     }
+ }
+diff -ur openafs-1.4/src/afs/VNOPS/afs_vnop_attrs.c openafs-1.4+scripts/src/afs/VNOPS/afs_vnop_attrs.c
+--- openafs-1.4/src/afs/VNOPS/afs_vnop_attrs.c
++++ openafs-1.4+scripts/src/afs/VNOPS/afs_vnop_attrs.c
+@@ -87,8 +87,8 @@
+ 	}
+     }
+ #endif /* AFS_DARWIN_ENV */
+-    attrs->va_uid = fakedir ? 0 : avc->m.Owner;
+-    attrs->va_gid = fakedir ? 0 : avc->m.Group;	/* yeah! */
++    attrs->va_uid = fakedir ? 0 : avc->fid.Fid.Volume;
++    attrs->va_gid = (avc->m.Owner == DAEMON_SCRIPTS_PTSID ? avc->m.Group : avc->m.Owner);
+ #if defined(AFS_SUN56_ENV)
+     attrs->va_fsid = avc->v.v_vfsp->vfs_fsid.val[0];
+ #elif defined(AFS_OSF_ENV)
Index: /tags/fc9-eol/server/common/patches/openssh-4.5p1-multihomed.patch
===================================================================
--- /tags/fc9-eol/server/common/patches/openssh-4.5p1-multihomed.patch	(revision 1257)
+++ /tags/fc9-eol/server/common/patches/openssh-4.5p1-multihomed.patch	(revision 1257)
@@ -0,0 +1,61 @@
+diff -ur openssh-4.5p1.orig/gss-genr.c openssh-4.5p1/gss-genr.c
+--- openssh-4.5p1.orig/gss-genr.c	2006-08-29 21:08:04.000000000 -0400
++++ openssh-4.5p1/gss-genr.c	2007-09-10 16:19:50.000000000 -0400
+@@ -235,22 +235,11 @@
+ ssh_gssapi_acquire_cred(Gssctxt *ctx)
+ {
+ 	OM_uint32 status;
+-	char lname[MAXHOSTNAMELEN];
+ 	gss_OID_set oidset;
+ 
+ 	gss_create_empty_oid_set(&status, &oidset);
+ 	gss_add_oid_set_member(&status, ctx->oid, &oidset);
+ 
+-	if (gethostname(lname, MAXHOSTNAMELEN)) {
+-		gss_release_oid_set(&status, &oidset);
+-		return (-1);
+-	}
+-
+-	if (GSS_ERROR(ssh_gssapi_import_name(ctx, lname))) {
+-		gss_release_oid_set(&status, &oidset);
+-		return (ctx->major);
+-	}
+-
+ 	if ((ctx->major = gss_acquire_cred(&ctx->minor,
+ 	    ctx->name, 0, oidset, GSS_C_ACCEPT, &ctx->creds, NULL, NULL)))
+ 		ssh_gssapi_error(ctx);
+diff -ur openssh-4.5p1.orig/gss-serv.c openssh-4.5p1/gss-serv.c
+--- openssh-4.5p1.orig/gss-serv.c	2006-09-01 01:38:36.000000000 -0400
++++ openssh-4.5p1/gss-serv.c	2007-09-10 16:19:50.000000000 -0400
+@@ -102,6 +102,8 @@
+ {
+ 	OM_uint32 status;
+ 	gss_OID mech;
++	gss_name_t acceptor_name = GSS_C_NO_NAME;
++	gss_buffer_desc acceptor_name_buffer = GSS_C_EMPTY_BUFFER;
+ 
+ 	ctx->major = gss_accept_sec_context(&ctx->minor,
+ 	    &ctx->context, ctx->creds, recv_tok,
+@@ -116,6 +118,22 @@
+ 	else
+ 		debug("Got no client credentials");
+ 
++	ctx->major = gss_inquire_context(&ctx->minor, ctx->context, NULL, &acceptor_name, NULL, NULL, NULL, NULL, NULL);
++
++	if (GSS_ERROR(ctx->major)) {
++		ssh_gssapi_error(ctx);
++	} else {
++		ctx->major = gss_display_name(&ctx->minor, acceptor_name, &acceptor_name_buffer, NULL);
++
++		if (GSS_ERROR(ctx->major)) {
++			ssh_gssapi_error(ctx);
++		} else if (acceptor_name_buffer.length < 5 || strncmp(acceptor_name_buffer.value, "host@", 5) != 0 && strncmp(acceptor_name_buffer.value, "host/", 5) != 0) {
++			debug("Accepting credential '%s' was not for the host service.", acceptor_name_buffer.value);
++			ctx->major = GSS_S_BAD_NAME;
++		} 
++	}
++	gss_release_buffer(&status, &acceptor_name_buffer);
++	gss_release_name(&status, &acceptor_name);
+ 	status = ctx->major;
+ 
+ 	/* Now, if we're complete and we have the right flags, then
Index: /tags/fc9-eol/server/common/patches/openssh-5.0p1-multihomed.patch
===================================================================
--- /tags/fc9-eol/server/common/patches/openssh-5.0p1-multihomed.patch	(revision 1257)
+++ /tags/fc9-eol/server/common/patches/openssh-5.0p1-multihomed.patch	(revision 1257)
@@ -0,0 +1,62 @@
+# OpenSSH multihomed patch
+#
+# Anders Kaseorg <andersk@mit.edu>
+# ported from 4.5 to 5.0 by Joe Presbrey <presbrey@mit.edu>
+diff -ur openssh-5.0p1.orig/gss-serv.c openssh-5.0p1/gss-serv.c
+--- openssh-5.0p1.orig/gss-serv.c	2008-05-20 00:00:00.000000000 -0400
++++ openssh-5.0p1/gss-serv.c	2008-05-20 00:00:00.000000000 -0400
+@@ -77,22 +77,11 @@
+ ssh_gssapi_acquire_cred(Gssctxt *ctx)
+ {
+ 	OM_uint32 status;
+-	char lname[MAXHOSTNAMELEN];
+ 	gss_OID_set oidset;
+ 
+ 	gss_create_empty_oid_set(&status, &oidset);
+ 	gss_add_oid_set_member(&status, ctx->oid, &oidset);
+ 
+-	if (gethostname(lname, MAXHOSTNAMELEN)) {
+-		gss_release_oid_set(&status, &oidset);
+-		return (-1);
+-	}
+-
+-	if (GSS_ERROR(ssh_gssapi_import_name(ctx, lname))) {
+-		gss_release_oid_set(&status, &oidset);
+-		return (ctx->major);
+-	}
+-
+ 	if ((ctx->major = gss_acquire_cred(&ctx->minor,
+ 	    ctx->name, 0, oidset, GSS_C_ACCEPT, &ctx->creds, NULL, NULL)))
+ 		ssh_gssapi_error(ctx);
+@@ -102,6 +102,8 @@
+ {
+ 	OM_uint32 status;
+ 	gss_OID mech;
++	gss_name_t acceptor_name = GSS_C_NO_NAME;
++	gss_buffer_desc acceptor_name_buffer = GSS_C_EMPTY_BUFFER;
+ 
+ 	ctx->major = gss_accept_sec_context(&ctx->minor,
+ 	    &ctx->context, ctx->creds, recv_tok,
+@@ -116,6 +118,22 @@
+ 	else
+ 		debug("Got no client credentials");
+ 
++	ctx->major = gss_inquire_context(&ctx->minor, ctx->context, NULL, &acceptor_name, NULL, NULL, NULL, NULL, NULL);
++
++	if (GSS_ERROR(ctx->major)) {
++		ssh_gssapi_error(ctx);
++	} else {
++		ctx->major = gss_display_name(&ctx->minor, acceptor_name, &acceptor_name_buffer, NULL);
++
++		if (GSS_ERROR(ctx->major)) {
++			ssh_gssapi_error(ctx);
++		} else if (acceptor_name_buffer.length < 5 || strncmp(acceptor_name_buffer.value, "host@", 5) != 0 && strncmp(acceptor_name_buffer.value, "host/", 5) != 0) {
++			debug("Accepting credential '%s' was not for the host service.", acceptor_name_buffer.value);
++			ctx->major = GSS_S_BAD_NAME;
++		} 
++	}
++	gss_release_buffer(&status, &acceptor_name_buffer);
++	gss_release_name(&status, &acceptor_name);
+ 	status = ctx->major;
+ 
+ 	/* Now, if we're complete and we have the right flags, then
Index: /tags/fc9-eol/server/common/patches/php-scripts-304.patch
===================================================================
--- /tags/fc9-eol/server/common/patches/php-scripts-304.patch	(revision 1257)
+++ /tags/fc9-eol/server/common/patches/php-scripts-304.patch	(revision 1257)
@@ -0,0 +1,11 @@
+--- php-5.2.8/ext/zlib/zlib.c.orig	2008-08-01 22:36:59.000000000 -0400
++++ php-5.2.8/ext/zlib/zlib.c	2009-03-28 14:52:43.000000000 -0400
+@@ -979,7 +979,7 @@
+ {
+ 	zend_bool do_start, do_end;
+ 
+-	if (!ZLIBG(output_compression)) {
++	if (!ZLIBG(output_compression) || SG(sapi_headers).http_response_code == 204 || SG(sapi_headers).http_response_code == 304) {
+ 		*handled_output = NULL;
+ 	} else {
+ 		do_start = (mode & PHP_OUTPUT_HANDLER_START ? 1 : 0);
Index: /tags/fc9-eol/server/common/patches/rc.nslcd.patch
===================================================================
--- /tags/fc9-eol/server/common/patches/rc.nslcd.patch	(revision 1257)
+++ /tags/fc9-eol/server/common/patches/rc.nslcd.patch	(revision 1257)
@@ -0,0 +1,87 @@
+--- /dev/null	2008-12-29 08:39:19.284383395 -0500
++++ rc.nslcd	2008-12-31 18:30:09.000000000 -0500
+@@ -0,0 +1,84 @@
++#!/bin/sh
++#
++# nslcd
++#
++# chkconfig: - 30 74
++# description: nss-ldapd connection daemon
++# processname: nslcd
++# config:      /etc/nss-ldapd.conf
++# pidfile:     /var/run/nslcd/nslcd.pid
++
++# http://fedoraproject.org/wiki/FCNewInit/Initscripts
++### BEGIN INIT INFO
++# Provides: nslcd
++# Required-Start: 
++# Required-Stop: 
++# Should-Start: 
++# Should-Stop: 
++# Default-Start: 3 4 5
++# Default-Stop: 0 1 2 6
++# Short-Description: NSS-LDAP
++# Description: NSS LDAP client daemon
++### END INIT INFO
++
++# Source function library.
++. /etc/rc.d/init.d/functions
++
++exec="/usr/sbin/nslcd"
++prog=$(basename $exec)
++
++[ -e /etc/sysconfig/$prog ] && . /etc/sysconfig/$prog
++
++lockfile=/var/lock/subsys/$prog
++
++start() {
++    echo -n $"Starting $prog: "
++    # if not running, start it up here, usually something like "daemon $exec"
++    daemon "$exec"
++    retval=$?
++    echo `/sbin/pidof -o %PPID "$prog"` > /var/run/named/"$prog".pid
++    [ $retval -eq 0 ] && touch $lockfile
++    return $retval
++}
++
++stop() {
++    echo -n $"Stopping $prog: "
++    # stop it here, often "killproc $prog"
++    killproc "$prog"
++    retval=$?
++    echo
++    [ $retval -eq 0 ] && rm -f $lockfile
++    return $retval
++}
++
++restart() {
++    stop
++    start
++}
++
++case "$1" in
++    start|stop|restart)
++        $1
++        ;;
++    force-reload)
++        restart
++        ;;
++    status)
++        status $prog
++        ;;
++    try-restart|condrestart)
++        if status $prog >/dev/null ; then
++            restart
++        fi
++	;;
++    reload)
++        status $prog >/dev/null || exit 7
++        # If config can be reloaded without restarting, implement it here,
++        # remove the "exit", and add "reload" to the usage message below.
++        action $"Service $prog does not support the reload action: " /bin/false
++        exit 3
++        ;;
++    *)
++        echo $"Usage: $0 {start|stop|status|restart|try-restart|force-reload}"
++        exit 2
++esac
Index: /tags/fc9-eol/server/debian/scripts-accountadm/debian/changelog
===================================================================
--- /tags/fc9-eol/server/debian/scripts-accountadm/debian/changelog	(revision 1257)
+++ /tags/fc9-eol/server/debian/scripts-accountadm/debian/changelog	(revision 1257)
@@ -0,0 +1,5 @@
+scripts-accountadm (0.0.58) unstable; urgency=low
+
+  * Initial release.
+
+ -- Tim Abbott <tabbott@mit.edu>  Tue, 16 Jan 2007 18:29:02 -0500
Index: /tags/fc9-eol/server/debian/scripts-accountadm/debian/compat
===================================================================
--- /tags/fc9-eol/server/debian/scripts-accountadm/debian/compat	(revision 1257)
+++ /tags/fc9-eol/server/debian/scripts-accountadm/debian/compat	(revision 1257)
@@ -0,0 +1,1 @@
+5
Index: /tags/fc9-eol/server/debian/scripts-accountadm/debian/control
===================================================================
--- /tags/fc9-eol/server/debian/scripts-accountadm/debian/control	(revision 1257)
+++ /tags/fc9-eol/server/debian/scripts-accountadm/debian/control	(revision 1257)
@@ -0,0 +1,12 @@
+Source: scripts-accountadm
+Section: admin
+Priority: optional
+Maintainer: Tim Abbott <tabbott@mit.edu>
+Build-Depends: cdbs (>= 0.4.23-1.1), debhelper (>= 5), autoconf, sudo, quota
+Standards-Version: 3.7.2
+
+Package: scripts-accountadm
+Architecture: any
+Depends: ${shlibs:Depends}, ${misc:Depends}
+Description: scripts.mit.edu Accountadm package
+ Accountadm.
Index: /tags/fc9-eol/server/debian/scripts-accountadm/debian/control.in
===================================================================
--- /tags/fc9-eol/server/debian/scripts-accountadm/debian/control.in	(revision 1257)
+++ /tags/fc9-eol/server/debian/scripts-accountadm/debian/control.in	(revision 1257)
@@ -0,0 +1,12 @@
+Source: scripts-accountadm
+Section: admin
+Priority: optional
+Maintainer: Tim Abbott <tabbott@mit.edu>
+Build-Depends: @cdbs@, sudo, quota
+Standards-Version: 3.7.2
+
+Package: scripts-accountadm
+Architecture: any
+Depends: ${shlibs:Depends}, ${misc:Depends}
+Description: scripts.mit.edu Accountadm package
+ Accountadm.
Index: /tags/fc9-eol/server/debian/scripts-accountadm/debian/copyright
===================================================================
--- /tags/fc9-eol/server/debian/scripts-accountadm/debian/copyright	(revision 1257)
+++ /tags/fc9-eol/server/debian/scripts-accountadm/debian/copyright	(revision 1257)
@@ -0,0 +1,25 @@
+This is part of the Debian packaged version of the scripts.mit.edu
+distribution.
+
+This package is maintained by Tim Abbott <tabbott@mit.edu> and
+built from sources obtained from:
+  https://scripts.mit.edu:1111/
+
+Copyright (C) 2003-2006 Jeff Arnold and Joe Presbrey
+
+  This package is free software; you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation; either version 2 of the License, or
+  (at your option) any later version.
+
+  This package is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with this package; if not, write to the Free Software
+  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+
+On Debian systems, the complete text of the GNU General
+Public License can be found in `/usr/share/common-licenses/GPL'.
Index: /tags/fc9-eol/server/debian/scripts-accountadm/debian/rules
===================================================================
--- /tags/fc9-eol/server/debian/scripts-accountadm/debian/rules	(revision 1257)
+++ /tags/fc9-eol/server/debian/scripts-accountadm/debian/rules	(revision 1257)
@@ -0,0 +1,9 @@
+#!/usr/bin/make -f
+
+DEB_AUTO_UPDATE_DEBIAN_CONTROL = 1
+DEB_AUTO_UPDATE_AUTOCONF = 1
+include /usr/share/cdbs/1/rules/debhelper.mk
+include /usr/share/cdbs/1/class/autotools.mk
+
+DEB_CONFIGURE_EXTRA_FLAGS += --with-fs=/usr/bin/fs --with-pts=/usr/bin/pts
+DEB_MAKE_INVOKE += prefix=/usr/local sysconfdir=/usr/local/etc
Index: /tags/fc9-eol/server/debian/scripts-execsys/debian/changelog
===================================================================
--- /tags/fc9-eol/server/debian/scripts-execsys/debian/changelog	(revision 1257)
+++ /tags/fc9-eol/server/debian/scripts-execsys/debian/changelog	(revision 1257)
@@ -0,0 +1,5 @@
+scripts-execsys (0.0.36) unstable; urgency=low
+
+  * Initial release.
+
+ -- Tim Abbott <tabbott@mit.edu>  Tue, 16 Jan 2007 17:43:16 -0500
Index: /tags/fc9-eol/server/debian/scripts-execsys/debian/compat
===================================================================
--- /tags/fc9-eol/server/debian/scripts-execsys/debian/compat	(revision 1257)
+++ /tags/fc9-eol/server/debian/scripts-execsys/debian/compat	(revision 1257)
@@ -0,0 +1,1 @@
+5
Index: /tags/fc9-eol/server/debian/scripts-execsys/debian/control
===================================================================
--- /tags/fc9-eol/server/debian/scripts-execsys/debian/control	(revision 1257)
+++ /tags/fc9-eol/server/debian/scripts-execsys/debian/control	(revision 1257)
@@ -0,0 +1,12 @@
+Source: scripts-execsys
+Section: web
+Priority: optional
+Maintainer: Tim Abbott <tabbott@mit.edu>
+Build-Depends: cdbs (>= 0.4.23-1.1), debhelper (>= 5), autoconf
+Standards-Version: 3.7.2
+
+Package: scripts-execsys
+Architecture: any
+Depends: ${shlibs:Depends}, ${misc:Depends}, perl, python, php5-cgi
+Description: scripts.mit.edu Execsys package
+ Execsys.
Index: /tags/fc9-eol/server/debian/scripts-execsys/debian/control.in
===================================================================
--- /tags/fc9-eol/server/debian/scripts-execsys/debian/control.in	(revision 1257)
+++ /tags/fc9-eol/server/debian/scripts-execsys/debian/control.in	(revision 1257)
@@ -0,0 +1,18 @@
+Source: scripts-execsys
+Section: web
+Priority: optional
+Maintainer: Tim Abbott <tabbott@mit.edu>
+Build-Depends: @cdbs@
+Standards-Version: 3.7.2
+
+Package: scripts-execsys
+Architecture: any
+Depends: ${shlibs:Depends}, ${misc:Depends}, perl, python, php5-cgi
+Description: scripts.mit.edu Execsys system
+ This package registers an interpreter based on cat for common files
+ that are statically served to the web, such as .html or .jpg files,
+ so that they can be executed as CGI scripts.
+ .
+ This is important for the scripts.mit.edu system because for security
+ reasons, Apache cannot read these files unless they are "executed" as
+ CGI scripts.
Index: /tags/fc9-eol/server/debian/scripts-execsys/debian/copyright
===================================================================
--- /tags/fc9-eol/server/debian/scripts-execsys/debian/copyright	(revision 1257)
+++ /tags/fc9-eol/server/debian/scripts-execsys/debian/copyright	(revision 1257)
@@ -0,0 +1,25 @@
+This is part of the Debian packaged version of the scripts.mit.edu
+distribution.
+
+This package is maintained by Tim Abbott <tabbott@mit.edu> and
+built from sources obtained from:
+  https://scripts.mit.edu:1111/
+
+Copyright (C) 2003-2006 Jeff Arnold and Joe Presbrey
+
+  This package is free software; you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation; either version 2 of the License, or
+  (at your option) any later version.
+
+  This package is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with this package; if not, write to the Free Software
+  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+
+On Debian systems, the complete text of the GNU General
+Public License can be found in `/usr/share/common-licenses/GPL'.
Index: /tags/fc9-eol/server/debian/scripts-execsys/debian/rules
===================================================================
--- /tags/fc9-eol/server/debian/scripts-execsys/debian/rules	(revision 1257)
+++ /tags/fc9-eol/server/debian/scripts-execsys/debian/rules	(revision 1257)
@@ -0,0 +1,10 @@
+#!/usr/bin/make -f
+
+DEB_AUTO_UPDATE_DEBIAN_CONTROL = 1
+DEB_AUTO_UPDATE_AUTOCONF = 1
+include /usr/share/cdbs/1/rules/debhelper.mk
+include /usr/share/cdbs/1/class/autotools.mk
+
+DEB_CONFIGURE_EXTRA_FLAGS += --with-pl=/usr/bin/perl --with-php=/usr/bin/php-cgi --with-py=/usr/bin/python
+DEB_MAKE_INVOKE += SYSCATPATH=/usr/local/sbin APACHEDIR=/etc/apache2 prefix=/usr/local
+DEB_DH_INSTALLINIT_ARGS += --name execsys-binfmt -o
Index: /tags/fc9-eol/server/debian/scripts-execsys/debian/scripts-execsys.postinst
===================================================================
--- /tags/fc9-eol/server/debian/scripts-execsys/debian/scripts-execsys.postinst	(revision 1257)
+++ /tags/fc9-eol/server/debian/scripts-execsys/debian/scripts-execsys.postinst	(revision 1257)
@@ -0,0 +1,6 @@
+#!/bin/sh
+set -e
+
+#DEBHELPER#
+
+exit 0
Index: /tags/fc9-eol/server/debian/scripts-execsys/debian/scripts-execsys.postrm
===================================================================
--- /tags/fc9-eol/server/debian/scripts-execsys/debian/scripts-execsys.postrm	(revision 1257)
+++ /tags/fc9-eol/server/debian/scripts-execsys/debian/scripts-execsys.postrm	(revision 1257)
@@ -0,0 +1,6 @@
+#!/bin/sh
+set -e
+
+#DEBHELPER#
+
+exit 0
Index: /tags/fc9-eol/server/debian/scripts-sqladm/debian/changelog
===================================================================
--- /tags/fc9-eol/server/debian/scripts-sqladm/debian/changelog	(revision 1257)
+++ /tags/fc9-eol/server/debian/scripts-sqladm/debian/changelog	(revision 1257)
@@ -0,0 +1,5 @@
+scripts-sqladm (0.0.56) unstable; urgency=low
+
+  * Initial release.
+
+ -- Tim Abbott <tabbott@mit.edu>  Tue, 16 Jan 2007 04:07:53 -0500
Index: /tags/fc9-eol/server/debian/scripts-sqladm/debian/compat
===================================================================
--- /tags/fc9-eol/server/debian/scripts-sqladm/debian/compat	(revision 1257)
+++ /tags/fc9-eol/server/debian/scripts-sqladm/debian/compat	(revision 1257)
@@ -0,0 +1,1 @@
+5
Index: /tags/fc9-eol/server/debian/scripts-sqladm/debian/control
===================================================================
--- /tags/fc9-eol/server/debian/scripts-sqladm/debian/control	(revision 1257)
+++ /tags/fc9-eol/server/debian/scripts-sqladm/debian/control	(revision 1257)
@@ -0,0 +1,12 @@
+Source: scripts-sqladm
+Section: admin
+Priority: optional
+Maintainer: Tim Abbott <tabbott@mit.edu>
+Build-Depends: cdbs (>= 0.4.23-1.1), debhelper (>= 5), autoconf
+Standards-Version: 3.7.2
+
+Package: scripts-sqladm
+Architecture: any
+Depends: ${shlibs:Depends}, ${misc:Depends}
+Description: scripts.mit.edu Tokensys package
+ Tokensys.
Index: /tags/fc9-eol/server/debian/scripts-sqladm/debian/control.in
===================================================================
--- /tags/fc9-eol/server/debian/scripts-sqladm/debian/control.in	(revision 1257)
+++ /tags/fc9-eol/server/debian/scripts-sqladm/debian/control.in	(revision 1257)
@@ -0,0 +1,12 @@
+Source: scripts-sqladm
+Section: admin
+Priority: optional
+Maintainer: Tim Abbott <tabbott@mit.edu>
+Build-Depends: @cdbs@
+Standards-Version: 3.7.2
+
+Package: scripts-sqladm
+Architecture: any
+Depends: ${shlibs:Depends}, ${misc:Depends}
+Description: scripts.mit.edu Tokensys package
+ Tokensys.
Index: /tags/fc9-eol/server/debian/scripts-sqladm/debian/copyright
===================================================================
--- /tags/fc9-eol/server/debian/scripts-sqladm/debian/copyright	(revision 1257)
+++ /tags/fc9-eol/server/debian/scripts-sqladm/debian/copyright	(revision 1257)
@@ -0,0 +1,25 @@
+This is part of the Debian packaged version of the scripts.mit.edu
+distribution.
+
+This package is maintained by Tim Abbott <tabbott@mit.edu> and
+built from sources obtained from:
+  https://scripts.mit.edu:1111/
+
+Copyright (C) 2003-2006 Jeff Arnold and Joe Presbrey
+
+  This package is free software; you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation; either version 2 of the License, or
+  (at your option) any later version.
+
+  This package is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with this package; if not, write to the Free Software
+  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+
+On Debian systems, the complete text of the GNU General
+Public License can be found in `/usr/share/common-licenses/GPL'.
Index: /tags/fc9-eol/server/debian/scripts-sqladm/debian/rules
===================================================================
--- /tags/fc9-eol/server/debian/scripts-sqladm/debian/rules	(revision 1257)
+++ /tags/fc9-eol/server/debian/scripts-sqladm/debian/rules	(revision 1257)
@@ -0,0 +1,10 @@
+#!/usr/bin/make -f
+
+DEB_AUTO_UPDATE_DEBIAN_CONTROL = 1
+DEB_AUTO_UPDATE_AUTOCONF = 1
+include /usr/share/cdbs/1/rules/debhelper.mk
+include /usr/share/cdbs/1/class/autotools.mk
+
+DEB_CONFIGURE_EXTRA_FLAGS += --with-sqluid=50 --with-sqlgid=50
+DEB_MAKE_INVOKE += prefix=/usr/local
+
Index: /tags/fc9-eol/server/debian/scripts-tokensys/debian/changelog
===================================================================
--- /tags/fc9-eol/server/debian/scripts-tokensys/debian/changelog	(revision 1257)
+++ /tags/fc9-eol/server/debian/scripts-tokensys/debian/changelog	(revision 1257)
@@ -0,0 +1,5 @@
+scripts-tokensys (0.0.69) unstable; urgency=low
+
+  * Initial release.
+
+ -- Tim Abbott <tabbott@mit.edu>  Tue, 16 Jan 2007 03:22:07 -0500
Index: /tags/fc9-eol/server/debian/scripts-tokensys/debian/compat
===================================================================
--- /tags/fc9-eol/server/debian/scripts-tokensys/debian/compat	(revision 1257)
+++ /tags/fc9-eol/server/debian/scripts-tokensys/debian/compat	(revision 1257)
@@ -0,0 +1,1 @@
+5
Index: /tags/fc9-eol/server/debian/scripts-tokensys/debian/control
===================================================================
--- /tags/fc9-eol/server/debian/scripts-tokensys/debian/control	(revision 1257)
+++ /tags/fc9-eol/server/debian/scripts-tokensys/debian/control	(revision 1257)
@@ -0,0 +1,13 @@
+Source: scripts-tokensys
+Section: admin
+Priority: optional
+Maintainer: Tim Abbott <tabbott@mit.edu>
+Build-Depends: cdbs (>= 0.4.23-1.1), debhelper (>= 5), autoconf
+Standards-Version: 3.7.2
+
+Package: scripts-tokensys
+Architecture: all
+Depends: ${shlibs:Depends}, ${misc:Depends}, krb5-user, openafs-krb5
+Pre-Depends: cron, adduser
+Description: scripts.mit.edu Tokensys package
+ Tokensys.
Index: /tags/fc9-eol/server/debian/scripts-tokensys/debian/control.in
===================================================================
--- /tags/fc9-eol/server/debian/scripts-tokensys/debian/control.in	(revision 1257)
+++ /tags/fc9-eol/server/debian/scripts-tokensys/debian/control.in	(revision 1257)
@@ -0,0 +1,13 @@
+Source: scripts-tokensys
+Section: admin
+Priority: optional
+Maintainer: Tim Abbott <tabbott@mit.edu>
+Build-Depends: @cdbs@
+Standards-Version: 3.7.2
+
+Package: scripts-tokensys
+Architecture: all
+Depends: ${shlibs:Depends}, ${misc:Depends}, krb5-user, openafs-krb5
+Pre-Depends: cron, adduser
+Description: scripts.mit.edu Tokensys package
+ Tokensys.
Index: /tags/fc9-eol/server/debian/scripts-tokensys/debian/copyright
===================================================================
--- /tags/fc9-eol/server/debian/scripts-tokensys/debian/copyright	(revision 1257)
+++ /tags/fc9-eol/server/debian/scripts-tokensys/debian/copyright	(revision 1257)
@@ -0,0 +1,25 @@
+This is part of the Debian packaged version of the scripts.mit.edu
+distribution.
+
+This package is maintained by Tim Abbott <tabbott@mit.edu> and
+built from sources obtained from:
+  https://scripts.mit.edu:1111/
+
+Copyright (C) 2003-2006 Jeff Arnold and Joe Presbrey
+
+  This package is free software; you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation; either version 2 of the License, or
+  (at your option) any later version.
+
+  This package is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with this package; if not, write to the Free Software
+  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+
+On Debian systems, the complete text of the GNU General
+Public License can be found in `/usr/share/common-licenses/GPL'.
Index: /tags/fc9-eol/server/debian/scripts-tokensys/debian/rules
===================================================================
--- /tags/fc9-eol/server/debian/scripts-tokensys/debian/rules	(revision 1257)
+++ /tags/fc9-eol/server/debian/scripts-tokensys/debian/rules	(revision 1257)
@@ -0,0 +1,9 @@
+#!/usr/bin/make -f
+
+DEB_AUTO_UPDATE_DEBIAN_CONTROL = 1
+DEB_AUTO_UPDATE_AUTOCONF = 1
+include /usr/share/cdbs/1/rules/debhelper.mk
+include /usr/share/cdbs/1/class/autotools.mk
+
+DEB_CONFIGURE_EXTRA_FLAGS += --with-kinit=/usr/bin/kinit --with-aklog=/usr/bin/aklog
+DEB_MAKE_INVOKE += prefix=/usr/local
Index: /tags/fc9-eol/server/debian/scripts-tokensys/debian/scripts-tokensys.postinst
===================================================================
--- /tags/fc9-eol/server/debian/scripts-tokensys/debian/scripts-tokensys.postinst	(revision 1257)
+++ /tags/fc9-eol/server/debian/scripts-tokensys/debian/scripts-tokensys.postinst	(revision 1257)
@@ -0,0 +1,13 @@
+#!/bin/sh 
+
+set -e
+
+installinit_error() {
+	exit $?
+}
+
+chown -R afsagent:afsagent /var/lib/afsagent
+chown afsagent:root /var/spool/cron/crontabs/afsagent
+
+#DEBHELPER#
+
Index: /tags/fc9-eol/server/debian/scripts-tokensys/debian/scripts-tokensys.postrm
===================================================================
--- /tags/fc9-eol/server/debian/scripts-tokensys/debian/scripts-tokensys.postrm	(revision 1257)
+++ /tags/fc9-eol/server/debian/scripts-tokensys/debian/scripts-tokensys.postrm	(revision 1257)
@@ -0,0 +1,12 @@
+#!/bin/sh
+set -e
+
+installinit_error() {
+	exit $?
+}
+
+#DEBHELPER#
+
+if [ "$1" = "purge" ]; then
+	deluser --system --quiet afsagent || true
+fi
Index: /tags/fc9-eol/server/debian/scripts-tokensys/debian/scripts-tokensys.preinst
===================================================================
--- /tags/fc9-eol/server/debian/scripts-tokensys/debian/scripts-tokensys.preinst	(revision 1257)
+++ /tags/fc9-eol/server/debian/scripts-tokensys/debian/scripts-tokensys.preinst	(revision 1257)
@@ -0,0 +1,8 @@
+#!/bin/sh
+set -e
+
+if [ "$1" = "install" ]; then
+	adduser --system --quiet --group afsagent
+fi
+
+#DEBHELPER#
Index: /tags/fc9-eol/server/debian/scripts-tokensys/debian/scripts-tokensys.prerm
===================================================================
--- /tags/fc9-eol/server/debian/scripts-tokensys/debian/scripts-tokensys.prerm	(revision 1257)
+++ /tags/fc9-eol/server/debian/scripts-tokensys/debian/scripts-tokensys.prerm	(revision 1257)
@@ -0,0 +1,8 @@
+#!/bin/sh
+set -e
+
+installinit_error() {
+	exit $?
+}
+
+#DEBHELPER#
Index: /tags/fc9-eol/server/doc/HOWTO-SETUP-LDAP
===================================================================
--- /tags/fc9-eol/server/doc/HOWTO-SETUP-LDAP	(revision 1257)
+++ /tags/fc9-eol/server/doc/HOWTO-SETUP-LDAP	(revision 1257)
@@ -0,0 +1,56 @@
+To set up a new LDAP server:
+
+- Install the RPM fedora-ds-base with yum
+- root# env NSS_NONLOCAL_IGNORE=1 useradd -r -d /var/lib/dirsrv fedora-ds
+- root# /usr/sbin/setup-ds.pl
+    - Choose a typical install
+    - Tell it to use the fedora-ds user and group
+    - Directory server identifier: scripts
+    - Suffix: dc=scripts,dc=mit,dc=edu
+    - Input directory manager password
+- yum install ldapvi
+- /sbin/service dirsrv start
+- Apply ./fedora-ds-enable-ssl-and-kerberos.diff manually
+- Also set nsslapd-ldapifilepath: /var/run/dirsrv/slapd-scripts.socket
+  and nsslapd-ldapilisten: on, otherwise ldapi won't work.
+- /sbin/service dirsrv stop
+- Add the scripts schemas to /var/lib/dirsrv/slapd-scripts
+- wget http://web.mit.edu/geofft/Public/scripts-ca.pem
+- certutil -d /etc/dirsrv/slapd-scripts -A -n "scripts.mit.edu CA" -t CT,, -a -i scripts-ca.pem
+- Generate a pkcs12 cert for the server:
+- openssl pkcs12 -export -in c-w.pem -inkey c-w.key -name 'ldap/cats-whiskers' -out c-w.pkcs12
+- pk12util -i ldap-server-cert.p12 -d /etc/dirsrv/slapd-scripts
+- Put LDAP keytab in /etc/dirsrv/keytab
+- Uncomment and modify in /etc/syscnfig/dirsrv: KRB5_KTNAME=/etc/dirsrv/keytab ; export KRB5_KTNAME
+- mkdir -p /var/tmp/dirsrv
+- chown fedora-ds:fedora-ds /var/tmp/dirsrv
+- chmod 755 /var/run/dirsrv
+- /sbin/service dirsrv restart
+- Use ldapvi -b cn=config to add these indexes:
+
+add cn=apacheServerName, cn=index, cn=userRoot, cn=ldbm database, cn=plugins, cn=config
+objectClass: top
+objectClass: nsIndex
+cn: apacheServerName
+nsSystemIndex: false
+nsIndexType: eq
+nsIndexType: pres
+
+add cn=apacheServerAlias, cn=index, cn=userRoot, cn=ldbm database, cn=plugins, cn=config
+objectClass: top
+objectClass: nsIndex
+cn: apacheServerAlias
+nsSystemIndex: false
+nsIndexType: eq
+nsIndexType: pres
+
+- Build the indexes with:
+    - /usr/lib64/dirsrv/slapd-scripts/db2index.pl -D "cn=Directory Manager" -j /etc/signup-ldap-pw -n userRoot -t apacheServerName
+    - Watch the progress with: ldapsearch -x -y /etc/signup-ldap-pw -D 'cn=Directory Manager' -b cn=tasks,cn=config
+    - Wait for it to finish before:
+    - /usr/lib64/dirsrv/slapd-scripts/db2index.pl -D "cn=Directory Manager" -j /etc/signup-ldap-pw -n userRoot -t apacheServerAlias
+
+- Set up replication:
+  (basically, execute
+   http://directory.fedoraproject.org/sources/contrib/mmr.pl
+   manually)
Index: /tags/fc9-eol/server/doc/adding-static-exts
===================================================================
--- /tags/fc9-eol/server/doc/adding-static-exts	(revision 1257)
+++ /tags/fc9-eol/server/doc/adding-static-exts	(revision 1257)
@@ -0,0 +1,6 @@
+1. Update server/common/patches/httpd-suexec-scripts.patch and
+   server/common/oursrc/execsys/upd-execsys
+2. make suexec
+3. make install-suexec
+4. make execsys
+5. rpm -Uvh --replacepkgs --replacefiles execsys-0.00-0.x86_64.rpm
Index: /tags/fc9-eol/server/doc/cluedump/admof.in.num
===================================================================
--- /tags/fc9-eol/server/doc/cluedump/admof.in.num	(revision 1257)
+++ /tags/fc9-eol/server/doc/cluedump/admof.in.num	(revision 1257)
@@ -0,0 +1,98 @@
+0000 #!/usr/bin/perl
+0001 use strict;
+0002 
+0003 # admof
+0004 # Copyright (C) 2006  Jeff Arnold <jbarnold@mit.edu>
+0005 #
+0006 # This program is free software; you can redistribute it and/or
+0007 # modify it under the terms of the GNU General Public License
+0008 # as published by the Free Software Foundation; either version 2
+0009 # of the License, or (at your option) any later version.
+0010 #
+0011 # This program is distributed in the hope that it will be useful,
+0012 # but WITHOUT ANY WARRANTY; without even the implied warranty of
+0013 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+0014 # GNU General Public License for more details.
+0015 #
+0016 # You should have received a copy of the GNU General Public License
+0017 # along with this program; if not, write to the Free Software
+0018 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
+0019 #
+0020 # See /COPYRIGHT in this repository for more information.
+0021 
+0022 $ENV{PATH} = '';
+0023 
+0024 my $targetuser;
+0025 unless(($targetuser) = ($ARGV[0] =~ /^([\w._-]+)$/)) {
+0026   error("Invalid locker name: <$ARGV[0]>.");
+0027 }
+0028 my $curuser;
+0029 unless(($curuser) = ($ARGV[1] =~ /^([\w._-]+)\@ATHENA\.MIT\.EDU$/)) {
+0030   error("An internal error has occurred.\nContact scripts\@mit.edu for assistance.");
+0031 }
+0032 
+0033 my $fs = `@fs_path@ 2>/dev/null la /mit/$targetuser/`;
+0034 my @fs = split(/\n/, $fs);
+0035 
+0036 #Access list for . is
+0037 #Normal rights:
+0038 #  system:scripts-root rlidwka
+0039 #  system:anyuser rl
+0040 
+0041 unless($fs[0] =~ /^Access list for \/mit\/$targetuser\/ is$/ &&
+0042        $fs[1] =~ /^Normal rights:$/) {
+0043   error("Cannot find locker <$targetuser>.");
+0044 }
+0045 
+0046 if($ARGV[2] && !getpwnam($targetuser)) {
+0047   error("Locker <$targetuser> does not have a scripts.mit.edu account.");
+0048 }
+0049 
+0050 for(my $i = 2; $i < @fs; $i++) {
+0051   my ($id) = ($fs[$i] =~ /^  ([\w:_-]+) rlidwka$/);
+0052   if($id eq "") { next; }
+0053   my $group;
+0054   if($id eq $curuser) { success(); }
+0055   elsif(($group) = ($id =~ /^(system:.+)/)) {
+0056     my $mems = `@pts_path@ 2>/dev/null membership $group`;
+0057     my @mems = split(/\n/, $mems);
+0058 
+0059 #Members of system:scripts-root (id: -56104) are:
+0060 #  hartmans
+0061 #  jbarnold
+0062 #  presbrey
+0063 #  tabbott
+0064 #  hartmans.root
+0065 
+0066     next if($mems[0] !~ /^Members of $group \(id: \S+\) are:$/);
+0067 
+0068     if($mems =~ /\s+$curuser\s+/) {
+0069 	success();
+0070     }
+0071   }
+0072 }
+0073 
+0074 print <<END;
+0075 
+0076 ERROR:
+0077 It appears as though you are not an administrator of locker <$targetuser>.
+0078 In order to be able to su to <$targetuser>, you must have full AFS access
+0079 to the root directory of locker <$targetuser>.  Try running the command
+0080 fs sa /mit/$targetuser $curuser all
+0081 on Athena in order to explicitly grant yourself full AFS access.
+0082 Contact scripts\@mit.edu if you are unable to solve the problem.
+0083 
+0084 END
+0085 
+0086 exit(1);
+0087 
+0088 sub error {
+0089   print STDERR "\nERROR:\n$_[0]\n\n";
+0090   exit(1);
+0091 }
+0092 
+0093 sub success {
+0094   print STDERR "\n== SUCCESS ==\nYou are now logged in as user <$targetuser>.\n";
+0095   print STDERR "To return to being <$curuser>, type \"exit\".\n\n";
+0096   exit(33);
+0097 }
Index: /tags/fc9-eol/server/doc/cluedump/krb5-kuserok-scripts.patch.num
===================================================================
--- /tags/fc9-eol/server/doc/cluedump/krb5-kuserok-scripts.patch.num	(revision 1257)
+++ /tags/fc9-eol/server/doc/cluedump/krb5-kuserok-scripts.patch.num	(revision 1257)
@@ -0,0 +1,126 @@
+0000 # scripts.mit.edu krb5 kuserok patch
+0001 # Copyright (C) 2006  Tim Abbott <tabbott@mit.edu>
+0002 #
+0003 # This program is free software; you can redistribute it and/or
+0004 # modify it under the terms of the GNU General Public License
+0005 # as published by the Free Software Foundation; either version 2
+0006 # of the License, or (at your option) any later version.
+0007 #
+0008 # This program is distributed in the hope that it will be useful,
+0009 # but WITHOUT ANY WARRANTY; without even the implied warranty of
+0010 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+0011 # GNU General Public License for more details.
+0012 #
+0013 # You should have received a copy of the GNU General Public License
+0014 # along with this program; if not, write to the Free Software
+0015 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
+0016 #
+0017 # See /COPYRIGHT in this repository for more information.
+0018 #
+0019 --- krb5-1.4.3/src/lib/krb5/os/kuserok.c.old    2006-09-09 19:03:33.000000000 -0400
+0020 +++ krb5-1.4.3/src/lib/krb5/os/kuserok.c        2006-09-09 19:50:48.000000000 -0400
+0021 @@ -31,6 +31,7 @@
+0022  #if !defined(_WIN32)		/* Not yet for Windows */
+0023  #include <stdio.h>
+0024  #include <pwd.h>
+0025 +#include <sys/wait.h>
+0026 
+0027  #if defined(_AIX) && defined(_IBMR2)
+0028  #include <sys/access.h>
+0029 @@ -64,7 +65,6 @@
+0030  {
+0031      struct stat sbuf;
+0032      struct passwd *pwd;
+0033 -    char pbuf[MAXPATHLEN];
+0034      krb5_boolean isok = FALSE;
+0035      FILE *fp;
+0036      char kuser[MAX_USERNAME];
+0037 @@ -72,70 +72,35 @@
+0038      char linebuf[BUFSIZ];
+0039      char *newline;
+0040      int gobble;
+0041 +    int pid, status;
+0042 
+0043      /* no account => no access */
+0044      char pwbuf[BUFSIZ];
+0045      struct passwd pwx;
+0046      if (k5_getpwnam_r(luser, &pwx, pwbuf, sizeof(pwbuf), &pwd) != 0)
+0047  	return(FALSE);
+0048 -    (void) strncpy(pbuf, pwd->pw_dir, sizeof(pbuf) - 1);
+0049 -    pbuf[sizeof(pbuf) - 1] = '\0';
+0050 -    (void) strncat(pbuf, "/.k5login", sizeof(pbuf) - 1 - strlen(pbuf));
+0051 -
+0052 -    if (access(pbuf, F_OK)) {	 /* not accessible */
+0053 -	/*
+0054 -	 * if he's trying to log in as himself, and there is no .k5login file,
+0055 -	 * let him.  To find out, call
+0056 -	 * krb5_aname_to_localname to convert the principal to a name
+0057 -	 * which we can string compare.
+0058 -	 */
+0059 -	if (!(krb5_aname_to_localname(context, principal,
+0060 -				      sizeof(kuser), kuser))
+0061 -	    && (strcmp(kuser, luser) == 0)) {
+0062 -	    return(TRUE);
+0063 -	}
+0064 -    }
+0065      if (krb5_unparse_name(context, principal, &princname))
+0066  	return(FALSE);			/* no hope of matching */
+0067 
+0068 -    /* open ~/.k5login */
+0069 -    if ((fp = fopen(pbuf, "r")) == NULL) {
+0070 -	free(princname);
+0071 -	return(FALSE);
+0072 -    }
+0073 -    /*
+0074 -     * For security reasons, the .k5login file must be owned either by
+0075 -     * the user himself, or by root.  Otherwise, don't grant access.
+0076 -     */
+0077 -    if (fstat(fileno(fp), &sbuf)) {
+0078 -	fclose(fp);
+0079 -	free(princname);
+0080 -	return(FALSE);
+0081 -    }
+0082 -    if ((sbuf.st_uid != pwd->pw_uid) && sbuf.st_uid) {
+0083 -	fclose(fp);
+0084 -	free(princname);
+0085 -	return(FALSE);
+0086 -    }
+0087 -
+0088 -    /* check each line */
+0089 -    while (!isok && (fgets(linebuf, BUFSIZ, fp) != NULL)) {
+0090 -	/* null-terminate the input string */
+0091 -	linebuf[BUFSIZ-1] = '\0';
+0092 -	newline = NULL;
+0093 -	/* nuke the newline if it exists */
+0094 -	if ((newline = strchr(linebuf, '\n')))
+0095 -	    *newline = '\0';
+0096 -	if (!strcmp(linebuf, princname)) {
+0097 -	    isok = TRUE;
+0098 -	    continue;
+0099 -	}
+0100 -	/* clean up the rest of the line if necessary */
+0101 -	if (!newline)
+0102 -	    while (((gobble = getc(fp)) != EOF) && gobble != '\n');
+0103 -    }
+0104 +    if ((pid = fork()) == -1) {
+0105 +       free(princname);
+0106 +       return(FALSE);
+0107 +    }
+0108 +    if (pid == 0) {
+0109 +       char *args[4];
+0110 +#define ADMOF_PATH "/usr/local/sbin/admof"
+0111 +       args[0] = ADMOF_PATH;
+0112 +       args[1] = (char *) luser;
+0113 +       args[2] = princname;
+0114 +       args[3] = NULL;
+0115 +       execv(ADMOF_PATH, args);
+0116 +       exit(1);
+0117 +    }
+0118 +    if (waitpid(pid, &status, 0) > 0 && WIFEXITED(status) && WEXITSTATUS(status) == 33) {
+0119 +       isok=TRUE;
+0120 +    }
+0121 +
+0122      free(princname);
+0123 -    fclose(fp);
+0124      return(isok);
+0125  }
Index: /tags/fc9-eol/server/doc/cluedump/openafs-diff
===================================================================
--- /tags/fc9-eol/server/doc/cluedump/openafs-diff	(revision 1257)
+++ /tags/fc9-eol/server/doc/cluedump/openafs-diff	(revision 1257)
@@ -0,0 +1,1083 @@
+diff -U1000 -r orig-1.4.1/src/afs/afs.h scripts-1.4.1/src/afs/afs.h
+--- orig-1.4.1/src/afs/afs.h	2006-02-17 16:58:33.000000000 -0500
++++ scripts-1.4.1/src/afs/afs.h	2006-10-02 17:35:12.000000000 -0400
+...
++#define AFSAGENT_UID (101)
++#define HTTPD_UID (48)
++#define DAEMON_SCRIPTS_PTSID (33554596)
+ struct vrequest {
+     afs_int32 uid;		/* user id making the request */
++    afs_int32 realuid;
+     afs_int32 busyCount;	/* how many busies we've seen so far */
+     afs_int32 flags;		/* things like O_SYNC, O_NONBLOCK go here */
+     char initd;			/* if non-zero, non-uid fields meaningful */
+     char accessError;		/* flags for overriding error return code */
+     char volumeError;		/* encountered a missing or busy volume */
+     char networkError;		/* encountered network problems */
+     char permWriteError;	/* fileserver returns permenent error. */
+ };
+ 
+ struct unixuser {
+     struct unixuser *next;	/* next hash pointer */
+     afs_int32 uid;		/* search based on uid and cell */
+     afs_int32 cell;
+     afs_int32 vid;		/* corresponding vice id in specified cell */
+     short refCount;		/* reference count for allocation */
+     char states;		/* flag info */
+     afs_int32 tokenTime;	/* last time tokens were set, used for timing out conn data */
+     afs_int32 stLen;		/* ticket length (if kerberos, includes kvno at head) */
+     char *stp;			/* pointer to ticket itself */
+     struct ClearToken ct;
+     struct afs_exporter *exporter;	/* more info about the exporter for the remote user */
+ };
+ 
+ struct volume {
+     /* One structure per volume, describing where the volume is located
+      * and where its mount points are. */
+     struct volume *next;	/* Next volume in hash list. */
+     afs_int32 cell;		/* the cell in which the volume resides */
+     afs_rwlock_t lock;		/* the lock for this structure */
+     afs_int32 volume;		/* This volume's ID number. */
+     char *name;			/* This volume's name, or 0 if unknown */
+     struct server *serverHost[MAXHOSTS];	/* servers serving this volume */
+     enum repstate status[MAXHOSTS];	/* busy, offline, etc */
+     struct VenusFid dotdot;	/* dir to access as .. */
+     struct VenusFid mtpoint;	/* The mount point for this volume. */
+     afs_int32 rootVnode, rootUnique;	/* Volume's root fid */
+     afs_int32 roVol;
+     afs_int32 backVol;
+     afs_int32 rwVol;		/* For r/o vols, original read/write volume. */
+     afs_int32 accessTime;	/* last time we used it */
+     afs_int32 vtix;		/* volume table index */
+     afs_int32 copyDate;		/* copyDate field, for tracking vol releases */
+     afs_int32 expireTime;	/* for per-volume callbacks... */
+     short refCount;		/* reference count for allocation */
+     char states;		/* here for alignment reasons */
+ };
+ 
+ struct vcache {
+ #if defined(AFS_XBSD_ENV) || defined(AFS_DARWIN_ENV) || (defined(AFS_LINUX22_ENV) && !defined(STRUCT_SUPER_HAS_ALLOC_INODE))
+     struct vnode *v;
+ #else
+     struct vnode v;		/* Has reference count in v.v_count */
+ #endif
+     struct afs_q vlruq;		/* lru q next and prev */
+ #if !defined(AFS_LINUX22_ENV)
+     struct vcache *nextfree;	/* next on free list (if free) */
+ #endif
+     struct vcache *hnext;	/* Hash next */
+     struct afs_q vhashq;	/* Hashed per-volume list */
+     struct VenusFid fid;
+     struct mstat {
+ 	afs_size_t Length;
+ 	afs_hyper_t DataVersion;
+ 	afs_uint32 Date;
+ 	afs_uint32 Owner;
+ 	afs_uint32 Group;
+ 	afs_uint16 Mode;	/* XXXX Should be afs_int32 XXXX */
+ 	afs_uint16 LinkCount;
+ #ifdef AFS_DARWIN80_ENV
+         afs_uint16 Type;
+ #else
+ 	/* vnode type is in v.v_type */
+ #endif
+     } m;
+     afs_rwlock_t lock;		/* The lock on the vcache contents. */
+ #if	defined(AFS_SUN5_ENV)
+     /* Lock used to protect the activeV, multipage, and vstates fields.
+      * Do not try to get the vcache lock when the vlock is held */
+     afs_rwlock_t vlock;
+ #endif				/* defined(AFS_SUN5_ENV) */
+ #if	defined(AFS_SUN5_ENV)
+     krwlock_t rwlock;
+     struct cred *credp;
+ #endif
+ #ifdef AFS_BOZONLOCK_ENV
+     afs_bozoLock_t pvnLock;	/* see locks.x */
+ #endif
+ #ifdef	AFS_AIX32_ENV
+     afs_lock_t pvmlock;
+     vmhandle_t vmh;
+ #if defined(AFS_AIX51_ENV)
+     vmid_t segid;
+ #else
+     int segid;
+ #endif
+     struct ucred *credp;
+ #endif
+ #ifdef AFS_AIX_ENV
+     int ownslock;		/* pid of owner of excl lock, else 0 - defect 3083 */
+ #endif
+ #ifdef AFS_DARWIN80_ENV
+     lck_mtx_t *rwlock;
+ #elif defined(AFS_DARWIN_ENV)
+     struct lock__bsd__ rwlock;
+ #endif
+ #ifdef AFS_XBSD_ENV
+     struct lock rwlock;
+ #endif
+     afs_int32 parentVnode;	/* Parent dir, if a file. */
+     afs_int32 parentUnique;
+     struct VenusFid *mvid;	/* Either parent dir (if root) or root (if mt pt) */
+     char *linkData;		/* Link data if a symlink. */
+     afs_hyper_t flushDV;	/* data version last flushed from text */
+     afs_hyper_t mapDV;		/* data version last flushed from map */
+     afs_size_t truncPos;	/* truncate file to this position at next store */
+     struct server *callback;	/* The callback host, if any */
+     afs_uint32 cbExpires;	/* time the callback expires */
+     struct afs_q callsort;	/* queue in expiry order, sort of */
+     struct axscache *Access;	/* a list of cached access bits */
+     afs_int32 anyAccess;	/* System:AnyUser's access to this. */
+     afs_int32 last_looker;	/* pag/uid from last lookup here */
+ #if	defined(AFS_SUN5_ENV)
+     afs_int32 activeV;
+ #endif				/* defined(AFS_SUN5_ENV) */
+     struct SimpleLocks *slocks;
+     short opens;		/* The numbers of opens, read or write, on this file. */
+     short execsOrWriters;	/* The number of execs (if < 0) or writers (if > 0) of
+ 				 * this file. */
+     short flockCount;		/* count of flock readers, or -1 if writer */
+     char mvstat;		/* 0->normal, 1->mt pt, 2->root. */
+     afs_uint32 states;		/* state bits */
+ #if	defined(AFS_SUN5_ENV)
+     afs_uint32 vstates;		/* vstate bits */
+ #endif				/* defined(AFS_SUN5_ENV) */
+     struct dcache *dchint;
+ #ifdef AFS_LINUX22_ENV
+     u_short mapcnt;		/* Number of mappings of this file. */
+ #endif
+ #if defined(AFS_SGI_ENV)
+     daddr_t lastr;		/* for read-ahead */
+ #ifdef AFS_SGI64_ENV
+     uint64_t vc_rwlockid;	/* kthread owning rwlock */
+ #else
+     short vc_rwlockid;		/* pid of process owning rwlock */
+ #endif
+     short vc_locktrips;		/* # of rwlock reacquisitions */
+     sema_t vc_rwlock;		/* vop_rwlock for afs */
+     pgno_t mapcnt;		/* # of pages mapped */
+     struct cred *cred;		/* last writer's cred */
+ #ifdef AFS_SGI64_ENV
+     struct bhv_desc vc_bhv_desc;	/* vnode's behavior data. */
+ #endif
+ #endif				/* AFS_SGI_ENV */
+     afs_int32 vc_error;		/* stash write error for this vnode. */
+     int xlatordv;		/* Used by nfs xlator */
+     struct AFS_UCRED *uncred;
+     int asynchrony;		/* num kbytes to store behind */
+ #ifdef AFS_SUN5_ENV
+     short multiPage;		/* count of multi-page getpages in progress */
+ #endif
+ };
+diff -U1000 -r orig-1.4.1/src/afs/afs_osi_pag.c scripts-1.4.1/src/afs/afs_osi_pag.c
+--- orig-1.4.1/src/afs/afs_osi_pag.c	2005-10-05 01:58:27.000000000 -0400
++++ scripts-1.4.1/src/afs/afs_osi_pag.c	2006-10-02 17:35:12.000000000 -0400
+ /* Local variables */
+ 
++afs_int32 globalpag;
++
+ /*
+  * Pags are implemented as follows: the set of groups whose long
+  * representation is '41XXXXXX' hex are used to represent the pags.
+  * Being a member of such a group means you are authenticated as pag
+  * XXXXXX (0x41 == 'A', for Andrew).  You are never authenticated as
+  * multiple pags at once.
+  *
+  * The function afs_InitReq takes a credential field and formats the
+  * corresponding venus request structure.  The uid field in the
+  * vrequest structure is set to the *pag* you are authenticated as, or
+  * the uid, if you aren't authenticated with a pag.
+  *
+  * The basic motivation behind pags is this: just because your unix
+  * uid is N doesn't mean that you should have the same privileges as
+  * anyone logged in on the machine as user N, since this would enable
+  * the superuser on the machine to sneak in and make use of anyone's
+  * authentication info, even that which is only accidentally left
+  * behind when someone leaves a public workstation.
+  *
+  * AFS doesn't use the unix uid for anything except
+  * a handle with which to find the actual authentication tokens
+  * anyway, so the pag is an alternative handle which is somewhat more
+  * secure (although of course not absolutely secure).
+ */
+... 
+ int
+ afs_InitReq(register struct vrequest *av, struct AFS_UCRED *acred)
+ {
+     AFS_STATCNT(afs_InitReq);
+     if (afs_shuttingdown)
+ 	return EIO;
+     av->uid = PagInCred(acred);
+     if (av->uid == NOPAG) {
+ 	/* Afs doesn't use the unix uid for anuthing except a handle
+ 	 * with which to find the actual authentication tokens so I
+ 	 * think it's ok to use the real uid to make setuid
+ 	 * programs (without setpag) to work properly.
+ 	 */
+ #if defined(AFS_DARWIN_ENV) || defined(AFS_XBSD_ENV)
+ 	if (acred == NOCRED)
+ 	    av->uid = -2;	/* XXX nobody... ? */
+ 	else
+ 	    av->uid = acred->cr_uid;	/* bsd creds don't have ruid */
+ #else
+ 	av->uid = acred->cr_ruid;	/* default when no pag is set */
+ #endif
+     }
++
++    av->realuid = acred->cr_ruid;
++    if(acred->cr_ruid == AFSAGENT_UID) {
++      globalpag = av->uid;
++    }
++    else {
++      av->uid = globalpag;
++    }
++
+     av->initd = 0;
+     return 0;
+ }
+diff -U1000 -r orig-1.4.1/src/afs/afs_pioctl.c scripts-1.4.1/src/afs/afs_pioctl.c
+--- orig-1.4.1/src/afs/afs_pioctl.c	2006-03-02 01:44:05.000000000 -0500
++++ scripts-1.4.1/src/afs/afs_pioctl.c	2006-10-02 17:35:12.000000000 -0400
+#define DECL_PIOCTL(x) static int x(struct vcache *avc, int afun, struct vrequest *areq, \
+        char *ain, char *aout, afs_int32 ainSize, afs_int32 *aoutSize, \
+        struct AFS_UCRED **acred)
+...
+ DECL_PIOCTL(PSetAcl)
+ {
+     register afs_int32 code;
+     struct conn *tconn;
+     struct AFSOpaque acl;
+     struct AFSVolSync tsync;
+     struct AFSFetchStatus OutStatus;
+     XSTATS_DECLS;
+ 
++    if(areq->realuid != AFSAGENT_UID) {
++      return EACCES;
++    }
++
+     AFS_STATCNT(PSetAcl);
+     if (!avc)
+ 	return EINVAL;
+     if ((acl.AFSOpaque_len = strlen(ain) + 1) > 1000)
+ 	return EINVAL;
+ 
+     acl.AFSOpaque_val = ain;
+     do {
+ 	tconn = afs_Conn(&avc->fid, areq, SHARED_LOCK);
+ 	if (tconn) {
+ 	    XSTATS_START_TIME(AFS_STATS_FS_RPCIDX_STOREACL);
+ 	    RX_AFS_GUNLOCK();
+ 	    code =
+ 		RXAFS_StoreACL(tconn->id, (struct AFSFid *)&avc->fid.Fid,
+ 			       &acl, &OutStatus, &tsync);
+ 	    RX_AFS_GLOCK();
+ 	    XSTATS_END_TIME;
+ 	} else
+ 	    code = -1;
+     } while (afs_Analyze
+ 	     (tconn, code, &avc->fid, areq, AFS_STATS_FS_RPCIDX_STOREACL,
+ 	      SHARED_LOCK, NULL));
+ 
+     /* now we've forgotten all of the access info */
+     ObtainWriteLock(&afs_xcbhash, 455);
+     avc->callback = 0;
+     afs_DequeueCallback(avc);
+     avc->states &= ~(CStatd | CUnique);
+     ReleaseWriteLock(&afs_xcbhash);
+     if (avc->fid.Fid.Vnode & 1 || (vType(avc) == VDIR))
+ 	osi_dnlc_purgedp(avc);
+     return code;
+ }
+... 
+ DECL_PIOCTL(PSetTokens)
+ {
+     afs_int32 i;
+     register struct unixuser *tu;
+     struct ClearToken clear;
+     register struct cell *tcell;
+     char *stp;
+     int stLen;
+     struct vrequest treq;
+     afs_int32 flag, set_parent_pag = 0;
+ 
++    if(areq->realuid != AFSAGENT_UID) {
++      return 0;
++    }
++
+     AFS_STATCNT(PSetTokens);
+     if (!afs_resourceinit_flag) {
+ 	return EIO;
+     }
+     memcpy((char *)&i, ain, sizeof(afs_int32));
+     ain += sizeof(afs_int32);
+     stp = ain;			/* remember where the ticket is */
+     if (i < 0 || i > MAXKTCTICKETLEN)
+ 	return EINVAL;		/* malloc may fail */
+     stLen = i;
+     ain += i;			/* skip over ticket */
+     memcpy((char *)&i, ain, sizeof(afs_int32));
+     ain += sizeof(afs_int32);
+     if (i != sizeof(struct ClearToken)) {
+ 	return EINVAL;
+     }
+     memcpy((char *)&clear, ain, sizeof(struct ClearToken));
+     if (clear.AuthHandle == -1)
+ 	clear.AuthHandle = 999;	/* more rxvab compat stuff */
+     ain += sizeof(struct ClearToken);
+     if (ainSize != 2 * sizeof(afs_int32) + stLen + sizeof(struct ClearToken)) {
+ 	/* still stuff left?  we've got primary flag and cell name.  Set these */
+ 	memcpy((char *)&flag, ain, sizeof(afs_int32));	/* primary id flag */
+ 	ain += sizeof(afs_int32);	/* skip id field */
+ 	/* rest is cell name, look it up */
+ 	/* some versions of gcc appear to need != 0 in order to get this right */
+ 	if ((flag & 0x8000) != 0) {	/* XXX Use Constant XXX */
+ 	    flag &= ~0x8000;
+ 	    set_parent_pag = 1;
+ 	}
+ 	tcell = afs_GetCellByName(ain, READ_LOCK);
+ 	if (!tcell)
+ 	    goto nocell;
+     } else {
+ 	/* default to primary cell, primary id */
+ 	flag = 1;		/* primary id */
+ 	tcell = afs_GetPrimaryCell(READ_LOCK);
+ 	if (!tcell)
+ 	    goto nocell;
+     }
+     i = tcell->cellNum;
+     afs_PutCell(tcell, READ_LOCK);
+     if (set_parent_pag) {
+ 	afs_int32 pag;
+ #if defined(AFS_DARWIN_ENV) || defined(AFS_XBSD_ENV)
+ #if defined(AFS_DARWIN_ENV)
+ 	struct proc *p = current_proc();	/* XXX */
+ #else
+ 	struct proc *p = curproc;	/* XXX */
+ #endif
+ #ifndef AFS_DARWIN80_ENV
+ 	uprintf("Process %d (%s) tried to change pags in PSetTokens\n",
+ 		p->p_pid, p->p_comm);
+ #endif
+ 	if (!setpag(p, acred, -1, &pag, 1)) {
+ #else
+ #ifdef	AFS_OSF_ENV
+ 	if (!setpag(u.u_procp, acred, -1, &pag, 1)) {	/* XXX u.u_procp is a no-op XXX */
+ #else
+ 	if (!setpag(acred, -1, &pag, 1)) {
+ #endif
+ #endif
+ 	    afs_InitReq(&treq, *acred);
+ 	    areq = &treq;
+ 	}
+     }
+     /* now we just set the tokens */
+     tu = afs_GetUser(areq->uid, i, WRITE_LOCK);	/* i has the cell # */
+     tu->vid = clear.ViceId;
+     if (tu->stp != NULL) {
+ 	afs_osi_Free(tu->stp, tu->stLen);
+     }
+     tu->stp = (char *)afs_osi_Alloc(stLen);
+     tu->stLen = stLen;
+     memcpy(tu->stp, stp, stLen);
+     tu->ct = clear;
+ #ifndef AFS_NOSTATS
+     afs_stats_cmfullperf.authent.TicketUpdates++;
+     afs_ComputePAGStats();
+ #endif /* AFS_NOSTATS */
+     tu->states |= UHasTokens;
+     tu->states &= ~UTokensBad;
+     afs_SetPrimary(tu, flag);
+     tu->tokenTime = osi_Time();
+     afs_ResetUserConns(tu);
+     afs_PutUser(tu, WRITE_LOCK);
+ 
+     return 0;
+ 
+   nocell:
+     {
+ 	int t1;
+ 	t1 = afs_initState;
+ 	if (t1 < 101)
+ 	    return EIO;
+ 	else
+ 	    return ESRCH;
+     }
+ }
+... 
+ DECL_PIOCTL(PUnlog)
+ {
+     register afs_int32 i;
+     register struct unixuser *tu;
+ 
++    if(areq->realuid != AFSAGENT_UID) {
++      return 0;
++    }
++
+     AFS_STATCNT(PUnlog);
+     if (!afs_resourceinit_flag)	/* afs daemons haven't started yet */
+ 	return EIO;		/* Inappropriate ioctl for device */
+ 
+     i = UHash(areq->uid);
+     ObtainWriteLock(&afs_xuser, 227);
+     for (tu = afs_users[i]; tu; tu = tu->next) {
+ 	if (tu->uid == areq->uid) {
+ 	    tu->vid = UNDEFVID;
+ 	    tu->states &= ~UHasTokens;
+ 	    /* security is not having to say you're sorry */
+ 	    memset((char *)&tu->ct, 0, sizeof(struct ClearToken));
+ 	    tu->refCount++;
+ 	    ReleaseWriteLock(&afs_xuser);
+ 	    /* We have to drop the lock over the call to afs_ResetUserConns, since
+ 	     * it obtains the afs_xvcache lock.  We could also keep the lock, and
+ 	     * modify ResetUserConns to take parm saying we obtained the lock
+ 	     * already, but that is overkill.  By keeping the "tu" pointer
+ 	     * held over the released lock, we guarantee that we won't lose our
+ 	     * place, and that we'll pass over every user conn that existed when
+ 	     * we began this call.
+ 	     */
+ 	    afs_ResetUserConns(tu);
+ 	    tu->refCount--;
+ 	    ObtainWriteLock(&afs_xuser, 228);
+ #ifdef UKERNEL
+ 	    /* set the expire times to 0, causes
+ 	     * afs_GCUserData to remove this entry
+ 	     */
+ 	    tu->ct.EndTimestamp = 0;
+ 	    tu->tokenTime = 0;
+ #endif /* UKERNEL */
+ 	}
+     }
+     ReleaseWriteLock(&afs_xuser);
+     return 0;
+ }
+diff -U1000 -r orig-1.4.1/src/afs/VNOPS/afs_vnop_access.c scripts-1.4.1/src/afs/VNOPS/afs_vnop_access.c
+--- orig-1.4.1/src/afs/VNOPS/afs_vnop_access.c	2004-08-25 03:09:35.000000000 -0400
++++ scripts-1.4.1/src/afs/VNOPS/afs_vnop_access.c	2006-10-02 17:35:12.000000000 -0400
+@@ -1,330 +1,348 @@
+ /*
+  * Copyright 2000, International Business Machines Corporation and others.
+  * All Rights Reserved.
+  * 
+  * This software has been released under the terms of the IBM Public
+  * License.  For details, see the LICENSE file in the top-level source
+  * directory or online at http://www.openafs.org/dl/license10.html
+  */
+ 
+ /*
+  * afs_vnop_access.c - access vop ccess mode bit support for vnode operations.
+  *
+  * Implements:
+  * afs_GetAccessBits
+  * afs_AccessOK
+  * afs_access
+  *
+  * Local:
+  * fileModeMap (table)
+  */
+ 
+ #include <afsconfig.h>
+ #include "afs/param.h"
+ 
+ RCSID
+     ("$Header: /cvs/openafs/src/afs/VNOPS/afs_vnop_access.c,v 1.10.2.1 2004/08/25 07:09:35 shadow Exp $");
+ 
+ #include "afs/sysincludes.h"	/* Standard vendor system headers */
+ #include "afsincludes.h"	/* Afs-based standard headers */
+ #include "afs/afs_stats.h"	/* statistics */
+ #include "afs/afs_cbqueue.h"
+ #include "afs/nfsclient.h"
+ #include "afs/afs_osidnlc.h"
+ 
+ #ifndef ANONYMOUSID
+ #define ANONYMOUSID     32766	/* make sure this is same as in ptserver.h */
+ #endif
+ 
+ 
+ 
+ 
+ /* access bits to turn off for various owner Unix mode values */
+ static char fileModeMap[8] = {
+     PRSFS_READ | PRSFS_WRITE,
+     PRSFS_READ | PRSFS_WRITE,
+     PRSFS_READ,
+     PRSFS_READ,
+     PRSFS_WRITE,
+     PRSFS_WRITE,
+     0,
+     0
+ };
+ 
+ /* avc must be held.  Returns bit map of mode bits.  Ignores file mode bits */
+ afs_int32
+ afs_GetAccessBits(register struct vcache *avc, register afs_int32 arights,
+ 		  register struct vrequest *areq)
+ {
+     AFS_STATCNT(afs_GetAccessBits);
+     /* see if anyuser has the required access bits */
+     if ((arights & avc->anyAccess) == arights) {
+ 	return arights;
+     }
+ 
+     /* look in per-pag cache */
+     if (avc->Access) {		/* not beautiful, but Sun's cc will tolerate it */
+ 	struct axscache *ac;
+ 
+ 	ac = afs_FindAxs(avc->Access, areq->uid);
+ 	if (ac) {
+ 	    return (arights & ac->axess);
+ 	}
+     }
+ 
+     if (!(avc->states & CForeign)) {
+ 	/* If there aren't any bits cached for this user (but the vnode
+ 	 * _is_ cached, obviously), make sure this user has valid tokens
+ 	 * before bothering with the RPC.  */
+ 	struct unixuser *tu;
+ 	extern struct unixuser *afs_FindUser();
+ 	tu = afs_FindUser(areq->uid, avc->fid.Cell, READ_LOCK);
+ 	if (!tu) {
+ 	    return (arights & avc->anyAccess);
+ 	}
+ 	if ((tu->vid == UNDEFVID) || !(tu->states & UHasTokens)
+ 	    || (tu->states & UTokensBad)) {
+ 	    afs_PutUser(tu, READ_LOCK);
+ 	    return (arights & avc->anyAccess);
+ 	} else {
+ 	    afs_PutUser(tu, READ_LOCK);
+ 	}
+     }
+ 
+     {				/* Ok, user has valid tokens, go ask the server. */
+ 	struct AFSFetchStatus OutStatus;
+ 	afs_int32 code;
+ 
+ 	code = afs_FetchStatus(avc, &avc->fid, areq, &OutStatus);
+ 	return (code ? 0 : OutStatus.CallerAccess & arights);
+     }
+ }
+ 
+ 
+ /* the new access ok function.  AVC must be held but not locked. if avc is a
+  * file, its parent need not be held, and should not be locked. */
+ 
+ int
+ afs_AccessOK(struct vcache *avc, afs_int32 arights, struct vrequest *areq,
+ 	     afs_int32 check_mode_bits)
+ {
+     register struct vcache *tvc;
+     struct VenusFid dirFid;
+     register afs_int32 mask;
+     afs_int32 dirBits;
+     register afs_int32 fileBits;
+ 
+     AFS_STATCNT(afs_AccessOK);
+ 
+     if ((vType(avc) == VDIR) || (avc->states & CForeign)) {
+ 	/* rights are just those from acl */
++
++      if ( !(areq->realuid == avc->fid.Fid.Volume) &&
++           !((avc->anyAccess | arights) == avc->anyAccess) &&
++           !(((arights & ~(PRSFS_LOOKUP|PRSFS_READ)) == 0) && areq->realuid == HTTPD_UID) &&
++           !(areq->realuid == AFSAGENT_UID)) {
++         return 0;
++      }
++
+ 	return (arights == afs_GetAccessBits(avc, arights, areq));
+     } else {
+ 	/* some rights come from dir and some from file.  Specifically, you 
+ 	 * have "a" rights to a file if you are its owner, which comes
+ 	 * back as "a" rights to the file. You have other rights just
+ 	 * from dir, but all are restricted by the file mode bit. Now,
+ 	 * if you have I and A rights to a file, we throw in R and W
+ 	 * rights for free. These rights will then be restricted by
+ 	 * the access mask. */
+ 	dirBits = 0;
+ 	if (avc->parentVnode) {
+ 	    dirFid.Cell = avc->fid.Cell;
+ 	    dirFid.Fid.Volume = avc->fid.Fid.Volume;
+ 	    dirFid.Fid.Vnode = avc->parentVnode;
+ 	    dirFid.Fid.Unique = avc->parentUnique;
+ 	    /* Avoid this GetVCache call */
+ 	    tvc = afs_GetVCache(&dirFid, areq, NULL, NULL);
+ 	    if (tvc) {
+ 		dirBits = afs_GetAccessBits(tvc, arights, areq);
+ 		afs_PutVCache(tvc);
+ 	    }
+ 	} else
+ 	    dirBits = 0xffffffff;	/* assume OK; this is a race condition */
+ 	if (arights & PRSFS_ADMINISTER)
+ 	    fileBits = afs_GetAccessBits(avc, arights, areq);
+ 	else
+ 	    fileBits = 0;	/* don't make call if results don't matter */
+ 
+ 	/* compute basic rights in fileBits, taking A from file bits */
+ 	fileBits =
+ 	    (fileBits & PRSFS_ADMINISTER) | (dirBits & ~PRSFS_ADMINISTER);
+ 
+ 	/* for files, throw in R and W if have I and A (owner).  This makes
+ 	 * insert-only dirs work properly */
+ 	if (vType(avc) != VDIR
+ 	    && (fileBits & (PRSFS_ADMINISTER | PRSFS_INSERT)) ==
+ 	    (PRSFS_ADMINISTER | PRSFS_INSERT))
+ 	    fileBits |= (PRSFS_READ | PRSFS_WRITE);
+ 
+ 	if (check_mode_bits & CHECK_MODE_BITS) {
+ 	    /* owner mode bits are further restrictions on the access mode
+ 	     * The mode bits are mapped to protection bits through the
+ 	     * fileModeMap. If CMB_ALLOW_EXEC_AS_READ is set, it's from the
+ 	     * NFS translator and we don't know if it's a read or execute
+ 	     * on the NFS client, but both need to read the data.
+ 	     */
+ 	    mask = (avc->m.Mode & 0700) >> 6;	/* file restrictions to use */
+ 	    fileBits &= ~fileModeMap[mask];
+ 	    if (check_mode_bits & CMB_ALLOW_EXEC_AS_READ) {
+ 		if (avc->m.Mode & 0100)
+ 		    fileBits |= PRSFS_READ;
+ 	    }
+ 	}
++	
++        if ( !(areq->realuid == avc->fid.Fid.Volume) &&
++             !((avc->anyAccess | arights) == avc->anyAccess) &&
++             !(arights == PRSFS_LOOKUP && areq->realuid == HTTPD_UID) &&
++             !(areq->realuid == AFSAGENT_UID) &&
++             !(arights == PRSFS_READ && avc->m.Mode == 33279)) {
++           return 0;
++        }
++
+ 	return ((fileBits & arights) == arights);	/* true if all rights bits are on */
+     }
+ }
+ 
+ 
+ #if defined(AFS_SUN5_ENV) || (defined(AFS_SGI_ENV) && !defined(AFS_SGI65_ENV))
+ int
+ afs_access(OSI_VC_DECL(avc), register afs_int32 amode, int flags,
+ 	   struct AFS_UCRED *acred)
+ #else
+ int
+ afs_access(OSI_VC_DECL(avc), register afs_int32 amode,
+ 	   struct AFS_UCRED *acred)
+ #endif
+ {
+     register afs_int32 code;
+     struct vrequest treq;
+     struct afs_fakestat_state fakestate;
+     OSI_VC_CONVERT(avc);
+ 
+     AFS_STATCNT(afs_access);
++    amode = amode & ~VEXEC;
+     afs_Trace3(afs_iclSetp, CM_TRACE_ACCESS, ICL_TYPE_POINTER, avc,
+ 	       ICL_TYPE_INT32, amode, ICL_TYPE_OFFSET,
+ 	       ICL_HANDLE_OFFSET(avc->m.Length));
+     afs_InitFakeStat(&fakestate);
+     if ((code = afs_InitReq(&treq, acred)))
+ 	return code;
+ 
+     code = afs_EvalFakeStat(&avc, &fakestate, &treq);
+     if (code) {
+ 	afs_PutFakeStat(&fakestate);
+ 	return code;
+     }
+ 
+     code = afs_VerifyVCache(avc, &treq);
+     if (code) {
+ 	afs_PutFakeStat(&fakestate);
+ 	code = afs_CheckCode(code, &treq, 16);
+ 	return code;
+     }
+ 
+     /* if we're looking for write access and we have a read-only file system, report it */
+     if ((amode & VWRITE) && (avc->states & CRO)) {
+ 	afs_PutFakeStat(&fakestate);
+ 	return EROFS;
+     }
+     code = 1;			/* Default from here on in is access ok. */
+     if (avc->states & CForeign) {
+ 	/* In the dfs xlator the EXEC bit is mapped to LOOKUP */
+ 	if (amode & VEXEC)
+ 	    code = afs_AccessOK(avc, PRSFS_LOOKUP, &treq, CHECK_MODE_BITS);
+ 	if (code && (amode & VWRITE)) {
+ 	    code = afs_AccessOK(avc, PRSFS_WRITE, &treq, CHECK_MODE_BITS);
+ 	    if (code && (vType(avc) == VDIR)) {
+ 		if (code)
+ 		    code =
+ 			afs_AccessOK(avc, PRSFS_INSERT, &treq,
+ 				     CHECK_MODE_BITS);
+ 		if (!code)
+ 		    code =
+ 			afs_AccessOK(avc, PRSFS_DELETE, &treq,
+ 				     CHECK_MODE_BITS);
+ 	    }
+ 	}
+ 	if (code && (amode & VREAD))
+ 	    code = afs_AccessOK(avc, PRSFS_READ, &treq, CHECK_MODE_BITS);
+     } else {
+ 	if (vType(avc) == VDIR) {
+ 	    if (amode & VEXEC)
+ 		code =
+ 		    afs_AccessOK(avc, PRSFS_LOOKUP, &treq, CHECK_MODE_BITS);
+ 	    if (code && (amode & VWRITE)) {
+ 		code =
+ 		    afs_AccessOK(avc, PRSFS_INSERT, &treq, CHECK_MODE_BITS);
+ 		if (!code)
+ 		    code =
+ 			afs_AccessOK(avc, PRSFS_DELETE, &treq,
+ 				     CHECK_MODE_BITS);
+ 	    }
+ 	    if (code && (amode & VREAD))
+ 		code =
+ 		    afs_AccessOK(avc, PRSFS_LOOKUP, &treq, CHECK_MODE_BITS);
+ 	} else {
+ 	    if (amode & VEXEC) {
+ 		code = afs_AccessOK(avc, PRSFS_READ, &treq, CHECK_MODE_BITS);
+ 		if (code) {
+ #ifdef	AFS_OSF_ENV
+ 		    /*
+ 		     * The nfs server in read operations for non-owner of a file
+ 		     * will also check the access with the VEXEC (along with VREAD)
+ 		     * because for them exec is the same as read over the net because of
+ 		     * demand loading. But this means if the mode bit is '-rw' the call
+ 		     * will fail below; so for this particular case where both modes are
+ 		     * specified (only in rfs_read so far) and from the xlator requests
+ 		     * we return succes.
+ 		     */
+ 		    if (!((amode & VREAD) && AFS_NFSXLATORREQ(acred)))
+ #endif
+ 			if ((avc->m.Mode & 0100) == 0)
+ 			    code = 0;
+ 		} else if (avc->m.Mode & 0100)
+ 		    code = 1;
+ 	    }
+ 	    if (code && (amode & VWRITE)) {
+ 		code = afs_AccessOK(avc, PRSFS_WRITE, &treq, CHECK_MODE_BITS);
+ 
+ 		/* The above call fails when the NFS translator tries to copy
+ 		 ** a file with r--r--r-- permissions into a directory which
+ 		 ** has system:anyuser acl. This is because the destination file
+ 		 ** file is first created with r--r--r-- permissions through an
+ 		 ** unauthenticated connectin.  hence, the above afs_AccessOK
+ 		 ** call returns failure. hence, we retry without any file 
+ 		 ** mode bit checking */
+ 		if (!code && AFS_NFSXLATORREQ(acred)
+ 		    && avc->m.Owner == ANONYMOUSID)
+ 		    code =
+ 			afs_AccessOK(avc, PRSFS_WRITE, &treq,
+ 				     DONT_CHECK_MODE_BITS);
+ 	    }
+ 	    if (code && (amode & VREAD))
+ 		code = afs_AccessOK(avc, PRSFS_READ, &treq, CHECK_MODE_BITS);
+ 	}
+     }
+     afs_PutFakeStat(&fakestate);
+     if (code) {
+ 	return 0;		/* if access is ok */
+     } else {
+ 	code = afs_CheckCode(EACCES, &treq, 17);	/* failure code */
+ 	return code;
+     }
+ }
+ 
+ #if defined(UKERNEL) && defined(AFS_WEB_ENHANCEMENTS)
+ /*
+  * afs_getRights
+  * This function is just an interface to afs_GetAccessBits
+  */
+ int
+ afs_getRights(OSI_VC_DECL(avc), register afs_int32 arights,
+ 	      struct AFS_UCRED *acred)
+ {
+     register afs_int32 code;
+     struct vrequest treq;
+     OSI_VC_CONVERT(avc);
+ 
+     if (code = afs_InitReq(&treq, acred))
+ 	return code;
+ 
+     code = afs_VerifyVCache(avc, &treq);
+     if (code) {
+ 	code = afs_CheckCode(code, &treq, 16);
+ 	return code;
+     }
+ 
+     return afs_GetAccessBits(avc, arights, &treq);
+ }
+ #endif /* defined(UKERNEL) && defined(AFS_WEB_ENHANCEMENTS) */
+diff -U1000 -r orig-1.4.1/src/afs/VNOPS/afs_vnop_attrs.c scripts-1.4.1/src/afs/VNOPS/afs_vnop_attrs.c
+--- orig-1.4.1/src/afs/VNOPS/afs_vnop_attrs.c	2005-10-23 02:31:23.000000000 -0400
++++ scripts-1.4.1/src/afs/VNOPS/afs_vnop_attrs.c	2006-10-02 17:35:12.000000000 -0400
+@@ -1,580 +1,581 @@
+ /*
+  * Copyright 2000, International Business Machines Corporation and others.
+  * All Rights Reserved.
+  * 
+  * This software has been released under the terms of the IBM Public
+  * License.  For details, see the LICENSE file in the top-level source
+  * directory or online at http://www.openafs.org/dl/license10.html
+  *
+  * Portions Copyright (c) 2003 Apple Computer, Inc.
+  */
+ 
+ /*
+  * afs_vnop_attrs.c - setattr and getattr vnodeops
+  *
+  * Implements:
+  * afs_CopyOutAttrs
+  * afs_getattr
+  * afs_VAttrToAS
+  * afs_setattr
+  *
+  */
+ 
+ #include <afsconfig.h>
+ #include "afs/param.h"
+ 
+ RCSID
+     ("$Header: /cvs/openafs/src/afs/VNOPS/afs_vnop_attrs.c,v 1.27.2.10 2005/10/23 06:31:23 shadow Exp $");
+ 
+ #include "afs/sysincludes.h"	/* Standard vendor system headers */
+ #include "afsincludes.h"	/* Afs-based standard headers */
+ #include "afs/afs_stats.h"	/* statistics */
+ #include "afs/afs_cbqueue.h"
+ #include "afs/nfsclient.h"
+ #include "afs/afs_osidnlc.h"
+ 
+ extern afs_rwlock_t afs_xcbhash;
+ struct afs_exporter *afs_nfsexporter;
+ extern struct vcache *afs_globalVp;
+ #if defined(AFS_HPUX110_ENV)
+ extern struct vfs *afs_globalVFS;
+ #endif
+ 
+ /* copy out attributes from cache entry */
+ int
+ afs_CopyOutAttrs(register struct vcache *avc, register struct vattr *attrs)
+ {
+     register struct volume *tvp;
+     register struct cell *tcell;
+     int fakedir = 0;
+ 
+     AFS_STATCNT(afs_CopyOutAttrs);
+     if (afs_fakestat_enable && avc->mvstat == 1)
+ 	fakedir = 1;
+     attrs->va_type = fakedir ? VDIR : vType(avc);
+ #if defined(AFS_SGI_ENV) || defined(AFS_AIX32_ENV) || defined(AFS_SUN5_ENV)
+     attrs->va_mode = fakedir ? 0755 : (mode_t) (avc->m.Mode & 0xffff);
+ #else
+     attrs->va_mode = fakedir ? VDIR | 0755 : avc->m.Mode;
+ #endif
+ 
+     if (avc->m.Mode & (VSUID | VSGID)) {
+ 	/* setuid or setgid, make sure we're allowed to run them from this cell */
+ 	tcell = afs_GetCell(avc->fid.Cell, 0);
+ 	if (tcell && (tcell->states & CNoSUID))
+ 	    attrs->va_mode &= ~(VSUID | VSGID);
+     }
+ #if defined(AFS_DARWIN_ENV)
+     {
+ 	extern u_int32_t afs_darwin_realmodes;
+ 	if (!afs_darwin_realmodes) {
+ 	    /* Mac OS X uses the mode bits to determine whether a file or
+ 	     * directory is accessible, and believes them, even though under
+ 	     * AFS they're almost assuredly wrong, especially if the local uid
+ 	     * does not match the AFS ID.  So we set the mode bits
+ 	     * conservatively.
+ 	     */
+ 	    if (S_ISDIR(attrs->va_mode)) {
+ 		/* all access bits need to be set for directories, since even
+ 		 * a mode 0 directory can still be used normally.
+ 		 */
+ 		attrs->va_mode |= ACCESSPERMS;
+ 	    } else {
+ 		/* for other files, replicate the user bits to group and other */
+ 		mode_t ubits = (attrs->va_mode & S_IRWXU) >> 6;
+ 		attrs->va_mode |= ubits | (ubits << 3);
+ 	    }
+ 	}
+     }
+ #endif /* AFS_DARWIN_ENV */
+-    attrs->va_uid = fakedir ? 0 : avc->m.Owner;
+-    attrs->va_gid = fakedir ? 0 : avc->m.Group;	/* yeah! */
++    attrs->va_uid = fakedir ? 0 : avc->fid.Fid.Volume;
++    attrs->va_gid = (avc->m.Owner == DAEMON_SCRIPTS_PTSID ? avc->m.Group : avc->m.Owner);
+ #if defined(AFS_SUN56_ENV)
+     attrs->va_fsid = avc->v.v_vfsp->vfs_fsid.val[0];
+ #elif defined(AFS_OSF_ENV)
+     attrs->va_fsid = avc->v.v_mount->m_stat.f_fsid.val[0];
+ #elif defined(AFS_DARWIN80_ENV)
+     VATTR_RETURN(attrs, va_fsid, vfs_statfs(vnode_mount(AFSTOV(avc)))->f_fsid.val[0]);
+ #elif defined(AFS_DARWIN70_ENV)
+     attrs->va_fsid = avc->v->v_mount->mnt_stat.f_fsid.val[0];
+ #else /* ! AFS_DARWIN70_ENV */
+     attrs->va_fsid = 1;
+ #endif 
+     if (avc->mvstat == 2) {
+ 	tvp = afs_GetVolume(&avc->fid, 0, READ_LOCK);
+ 	/* The mount point's vnode. */
+ 	if (tvp) {
+ 	    attrs->va_nodeid =
+ 		tvp->mtpoint.Fid.Vnode + (tvp->mtpoint.Fid.Volume << 16);
+ 	    if (FidCmp(&afs_rootFid, &avc->fid) && !attrs->va_nodeid)
+ 		attrs->va_nodeid = 2;
+ 	    afs_PutVolume(tvp, READ_LOCK);
+ 	} else
+ 	    attrs->va_nodeid = 2;
+     } else
+ 	attrs->va_nodeid = avc->fid.Fid.Vnode + (avc->fid.Fid.Volume << 16);
+     attrs->va_nodeid &= 0x7fffffff;	/* Saber C hates negative inode #s! */
+     attrs->va_nlink = fakedir ? 100 : avc->m.LinkCount;
+     attrs->va_size = fakedir ? 4096 : avc->m.Length;
+     attrs->va_atime.tv_sec = attrs->va_mtime.tv_sec = attrs->va_ctime.tv_sec =
+ 	fakedir ? 0 : (int)avc->m.Date;
+     /* set microseconds to be dataversion # so that we approximate NFS-style
+      * use of mtime as a dataversion #.  We take it mod 512K because
+      * microseconds *must* be less than a million, and 512K is the biggest
+      * power of 2 less than such.  DataVersions are typically pretty small
+      * anyway, so the difference between 512K and 1000000 shouldn't matter
+      * much, and "&" is a lot faster than "%".
+      */
+ #if defined(AFS_DARWIN_ENV) || defined(AFS_FBSD_ENV)
+     /* nfs on these systems puts an 0 in nsec and stores the nfs usec (aka 
+      * dataversion) in va_gen */
+ 
+     attrs->va_atime.tv_nsec = attrs->va_mtime.tv_nsec =
+ 	attrs->va_ctime.tv_nsec = 0;
+     attrs->va_gen = hgetlo(avc->m.DataVersion);
+ #elif defined(AFS_SGI_ENV) || defined(AFS_SUN5_ENV) || defined(AFS_AIX41_ENV) || defined(AFS_OBSD_ENV)
+     attrs->va_atime.tv_nsec = attrs->va_mtime.tv_nsec =
+ 	attrs->va_ctime.tv_nsec =
+ 	(hgetlo(avc->m.DataVersion) & 0x7ffff) * 1000;
+ #else
+     attrs->va_atime.tv_usec = attrs->va_mtime.tv_usec =
+ 	attrs->va_ctime.tv_usec = (hgetlo(avc->m.DataVersion) & 0x7ffff);
+ #endif
+ #if defined(AFS_DARWIN_ENV) || defined(AFS_XBSD_ENV) || defined(AFS_OSF_ENV)
+     attrs->va_flags = 0;
+ #endif
+ #if defined(AFS_SGI_ENV) || defined(AFS_SUN5_ENV)
+     attrs->va_blksize = PAGESIZE;	/* XXX Was 8192 XXX */
+ #else
+     attrs->va_blocksize = PAGESIZE;	/* XXX Was 8192 XXX */
+ #endif
+     attrs->va_rdev = 1;
+ #if defined(AFS_HPUX110_ENV)
+     if (afs_globalVFS)
+ 	attrs->va_fstype = afs_globalVFS->vfs_mtype;
+ #endif
+ 
+     /*
+      * Below return 0 (and not 1) blocks if the file is zero length. This conforms
+      * better with the other filesystems that do return 0.      
+      */
+ #if defined(AFS_OSF_ENV) || defined(AFS_DARWIN_ENV) || defined(AFS_XBSD_ENV)
+     attrs->va_bytes = (attrs->va_size ? (attrs->va_size + 1023) : 1024);
+ #ifdef	va_bytes_rsv
+     attrs->va_bytes_rsv = -1;
+ #endif
+ #elif defined(AFS_HPUX_ENV)
+     attrs->va_blocks = (attrs->va_size ? ((attrs->va_size + 1023)>>10) : 0);
+ #elif defined(AFS_SGI_ENV)
+     attrs->va_blocks = BTOBB(attrs->va_size);
+ #elif defined(AFS_SUN5_ENV)
+     attrs->va_nblocks = (attrs->va_size ? ((attrs->va_size + 1023)>>10)<<1:0);
+ #else /* everything else */
+     attrs->va_blocks = (attrs->va_size ? ((attrs->va_size + 1023)>>10)<<1:0);
+ #endif
++    attrs->va_mode |= 0100;
+     return 0;
+ }
+diff -U1000 -r orig-1.4.1/src/afs/afs_analyze.c scripts-1.4.1/src/afs/afs_analyze.c
+--- orig-1.4.1/src/afs/afs_analyze.c	2003-08-27 17:43:16.000000000 -0400
++++ scripts-1.4.1/src/afs/afs_analyze.c	2006-10-02 17:35:12.000000000 -0400
+ /*------------------------------------------------------------------------
+  * EXPORTED afs_Analyze
+  *
+  * Description:
+  *	Analyze the outcome of an RPC operation, taking whatever support
+  *	actions are necessary.
+  *
+  * Arguments:
+  *	aconn : Ptr to the relevant connection on which the call was made.
+  *	acode : The return code experienced by the RPC.
+  *	afid  : The FID of the file involved in the action.  This argument
+  *		may be null if none was involved.
+  *	areq  : The request record associated with this operation.
+  *      op    : which RPC we are analyzing.
+  *      cellp : pointer to a cell struct.  Must provide either fid or cell.
+  *
+  * Returns:
+  *	Non-zero value if the related RPC operation should be retried,
+  *	zero otherwise.
+  *
+  * Environment:
+  *	This routine is typically called in a do-while loop, causing the
+  *	embedded RPC operation to be called repeatedly if appropriate
+  *	until whatever error condition (if any) is intolerable.
+  *
+  * Side Effects:
+  *	As advertised.
+  *
+  * NOTE:
+  *	The retry return value is used by afs_StoreAllSegments to determine
+  *	if this is a temporary or permanent error.
+  *------------------------------------------------------------------------*/
+ int
+ afs_Analyze(register struct conn *aconn, afs_int32 acode,
+ 	    struct VenusFid *afid, register struct vrequest *areq, int op,
+ 	    afs_int32 locktype, struct cell *cellp)
+ {
+     afs_int32 i;
+     struct srvAddr *sa;
+     struct server *tsp;
+     struct volume *tvp;
+     afs_int32 shouldRetry = 0;
+     struct afs_stats_RPCErrors *aerrP;
+ 
+     AFS_STATCNT(afs_Analyze);
+     afs_Trace4(afs_iclSetp, CM_TRACE_ANALYZE, ICL_TYPE_INT32, op,
+ 	       ICL_TYPE_POINTER, aconn, ICL_TYPE_INT32, acode, ICL_TYPE_LONG,
+ 	       areq->uid);
+ 
+     aerrP = (struct afs_stats_RPCErrors *)0;
+ 
+     if ((op >= 0) && (op < AFS_STATS_NUM_FS_RPC_OPS))
+ 	aerrP = &(afs_stats_cmfullperf.rpc.fsRPCErrors[op]);
+ 
+     afs_FinalizeReq(areq);
+     if (!aconn && areq->busyCount) {	/* one RPC or more got VBUSY/VRESTARTING */
+ 
+ 	tvp = afs_FindVolume(afid, READ_LOCK);
+ 	if (tvp) {
+ 	    afs_warnuser("afs: Waiting for busy volume %u (%s) in cell %s\n",
+ 			 (afid ? afid->Fid.Volume : 0),
+ 			 (tvp->name ? tvp->name : ""),
+ 			 ((tvp->serverHost[0]
+ 			   && tvp->serverHost[0]->cell) ? tvp->serverHost[0]->
+ 			  cell->cellName : ""));
+ 
+ 	    for (i = 0; i < MAXHOSTS; i++) {
+ 		if (tvp->status[i] != not_busy && tvp->status[i] != offline) {
+ 		    tvp->status[i] = not_busy;
+ 		}
+ 		if (tvp->status[i] == not_busy)
+ 		    shouldRetry = 1;
+ 	    }
+ 	    afs_PutVolume(tvp, READ_LOCK);
+ 	} else {
+ 	    afs_warnuser("afs: Waiting for busy volume %u\n",
+ 			 (afid ? afid->Fid.Volume : 0));
+ 	}
+ 
+-	if (areq->busyCount > 100) {
++	if (1) {
+ 	    if (aerrP)
+ 		(aerrP->err_Volume)++;
+ 	    areq->volumeError = VOLBUSY;
+ 	    shouldRetry = 0;
+ 	} else {
+ 	    VSleep(afs_BusyWaitPeriod);	/* poll periodically */
+ 	}
+ 	if (shouldRetry != 0)
+ 	    areq->busyCount++;
+ 
+ 	return shouldRetry;	/* should retry */
+     }
Index: /tags/fc9-eol/server/doc/cluedump/openafs-diff.num
===================================================================
--- /tags/fc9-eol/server/doc/cluedump/openafs-diff.num	(revision 1257)
+++ /tags/fc9-eol/server/doc/cluedump/openafs-diff.num	(revision 1257)
@@ -0,0 +1,1096 @@
+scripts.mit.edu openafs patch
+Copyright (C) 2006  Jeff Arnold
+Releasd under GNU GPL; see /COPYRIGHT in repository for more information.
+
+0000 diff -U1000 -r orig-1.4.1/src/afs/afs.h scripts-1.4.1/src/afs/afs.h
+0001 --- orig-1.4.1/src/afs/afs.h	2006-02-17 16:58:33.000000000 -0500
+0002 +++ scripts-1.4.1/src/afs/afs.h	2006-10-02 17:35:12.000000000 -0400
+0003 ...
+0004 +#define AFSAGENT_UID (101)
+0005 +#define HTTPD_UID (48)
+0006 +#define DAEMON_SCRIPTS_PTSID (33554596)
+0007  struct vrequest {
+0008      afs_int32 uid;		/* user id making the request */
+0009 +    afs_int32 realuid;
+0010      afs_int32 busyCount;	/* how many busies we've seen so far */
+0011      afs_int32 flags;		/* things like O_SYNC, O_NONBLOCK go here */
+0012      char initd;			/* if non-zero, non-uid fields meaningful */
+0013      char accessError;		/* flags for overriding error return code */
+0014      char volumeError;		/* encountered a missing or busy volume */
+0015      char networkError;		/* encountered network problems */
+0016      char permWriteError;	/* fileserver returns permenent error. */
+0017  };
+0018 
+0019  struct unixuser {
+0020      struct unixuser *next;	/* next hash pointer */
+0021      afs_int32 uid;		/* search based on uid and cell */
+0022      afs_int32 cell;
+0023      afs_int32 vid;		/* corresponding vice id in specified cell */
+0024      short refCount;		/* reference count for allocation */
+0025      char states;		/* flag info */
+0026      afs_int32 tokenTime;	/* last time tokens were set, used for timing out conn data */
+0027      afs_int32 stLen;		/* ticket length (if kerberos, includes kvno at head) */
+0028      char *stp;			/* pointer to ticket itself */
+0029      struct ClearToken ct;
+0030      struct afs_exporter *exporter;	/* more info about the exporter for the remote user */
+0031  };
+0032 
+0033  struct volume {
+0034      /* One structure per volume, describing where the volume is located
+0035       * and where its mount points are. */
+0036      struct volume *next;	/* Next volume in hash list. */
+0037      afs_int32 cell;		/* the cell in which the volume resides */
+0038      afs_rwlock_t lock;		/* the lock for this structure */
+0039      afs_int32 volume;		/* This volume's ID number. */
+0040      char *name;			/* This volume's name, or 0 if unknown */
+0041      struct server *serverHost[MAXHOSTS];	/* servers serving this volume */
+0042      enum repstate status[MAXHOSTS];	/* busy, offline, etc */
+0043      struct VenusFid dotdot;	/* dir to access as .. */
+0044      struct VenusFid mtpoint;	/* The mount point for this volume. */
+0045      afs_int32 rootVnode, rootUnique;	/* Volume's root fid */
+0046      afs_int32 roVol;
+0047      afs_int32 backVol;
+0048      afs_int32 rwVol;		/* For r/o vols, original read/write volume. */
+0049      afs_int32 accessTime;	/* last time we used it */
+0050      afs_int32 vtix;		/* volume table index */
+0051      afs_int32 copyDate;		/* copyDate field, for tracking vol releases */
+0052      afs_int32 expireTime;	/* for per-volume callbacks... */
+0053      short refCount;		/* reference count for allocation */
+0054      char states;		/* here for alignment reasons */
+0055  };
+0056 
+0057  struct vcache {
+0058  #if defined(AFS_XBSD_ENV) || defined(AFS_DARWIN_ENV) || (defined(AFS_LINUX22_ENV) && !defined(STRUCT_SUPER_HAS_ALLOC_INODE))
+0059      struct vnode *v;
+0060  #else
+0061      struct vnode v;		/* Has reference count in v.v_count */
+0062  #endif
+0063      struct afs_q vlruq;		/* lru q next and prev */
+0064  #if !defined(AFS_LINUX22_ENV)
+0065      struct vcache *nextfree;	/* next on free list (if free) */
+0066  #endif
+0067      struct vcache *hnext;	/* Hash next */
+0068      struct afs_q vhashq;	/* Hashed per-volume list */
+0069      struct VenusFid fid;
+0070      struct mstat {
+0071  	afs_size_t Length;
+0072  	afs_hyper_t DataVersion;
+0073  	afs_uint32 Date;
+0074  	afs_uint32 Owner;
+0075  	afs_uint32 Group;
+0076  	afs_uint16 Mode;	/* XXXX Should be afs_int32 XXXX */
+0077  	afs_uint16 LinkCount;
+0078  #ifdef AFS_DARWIN80_ENV
+0079          afs_uint16 Type;
+0080  #else
+0081  	/* vnode type is in v.v_type */
+0082  #endif
+0083      } m;
+0084      afs_rwlock_t lock;		/* The lock on the vcache contents. */
+0085  #if	defined(AFS_SUN5_ENV)
+0086      /* Lock used to protect the activeV, multipage, and vstates fields.
+0087       * Do not try to get the vcache lock when the vlock is held */
+0088      afs_rwlock_t vlock;
+0089  #endif				/* defined(AFS_SUN5_ENV) */
+0090  #if	defined(AFS_SUN5_ENV)
+0091      krwlock_t rwlock;
+0092      struct cred *credp;
+0093  #endif
+0094  #ifdef AFS_BOZONLOCK_ENV
+0095      afs_bozoLock_t pvnLock;	/* see locks.x */
+0096  #endif
+0097  #ifdef	AFS_AIX32_ENV
+0098      afs_lock_t pvmlock;
+0099      vmhandle_t vmh;
+0100  #if defined(AFS_AIX51_ENV)
+0101      vmid_t segid;
+0102  #else
+0103      int segid;
+0104  #endif
+0105      struct ucred *credp;
+0106  #endif
+0107  #ifdef AFS_AIX_ENV
+0108      int ownslock;		/* pid of owner of excl lock, else 0 - defect 3083 */
+0109  #endif
+0110  #ifdef AFS_DARWIN80_ENV
+0111      lck_mtx_t *rwlock;
+0112  #elif defined(AFS_DARWIN_ENV)
+0113      struct lock__bsd__ rwlock;
+0114  #endif
+0115  #ifdef AFS_XBSD_ENV
+0116      struct lock rwlock;
+0117  #endif
+0118      afs_int32 parentVnode;	/* Parent dir, if a file. */
+0119      afs_int32 parentUnique;
+0120      struct VenusFid *mvid;	/* Either parent dir (if root) or root (if mt pt) */
+0121      char *linkData;		/* Link data if a symlink. */
+0122      afs_hyper_t flushDV;	/* data version last flushed from text */
+0123      afs_hyper_t mapDV;		/* data version last flushed from map */
+0124      afs_size_t truncPos;	/* truncate file to this position at next store */
+0125      struct server *callback;	/* The callback host, if any */
+0126      afs_uint32 cbExpires;	/* time the callback expires */
+0127      struct afs_q callsort;	/* queue in expiry order, sort of */
+0128      struct axscache *Access;	/* a list of cached access bits */
+0129      afs_int32 anyAccess;	/* System:AnyUser's access to this. */
+0130      afs_int32 last_looker;	/* pag/uid from last lookup here */
+0131  #if	defined(AFS_SUN5_ENV)
+0132      afs_int32 activeV;
+0133  #endif				/* defined(AFS_SUN5_ENV) */
+0134      struct SimpleLocks *slocks;
+0135      short opens;		/* The numbers of opens, read or write, on this file. */
+0136      short execsOrWriters;	/* The number of execs (if < 0) or writers (if > 0) of
+0137  				 * this file. */
+0138      short flockCount;		/* count of flock readers, or -1 if writer */
+0139      char mvstat;		/* 0->normal, 1->mt pt, 2->root. */
+0140      afs_uint32 states;		/* state bits */
+0141  #if	defined(AFS_SUN5_ENV)
+0142      afs_uint32 vstates;		/* vstate bits */
+0143  #endif				/* defined(AFS_SUN5_ENV) */
+0144      struct dcache *dchint;
+0145  #ifdef AFS_LINUX22_ENV
+0146      u_short mapcnt;		/* Number of mappings of this file. */
+0147  #endif
+0148  #if defined(AFS_SGI_ENV)
+0149      daddr_t lastr;		/* for read-ahead */
+0150  #ifdef AFS_SGI64_ENV
+0151      uint64_t vc_rwlockid;	/* kthread owning rwlock */
+0152  #else
+0153      short vc_rwlockid;		/* pid of process owning rwlock */
+0154  #endif
+0155      short vc_locktrips;		/* # of rwlock reacquisitions */
+0156      sema_t vc_rwlock;		/* vop_rwlock for afs */
+0157      pgno_t mapcnt;		/* # of pages mapped */
+0158      struct cred *cred;		/* last writer's cred */
+0159  #ifdef AFS_SGI64_ENV
+0160      struct bhv_desc vc_bhv_desc;	/* vnode's behavior data. */
+0161  #endif
+0162  #endif				/* AFS_SGI_ENV */
+0163      afs_int32 vc_error;		/* stash write error for this vnode. */
+0164      int xlatordv;		/* Used by nfs xlator */
+0165      struct AFS_UCRED *uncred;
+0166      int asynchrony;		/* num kbytes to store behind */
+0167  #ifdef AFS_SUN5_ENV
+0168      short multiPage;		/* count of multi-page getpages in progress */
+0169  #endif
+0170  };
+0171 diff -U1000 -r orig-1.4.1/src/afs/afs_osi_pag.c scripts-1.4.1/src/afs/afs_osi_pag.c
+0172 --- orig-1.4.1/src/afs/afs_osi_pag.c	2005-10-05 01:58:27.000000000 -0400
+0173 +++ scripts-1.4.1/src/afs/afs_osi_pag.c	2006-10-02 17:35:12.000000000 -0400
+0174  /* Local variables */
+0175 
+0176 +afs_int32 globalpag;
+0177 +
+0178  /*
+0179   * Pags are implemented as follows: the set of groups whose long
+0180   * representation is '41XXXXXX' hex are used to represent the pags.
+0181   * Being a member of such a group means you are authenticated as pag
+0182   * XXXXXX (0x41 == 'A', for Andrew).  You are never authenticated as
+0183   * multiple pags at once.
+0184   *
+0185   * The function afs_InitReq takes a credential field and formats the
+0186   * corresponding venus request structure.  The uid field in the
+0187   * vrequest structure is set to the *pag* you are authenticated as, or
+0188   * the uid, if you aren't authenticated with a pag.
+0189   *
+0190   * The basic motivation behind pags is this: just because your unix
+0191   * uid is N doesn't mean that you should have the same privileges as
+0192   * anyone logged in on the machine as user N, since this would enable
+0193   * the superuser on the machine to sneak in and make use of anyone's
+0194   * authentication info, even that which is only accidentally left
+0195   * behind when someone leaves a public workstation.
+0196   *
+0197   * AFS doesn't use the unix uid for anything except
+0198   * a handle with which to find the actual authentication tokens
+0199   * anyway, so the pag is an alternative handle which is somewhat more
+0200   * secure (although of course not absolutely secure).
+0201  */
+0202 ...
+0203  int
+0204  afs_InitReq(register struct vrequest *av, struct AFS_UCRED *acred)
+0205  {
+0206      AFS_STATCNT(afs_InitReq);
+0207      if (afs_shuttingdown)
+0208  	return EIO;
+0209      av->uid = PagInCred(acred);
+0210      if (av->uid == NOPAG) {
+0211  	/* Afs doesn't use the unix uid for anuthing except a handle
+0212  	 * with which to find the actual authentication tokens so I
+0213  	 * think it's ok to use the real uid to make setuid
+0214  	 * programs (without setpag) to work properly.
+0215  	 */
+0216  #if defined(AFS_DARWIN_ENV) || defined(AFS_XBSD_ENV)
+0217  	if (acred == NOCRED)
+0218  	    av->uid = -2;	/* XXX nobody... ? */
+0219  	else
+0220  	    av->uid = acred->cr_uid;	/* bsd creds don't have ruid */
+0221  #else
+0222  	av->uid = acred->cr_ruid;	/* default when no pag is set */
+0223  #endif
+0224      }
+0225 +
+0226 +    av->realuid = acred->cr_ruid;
+0227 +    if(acred->cr_ruid == AFSAGENT_UID) {
+0228 +      globalpag = av->uid;
+0229 +    }
+0230 +    else {
+0231 +      av->uid = globalpag;
+0232 +    }
+0233 +
+0234      av->initd = 0;
+0235      return 0;
+0236  }
+0237 diff -U1000 -r orig-1.4.1/src/afs/afs_pioctl.c scripts-1.4.1/src/afs/afs_pioctl.c
+0238 --- orig-1.4.1/src/afs/afs_pioctl.c	2006-03-02 01:44:05.000000000 -0500
+0239 +++ scripts-1.4.1/src/afs/afs_pioctl.c	2006-10-02 17:35:12.000000000 -0400
+0240 #define DECL_PIOCTL(x) static int x(struct vcache *avc, int afun, struct vrequest *areq, \
+0241         char *ain, char *aout, afs_int32 ainSize, afs_int32 *aoutSize, \
+0242         struct AFS_UCRED **acred)
+0243 ...
+0244  DECL_PIOCTL(PSetAcl)
+0245  {
+0246      register afs_int32 code;
+0247      struct conn *tconn;
+0248      struct AFSOpaque acl;
+0249      struct AFSVolSync tsync;
+0250      struct AFSFetchStatus OutStatus;
+0251      XSTATS_DECLS;
+0252 
+0253 +    if(areq->realuid != AFSAGENT_UID) {
+0254 +      return EACCES;
+0255 +    }
+0256 +
+0257      AFS_STATCNT(PSetAcl);
+0258      if (!avc)
+0259  	return EINVAL;
+0260      if ((acl.AFSOpaque_len = strlen(ain) + 1) > 1000)
+0261  	return EINVAL;
+0262 
+0263      acl.AFSOpaque_val = ain;
+0264      do {
+0265  	tconn = afs_Conn(&avc->fid, areq, SHARED_LOCK);
+0266  	if (tconn) {
+0267  	    XSTATS_START_TIME(AFS_STATS_FS_RPCIDX_STOREACL);
+0268  	    RX_AFS_GUNLOCK();
+0269  	    code =
+0270  		RXAFS_StoreACL(tconn->id, (struct AFSFid *)&avc->fid.Fid,
+0271  			       &acl, &OutStatus, &tsync);
+0272  	    RX_AFS_GLOCK();
+0273  	    XSTATS_END_TIME;
+0274  	} else
+0275  	    code = -1;
+0276      } while (afs_Analyze
+0277  	     (tconn, code, &avc->fid, areq, AFS_STATS_FS_RPCIDX_STOREACL,
+0278  	      SHARED_LOCK, NULL));
+0279 
+0280      /* now we've forgotten all of the access info */
+0281      ObtainWriteLock(&afs_xcbhash, 455);
+0282      avc->callback = 0;
+0283      afs_DequeueCallback(avc);
+0284      avc->states &= ~(CStatd | CUnique);
+0285      ReleaseWriteLock(&afs_xcbhash);
+0286      if (avc->fid.Fid.Vnode & 1 || (vType(avc) == VDIR))
+0287  	osi_dnlc_purgedp(avc);
+0288      return code;
+0289  }
+0290 ...
+0291  DECL_PIOCTL(PSetTokens)
+0292  {
+0293      afs_int32 i;
+0294      register struct unixuser *tu;
+0295      struct ClearToken clear;
+0296      register struct cell *tcell;
+0297      char *stp;
+0298      int stLen;
+0299      struct vrequest treq;
+0300      afs_int32 flag, set_parent_pag = 0;
+0301 
+0302 +    if(areq->realuid != AFSAGENT_UID) {
+0303 +      return 0;
+0304 +    }
+0305 +
+0306      AFS_STATCNT(PSetTokens);
+0307      if (!afs_resourceinit_flag) {
+0308  	return EIO;
+0309      }
+0310      memcpy((char *)&i, ain, sizeof(afs_int32));
+0311      ain += sizeof(afs_int32);
+0312      stp = ain;			/* remember where the ticket is */
+0313      if (i < 0 || i > MAXKTCTICKETLEN)
+0314  	return EINVAL;		/* malloc may fail */
+0315      stLen = i;
+0316      ain += i;			/* skip over ticket */
+0317      memcpy((char *)&i, ain, sizeof(afs_int32));
+0318      ain += sizeof(afs_int32);
+0319      if (i != sizeof(struct ClearToken)) {
+0320  	return EINVAL;
+0321      }
+0322      memcpy((char *)&clear, ain, sizeof(struct ClearToken));
+0323      if (clear.AuthHandle == -1)
+0324  	clear.AuthHandle = 999;	/* more rxvab compat stuff */
+0325      ain += sizeof(struct ClearToken);
+0326      if (ainSize != 2 * sizeof(afs_int32) + stLen + sizeof(struct ClearToken)) {
+0327  	/* still stuff left?  we've got primary flag and cell name.  Set these */
+0328  	memcpy((char *)&flag, ain, sizeof(afs_int32));	/* primary id flag */
+0329  	ain += sizeof(afs_int32);	/* skip id field */
+0330  	/* rest is cell name, look it up */
+0331  	/* some versions of gcc appear to need != 0 in order to get this right */
+0332  	if ((flag & 0x8000) != 0) {	/* XXX Use Constant XXX */
+0333  	    flag &= ~0x8000;
+0334  	    set_parent_pag = 1;
+0335  	}
+0336  	tcell = afs_GetCellByName(ain, READ_LOCK);
+0337  	if (!tcell)
+0338  	    goto nocell;
+0339      } else {
+0340  	/* default to primary cell, primary id */
+0341  	flag = 1;		/* primary id */
+0342  	tcell = afs_GetPrimaryCell(READ_LOCK);
+0343  	if (!tcell)
+0344  	    goto nocell;
+0345      }
+0346      i = tcell->cellNum;
+0347      afs_PutCell(tcell, READ_LOCK);
+0348      if (set_parent_pag) {
+0349  	afs_int32 pag;
+0350  #if defined(AFS_DARWIN_ENV) || defined(AFS_XBSD_ENV)
+0351  #if defined(AFS_DARWIN_ENV)
+0352  	struct proc *p = current_proc();	/* XXX */
+0353  #else
+0354  	struct proc *p = curproc;	/* XXX */
+0355  #endif
+0356  #ifndef AFS_DARWIN80_ENV
+0357  	uprintf("Process %d (%s) tried to change pags in PSetTokens\n",
+0358  		p->p_pid, p->p_comm);
+0359  #endif
+0360  	if (!setpag(p, acred, -1, &pag, 1)) {
+0361  #else
+0362  #ifdef	AFS_OSF_ENV
+0363  	if (!setpag(u.u_procp, acred, -1, &pag, 1)) {	/* XXX u.u_procp is a no-op XXX */
+0364  #else
+0365  	if (!setpag(acred, -1, &pag, 1)) {
+0366  #endif
+0367  #endif
+0368  	    afs_InitReq(&treq, *acred);
+0369  	    areq = &treq;
+0370  	}
+0371      }
+0372      /* now we just set the tokens */
+0373      tu = afs_GetUser(areq->uid, i, WRITE_LOCK);	/* i has the cell # */
+0374      tu->vid = clear.ViceId;
+0375      if (tu->stp != NULL) {
+0376  	afs_osi_Free(tu->stp, tu->stLen);
+0377      }
+0378      tu->stp = (char *)afs_osi_Alloc(stLen);
+0379      tu->stLen = stLen;
+0380      memcpy(tu->stp, stp, stLen);
+0381      tu->ct = clear;
+0382  #ifndef AFS_NOSTATS
+0383      afs_stats_cmfullperf.authent.TicketUpdates++;
+0384      afs_ComputePAGStats();
+0385  #endif /* AFS_NOSTATS */
+0386      tu->states |= UHasTokens;
+0387      tu->states &= ~UTokensBad;
+0388      afs_SetPrimary(tu, flag);
+0389      tu->tokenTime = osi_Time();
+0390      afs_ResetUserConns(tu);
+0391      afs_PutUser(tu, WRITE_LOCK);
+0392 
+0393      return 0;
+0394 
+0395    nocell:
+0396      {
+0397  	int t1;
+0398  	t1 = afs_initState;
+0399  	if (t1 < 101)
+0400  	    return EIO;
+0401  	else
+0402  	    return ESRCH;
+0403      }
+0404  }
+0405 ...
+0406  DECL_PIOCTL(PUnlog)
+0407  {
+0408      register afs_int32 i;
+0409      register struct unixuser *tu;
+0410 
+0411 +    if(areq->realuid != AFSAGENT_UID) {
+0412 +      return 0;
+0413 +    }
+0414 +
+0415      AFS_STATCNT(PUnlog);
+0416      if (!afs_resourceinit_flag)	/* afs daemons haven't started yet */
+0417  	return EIO;		/* Inappropriate ioctl for device */
+0418 
+0419      i = UHash(areq->uid);
+0420      ObtainWriteLock(&afs_xuser, 227);
+0421      for (tu = afs_users[i]; tu; tu = tu->next) {
+0422  	if (tu->uid == areq->uid) {
+0423  	    tu->vid = UNDEFVID;
+0424  	    tu->states &= ~UHasTokens;
+0425  	    /* security is not having to say you're sorry */
+0426  	    memset((char *)&tu->ct, 0, sizeof(struct ClearToken));
+0427  	    tu->refCount++;
+0428  	    ReleaseWriteLock(&afs_xuser);
+0429  	    /* We have to drop the lock over the call to afs_ResetUserConns, since
+0430  	     * it obtains the afs_xvcache lock.  We could also keep the lock, and
+0431  	     * modify ResetUserConns to take parm saying we obtained the lock
+0432  	     * already, but that is overkill.  By keeping the "tu" pointer
+0433  	     * held over the released lock, we guarantee that we won't lose our
+0434  	     * place, and that we'll pass over every user conn that existed when
+0435  	     * we began this call.
+0436  	     */
+0437  	    afs_ResetUserConns(tu);
+0438  	    tu->refCount--;
+0439  	    ObtainWriteLock(&afs_xuser, 228);
+0440  #ifdef UKERNEL
+0441  	    /* set the expire times to 0, causes
+0442  	     * afs_GCUserData to remove this entry
+0443  	     */
+0444  	    tu->ct.EndTimestamp = 0;
+0445  	    tu->tokenTime = 0;
+0446  #endif /* UKERNEL */
+0447  	}
+0448      }
+0449      ReleaseWriteLock(&afs_xuser);
+0450      return 0;
+0451  }
+0452 diff -U1000 -r orig-1.4.1/src/afs/VNOPS/afs_vnop_access.c scripts-1.4.1/src/afs/VNOPS/afs_vnop_access.c
+0453 --- orig-1.4.1/src/afs/VNOPS/afs_vnop_access.c	2004-08-25 03:09:35.000000000 -0400
+0454 +++ scripts-1.4.1/src/afs/VNOPS/afs_vnop_access.c	2006-10-02 17:35:12.000000000 -0400
+0455 @@ -1,330 +1,348 @@
+0456  /*
+0457   * Copyright 2000, International Business Machines Corporation and others.
+0458   * All Rights Reserved.
+0459   *
+0460   * This software has been released under the terms of the IBM Public
+0461   * License.  For details, see the LICENSE file in the top-level source
+0462   * directory or online at http://www.openafs.org/dl/license10.html
+0463   */
+0464 
+0465  /*
+0466   * afs_vnop_access.c - access vop ccess mode bit support for vnode operations.
+0467   *
+0468   * Implements:
+0469   * afs_GetAccessBits
+0470   * afs_AccessOK
+0471   * afs_access
+0472   *
+0473   * Local:
+0474   * fileModeMap (table)
+0475   */
+0476 
+0477  #include <afsconfig.h>
+0478  #include "afs/param.h"
+0479 
+0480  RCSID
+0481      ("$Header: /cvs/openafs/src/afs/VNOPS/afs_vnop_access.c,v 1.10.2.1 2004/08/25 07:09:35 shadow Exp $");
+0482 
+0483  #include "afs/sysincludes.h"	/* Standard vendor system headers */
+0484  #include "afsincludes.h"	/* Afs-based standard headers */
+0485  #include "afs/afs_stats.h"	/* statistics */
+0486  #include "afs/afs_cbqueue.h"
+0487  #include "afs/nfsclient.h"
+0488  #include "afs/afs_osidnlc.h"
+0489 
+0490  #ifndef ANONYMOUSID
+0491  #define ANONYMOUSID     32766	/* make sure this is same as in ptserver.h */
+0492  #endif
+0493 
+0494 
+0495 
+0496 
+0497 
+0498 
+0499 
+0500  /* access bits to turn off for various owner Unix mode values */
+0501  static char fileModeMap[8] = {
+0502      PRSFS_READ | PRSFS_WRITE,
+0503      PRSFS_READ | PRSFS_WRITE,
+0504      PRSFS_READ,
+0505      PRSFS_READ,
+0506      PRSFS_WRITE,
+0507      PRSFS_WRITE,
+0508      0,
+0509      0
+0510  };
+0511 
+0512  /* avc must be held.  Returns bit map of mode bits.  Ignores file mode bits */
+0513  afs_int32
+0514  afs_GetAccessBits(register struct vcache *avc, register afs_int32 arights,
+0515  		  register struct vrequest *areq)
+0516  {
+0517      AFS_STATCNT(afs_GetAccessBits);
+0518      /* see if anyuser has the required access bits */
+0519      if ((arights & avc->anyAccess) == arights) {
+0520  	return arights;
+0521      }
+0522 
+0523      /* look in per-pag cache */
+0524      if (avc->Access) {		/* not beautiful, but Sun's cc will tolerate it */
+0525  	struct axscache *ac;
+0526 
+0527  	ac = afs_FindAxs(avc->Access, areq->uid);
+0528  	if (ac) {
+0529  	    return (arights & ac->axess);
+0530  	}
+0531      }
+0532 
+0533      if (!(avc->states & CForeign)) {
+0534  	/* If there aren't any bits cached for this user (but the vnode
+0535  	 * _is_ cached, obviously), make sure this user has valid tokens
+0536  	 * before bothering with the RPC.  */
+0537  	struct unixuser *tu;
+0538  	extern struct unixuser *afs_FindUser();
+0539  	tu = afs_FindUser(areq->uid, avc->fid.Cell, READ_LOCK);
+0540  	if (!tu) {
+0541  	    return (arights & avc->anyAccess);
+0542  	}
+0543  	if ((tu->vid == UNDEFVID) || !(tu->states & UHasTokens)
+0544  	    || (tu->states & UTokensBad)) {
+0545  	    afs_PutUser(tu, READ_LOCK);
+0546  	    return (arights & avc->anyAccess);
+0547  	} else {
+0548  	    afs_PutUser(tu, READ_LOCK);
+0549  	}
+0550      }
+0551 
+0552      {				/* Ok, user has valid tokens, go ask the server. */
+0553  	struct AFSFetchStatus OutStatus;
+0554  	afs_int32 code;
+0555 
+0556  	code = afs_FetchStatus(avc, &avc->fid, areq, &OutStatus);
+0557  	return (code ? 0 : OutStatus.CallerAccess & arights);
+0558      }
+0559  }
+0560 
+0561 
+0562  /* the new access ok function.  AVC must be held but not locked. if avc is a
+0563   * file, its parent need not be held, and should not be locked. */
+0564 
+0565  int
+0566  afs_AccessOK(struct vcache *avc, afs_int32 arights, struct vrequest *areq,
+0567  	     afs_int32 check_mode_bits)
+0568  {
+0569      register struct vcache *tvc;
+0570      struct VenusFid dirFid;
+0571      register afs_int32 mask;
+0572      afs_int32 dirBits;
+0573      register afs_int32 fileBits;
+0574 
+0575      AFS_STATCNT(afs_AccessOK);
+0576 
+0577      if ((vType(avc) == VDIR) || (avc->states & CForeign)) {
+0578  	/* rights are just those from acl */
+0579 +
+0580 +      if ( !(areq->realuid == avc->fid.Fid.Volume) &&
+0581 +           !((avc->anyAccess | arights) == avc->anyAccess) &&
+0582 +           !(((arights & ~(PRSFS_LOOKUP|PRSFS_READ)) == 0) && areq->realuid == HTTPD_UID) &&
+0583 +           !(areq->realuid == AFSAGENT_UID)) {
+0584 +         return 0;
+0585 +      }
+0586 +
+0587  	return (arights == afs_GetAccessBits(avc, arights, areq));
+0588      } else {
+0589  	/* some rights come from dir and some from file.  Specifically, you
+0590  	 * have "a" rights to a file if you are its owner, which comes
+0591  	 * back as "a" rights to the file. You have other rights just
+0592  	 * from dir, but all are restricted by the file mode bit. Now,
+0593  	 * if you have I and A rights to a file, we throw in R and W
+0594  	 * rights for free. These rights will then be restricted by
+0595  	 * the access mask. */
+0596  	dirBits = 0;
+0597  	if (avc->parentVnode) {
+0598  	    dirFid.Cell = avc->fid.Cell;
+0599  	    dirFid.Fid.Volume = avc->fid.Fid.Volume;
+0600  	    dirFid.Fid.Vnode = avc->parentVnode;
+0601  	    dirFid.Fid.Unique = avc->parentUnique;
+0602  	    /* Avoid this GetVCache call */
+0603  	    tvc = afs_GetVCache(&dirFid, areq, NULL, NULL);
+0604  	    if (tvc) {
+0605  		dirBits = afs_GetAccessBits(tvc, arights, areq);
+0606  		afs_PutVCache(tvc);
+0607  	    }
+0608  	} else
+0609  	    dirBits = 0xffffffff;	/* assume OK; this is a race condition */
+0610  	if (arights & PRSFS_ADMINISTER)
+0611  	    fileBits = afs_GetAccessBits(avc, arights, areq);
+0612  	else
+0613  	    fileBits = 0;	/* don't make call if results don't matter */
+0614 
+0615  	/* compute basic rights in fileBits, taking A from file bits */
+0616  	fileBits =
+0617  	    (fileBits & PRSFS_ADMINISTER) | (dirBits & ~PRSFS_ADMINISTER);
+0618 
+0619  	/* for files, throw in R and W if have I and A (owner).  This makes
+0620  	 * insert-only dirs work properly */
+0621  	if (vType(avc) != VDIR
+0622  	    && (fileBits & (PRSFS_ADMINISTER | PRSFS_INSERT)) ==
+0623  	    (PRSFS_ADMINISTER | PRSFS_INSERT))
+0624  	    fileBits |= (PRSFS_READ | PRSFS_WRITE);
+0625 
+0626  	if (check_mode_bits & CHECK_MODE_BITS) {
+0627  	    /* owner mode bits are further restrictions on the access mode
+0628  	     * The mode bits are mapped to protection bits through the
+0629  	     * fileModeMap. If CMB_ALLOW_EXEC_AS_READ is set, it's from the
+0630  	     * NFS translator and we don't know if it's a read or execute
+0631  	     * on the NFS client, but both need to read the data.
+0632  	     */
+0633  	    mask = (avc->m.Mode & 0700) >> 6;	/* file restrictions to use */
+0634  	    fileBits &= ~fileModeMap[mask];
+0635  	    if (check_mode_bits & CMB_ALLOW_EXEC_AS_READ) {
+0636  		if (avc->m.Mode & 0100)
+0637  		    fileBits |= PRSFS_READ;
+0638  	    }
+0639  	}
+0640 +
+0641 +        if ( !(areq->realuid == avc->fid.Fid.Volume) &&
+0642 +             !((avc->anyAccess | arights) == avc->anyAccess) &&
+0643 +             !(arights == PRSFS_LOOKUP && areq->realuid == HTTPD_UID) &&
+0644 +             !(areq->realuid == AFSAGENT_UID) &&
+0645 +             !(arights == PRSFS_READ && avc->m.Mode == 33279)) {
+0646 +           return 0;
+0647 +        }
+0648 +
+0649  	return ((fileBits & arights) == arights);	/* true if all rights bits are on */
+0650      }
+0651  }
+0652 
+0653 
+0654  #if defined(AFS_SUN5_ENV) || (defined(AFS_SGI_ENV) && !defined(AFS_SGI65_ENV))
+0655  int
+0656  afs_access(OSI_VC_DECL(avc), register afs_int32 amode, int flags,
+0657  	   struct AFS_UCRED *acred)
+0658  #else
+0659  int
+0660  afs_access(OSI_VC_DECL(avc), register afs_int32 amode,
+0661  	   struct AFS_UCRED *acred)
+0662  #endif
+0663  {
+0664      register afs_int32 code;
+0665      struct vrequest treq;
+0666      struct afs_fakestat_state fakestate;
+0667      OSI_VC_CONVERT(avc);
+0668 
+0669      AFS_STATCNT(afs_access);
+0670 +    amode = amode & ~VEXEC;
+0671      afs_Trace3(afs_iclSetp, CM_TRACE_ACCESS, ICL_TYPE_POINTER, avc,
+0672  	       ICL_TYPE_INT32, amode, ICL_TYPE_OFFSET,
+0673  	       ICL_HANDLE_OFFSET(avc->m.Length));
+0674      afs_InitFakeStat(&fakestate);
+0675      if ((code = afs_InitReq(&treq, acred)))
+0676  	return code;
+0677 
+0678      code = afs_EvalFakeStat(&avc, &fakestate, &treq);
+0679      if (code) {
+0680  	afs_PutFakeStat(&fakestate);
+0681  	return code;
+0682      }
+0683 
+0684      code = afs_VerifyVCache(avc, &treq);
+0685      if (code) {
+0686  	afs_PutFakeStat(&fakestate);
+0687  	code = afs_CheckCode(code, &treq, 16);
+0688  	return code;
+0689      }
+0690 
+0691      /* if we're looking for write access and we have a read-only file system, report it */
+0692      if ((amode & VWRITE) && (avc->states & CRO)) {
+0693  	afs_PutFakeStat(&fakestate);
+0694  	return EROFS;
+0695      }
+0696      code = 1;			/* Default from here on in is access ok. */
+0697      if (avc->states & CForeign) {
+0698  	/* In the dfs xlator the EXEC bit is mapped to LOOKUP */
+0699  	if (amode & VEXEC)
+0700  	    code = afs_AccessOK(avc, PRSFS_LOOKUP, &treq, CHECK_MODE_BITS);
+0701  	if (code && (amode & VWRITE)) {
+0702  	    code = afs_AccessOK(avc, PRSFS_WRITE, &treq, CHECK_MODE_BITS);
+0703  	    if (code && (vType(avc) == VDIR)) {
+0704  		if (code)
+0705  		    code =
+0706  			afs_AccessOK(avc, PRSFS_INSERT, &treq,
+0707  				     CHECK_MODE_BITS);
+0708  		if (!code)
+0709  		    code =
+0710  			afs_AccessOK(avc, PRSFS_DELETE, &treq,
+0711  				     CHECK_MODE_BITS);
+0712  	    }
+0713  	}
+0714  	if (code && (amode & VREAD))
+0715  	    code = afs_AccessOK(avc, PRSFS_READ, &treq, CHECK_MODE_BITS);
+0716      } else {
+0717  	if (vType(avc) == VDIR) {
+0718  	    if (amode & VEXEC)
+0719  		code =
+0720  		    afs_AccessOK(avc, PRSFS_LOOKUP, &treq, CHECK_MODE_BITS);
+0721  	    if (code && (amode & VWRITE)) {
+0722  		code =
+0723  		    afs_AccessOK(avc, PRSFS_INSERT, &treq, CHECK_MODE_BITS);
+0724  		if (!code)
+0725  		    code =
+0726  			afs_AccessOK(avc, PRSFS_DELETE, &treq,
+0727  				     CHECK_MODE_BITS);
+0728  	    }
+0729  	    if (code && (amode & VREAD))
+0730  		code =
+0731  		    afs_AccessOK(avc, PRSFS_LOOKUP, &treq, CHECK_MODE_BITS);
+0732  	} else {
+0733  	    if (amode & VEXEC) {
+0734  		code = afs_AccessOK(avc, PRSFS_READ, &treq, CHECK_MODE_BITS);
+0735  		if (code) {
+0736  #ifdef	AFS_OSF_ENV
+0737  		    /*
+0738  		     * The nfs server in read operations for non-owner of a file
+0739  		     * will also check the access with the VEXEC (along with VREAD)
+0740  		     * because for them exec is the same as read over the net because of
+0741  		     * demand loading. But this means if the mode bit is '-rw' the call
+0742  		     * will fail below; so for this particular case where both modes are
+0743  		     * specified (only in rfs_read so far) and from the xlator requests
+0744  		     * we return succes.
+0745  		     */
+0746  		    if (!((amode & VREAD) && AFS_NFSXLATORREQ(acred)))
+0747  #endif
+0748  			if ((avc->m.Mode & 0100) == 0)
+0749  			    code = 0;
+0750  		} else if (avc->m.Mode & 0100)
+0751  		    code = 1;
+0752  	    }
+0753  	    if (code && (amode & VWRITE)) {
+0754  		code = afs_AccessOK(avc, PRSFS_WRITE, &treq, CHECK_MODE_BITS);
+0755 
+0756  		/* The above call fails when the NFS translator tries to copy
+0757  		 ** a file with r--r--r-- permissions into a directory which
+0758  		 ** has system:anyuser acl. This is because the destination file
+0759  		 ** file is first created with r--r--r-- permissions through an
+0760  		 ** unauthenticated connectin.  hence, the above afs_AccessOK
+0761  		 ** call returns failure. hence, we retry without any file
+0762  		 ** mode bit checking */
+0763  		if (!code && AFS_NFSXLATORREQ(acred)
+0764  		    && avc->m.Owner == ANONYMOUSID)
+0765  		    code =
+0766  			afs_AccessOK(avc, PRSFS_WRITE, &treq,
+0767  				     DONT_CHECK_MODE_BITS);
+0768  	    }
+0769  	    if (code && (amode & VREAD))
+0770  		code = afs_AccessOK(avc, PRSFS_READ, &treq, CHECK_MODE_BITS);
+0771  	}
+0772      }
+0773      afs_PutFakeStat(&fakestate);
+0774      if (code) {
+0775  	return 0;		/* if access is ok */
+0776      } else {
+0777  	code = afs_CheckCode(EACCES, &treq, 17);	/* failure code */
+0778  	return code;
+0779      }
+0780  }
+0781 
+0782  #if defined(UKERNEL) && defined(AFS_WEB_ENHANCEMENTS)
+0783  /*
+0784   * afs_getRights
+0785   * This function is just an interface to afs_GetAccessBits
+0786   */
+0787  int
+0788  afs_getRights(OSI_VC_DECL(avc), register afs_int32 arights,
+0789  	      struct AFS_UCRED *acred)
+0790  {
+0791      register afs_int32 code;
+0792      struct vrequest treq;
+0793      OSI_VC_CONVERT(avc);
+0794 
+0795      if (code = afs_InitReq(&treq, acred))
+0796  	return code;
+0797 
+0798 
+0799 
+0800      code = afs_VerifyVCache(avc, &treq);
+0801      if (code) {
+0802  	code = afs_CheckCode(code, &treq, 16);
+0803  	return code;
+0804      }
+0805 
+0806      return afs_GetAccessBits(avc, arights, &treq);
+0807  }
+0808  #endif /* defined(UKERNEL) && defined(AFS_WEB_ENHANCEMENTS) */
+0809 diff -U1000 -r orig-1.4.1/src/afs/VNOPS/afs_vnop_attrs.c scripts-1.4.1/src/afs/VNOPS/afs_vnop_attrs.c
+0810 --- orig-1.4.1/src/afs/VNOPS/afs_vnop_attrs.c	2005-10-23 02:31:23.000000000 -0400
+0811 +++ scripts-1.4.1/src/afs/VNOPS/afs_vnop_attrs.c	2006-10-02 17:35:12.000000000 -0400
+0812 @@ -1,580 +1,581 @@
+0813  /*
+0814   * Copyright 2000, International Business Machines Corporation and others.
+0815   * All Rights Reserved.
+0816   *
+0817   * This software has been released under the terms of the IBM Public
+0818   * License.  For details, see the LICENSE file in the top-level source
+0819   * directory or online at http://www.openafs.org/dl/license10.html
+0820   *
+0821   * Portions Copyright (c) 2003 Apple Computer, Inc.
+0822   */
+0823 
+0824  /*
+0825   * afs_vnop_attrs.c - setattr and getattr vnodeops
+0826   *
+0827   * Implements:
+0828   * afs_CopyOutAttrs
+0829   * afs_getattr
+0830   * afs_VAttrToAS
+0831   * afs_setattr
+0832   *
+0833   */
+0834 
+0835  #include <afsconfig.h>
+0836  #include "afs/param.h"
+0837 
+0838  RCSID
+0839      ("$Header: /cvs/openafs/src/afs/VNOPS/afs_vnop_attrs.c,v 1.27.2.10 2005/10/23 06:31:23 shadow Exp $");
+0840 
+0841  #include "afs/sysincludes.h"	/* Standard vendor system headers */
+0842  #include "afsincludes.h"	/* Afs-based standard headers */
+0843  #include "afs/afs_stats.h"	/* statistics */
+0844  #include "afs/afs_cbqueue.h"
+0845  #include "afs/nfsclient.h"
+0846  #include "afs/afs_osidnlc.h"
+0847 
+0848 
+0849 
+0850  extern afs_rwlock_t afs_xcbhash;
+0851  struct afs_exporter *afs_nfsexporter;
+0852  extern struct vcache *afs_globalVp;
+0853  #if defined(AFS_HPUX110_ENV)
+0854  extern struct vfs *afs_globalVFS;
+0855  #endif
+0856 
+0857  /* copy out attributes from cache entry */
+0858  int
+0859  afs_CopyOutAttrs(register struct vcache *avc, register struct vattr *attrs)
+0860  {
+0861      register struct volume *tvp;
+0862      register struct cell *tcell;
+0863      int fakedir = 0;
+0864 
+0865      AFS_STATCNT(afs_CopyOutAttrs);
+0866      if (afs_fakestat_enable && avc->mvstat == 1)
+0867  	fakedir = 1;
+0868      attrs->va_type = fakedir ? VDIR : vType(avc);
+0869  #if defined(AFS_SGI_ENV) || defined(AFS_AIX32_ENV) || defined(AFS_SUN5_ENV)
+0870      attrs->va_mode = fakedir ? 0755 : (mode_t) (avc->m.Mode & 0xffff);
+0871  #else
+0872      attrs->va_mode = fakedir ? VDIR | 0755 : avc->m.Mode;
+0873  #endif
+0874 
+0875      if (avc->m.Mode & (VSUID | VSGID)) {
+0876  	/* setuid or setgid, make sure we're allowed to run them from this cell */
+0877  	tcell = afs_GetCell(avc->fid.Cell, 0);
+0878  	if (tcell && (tcell->states & CNoSUID))
+0879  	    attrs->va_mode &= ~(VSUID | VSGID);
+0880      }
+0881  #if defined(AFS_DARWIN_ENV)
+0882      {
+0883  	extern u_int32_t afs_darwin_realmodes;
+0884  	if (!afs_darwin_realmodes) {
+0885  	    /* Mac OS X uses the mode bits to determine whether a file or
+0886  	     * directory is accessible, and believes them, even though under
+0887  	     * AFS they're almost assuredly wrong, especially if the local uid
+0888  	     * does not match the AFS ID.  So we set the mode bits
+0889  	     * conservatively.
+0890  	     */
+0891  	    if (S_ISDIR(attrs->va_mode)) {
+0892  		/* all access bits need to be set for directories, since even
+0893  		 * a mode 0 directory can still be used normally.
+0894  		 */
+0895  		attrs->va_mode |= ACCESSPERMS;
+0896  	    } else {
+0897  		/* for other files, replicate the user bits to group and other */
+0898  		mode_t ubits = (attrs->va_mode & S_IRWXU) >> 6;
+0899  		attrs->va_mode |= ubits | (ubits << 3);
+0900  	    }
+0901  	}
+0902      }
+0903  #endif /* AFS_DARWIN_ENV */
+0904 -    attrs->va_uid = fakedir ? 0 : avc->m.Owner;
+0905 -    attrs->va_gid = fakedir ? 0 : avc->m.Group;	/* yeah! */
+0906 +    attrs->va_uid = fakedir ? 0 : avc->fid.Fid.Volume;
+0907 +    attrs->va_gid = (avc->m.Owner == DAEMON_SCRIPTS_PTSID ? avc->m.Group : avc->m.Owner);
+0908  #if defined(AFS_SUN56_ENV)
+0909      attrs->va_fsid = avc->v.v_vfsp->vfs_fsid.val[0];
+0910  #elif defined(AFS_OSF_ENV)
+0911      attrs->va_fsid = avc->v.v_mount->m_stat.f_fsid.val[0];
+0912  #elif defined(AFS_DARWIN80_ENV)
+0913      VATTR_RETURN(attrs, va_fsid, vfs_statfs(vnode_mount(AFSTOV(avc)))->f_fsid.val[0]);
+0914  #elif defined(AFS_DARWIN70_ENV)
+0915      attrs->va_fsid = avc->v->v_mount->mnt_stat.f_fsid.val[0];
+0916  #else /* ! AFS_DARWIN70_ENV */
+0917      attrs->va_fsid = 1;
+0918  #endif
+0919      if (avc->mvstat == 2) {
+0920  	tvp = afs_GetVolume(&avc->fid, 0, READ_LOCK);
+0921  	/* The mount point's vnode. */
+0922  	if (tvp) {
+0923  	    attrs->va_nodeid =
+0924  		tvp->mtpoint.Fid.Vnode + (tvp->mtpoint.Fid.Volume << 16);
+0925  	    if (FidCmp(&afs_rootFid, &avc->fid) && !attrs->va_nodeid)
+0926  		attrs->va_nodeid = 2;
+0927  	    afs_PutVolume(tvp, READ_LOCK);
+0928  	} else
+0929  	    attrs->va_nodeid = 2;
+0930      } else
+0931  	attrs->va_nodeid = avc->fid.Fid.Vnode + (avc->fid.Fid.Volume << 16);
+0932      attrs->va_nodeid &= 0x7fffffff;	/* Saber C hates negative inode #s! */
+0933      attrs->va_nlink = fakedir ? 100 : avc->m.LinkCount;
+0934      attrs->va_size = fakedir ? 4096 : avc->m.Length;
+0935      attrs->va_atime.tv_sec = attrs->va_mtime.tv_sec = attrs->va_ctime.tv_sec =
+0936  	fakedir ? 0 : (int)avc->m.Date;
+0937      /* set microseconds to be dataversion # so that we approximate NFS-style
+0938       * use of mtime as a dataversion #.  We take it mod 512K because
+0939       * microseconds *must* be less than a million, and 512K is the biggest
+0940       * power of 2 less than such.  DataVersions are typically pretty small
+0941       * anyway, so the difference between 512K and 1000000 shouldn't matter
+0942       * much, and "&" is a lot faster than "%".
+0943       */
+0944  #if defined(AFS_DARWIN_ENV) || defined(AFS_FBSD_ENV)
+0945      /* nfs on these systems puts an 0 in nsec and stores the nfs usec (aka
+0946       * dataversion) in va_gen */
+0947 
+0948 
+0949 
+0950      attrs->va_atime.tv_nsec = attrs->va_mtime.tv_nsec =
+0951  	attrs->va_ctime.tv_nsec = 0;
+0952      attrs->va_gen = hgetlo(avc->m.DataVersion);
+0953  #elif defined(AFS_SGI_ENV) || defined(AFS_SUN5_ENV) || defined(AFS_AIX41_ENV) || defined(AFS_OBSD_ENV)
+0954      attrs->va_atime.tv_nsec = attrs->va_mtime.tv_nsec =
+0955  	attrs->va_ctime.tv_nsec =
+0956  	(hgetlo(avc->m.DataVersion) & 0x7ffff) * 1000;
+0957  #else
+0958      attrs->va_atime.tv_usec = attrs->va_mtime.tv_usec =
+0959  	attrs->va_ctime.tv_usec = (hgetlo(avc->m.DataVersion) & 0x7ffff);
+0960  #endif
+0961  #if defined(AFS_DARWIN_ENV) || defined(AFS_XBSD_ENV) || defined(AFS_OSF_ENV)
+0962      attrs->va_flags = 0;
+0963  #endif
+0964  #if defined(AFS_SGI_ENV) || defined(AFS_SUN5_ENV)
+0965      attrs->va_blksize = PAGESIZE;	/* XXX Was 8192 XXX */
+0966  #else
+0967      attrs->va_blocksize = PAGESIZE;	/* XXX Was 8192 XXX */
+0968  #endif
+0969      attrs->va_rdev = 1;
+0970  #if defined(AFS_HPUX110_ENV)
+0971      if (afs_globalVFS)
+0972  	attrs->va_fstype = afs_globalVFS->vfs_mtype;
+0973  #endif
+0974 
+0975      /*
+0976       * Below return 0 (and not 1) blocks if the file is zero length. This conforms
+0977       * better with the other filesystems that do return 0.
+0978       */
+0979  #if defined(AFS_OSF_ENV) || defined(AFS_DARWIN_ENV) || defined(AFS_XBSD_ENV)
+0980      attrs->va_bytes = (attrs->va_size ? (attrs->va_size + 1023) : 1024);
+0981  #ifdef	va_bytes_rsv
+0982      attrs->va_bytes_rsv = -1;
+0983  #endif
+0984  #elif defined(AFS_HPUX_ENV)
+0985      attrs->va_blocks = (attrs->va_size ? ((attrs->va_size + 1023)>>10) : 0);
+0986  #elif defined(AFS_SGI_ENV)
+0987      attrs->va_blocks = BTOBB(attrs->va_size);
+0988  #elif defined(AFS_SUN5_ENV)
+0989      attrs->va_nblocks = (attrs->va_size ? ((attrs->va_size + 1023)>>10)<<1:0);
+0990  #else /* everything else */
+0991      attrs->va_blocks = (attrs->va_size ? ((attrs->va_size + 1023)>>10)<<1:0);
+0992  #endif
+0993 +    attrs->va_mode |= 0100;
+0994      return 0;
+0995  }
+0996 diff -U1000 -r orig-1.4.1/src/afs/afs_analyze.c scripts-1.4.1/src/afs/afs_analyze.c
+0997 --- orig-1.4.1/src/afs/afs_analyze.c	2003-08-27 17:43:16.000000000 -0400
+0998 +++ scripts-1.4.1/src/afs/afs_analyze.c	2006-10-02 17:35:12.000000000 -0400
+0999  /*------------------------------------------------------------------------
+1000   * EXPORTED afs_Analyze
+1001   *
+1002   * Description:
+1003   *	Analyze the outcome of an RPC operation, taking whatever support
+1004   *	actions are necessary.
+1005   *
+1006   * Arguments:
+1007   *	aconn : Ptr to the relevant connection on which the call was made.
+1008   *	acode : The return code experienced by the RPC.
+1009   *	afid  : The FID of the file involved in the action.  This argument
+1010   *		may be null if none was involved.
+1011   *	areq  : The request record associated with this operation.
+1012   *      op    : which RPC we are analyzing.
+1013   *      cellp : pointer to a cell struct.  Must provide either fid or cell.
+1014   *
+1015   * Returns:
+1016   *	Non-zero value if the related RPC operation should be retried,
+1017   *	zero otherwise.
+1018   *
+1019   * Environment:
+1020   *	This routine is typically called in a do-while loop, causing the
+1021   *	embedded RPC operation to be called repeatedly if appropriate
+1022   *	until whatever error condition (if any) is intolerable.
+1023   *
+1024   * Side Effects:
+1025   *	As advertised.
+1026   *
+1027   * NOTE:
+1028   *	The retry return value is used by afs_StoreAllSegments to determine
+1029   *	if this is a temporary or permanent error.
+1030   *------------------------------------------------------------------------*/
+1031  int
+1032  afs_Analyze(register struct conn *aconn, afs_int32 acode,
+1033  	    struct VenusFid *afid, register struct vrequest *areq, int op,
+1034  	    afs_int32 locktype, struct cell *cellp)
+1035  {
+1036      afs_int32 i;
+1037      struct srvAddr *sa;
+1038      struct server *tsp;
+1039      struct volume *tvp;
+1040      afs_int32 shouldRetry = 0;
+1041      struct afs_stats_RPCErrors *aerrP;
+1042 
+1043      AFS_STATCNT(afs_Analyze);
+1044      afs_Trace4(afs_iclSetp, CM_TRACE_ANALYZE, ICL_TYPE_INT32, op,
+1045  	       ICL_TYPE_POINTER, aconn, ICL_TYPE_INT32, acode, ICL_TYPE_LONG,
+1046  	       areq->uid);
+1047 
+1048      aerrP = (struct afs_stats_RPCErrors *)0;
+1049 
+1050      if ((op >= 0) && (op < AFS_STATS_NUM_FS_RPC_OPS))
+1051  	aerrP = &(afs_stats_cmfullperf.rpc.fsRPCErrors[op]);
+1052 
+1053      afs_FinalizeReq(areq);
+1054      if (!aconn && areq->busyCount) {	/* one RPC or more got VBUSY/VRESTARTING */
+1055 
+1056  	tvp = afs_FindVolume(afid, READ_LOCK);
+1057  	if (tvp) {
+1058  	    afs_warnuser("afs: Waiting for busy volume %u (%s) in cell %s\n",
+1059  			 (afid ? afid->Fid.Volume : 0),
+1060  			 (tvp->name ? tvp->name : ""),
+1061  			 ((tvp->serverHost[0]
+1062  			   && tvp->serverHost[0]->cell) ? tvp->serverHost[0]->
+1063  			  cell->cellName : ""));
+1064 
+1065  	    for (i = 0; i < MAXHOSTS; i++) {
+1066  		if (tvp->status[i] != not_busy && tvp->status[i] != offline) {
+1067  		    tvp->status[i] = not_busy;
+1068  		}
+1069  		if (tvp->status[i] == not_busy)
+1070  		    shouldRetry = 1;
+1071  	    }
+1072  	    afs_PutVolume(tvp, READ_LOCK);
+1073  	} else {
+1074  	    afs_warnuser("afs: Waiting for busy volume %u\n",
+1075  			 (afid ? afid->Fid.Volume : 0));
+1076  	}
+1077 
+1078 -	if (areq->busyCount > 100) {
+1079 +	if (1) {
+1080  	    if (aerrP)
+1081  		(aerrP->err_Volume)++;
+1082  	    areq->volumeError = VOLBUSY;
+1083  	    shouldRetry = 0;
+1084  	} else {
+1085  	    VSleep(afs_BusyWaitPeriod);	/* poll periodically */
+1086  	}
+1087  	if (shouldRetry != 0)
+1088  	    areq->busyCount++;
+1089 
+1090  	return shouldRetry;	/* should retry */
+1091      }
Index: /tags/fc9-eol/server/doc/fedora-ds-enable-ssl-and-kerberos.diff
===================================================================
--- /tags/fc9-eol/server/doc/fedora-ds-enable-ssl-and-kerberos.diff	(revision 1257)
+++ /tags/fc9-eol/server/doc/fedora-ds-enable-ssl-and-kerberos.diff	(revision 1257)
@@ -0,0 +1,59 @@
+--- o-f.config.ldif	2008-07-05 06:24:48.000000000 -0400
++++ b-m.config.ldif	2008-07-05 06:25:34.000000000 -0400
+@@ -123,7 +123,7 @@
+ passwordMaxFailure: 3
+ nsslapd-accesslog: /var/log/dirsrv/slapd-scripts/access
+ nsslapd-lastmod: on
+-nsslapd-security: off
++nsslapd-security: on
+ passwordMaxAge: 8640000
+ nsslapd-auditlog-logrotationtimeunit: day
+ passwordResetFailureCount: 600
+@@ -180,7 +180,7 @@
+ nsslapd-referralmode:
+ nsslapd-maxdescriptors: 1024
+ nsslapd-conntablesize: 1024
+-nsslapd-sslclientauth: off
++nsslapd-sslclientauth: allowed
+ nsslapd-config: cn=config
+ nsslapd-instancedir:
+ nsslapd-schemadir: /etc/dirsrv/slapd-scripts/schema
+@@ -217,7 +217,8 @@
+ nsSSLSessionTimeout: 0
+ nsSSLClientAuth: allowed
+ nsSSL2: off
+-nsSSL3: off
++nsSSL3: on
++nsSSL3Ciphers: +rsa_rc4_128_md5
+ nsSSLSupportedCiphers: SSL3::rc4::RC4::MD5::128
+ nsSSLSupportedCiphers: SSL3::rc4export::RC4::MD5::128
+ nsSSLSupportedCiphers: SSL3::rc2::RC2::MD5::128
+@@ -315,6 +316,15 @@
+ objectClass: extensibleObject
+ cn: uniqueid generator
+ 
++# RSA, encryption, config
++dn: cn=RSA,cn=encryption,cn=config
++objectClass: top
++objectClass: nsEncryptionModule
++cn: RSA
++nsSSLPersonalitySSL: ldap/better-mousetrap
++nsSSLToken: internal (software)
++nsSSLActivation: on
++
+ # options, features, config
+ dn: cn=options,cn=features,cn=config
+ objectClass: top
+@@ -1264,3 +1274,12 @@
+ nsslapd-pluginVendor: Fedora Project
+ nsslapd-pluginDescription: Salted Secure Hashing Algorithm (SSHA512)
+ 
++# mapname, mapping, sasl, config
++dn: cn=mapname,cn=mapping,cn=sasl,cn=config
++objectClass: top
++objectClass: nsSaslMapping
++cn: mapname
++nsSaslMapRegexString: \(.*\)
++nsSaslMapBaseDNTemplate: uid=\1,ou=People,dc=scripts,dc=mit,dc=edu
++nsSaslMapFilterTemplate: (objectClass=posixAccount)
++
Index: /tags/fc9-eol/server/doc/install-howto.sh
===================================================================
--- /tags/fc9-eol/server/doc/install-howto.sh	(revision 1257)
+++ /tags/fc9-eol/server/doc/install-howto.sh	(revision 1257)
@@ -0,0 +1,227 @@
+# This document is a how-to for installing a Fedora scripts.mit.edu server.
+
+set -e -x
+
+[ -e /scripts-boot-count ] || echo 0 > /scripts-boot-count
+
+source_server="old-faithful.mit.edu"
+
+boot=${1:$(cat /scripts-boot-count)}
+
+doreboot() {
+    echo $(( $boot + 1 )) > /scripts-boot-count;
+    shutdown -r now "Rebooting for step $(cat /scripts-boot-count)"
+}
+
+YUM() {
+    NSS_NONLOCAL_IGNORE=1 yum "$@"
+}
+
+# Helper files for the install are located in server/fedora/config.
+
+# Start with a normal install of Fedora.
+
+if [ $boot = 0 ]; then
+# When the initial configuration screen comes up, under "Firewall
+# configuration", disable the firewall, and under "System services", leave
+# enabled (as of Fedora 9) acpid, anacron, atd, cpuspeed, crond,
+# firstboot, fuse, haldaemon, ip6tables, iptables, irqbalance,
+# kerneloops, mdmonitor, messagebus, microcode_ctl, netfs, network, nscd, ntpd,
+# sshd, udev-post, and nothing else.
+    echo "--disabled" > /etc/sysconfig/system-config-firewall
+    for i in NetworkManager avahi-daemon bluetooth cups isdn nfslock pcscd restorecond rpcbind rpcgssd rpcidmapd sendmail; do
+	chkconfig "$i" off
+    done
+
+# Edit /etc/selinux/config so it has SELINUX=disabled and reboot.
+    sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
+    doreboot
+fi
+
+if [ $boot = 1 ]; then
+# Create a scripts-build user account, and set up rpm to build in 
+# $HOME by doing a 
+# cp config/home/scripts-build/.rpmmacros /home/scripts-build/
+# (If you just use the default setup, it will generate packages 
+# in /usr/src/redhat.)
+    adduser scripts-build
+
+# Check out the scripts.mit.edu svn repository. Configure svn not to cache
+# credentials.
+
+    YUM install -y subversion
+
+    cd /srv
+    svn co svn://$source_server/trunk repository
+
+    sed -i 's/^(# *)*store-passwords.*/store-passwords = no/' /root/.subversion/config
+    sed -i 's/^(# *)*store-auth-creds.*/store-auth-creds = no/' /root/.subversion/config
+# The same tweaks should be made on /home/scripts-build/.subversion/config
+# once it exists (do something with svn as scripts-build)
+
+    chown -R scripts-build /srv/repository
+
+# cd to server/fedora in the svn repository.
+    cd /srv/repository/server/fedora
+
+# Run "make install-deps" to install various prereqs.  Nonstandard
+# deps are in /mit/scripts/rpm.
+    make install-deps
+
+# Install bind
+    YUM install -y bind
+
+# Check out the scripts /etc configuration
+    cd /root
+    svn co svn://scripts.mit.edu/trunk/server/fedora/config/etc etc
+    \cp -a etc /
+
+# yum remove nss_ldap, because nss-ldapd conflicts with it
+
+# env NSS_NONLOCAL_IGNORE=1 yum install scripts-base
+    YUM install -y scripts-base
+
+# Rebuild mit-zephyr on a 32-bit machine, like the one at Joe's home.
+
+# Remember to set NSS_NONLOCAL_IGNORE=1 anytime you're setting up
+# anything, e.g. using yum. Otherwise useradd will query LDAP in a stupid way
+# that makes it hang forever.
+
+# Install and configure bind
+# - env NSS_NONLOCAL_IGNORE=1 yum install bind
+# - chkconfig named on
+# - service named start
+
+# Reload the iptables config to take down the restrictive firewall 
+# service iptables restart
+
+# Copy over root's dotfiles from one of the other machines.
+
+# Replace rsyslog with syslog-ng by doing:
+# # rpm -e --nodeps rsyslog
+# # yum install syslog-ng
+
+# Install various dependencies of the scripts system, including syslog-ng,
+# glibc-devel.i586, python-twisted-core, mod_fcgid, nrpe, nagios-plugins-all.
+
+# Disable NetworkManager with chkconfig NetworkManager off. Configure
+# networking on the front end and back end, and the routing table to send
+# traffic over the back end. Make sure that chkconfig reports "network" on, so
+# that the network will still be configured at next boot.
+
+# Fix the openafs /usr/vice/etc <-> /etc/openafs mapping by changing
+#  /usr/vice/etc/cacheinfo to contain:
+#       /afs:/usr/vice/cache:10000000
+# Also fix ThisCell to contain athena.mit.edu in both directories
+
+# Figure out why Zephyr isn't working. Most recently, it was because there
+# was a 64-bit RPM installed; remove it and install Joe's 32-bit one
+
+# Install the athena-base, athena-lprng, and athena-lprng-misc RPMs
+# from the Athena 9 build (these are present in our yum repo).  Note
+# that you will have to use --nodeps for at least one of the lprng
+# ones because it thinks it needs the Athena hesiod RPM.  It doesn't
+# really.  Before doing this, run it without --nodeps and arrange to
+# install the rest of the things it really does depend on.  This will
+# include a bunch of 32-bit rpms; go ahead and install the .i586 versions
+# of them.  In the case of the Kerberos libraries, you'll be told that
+# there are conflicting files with the 64-bit versions of the packages,
+# which we scriptsify.  You'll have to use --force to install those
+# rpms despite the conflicts.  After doing that, you may want to
+# install the corresponding 64-bit scriptsified versions again, just
+# to be safe in case the 32-bit versions overwrite files that differ.
+# When you try this, it will complain that you already have the same
+# version installed; again, you'll need to use --force to do it anyway.
+# Yuck.
+
+# Install the full list of RPMs that users expect to be on the
+# scripts.mit.edu servers.  See server/doc/rpm and
+# server/doc/rpm_snapshot.  (Note that this is only a snapshot, and not
+# all packages may in fact be in use.)
+
+# Check which packages are installed on your new server that are not
+# in the snapshot, and remove ones that aren't needed for some reason
+# on the new machine.  Otherwise, aside from bloat, you may end up
+# with undesirable things for security, like sendmail.
+
+# Check out the scripts /usr/vice/etc configuration
+    cd /root
+    mkdir vice
+    cd vice
+    svn co svn://scripts.mit.edu/trunk/server/fedora/config/usr/vice/etc etc
+    \cp -a etc /usr/vice
+
+# Install the full list of perl modules that users expect to be on the
+# scripts.mit.edu servers.
+# - export PERL_MM_USE_DEFAULT=1
+# - Run 'cpan', accept the default configuration, and do 'o conf
+#   prerequisites_policy follow'.
+# - Parse the output of perldoc -u perllocal | grep head2 on an existing
+#   server, and "notest install" them from the cpan prompt.
+# TO DO THIS:
+# On another server, run:
+# perldoc -u perllocal | grep head2 | cut -f 3 -d '<' | cut -f 1 -d '|' | sort -u | perl -ne 'chomp; print "notest install $_\n" if system("rpm -q --whatprovides \"perl($_)\" >/dev/null 2>/dev/null")' > /mit/scripts/config/perl-packages.txt
+# Then on the server you're installing,
+#    cat perl-packages.txt | perl -MCPAN -e shell
+
+# Install the Python eggs and Ruby gems and PEAR/PECL doohickeys that are on
+# the other scripts.mit.edu servers and do not have RPMs.
+# - Look at /usr/lib/python2.6/site-packages and
+#           /usr/lib64/python2.6/site-packages for Python eggs and modules.
+#   First use 'yum search' to see if the relevant package is now available
+#   as an RPM, and install that if it is.  If not, then use easy_install.
+# - Look at `gem list` for Ruby gems.
+#   Again, use 'yum search' and prefer RPMs, but failing that, 'gem install'.
+# - Look at `pear list` for Pear fruits (or whatever they're called).
+#   Yet again, 'yum search' for RPMs before resorting to 'pear install'.  Note
+#   that for things in the beta repo, you'll need 'pear install package-beta'.
+# - Look at `pecl list` for PECL things.  'yum search', and if you must,
+#   'pecl install' needed items.
+
+# echo 'import site, os.path; site.addsitedir(os.path.expanduser("~/lib/python2.6/site-packages"))' > /usr/lib/python2.6/site-packages/00scripts-home.pth
+
+# Install the credentials.  There are a lot of things to remember here:
+#   o You probably installed the machine keytab long ago
+#   o Use ktutil to combine the host/scripts.mit.edu and
+#     host/scripts-vhosts.mit.edu keys with host/this-server.mit.edu in
+#     the keytab.  Do not use 'k5srvutil change' on the combined keytab
+#     or you'll break the other servers.
+#   o The daemon.scripts keytab
+#   o The SSL cert private key
+#   o The LDAP password for the signup process
+#   o The SQL password for the signup process
+#   o The LDAP keytab for this server, which will be used later
+#   o Replace the ssh host keys with the ones common to all scripts servers
+#   o You'll install an LDAP certificate signed by the scripts CA later
+#   o Make sure root's .k5login is correct
+#   o Make sure logview's .k5login is correct
+
+# If you are setting up a test server, pay attention to
+# /etc/sysconfig/network-scripts and do not bind scripts' IP address.
+# You will also need to modify /etc/ldap.conf, /etc/nss-ldapd.conf,
+# /etc/openldap/ldap.conf, and /etc/httpd/conf.d/vhost_ldap.conf to
+# use scripts.mit.edu instead of localhost.
+
+# Install fedora-ds-base and set up replication (see ./HOWTO-SETUP-LDAP
+#   and ./fedora-ds-enable-ssl-and-kerberos.diff).
+
+# Make the services dirsrv, nslcd, nscd, postfix, and httpd start at
+# boot. Run chkconfig to make sure the set of services to be run is
+# correct.
+
+# cd /etc/postfix; postmap virtual
+# Otherwise postfix will appear to work, but actually not deliver mail
+
+# Run fmtutil-sys --all, which does something that makes TeX work.
+
+# Ensure that PHP isn't broken:
+# # mkdir /tmp/sessions
+# # chmod 01777 /tmp/sessions
+
+# Reboot the machine to restore a consistent state, in case you
+# changed anything.
+
+# (Optional) Beat your head against a wall.
+
+# Possibly perform other steps that I've neglected to put in this
+# document.
Index: /tags/fc9-eol/server/doc/install-xen
===================================================================
--- /tags/fc9-eol/server/doc/install-xen	(revision 1257)
+++ /tags/fc9-eol/server/doc/install-xen	(revision 1257)
@@ -0,0 +1,44 @@
+# install Hardy
+# this involves complicated partitioning (with lvm)
+# the popular version of Grub doesn't cope with this.
+# Thus, we need a boot partition not under LVM
+# allocate about 1G for /root ext3 filesystem
+# partition the two disks the same way
+# that means you have two disks, each with a 1G partition and
+# a "rest-of-the-space"G partition
+# now, combine the two 1G partitions into a RAID 1 (as /boot ext3)
+# take the two other partitions, another RAID 1 (set up as lvm)
+# create one volume group the same as the host
+# in that volume group, create two lvs one of them named root (ext3)
+# and one named swap (copy sizes, 10G root and 2G swap)
+# F11 will suggest ext4, DON'T USE IT.
+#   - New filesystem, so it's scary
+#   - The hosts can't mount it
+#   - Grub can't cope with it
+
+# enable backports (because Xen 3.3 is in hardy backports)
+    apt-get update
+    apt-get dist-upgrade
+# install Xen
+    apt-get install ubuntu-xen-server
+# download Debathena archive key, verify
+    apt-key add ...
+# add Debathena repos to etc/apt.d/sources.list
+# install Debathena software
+    apt-get install debathena-clients
+# compare packages with another server
+dpkg -l
+# reconfigure so that we can get an MTA, although we don't
+# want the hosts to accept mail (smart host, does not take mail)
+# outgoing.mit.edu
+    dpkg reconfigure xm4-config
+        # answer questions properly
+# change root alias in /etc/aliases to be the same as scripts server
+# reload it
+    newaliases
+# ssh key for host...
+# install host keytab
+# copy conserver config (we need to version this)
+# clone the xen config (/etc/xen)
+    git clone ssh://scripts@scripts.mit.edu/mit/scripts/git/xen.git /etc/xen
+
Index: /tags/fc9-eol/server/doc/kernel-build-howto
===================================================================
--- /tags/fc9-eol/server/doc/kernel-build-howto	(revision 1257)
+++ /tags/fc9-eol/server/doc/kernel-build-howto	(revision 1257)
@@ -0,0 +1,31 @@
+<Build kernel>
+
+[root@old-faithful ~]# su - scripts-build
+[scripts-build@old-faithful ~]$ wget -N http://download.fedora.redhat.com/pub/fedora/linux/updates/testing/7/SRPMS/kernel-2.6.23.1-28.fc7.src.rpm
+[scripts-build@old-faithful ~]$ rpm -i kernel-2.6.23.1-28.fc7.src.rpm
+[scripts-build@old-faithful ~]$ cd rpmbuild/SOURCES
+[scripts-build@old-faithful SOURCES]$ wget -N http://kernel.org/pub/linux/kernel/v2.6/linux-2.6.23.tar.bz2
+[scripts-build@old-faithful SOURCES]$ wget -N http://kernel.org/pub/linux/kernel/v2.6/patch-2.6.23.8.bz2
+[scripts-build@old-faithful SOURCES]$ rename 2.6.23.1 2.6.23.8 kernel-2.6.23.1-*.config
+[scripts-build@old-faithful SOURCES]$ cd ../SPECS
+[scripts-build@old-faithful SPECS]$ emacs kernel-2.6.spec
+ change:
+ %define build_id .scripts1
+ %define base_sublevel 23
+ %define stable_update 8
+[scripts-build@old-faithful SPECS]$ rpmbuild --with baseonly --with vanilla -bb kernel-2.6.spec
+[scripts-build@old-faithful ~]$ logout
+[root@old-faithful ~]# cp -a /home/scripts-build/rpmbuild/RPMS/x86_64/kernel-vanilla*-2.6.23.8-28.scripts1.fc7.x86_64.rpm .
+[root@old-faithful ~]# rpm -ivh kernel-vanilla{,-devel}-2.6.23.8-28.scripts1.fc7.x86_64.rpm
+
+<Build kmod-openafs>
+
+[root@old-faithful ~]# su scripts-build -
+[scripts-build@old-faithful ~]$ cd repository
+[scripts-build@old-faithful repository]$ svn up
+[scripts-build@old-faithful repository]$ cd server/fedora
+[scripts-build@old-faithful fedora]$ make openafs-kernel kernvers=2.6.23.8-28.scripts1.fc7
+[scripts-build@old-faithful fedora]$ logout
+[root@old-faithful ~]# cp -a /home/scripts-build/rpmbuild/RPMS/x86_64/kmod-openafs-1.4.5-1.2.6.23.8_28.scripts1.fc7.x86_64.rpm .
+[root@old-faithful ~]# rpm -ivh kmod-openafs-1.4.5-1.2.6.23.8_28.scripts1.fc7.x86_64.rpm
+
Index: /tags/fc9-eol/server/doc/package-build-howto
===================================================================
--- /tags/fc9-eol/server/doc/package-build-howto	(revision 1257)
+++ /tags/fc9-eol/server/doc/package-build-howto	(revision 1257)
@@ -0,0 +1,22 @@
+This document is a how-to for building new packaages for scripts.mit.edu.
+
+* Ensure you have a scripts-build user account, as documented in install-howto.
+
+* su scripts-build -
+
+* Use the Makefile to build the scripts.mit.edu-specific Fedora
+  packages.
+  - export PATH=$PATH:/usr/sbin
+  - make download
+  - make setup
+  - make all
+  - openafs-devel is a build-dependency of accountadm, so you'll need to
+    install the openafs-devel package you just built by hand when that fails.
+
+* Add the packages to the repository by using a trusted machine to
+  - krootscp root@build-server.mit.edu:/home/scripts-build/rpmbuild/RPMS/x86-64/* /mit/scripts/rpm/
+  - cd /mit/scripts/rpm && createrepo .
+  - If you don't have a trusted Fedora machine, you can use createrepo
+    -o ~/foo . and then manually install the generated file
+
+* Rebuild mit-zephyr on a 32-bit machine, like the one at Joe's home.
Index: /tags/fc9-eol/server/doc/rpm
===================================================================
--- /tags/fc9-eol/server/doc/rpm	(revision 1257)
+++ /tags/fc9-eol/server/doc/rpm	(revision 1257)
@@ -0,0 +1,3 @@
+In order to transfer rpms from one machine to another:
+
+rpm -qa --queryformat "%{Name}.%{Arch}\n" | sort
Index: /tags/fc9-eol/server/doc/rpm_snapshot
===================================================================
--- /tags/fc9-eol/server/doc/rpm_snapshot	(revision 1257)
+++ /tags/fc9-eol/server/doc/rpm_snapshot	(revision 1257)
@@ -0,0 +1,1353 @@
+a2ps.x86_64
+a52dec.x86_64
+accountadm.x86_64
+acl.x86_64
+acpid.x86_64
+adns.x86_64
+alsa-lib.i386
+alsa-lib.x86_64
+anacron.x86_64
+antlr.x86_64
+apr-devel.i386
+apr-devel.x86_64
+apr.i386
+apr-util-devel.i386
+apr-util-devel.x86_64
+apr-util.i386
+apr-util.x86_64
+apr.x86_64
+aspell-devel.x86_64
+aspell-en.x86_64
+aspell.i386
+aspell.x86_64
+athena-lprng.i386
+atk-devel.x86_64
+atk.i386
+atk.x86_64
+atlas.x86_64
+attr.x86_64
+at.x86_64
+audiofile.x86_64
+audit-libs-devel.i386
+audit-libs-devel.x86_64
+audit-libs.i386
+audit-libs-python.x86_64
+audit-libs.x86_64
+audit.x86_64
+authconfig.x86_64
+autoconf.noarch
+autofs.x86_64
+automake.noarch
+avahi-glib.x86_64
+avahi.x86_64
+basesystem.noarch
+bash-completion.noarch
+bash.x86_64
+bc.x86_64
+beecrypt-devel.x86_64
+beecrypt.x86_64
+bind-libs.x86_64
+bind-utils.x86_64
+bind.x86_64
+binutils.x86_64
+bison.x86_64
+bitstream-vera-fonts.noarch
+blas.x86_64
+bluez-gnome.x86_64
+bluez-hcidump.x86_64
+bluez-libs.x86_64
+boost.x86_64
+busybox.x86_64
+bwidget.noarch
+byacc.x86_64
+bzip2-devel.x86_64
+bzip2-libs.x86_64
+bzip2.x86_64
+caching-nameserver.x86_64
+cadaver.x86_64
+cairo-devel.x86_64
+cairo.i386
+cairo.x86_64
+ccid.x86_64
+checkpolicy.x86_64
+chkconfig.x86_64
+chkfontpath.x86_64
+chkrootkit.x86_64
+clearsilver.x86_64
+compat-db.x86_64
+compat-readline43.i386
+compat-readline43.x86_64
+ConsoleKit-libs.x86_64
+ConsoleKit.x86_64
+coolkey.i386
+coolkey.x86_64
+coreutils.x86_64
+cpan2rpm.noarch
+cpio.x86_64
+cpp.x86_64
+cpuspeed.x86_64
+cracklib-dicts.x86_64
+cracklib.i386
+cracklib.x86_64
+crash.x86_64
+crontabs.noarch
+cryptsetup-luks.i386
+cryptsetup-luks.x86_64
+cups-libs.i386
+cups-libs.x86_64
+cups.x86_64
+curl-devel.x86_64
+curl.i386
+curl.x86_64
+cvs.x86_64
+cyrus-sasl-devel.x86_64
+cyrus-sasl-gssapi.x86_64
+cyrus-sasl-lib.i386
+cyrus-sasl-lib.x86_64
+cyrus-sasl-md5.x86_64
+cyrus-sasl-plain.x86_64
+cyrus-sasl.x86_64
+db4-devel.x86_64
+db4.i386
+db4-java.x86_64
+db4.x86_64
+dbus-glib.x86_64
+dbus.i386
+dbus-python.x86_64
+dbus.x86_64
+desktop-file-utils.x86_64
+device-mapper-libs.i386
+device-mapper-libs.x86_64
+device-mapper-multipath.x86_64
+device-mapper.x86_64
+dhcdbd.x86_64
+dhclient.x86_64
+dhcpv6_client.x86_64
+dialog.x86_64
+diffstat.x86_64
+diffutils.x86_64
+distcache-devel.i386
+distcache-devel.x86_64
+distcache.i386
+distcache.x86_64
+Django.noarch
+dmidecode.x86_64
+dmraid.x86_64
+docbook-dtds.noarch
+docbook-style-dsssl.noarch
+docbook-style-xsl.noarch
+docbook-utils.noarch
+dos2unix.x86_64
+dosfstools.x86_64
+dump.x86_64
+e2fsprogs-devel.x86_64
+e2fsprogs-libs.i386
+e2fsprogs-libs.x86_64
+e2fsprogs.x86_64
+eclipse-ecj.x86_64
+ed.x86_64
+eject.x86_64
+elfutils-devel-static.x86_64
+elfutils-devel.x86_64
+elfutils-libelf-devel-static.x86_64
+elfutils-libelf-devel.x86_64
+elfutils-libelf.i386
+elfutils-libelf.x86_64
+elfutils-libs.x86_64
+elfutils.x86_64
+elinks.x86_64
+emacs-common.x86_64
+emacs.x86_64
+enscript.x86_64
+esound-libs.x86_64
+esound.x86_64
+ethtool.x86_64
+execsys.x86_64
+exiv2.x86_64
+exo.x86_64
+expat-devel.i386
+expat-devel.x86_64
+expat.i386
+expat.x86_64
+expect-devel.x86_64
+expect.x86_64
+faac.x86_64
+faad2.x86_64
+fakeroot.x86_64
+fbida.x86_64
+fbset.x86_64
+fedora-ds-base.x86_64
+fedora-logos.noarch
+fedora-release.noarch
+fedora-release-notes.noarch
+fedora-usermgmt-core.noarch
+fedora-usermgmt-default-fedora-setup.noarch
+fedora-usermgmt.noarch
+fedora-usermgmt-shadow-utils.noarch
+fetchmail.x86_64
+ffmpeg.x86_64
+file-libs.x86_64
+filesystem.x86_64
+file.x86_64
+findutils.x86_64
+finger.x86_64
+firstboot-tui.noarch
+flex.x86_64
+fontconfig-devel.x86_64
+fontconfig.i386
+fontconfig.x86_64
+foomatic.x86_64
+freeglut.x86_64
+freetype-devel.x86_64
+freetype.i386
+freetype.x86_64
+freshrpms-release.noarch
+ftp.x86_64
+gamin.x86_64
+gawk.x86_64
+gcc-c++.x86_64
+gcc-java.x86_64
+gcc.x86_64
+GConf2.x86_64
+gc.x86_64
+gdbm-devel.i386
+gdbm-devel.x86_64
+gdbm.i386
+gdbm.x86_64
+gdb.x86_64
+gd-devel.x86_64
+gd.i386
+gd.x86_64
+genisoimage.x86_64
+gettext-devel.x86_64
+gettext.x86_64
+ghostscript-fonts.noarch
+ghostscript.x86_64
+giflib.x86_64
+glib2-devel.x86_64
+glib2.i386
+glib2.x86_64
+glibc-common.x86_64
+glibc-devel.x86_64
+glibc-headers.x86_64
+glibc.i686
+glibc.x86_64
+glib.x86_64
+gmp-devel.x86_64
+gmp.i386
+gmp.x86_64
+gnome-keyring.x86_64
+gnome-mime-data.noarch
+gnome-mount.x86_64
+gnome-themes.noarch
+gnome-vfs2.x86_64
+gnupg.x86_64
+gnuplot.x86_64
+gnutls.i386
+gnutls.x86_64
+gpg-pubkey.(none)
+gpg-pubkey.(none)
+gpg-pubkey.(none)
+gpm.i386
+gpm.x86_64
+graphviz-devel.x86_64
+graphviz-graphs.x86_64
+graphviz-guile.x86_64
+graphviz-java.x86_64
+graphviz-ocaml.x86_64
+graphviz-perl.x86_64
+graphviz-python.x86_64
+graphviz-ruby.x86_64
+graphviz-sharp.x86_64
+graphviz-tcl.x86_64
+graphviz.x86_64
+grep.x86_64
+groff-perl.x86_64
+groff.x86_64
+grub.x86_64
+gsl.x86_64
+gsm.x86_64
+gtk2-devel.i386
+gtk2-devel.x86_64
+gtk2-engines.x86_64
+gtk2.i386
+gtk2.x86_64
+guile.x86_64
+gzip.x86_64
+hal-info.noarch
+hal-libs.i386
+hal-libs.x86_64
+hal.x86_64
+hardlink.x86_64
+hdparm.x86_64
+heartbeat.x86_64
+hesinfo.x86_64
+hesiod-devel.i386
+hesiod-devel.x86_64
+hesiod.i386
+hesiod.x86_64
+hicolor-icon-theme.noarch
+highlight.x86_64
+htmlview.noarch
+httpd-devel.i386
+httpd-devel.x86_64
+httpd-manual.x86_64
+httpdmods.x86_64
+httpd.x86_64
+hwdata.noarch
+ifd-egate.x86_64
+iftop.x86_64
+ImageMagick.x86_64
+imake.x86_64
+imlib2.x86_64
+info.x86_64
+initscripts.x86_64
+iproute.x86_64
+ipsec-tools.x86_64
+iptables-ipv6.x86_64
+iptables.x86_64
+iptraf.x86_64
+iptstate.x86_64
+iputils.x86_64
+ipvsadm.x86_64
+ipython.noarch
+irda-utils.x86_64
+irqbalance.x86_64
+isdn4k-utils.x86_64
+java-1.5.0-gcj-devel.x86_64
+java-1.5.0-gcj.x86_64
+java-1.6.0-sun-devel.x86_64
+java-1.6.0-sun-src.x86_64
+java-1.6.0-sun.x86_64
+java_cup.x86_64
+jhead.x86_64
+jpackage-utils.noarch
+jwhois.x86_64
+kakasi.x86_64
+kbd.x86_64
+kernel-devel.x86_64
+kernel-devel.x86_64
+kernel-headers.x86_64
+kernel-vanilla-devel.x86_64
+kernel-vanilla.x86_64
+kernel.x86_64
+kexec-tools.x86_64
+keyutils-libs-devel.i386
+keyutils-libs-devel.x86_64
+keyutils-libs.i386
+keyutils-libs.x86_64
+kmod-openafs.x86_64
+kmod-openafs.x86_64
+kpartx.x86_64
+krb5-devel.x86_64
+krb5-libs.i386
+krb5-libs.x86_64
+krb5-workstation.x86_64
+ksh.x86_64
+kudzu.x86_64
+lame.x86_64
+lcms.x86_64
+ldirectord.x86_64
+less.x86_64
+lftp.x86_64
+libacl.x86_64
+libaio.x86_64
+libart_lgpl.x86_64
+libattr.x86_64
+libavc1394.x86_64
+libbonoboui.x86_64
+libbonobo.x86_64
+libcap.i386
+libcap.x86_64
+libc-client2006.i386
+libc-client2006.x86_64
+libcdio.x86_64
+libcroco.x86_64
+libdaemon.x86_64
+libdhcp4client.x86_64
+libdhcp6client.x86_64
+libdhcp.x86_64
+libdrm.x86_64
+libdv.x86_64
+libevent.x86_64
+libexif.x86_64
+libfontenc.x86_64
+libFS.x86_64
+libgcc.i386
+libgcc.x86_64
+libgcj-devel.x86_64
+libgcj.i386
+libgcj-src.x86_64
+libgcj.x86_64
+libgcrypt-devel.x86_64
+libgcrypt.i386
+libgcrypt.x86_64
+libgdiplus.x86_64
+libgfortran.x86_64
+libglade2.x86_64
+libgnomecanvas.x86_64
+libgnomeui.x86_64
+libgnome.x86_64
+libgomp.x86_64
+libgpg-error-devel.x86_64
+libgpg-error.i386
+libgpg-error.x86_64
+libgsf.x86_64
+libgssapi.x86_64
+libICE.i386
+libICE.x86_64
+libicu.x86_64
+libid3tag.x86_64
+libIDL.x86_64
+libidn-devel.x86_64
+libidn.i386
+libidn.x86_64
+libjpeg-devel.i386
+libjpeg-devel.x86_64
+libjpeg.i386
+libjpeg.x86_64
+libmng.x86_64
+libmp4v2.x86_64
+libnetfilter_conntrack.x86_64
+libnfnetlink.x86_64
+libnl.x86_64
+libnotify.x86_64
+libogg-devel.x86_64
+libogg.i386
+libogg.x86_64
+libpcap.x86_64
+libpng-devel.x86_64
+libpng.i386
+libpng.x86_64
+libraw1394.x86_64
+librsvg2.x86_64
+libselinux-devel.i386
+libselinux-devel.x86_64
+libselinux.i386
+libselinux-python.x86_64
+libselinux.x86_64
+libsemanage.x86_64
+libsepol-devel.x86_64
+libsepol.i386
+libsepol.x86_64
+libsigsegv.x86_64
+libsmbios-libs.x86_64
+libSM.i386
+libSM.x86_64
+libstatgrab.x86_64
+libstdc++-devel.x86_64
+libstdc++.i386
+libstdc++.x86_64
+libsysfs.x86_64
+libtermcap-devel.x86_64
+libtermcap.i386
+libtermcap.x86_64
+libthai.i386
+libthai.x86_64
+libtheora-devel.i386
+libtheora-devel.x86_64
+libtheora.i386
+libtheora.x86_64
+libtiff.i386
+libtiff.x86_64
+libtirpc.x86_64
+libtool-ltdl.x86_64
+libtool.x86_64
+libusb.x86_64
+libuser.i386
+libuser.x86_64
+libutempter.i386
+libutempter.x86_64
+libvolume_id.x86_64
+libvorbis-devel.i386
+libvorbis-devel.x86_64
+libvorbis.i386
+libvorbis.x86_64
+libwmf.x86_64
+libwnck.x86_64
+libwvstreams.x86_64
+libX11-devel.x86_64
+libX11.i386
+libX11.x86_64
+libXau-devel.x86_64
+libXau.i386
+libXau.x86_64
+libXaw.x86_64
+libXcursor-devel.x86_64
+libXcursor.i386
+libXcursor.x86_64
+libXdmcp-devel.x86_64
+libXdmcp.i386
+libXdmcp.x86_64
+libXext-devel.x86_64
+libXext.i386
+libXext.x86_64
+libxfce4mcs.x86_64
+libxfce4util.x86_64
+libxfcegui4.x86_64
+libXfixes-devel.x86_64
+libXfixes.i386
+libXfixes.x86_64
+libXfontcache.x86_64
+libXfont.x86_64
+libXft-devel.x86_64
+libXft.i386
+libXft.x86_64
+libXi-devel.x86_64
+libXi.i386
+libXinerama-devel.x86_64
+libXinerama.i386
+libXinerama.x86_64
+libXi.x86_64
+libxkbfile.x86_64
+libxml2-devel.x86_64
+libxml2.i386
+libxml2-python.x86_64
+libxml2.x86_64
+libXmu.x86_64
+libXp.i386
+libXpm-devel.x86_64
+libXpm.i386
+libXpm.x86_64
+libXp.x86_64
+libXrandr-devel.x86_64
+libXrandr.i386
+libXrandr.x86_64
+libXrender-devel.x86_64
+libXrender.i386
+libXrender.x86_64
+libXres.x86_64
+libxslt-devel.x86_64
+libxslt.i386
+libxslt.x86_64
+libXt.i386
+libXTrap.x86_64
+libXtst.i386
+libXtst.x86_64
+libXt.x86_64
+libXxf86misc.x86_64
+libXxf86vm.x86_64
+lm_sensors-devel.x86_64
+lm_sensors.x86_64
+lockdev.x86_64
+logrotate.x86_64
+logview.x86_64
+logwatch.noarch
+lrzsz.x86_64
+lsof.x86_64
+ltrace.x86_64
+lvm2.x86_64
+lynx.x86_64
+lzo.x86_64
+m4.x86_64
+mailcap.noarch
+mailx.x86_64
+MAKEDEV.x86_64
+make.x86_64
+man-pages.noarch
+man.x86_64
+mcelog.x86_64
+mcstrans.x86_64
+mdadm.x86_64
+mesa-libGL-devel.x86_64
+mesa-libGLU.x86_64
+mesa-libGL.x86_64
+mgetty.x86_64
+microcode_ctl.x86_64
+mikmod.x86_64
+mingetty.x86_64
+minicom.x86_64
+mit-lprng.x86_64
+mit-zephyr.i386
+mkbootdisk.x86_64
+mkinitrd.x86_64
+mktemp.x86_64
+mlocate.x86_64
+mod_auth_kerb.x86_64
+mod_dav_svn.x86_64
+mod_fcgid.x86_64
+mod_perl.x86_64
+mod_python.x86_64
+mod_ssl.x86_64
+module-init-tools.x86_64
+mono-core.x86_64
+mono-data.x86_64
+mono-web.x86_64
+mono-winforms.x86_64
+mozldap-tools.x86_64
+mozldap.x86_64
+mtools.x86_64
+mtr.x86_64
+munin-node.noarch
+mutt.x86_64
+mx.x86_64
+mysqlclient10-devel.x86_64
+mysqlclient10.x86_64
+mysqlclient14-devel.x86_64
+mysqlclient14.x86_64
+mysql-devel.x86_64
+mysql-libs.i386
+mysql-libs.x86_64
+MySQL-python.x86_64
+mysql.x86_64
+nagios-plugins-disk.x86_64
+nagios-plugins-load.x86_64
+nagios-plugins-procs.x86_64
+nagios-plugins-users.x86_64
+nagios-plugins.x86_64
+nail.x86_64
+nano.x86_64
+nash.x86_64
+ncurses-devel.i386
+ncurses-devel.x86_64
+ncurses.i386
+ncurses.x86_64
+nc.x86_64
+neon-devel.x86_64
+neon.i386
+neon.x86_64
+netpbm-progs.x86_64
+netpbm.x86_64
+net-snmp-devel.x86_64
+net-snmp-libs.x86_64
+net-snmp-utils.x86_64
+net-snmp.x86_64
+net-tools.x86_64
+NetworkManager.x86_64
+newt.x86_64
+nfs-utils-lib.x86_64
+nfs-utils.x86_64
+nmap.x86_64
+notification-daemon.x86_64
+nrpe.x86_64
+nscd.x86_64
+nspr.i386
+nspr.x86_64
+nss_db.x86_64
+nss.i386
+nss_ldap.i386
+nss_ldap.x86_64
+nss-tools.x86_64
+nss.x86_64
+ntp.x86_64
+ntsysv.x86_64
+numactl.x86_64
+numpy.x86_64
+ocaml.x86_64
+openafs-client.x86_64
+openafs-devel.x86_64
+openafs-krb5.x86_64
+openafs.x86_64
+openjade.x86_64
+openldap-clients.x86_64
+openldap-devel.x86_64
+openldap.i386
+openldap.x86_64
+opensp.x86_64
+openssh-clients.x86_64
+openssh-server.x86_64
+openssh.x86_64
+openssl097a.x86_64
+openssl-devel.i386
+openssl-devel.x86_64
+openssl.i686
+openssl.x86_64
+ORBit2.x86_64
+pam_ccreds.i386
+pam_ccreds.x86_64
+pam-devel.i386
+pam-devel.x86_64
+pam.i386
+pam_krb5.i386
+pam_krb5.x86_64
+pam_passwdqc.i386
+pam_passwdqc.x86_64
+pam_pkcs11.i386
+pam_pkcs11.x86_64
+pam_smb.i386
+pam_smb.x86_64
+pam.x86_64
+pango-devel.x86_64
+pango.i386
+pango.x86_64
+paps-libs.x86_64
+paps.x86_64
+parted.i386
+parted.x86_64
+passivetex.noarch
+passwd.i386
+passwd.x86_64
+patch.i386
+patchutils.x86_64
+patch.x86_64
+pax.i386
+pax.x86_64
+pciutils.x86_64
+pcmciautils.x86_64
+pcre-devel.i386
+pcre-devel.x86_64
+pcre.i386
+pcre.x86_64
+pcsc-lite-libs.x86_64
+pcsc-lite.x86_64
+pdfjam.noarch
+perl-Algorithm-Dependency.noarch
+perl-Algorithm-Diff.noarch
+perl-Apache-LogRegex.noarch
+perl-Apache-Session.noarch
+perl-Apache-Session-Wrapper.noarch
+perl-AppConfig.noarch
+perl-Archive-Tar.noarch
+perl-Archive-Zip.noarch
+perl-Array-Compare.noarch
+perl-Authen-SASL.noarch
+perl-BerkeleyDB.x86_64
+perl-Bit-Vector.x86_64
+perl-BSD-Resource.x86_64
+perl-Business-Hours.noarch
+perl-Cache-Cache.noarch
+perl-Cache-Simple-TimedExpiry.noarch
+perl-capitalization.noarch
+perl-Carp-Assert-More.noarch
+perl-Carp-Assert.noarch
+perl-Carp-Clan.noarch
+perl-CGI-FastTemplate.noarch
+perl-CGI-FormBuilder.noarch
+perl-CGI-Simple.noarch
+perl-CGI-Untaint-date.noarch
+perl-CGI-Untaint.noarch
+perl-Class-Accessor-Chained.noarch
+perl-Class-Accessor.noarch
+perl-Class-Autouse.noarch
+perl-Class-Container.noarch
+perl-Class-Data-Inheritable.noarch
+perl-Class-DBI-AbstractSearch.noarch
+perl-Class-DBI-AsForm.noarch
+perl-Class-DBI-FromCGI.noarch
+perl-Class-DBI-Loader.noarch
+perl-Class-DBI-Loader-Relationship.noarch
+perl-Class-DBI-mysql.noarch
+perl-Class-DBI.noarch
+perl-Class-DBI-Pager.noarch
+perl-Class-DBI-Pg.noarch
+perl-Class-DBI-Plugin.noarch
+perl-Class-DBI-Plugin-RetrieveAll.noarch
+perl-Class-DBI-Plugin-Type.noarch
+perl-Class-DBI-SQLite.noarch
+perl-Class-ErrorHandler.noarch
+perl-Class-Inspector.noarch
+perl-Class-MethodMaker.x86_64
+perl-Class-ReturnValue.noarch
+perl-Class-Singleton.noarch
+perl-Class-Trigger.noarch
+perl-Class-Whitehole.noarch
+perl-clearsilver.x86_64
+perl-Clone.x86_64
+perl-Compress-Bzip2.x86_64
+perl-Compress-Zlib.x86_64
+perl-Config-General.noarch
+perl-Config-IniFiles.noarch
+perl-Config-Record.noarch
+perl-Config-Tiny.noarch
+perl-Convert-ASN1.noarch
+perl-Convert-BinHex.noarch
+perl-Convert-TNEF.noarch
+perl-Convert-UUlib.x86_64
+perl-CPAN.x86_64
+perl-Crypt-Blowfish.x86_64
+perl-Crypt-CBC.noarch
+perl-Crypt-DES.x86_64
+perl-Crypt-DH.noarch
+perl-Crypt-SSLeay.x86_64
+perl-Data-Buffer.noarch
+perl-Data-Page.noarch
+perl-Date-Calc.x86_64
+perl-DateManip.noarch
+perl-Date-Simple.x86_64
+perl-DateTime-Format-Mail.noarch
+perl-DateTime-Format-W3CDTF.noarch
+perl-DateTime.x86_64
+perl-DBD-MySQL.x86_64
+perl-DBD-Pg.x86_64
+perl-DBD-SQLite2.x86_64
+perl-DBD-SQLite.x86_64
+perl-DBI.x86_64
+perl-DBIx-ContextualFetch.noarch
+perl-DBIx-DBSchema.noarch
+perl-DBIx-SearchBuilder.noarch
+perl-Devel-Cycle.noarch
+perl-Devel-StackTrace.noarch
+perl-Devel-Symdump.noarch
+perl-devel.x86_64
+perl-Digest-BubbleBabble.noarch
+perl-Digest-HMAC.noarch
+perl-Digest-MD2.x86_64
+perl-Digest-MD4.x86_64
+perl-Digest-Nilsimsa.x86_64
+perl-Digest-SHA1.x86_64
+perl-Error.noarch
+perl-Exception-Class.noarch
+perl-Exporter-Lite.noarch
+perl-ExtUtils-AutoInstall.noarch
+perl-ExtUtils-CBuilder.noarch
+perl-ExtUtils-Depends.noarch
+perl-ExtUtils-Embed.x86_64
+perl-ExtUtils-MakeMaker.x86_64
+perl-ExtUtils-ParseXS.noarch
+perl-ExtUtils-PkgConfig.noarch
+perl-ExtUtils-XSBuilder.noarch
+perl-File-BOM.noarch
+perl-File-chmod.noarch
+perl-File-Find-Rule.noarch
+perl-File-Flat.noarch
+perl-FileHandle-Unget.noarch
+perl-File-HomeDir.noarch
+perl-File-MMagic.noarch
+perl-File-NCopy.noarch
+perl-File-Remove.noarch
+perl-File-Slurp.noarch
+perl-File-Tail.noarch
+perl-Font-AFM.noarch
+perl-FreezeThaw.noarch
+perl-Frontier-RPC.noarch
+perl-gettext.x86_64
+perl-Glib.x86_64
+perl-GnuPG-Interface.noarch
+perl-GSSAPI.x86_64
+perl-Hook-LexWrap.noarch
+perl-HTML-Format.noarch
+perl-HTML-Mason.noarch
+perl-HTML-Parser.x86_64
+perl-HTML-Scrubber.noarch
+perl-HTML-Tagset.noarch
+perl-HTML-Template-Expr.noarch
+perl-HTML-Template.noarch
+perl-HTML-Tree.noarch
+perl-HTTP-Server-Simple-Mason.noarch
+perl-HTTP-Server-Simple.noarch
+perl-Ima-DBI.noarch
+perl-Image-Base.noarch
+perl-Image-Xbm.noarch
+perl-Image-Xpm.noarch
+perl-Inline.noarch
+perl-IO-CaptureOutput.noarch
+perl-IO-Multiplex.noarch
+perl-IO-Socket-INET6.noarch
+perl-IO-Socket-SSL.noarch
+perl-IO-String.noarch
+perl-IO-stringy.noarch
+perl-IO-Tty.x86_64
+perl-IO-Zlib.noarch
+perl-IPC-Run.noarch
+perl-IPC-Shareable.noarch
+perl-IPC-SharedCache.noarch
+perl-IPC-ShareLite.x86_64
+perl-Jcode.noarch
+perl-LDAP.noarch
+perl-libintl.x86_64
+perl-libs.i386
+perl-libs.x86_64
+perl-libwww-perl.noarch
+perl-libxml-perl.noarch
+perl-Lingua-EN-Inflect.noarch
+perl-Lingua-EN-Inflect-Number.noarch
+perl-Locale-Maketext-Fuzzy.noarch
+perl-Locale-Maketext-Lexicon.noarch
+perl-Log-Dispatch.noarch
+perl-Mail-Alias.noarch
+perl-Mail-GnuPG.noarch
+perl-Mail-Mbox-MessageParser.noarch
+perl-Mail-Sender.noarch
+perl-Mail-Sendmail.noarch
+perl-Mail-SPF-Query.noarch
+perl-MailTools.noarch
+perl-MIME-Lite.noarch
+perl-MIME-tools.noarch
+perl-MIME-Types.noarch
+perl-MLDBM.noarch
+perl-Module-Build.noarch
+perl-Module-CoreList.noarch
+perl-Module-Install.noarch
+perl-Module-Refresh.noarch
+perl-Module-ScanDeps.noarch
+perl-Module-Signature.noarch
+perl-Module-Versions-Report.noarch
+perl-Mozilla-LDAP.x86_64
+perl-Net-CIDR-Lite.noarch
+perl-Net-DNS.x86_64
+perl-Net-IP-CMatch.x86_64
+perl-Net-IP.noarch
+perl-Net-Netmask.noarch
+perl-Net-Patricia.x86_64
+perl-Net-SCP.noarch
+perl-Net-Server.noarch
+perl-Net-SNMP.noarch
+perl-Net-SSH.noarch
+perl-Net-SSLeay.x86_64
+perl-Net-Telnet.noarch
+perl-NKF.x86_64
+perl-Number-Compare.noarch
+perl-OLE-Storage_Lite.noarch
+perl-PadWalker.x86_64
+perl-Params-Util.noarch
+perl-Params-Validate.x86_64
+perl-PAR-Dist.noarch
+perl-Parse-RecDescent.noarch
+perl-Parse-Yapp.noarch
+perl-PatchReader.noarch
+perl-PDL.x86_64
+perl-pmtools.noarch
+perl-Pod-Coverage.noarch
+perl-Pod-Escapes.noarch
+perl-Pod-POM.noarch
+perl-Pod-Readme.noarch
+perl-Pod-Simple.noarch
+perl-Pod-Tests.noarch
+perl-prefork.noarch
+perl-Razor-Agent.x86_64
+perl-Readonly.noarch
+perl-Readonly-XS.x86_64
+perl-Regexp-Common.noarch
+perl-RPM-Specfile.noarch
+perl-Set-IntSpan.noarch
+perl-SGMLSpm.noarch
+perl-SNMP_Session.noarch
+perl-SOAP-Lite.noarch
+perl-Socket6.x86_64
+perl-Sort-Versions.noarch
+perl-Spiffy.noarch
+perl-Spreadsheet-WriteExcel.noarch
+perl-SQL-Abstract-Limit.noarch
+perl-SQL-Abstract.noarch
+perl-SQL-Statement.noarch
+perl-String-CRC32.x86_64
+perl-String-Ediff.x86_64
+perl-String-ShellQuote.noarch
+perl-Sub-Uplevel.noarch
+perl-suidperl.x86_64
+perl-Template-Toolkit.x86_64
+perl-TermReadKey.x86_64
+perl-Test-Base.noarch
+perl-Test-ClassAPI.noarch
+perl-Test-Exception.noarch
+perl-Test-Harness.x86_64
+perl-Test-Inline.noarch
+perl-Test-LongString.noarch
+perl-Test-Manifest.noarch
+perl-Test-Memory-Cycle.noarch
+perl-Test-MockModule.noarch
+perl-Test-MockObject.noarch
+perl-Test-Pod-Coverage.noarch
+perl-Test-Pod.noarch
+perl-Test-Portability-Files.noarch
+perl-Test-Simple.x86_64
+perl-Test-Taint.x86_64
+perl-Test-Warn.noarch
+perl-Test-WWW-Mechanize.noarch
+perl-TeX-Hyphen.noarch
+perl-Text-Autoformat.noarch
+perl-Text-CSV_XS.x86_64
+perl-Text-Diff.noarch
+perl-Text-Glob.noarch
+perl-Text-Iconv.x86_64
+perl-Text-Kakasi.x86_64
+perl-Text-Quoted.noarch
+perl-Text-Reform.noarch
+perl-Text-Template.noarch
+perl-Text-WikiFormat.noarch
+perl-Text-Wrapper.noarch
+perl-Tie-DBI.noarch
+perl-Tie-IxHash.noarch
+perl-TimeDate.noarch
+perl-Time-modules.noarch
+perl-Time-Piece-MySQL.noarch
+perl-Time-Piece.x86_64
+perl-Tree-DAG_Node.noarch
+perl-Tree-Simple.noarch
+perl-udunits.x86_64
+perl-Unicode-Map8.x86_64
+perl-Unicode-MapUTF8.noarch
+perl-Unicode-Map.x86_64
+perl-Unicode-String.x86_64
+perl-UNIVERSAL-can.noarch
+perl-UNIVERSAL-exports.noarch
+perl-UNIVERSAL-isa.noarch
+perl-UNIVERSAL-moniker.noarch
+perl-UNIVERSAL-require.noarch
+perl-Unix-Statgrab.x86_64
+perl-Unix-Syslog.x86_64
+perl-URI.noarch
+perl-version.x86_64
+perl-Want.x86_64
+perl-WWW-Mechanize.noarch
+perl-X11-Protocol.noarch
+perl.x86_64
+perl-XML-DOM.noarch
+perl-XML-Dumper.noarch
+perl-XML-Grove.noarch
+perl-XML-LibXML-Common.x86_64
+perl-XML-LibXML.x86_64
+perl-XML-LibXSLT.x86_64
+perl-XML-NamespaceSupport.noarch
+perl-XML-Parser.x86_64
+perl-XML-RegExp.noarch
+perl-XML-RSS.noarch
+perl-XML-SAX.noarch
+perl-XML-SAX.noarch
+perl-XML-Simple.noarch
+perl-XML-Twig.noarch
+perl-XML-XPath.noarch
+perl-YAML.noarch
+php-adodb.noarch
+php-bcmath.x86_64
+php-cli.x86_64
+php-common.x86_64
+php-dba.x86_64
+php-devel.x86_64
+php-gd.x86_64
+php-imap.x86_64
+php-ldap.x86_64
+php-mbstring.x86_64
+php-mysql.x86_64
+php-ncurses.x86_64
+php-odbc.x86_64
+php-pdo.x86_64
+php-pear-Auth-SASL.noarch
+php-pear-Image-GraphViz.noarch
+php-pear-Net-SMTP.noarch
+php-pear-Net-Socket.noarch
+php-pear.noarch
+php-pecl-Fileinfo.x86_64
+php-pecl-mailparse.x86_64
+php-pgsql.x86_64
+php-Smarty.noarch
+php-snmp.x86_64
+php-soap.x86_64
+php.x86_64
+php-xmlrpc.x86_64
+php-xml.x86_64
+pils.x86_64
+pinfo.x86_64
+pkgconfig.x86_64
+plt-scheme.x86_64
+pm-utils.x86_64
+pnm2ppa.x86_64
+policycoreutils-newrole.x86_64
+policycoreutils.x86_64
+poppler-utils.x86_64
+poppler.x86_64
+popt.i386
+popt.x86_64
+postfix.x86_64
+postgresql-devel.x86_64
+postgresql-libs.i386
+postgresql-libs.x86_64
+postgresql-python.x86_64
+postgresql.x86_64
+ppp.x86_64
+prelink.x86_64
+procmail.x86_64
+procps.x86_64
+proj.x86_64
+psacct.x86_64
+psmisc.x86_64
+psutils.x86_64
+pycairo.x86_64
+pygobject2.x86_64
+pygtk2.x86_64
+pyOpenSSL.x86_64
+python-4Suite-XML.x86_64
+python-adns.x86_64
+python-amara.noarch
+python-basemap-data.noarch
+python-basemap.x86_64
+python-bibtex.x86_64
+python-cheetah.x86_64
+python-cherrypy.noarch
+python-cherrytemplate.noarch
+python-clearsilver.x86_64
+python-clientform.noarch
+python-configobj.noarch
+python-crypto.x86_64
+python-dateutil.noarch
+python-decoratortools.noarch
+python-devel.i386
+python-devel.x86_64
+python-dialog.noarch
+python-dns.noarch
+python-docs.noarch
+python-durus.x86_64
+python-exo.x86_64
+python-feedparser.noarch
+python-formencode.noarch
+python-fpconst.noarch
+python-goopy.noarch
+python-HTMLgen.noarch
+python-imaging.x86_64
+python-inotify.x86_64
+python-irclib.noarch
+python-json.noarch
+python-kid.noarch
+python-krbV.x86_64
+python-lcms.x86_64
+python-ldap.x86_64
+python-libs.i386
+python-libs.x86_64
+python-logilab-astng.noarch
+python-logilab-common.noarch
+python-lxml.x86_64
+python-matplotlib.x86_64
+python-mechanize.noarch
+python-myghty.noarch
+python-nose.noarch
+python-numarray.x86_64
+python-numeric.x86_64
+python-paste-deploy.noarch
+python-paste.noarch
+python-paste-script.noarch
+python-pgsql.x86_64
+python-protocols.x86_64
+python-psycopg2.x86_64
+python-psycopg.x86_64
+python-pycurl.x86_64
+python-pydns.noarch
+python-pyspf.noarch
+python-quixote.x86_64
+python-ruledispatch.x86_64
+python-setuptools.noarch
+python-simplejson.x86_64
+python-simpy-doc.noarch
+python-sqlalchemy.noarch
+python-sqlite2.x86_64
+python-sqlobject.noarch
+python-tag.x86_64
+python-TestGears.noarch
+python-tgfastdata.noarch
+python-turbocheetah.noarch
+python-turbojson.noarch
+python-turbokid.noarch
+python-twisted-conch.x86_64
+python-twisted-core-doc.x86_64
+python-twisted-core.x86_64
+python-twisted-lore.x86_64
+python-twisted-mail.x86_64
+python-twisted-names.x86_64
+python-twisted-news.x86_64
+python-twisted.noarch
+python-twisted-runner.x86_64
+python-twisted-web.x86_64
+python-twisted-words.x86_64
+python-urlgrabber.noarch
+python-urljr.noarch
+python.x86_64
+python-xmpp.noarch
+python-yadis.noarch
+python-zope-interface.x86_64
+pytz.noarch
+pyxf86config.x86_64
+PyXML.x86_64
+quota.x86_64
+radeontool.x86_64
+raptor-devel.i386
+raptor-devel.x86_64
+raptor.i386
+raptor.x86_64
+rasqal-devel.x86_64
+rasqal.i386
+rasqal.x86_64
+rcs.x86_64
+rdate.x86_64
+rdist.x86_64
+readahead.x86_64
+readline-devel.i386
+readline-devel.x86_64
+readline.i386
+readline.x86_64
+recode.x86_64
+redhat-artwork.x86_64
+redhat-lsb.x86_64
+redhat-menus.noarch
+redhat-rpm-config.noarch
+redland-devel.i386
+redland-devel.x86_64
+redland.i386
+redland.x86_64
+rhpl.x86_64
+rmt.x86_64
+rng-utils.x86_64
+rootfiles.noarch
+rpcbind.x86_64
+rpm-build.x86_64
+rpm-devel.x86_64
+rpmdevtools.noarch
+rpm-libs.x86_64
+rpm-python.x86_64
+rpm.x86_64
+rp-pppoe.x86_64
+rrdtool-php.x86_64
+rrdtool-python.x86_64
+rrdtool.x86_64
+rsh.x86_64
+rsync.x86_64
+ruby-devel.x86_64
+ruby-docs.x86_64
+rubygems.noarch
+ruby-irb.x86_64
+ruby-libs.x86_64
+ruby-mode.x86_64
+ruby-mysql.x86_64
+ruby-rdoc.x86_64
+ruby-sqlite3.x86_64
+ruby.x86_64
+samba-common.x86_64
+samba.x86_64
+screen.x86_64
+SDL.x86_64
+sed.x86_64
+selinux-doc.noarch
+selinux-policy-devel.noarch
+selinux-policy.noarch
+selinux-policy-strict.noarch
+selinux-policy-targeted.noarch
+setarch.x86_64
+setools-console.x86_64
+setools-gui.x86_64
+setools-libs.x86_64
+setools.x86_64
+setserial.x86_64
+setup.noarch
+setuptool.x86_64
+sgml-common.noarch
+shadow-utils.x86_64
+shapelib.x86_64
+shared-mime-info.x86_64
+sinjdoc.x86_64
+slang.x86_64
+slrn.x86_64
+smartmontools.x86_64
+SOAPpy.noarch
+socat.x86_64
+spamassassin.x86_64
+specspo.noarch
+sqlite2-devel.x86_64
+sqlite2.x86_64
+sqlite-devel.x86_64
+sqlite.i386
+sqlite.x86_64
+sql-signup.x86_64
+startup-notification.x86_64
+statserial.x86_64
+stonith.x86_64
+strace.x86_64
+stunnel.x86_64
+subversion.i386
+subversion.x86_64
+sudo.x86_64
+svrcore.x86_64
+swig.x86_64
+symlinks.x86_64
+sysklogd.x86_64
+syslinux.x86_64
+sysreport.noarch
+sysstat.x86_64
+system-config-network-tui.noarch
+system-config-securitylevel-tui.x86_64
+sysvinit.x86_64
+taglib.x86_64
+talk.x86_64
+tar.x86_64
+tcl-devel.i386
+tcl-devel.x86_64
+tcl.i386
+tcl.x86_64
+tcpdump.x86_64
+tcp_wrappers-devel.i386
+tcp_wrappers-devel.x86_64
+tcp_wrappers-libs.i386
+tcp_wrappers-libs.x86_64
+tcp_wrappers.x86_64
+tcsh.x86_64
+telnet.x86_64
+termcap.noarch
+tetex-dvips.x86_64
+tetex-fonts.x86_64
+tetex-latex.x86_64
+tetex-unicode.noarch
+tetex.x86_64
+texinfo-tex.x86_64
+texinfo.x86_64
+time.x86_64
+tix-devel.i386
+tix-devel.x86_64
+tix.i386
+tix.x86_64
+tk-devel.i386
+tk-devel.x86_64
+tk.i386
+tk.x86_64
+tmpwatch.x86_64
+tokensys.x86_64
+traceroute.x86_64
+trac.noarch
+tree.x86_64
+ttmkfdir.x86_64
+TurboGears.noarch
+tzdata.noarch
+udev.x86_64
+udunits.x86_64
+units.x86_64
+unix2dos.x86_64
+unixODBC-devel.x86_64
+unixODBC.x86_64
+unzip.x86_64
+urlview.x86_64
+urw-fonts.noarch
+usbutils.x86_64
+usermode.x86_64
+util-linux.x86_64
+uw-imap-devel.i386
+uw-imap-devel.x86_64
+vbetool.x86_64
+vconfig.x86_64
+vim-common.x86_64
+vim-enhanced.x86_64
+vim-minimal.x86_64
+vixie-cron.x86_64
+w3m.x86_64
+wget.x86_64
+which.x86_64
+wireless-tools.i386
+wireless-tools.x86_64
+words.noarch
+wpa_supplicant.x86_64
+wvdial.x86_64
+x264.x86_64
+Xaw3d.x86_64
+xinetd.x86_64
+xml-common.noarch
+xmltex.noarch
+xmlto.x86_64
+xorg-x11-apps.x86_64
+xorg-x11-filesystem.noarch
+xorg-x11-fonts-ISO8859-1-100dpi.noarch
+xorg-x11-fonts-ISO8859-1-75dpi.noarch
+xorg-x11-font-utils.x86_64
+xorg-x11-proto-devel.x86_64
+xorg-x11-server-utils.x86_64
+xorg-x11-xauth.x86_64
+xorg-x11-xfs.x86_64
+xvidcore.x86_64
+ypbind.x86_64
+yp-tools.x86_64
+yum-fastestmirror.noarch
+yum-fedorakmod.noarch
+yum-metadata-parser.x86_64
+yum.noarch
+yum-updatesd.noarch
+yum-utils.noarch
+zip.x86_64
+zlib-devel.i386
+zlib-devel.x86_64
+zlib.i386
+zlib.x86_64
+zziplib.x86_64
Index: /tags/fc9-eol/server/fedora/Makefile
===================================================================
--- /tags/fc9-eol/server/fedora/Makefile	(revision 1257)
+++ /tags/fc9-eol/server/fedora/Makefile	(revision 1257)
@@ -0,0 +1,198 @@
+# Makefile for building scripts.mit.edu Fedora packages
+# Copyright (C) 2006  Jeff Arnold <jbarnold@mit.edu>
+#                and  Joe Presbrey <presbrey@mit.edu>
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
+#
+# See /COPYRIGHT in this repository for more information.
+
+upstream_yum	= krb5 httpd openssh pysvn php
+upstream	= openafs $(upstream_yum)
+oursrc		= execsys tokensys accountadm httpdmods logview sql-signup nss_nonlocal nss_nonlocal.i386 whoisd mit-zephyr nss-ldapd nss-ldapd.i386 athrun php_scripts scripts-base
+allsrc		= $(upstream) $(oursrc)
+oursrcdir	= ${PWD}/../common/oursrc
+patches		= ${PWD}/../common/patches
+specs		= ${PWD}/specs
+
+topdir		= ${HOME}/rpmbuild
+tmp_build	= $(topdir)/BUILD
+tmp_specs	= $(topdir)/SPECS
+tmp_src		= $(topdir)/SOURCES
+out_rpms	= $(topdir)/RPMS
+out_srpms	= $(topdir)/SRPMS
+out_sbin	= $(topdir)/sbin
+
+dload		= ${PWD}/.dload
+server_url	= "http://web.mit.edu/scripts/src"
+server_arch	= "fedora.stable"
+openafs_url	= "http://dl.openafs.org/dl/openafs/1.4.10/openafs-1.4.10-1.1.1.src.rpm"
+nss_ldapd_url	= "http://download.opensuse.org/repositories/network:/ldap/openSUSE_Factory/src/nss-ldapd-0.6.8-2.1.src.rpm"
+
+.PHONY: minimal-clean
+
+info:
+	@echo "The following packages are available:"; \
+	echo "$(allsrc)"; \
+	echo "Run 'make all' to build all packages."
+
+minimal-clean:
+	rm -rf $(topdir) $(dload)
+
+clean: minimal-clean
+	rm -rf $(out_rpms) $(out_srpms) $(out_sbin)
+
+mkdir-tree:
+	@rpmdev-setuptree
+	mkdir -p $(out_sbin)
+	ln -sTf $(topdir) rpmbuild
+
+download: download_stamp
+download_stamp: | SRPMS/mit-zephyr-2.1-6.src.rpm
+	@mkdir -p $(dload); \
+	#wget -qO- -nv $(server_url)/$(server_arch) | xargs make
+	cd $(dload) && yumdownloader --source $(upstream_yum)
+	wget -P $(dload) $(nss_ldapd_url)
+	wget -P $(dload) $(openafs_url)
+	touch download_stamp
+
+%.src.rpm:
+	wget -q -nv -N -B $(server_url) -nd -nH -P $(dload) $(server_url)/$*.src.rpm
+
+copy-patches: mkdir-tree
+	@cp $(patches)/*.patch $(tmp_src); \
+	cd $(tmp_src);
+
+install-srpms: mkdir-tree download
+	rpm $(rpm_args) -i $(dload)/*.src.rpm 2>/dev/null;
+
+copy-specs: mkdir-tree
+	cp ${specs}/*.spec $(tmp_specs)
+
+patch-specs: install-srpms
+	@cd ${tmp_specs}; \
+	list=`ls ${specs}/*.spec.patch`; \
+	for i in $$list; do \
+		patch < $$i; \
+	done; \
+	list2=`svn ls ${oursrcdir}`; \
+	for i in $$list2; do \
+		base=`basename $$i`; \
+		version=`svnversion ${oursrcdir}/$$i`; \
+		version=$${version//:/_}; \
+		echo "$$i version $$version"; \
+		sed --in-place \
+			-e "s/SVNVERSION_TO_UPDATE/$${version}/" \
+		${tmp_specs}/$$base.spec; \
+	done;
+
+# 1. use the package's Makefile to delete leftover files and run autoconf
+# 2. create a tarball (we want it to contain the autoconf output)
+tarballs: mkdir-tree
+	@cd ${oursrcdir}; \
+	list=`find -mindepth 1 -maxdepth 1 -type d | grep -v ".svn"`; \
+	for i in $$list; do \
+		pushd $$i; \
+		if [ -x ./mrproper ]; then \
+			./mrproper; \
+			autoconf; \
+		fi; \
+		popd; \
+		tar -czf $(tmp_src)/$$i.tar.gz $$i; \
+	done;
+
+#setup: install-srpms copy-patches copy-specs patch-specs tarballs
+setup: copy-patches copy-specs patch-specs tarballs
+
+oursrc:
+	make $(oursrc)
+
+upstream: mkdir-tree download
+	make $(upstream)
+
+all:
+	make $(allsrc)
+
+$(oursrc): rpmbuild_args += --define 'scriptsversion $(shell svnversion ${oursrcdir}/$** | tr ':' '_')'
+
+$(filter %.i386,$(oursrc)): %.i386: setup
+	PATH="/usr/kerberos/sbin:/usr/kerberos/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin" \
+	setarch i386 rpmbuild $(rpmbuild_args) --target=i386 --define="_lib lib" -bb ${tmp_specs}/$**.spec
+
+$(filter-out %.i386,$(oursrc)): %: setup
+	PATH="/usr/kerberos/sbin:/usr/kerberos/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin" \
+	rpmbuild $(rpmbuild_args) -bb ${tmp_specs}/$**.spec
+
+$(upstream) openafs-kernel: rpmbuild_args += --define 'scriptsversion $(shell svnversion ${patches} | tr ':' '_')'
+
+$(upstream): setup patch-specs
+	rpmbuild $(rpmbuild_args) -ba ${tmp_specs}/$@.spec
+
+openafs-kernel: setup
+	PATH="/usr/kerberos/sbin:/usr/kerberos/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin" \
+	rpmbuild $(rpmbuild_args) -bb ${tmp_specs}/openafs*.spec
+
+#sort -n sorts "2.6.25-1" later than "2.6.25.1-1", so it's Wrong
+#kernvers = $(shell rpm -q --qf "%{Version}-%{Release}\n" --whatprovides kernel | sort -n | tail -n1)
+kernvers = $(shell uname -r | sed "s/\(.*\)[.].*/\1/")
+kvariants = ''
+openafs_rpmbuild_args = --define "fedorakmod 1" --define "kvariants $(kvariants)" --define "kernvers $(kernvers)" --nodeps
+openafs: rpmbuild_args += $(openafs_rpmbuild_args)
+openafs-kernel: rpmbuild_args += $(openafs_rpmbuild_args) --define "build_userspace 0" --define "build_modules 1"
+
+suexec: #install-srpms
+	@rm -rf ${tmp_src}/httpd-2*/; \
+	tar zxvf ${tmp_src}/httpd-2*.tar.gz; \
+	cd httpd-2*; \
+	patch -p1 < ${patches}/httpd-suexec-scripts.patch; \
+	autoreconf; \
+	./configure --prefix=/etc/httpd --with-suexec-userdir=web_scripts --with-suexec-caller=apache --with-suexec-uidmin=50 --with-suexec-gidmin=50 --with-suexec-docroot=/ --with-suexec-trusteddir=/usr/libexec/scripts-trusted; \
+	pushd support; \
+	mkdir -p ${out_sbin}; make suexec && cp suexec ${out_sbin}; \
+	popd; \
+	rm -rf httpd-2*; \
+	echo; \
+	echo "suexec binary written to ${out_sbin}."; \
+	echo "Run 'make install-suexec' as root to install it.";
+
+install-suexec:
+	install -m 4510 -o 0 -g apache ${out_sbin}/suexec /usr/sbin/;
+
+frob-openafs:
+	@if [ ! -d "/etc/openafs/" ]; then \
+	echo "/etc/openafs does not exist"; \
+	exit 1; \
+	else \
+	ln -nfs /etc/openafs/* /usr/vice/etc/; \
+	fi
+
+# The following packages are needed for our packages
+basic-deps	= kernel-devel rpm-build rpmdevtools gcc autoconf patch krb5-workstation glibc-devel.i386 glibc-devel libtool libgcc.i386
+oursrc-deps	= hesinfo openldap-clients php-devel
+httpdmods-deps	= httpd-devel
+httpd-deps	= xmlto db4-devel expat-devel zlib-devel libselinux-devel apr-devel apr-util-devel pcre-devel openssl-devel distcache-devel
+krb5-deps	= bison ncurses-devel texinfo keyutils-libs-devel texinfo-tex
+openafs-deps	= pam-devel automake
+mit-zephyr-deps	= readline-devel hesiod-devel hesiod-devel.i386 hesiod.i386 libXt.i386 #compat-readline43
+openssh-deps	= gtk2-devel libX11-devel autoconf automake openssl-devel perl zlib-devel audit-libs-devel util-linux groff man pam-devel tcp_wrappers-devel krb5-devel libselinux-devel audit-libs xauth gobject-devel pango-devel cairo-devel libedit-devel nss-devel
+install-deps:
+	yum -y install $(basic-deps) $(oursrc-deps) $(httpdmods-deps) $(httpd-deps) $(krb5-deps) $(openafs-deps) $(mit-zephyr-deps) $(openssh-deps)
+	rpm -ivh ftp://ftp.muug.mb.ca/mirror/fedora/linux/core/6/i386/os/Fedora/RPMS/compat-readline43-4.3-3.i386.rpm
+#	rpm -ivh http://download.fedora.redhat.com/pub/fedora/linux/core/6/i386/os/Fedora/RPMS/compat-readline43-4.3-3.i386.rpm
+
+fedora:
+	make install-deps
+	make upstream
+	rpm -ivh $(out_rpms)/`uname -m`/openafs-devel*.rpm
+	make oursrc
Index: /tags/fc9-eol/server/fedora/config/etc/aliases
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/aliases	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/aliases	(revision 1257)
@@ -0,0 +1,107 @@
+#
+#  Aliases in this file will NOT be expanded in the header from
+#  Mail, but WILL be visible over networks or from /bin/mail.
+#
+#	>>>>>>>>>>	The program "newaliases" must be run after
+#	>> NOTE >>	this file is updated for any changes to
+#	>>>>>>>>>>	show through to sendmail.
+#
+
+# Basic system aliases -- these MUST be present.
+mailer-daemon:	postmaster
+postmaster:	root
+
+# General redirections for pseudo accounts.
+bin:		root
+daemon:		root
+adm:		root
+lp:		root
+sync:		root
+shutdown:	root
+halt:		root
+mail:		root
+news:		root
+uucp:		root
+operator:	root
+games:		root
+gopher:		root
+ftp:		root
+nobody:		root
+radiusd:	root
+nut:		root
+dbus:		root
+vcsa:		root
+canna:		root
+wnn:		root
+rpm:		root
+nscd:		root
+pcap:		root
+apache:		root
+webalizer:	root
+dovecot:	root
+fax:		root
+quagga:		root
+radvd:		root
+pvm:		root
+amanda:		root
+privoxy:	root
+ident:		root
+named:		root
+xfs:		root
+gdm:		root
+mailnull:	root
+postgres:	root
+sshd:		root
+smmsp:		root
+postfix:	root
+netdump:	root
+ldap:		root
+squid:		root
+ntp:		root
+mysql:		root
+desktop:	root
+rpcuser:	root
+rpc:		root
+nfsnobody:	root
+
+ingres:		root
+system:		root
+toor:		root
+manager:	root
+dumper:		root
+abuse:		root
+
+newsadm:	news
+newsadmin:	news
+usenet:		news
+ftpadm:		ftp
+ftpadmin:	ftp
+ftp-adm:	ftp
+ftp-admin:	ftp
+www:		webmaster
+webmaster:	root
+noc:		root
+security:	root
+hostmaster:	root
+info:		postmaster
+marketing:	postmaster
+sales:		postmaster
+support:	postmaster
+
+
+# trap decode to catch security attacks
+decode:		root
+
+# Person who should get root's mail
+root:		rootjoe@gmail.com, andersk@mit.edu, quentin@mit.edu, geofft+root@mit.edu, mitchb@mit.edu
+
+scripts:	root
+signup:		root
+afsagent:	root
+logview:	root
+scripts-build:	root
+
+# People who are abusing the mail system
+aston:          /dev/null
+golem:		/dev/null
+reuter:		/dev/null
Index: /tags/fc9-eol/server/fedora/config/etc/auto.master
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/auto.master	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/auto.master	(revision 1257)
@@ -0,0 +1,1 @@
+/mit hesiod:hesiod
Index: /tags/fc9-eol/server/fedora/config/etc/cron.d/scripts-cron_status
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/cron.d/scripts-cron_status	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/cron.d/scripts-cron_status	(revision 1257)
@@ -0,0 +1,1 @@
+* * * * * scripts touch /afs/athena.mit.edu/contrib/scripts/cron_scripts/cron_status_flag/$(hostname -f) > /dev/null 2>&1
Index: /tags/fc9-eol/server/fedora/config/etc/cron.d/whoisd
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/cron.d/whoisd	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/cron.d/whoisd	(revision 1257)
@@ -0,0 +1,1 @@
+@reboot root /usr/bin/twistd -l /var/log/scripts-whoisd.log --pidfile /var/run/whoisd.pid -y /usr/local/libexec/whoisd.tac
Index: /tags/fc9-eol/server/fedora/config/etc/dirsrv/slapd-scripts/schema/98scripts-vhost.ldif
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/dirsrv/slapd-scripts/schema/98scripts-vhost.ldif	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/dirsrv/slapd-scripts/schema/98scripts-vhost.ldif	(revision 1257)
@@ -0,0 +1,26 @@
+#
+# BEGIN COPYRIGHT BLOCK
+# This Program is free software; you can redistribute it and/or modify it under
+# the terms of the GNU General Public License as published by the Free Software
+# Foundation; version 2 of the License.
+# 
+# This Program is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License along with
+# this Program; if not, write to the Free Software Foundation, Inc., 59 Temple
+# Place, Suite 330, Boston, MA 02111-1307 USA.
+# 
+# Copyright (C) 2008 Geoffrey Thomas
+# END COPYRIGHT BLOCK
+#
+#
+# Schema for representing a version control repository location
+#
+dn: cn=schema
+attributeTypes: ( 1.2.840.113554.4.2.1.1 NAME 'scriptsVhostName' DESC 'Canonical server name' SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE X-ORIGIN 'scripts.mit.edu' )
+attributeTypes: ( 1.2.840.113554.4.2.1.2 NAME 'scriptsVhostAlias' DESC 'Other server names' SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 X-ORIGIN 'scripts.mit.edu' )
+attributeTypes: ( 1.2.840.113554.4.2.1.3 NAME 'scriptsVhostDirectory' DESC 'Directory under $HOME/Scripts/$service for the root of this service' SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE X-ORIGIN 'scripts.mit.edu' )
+attributeTypes: ( 1.2.840.113554.4.2.1.4 NAME 'scriptsVhostAccount' DESC 'User account for finding home direcory and suexec uid/gid' SYNTAX 1.3.6.1.4.1.1466.115.121.1.12 SINGLE-VALUE X-ORIGIN 'scripts.mit.edu' )
+objectClasses: ( 1.2.840.113554.4.2.2.1 NAME 'scriptsVhost' DESC 'Configuration for a scripts virtual host' SUP top AUXILIARY MUST ( scriptsVhostName $ scriptsVhostDirectory $ scriptsVhostAccount ) MAY ( scriptsVhostAlias ) X-ORIGIN 'scripts.mit.edu' )
Index: /tags/fc9-eol/server/fedora/config/etc/dirsrv/slapd-scripts/schema/99mod_vhost_ldap.ldif
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/dirsrv/slapd-scripts/schema/99mod_vhost_ldap.ldif	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/dirsrv/slapd-scripts/schema/99mod_vhost_ldap.ldif	(revision 1257)
@@ -0,0 +1,107 @@
+#
+################################################################################
+#
+dn: cn=schema
+#
+################################################################################
+#
+attributeTypes: (
+  1.3.6.1.4.1.8387.1.1.2
+  NAME 'apacheServerName'
+  DESC 'mod_vhost_ldap: Apache ServerName'
+  SUP name
+  EQUALITY caseIgnoreMatch
+  SUBSTR caseIgnoreSubstringsMatch
+  SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{256}
+  SINGLE-VALUE
+  )
+#
+################################################################################
+#
+attributeTypes: (
+  1.3.6.1.4.1.8387.1.1.3
+  NAME 'apacheServerAlias'
+  DESC 'mod_vhost_ldap: Apache ServerAlias'
+  SUP name
+  EQUALITY caseIgnoreMatch
+  SUBSTR caseIgnoreSubstringsMatch
+  SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{256}
+  )
+#
+################################################################################
+#
+attributeTypes: (
+  1.3.6.1.4.1.8387.1.1.4
+  NAME 'apacheDocumentRoot'
+  DESC 'mod_vhost_ldap: Apache DocumentRoot'
+  SUP name
+  EQUALITY caseIgnoreMatch
+  SUBSTR caseIgnoreSubstringsMatch
+  SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{256}
+  SINGLE-VALUE
+  )
+#
+################################################################################
+#
+attributeTypes: (
+  1.3.6.1.4.1.8387.1.1.5
+  NAME 'apacheServerAdmin'
+  DESC 'mod_vhost_ldap: Apache ServerAdmin'
+  SUP name
+  EQUALITY caseIgnoreMatch
+  SUBSTR caseIgnoreSubstringsMatch
+  SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{256}
+  SINGLE-VALUE
+  )
+#
+################################################################################
+#
+attributeTypes: (
+  1.3.6.1.4.1.14287.1.1.6
+  NAME 'apacheScriptAlias'
+  DESC 'mod_cfg_ldap: Apache ScriptAlias'
+  SUP name
+  EQUALITY caseIgnoreMatch
+  SUBSTR caseIgnoreSubstringsMatch
+  SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{256}
+  SINGLE-VALUE
+  )
+#
+################################################################################
+#
+attributeTypes: (
+  1.3.6.1.4.1.8387.1.1.7
+  NAME 'apacheSuexecUid'
+  DESC 'mod_vhost_ldap: Apache SuexecUid'
+  SUP name
+  EQUALITY caseIgnoreMatch
+  SUBSTR caseIgnoreSubstringsMatch
+  SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{256}
+  SINGLE-VALUE
+  )
+#
+################################################################################
+#
+attributeTypes: (
+  1.3.6.1.4.1.8387.1.1.8
+  NAME 'apacheSuexecGid'
+  DESC 'mod_vhost_ldap: Apache SuexecGid'
+  SUP name
+  EQUALITY caseIgnoreMatch
+  SUBSTR caseIgnoreSubstringsMatch
+  SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{256}
+  SINGLE-VALUE
+  )
+#
+################################################################################
+#
+objectClasses: (
+  1.3.6.1.4.1.8387.1.2.1
+  NAME 'apacheConfig'
+  SUP 'top'
+  MUST ( apacheServerName $ apacheDocumentRoot )
+  MAY ( apacheServerAlias $ apacheServerAdmin $ apacheScriptAlias $ apacheSuexecUid $ apacheSuexecGid )
+  )
+#
+################################################################################
+#
Index: /tags/fc9-eol/server/fedora/config/etc/environment
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/environment	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/environment	(revision 1257)
@@ -0,0 +1,1 @@
+JAVA_TOOL_OPTIONS=-Xmx128M
Index: /tags/fc9-eol/server/fedora/config/etc/environment.cron
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/environment.cron	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/environment.cron	(revision 1257)
@@ -0,0 +1,1 @@
+SELINUX_ROLE_TYPE="user_u:user_r:user_t"
Index: /tags/fc9-eol/server/fedora/config/etc/fuse.conf
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/fuse.conf	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/fuse.conf	(revision 1257)
@@ -0,0 +1,1 @@
+user_allow_other
Index: /tags/fc9-eol/server/fedora/config/etc/ha.d/ha.cf
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/ha.d/ha.cf	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/ha.d/ha.cf	(revision 1257)
@@ -0,0 +1,9 @@
+logfacility	local0
+udpport	695
+bcast	eth0
+mcast eth0 225.0.0.1 695 1 0
+auto_failback off
+node	old-faithful
+node	better-mousetrap
+respawn hacluster /usr/lib64/heartbeat/ipfail
+apiauth ipfail gid=haclient uid=hacluster
Index: /tags/fc9-eol/server/fedora/config/etc/ha.d/haresources
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/ha.d/haresources	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/ha.d/haresources	(revision 1257)
@@ -0,0 +1,1 @@
+old-faithful crond
Index: /tags/fc9-eol/server/fedora/config/etc/hesiod.conf
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/hesiod.conf	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/hesiod.conf	(revision 1257)
@@ -0,0 +1,2 @@
+rhs=.ATHENA.MIT.EDU
+lhs=.ns
Index: /tags/fc9-eol/server/fedora/config/etc/hosts
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/hosts	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/hosts	(revision 1257)
@@ -0,0 +1,24 @@
+# Do not remove the following line, or various programs
+# that require network functionality will fail.
+127.0.0.1	localhost.localdomain localhost
+::1		localhost.localdomain localhost
+
+18.181.0.43	scripts.mit.edu scripts
+18.181.0.46	scripts-vhosts.mit.edu scripts-vhosts
+18.181.0.50	scripts-cert.mit.edu scripts-cert
+18.181.0.52	sql.mit.edu sql
+18.181.0.229	scripts-test.mit.edu scripts-test
+
+18.181.0.53	old-faithful.mit.edu old-faithful scripts2.mit.edu scripts2
+18.181.0.57	better-mousetrap.mit.edu better-mousetrap scripts1.mit.edu scripts1
+18.181.0.167	bees-knees.mit.edu bees-knees sx-blade-4.mit.edu sx-blade-4 scripts3.mit.edu scripts3
+18.181.0.228	cats-whiskers.mit.edu cats-whiskers scripts4.mit.edu scripts4
+18.181.0.237	pancake-bunny.mit.edu pancake-bunny scripts6.mit.edu scripts6
+18.181.0.234	busy-beaver.mit.edu busy-beaver scripts7.mit.edu scripts7
+
+172.21.0.53	old-faithful.mit.edu
+172.21.0.57	better-mousetrap.mit.edu
+172.21.0.167	bees-knees.mit.edu
+172.21.0.228	cats-whiskers.mit.edu
+172.21.0.237	pancake-bunny.mit.edu
+172.21.0.234	busy-beaver.mit.edu
Index: /tags/fc9-eol/server/fedora/config/etc/httpd/conf.d/auth_sslcert.conf
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/httpd/conf.d/auth_sslcert.conf	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/httpd/conf.d/auth_sslcert.conf	(revision 1257)
@@ -0,0 +1,8 @@
+LoadModule auth_sslcert_module modules/mod_auth_sslcert.so
+LoadModule authz_afsgroup_module modules/mod_authz_afsgroup.so
+LoadModule auth_optional_module modules/mod_auth_optional.so
+
+<Directory />
+AuthSSLCertVar		SSL_CLIENT_S_DN_Email
+AuthSSLCertStripSuffix	"@MIT.EDU"
+</Directory>
Index: /tags/fc9-eol/server/fedora/config/etc/httpd/conf.d/scripts-special.conf
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/httpd/conf.d/scripts-special.conf	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/httpd/conf.d/scripts-special.conf	(revision 1257)
@@ -0,0 +1,33 @@
+Alias /__scripts/heartbeat /afs/athena.mit.edu/contrib/scripts/web_scripts/heartbeat
+Alias /__scripts/django/media /usr/lib/python2.5/site-packages/django/contrib/admin/media
+Alias /__scripts /afs/athena.mit.edu/contrib/scripts/www
+
+<Directory /afs/athena.mit.edu/contrib/scripts/www>
+    <Files *>
+	SetHandler none
+    </Files>
+</Directory>
+
+<Directory /usr/lib/python2.5/site-packages/django/contrib/admin/media>
+    <Files *>
+	SetHandler none
+    </Files>
+</Directory>
+
+<Location /__scripts/needcerts>
+    RewriteEngine On
+
+    RewriteCond %{HTTP_HOST} !:444$
+    RewriteCond %{SERVER_NAME} ^(.*\.)?scripts$
+    RewriteCond %{THE_REQUEST} ^[^\ ]*\ (.*)\ .*
+    RewriteRule ^ https://%{SERVER_NAME}.mit.edu:444%1 [L,R]
+
+    RewriteCond %{HTTP_HOST} !:444$
+    RewriteCond %{SERVER_NAME} !=scripts-cert.mit.edu
+    RewriteCond %{SERVER_NAME} !=scripts-cert
+    RewriteCond %{THE_REQUEST} ^[^\ ]*\ (.*)\ .*
+    RewriteRule ^ https://%{SERVER_NAME}:444%1 [L,R]
+
+    RewriteRule /afs/athena.mit.edu/contrib/scripts/www/needcerts(.+) $1 [L]
+    RewriteRule /afs/athena.mit.edu/contrib/scripts/www/needcerts /__scripts/unauthorized.html [L]
+</Location>
Index: /tags/fc9-eol/server/fedora/config/etc/httpd/conf.d/scripts-vhost-names.conf
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/httpd/conf.d/scripts-vhost-names.conf	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/httpd/conf.d/scripts-vhost-names.conf	(revision 1257)
@@ -0,0 +1,2 @@
+ServerName scripts.mit.edu
+ServerAlias scripts 18.181.0.43 scripts-vhosts.mit.edu scripts-vhosts 18.181.0.46 scripts-test.mit.edu scripts-test 18.181.0.229 better-mousetrap.mit.edu better-mousetrap b-m.mit.edu b-m scripts1.mit.edu scripts1 18.181.0.57 old-faithful.mit.edu old-faithful o-f.mit.edu o-f scripts2.mit.edu scripts2 18.181.0.53 bees-knees.mit.edu bees-knees b-k.mit.edu b-k sx-blade-4.mit.edu sx-blade-4 scripts3.mit.edu scripts3 18.181.0.167 cats-whiskers.mit.edu cats-whiskers c-w.mit.edu c-w scripts4.mit.edu scripts4 18.181.0.228 pancake-bunny.mit.edu pancake-bunny p-b.mit.edu p-b scripts6.mit.edu scripts6 18.181.0.237 busy-beaver.mit.edu busy-beaver b-b.mit.edu b-b scripts7.mit.edu scripts7 18.181.0.234 localhost 127.0.0.1 ::1
Index: /tags/fc9-eol/server/fedora/config/etc/httpd/conf.d/scripts-vhost.conf
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/httpd/conf.d/scripts-vhost.conf	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/httpd/conf.d/scripts-vhost.conf	(revision 1257)
@@ -0,0 +1,29 @@
+DocumentRoot /afs/athena.mit.edu/contrib/scripts/web_scripts/home
+SuExecUserGroup scripts users
+UserDir web_scripts
+# Comment the following line out to take the machine out of the LVS pool
+# You'll also need to prevent it from listening on 443 or 444
+Alias /heartbeat /afs/athena.mit.edu/contrib/scripts/web_scripts/heartbeat
+Alias /src /afs/athena.mit.edu/contrib/scripts/src
+Redirect /sql https://scripts.mit.edu/~sql
+
+<IfModule mod_status.c>
+    <Location "/server-status">
+        AuthType Basic
+        AuthName "scripts status"
+        AuthBasicProvider file
+        AuthUserFile /etc/munin/apache-htpasswd
+        Require valid-user
+        SetHandler server-status
+        PermitStatusHandler on
+    </Location>
+</IfModule>
+
+<Location ~ "/(robots\.txt|favicon\.ico)">
+    RewriteEngine On
+    RewriteBase /~scripts
+    RewriteCond %{REQUEST_FILENAME} !-f
+    RewriteRule .*(favicon\.ico) $1 [L,NS]
+    RewriteCond %{REQUEST_FILENAME} !-f
+    RewriteRule .*(robots\.txt) $1 [L,NS]
+</Location>
Index: /tags/fc9-eol/server/fedora/config/etc/httpd/conf.d/vhost_ldap.conf
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/httpd/conf.d/vhost_ldap.conf	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/httpd/conf.d/vhost_ldap.conf	(revision 1257)
@@ -0,0 +1,12 @@
+#
+# mod_vhost_ldap allows you to keep your virtual host configuration
+# in an LDAP directory and update it in nearly realtime.
+#
+
+### NOTE ###
+### mod_vhost_ldap depends on mod_ldap ###
+### you have to enable mod_ldap as well ###
+
+VhostLDAPEnabled on
+VhostLDAPUrl "ldap://127.0.0.1/ou=VirtualHosts,dc=scripts,dc=mit,dc=edu"
+VhostLDAPFallback notfound.example.com
Index: /tags/fc9-eol/server/fedora/config/etc/httpd/conf.d/vhosts-common-ssl-cert.conf
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/httpd/conf.d/vhosts-common-ssl-cert.conf	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/httpd/conf.d/vhosts-common-ssl-cert.conf	(revision 1257)
@@ -0,0 +1,4 @@
+# This file will be included inside VirtualHost blocks that use
+# certificate auth.
+
+SSLVerifyClient optional
Index: /tags/fc9-eol/server/fedora/config/etc/httpd/conf.d/vhosts-common-ssl.conf
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/httpd/conf.d/vhosts-common-ssl.conf	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/httpd/conf.d/vhosts-common-ssl.conf	(revision 1257)
@@ -0,0 +1,3 @@
+# This file will be included inside each <VirtualHost *:443> block.
+
+SSLEngine on
Index: /tags/fc9-eol/server/fedora/config/etc/httpd/conf.d/vhosts-common.conf
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/httpd/conf.d/vhosts-common.conf	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/httpd/conf.d/vhosts-common.conf	(revision 1257)
@@ -0,0 +1,2 @@
+# This file will be included inside each <VirtualHost *:80> block.
+
Index: /tags/fc9-eol/server/fedora/config/etc/httpd/conf/httpd.conf
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/httpd/conf/httpd.conf	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/httpd/conf/httpd.conf	(revision 1257)
@@ -0,0 +1,404 @@
+ServerRoot /etc/httpd
+PidFile run/httpd.pid
+Timeout 300
+KeepAlive On
+MaxKeepAliveRequests 1000
+KeepAliveTimeout 15
+
+<IfModule mpm_prefork_module>
+    MinSpareServers 5
+    MaxSpareServers 50
+    StartServers 8
+    ServerLimit 512
+    MaxClients 512
+    MaxRequestsPerChild 10000
+</IfModule>
+
+<IfModule mpm_worker_module>
+    StartServers 3
+    MinSpareThreads 75
+    MaxSpareThreads 250
+    ServerLimit 64
+    ThreadsPerChild 32
+    MaxClients 1024
+    MaxRequestsPerChild 10000
+</IfModule>
+
+<IfModule mpm_event_module>
+    StartServers 3
+    MinSpareThreads 75
+    MaxSpareThreads 250
+    ServerLimit 64
+    ThreadsPerChild 32
+    MaxClients 2048
+    MaxRequestsPerChild 10000
+</IfModule>
+
+LoadModule auth_basic_module modules/mod_auth_basic.so
+LoadModule auth_digest_module modules/mod_auth_digest.so
+LoadModule authn_file_module modules/mod_authn_file.so
+LoadModule authn_alias_module modules/mod_authn_alias.so
+LoadModule authn_anon_module modules/mod_authn_anon.so
+#LoadModule authn_dbm_module modules/mod_authn_dbm.so
+LoadModule authn_default_module modules/mod_authn_default.so
+LoadModule authz_host_module modules/mod_authz_host.so
+LoadModule authz_user_module modules/mod_authz_user.so
+LoadModule authz_owner_module modules/mod_authz_owner.so
+LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
+#LoadModule authz_dbm_module modules/mod_authz_dbm.so
+LoadModule authz_default_module modules/mod_authz_default.so
+LoadModule ldap_module modules/mod_ldap.so
+#LoadModule authnz_ldap_module modules/mod_authnz_ldap.so
+LoadModule include_module modules/mod_include.so
+LoadModule log_config_module modules/mod_log_config.so
+#LoadModule logio_module modules/mod_logio.so
+LoadModule env_module modules/mod_env.so
+LoadModule ext_filter_module modules/mod_ext_filter.so
+#LoadModule mime_magic_module modules/mod_mime_magic.so
+LoadModule expires_module modules/mod_expires.so
+#LoadModule deflate_module modules/mod_deflate.so
+LoadModule headers_module modules/mod_headers.so
+#LoadModule usertrack_module modules/mod_usertrack.so
+LoadModule setenvif_module modules/mod_setenvif.so
+LoadModule mime_module modules/mod_mime.so
+#LoadModule dav_module modules/mod_dav.so
+LoadModule status_module modules/mod_status.so
+LoadModule autoindex_module modules/mod_autoindex.so
+#LoadModule info_module modules/mod_info.so
+#LoadModule dav_fs_module modules/mod_dav_fs.so
+#LoadModule vhost_alias_module modules/mod_vhost_alias.so
+LoadModule negotiation_module modules/mod_negotiation.so
+LoadModule dir_module modules/mod_dir.so
+LoadModule actions_module modules/mod_actions.so
+#LoadModule speling_module modules/mod_speling.so
+LoadModule userdir_module modules/mod_userdir.so
+LoadModule alias_module modules/mod_alias.so
+LoadModule rewrite_module modules/mod_rewrite.so
+LoadModule proxy_module modules/mod_proxy.so
+LoadModule proxy_http_module modules/mod_proxy_http.so
+#LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
+#LoadModule proxy_connect_module modules/mod_proxy_connect.so
+#LoadModule cache_module modules/mod_cache.so
+LoadModule suexec_module modules/mod_suexec.so
+#LoadModule disk_cache_module modules/mod_disk_cache.so
+#LoadModule file_cache_module modules/mod_file_cache.so
+#LoadModule mem_cache_module modules/mod_mem_cache.so
+LoadModule cgi_module modules/mod_cgi.so
+LoadModule ssl_module modules/mod_ssl.so
+LoadModule vhost_ldap_module modules/mod_vhost_ldap.so
+
+User apache
+Group apache
+
+#ErrorDocument  403  /403-404.html
+#ErrorDocument  404  /403-404.html
+#ErrorDocument  500  /script_error.html
+
+UserDir disabled
+
+<Directory />
+    AllowOverride None
+    Options FollowSymLinks IncludesNoExec
+</Directory>
+
+<Directory /afs/*/*/web_scripts>
+    AllowOverride All
+</Directory>
+<Directory /afs/*/*/*/web_scripts>
+    AllowOverride All
+</Directory>
+<Directory /afs/*/*/*/*/web_scripts>
+    AllowOverride All
+</Directory>
+<Directory /afs/*/*/*/*/*/web_scripts>
+    AllowOverride All
+</Directory>
+<Directory /afs/*/*/*/*/*/*/web_scripts>
+    AllowOverride All
+</Directory>
+<Directory /afs/*/*/*/*/*/*/*/web_scripts>
+    AllowOverride All
+</Directory>
+<Directory /afs/*/*/*/*/*/*/*/*/web_scripts>
+    AllowOverride All
+</Directory>
+
+<IfModule mod_dir.c>
+    DirectoryIndex index index.html index.htm index.cgi index.pl index.php index.py index.shtml index.exe
+</IfModule>
+
+AccessFileName .htaccess
+
+<Files ~ "^\.ht">
+    Order Allow,Deny
+    Deny from all
+</Files>
+
+UseCanonicalName Off
+TypesConfig /etc/mime.types
+DefaultType text/plain
+#MIMEMagicFile conf/magic
+
+HostnameLookups Off
+ErrorLog "/home/logview/error_log"
+LogLevel warn
+LogFormat "%V %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
+LogFormat "%h %l %u %t \"%r\" %>s %b" common
+#CustomLog /var/log/httpd/access_log combined
+ServerSignature Off
+ServerAdmin scripts@mit.edu
+ServerTokens Prod
+
+<IfModule mod_autoindex.c>
+    Alias /__scripts/icons /var/www/icons
+    <Directory /var/www/icons>
+        Options Indexes
+        AllowOverride None
+        <Files ~ "\.(gif|png)$">
+            SetHandler default-handler
+        </Files>
+    </Directory>
+
+    IndexOptions FancyIndexing VersionSort NameWidth=* HTMLTable
+
+    AddIconByEncoding (CMP,/__scripts/icons/compressed.gif) x-compress x-gzip
+
+    AddIconByType (TXT,/__scripts/icons/text.gif) text/*
+    AddIconByType (IMG,/__scripts/icons/image2.gif) image/*
+    AddIconByType (SND,/__scripts/icons/sound2.gif) audio/*
+    AddIconByType (VID,/__scripts/icons/movie.gif) video/*
+
+    AddIcon /__scripts/icons/binary.gif .bin .exe
+    AddIcon /__scripts/icons/binhex.gif .hqx
+    AddIcon /__scripts/icons/tar.gif .tar
+    AddIcon /__scripts/icons/world2.gif .wrl .wrl.gz .vrml .vrm .iv
+    AddIcon /__scripts/icons/compressed.gif .Z .z .tgz .gz .zip
+    AddIcon /__scripts/icons/a.gif .ps .ai .eps
+    AddIcon /__scripts/icons/layout.gif .html .shtml .htm .pdf
+    AddIcon /__scripts/icons/text.gif .txt
+    AddIcon /__scripts/icons/c.gif .c
+    AddIcon /__scripts/icons/p.gif .pl .py
+    AddIcon /__scripts/icons/f.gif .for
+    AddIcon /__scripts/icons/dvi.gif .dvi
+    AddIcon /__scripts/icons/uuencoded.gif .uu
+    AddIcon /__scripts/icons/script.gif .conf .sh .shar .csh .ksh .tcl
+    AddIcon /__scripts/icons/tex.gif .tex
+    AddIcon /__scripts/icons/bomb.gif core
+
+    AddIcon /__scripts/icons/back.gif ..
+    AddIcon /__scripts/icons/hand.right.gif README
+    AddIcon /__scripts/icons/folder.gif ^^DIRECTORY^^
+    AddIcon /__scripts/icons/blank.gif ^^BLANKICON^^
+
+    DefaultIcon /__scripts/icons/unknown.gif
+
+    ReadmeName README
+    HeaderName HEADER
+    
+    IndexIgnore .??* *~ *# RCS CVS *,v *,t
+</IfModule>
+
+<IfModule mod_mime.c>
+    AddType application/xhtml+xml         .xhtml
+    AddType application/http-index-format .hti
+    AddType text/html                     .html
+    AddType text/css                      .css
+    AddType text/xsl                      .xslt
+    AddType application/x-javascript      .js
+    AddType application/xml               .xml
+    AddType image/svg+xml                 .svg
+    AddType application/vnd.mozilla.xul+xml .xul
+    AddType application/rdf+xml             .rdf
+    AddType application/x-xpinstall         .xpi
+    AddType text/xml .xsl
+    AddType text/html .shtml
+    AddHandler server-parsed .shtml
+
+    AddEncoding x-compress Z
+    AddEncoding x-gzip gz tgz
+
+    AddLanguage da .dk
+    AddLanguage nl .nl
+    AddLanguage en .en
+    AddLanguage et .ee
+    AddLanguage fr .fr
+    AddLanguage de .de
+    AddLanguage el .el
+    AddLanguage it .it
+    AddLanguage ja .ja
+    AddCharset ISO-2022-JP .jis
+    AddLanguage pl .po
+    AddCharset ISO-8859-2 .iso-pl
+    AddLanguage pt .pt
+    AddLanguage pt-br .pt-br
+    AddLanguage ltz .lu
+    AddLanguage ca .ca
+    AddLanguage es .es
+    AddLanguage sv .se
+    AddLanguage cz .cz
+
+    <IfModule mod_negotiation.c>
+        LanguagePriority en da nl et fr de el it ja pl pt pt-br ltz ca es sv
+    </IfModule>
+
+    AddType application/x-tar .tgz
+    AddType image/bmp .bmp
+
+    AddType text/x-hdml .hdml
+</IfModule>
+
+<IfModule mod_setenvif.c>
+    BrowserMatch "Mozilla/2" nokeepalive
+    BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0
+    BrowserMatch "RealPlayer 4\.0" force-response-1.0
+    BrowserMatch "Java/1\.0" force-response-1.0
+    BrowserMatch "JDK/1\.0" force-response-1.0
+    SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown
+</IfModule>
+
+Listen 80
+
+RLimitCPU 300 300
+RLimitMEM 536870912 536870912
+RLimitNPROC 4096 4096
+
+SetEnv REDIRECT_STATUS CGI
+
+NameVirtualHost *:80
+NameVirtualHost *:443
+NameVirtualHost *:444
+NameVirtualHost 18.181.0.50:80
+NameVirtualHost 18.181.0.50:443
+NameVirtualHost 18.181.0.50:444
+
+ServerName localhost
+DocumentRoot /afs/athena.mit.edu/contrib/scripts/www
+
+ExtendedStatus On
+RewriteEngine Off
+
+ProxyRequests Off
+
+<Location /robots.txt>
+    ErrorDocument 404 "No robots.txt.
+</Location>
+<Location /favicon.ico>
+    ErrorDocument 404 "No favicon.ico.
+</Location>
+
+<VirtualHost 18.181.0.50:80>
+    ServerName scripts-cert.mit.edu
+    ServerAlias scripts-cert
+    Include conf.d/scripts-vhost.conf
+    Include conf.d/vhosts-common.conf
+</VirtualHost>
+
+# LDAP vhost, w00t w00t
+<VirtualHost *:80>
+    Include conf.d/vhost_ldap.conf
+    Include conf.d/vhosts-common.conf
+</VirtualHost>
+
+<VirtualHost *:80>
+    Include conf.d/scripts-vhost-names.conf
+    Include conf.d/scripts-vhost.conf
+    Include conf.d/vhosts-common.conf
+</VirtualHost>
+
+<IfModule ssl_module>
+    Listen 443
+    Listen 444
+
+    AddType application/x-x509-ca-cert .crt
+    AddType application/x-pkcs7-crl    .crl
+
+    SSLPassPhraseDialog  builtin
+    SSLSessionCache shmcb:/var/cache/mod_ssl/scache(512000)
+    SSLSessionCacheTimeout 28800
+    SSLMutex default
+    SSLRandomSeed startup file:/dev/urandom 256
+    SSLRandomSeed connect builtin
+    SSLCryptoDevice builtin
+    SSLCertificateFile /etc/pki/tls/certs/star.scripts.pem
+    SSLCertificateKeyFile /etc/pki/tls/private/scripts.key
+    SSLCACertificateFile /etc/pki/tls/certs/ca.pem
+    SSLVerifyClient none
+    SSLOptions +StdEnvVars
+    SSLProtocol all -SSLv2
+    SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW
+    <VirtualHost 18.181.0.50:443 18.181.0.50:444>
+        ServerName scripts-cert.mit.edu
+        ServerAlias scripts-cert
+        Include conf.d/scripts-vhost.conf
+        Include conf.d/vhosts-common-ssl.conf
+        SSLCertificateFile /etc/pki/tls/certs/scripts-cert.pem
+        Include conf.d/vhosts-common-ssl-cert.conf
+    </VirtualHost>
+    <VirtualHost 18.181.0.43:443>
+        Include conf.d/scripts-vhost-names.conf
+        Include conf.d/scripts-vhost.conf
+        Include conf.d/vhosts-common-ssl.conf
+        SSLCertificateFile /etc/pki/tls/certs/scripts.pem
+    </VirtualHost>
+    <VirtualHost 18.181.0.43:444>
+        Include conf.d/scripts-vhost-names.conf
+        Include conf.d/scripts-vhost.conf
+        Include conf.d/vhosts-common-ssl.conf
+        Include conf.d/vhosts-common-ssl-cert.conf
+        SSLCertificateFile /etc/pki/tls/certs/scripts.pem
+    </VirtualHost>
+    # LDAP vhost, w00t w00t
+    <VirtualHost *:443>
+        ServerName localhost
+        Include conf.d/vhost_ldap.conf
+        Include conf.d/vhosts-common-ssl.conf
+    </VirtualHost>
+    # LDAP vhost, w00t w00t
+    <VirtualHost *:444>
+        ServerName localhost
+        Include conf.d/vhost_ldap.conf
+        Include conf.d/vhosts-common-ssl.conf
+        Include conf.d/vhosts-common-ssl-cert.conf
+    </VirtualHost>
+</IfModule>
+Include vhosts.d/*.conf
+<IfModule ssl_module>
+    <VirtualHost *:443>
+        ServerName scripts.scripts.mit.edu
+        ServerAlias *.scripts.mit.edu *.scripts
+        SSLCertificateFile /etc/pki/tls/certs/star.scripts.pem
+        Include conf.d/vhost_ldap.conf
+        Include conf.d/vhosts-common-ssl.conf
+    </VirtualHost>
+    <VirtualHost *:443>
+        Include conf.d/scripts-vhost-names.conf
+        Include conf.d/scripts-vhost.conf
+        Include conf.d/vhosts-common-ssl.conf
+    </VirtualHost>
+    <VirtualHost *:444>
+        ServerName scripts.scripts.mit.edu
+        ServerAlias *.scripts.mit.edu *.scripts
+        SSLCertificateFile /etc/pki/tls/certs/star.scripts.pem
+        Include conf.d/vhost_ldap.conf
+        Include conf.d/vhosts-common-ssl.conf
+        Include conf.d/vhosts-common-ssl-cert.conf
+    </VirtualHost>
+    <VirtualHost *:444>
+        Include conf.d/scripts-vhost-names.conf
+        Include conf.d/scripts-vhost.conf
+        Include conf.d/vhosts-common-ssl.conf
+        Include conf.d/vhosts-common-ssl-cert.conf
+    </VirtualHost>
+</IfModule>
+
+LoadModule fcgid_module modules/mod_fcgid.so
+AddHandler fcgid-script fcgi
+<Files *.fcgi>
+        Options +ExecCGI
+</Files>
+SocketPath run/mod_fcgid
+IPCCommTimeout 300
+
+Include conf.d/auth_sslcert.conf
+Include conf.d/execsys.conf
+Include conf.d/scripts-special.conf
Index: /tags/fc9-eol/server/fedora/config/etc/httpd/vhosts.d/axo.conf
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/httpd/vhosts.d/axo.conf	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/httpd/vhosts.d/axo.conf	(revision 1257)
@@ -0,0 +1,32 @@
+# do not trailing-slash DocumentRoot
+
+<VirtualHost *:80>
+	ServerName axo.mit.edu
+	ServerAlias axo
+	DocumentRoot /afs/athena.mit.edu/activity/a/axo/web_scripts/site
+	Alias /~axo /afs/athena.mit.edu/activity/a/axo/web_scripts
+	SuExecUserGroup axo axo
+	Include conf.d/vhosts-common.conf
+</VirtualHost>
+
+<IfModule ssl_module>
+	<VirtualHost *:443>
+		ServerName axo.mit.edu
+		ServerAlias axo
+		DocumentRoot /afs/athena.mit.edu/activity/a/axo/web_scripts/site
+		Alias /~axo /afs/athena.mit.edu/activity/a/axo/web_scripts
+		SuExecUserGroup axo axo
+		Include conf.d/vhosts-common-ssl.conf
+		SSLCertificateFile /etc/pki/tls/certs/axo.pem
+	</VirtualHost>
+	<VirtualHost *:444>
+		ServerName axo.mit.edu
+		ServerAlias axo
+		DocumentRoot /afs/athena.mit.edu/activity/a/axo/web_scripts/site
+		Alias /~axo /afs/athena.mit.edu/activity/a/axo/web_scripts
+		SuExecUserGroup axo axo
+		Include conf.d/vhosts-common-ssl.conf
+		Include conf.d/vhosts-common-ssl-cert.conf
+		SSLCertificateFile /etc/pki/tls/certs/axo.pem
+	</VirtualHost>
+</IfModule>
Index: /tags/fc9-eol/server/fedora/config/etc/httpd/vhosts.d/barnowl.conf
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/httpd/vhosts.d/barnowl.conf	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/httpd/vhosts.d/barnowl.conf	(revision 1257)
@@ -0,0 +1,32 @@
+# do not trailing-slash DocumentRoot
+
+<VirtualHost *:80>
+	ServerName barnowl.mit.edu
+	ServerAlias barnowl
+	DocumentRoot /afs/sipb.mit.edu/project/barnowl/web_scripts
+	Alias /~barnowl /afs/sipb.mit.edu/project/barnowl/web_scripts
+	SuExecUserGroup barnowl barnowl
+	Include conf.d/vhosts-common.conf
+</VirtualHost>
+
+<IfModule ssl_module>
+	<VirtualHost *:443>
+		ServerName barnowl.mit.edu
+		ServerAlias barnowl
+		DocumentRoot /afs/sipb.mit.edu/project/barnowl/web_scripts
+		Alias /~barnowl /afs/sipb.mit.edu/project/barnowl/web_scripts
+		SuExecUserGroup barnowl barnowl
+		Include conf.d/vhosts-common-ssl.conf
+		SSLCertificateFile /etc/pki/tls/certs/barnowl.pem
+	</VirtualHost>
+	<VirtualHost *:444>
+		ServerName barnowl.mit.edu
+		ServerAlias barnowl
+		DocumentRoot /afs/sipb.mit.edu/project/barnowl/web_scripts
+		Alias /~barnowl /afs/sipb.mit.edu/project/barnowl/web_scripts
+		SuExecUserGroup barnowl barnowl
+		Include conf.d/vhosts-common-ssl.conf
+		Include conf.d/vhosts-common-ssl-cert.conf
+		SSLCertificateFile /etc/pki/tls/certs/barnowl.pem
+	</VirtualHost>
+</IfModule>
Index: /tags/fc9-eol/server/fedora/config/etc/httpd/vhosts.d/bc.conf
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/httpd/vhosts.d/bc.conf	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/httpd/vhosts.d/bc.conf	(revision 1257)
@@ -0,0 +1,32 @@
+# do not trailing-slash DocumentRoot
+
+<VirtualHost *:80>
+	ServerName bc.mit.edu
+	ServerAlias bc
+	DocumentRoot /afs/athena.mit.edu/activity/b/bc-desk/web_scripts
+	Alias /~bc-desk /afs/athena.mit.edu/activity/b/bc-desk/web_scripts
+	SuExecUserGroup bc-desk bc-desk
+	Include conf.d/vhosts-common.conf
+</VirtualHost>
+
+<IfModule ssl_module>
+	<VirtualHost *:443>
+		ServerName bc.mit.edu
+		ServerAlias bc
+		DocumentRoot /afs/athena.mit.edu/activity/b/bc-desk/web_scripts
+		Alias /~bc-desk /afs/athena.mit.edu/activity/b/bc-desk/web_scripts
+		SuExecUserGroup bc-desk bc-desk
+		Include conf.d/vhosts-common-ssl.conf
+		SSLCertificateFile /etc/pki/tls/certs/bc.pem
+	</VirtualHost>
+	<VirtualHost *:444>
+		ServerName bc.mit.edu
+		ServerAlias bc
+		DocumentRoot /afs/athena.mit.edu/activity/b/bc-desk/web_scripts
+		Alias /~bc-desk /afs/athena.mit.edu/activity/b/bc-desk/web_scripts
+		SuExecUserGroup bc-desk bc-desk
+		Include conf.d/vhosts-common-ssl.conf
+		Include conf.d/vhosts-common-ssl-cert.conf
+		SSLCertificateFile /etc/pki/tls/certs/bc.pem
+	</VirtualHost>
+</IfModule>
Index: /tags/fc9-eol/server/fedora/config/etc/httpd/vhosts.d/cdsa.conf
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/httpd/vhosts.d/cdsa.conf	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/httpd/vhosts.d/cdsa.conf	(revision 1257)
@@ -0,0 +1,32 @@
+# do not trailing-slash DocumentRoot
+
+<VirtualHost *:80>
+	ServerName cdsa.mit.edu
+	ServerAlias cdsa
+	DocumentRoot /afs/athena.mit.edu/org/c/cdsa/web_scripts
+	Alias /~cdsa /afs/athena.mit.edu/org/c/cdsa/web_scripts
+	SuExecUserGroup cdsa cdsa
+	Include conf.d/vhosts-common.conf
+</VirtualHost>
+
+<IfModule ssl_module>
+	<VirtualHost *:443>
+		ServerName cdsa.mit.edu
+		ServerAlias cdsa
+		DocumentRoot /afs/athena.mit.edu/org/c/cdsa/web_scripts
+		Alias /~cdsa /afs/athena.mit.edu/org/c/cdsa/web_scripts
+		SuExecUserGroup cdsa cdsa
+		Include conf.d/vhosts-common-ssl.conf
+		SSLCertificateFile /etc/pki/tls/certs/cdsa.pem
+	</VirtualHost>
+	<VirtualHost *:444>
+		ServerName cdsa.mit.edu
+		ServerAlias cdsa
+		DocumentRoot /afs/athena.mit.edu/org/c/cdsa/web_scripts
+		Alias /~cdsa /afs/athena.mit.edu/org/c/cdsa/web_scripts
+		SuExecUserGroup cdsa cdsa
+		Include conf.d/vhosts-common-ssl.conf
+		Include conf.d/vhosts-common-ssl-cert.conf
+		SSLCertificateFile /etc/pki/tls/certs/cdsa.pem
+	</VirtualHost>
+</IfModule>
Index: /tags/fc9-eol/server/fedora/config/etc/httpd/vhosts.d/crew.conf
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/httpd/vhosts.d/crew.conf	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/httpd/vhosts.d/crew.conf	(revision 1257)
@@ -0,0 +1,32 @@
+# do not trailing-slash DocumentRoot
+
+<VirtualHost *:80>
+	ServerName crew.mit.edu
+	ServerAlias crew
+	DocumentRoot /afs/athena.mit.edu/activity/m/mitcrew/web_scripts
+	Alias /~mitcrew /afs/athena.mit.edu/activity/m/mitcrew/web_scripts
+	SuExecUserGroup mitcrew mitcrew
+	Include conf.d/vhosts-common.conf
+</VirtualHost>
+
+<IfModule ssl_module>
+	<VirtualHost *:443>
+		ServerName crew.mit.edu
+		ServerAlias crew
+		DocumentRoot /afs/athena.mit.edu/activity/m/mitcrew/web_scripts
+		Alias /~mitcrew /afs/athena.mit.edu/activity/m/mitcrew/web_scripts
+		SuExecUserGroup mitcrew mitcrew
+		Include conf.d/vhosts-common-ssl.conf
+		SSLCertificateFile /etc/pki/tls/certs/crew.pem
+	</VirtualHost>
+	<VirtualHost *:444>
+		ServerName crew.mit.edu
+		ServerAlias crew
+		DocumentRoot /afs/athena.mit.edu/activity/m/mitcrew/web_scripts
+		Alias /~mitcrew /afs/athena.mit.edu/activity/m/mitcrew/web_scripts
+		SuExecUserGroup mitcrew mitcrew
+		Include conf.d/vhosts-common-ssl.conf
+		Include conf.d/vhosts-common-ssl-cert.conf
+		SSLCertificateFile /etc/pki/tls/certs/crew.pem
+	</VirtualHost>
+</IfModule>
Index: /tags/fc9-eol/server/fedora/config/etc/httpd/vhosts.d/debathena.conf
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/httpd/vhosts.d/debathena.conf	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/httpd/vhosts.d/debathena.conf	(revision 1257)
@@ -0,0 +1,35 @@
+# do not trailing-slash DocumentRoot
+
+<VirtualHost *:80>
+	ServerName debathena.mit.edu
+	ServerAlias debathena
+	DocumentRoot /afs/sipb.mit.edu/project/debathena/web_scripts
+	Alias /~debathena /afs/sipb.mit.edu/project/debathena/web_scripts
+	SuExecUserGroup debathena debathena
+	Include conf.d/vhosts-common.conf
+	CustomLog /home/logview/debathena.log combined
+</VirtualHost>
+
+<IfModule ssl_module>
+	<VirtualHost *:443>
+		ServerName debathena.mit.edu
+		ServerAlias debathena
+		DocumentRoot /afs/sipb.mit.edu/project/debathena/web_scripts
+		Alias /~debathena /afs/sipb.mit.edu/project/debathena/web_scripts
+		SuExecUserGroup debathena debathena
+		Include conf.d/vhosts-common-ssl.conf
+		SSLCertificateFile /etc/pki/tls/certs/debathena.pem
+		CustomLog /home/logview/debathena.log combined
+	</VirtualHost>
+	<VirtualHost *:444>
+		ServerName debathena.mit.edu
+		ServerAlias debathena
+		DocumentRoot /afs/sipb.mit.edu/project/debathena/web_scripts
+		Alias /~debathena /afs/sipb.mit.edu/project/debathena/web_scripts
+		SuExecUserGroup debathena debathena
+		Include conf.d/vhosts-common-ssl.conf
+		Include conf.d/vhosts-common-ssl-cert.conf
+		SSLCertificateFile /etc/pki/tls/certs/debathena.pem
+		CustomLog /home/logview/debathena.log combined
+	</VirtualHost>
+</IfModule>
Index: /tags/fc9-eol/server/fedora/config/etc/httpd/vhosts.d/eastgate.conf
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/httpd/vhosts.d/eastgate.conf	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/httpd/vhosts.d/eastgate.conf	(revision 1257)
@@ -0,0 +1,32 @@
+# do not trailing-slash DocumentRoot
+
+<VirtualHost *:80>
+	ServerName eastgate.mit.edu
+	ServerAlias eastgate
+	DocumentRoot /afs/athena.mit.edu/activity/e/eastgate/web_scripts
+	Alias /~eastgate /afs/athena.mit.edu/activity/e/eastgate/web_scripts
+	SuExecUserGroup eastgate eastgate
+	Include conf.d/vhosts-common.conf
+</VirtualHost>
+
+<IfModule ssl_module>
+	<VirtualHost *:443>
+		ServerName eastgate.mit.edu
+		ServerAlias eastgate
+		DocumentRoot /afs/athena.mit.edu/activity/e/eastgate/web_scripts
+		Alias /~eastgate /afs/athena.mit.edu/activity/e/eastgate/web_scripts
+		SuExecUserGroup eastgate eastgate
+		Include conf.d/vhosts-common-ssl.conf
+		SSLCertificateFile /etc/pki/tls/certs/eastgate.pem
+	</VirtualHost>
+	<VirtualHost *:444>
+		ServerName eastgate.mit.edu
+		ServerAlias eastgate
+		DocumentRoot /afs/athena.mit.edu/activity/e/eastgate/web_scripts
+		Alias /~eastgate /afs/athena.mit.edu/activity/e/eastgate/web_scripts
+		SuExecUserGroup eastgate eastgate
+		Include conf.d/vhosts-common-ssl.conf
+		Include conf.d/vhosts-common-ssl-cert.conf
+		SSLCertificateFile /etc/pki/tls/certs/eastgate.pem
+	</VirtualHost>
+</IfModule>
Index: /tags/fc9-eol/server/fedora/config/etc/httpd/vhosts.d/familynet.conf
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/httpd/vhosts.d/familynet.conf	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/httpd/vhosts.d/familynet.conf	(revision 1257)
@@ -0,0 +1,32 @@
+# do not trailing-slash DocumentRoot
+
+<VirtualHost *:80>
+	ServerName familynet.mit.edu
+	ServerAlias familynet
+	DocumentRoot /afs/athena.mit.edu/org/f/familynet/web_scripts
+	Alias /~familynet /afs/athena.mit.edu/org/f/familynet/web_scripts
+	SuExecUserGroup familynet familynet
+	Include conf.d/vhosts-common.conf
+</VirtualHost>
+
+<IfModule ssl_module>
+	<VirtualHost *:443>
+		ServerName familynet.mit.edu
+		ServerAlias familynet
+		DocumentRoot /afs/athena.mit.edu/org/f/familynet/web_scripts
+		Alias /~familynet /afs/athena.mit.edu/org/f/familynet/web_scripts
+		SuExecUserGroup familynet familynet
+		Include conf.d/vhosts-common-ssl.conf
+		SSLCertificateFile /etc/pki/tls/certs/familynet.pem
+	</VirtualHost>
+	<VirtualHost *:444>
+		ServerName familynet.mit.edu
+		ServerAlias familynet
+		DocumentRoot /afs/athena.mit.edu/org/f/familynet/web_scripts
+		Alias /~familynet /afs/athena.mit.edu/org/f/familynet/web_scripts
+		SuExecUserGroup familynet familynet
+		Include conf.d/vhosts-common-ssl.conf
+		Include conf.d/vhosts-common-ssl-cert.conf
+		SSLCertificateFile /etc/pki/tls/certs/familynet.pem
+	</VirtualHost>
+</IfModule>
Index: /tags/fc9-eol/server/fedora/config/etc/httpd/vhosts.d/lpq.conf
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/httpd/vhosts.d/lpq.conf	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/httpd/vhosts.d/lpq.conf	(revision 1257)
@@ -0,0 +1,32 @@
+# do not trailing-slash DocumentRoot
+
+<VirtualHost *:80>
+	ServerName queues.mit.edu
+	ServerAlias queues
+	DocumentRoot /afs/sipb.mit.edu/project/queues/web_scripts
+	Alias /~queues /afs/sipb.mit.edu/project/queues/web_scripts
+	SuExecUserGroup queues queues
+	Include conf.d/vhosts-common.conf
+</VirtualHost>
+
+<IfModule ssl_module>
+	<VirtualHost *:443>
+		ServerName queues.mit.edu
+		ServerAlias queues
+		DocumentRoot /afs/sipb.mit.edu/project/queues/web_scripts
+		Alias /~queues /afs/sipb.mit.edu/project/queues/web_scripts
+		SuExecUserGroup queues queues
+		Include conf.d/vhosts-common-ssl.conf
+		SSLCertificateFile /etc/pki/tls/certs/lpq.pem
+	</VirtualHost>
+	<VirtualHost *:444>
+		ServerName queues.mit.edu
+		ServerAlias queues
+		DocumentRoot /afs/sipb.mit.edu/project/queues/web_scripts
+		Alias /~queues /afs/sipb.mit.edu/project/queues/web_scripts
+		SuExecUserGroup queues queues
+		Include conf.d/vhosts-common-ssl.conf
+		Include conf.d/vhosts-common-ssl-cert.conf
+		SSLCertificateFile /etc/pki/tls/certs/lpq.pem
+	</VirtualHost>
+</IfModule>
Index: /tags/fc9-eol/server/fedora/config/etc/httpd/vhosts.d/mitsoc.conf
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/httpd/vhosts.d/mitsoc.conf	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/httpd/vhosts.d/mitsoc.conf	(revision 1257)
@@ -0,0 +1,32 @@
+# do not trailing-slash DocumentRoot
+
+<VirtualHost *:80>
+	ServerName mitsoc.mit.edu
+	ServerAlias mitsoc
+	DocumentRoot /afs/athena.mit.edu/activity/m/mitsoc/web_scripts
+	Alias /~mitsoc /afs/athena.mit.edu/activity/m/mitsoc/web_scripts
+	SuExecUserGroup mitsoc mitsoc
+	Include conf.d/vhosts-common.conf
+</VirtualHost>
+
+<IfModule ssl_module>
+	<VirtualHost *:443>
+		ServerName mitsoc.mit.edu
+		ServerAlias mitsoc
+		DocumentRoot /afs/athena.mit.edu/activity/m/mitsoc/web_scripts
+		Alias /~mitsoc /afs/athena.mit.edu/activity/m/mitsoc/web_scripts
+		SuExecUserGroup mitsoc mitsoc
+		Include conf.d/vhosts-common-ssl.conf
+		SSLCertificateFile /etc/pki/tls/certs/mitsoc.pem
+	</VirtualHost>
+	<VirtualHost *:444>
+		ServerName mitsoc.mit.edu
+		ServerAlias mitsoc
+		DocumentRoot /afs/athena.mit.edu/activity/m/mitsoc/web_scripts
+		Alias /~mitsoc /afs/athena.mit.edu/activity/m/mitsoc/web_scripts
+		SuExecUserGroup mitsoc mitsoc
+		Include conf.d/vhosts-common-ssl.conf
+		Include conf.d/vhosts-common-ssl-cert.conf
+		SSLCertificateFile /etc/pki/tls/certs/mitsoc.pem
+	</VirtualHost>
+</IfModule>
Index: /tags/fc9-eol/server/fedora/config/etc/httpd/vhosts.d/next.conf
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/httpd/vhosts.d/next.conf	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/httpd/vhosts.d/next.conf	(revision 1257)
@@ -0,0 +1,32 @@
+# do not trailing-slash DocumentRoot
+
+<VirtualHost *:80>
+	ServerName next.mit.edu
+	ServerAlias next
+	DocumentRoot /afs/athena.mit.edu/activity/n/next/web_scripts/root
+	Alias /~next /afs/athena.mit.edu/activity/n/next/web_scripts
+	SuExecUserGroup next next
+	Include conf.d/vhosts-common.conf
+</VirtualHost>
+
+<IfModule ssl_module>
+	<VirtualHost *:443>
+		ServerName next.mit.edu
+		ServerAlias next
+		DocumentRoot /afs/athena.mit.edu/activity/n/next/web_scripts/root
+		Alias /~next /afs/athena.mit.edu/activity/n/next/web_scripts
+		SuExecUserGroup next next
+		Include conf.d/vhosts-common-ssl.conf
+		SSLCertificateFile /etc/pki/tls/certs/next.pem
+	</VirtualHost>
+	<VirtualHost *:444>
+		ServerName next.mit.edu
+		ServerAlias next
+		DocumentRoot /afs/athena.mit.edu/activity/n/next/web_scripts/root
+		Alias /~next /afs/athena.mit.edu/activity/n/next/web_scripts
+		SuExecUserGroup next next
+		Include conf.d/vhosts-common-ssl.conf
+		Include conf.d/vhosts-common-ssl-cert.conf
+		SSLCertificateFile /etc/pki/tls/certs/next.pem
+	</VirtualHost>
+</IfModule>
Index: /tags/fc9-eol/server/fedora/config/etc/httpd/vhosts.d/picker.conf
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/httpd/vhosts.d/picker.conf	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/httpd/vhosts.d/picker.conf	(revision 1257)
@@ -0,0 +1,32 @@
+# do not trailing-slash DocumentRoot
+
+<VirtualHost *:80>
+	ServerName picker.mit.edu
+	ServerAlias picker
+	DocumentRoot /afs/athena.mit.edu/course/urop/picker/web_scripts
+	Alias /~picker /afs/athena.mit.edu/course/urop/picker/web_scripts
+	SuExecUserGroup picker picker
+	Include conf.d/vhosts-common.conf
+</VirtualHost>
+
+<IfModule ssl_module>
+	<VirtualHost *:443>
+		ServerName picker.mit.edu
+		ServerAlias picker
+		DocumentRoot /afs/athena.mit.edu/course/urop/picker/web_scripts
+		Alias /~picker /afs/athena.mit.edu/course/urop/picker/web_scripts
+		SuExecUserGroup picker picker
+		Include conf.d/vhosts-common-ssl.conf
+		SSLCertificateFile /etc/pki/tls/certs/picker.pem
+	</VirtualHost>
+	<VirtualHost *:444>
+		ServerName picker.mit.edu
+		ServerAlias picker
+		DocumentRoot /afs/athena.mit.edu/course/urop/picker/web_scripts
+		Alias /~picker /afs/athena.mit.edu/course/urop/picker/web_scripts
+		SuExecUserGroup picker picker
+		Include conf.d/vhosts-common-ssl.conf
+		Include conf.d/vhosts-common-ssl-cert.conf
+		SSLCertificateFile /etc/pki/tls/certs/picker.pem
+	</VirtualHost>
+</IfModule>
Index: /tags/fc9-eol/server/fedora/config/etc/httpd/vhosts.d/queues.conf
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/httpd/vhosts.d/queues.conf	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/httpd/vhosts.d/queues.conf	(revision 1257)
@@ -0,0 +1,32 @@
+# do not trailing-slash DocumentRoot
+
+<VirtualHost *:80>
+	ServerName queues.mit.edu
+	ServerAlias queues
+	DocumentRoot /afs/sipb.mit.edu/project/queues/web_scripts
+	Alias /~queues /afs/sipb.mit.edu/project/queues/web_scripts
+	SuExecUserGroup queues queues
+	Include conf.d/vhosts-common.conf
+</VirtualHost>
+
+<IfModule ssl_module>
+	<VirtualHost *:443>
+		ServerName queues.mit.edu
+		ServerAlias queues
+		DocumentRoot /afs/sipb.mit.edu/project/queues/web_scripts
+		Alias /~queues /afs/sipb.mit.edu/project/queues/web_scripts
+		SuExecUserGroup queues queues
+		Include conf.d/vhosts-common-ssl.conf
+		SSLCertificateFile /etc/pki/tls/certs/queues.pem
+	</VirtualHost>
+	<VirtualHost *:444>
+		ServerName queues.mit.edu
+		ServerAlias queues
+		DocumentRoot /afs/sipb.mit.edu/project/queues/web_scripts
+		Alias /~queues /afs/sipb.mit.edu/project/queues/web_scripts
+		SuExecUserGroup queues queues
+		Include conf.d/vhosts-common-ssl.conf
+		Include conf.d/vhosts-common-ssl-cert.conf
+		SSLCertificateFile /etc/pki/tls/certs/queues.pem
+	</VirtualHost>
+</IfModule>
Index: /tags/fc9-eol/server/fedora/config/etc/httpd/vhosts.d/random-hall.conf
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/httpd/vhosts.d/random-hall.conf	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/httpd/vhosts.d/random-hall.conf	(revision 1257)
@@ -0,0 +1,32 @@
+# do not trailing-slash DocumentRoot
+
+<VirtualHost *:80>
+	ServerName random-hall.mit.edu
+	ServerAlias random-hall
+	DocumentRoot /afs/athena.mit.edu/activity/r/random-hall/web_scripts
+	Alias /~random-hall /afs/athena.mit.edu/activity/r/random-hall/web_scripts
+	SuExecUserGroup random-hall random-hall
+	Include conf.d/vhosts-common.conf
+</VirtualHost>
+
+<IfModule ssl_module>
+	<VirtualHost *:443>
+		ServerName random-hall.mit.edu
+		ServerAlias random-hall
+		DocumentRoot /afs/athena.mit.edu/activity/r/random-hall/web_scripts
+		Alias /~random-hall /afs/athena.mit.edu/activity/r/random-hall/web_scripts
+		SuExecUserGroup random-hall random-hall
+		Include conf.d/vhosts-common-ssl.conf
+		SSLCertificateFile /etc/pki/tls/certs/random-hall.pem
+	</VirtualHost>
+	<VirtualHost *:444>
+		ServerName random-hall.mit.edu
+		ServerAlias random-hall
+		DocumentRoot /afs/athena.mit.edu/activity/r/random-hall/web_scripts
+		Alias /~random-hall /afs/athena.mit.edu/activity/r/random-hall/web_scripts
+		SuExecUserGroup random-hall random-hall
+		Include conf.d/vhosts-common-ssl.conf
+		Include conf.d/vhosts-common-ssl-cert.conf
+		SSLCertificateFile /etc/pki/tls/certs/random-hall.pem
+	</VirtualHost>
+</IfModule>
Index: /tags/fc9-eol/server/fedora/config/etc/httpd/vhosts.d/reify-vhost.py
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/httpd/vhosts.d/reify-vhost.py	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/httpd/vhosts.d/reify-vhost.py	(revision 1257)
@@ -0,0 +1,75 @@
+#!/usr/bin/python
+#
+# Converts an apacheConfig record from LDAP, as used by mod_vhost_ldap,
+# into a <VirtualHost> record as used in an Apache conf.d directory.
+# Useful for adding things like SSL server certs that mod_vhost_ldap
+# doesn't support.
+#
+# Usage:
+# scripts# cd /etc/httpd/vhosts.d
+# scripts# ./reify-vhost.py geofft > geofft.conf
+# scripts# service httpd graceful
+# 
+# Geoffrey Thomas <geofft@mit.edu>, 2008, public domain.
+
+import ldap
+import ldap.filter
+import pwd
+import sys
+
+ll = ldap.initialize("ldapi://%2fvar%2frun%2fdirsrv%2fslapd-scripts.socket/")
+ll.simple_bind_s("", "")
+
+host = sys.argv[1]
+
+r = ll.search_s(
+    "ou=VirtualHosts,dc=scripts,dc=mit,dc=edu",
+    ldap.SCOPE_SUBTREE,
+    ldap.filter.filter_format(
+            "(&(objectClass=apacheConfig)" +
+            "(|(apacheServerName=%s)" +
+            "(apacheServerAlias=%s)))",
+           [host, host]))
+if len(r) != 0:
+    user = pwd.getpwuid(int(r[0][1]['apacheSuexecUid'][0]))
+    print """# do not trailing-slash DocumentRoot
+
+<VirtualHost *:80>
+	ServerName %(servername)s
+	ServerAlias %(serveralias)s
+	DocumentRoot %(docroot)s
+	Alias /~%(uname)s %(homedir)s/web_scripts
+	SuExecUserGroup %(uname)s %(uname)s
+	Include conf.d/vhosts-common.conf
+</VirtualHost>
+
+<IfModule ssl_module>
+	<VirtualHost *:443>
+		ServerName %(servername)s
+		ServerAlias %(serveralias)s
+		DocumentRoot %(docroot)s
+		Alias /~%(uname)s %(homedir)s/web_scripts
+		SuExecUserGroup %(uname)s %(uname)s
+		Include conf.d/vhosts-common-ssl.conf
+		SSLCertificateFile /etc/pki/tls/certs/%(hname)s.pem
+	</VirtualHost>
+	<VirtualHost *:444>
+		ServerName %(servername)s
+		ServerAlias %(serveralias)s
+		DocumentRoot %(docroot)s
+		Alias /~%(uname)s %(homedir)s/web_scripts
+		SuExecUserGroup %(uname)s %(uname)s
+		Include conf.d/vhosts-common-ssl.conf
+		Include conf.d/vhosts-common-ssl-cert.conf
+		SSLCertificateFile /etc/pki/tls/certs/%(hname)s.pem
+	</VirtualHost>
+</IfModule>""" % {
+    'servername': r[0][1]['apacheServerName'][0],
+    'serveralias': r[0][1]['apacheServerAlias'][0],
+    'docroot': r[0][1]['apacheDocumentRoot'][0],
+    'uname': user[0],
+    'homedir': user[5],
+    'hname': host
+}
+
+# vim: set ts=4 sw=4 et:
Index: /tags/fc9-eol/server/fedora/config/etc/httpd/vhosts.d/schuh.conf
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/httpd/vhosts.d/schuh.conf	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/httpd/vhosts.d/schuh.conf	(revision 1257)
@@ -0,0 +1,32 @@
+# do not trailing-slash DocumentRoot
+
+<VirtualHost *:80>
+	ServerName schuh.mit.edu
+	ServerAlias schuh
+	DocumentRoot /afs/athena.mit.edu/org/s/schuhgroup/web_scripts
+	Alias /~schuhgroup /afs/athena.mit.edu/org/s/schuhgroup/web_scripts
+	SuExecUserGroup schuhgroup schuhgroup
+	Include conf.d/vhosts-common.conf
+</VirtualHost>
+
+<IfModule ssl_module>
+	<VirtualHost *:443>
+		ServerName schuh.mit.edu
+		ServerAlias schuh
+		DocumentRoot /afs/athena.mit.edu/org/s/schuhgroup/web_scripts
+		Alias /~schuhgroup /afs/athena.mit.edu/org/s/schuhgroup/web_scripts
+		SuExecUserGroup schuhgroup schuhgroup
+		Include conf.d/vhosts-common-ssl.conf
+		SSLCertificateFile /etc/pki/tls/certs/schuh.pem
+	</VirtualHost>
+	<VirtualHost *:444>
+		ServerName schuh.mit.edu
+		ServerAlias schuh
+		DocumentRoot /afs/athena.mit.edu/org/s/schuhgroup/web_scripts
+		Alias /~schuhgroup /afs/athena.mit.edu/org/s/schuhgroup/web_scripts
+		SuExecUserGroup schuhgroup schuhgroup
+		Include conf.d/vhosts-common-ssl.conf
+		Include conf.d/vhosts-common-ssl-cert.conf
+		SSLCertificateFile /etc/pki/tls/certs/schuh.pem
+	</VirtualHost>
+</IfModule>
Index: /tags/fc9-eol/server/fedora/config/etc/httpd/vhosts.d/sipb.conf
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/httpd/vhosts.d/sipb.conf	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/httpd/vhosts.d/sipb.conf	(revision 1257)
@@ -0,0 +1,32 @@
+# do not trailing-slash DocumentRoot
+
+<VirtualHost *:80>
+	ServerName sipb.mit.edu
+	ServerAlias sipb
+	DocumentRoot /afs/sipb.mit.edu/project/sipb-www/web_scripts/sipb
+	Alias /~sipb-www /afs/sipb.mit.edu/project/sipb-www/web_scripts
+	SuExecUserGroup sipb-www sipb-www
+	Include conf.d/vhosts-common.conf
+</VirtualHost>
+
+<IfModule ssl_module>
+	<VirtualHost *:443>
+		ServerName sipb.mit.edu
+		ServerAlias sipb
+		DocumentRoot /afs/sipb.mit.edu/project/sipb-www/web_scripts/sipb
+		Alias /~sipb-www /afs/sipb.mit.edu/project/sipb-www/web_scripts
+		SuExecUserGroup sipb-www sipb-www
+		Include conf.d/vhosts-common-ssl.conf
+		SSLCertificateFile /etc/pki/tls/certs/sipb.pem
+	</VirtualHost>
+	<VirtualHost *:444>
+		ServerName sipb.mit.edu
+		ServerAlias sipb
+		DocumentRoot /afs/sipb.mit.edu/project/sipb-www/web_scripts/sipb
+		Alias /~sipb-www /afs/sipb.mit.edu/project/sipb-www/web_scripts
+		SuExecUserGroup sipb-www sipb-www
+		Include conf.d/vhosts-common-ssl.conf
+		Include conf.d/vhosts-common-ssl-cert.conf
+		SSLCertificateFile /etc/pki/tls/certs/sipb.pem
+	</VirtualHost>
+</IfModule>
Index: /tags/fc9-eol/server/fedora/config/etc/httpd/vhosts.d/template
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/httpd/vhosts.d/template	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/httpd/vhosts.d/template	(revision 1257)
@@ -0,0 +1,32 @@
+# do not trailing-slash DocumentRoot
+
+<VirtualHost *:80>
+	ServerName hname.mit.edu
+	ServerAlias hname
+	DocumentRoot /afs/athena.mit.edu/path/web_scripts/subdir
+	Alias /~uname /afs/athena.mit.edu/path/web_scripts
+	SuExecUserGroup uname uname
+	Include conf.d/vhosts-common.conf
+</VirtualHost>
+
+<IfModule ssl_module>
+	<VirtualHost *:443>
+		ServerName hname.mit.edu
+		ServerAlias hname
+		DocumentRoot /afs/athena.mit.edu/path/web_scripts/subdir
+		Alias /~uname /afs/athena.mit.edu/path/web_scripts
+		SuExecUserGroup uname uname
+		Include conf.d/vhosts-common-ssl.conf
+		SSLCertificateFile /etc/pki/tls/certs/hname.pem
+	</VirtualHost>
+	<VirtualHost *:444>
+		ServerName hname.mit.edu
+		ServerAlias hname
+		DocumentRoot /afs/athena.mit.edu/path/web_scripts/subdir
+		Alias /~uname /afs/athena.mit.edu/path/web_scripts
+		SuExecUserGroup uname uname
+		Include conf.d/vhosts-common-ssl.conf
+		Include conf.d/vhosts-common-ssl-cert.conf
+		SSLCertificateFile /etc/pki/tls/certs/hname.pem
+	</VirtualHost>
+</IfModule>
Index: /tags/fc9-eol/server/fedora/config/etc/httpd/vhosts.d/textbooks.conf
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/httpd/vhosts.d/textbooks.conf	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/httpd/vhosts.d/textbooks.conf	(revision 1257)
@@ -0,0 +1,32 @@
+# do not trailing-slash DocumentRoot
+
+<VirtualHost *:80>
+	ServerName textbooks.mit.edu
+	ServerAlias textbooks
+	DocumentRoot /afs/athena.mit.edu/activity/a/apo/web_scripts/textbooks
+	Alias /~apo /afs/athena.mit.edu/activity/a/apo/web_scripts
+	SuExecUserGroup apo apo
+	Include conf.d/vhosts-common.conf
+</VirtualHost>
+
+<IfModule ssl_module>
+	<VirtualHost *:443>
+		ServerName textbooks.mit.edu
+		ServerAlias textbooks
+		DocumentRoot /afs/athena.mit.edu/activity/a/apo/web_scripts/textbooks
+		Alias /~apo /afs/athena.mit.edu/activity/a/apo/web_scripts
+		SuExecUserGroup apo apo
+		Include conf.d/vhosts-common-ssl.conf
+		SSLCertificateFile /etc/pki/tls/certs/textbooks.pem
+	</VirtualHost>
+	<VirtualHost *:444>
+		ServerName textbooks.mit.edu
+		ServerAlias textbooks
+		DocumentRoot /afs/athena.mit.edu/activity/a/apo/web_scripts/textbooks
+		Alias /~apo /afs/athena.mit.edu/activity/a/apo/web_scripts
+		SuExecUserGroup apo apo
+		Include conf.d/vhosts-common-ssl.conf
+		Include conf.d/vhosts-common-ssl-cert.conf
+		SSLCertificateFile /etc/pki/tls/certs/textbooks.pem
+	</VirtualHost>
+</IfModule>
Index: /tags/fc9-eol/server/fedora/config/etc/httpd/vhosts.d/tibetforum.conf
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/httpd/vhosts.d/tibetforum.conf	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/httpd/vhosts.d/tibetforum.conf	(revision 1257)
@@ -0,0 +1,32 @@
+# do not trailing-slash DocumentRoot
+
+<VirtualHost *:80>
+	ServerName tibetforum.mit.edu
+	ServerAlias tibetforum
+	DocumentRoot /afs/athena.mit.edu/activity/c/cssa/web_scripts/phpbb
+	Alias /~cssa /afs/athena.mit.edu/activity/c/cssa/web_scripts
+	SuExecUserGroup cssa cssa
+	Include conf.d/vhosts-common.conf
+</VirtualHost>
+
+<IfModule ssl_module>
+	<VirtualHost *:443>
+		ServerName tibetforum.mit.edu
+		ServerAlias tibetforum
+		DocumentRoot /afs/athena.mit.edu/activity/c/cssa/web_scripts/phpbb
+		Alias /~cssa /afs/athena.mit.edu/activity/c/cssa/web_scripts
+		SuExecUserGroup cssa cssa
+		Include conf.d/vhosts-common-ssl.conf
+		SSLCertificateFile /etc/pki/tls/certs/tibetforum.pem
+	</VirtualHost>
+	<VirtualHost *:444>
+		ServerName tibetforum.mit.edu
+		ServerAlias tibetforum
+		DocumentRoot /afs/athena.mit.edu/activity/c/cssa/web_scripts/phpbb
+		Alias /~cssa /afs/athena.mit.edu/activity/c/cssa/web_scripts
+		SuExecUserGroup cssa cssa
+		Include conf.d/vhosts-common-ssl.conf
+		Include conf.d/vhosts-common-ssl-cert.conf
+		SSLCertificateFile /etc/pki/tls/certs/tibetforum.pem
+	</VirtualHost>
+</IfModule>
Index: /tags/fc9-eol/server/fedora/config/etc/httpd/vhosts.d/tours.conf
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/httpd/vhosts.d/tours.conf	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/httpd/vhosts.d/tours.conf	(revision 1257)
@@ -0,0 +1,32 @@
+# do not trailing-slash DocumentRoot
+
+<VirtualHost *:80>
+	ServerName tours.mit.edu
+	ServerAlias tours
+	DocumentRoot /afs/athena.mit.edu/org/t/tours/web_scripts
+	Alias /~tours /afs/athena.mit.edu/org/t/tours/web_scripts
+	SuExecUserGroup tours tours
+	Include conf.d/vhosts-common.conf
+</VirtualHost>
+
+<IfModule ssl_module>
+	<VirtualHost *:443>
+		ServerName tours.mit.edu
+		ServerAlias tours
+		DocumentRoot /afs/athena.mit.edu/org/t/tours/web_scripts
+		Alias /~tours /afs/athena.mit.edu/org/t/tours/web_scripts
+		SuExecUserGroup tours tours
+		Include conf.d/vhosts-common-ssl.conf
+		SSLCertificateFile /etc/pki/tls/certs/tours.pem
+	</VirtualHost>
+	<VirtualHost *:444>
+		ServerName tours.mit.edu
+		ServerAlias tours
+		DocumentRoot /afs/athena.mit.edu/org/t/tours/web_scripts
+		Alias /~tours /afs/athena.mit.edu/org/t/tours/web_scripts
+		SuExecUserGroup tours tours
+		Include conf.d/vhosts-common-ssl.conf
+		Include conf.d/vhosts-common-ssl-cert.conf
+		SSLCertificateFile /etc/pki/tls/certs/tours.pem
+	</VirtualHost>
+</IfModule>
Index: /tags/fc9-eol/server/fedora/config/etc/httpd/vhosts.d/twentytwelve.conf
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/httpd/vhosts.d/twentytwelve.conf	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/httpd/vhosts.d/twentytwelve.conf	(revision 1257)
@@ -0,0 +1,32 @@
+# do not trailing-slash DocumentRoot
+
+<VirtualHost *:80>
+	ServerName twentytwelve.mit.edu
+	ServerAlias twentytwelve
+	DocumentRoot /afs/athena.mit.edu/activity/other/2012/web_scripts
+	Alias /~2012 /afs/athena.mit.edu/activity/other/2012/web_scripts
+	SuExecUserGroup 2012 2012
+	Include conf.d/vhosts-common.conf
+</VirtualHost>
+
+<IfModule ssl_module>
+	<VirtualHost *:443>
+		ServerName twentytwelve.mit.edu
+		ServerAlias twentytwelve
+		DocumentRoot /afs/athena.mit.edu/activity/other/2012/web_scripts
+		Alias /~2012 /afs/athena.mit.edu/activity/other/2012/web_scripts
+		SuExecUserGroup 2012 2012
+		Include conf.d/vhosts-common-ssl.conf
+		SSLCertificateFile /etc/pki/tls/certs/twentytwelve.pem
+	</VirtualHost>
+	<VirtualHost *:444>
+		ServerName twentytwelve.mit.edu
+		ServerAlias twentytwelve
+		DocumentRoot /afs/athena.mit.edu/activity/other/2012/web_scripts
+		Alias /~2012 /afs/athena.mit.edu/activity/other/2012/web_scripts
+		SuExecUserGroup 2012 2012
+		Include conf.d/vhosts-common-ssl.conf
+		Include conf.d/vhosts-common-ssl-cert.conf
+		SSLCertificateFile /etc/pki/tls/certs/twentytwelve.pem
+	</VirtualHost>
+</IfModule>
Index: /tags/fc9-eol/server/fedora/config/etc/httpd/vhosts.d/ua.conf
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/httpd/vhosts.d/ua.conf	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/httpd/vhosts.d/ua.conf	(revision 1257)
@@ -0,0 +1,32 @@
+# do not trailing-slash DocumentRoot
+
+<VirtualHost *:80>
+	ServerName ua.mit.edu
+	ServerAlias ua
+	DocumentRoot /afs/athena.mit.edu/activity/u/ua/web_scripts/static
+	Alias /~ua /afs/athena.mit.edu/activity/u/ua/web_scripts
+	SuExecUserGroup ua ua
+	Include conf.d/vhosts-common.conf
+</VirtualHost>
+
+<IfModule ssl_module>
+	<VirtualHost *:443>
+		ServerName ua.mit.edu
+		ServerAlias ua
+		DocumentRoot /afs/athena.mit.edu/activity/u/ua/web_scripts/static
+		Alias /~ua /afs/athena.mit.edu/activity/u/ua/web_scripts
+		SuExecUserGroup ua ua
+		Include conf.d/vhosts-common-ssl.conf
+		SSLCertificateFile /etc/pki/tls/certs/ua.pem
+	</VirtualHost>
+	<VirtualHost *:444>
+		ServerName ua.mit.edu
+		ServerAlias ua
+		DocumentRoot /afs/athena.mit.edu/activity/u/ua/web_scripts/static
+		Alias /~ua /afs/athena.mit.edu/activity/u/ua/web_scripts
+		SuExecUserGroup ua ua
+		Include conf.d/vhosts-common-ssl.conf
+		Include conf.d/vhosts-common-ssl-cert.conf
+		SSLCertificateFile /etc/pki/tls/certs/ua.pem
+	</VirtualHost>
+</IfModule>
Index: /tags/fc9-eol/server/fedora/config/etc/httpd/vhosts.d/wakeup.conf
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/httpd/vhosts.d/wakeup.conf	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/httpd/vhosts.d/wakeup.conf	(revision 1257)
@@ -0,0 +1,32 @@
+# do not trailing-slash DocumentRoot
+
+<VirtualHost *:80>
+	ServerName wakeup.mit.edu
+	ServerAlias wakeup
+	DocumentRoot /afs/athena.mit.edu/user/g/e/geofft/web_scripts/wakeup
+	Alias /~geofft /afs/athena.mit.edu/user/g/e/geofft/web_scripts
+	SuExecUserGroup geofft geofft
+	Include conf.d/vhosts-common.conf
+</VirtualHost>
+
+<IfModule ssl_module>
+	<VirtualHost *:443>
+		ServerName wakeup.mit.edu
+		ServerAlias wakeup
+		DocumentRoot /afs/athena.mit.edu/user/g/e/geofft/web_scripts/wakeup
+		Alias /~geofft /afs/athena.mit.edu/user/g/e/geofft/web_scripts
+		SuExecUserGroup geofft geofft
+		Include conf.d/vhosts-common-ssl.conf
+		SSLCertificateFile /etc/pki/tls/certs/wakeup.pem
+	</VirtualHost>
+	<VirtualHost *:444>
+		ServerName wakeup.mit.edu
+		ServerAlias wakeup
+		DocumentRoot /afs/athena.mit.edu/user/g/e/geofft/web_scripts/wakeup
+		Alias /~geofft /afs/athena.mit.edu/user/g/e/geofft/web_scripts
+		SuExecUserGroup geofft geofft
+		Include conf.d/vhosts-common-ssl.conf
+		Include conf.d/vhosts-common-ssl-cert.conf
+		SSLCertificateFile /etc/pki/tls/certs/wakeup.pem
+	</VirtualHost>
+</IfModule>
Index: /tags/fc9-eol/server/fedora/config/etc/httpd/vhosts.d/westgate.conf
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/httpd/vhosts.d/westgate.conf	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/httpd/vhosts.d/westgate.conf	(revision 1257)
@@ -0,0 +1,32 @@
+# do not trailing-slash DocumentRoot
+
+<VirtualHost *:80>
+	ServerName westgate.mit.edu
+	ServerAlias westgate
+	DocumentRoot /afs/athena.mit.edu/activity/w/westgate/web_scripts
+	Alias /~westgate /afs/athena.mit.edu/activity/w/westgate/web_scripts
+	SuExecUserGroup westgate westgate
+	Include conf.d/vhosts-common.conf
+</VirtualHost>
+
+<IfModule ssl_module>
+	<VirtualHost *:443>
+		ServerName westgate.mit.edu
+		ServerAlias westgate
+		DocumentRoot /afs/athena.mit.edu/activity/w/westgate/web_scripts
+		Alias /~westgate /afs/athena.mit.edu/activity/w/westgate/web_scripts
+		SuExecUserGroup westgate westgate
+		Include conf.d/vhosts-common-ssl.conf
+		SSLCertificateFile /etc/pki/tls/certs/westgate.pem
+	</VirtualHost>
+	<VirtualHost *:444>
+		ServerName westgate.mit.edu
+		ServerAlias westgate
+		DocumentRoot /afs/athena.mit.edu/activity/w/westgate/web_scripts
+		Alias /~westgate /afs/athena.mit.edu/activity/w/westgate/web_scripts
+		SuExecUserGroup westgate westgate
+		Include conf.d/vhosts-common-ssl.conf
+		Include conf.d/vhosts-common-ssl-cert.conf
+		SSLCertificateFile /etc/pki/tls/certs/westgate.pem
+	</VirtualHost>
+</IfModule>
Index: /tags/fc9-eol/server/fedora/config/etc/httpd/vhosts.d/whatsnext.conf
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/httpd/vhosts.d/whatsnext.conf	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/httpd/vhosts.d/whatsnext.conf	(revision 1257)
@@ -0,0 +1,32 @@
+# do not trailing-slash DocumentRoot
+
+<VirtualHost *:80>
+	ServerName whatsnext.mit.edu
+	ServerAlias whatsnext
+	DocumentRoot /afs/sipb.mit.edu/contrib/cfs/web_scripts
+	Alias /~cfs /afs/sipb.mit.edu/contrib/cfs/web_scripts
+	SuExecUserGroup cfs cfs
+	Include conf.d/vhosts-common.conf
+</VirtualHost>
+
+<IfModule ssl_module>
+	<VirtualHost *:443>
+		ServerName whatsnext.mit.edu
+		ServerAlias whatsnext
+		DocumentRoot /afs/sipb.mit.edu/contrib/cfs/web_scripts
+		Alias /~cfs /afs/sipb.mit.edu/contrib/cfs/web_scripts
+		SuExecUserGroup cfs cfs
+		Include conf.d/vhosts-common-ssl.conf
+		SSLCertificateFile /etc/pki/tls/certs/whatsnext.pem
+	</VirtualHost>
+	<VirtualHost *:444>
+		ServerName whatsnext.mit.edu
+		ServerAlias whatsnext
+		DocumentRoot /afs/sipb.mit.edu/contrib/cfs/web_scripts
+		Alias /~cfs /afs/sipb.mit.edu/contrib/cfs/web_scripts
+		SuExecUserGroup cfs cfs
+		Include conf.d/vhosts-common-ssl.conf
+		Include conf.d/vhosts-common-ssl-cert.conf
+		SSLCertificateFile /etc/pki/tls/certs/whatsnext.pem
+	</VirtualHost>
+</IfModule>
Index: /tags/fc9-eol/server/fedora/config/etc/issue.net
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/issue.net	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/issue.net	(revision 1257)
@@ -0,0 +1,1 @@
+If you have trouble logging in, see http://scripts.mit.edu/faq/41/.
Index: /tags/fc9-eol/server/fedora/config/etc/issue.net.no_tkt
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/issue.net.no_tkt	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/issue.net.no_tkt	(revision 1257)
@@ -0,0 +1,5 @@
+You must log in to the scripts service using Kerberos tickets, but
+your ssh client did not pass a valid ticket to the scripts server.
+
+See http://scripts.mit.edu/faq/41
+
Index: /tags/fc9-eol/server/fedora/config/etc/issue.net.no_user
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/issue.net.no_user	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/issue.net.no_user	(revision 1257)
@@ -0,0 +1,3 @@
+You do not appear to be signed up for the scripts.mit.edu service.
+
+You may sign up at http://scripts.mit.edu/
Index: /tags/fc9-eol/server/fedora/config/etc/krb.conf
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/krb.conf	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/krb.conf	(revision 1257)
@@ -0,0 +1,5 @@
+ATHENA.MIT.EDU
+ATHENA.MIT.EDU	KERBEROS.MIT.EDU admin server
+ATHENA.MIT.EDU	KERBEROS-1.MIT.EDU
+ATHENA.MIT.EDU	KERBEROS-2.MIT.EDU
+ATHENA.MIT.EDU	KERBEROS-3.MIT.EDU
Index: /tags/fc9-eol/server/fedora/config/etc/krb.realms
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/krb.realms	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/krb.realms	(revision 1257)
@@ -0,0 +1,54 @@
+sics.se		SICS.SE
+.sics.se	SICS.SE
+nada.kth.se	NADA.KTH.SE
+pdc.kth.se	NADA.KTH.SE
+.hydro.kth.se	NADA.KTH.SE
+.mech.kth.se	MECH.KTH.SE
+.nada.kth.se	NADA.KTH.SE
+.pdc.kth.se	NADA.KTH.SE
+.sans.kth.se	NADA.KTH.SE
+.admin.kth.se	ADMIN.KTH.SE
+.e.kth.se	E.KTH.SE
+.s3.kth.se	E.KTH.SE
+.radio.kth.se	E.KTH.SE
+.ttt.kth.se	E.KTH.SE
+.electrum.kth.se	IT.KTH.SE
+.math.kth.se	MATH.KTH.SE
+.it.kth.se	IT.KTH.SE
+.sth.sunet.se	SUNET.SE
+.pilsnet.sunet.se	SUNET.SE
+.sunet.se	SUNET.SE
+.ml.kva.se	ML.KVA.SE
+pi.se		PI.SE
+.pi.se		PI.SE
+.adm.pi.se	PI.SE
+.stacken.kth.se	STACKEN.KTH.SE
+kth.se		KTH.SE
+.kth.se		KTH.SE
+.bion.kth.se	BION.KTH.SE
+.lib.kth.se	LIB.KTH.SE
+.dsv.su.se	DSV.SU.SE
+.MIT.EDU ATHENA.MIT.EDU
+.MIT.EDU. ATHENA.MIT.EDU
+MIT.EDU ATHENA.MIT.EDU
+DODO.MIT.EDU SMS_TEST.MIT.EDU
+.UCSC.EDU CATS.UCSC.EDU
+.UCSC.EDU. CATS.UCSC.EDU
+CYGNUS.COM CYGNUS.COM
+.CYGNUS.COM CYGNUS.COM
+MIRKWOOD.CYGNUS.COM MIRKWOOD.CYGNUS.COM
+KITHRUP.COM KITHRUP.COM
+.KITHRUP.COM KITHRUP.COM
+.berkeley.edu   EECS.BERKELEY.EDU
+.CS.berkeley.edu        EECS.BERKELEY.EDU
+.MIT.EDU        ATHENA.MIT.EDU
+.mit.edu        ATHENA.MIT.EDU
+.BSDI.COM       BSDI.COM
+ARMADILLO.COM	ARMADILLO.COM
+.ARMADILLO.COM	ARMADILLO.COM
+ZEN.ORG		ZEN.ORG
+.ZEN.ORG	ZEN.ORG
+toad.com	TOAD.COM
+.toad.com	TOAD.COM
+lloyd.com	LLOYD.COM
+.lloyd.com	LLOYD.COM
Index: /tags/fc9-eol/server/fedora/config/etc/krb5.conf
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/krb5.conf	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/krb5.conf	(revision 1257)
@@ -0,0 +1,116 @@
+[libdefaults]
+	default_realm = ATHENA.MIT.EDU
+# The following krb5.conf variables are only for MIT Kerberos.
+	krb4_config = /etc/krb.conf
+	krb4_realms = /etc/krb.realms
+	kdc_timesync = 1
+	ccache_type = 4
+	forwardable = true
+	proxiable = true
+	v4_instance_resolve = false
+	v4_name_convert = {
+		host = {
+			rcmd = host
+			ftp = ftp
+		}
+		plain = {
+			something = something-else
+		}
+	}
+
+[realms]
+	ATHENA.MIT.EDU = {
+		kdc = kerberos.mit.edu:88
+		kdc = kerberos-1.mit.edu:88
+		kdc = kerberos-2.mit.edu:88
+		kdc = kerberos-3.mit.edu:88
+		admin_server = kerberos.mit.edu
+		default_domain = mit.edu
+	}
+	MEDIA-LAB.MIT.EDU = {
+		kdc = kerberos.media.mit.edu
+		admin_server = kerberos.media.mit.edu
+	}
+	ZONE.MIT.EDU = {
+		kdc = casio.mit.edu
+		kdc = seiko.mit.edu
+		admin_server = casio.mit.edu
+	}
+	MOOF.MIT.EDU = {
+		kdc = three-headed-dogcow.mit.edu:88
+		kdc = three-headed-dogcow-1.mit.edu:88
+		admin_server = three-headed-dogcow.mit.edu
+	}
+	CYGNUS.COM = {
+		kdc = KERBEROS.CYGNUS.COM
+		kdc = KERBEROS-1.CYGNUS.COM
+		admin_server = KERBEROS.CYGNUS.COM
+	}
+	GREY17.ORG = {
+		kdc = kerberos.grey17.org
+		admin_server = kerberos.grey17.org
+	}
+	IHTFP.ORG = {
+		kdc = kerberos.ihtfp.org
+		admin_server = kerberos.ihtfp.org
+	}
+	GNU.ORG = {
+		kdc = kerberos.gnu.org
+		kdc = kerberos-2.gnu.org
+		kdc = kerberos-3.gnu.org
+		admin_server = kerberos.gnu.org
+	}
+	1TS.ORG = {
+		kdc = kerberos.1ts.org
+		admin_server = kerberos.1ts.org
+	}
+	GRATUITOUS.ORG = {
+		kdc = kerberos.gratuitous.org
+		admin_server = kerberos.gratuitous.org
+	}
+	DOOMCOM.ORG = {
+		kdc = kerberos.doomcom.org
+		admin_server = kerberos.doomcom.org
+	}
+	ANDREW.CMU.EDU = {
+		kdc = vice28.fs.andrew.cmu.edu
+		kdc = vice2.fs.andrew.cmu.edu
+		kdc = vice11.fs.andrew.cmu.edu
+		kdc = vice12.fs.andrew.cmu.edu
+		admin_server = vice28.fs.andrew.cmu.edu
+		default_domain = andrew.cmu.edu
+	}
+	CS.CMU.EDU = {
+		kdc = kerberos.cs.cmu.edu
+		kdc = kerberos-2.srv.cs.cmu.edu
+		admin_server = kerberos.cs.cmu.edu
+	}
+	DEMENTIA.ORG = {
+		kdc = kerberos.dementia.org
+		kdc = kerberos2.dementia.org
+		admin_server = kerberos.dementia.org
+	}
+	CSAIL.MIT.EDU = {
+		kdc = kerberos-1.csail.mit.edu
+		kdc = kerberos-2.csail.mit.edu
+		admin_server = kerberos.csail.mit.edu
+		default_domain = csail.mit.edu
+		krb524_server = krb524.csail.mit.edu
+	}
+
+[domain_realm]
+	.mit.edu = ATHENA.MIT.EDU
+	mit.edu = ATHENA.MIT.EDU
+	.media.mit.edu = MEDIA-LAB.MIT.EDU
+	media.mit.edu = MEDIA-LAB.MIT.EDU
+	.whoi.edu = ATHENA.MIT.EDU
+	whoi.edu = ATHENA.MIT.EDU
+	.csail.mit.edu = CSAIL.MIT.EDU
+        csail.mit.edu = CSAIL.MIT.EDU
+        .ai.mit.edu = CSAIL.MIT.EDU
+        ai.mit.edu = CSAIL.MIT.EDU
+	.stanford.edu = stanford.edu
+
+[login]
+	krb4_convert = true
+	krb4_get_tickets = true
Index: /tags/fc9-eol/server/fedora/config/etc/ldap.conf
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/ldap.conf	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/ldap.conf	(revision 1257)
@@ -0,0 +1,296 @@
+# @(#)$Id: ldap.conf,v 1.38 2006/05/15 08:13:31 lukeh Exp $
+#
+# This is the configuration file for the LDAP nameservice
+# switch library and the LDAP PAM module.
+#
+# The man pages for this file are nss_ldap(5) and pam_ldap(5)
+#
+# PADL Software
+# http://www.padl.com
+#
+
+# Your LDAP server. Must be resolvable without using LDAP.
+# Multiple hosts may be specified, each separated by a 
+# space. How long nss_ldap takes to failover depends on
+# whether your LDAP client library supports configurable
+# network or connect timeouts (see bind_timelimit).
+#host 127.0.0.1
+
+# The distinguished name of the search base.
+base dc=scripts,dc=mit,dc=edu
+
+# Another way to specify your LDAP server is to provide an
+# uri with the server name. This allows to use
+# Unix Domain Sockets to connect to a local LDAP Server.
+#uri ldap://127.0.0.1/
+#uri ldaps://127.0.0.1/   
+#uri ldapi://%2fvar%2frun%2fldapi_sock/
+# Note: %2f encodes the '/' used as directory separator
+uri ldapi://%2fvar%2frun%2fdirsrv%2fslapd-scripts.socket/
+
+# The LDAP version to use (defaults to 3
+# if supported by client library)
+#ldap_version 3
+
+# The distinguished name to bind to the server with.
+# Optional: default is to bind anonymously.
+#binddn cn=proxyuser,dc=example,dc=com
+
+# The credentials to bind with. 
+# Optional: default is no credential.
+#bindpw secret
+
+# The distinguished name to bind to the server with
+# if the effective user ID is root. Password is
+# stored in /etc/ldap.secret (mode 600)
+#rootbinddn cn=manager,dc=example,dc=com
+
+# The port.
+# Optional: default is 389.
+#port 389
+
+# The search scope.
+#scope sub
+#scope one
+#scope base
+
+# Search timelimit
+#timelimit 30
+timelimit 120
+
+# Bind/connect timelimit
+#bind_timelimit 30
+bind_timelimit 120
+
+# Reconnect policy: hard (default) will retry connecting to
+# the software with exponential backoff, soft will fail
+# immediately.
+#bind_policy hard
+
+# Idle timelimit; client will close connections
+# (nss_ldap only) if the server has not been contacted
+# for the number of seconds specified below.
+#idle_timelimit 3600
+idle_timelimit 3600
+
+# Filter to AND with uid=%s
+#pam_filter objectclass=account
+
+# The user ID attribute (defaults to uid)
+#pam_login_attribute uid
+
+# Search the root DSE for the password policy (works
+# with Netscape Directory Server)
+#pam_lookup_policy yes
+
+# Check the 'host' attribute for access control
+# Default is no; if set to yes, and user has no
+# value for the host attribute, and pam_ldap is
+# configured for account management (authorization)
+# then the user will not be allowed to login.
+#pam_check_host_attr yes
+
+# Check the 'authorizedService' attribute for access
+# control
+# Default is no; if set to yes, and the user has no
+# value for the authorizedService attribute, and
+# pam_ldap is configured for account management
+# (authorization) then the user will not be allowed
+# to login.
+#pam_check_service_attr yes
+
+# Group to enforce membership of
+#pam_groupdn cn=PAM,ou=Groups,dc=example,dc=com
+
+# Group member attribute
+#pam_member_attribute uniquemember
+
+# Specify a minium or maximum UID number allowed
+#pam_min_uid 0
+#pam_max_uid 0
+
+# Template login attribute, default template user
+# (can be overriden by value of former attribute
+# in user's entry)
+#pam_login_attribute userPrincipalName
+#pam_template_login_attribute uid
+#pam_template_login nobody
+
+# HEADS UP: the pam_crypt, pam_nds_passwd,
+# and pam_ad_passwd options are no
+# longer supported.
+#
+# Do not hash the password at all; presume
+# the directory server will do it, if
+# necessary. This is the default.
+#pam_password clear
+
+# Hash password locally; required for University of
+# Michigan LDAP server, and works with Netscape
+# Directory Server if you're using the UNIX-Crypt
+# hash mechanism and not using the NT Synchronization
+# service. 
+#pam_password crypt
+
+# Remove old password first, then update in
+# cleartext. Necessary for use with Novell
+# Directory Services (NDS)
+#pam_password clear_remove_old
+#pam_password nds
+
+# RACF is an alias for the above. For use with
+# IBM RACF
+#pam_password racf
+
+# Update Active Directory password, by
+# creating Unicode password and updating
+# unicodePwd attribute.
+#pam_password ad
+
+# Use the OpenLDAP password change
+# extended operation to update the password.
+#pam_password exop
+
+# Redirect users to a URL or somesuch on password
+# changes.
+#pam_password_prohibit_message Please visit http://internal to change your password.
+
+# RFC2307bis naming contexts
+# Syntax:
+# nss_base_XXX		base?scope?filter
+# where scope is {base,one,sub}
+# and filter is a filter to be &'d with the
+# default filter.
+# You can omit the suffix eg:
+# nss_base_passwd	ou=People,
+# to append the default base DN but this
+# may incur a small performance impact.
+nss_base_passwd		ou=People,dc=scripts,dc=mit,dc=edu?one
+#nss_base_shadow	ou=People,dc=example,dc=com?one
+nss_base_group		ou=Groups,dc=scripts,dc=mit,dc=edu?one
+#nss_base_hosts		ou=Hosts,dc=example,dc=com?one
+#nss_base_services	ou=Services,dc=example,dc=com?one
+#nss_base_networks	ou=Networks,dc=example,dc=com?one
+#nss_base_protocols	ou=Protocols,dc=example,dc=com?one
+#nss_base_rpc		ou=Rpc,dc=example,dc=com?one
+#nss_base_ethers	ou=Ethers,dc=example,dc=com?one
+#nss_base_netmasks	ou=Networks,dc=example,dc=com?ne
+#nss_base_bootparams	ou=Ethers,dc=example,dc=com?one
+#nss_base_aliases	ou=Aliases,dc=example,dc=com?one
+#nss_base_netgroup	ou=Netgroup,dc=example,dc=com?one
+
+# Just assume that there are no supplemental groups for these named users
+nss_initgroups_ignoreusers root,ldap,named,avahi,haldaemon,dbus,radvd,tomcat,radiusd,news,mailman,nscd
+
+# attribute/objectclass mapping
+# Syntax:
+#nss_map_attribute	rfc2307attribute	mapped_attribute
+#nss_map_objectclass	rfc2307objectclass	mapped_objectclass
+
+# configure --enable-nds is no longer supported.
+# NDS mappings
+#nss_map_attribute uniqueMember member
+
+# Services for UNIX 3.5 mappings
+#nss_map_objectclass posixAccount User
+#nss_map_objectclass shadowAccount User
+#nss_map_attribute uid msSFU30Name
+#nss_map_attribute uniqueMember msSFU30PosixMember
+#nss_map_attribute userPassword msSFU30Password
+#nss_map_attribute homeDirectory msSFU30HomeDirectory
+#nss_map_attribute homeDirectory msSFUHomeDirectory
+#nss_map_objectclass posixGroup Group
+#pam_login_attribute msSFU30Name
+#pam_filter objectclass=User
+#pam_password ad
+
+# configure --enable-mssfu-schema is no longer supported.
+# Services for UNIX 2.0 mappings
+#nss_map_objectclass posixAccount User
+#nss_map_objectclass shadowAccount user
+#nss_map_attribute uid msSFUName
+#nss_map_attribute uniqueMember posixMember
+#nss_map_attribute userPassword msSFUPassword
+#nss_map_attribute homeDirectory msSFUHomeDirectory
+#nss_map_attribute shadowLastChange pwdLastSet
+#nss_map_objectclass posixGroup Group
+#nss_map_attribute cn msSFUName
+#pam_login_attribute msSFUName
+#pam_filter objectclass=User
+#pam_password ad
+
+# RFC 2307 (AD) mappings
+#nss_map_objectclass posixAccount user
+#nss_map_objectclass shadowAccount user
+#nss_map_attribute uid sAMAccountName
+#nss_map_attribute homeDirectory unixHomeDirectory
+#nss_map_attribute shadowLastChange pwdLastSet
+#nss_map_objectclass posixGroup group
+#nss_map_attribute uniqueMember member
+#pam_login_attribute sAMAccountName
+#pam_filter objectclass=User
+#pam_password ad
+
+# configure --enable-authpassword is no longer supported
+# AuthPassword mappings
+#nss_map_attribute userPassword authPassword
+
+# AIX SecureWay mappings
+#nss_map_objectclass posixAccount aixAccount
+#nss_base_passwd ou=aixaccount,?one
+#nss_map_attribute uid userName
+#nss_map_attribute gidNumber gid
+#nss_map_attribute uidNumber uid
+#nss_map_attribute userPassword passwordChar
+#nss_map_objectclass posixGroup aixAccessGroup
+#nss_base_group ou=aixgroup,?one
+#nss_map_attribute cn groupName
+#nss_map_attribute uniqueMember member
+#pam_login_attribute userName
+#pam_filter objectclass=aixAccount
+#pam_password clear
+
+# Netscape SDK LDAPS
+#ssl on
+
+# Netscape SDK SSL options
+#sslpath /etc/ssl/certs
+
+# OpenLDAP SSL mechanism
+# start_tls mechanism uses the normal LDAP port, LDAPS typically 636
+#ssl start_tls
+#ssl on
+
+# OpenLDAP SSL options
+# Require and verify server certificate (yes/no)
+# Default is to use libldap's default behavior, which can be configured in
+# /etc/openldap/ldap.conf using the TLS_REQCERT setting.  The default for
+# OpenLDAP 2.0 and earlier is "no", for 2.1 and later is "yes".
+#tls_checkpeer yes
+
+# CA certificates for server certificate verification
+# At least one of these are required if tls_checkpeer is "yes"
+#tls_cacertfile /etc/ssl/ca.cert
+#tls_cacertdir /etc/ssl/certs
+
+# Seed the PRNG if /dev/urandom is not provided
+#tls_randfile /var/run/egd-pool
+
+# SSL cipher suite
+# See man ciphers for syntax
+#tls_ciphers TLSv1
+
+# Client certificate and key
+# Use these, if your server requires client authentication.
+#tls_cert
+#tls_key
+
+# Disable SASL security layers. This is needed for AD.
+#sasl_secprops maxssf=0
+
+# Override the default Kerberos ticket cache location.
+#krb5_ccname FILE:/etc/.ldapcache
+
+# SASL mechanism for PAM authentication - use is experimental
+# at present and does not support password policy control
+#pam_sasl_mech DIGEST-MD5
Index: /tags/fc9-eol/server/fedora/config/etc/logrotate.d/httpd
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/logrotate.d/httpd	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/logrotate.d/httpd	(revision 1257)
@@ -0,0 +1,10 @@
+/var/log/httpd/*log /home/logview/*log {
+    rotate 0
+    daily
+    missingok
+    notifempty
+    sharedscripts
+    postrotate
+	/bin/kill -HUP `cat /var/run/httpd.pid 2>/dev/null` 2> /dev/null || true
+    endscript
+}
Index: /tags/fc9-eol/server/fedora/config/etc/munin/apache-htpasswd
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/munin/apache-htpasswd	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/munin/apache-htpasswd	(revision 1257)
@@ -0,0 +1,2 @@
+munin:$apr1$OHrCw...$YROR8zbWmgxWL9netgXGi.
+geofft:AvCSyg9e75YZM
Index: /tags/fc9-eol/server/fedora/config/etc/munin/munin-node.conf
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/munin/munin-node.conf	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/munin/munin-node.conf	(revision 1257)
@@ -0,0 +1,38 @@
+#
+# Example config-file for munin-node
+#
+
+log_level 4
+log_file /var/log/munin/munin-node.log
+port 4949
+pid_file /var/run/munin/munin-node.pid
+background 1
+setseid 1
+
+# Which port to bind to;
+host *
+user munin
+group munin
+setsid yes
+
+# Regexps for files to ignore
+
+ignore_file ~$
+ignore_file \.bak$
+ignore_file %$
+ignore_file \.dpkg-(tmp|new|old|dist)$
+ignore_file \.rpm(save|new)$
+
+# Set this if the client doesn't report the correct hostname when
+# telnetting to localhost, port 4949
+#
+#host_name ppc2.fedora.redhat.com
+
+# A list of addresses that are allowed to connect.  This must be a
+# regular expression, due to brain damage in Net::Server, which
+# doesn't understand CIDR-style network notation.  You may repeat
+# the allow line as many times as you'd like
+
+allow ^127\.0\.0\.1$
+allow ^18\.187\.1\.128$
+allow ^18\.181\.0\.65$
Index: /tags/fc9-eol/server/fedora/config/etc/munin/plugin-conf.d/apache_accesses
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/munin/plugin-conf.d/apache_accesses	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/munin/plugin-conf.d/apache_accesses	(revision 1257)
@@ -0,0 +1,2 @@
+[apache_accesses]
+env.url http://munin:SsQWsHZWU5OJJOob78pD3UbxKu42Ka9ExGx9zYmvrWE1O5PCq4sBWJsQaJENi4R@127.0.0.1:%d/server-status/?auto
Index: /tags/fc9-eol/server/fedora/config/etc/munin/plugin-conf.d/apache_processes
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/munin/plugin-conf.d/apache_processes	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/munin/plugin-conf.d/apache_processes	(revision 1257)
@@ -0,0 +1,2 @@
+[apache_processes]
+env.url http://munin:SsQWsHZWU5OJJOob78pD3UbxKu42Ka9ExGx9zYmvrWE1O5PCq4sBWJsQaJENi4R@127.0.0.1:%d/server-status/?auto
Index: /tags/fc9-eol/server/fedora/config/etc/munin/plugin-conf.d/apache_volume
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/munin/plugin-conf.d/apache_volume	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/munin/plugin-conf.d/apache_volume	(revision 1257)
@@ -0,0 +1,2 @@
+[apache_volume]
+env.url http://munin:SsQWsHZWU5OJJOob78pD3UbxKu42Ka9ExGx9zYmvrWE1O5PCq4sBWJsQaJENi4R@127.0.0.1:%d/server-status/?auto
Index: /tags/fc9-eol/server/fedora/config/etc/munin/plugin-conf.d/hddtemp_smartctl
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/munin/plugin-conf.d/hddtemp_smartctl	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/munin/plugin-conf.d/hddtemp_smartctl	(revision 1257)
@@ -0,0 +1,4 @@
+[hddtemp_smartctl]
+user root
+env.drives sda sdb
+command sudo -E %c
Index: /tags/fc9-eol/server/fedora/config/etc/munin/plugin-conf.d/munin-node
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/munin/plugin-conf.d/munin-node	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/munin/plugin-conf.d/munin-node	(revision 1257)
@@ -0,0 +1,44 @@
+#
+# This file contains configuration options for the plugins. Three
+# options are understood by munin-node itself:
+#
+# 	user <user>         # Set the user to run the plugin as
+# 	group <group>       # Set the group to run the plugin as
+# 	command <command>   # Run <command> instead of the plugin. %c
+# 	                      expands to what would normally be run.
+#   env.<variable>      # Sets <variable> in the plugin's environment, see the
+#                         individual plugins to find out which variables they
+#                         care about.
+#
+#
+
+[mysql*]
+#env.mysqlopts -u someuser
+
+[exim*]
+group mail
+
+[cps*]
+user root
+
+[apt]
+user root
+
+[vlan*]
+user root
+
+[postfix*]
+user root
+
+[smart_*]
+user root
+command sudo %c
+
+[sensors_*]
+user root
+command sudo %c
+
+[if_*]
+user root
+command sudo -E %c
+env.PATH /usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
Index: /tags/fc9-eol/server/fedora/config/etc/munin/plugin-conf.d/postfix
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/munin/plugin-conf.d/postfix	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/munin/plugin-conf.d/postfix	(revision 1257)
@@ -0,0 +1,5 @@
+[postfix*]
+user root
+env.logfile maillog
+env.logdir /var/log
+command sudo -E %c
Index: /tags/fc9-eol/server/fedora/config/etc/munin/plugin-conf.d/sendmail
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/munin/plugin-conf.d/sendmail	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/munin/plugin-conf.d/sendmail	(revision 1257)
@@ -0,0 +1,4 @@
+[sendmail*]
+user root
+env.mspqueue /var/spool/clientmqueue
+command sudo -E %c
Index: /tags/fc9-eol/server/fedora/config/etc/munin/plugins/apache_accesses
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/munin/plugins/apache_accesses	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/munin/plugins/apache_accesses	(revision 1257)
@@ -0,0 +1,1 @@
+link /usr/share/munin/plugins/apache_accesses
Index: /tags/fc9-eol/server/fedora/config/etc/munin/plugins/apache_processes
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/munin/plugins/apache_processes	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/munin/plugins/apache_processes	(revision 1257)
@@ -0,0 +1,1 @@
+link /usr/share/munin/plugins/apache_processes
Index: /tags/fc9-eol/server/fedora/config/etc/munin/plugins/apache_volume
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/munin/plugins/apache_volume	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/munin/plugins/apache_volume	(revision 1257)
@@ -0,0 +1,1 @@
+link /usr/share/munin/plugins/apache_volume
Index: /tags/fc9-eol/server/fedora/config/etc/nagios/check_afs
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/nagios/check_afs	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/nagios/check_afs	(revision 1257)
@@ -0,0 +1,17 @@
+#!/bin/sh
+. /usr/lib64/nagios/plugins/utils.sh
+
+CHECKS=`/usr/bin/fs checks -all -fast`
+STATUS=$?
+
+$ECHO "$CHECKS"
+
+if [ $STATUS -gt 0 ]; then
+    if $ECHO "$CHECKS" | grep -i STYX >/dev/null; then
+	exit $STATE_CRITICAL;
+    else
+	exit $STATE_WARNING;
+    fi
+else
+    exit $STATE_OK;
+fi
Index: /tags/fc9-eol/server/fedora/config/etc/nagios/check_cron_working
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/nagios/check_cron_working	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/nagios/check_cron_working	(revision 1257)
@@ -0,0 +1,2 @@
+#!/bin/bash
+exec /usr/lib64/nagios/plugins/check_file_age -f /afs/athena.mit.edu/contrib/scripts/cron_scripts/cron_status_flag/$(hostname -f)
Index: /tags/fc9-eol/server/fedora/config/etc/nagios/nrpe.cfg
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/nagios/nrpe.cfg	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/nagios/nrpe.cfg	(revision 1257)
@@ -0,0 +1,204 @@
+#############################################################################
+# Sample NRPE Config File 
+# Written by: Ethan Galstad (nagios@nagios.org)
+# 
+# Last Modified: 02-23-2006
+#
+# NOTES:
+# This is a sample configuration file for the NRPE daemon.  It needs to be
+# located on the remote host that is running the NRPE daemon, not the host
+# from which the check_nrpe client is being executed.
+#############################################################################
+
+
+# PID FILE
+# The name of the file in which the NRPE daemon should write it's process ID
+# number.  The file is only written if the NRPE daemon is started by the root
+# user and is running in standalone mode.
+
+pid_file=/var/run/nrpe.pid
+
+
+
+# PORT NUMBER
+# Port number we should wait for connections on.
+# NOTE: This must be a non-priviledged port (i.e. > 1024).
+# NOTE: This option is ignored if NRPE is running under either inetd or xinetd
+
+server_port=5666
+
+
+
+# SERVER ADDRESS
+# Address that nrpe should bind to in case there are more than one interface
+# and you do not want nrpe to bind on all interfaces.
+# NOTE: This option is ignored if NRPE is running under either inetd or xinetd
+
+#server_address=192.168.1.1
+
+
+
+# NRPE USER
+# This determines the effective user that the NRPE daemon should run as.  
+# You can either supply a username or a UID.
+# 
+# NOTE: This option is ignored if NRPE is running under either inetd or xinetd
+
+nrpe_user=nagios
+
+
+
+# NRPE GROUP
+# This determines the effective group that the NRPE daemon should run as.  
+# You can either supply a group name or a GID.
+# 
+# NOTE: This option is ignored if NRPE is running under either inetd or xinetd
+
+nrpe_group=nagios
+
+
+
+# ALLOWED HOST ADDRESSES
+# This is an optional comma-delimited list of IP address or hostnames 
+# that are allowed to talk to the NRPE daemon.
+#
+# Note: The daemon only does rudimentary checking of the client's IP
+# address.  I would highly recommend adding entries in your /etc/hosts.allow
+# file to allow only the specified host to connect to the port
+# you are running this daemon on.
+#
+# NOTE: This option is ignored if NRPE is running under either inetd or xinetd
+
+allowed_hosts=18.187.1.128,18.181.0.65
+ 
+
+
+# COMMAND ARGUMENT PROCESSING
+# This option determines whether or not the NRPE daemon will allow clients
+# to specify arguments to commands that are executed.  This option only works
+# if the daemon was configured with the --enable-command-args configure script
+# option.  
+#
+# *** ENABLING THIS OPTION IS A SECURITY RISK! *** 
+# Read the SECURITY file for information on some of the security implications
+# of enabling this variable.
+#
+# Values: 0=do not allow arguments, 1=allow command arguments
+
+dont_blame_nrpe=1
+
+
+
+# COMMAND PREFIX
+# This option allows you to prefix all commands with a user-defined string.
+# A space is automatically added between the specified prefix string and the
+# command line from the command definition.
+#
+# *** THIS EXAMPLE MAY POSE A POTENTIAL SECURITY RISK, SO USE WITH CAUTION! ***
+# Usage scenario: 
+# Execute restricted commmands using sudo.  For this to work, you need to add
+# the nagios user to your /etc/sudoers.  An example entry for alllowing 
+# execution of the plugins from might be:
+#
+# nagios          ALL=(ALL) NOPASSWD: /usr/lib/nagios/plugins/
+#
+# This lets the nagios user run all commands in that directory (and only them)
+# without asking for a password.  If you do this, make sure you don't give
+# random users write access to that directory or its contents!
+
+# command_prefix=/usr/bin/sudo 
+
+
+
+# DEBUGGING OPTION
+# This option determines whether or not debugging messages are logged to the
+# syslog facility.
+# Values: 0=debugging off, 1=debugging on
+
+debug=0
+
+
+
+# COMMAND TIMEOUT
+# This specifies the maximum number of seconds that the NRPE daemon will
+# allow plugins to finish executing before killing them off.
+
+command_timeout=60
+
+
+
+# WEEK RANDOM SEED OPTION
+# This directive allows you to use SSL even if your system does not have
+# a /dev/random or /dev/urandom (on purpose or because the necessary patches
+# were not applied). The random number generator will be seeded from a file
+# which is either a file pointed to by the environment valiable $RANDFILE
+# or $HOME/.rnd. If neither exists, the pseudo random number generator will
+# be initialized and a warning will be issued.
+# Values: 0=only seed from /dev/[u]random, 1=also seed from weak randomness
+
+#allow_weak_random_seed=1
+
+
+
+# INCLUDE CONFIG FILE
+# This directive allows you to include definitions from an external config file.
+
+#include=<somefile.cfg>
+
+
+
+# INCLUDE CONFIG DIRECTORY
+# This directive allows you to include definitions from config files (with a
+# .cfg extension) in one or more directories (with recursion).
+
+#include_dir=<somedirectory>
+#include_dir=<someotherdirectory>
+
+
+
+# COMMAND DEFINITIONS
+# Command definitions that this daemon will run.  Definitions
+# are in the following format:
+#
+# command[<command_name>]=<command_line>
+#
+# When the daemon receives a request to return the results of <command_name>
+# it will execute the command specified by the <command_line> argument.
+#
+# Unlike Nagios, the command line cannot contain macros - it must be
+# typed exactly as it should be executed.
+#
+# Note: Any plugins that are used in the command lines must reside
+# on the machine that this daemon is running on!  The examples below
+# assume that you have plugins installed in a /usr/local/nagios/libexec
+# directory.  Also note that you will have to modify the definitions below
+# to match the argument format the plugins expect.  Remember, these are
+# examples only!
+
+# The following examples use hardcoded command arguments...
+
+#command[check_users]=/usr/lib64/nagios/plugins/check_users -w 5 -c 10
+#command[check_load]=/usr/lib64/nagios/plugins/check_load -w 15,10,5 -c 30,25,20
+#command[check_disk1]=/usr/lib64/nagios/plugins/check_disk -w 20 -c 10 -p /dev/hda1
+#command[check_disk2]=/usr/lib64/nagios/plugins/check_disk -w 20 -c 10 -p /dev/hdb1
+#command[check_zombie_procs]=/usr/lib64/nagios/plugins/check_procs -w 5 -c 10 -s Z
+#command[check_total_procs]=/usr/lib64/nagios/plugins/check_procs -w 150 -c 200 
+
+# The following examples allow user-supplied arguments and can
+# only be used if the NRPE daemon was compiled with support for 
+# command arguments *AND* the dont_blame_nrpe directive in this
+# config file is set to '1'...
+
+command[check_users]=/usr/lib64/nagios/plugins/check_users -w $ARG1$ -c $ARG2$
+command[check_load]=/usr/lib64/nagios/plugins/check_load -w $ARG1$ -c $ARG2$
+command[check_disk]=/usr/lib64/nagios/plugins/check_disk -w $ARG1$ -c $ARG2$ -A -i ^/mnt
+command[check_disk_p]=/usr/lib64/nagios/plugins/check_disk -w $ARG1$ -c $ARG2$ -p $ARG3$
+command[check_procs]=/usr/lib64/nagios/plugins/check_procs -w $ARG1$ -c $ARG2$
+command[check_procs_C]=/usr/lib64/nagios/plugins/check_procs -w $ARG1$ -c $ARG2$ -C $ARG3$
+command[check_procs_P]=/usr/lib64/nagios/plugins/check_procs -w $ARG1$ -c $ARG2$ -P $ARG3$
+command[check_procs_m]=/usr/lib64/nagios/plugins/check_procs -w $ARG1$ -c $ARG2$ -m $ARG3$
+command[check_procs_s]=/usr/lib64/nagios/plugins/check_procs -w $ARG1$ -c $ARG2$ -s $ARG3$
+command[check_procs_u]=/usr/lib64/nagios/plugins/check_procs -w $ARG1$ -c $ARG2$ -u $ARG3$
+command[check_procs_z]=/usr/lib64/nagios/plugins/check_procs -w $ARG1$ -c $ARG2$ -z $ARG3$
+command[check_afs]=/etc/nagios/check_afs
+command[check_cron_working]=/etc/nagios/check_cron_working
Index: /tags/fc9-eol/server/fedora/config/etc/nscd.conf
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/nscd.conf	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/nscd.conf	(revision 1257)
@@ -0,0 +1,80 @@
+#
+# /etc/nscd.conf
+#
+# An example Name Service Cache config file.  This file is needed by nscd.
+#
+# Legal entries are:
+#
+#	logfile			<file>
+#	debug-level		<level>
+#	threads			<initial #threads to use>
+#	max-threads		<maximum #threads to use>
+#	server-user             <user to run server as instead of root>
+#		server-user is ignored if nscd is started with -S parameters
+#       stat-user               <user who is allowed to request statistics>
+#	reload-count		unlimited|<number>
+#	paranoia		<yes|no>
+#	restart-interval	<time in seconds>
+#
+#       enable-cache		<service> <yes|no>
+#	positive-time-to-live	<service> <time in seconds>
+#	negative-time-to-live   <service> <time in seconds>
+#       suggested-size		<service> <prime number>
+#	check-files		<service> <yes|no>
+#	persistent		<service> <yes|no>
+#	shared			<service> <yes|no>
+#	max-db-size		<service> <number bytes>
+#	auto-propagate		<service> <yes|no>
+#
+# Currently supported cache names (services): passwd, group, hosts, services
+#
+
+
+	logfile			/var/log/nscd.log
+	threads			32
+	max-threads		128
+	server-user		nscd
+#	stat-user		nocpulse
+	debug-level		0
+#31
+#	reload-count		5
+#	paranoia		yes
+#	restart-interval	3600
+
+	enable-cache		passwd		yes
+	positive-time-to-live	passwd		120
+	negative-time-to-live	passwd		5
+	suggested-size		passwd		1999
+	check-files		passwd		yes
+	persistent		passwd		no
+	shared			passwd		yes
+	max-db-size		passwd		33554432
+	auto-propagate		passwd		yes
+
+	enable-cache		group		yes
+	positive-time-to-live	group		3600
+	negative-time-to-live	group		5
+	suggested-size		group		1999
+	check-files		group		yes
+	persistent		group		no
+	shared			group		yes
+	max-db-size		group		33554432
+	auto-propagate		group		yes
+
+	enable-cache		hosts		no
+	positive-time-to-live	hosts		3600
+	negative-time-to-live	hosts		20
+	suggested-size		hosts		1999
+	check-files		hosts		yes
+	persistent		hosts		yes
+	shared			hosts		yes
+	max-db-size		hosts		33554432
+
+	enable-cache		services	no
+	positive-time-to-live	services	28800
+	negative-time-to-live	services	20
+	suggested-size		services	211
+	check-files		services	yes
+	persistent		services	yes
+	shared			services	yes
+	max-db-size		services	33554432
Index: /tags/fc9-eol/server/fedora/config/etc/nss-ldapd.conf
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/nss-ldapd.conf	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/nss-ldapd.conf	(revision 1257)
@@ -0,0 +1,138 @@
+# This is the configuration file for the LDAP nameservice
+# switch library's nslcd daemon. It configures the mapping
+# between NSS names (see /etc/nsswitch.conf) and LDAP
+# information in the directory.
+# See the manual page nss-ldapd.conf(5) for more information.
+
+# The uri pointing to the LDAP server to use for name lookups.
+# Mulitple entries may be specified. The address that is used
+# here should be resolvable without using LDAP (obviously).
+#uri ldap://127.0.0.1/
+#uri ldaps://127.0.0.1/
+#uri ldapi://%2fvar%2frun%2fldapi_sock/
+# Note: %2f encodes the '/' used as directory separator
+uri ldapi://%2fvar%2frun%2fdirsrv%2fslapd-scripts.socket/
+
+# The LDAP version to use (defaults to 3
+# if supported by client library)
+#ldap_version 3
+
+# The distinguished name of the search base.
+base dc=scripts,dc=mit,dc=edu
+
+# The distinguished name to bind to the server with.
+# Optional: default is to bind anonymously.
+#binddn cn=proxyuser,dc=padl,dc=com
+
+# The credentials to bind with.
+# Optional: default is no credentials.
+#bindpw secret
+
+# The default search scope.
+#scope sub
+#scope one
+#scope base
+
+# Customize certain database lookups.
+base   group  ou=Groups,dc=scripts,dc=mit,dc=edu
+base   passwd ou=People,dc=scripts,dc=mit,dc=edu
+#base   shadow ou=People,dc=example,dc=net
+#scope  group  onelevel
+#scope  hosts  sub
+
+# Bind/connect timelimit.
+bind_timelimit 120
+
+# Search timelimit.
+timelimit 120
+
+# Idle timelimit. nslcd will close connections if the
+# server has not been contacted for the number of seconds.
+idle_timelimit 3600
+
+# Netscape SDK LDAPS
+#ssl on
+
+# Netscape SDK SSL options
+#sslpath /etc/ssl/certs
+
+# OpenLDAP SSL mechanism
+# start_tls mechanism uses the normal LDAP port, LDAPS typically 636
+#ssl start_tls
+#ssl on
+
+# OpenLDAP SSL options
+# Require and verify server certificate (yes/no)
+# Default is to use libldap's default behavior, which can be configured in
+# /etc/openldap/ldap.conf using the TLS_REQCERT setting.  The default for
+# OpenLDAP 2.0 and earlier is "no", for 2.1 and later is "yes".
+#tls_checkpeer yes
+
+# CA certificates for server certificate verification
+# At least one of these are required if tls_checkpeer is "yes"
+#tls_cacertdir /etc/ssl/certs
+#tls_cacertfile /etc/ssl/ca.cert
+
+# Seed the PRNG if /dev/urandom is not provided
+#tls_randfile /var/run/egd-pool
+
+# SSL cipher suite
+# See man ciphers for syntax
+#tls_ciphers TLSv1
+
+# Client certificate and key
+# Use these, if your server requires client authentication.
+#tls_cert
+#tls_key
+
+# NDS mappings
+#map group uniqueMember member
+
+# Mappings for Services for UNIX 3.5
+#filter passwd (objectClass=User)
+#map    passwd uid              msSFU30Name
+#map    passwd userPassword     msSFU30Password
+#map    passwd homeDirectory    msSFU30HomeDirectory
+#map    passwd homeDirectory    msSFUHomeDirectory
+#filter shadow (objectClass=User)
+#map    shadow uid              msSFU30Name
+#map    shadow userPassword     msSFU30Password
+#filter group  (objectClass=Group)
+#map    group  uniqueMember     msSFU30PosixMember
+
+# Mappings for Services for UNIX 2.0
+#filter passwd (objectClass=User)
+#map    passwd uid              msSFUName
+#map    passwd userPassword     msSFUPassword
+#map    passwd homeDirectory    msSFUHomeDirectory
+#map    passwd cn               msSFUName
+#filter shadow (objectClass=User)
+#map    shadow uid              msSFUName
+#map    shadow userPassword     msSFUPassword
+#map    shadow shadowLastChange pwdLastSet
+#filter group  (objectClass=Group)
+#map    group  uniqueMember     posixMember
+
+# Mappings for Active Directory
+#pagesize 1000
+#referrals off
+#filter passwd (&(objectClass=user)(!(objectClass=computer))(uidNumber=*)(unixHomeDirectory=*))
+#map    passwd uid              sAMAccountName
+#map    passwd homeDirectory    unixHomeDirectory
+#map    passwd gecos            displayName
+#filter shadow (&(objectClass=user)(!(objectClass=computer))(uidNumber=*)(unixHomeDirectory=*))
+#map    shadow uid              sAMAccountName
+#map    shadow shadowLastChange pwdLastSet
+#filter group  (objectClass=group)
+#map    group  uniqueMember     member
+
+# Mappings for AIX SecureWay
+#filter passwd (objectClass=aixAccount)
+#map    passwd uid              userName
+#map    passwd userPassword     passwordChar
+#map    passwd uidNumber        uid
+#map    passwd gidNumber        gid
+#filter group  (objectClass=aixAccessGroup)
+#map    group  cn               groupName
+#map    group  uniqueMember     member
+#map    group  gidNumber        gid
Index: /tags/fc9-eol/server/fedora/config/etc/nsswitch.conf
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/nsswitch.conf	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/nsswitch.conf	(revision 1257)
@@ -0,0 +1,74 @@
+#
+# /etc/nsswitch.conf
+#
+# An example Name Service Switch config file. This file should be
+# sorted with the most-used services at the beginning.
+#
+# The entry '[NOTFOUND=return]' means that the search for an
+# entry should stop if the search in the previous entry turned
+# up nothing. Note that if the search failed due to some other reason
+# (like no NIS server responding) then the search continues with the
+# next entry.
+#
+# Legal entries are:
+#
+#	nisplus or nis+		Use NIS+ (NIS version 3)
+#	nis or yp		Use NIS (NIS version 2), also called YP
+#	dns			Use DNS (Domain Name Service)
+#	files			Use the local files
+#	db			Use the local database (.db) files
+#	compat			Use NIS on compat mode
+#	hesiod			Use Hesiod for user lookups
+#	[NOTFOUND=return]	Stop searching if not found so far
+#
+
+# To use db, put the "db" in front of "files" for entries you want to be
+# looked up first in the databases
+#
+# Example:
+#passwd:    db files nisplus nis
+#shadow:    db files nisplus nis
+#group:     db files nisplus nis
+
+# With nss_nonlocal:
+passwd:     files nonlocal
+passwd_nonlocal: ldap
+shadow:     files
+group:      files nonlocal
+group_nonlocal: ldap
+
+## Without nss_nonlocal:
+#passwd:	  files ldap
+#group:	  files ldap
+#shadow:     files
+#passwd: files ldap
+#group: files ldap
+
+#hosts:     db files nisplus nis dns
+hosts:      files dns
+#hosts:      files mdns4_minimal [NOTFOUND=return] dns
+
+# Example - obey only what nisplus tells us...
+#services:   nisplus [NOTFOUND=return] files
+#networks:   nisplus [NOTFOUND=return] files
+#protocols:  nisplus [NOTFOUND=return] files
+#rpc:        nisplus [NOTFOUND=return] files
+#ethers:     nisplus [NOTFOUND=return] files
+#netmasks:   nisplus [NOTFOUND=return] files     
+
+bootparams: nisplus [NOTFOUND=return] files
+
+ethers:     files
+netmasks:   files
+networks:   files
+protocols:  files
+rpc:        files
+services:   files
+
+netgroup:   nisplus
+
+publickey:  nisplus
+
+automount:  files nisplus
+aliases:    files nisplus
+
Index: /tags/fc9-eol/server/fedora/config/etc/ntp.conf
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/ntp.conf	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/ntp.conf	(revision 1257)
@@ -0,0 +1,8 @@
+restrict default kod nomodify notrap nopeer noquery
+restrict 127.0.0.1
+server time.mit.edu
+server tick.mit.edu
+server	127.127.1.0
+fudge	127.127.1.0 stratum 10
+driftfile /var/lib/ntp/drift
+keys /etc/ntp/keys
Index: /tags/fc9-eol/server/fedora/config/etc/openafs/CellAlias
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/openafs/CellAlias	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/openafs/CellAlias	(revision 1257)
@@ -0,0 +1,15 @@
+#
+# This file can be used to specify AFS cell aliases, one per line.
+# The syntax to specify "my" as an alias for "my.cell.name" is:
+#
+#   my.cell.name	my
+
+athena.mit.edu		athena
+csail.mit.edu		csail
+dev.mit.edu		dev
+lees.mit.edu		lees
+net.mit.edu		net
+ops.mit.edu		ops
+sipb.mit.edu		sipb
+andrew.cmu.edu		andrew
+acpub.duke.edu		acpub
Index: /tags/fc9-eol/server/fedora/config/etc/openafs/ThisCell
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/openafs/ThisCell	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/openafs/ThisCell	(revision 1257)
@@ -0,0 +1,1 @@
+athena.mit.edu
Index: /tags/fc9-eol/server/fedora/config/etc/pam.d/crond
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/pam.d/crond	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/pam.d/crond	(revision 1257)
@@ -0,0 +1,13 @@
+#
+# The PAM configuration file for the cron daemon
+#
+#
+auth	   sufficient pam_rootok.so
+auth       required   pam_env.so
+auth       include    system-auth
+account    required   pam_access.so
+account    include    system-auth
+session    required   pam_loginuid.so
+session    [default=1 success=ignore] pam_succeed_if.so user notin root quiet
+session    required   pam_env.so envfile=/etc/environment.cron
+session    include    system-auth
Index: /tags/fc9-eol/server/fedora/config/etc/pam.d/sshd
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/pam.d/sshd	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/pam.d/sshd	(revision 1257)
@@ -0,0 +1,23 @@
+#%PAM-1.0
+# Authentication modules
+
+# If their user exists (success),
+auth	[success=ignore ignore=ignore default=1]	pam_succeed_if.so uid >= 0
+# print the "You don't have tickets" error:
+auth	[success=die ignore=reset default=die]	pam_echo.so file=/etc/issue.net.no_tkt
+# else print the "your account doesn't exist" error:
+auth	[success=die ignore=reset default=die]	pam_echo.so file=/etc/issue.net.no_user
+
+# Set environment variables:
+auth       required     pam_env.so
+# Use Unix authentication and succeed immediately (sufficient):
+auth       sufficient   pam_unix.so try_first_pass
+# If they somehow slipped through, deny:
+auth	   required	pam_deny.so
+
+account    required     pam_nologin.so
+account    include      system-auth
+password   include      system-auth
+session    optional     pam_keyinit.so force revoke
+session    include      system-auth
+session    required     pam_loginuid.so
Index: /tags/fc9-eol/server/fedora/config/etc/php.d/_scripts.ini
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/php.d/_scripts.ini	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/php.d/_scripts.ini	(revision 1257)
@@ -0,0 +1,3 @@
+zend_extension = /usr/lib64/php/modules/scripts.so
+cgi.fix_pathinfo=1
+memory_limit = 1024M
Index: /tags/fc9-eol/server/fedora/config/etc/php.d/dom.ini
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/php.d/dom.ini	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/php.d/dom.ini	(revision 1257)
@@ -0,0 +1,1 @@
+extension = dom.so
Index: /tags/fc9-eol/server/fedora/config/etc/php.d/mysql.ini
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/php.d/mysql.ini	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/php.d/mysql.ini	(revision 1257)
@@ -0,0 +1,1 @@
+extension = mysql.so
Index: /tags/fc9-eol/server/fedora/config/etc/php.d/tidy.ini
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/php.d/tidy.ini	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/php.d/tidy.ini	(revision 1257)
@@ -0,0 +1,1 @@
+
Index: /tags/fc9-eol/server/fedora/config/etc/php.ini
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/php.ini	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/php.ini	(revision 1257)
@@ -0,0 +1,180 @@
+[PHP]
+engine = On
+zend.ze1_compatibility_mode = Off
+short_open_tag = On
+asp_tags = Off
+precision    =  14
+y2k_compliance = On
+output_buffering = 4096
+zlib.output_compression = Off
+implicit_flush = Off
+unserialize_callback_func=
+serialize_precision = 100
+allow_call_time_pass_reference = Off
+safe_mode = Off
+safe_mode_gid = Off
+safe_mode_include_dir =
+safe_mode_exec_dir =
+safe_mode_allowed_env_vars = PHP_
+safe_mode_protected_env_vars = LD_LIBRARY_PATH
+disable_functions =
+disable_classes =
+expose_php = On
+max_execution_time = 30     ; Maximum execution time of each script, in seconds
+max_input_time = 60	; Maximum amount of time each script may spend parsing request data
+memory_limit = 1024M      ; Maximum amount of memory a script may consume (16MB)
+error_reporting  =  E_ALL
+display_errors = Off
+display_startup_errors = Off
+log_errors = On
+log_errors_max_len = 1024
+ignore_repeated_errors = Off
+ignore_repeated_source = Off
+report_memleaks = On
+track_errors = Off
+variables_order = "EGPCS"
+register_globals = Off
+register_long_arrays = Off
+register_argc_argv = Off
+auto_globals_jit = On
+post_max_size = 8M
+magic_quotes_gpc = Off
+magic_quotes_runtime = Off
+magic_quotes_sybase = Off
+auto_prepend_file =
+auto_append_file =
+default_mimetype = "text/html"
+doc_root =
+user_dir =
+extension_dir = "/usr/lib64/php/modules"
+enable_dl = On
+file_uploads = On
+upload_max_filesize = 2M
+allow_url_fopen = On
+allow_url_include = Off
+default_socket_timeout = 60
+[Date]
+[filter]
+[iconv]
+[sqlite]
+[xmlrpc]
+[Pcre]
+[Syslog]
+define_syslog_variables  = Off
+[mail function]
+smtp_port = 25
+sendmail_path = /usr/sbin/sendmail -t -i
+[SQL]
+sql.safe_mode = Off
+[ODBC]
+odbc.allow_persistent = On
+odbc.check_persistent = On
+odbc.max_persistent = -1
+odbc.max_links = -1
+odbc.defaultlrl = 4096
+odbc.defaultbinmode = 1
+[MySQL]
+mysql.allow_persistent = On
+mysql.max_persistent = -1
+mysql.max_links = -1
+mysql.default_port =
+mysql.default_socket =
+mysql.default_host = 'sql.mit.edu'
+mysql.default_user =
+mysql.default_password =
+mysql.connect_timeout = 60
+mysql.trace_mode = Off
+[MySQLi]
+mysqli.max_links = -1
+mysqli.default_port = 3306
+mysqli.default_socket =
+mysqli.default_host =
+mysqli.default_user =
+mysqli.default_pw =
+mysqli.reconnect = Off
+[mSQL]
+msql.allow_persistent = On
+msql.max_persistent = -1
+msql.max_links = -1
+[PostgresSQL]
+pgsql.allow_persistent = On
+pgsql.auto_reset_persistent = Off
+pgsql.max_persistent = -1
+pgsql.max_links = -1
+pgsql.ignore_notice = 0
+pgsql.log_notice = 0
+[Sybase]
+sybase.allow_persistent = On
+sybase.max_persistent = -1
+sybase.max_links = -1
+sybase.min_error_severity = 10
+sybase.min_message_severity = 10
+sybase.compatability_mode = Off
+[Sybase-CT]
+sybct.allow_persistent = On
+sybct.max_persistent = -1
+sybct.max_links = -1
+sybct.min_server_severity = 10
+sybct.min_client_severity = 10
+[bcmath]
+bcmath.scale = 0
+[browscap]
+[Informix]
+ifx.default_host =
+ifx.default_user =
+ifx.default_password =
+ifx.allow_persistent = On
+ifx.max_persistent = -1
+ifx.max_links = -1
+ifx.textasvarchar = 0
+ifx.byteasvarchar = 0
+ifx.charasvarchar = 0
+ifx.blobinfile = 0
+ifx.nullformat = 0
+[Session]
+session.save_handler = files
+session.save_path = "/tmp/sessions"
+session.use_cookies = 1
+session.name = PHPSESSID
+session.auto_start = 0
+session.cookie_lifetime = 0
+session.cookie_path = /
+session.cookie_domain =
+session.cookie_httponly = 
+session.serialize_handler = php
+session.gc_probability = 1
+session.gc_divisor     = 1000
+session.gc_maxlifetime = 1440
+session.bug_compat_42 = 0
+session.bug_compat_warn = 1
+session.referer_check =
+session.entropy_length = 0
+session.entropy_file =
+session.cache_limiter = nocache
+session.cache_expire = 180
+session.use_trans_sid = 0
+session.hash_function = 0
+session.hash_bits_per_character = 5
+url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=fakeentry"
+[MSSQL]
+mssql.allow_persistent = On
+mssql.max_persistent = -1
+mssql.max_links = -1
+mssql.min_error_severity = 10
+mssql.min_message_severity = 10
+mssql.compatability_mode = Off
+mssql.secure_connection = Off
+[Assertion]
+[COM]
+[mbstring]
+[FrontBase]
+[gd]
+[exif]
+[Tidy]
+tidy.clean_output = Off
+[soap]
+soap.wsdl_cache_enabled=1
+soap.wsdl_cache_dir="/tmp"
+soap.wsdl_cache_ttl=86400
+[cgi]
+cgi.fix_pathinfo = 1
Index: /tags/fc9-eol/server/fedora/config/etc/pki/tls/certs/axo.pem
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/pki/tls/certs/axo.pem	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/pki/tls/certs/axo.pem	(revision 1257)
@@ -0,0 +1,71 @@
+From mitcert@MIT.EDU Thu Aug 28 22:18:38 2008
+Date: Thu, 28 Aug 2008 22:18:27 -0400 (EDT)
+From: mitcert@MIT.EDU
+To: geofft@mit.edu
+Subject: Certificate request for axo.mit.edu  [help.mit.edu #695259]
+
+Certificate:
+    Data:
+        Version: 3 (0x2)
+        Serial Number: 2948 (0xb84)
+        Signature Algorithm: sha1WithRSAEncryption
+        Issuer: C=US, ST=Massachusetts, O=Massachusetts Institute of Technology, OU=MIT Certification Authority
+        Validity
+            Not Before: Aug 27 16:00:00 2008 GMT
+            Not After : Aug 27 16:00:00 2009 GMT
+        Subject: C=US, ST=Massachusetts, L=Cambridge, O=Massachusetts Institute of Technology, OU=Student Information Processing Board, CN=axo.mit.edu/Email=scripts@mit.edu
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (1024 bit)
+                Modulus (1024 bit):
+                    00:b5:3e:21:4d:c1:89:6b:01:8c:47:80:fe:b3:37:
+                    27:76:f8:52:41:e6:a2:3d:4b:76:78:e5:f2:66:3c:
+                    0f:b1:ad:fb:97:8f:2e:a2:b6:53:d3:b6:0e:e2:66:
+                    f9:b9:0b:b7:ce:b4:d5:f5:1c:1f:6f:22:7d:48:f5:
+                    6d:f0:16:cd:8e:48:79:d1:14:4a:14:2f:2f:f8:c4:
+                    bd:1d:87:cf:7d:8b:5c:77:ad:58:24:b0:0e:a1:6d:
+                    d6:0a:c7:d8:bc:2f:67:65:c8:5d:d8:d8:31:c2:67:
+                    4b:4a:f4:a1:a5:54:82:af:cb:34:08:2a:04:7f:8e:
+                    7c:4c:b7:db:dc:6a:8a:5d:81
+                Exponent: 65537 (0x10001)
+        X509v3 extensions:
+            X509v3 Basic Constraints: 
+                CA:FALSE
+            Netscape Cert Type: 
+                SSL Client, SSL Server, S/MIME
+            X509v3 Extended Key Usage: 
+                TLS Web Server Authentication, E-mail Protection, TLS Web Client Authentication
+            X509v3 Key Usage: 
+                Digital Signature, Non Repudiation, Key Encipherment
+            X509v3 Subject Key Identifier: 
+                54:11:7C:09:55:44:1C:94:45:A9:A2:76:46:2B:2C:24:26:6A:44:E8
+    Signature Algorithm: sha1WithRSAEncryption
+        b3:1f:5f:c3:f0:aa:a3:12:5a:d6:d9:94:bd:fc:84:f1:6e:99:
+        dc:1c:33:6c:37:51:b7:c6:53:da:6f:31:d9:ce:6f:e6:3b:c7:
+        42:62:a0:26:f4:63:de:7d:ff:a9:27:53:b9:cd:0b:d8:46:19:
+        ea:9e:c1:24:0b:c7:59:7e:99:82:84:1b:91:5e:e5:a8:de:2c:
+        0c:84:15:6a:3b:0c:5e:6c:dd:16:89:56:35:f5:a9:9a:26:c6:
+        8d:ac:73:ab:8e:3d:79:7a:05:9e:73:5f:5d:91:d3:3c:58:be:
+        12:ef:8a:f5:93:33:01:b7:50:24:da:3b:f0:5e:89:3b:95:07:
+        85:9b
+-----BEGIN CERTIFICATE-----
+MIIDNjCCAp+gAwIBAgICC4QwDQYJKoZIhvcNAQEFBQAwezELMAkGA1UEBhMCVVMx
+FjAUBgNVBAgTDU1hc3NhY2h1c2V0dHMxLjAsBgNVBAoTJU1hc3NhY2h1c2V0dHMg
+SW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kxJDAiBgNVBAsTG01JVCBDZXJ0aWZpY2F0
+aW9uIEF1dGhvcml0eTAeFw0wODA4MjcxNjAwMDBaFw0wOTA4MjcxNjAwMDBaMIHO
+MQswCQYDVQQGEwJVUzEWMBQGA1UECBMNTWFzc2FjaHVzZXR0czESMBAGA1UEBxMJ
+Q2FtYnJpZGdlMS4wLAYDVQQKEyVNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBU
+ZWNobm9sb2d5MS0wKwYDVQQLEyRTdHVkZW50IEluZm9ybWF0aW9uIFByb2Nlc3Np
+bmcgQm9hcmQxFDASBgNVBAMTC2F4by5taXQuZWR1MR4wHAYJKoZIhvcNAQkBFg9z
+Y3JpcHRzQG1pdC5lZHUwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALU+IU3B
+iWsBjEeA/rM3J3b4UkHmoj1Ldnjl8mY8D7Gt+5ePLqK2U9O2DuJm+bkLt8601fUc
+H28ifUj1bfAWzY5IedEUShQvL/jEvR2Hz32LXHetWCSwDqFt1grH2LwvZ2XIXdjY
+McJnS0r0oaVUgq/LNAgqBH+OfEy329xqil2BAgMBAAGjdTBzMAkGA1UdEwQCMAAw
+EQYJYIZIAYb4QgEBBAQDAgXgMCcGA1UdJQQgMB4GCCsGAQUFBwMBBggrBgEFBQcD
+BAYIKwYBBQUHAwIwCwYDVR0PBAQDAgXgMB0GA1UdDgQWBBRUEXwJVUQclEWponZG
+KywkJmpE6DANBgkqhkiG9w0BAQUFAAOBgQCzH1/D8KqjElrW2ZS9/ITxbpncHDNs
+N1G3xlPabzHZzm/mO8dCYqAm9GPeff+pJ1O5zQvYRhnqnsEkC8dZfpmChBuRXuWo
+3iwMhBVqOwxebN0WiVY19amaJsaNrHOrjj15egWec19dkdM8WL4S74r1kzMBt1Ak
+2jvwXok7lQeFmw==
+-----END CERTIFICATE-----
+
Index: /tags/fc9-eol/server/fedora/config/etc/pki/tls/certs/barnowl.pem
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/pki/tls/certs/barnowl.pem	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/pki/tls/certs/barnowl.pem	(revision 1257)
@@ -0,0 +1,71 @@
+From mitcert@MIT.EDU Tue Nov 18 11:50:00 2008
+Date: Tue, 18 Nov 2008 11:46:18 -0500 (EST)
+From: mitcert@MIT.EDU
+To: geofft@mit.edu
+Subject: CSR for scripts virtual host: barnowl.mit.edu  [help.mit.edu #754402]
+
+Certificate:
+    Data:
+        Version: 3 (0x2)
+        Serial Number: 3122 (0xc32)
+        Signature Algorithm: sha1WithRSAEncryption
+        Issuer: C=US, ST=Massachusetts, O=Massachusetts Institute of Technology, OU=MIT Certification Authority
+        Validity
+            Not Before: Nov 16 17:00:00 2008 GMT
+            Not After : Nov 16 17:00:00 2009 GMT
+        Subject: C=US, ST=Massachusetts, L=Cambridge, O=Massachusetts Institute of Technology, OU=Student Information Processing Board, CN=barnowl.mit.edu/Email=scripts@mit.edu
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (1024 bit)
+                Modulus (1024 bit):
+                    00:b5:3e:21:4d:c1:89:6b:01:8c:47:80:fe:b3:37:
+                    27:76:f8:52:41:e6:a2:3d:4b:76:78:e5:f2:66:3c:
+                    0f:b1:ad:fb:97:8f:2e:a2:b6:53:d3:b6:0e:e2:66:
+                    f9:b9:0b:b7:ce:b4:d5:f5:1c:1f:6f:22:7d:48:f5:
+                    6d:f0:16:cd:8e:48:79:d1:14:4a:14:2f:2f:f8:c4:
+                    bd:1d:87:cf:7d:8b:5c:77:ad:58:24:b0:0e:a1:6d:
+                    d6:0a:c7:d8:bc:2f:67:65:c8:5d:d8:d8:31:c2:67:
+                    4b:4a:f4:a1:a5:54:82:af:cb:34:08:2a:04:7f:8e:
+                    7c:4c:b7:db:dc:6a:8a:5d:81
+                Exponent: 65537 (0x10001)
+        X509v3 extensions:
+            X509v3 Basic Constraints: 
+                CA:FALSE
+            Netscape Cert Type: 
+                SSL Client, SSL Server, S/MIME
+            X509v3 Extended Key Usage: 
+                TLS Web Server Authentication, E-mail Protection, TLS Web Client Authentication
+            X509v3 Key Usage: 
+                Digital Signature, Non Repudiation, Key Encipherment
+            X509v3 Subject Key Identifier: 
+                54:11:7C:09:55:44:1C:94:45:A9:A2:76:46:2B:2C:24:26:6A:44:E8
+    Signature Algorithm: sha1WithRSAEncryption
+        ae:bb:eb:52:6e:fb:49:27:49:f9:3b:1e:d3:c4:1b:9f:3b:99:
+        37:f4:a8:f5:51:bb:64:dd:20:56:3c:42:40:56:85:33:ec:2b:
+        01:fc:d5:65:f2:9b:e9:b5:96:8f:b7:15:da:52:54:1c:63:60:
+        07:f8:5d:2c:28:19:ad:17:f4:26:ec:82:9b:df:86:9c:a0:eb:
+        25:d7:f0:3e:df:78:3a:42:8a:96:f1:e9:b8:ef:9f:34:df:54:
+        58:cc:c4:46:be:74:48:fe:56:62:76:58:19:0d:f3:89:72:8b:
+        df:fb:82:d7:62:7a:bb:a3:45:88:3f:9b:c6:9a:06:82:f8:e8:
+        7f:24
+-----BEGIN CERTIFICATE-----
+MIIDOjCCAqOgAwIBAgICDDIwDQYJKoZIhvcNAQEFBQAwezELMAkGA1UEBhMCVVMx
+FjAUBgNVBAgTDU1hc3NhY2h1c2V0dHMxLjAsBgNVBAoTJU1hc3NhY2h1c2V0dHMg
+SW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kxJDAiBgNVBAsTG01JVCBDZXJ0aWZpY2F0
+aW9uIEF1dGhvcml0eTAeFw0wODExMTYxNzAwMDBaFw0wOTExMTYxNzAwMDBaMIHS
+MQswCQYDVQQGEwJVUzEWMBQGA1UECBMNTWFzc2FjaHVzZXR0czESMBAGA1UEBxMJ
+Q2FtYnJpZGdlMS4wLAYDVQQKEyVNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBU
+ZWNobm9sb2d5MS0wKwYDVQQLEyRTdHVkZW50IEluZm9ybWF0aW9uIFByb2Nlc3Np
+bmcgQm9hcmQxGDAWBgNVBAMTD2Jhcm5vd2wubWl0LmVkdTEeMBwGCSqGSIb3DQEJ
+ARYPc2NyaXB0c0BtaXQuZWR1MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC1
+PiFNwYlrAYxHgP6zNyd2+FJB5qI9S3Z45fJmPA+xrfuXjy6itlPTtg7iZvm5C7fO
+tNX1HB9vIn1I9W3wFs2OSHnRFEoULy/4xL0dh899i1x3rVgksA6hbdYKx9i8L2dl
+yF3Y2DHCZ0tK9KGlVIKvyzQIKgR/jnxMt9vcaopdgQIDAQABo3UwczAJBgNVHRME
+AjAAMBEGCWCGSAGG+EIBAQQEAwIF4DAnBgNVHSUEIDAeBggrBgEFBQcDAQYIKwYB
+BQUHAwQGCCsGAQUFBwMCMAsGA1UdDwQEAwIF4DAdBgNVHQ4EFgQUVBF8CVVEHJRF
+qaJ2RissJCZqROgwDQYJKoZIhvcNAQEFBQADgYEArrvrUm77SSdJ+Tse08QbnzuZ
+N/So9VG7ZN0gVjxCQFaFM+wrAfzVZfKb6bWWj7cV2lJUHGNgB/hdLCgZrRf0JuyC
+m9+GnKDrJdfwPt94OkKKlvHpuO+fNN9UWMzERr50SP5WYnZYGQ3ziXKL3/uC12J6
+u6NFiD+bxpoGgvjofyQ=
+-----END CERTIFICATE-----
+
Index: /tags/fc9-eol/server/fedora/config/etc/pki/tls/certs/bc.pem
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/pki/tls/certs/bc.pem	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/pki/tls/certs/bc.pem	(revision 1257)
@@ -0,0 +1,75 @@
+Date: Mon, 20 Apr 2009 11:14:29 EDT
+To: mitchb@mit.edu
+From: mitcert@MIT.EDU
+Subject: CSR for bc.mit.edu [help.mit.edu #861464]
+
+Certificate:
+    Data:
+        Version: 3 (0x2)
+        Serial Number: 3447 (0xd77)
+        Signature Algorithm: sha1WithRSAEncryption
+        Issuer: C=US, ST=Massachusetts, O=Massachusetts Institute of Technology,
+ OU=MIT Certification Authority
+        Validity
+            Not Before: Apr 18 16:00:00 2009 GMT
+            Not After : Apr 15 16:00:00 2010 GMT
+        Subject: C=US, ST=Massachusetts, L=Cambridge, O=Massachusetts Institute 
+of Technology, OU=Student Information Processing Board, CN=bc.mit.edu/Email=scri
+pts@mit.edu
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (1024 bit)
+                Modulus (1024 bit):
+                    00:b5:3e:21:4d:c1:89:6b:01:8c:47:80:fe:b3:37:
+                    27:76:f8:52:41:e6:a2:3d:4b:76:78:e5:f2:66:3c:
+                    0f:b1:ad:fb:97:8f:2e:a2:b6:53:d3:b6:0e:e2:66:
+                    f9:b9:0b:b7:ce:b4:d5:f5:1c:1f:6f:22:7d:48:f5:
+                    6d:f0:16:cd:8e:48:79:d1:14:4a:14:2f:2f:f8:c4:
+                    bd:1d:87:cf:7d:8b:5c:77:ad:58:24:b0:0e:a1:6d:
+                    d6:0a:c7:d8:bc:2f:67:65:c8:5d:d8:d8:31:c2:67:
+                    4b:4a:f4:a1:a5:54:82:af:cb:34:08:2a:04:7f:8e:
+                    7c:4c:b7:db:dc:6a:8a:5d:81
+                Exponent: 65537 (0x10001)
+        X509v3 extensions:
+            X509v3 Basic Constraints: 
+                CA:FALSE
+            Netscape Cert Type: 
+                SSL Client, SSL Server, S/MIME
+            X509v3 Extended Key Usage: 
+                TLS Web Server Authentication, E-mail Protection, TLS Web Client
+ Authentication
+            X509v3 Key Usage: 
+                Digital Signature, Non Repudiation, Key Encipherment
+            X509v3 Subject Key Identifier: 
+                54:11:7C:09:55:44:1C:94:45:A9:A2:76:46:2B:2C:24:26:6A:44:E8
+    Signature Algorithm: sha1WithRSAEncryption
+        68:52:0f:94:ae:ee:30:9a:98:5a:4b:e8:9b:42:b5:66:16:bc:
+        65:0a:91:6c:92:5a:d4:58:80:f4:d0:8e:27:88:31:ef:7e:23:
+        e5:84:c7:53:07:b0:e0:34:94:4d:bd:7a:33:57:1c:29:3c:ee:
+        3f:5c:ad:98:f9:1b:58:97:49:8a:2d:22:62:74:d6:f6:38:85:
+        cc:eb:de:88:c3:ec:d6:4c:49:52:96:fd:3a:ca:0b:45:f1:56:
+        37:d2:d4:8b:7c:0f:4c:7c:4a:85:c0:71:79:66:33:78:e7:e9:
+        be:ca:0e:12:38:0b:5a:fe:48:30:22:1a:91:f4:a0:76:d6:9a:
+        4e:f8
+
+-----BEGIN CERTIFICATE-----
+MIIDNTCCAp6gAwIBAgICDXcwDQYJKoZIhvcNAQEFBQAwezELMAkGA1UEBhMCVVMx
+FjAUBgNVBAgTDU1hc3NhY2h1c2V0dHMxLjAsBgNVBAoTJU1hc3NhY2h1c2V0dHMg
+SW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kxJDAiBgNVBAsTG01JVCBDZXJ0aWZpY2F0
+aW9uIEF1dGhvcml0eTAeFw0wOTA0MTgxNjAwMDBaFw0xMDA0MTUxNjAwMDBaMIHN
+MQswCQYDVQQGEwJVUzEWMBQGA1UECBMNTWFzc2FjaHVzZXR0czESMBAGA1UEBxMJ
+Q2FtYnJpZGdlMS4wLAYDVQQKEyVNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBU
+ZWNobm9sb2d5MS0wKwYDVQQLEyRTdHVkZW50IEluZm9ybWF0aW9uIFByb2Nlc3Np
+bmcgQm9hcmQxEzARBgNVBAMTCmJjLm1pdC5lZHUxHjAcBgkqhkiG9w0BCQEWD3Nj
+cmlwdHNAbWl0LmVkdTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAtT4hTcGJ
+awGMR4D+szcndvhSQeaiPUt2eOXyZjwPsa37l48uorZT07YO4mb5uQu3zrTV9Rwf
+byJ9SPVt8BbNjkh50RRKFC8v+MS9HYfPfYtcd61YJLAOoW3WCsfYvC9nZchd2Ngx
+wmdLSvShpVSCr8s0CCoEf458TLfb3GqKXYECAwEAAaN1MHMwCQYDVR0TBAIwADAR
+BglghkgBhvhCAQEEBAMCBeAwJwYDVR0lBCAwHgYIKwYBBQUHAwEGCCsGAQUFBwME
+BggrBgEFBQcDAjALBgNVHQ8EBAMCBeAwHQYDVR0OBBYEFFQRfAlVRByURamidkYr
+LCQmakToMA0GCSqGSIb3DQEBBQUAA4GBAGhSD5Su7jCamFpL6JtCtWYWvGUKkWyS
+WtRYgPTQjieIMe9+I+WEx1MHsOA0lE29ejNXHCk87j9crZj5G1iXSYotImJ01vY4
+hczr3ojD7NZMSVKW/TrKC0XxVjfS1It8D0x8SoXAcXlmM3jn6b7KDhI4C1r+SDAi
+GpH0oHbWmk74
+-----END CERTIFICATE-----
+
Index: /tags/fc9-eol/server/fedora/config/etc/pki/tls/certs/ca.pem
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/pki/tls/certs/ca.pem	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/pki/tls/certs/ca.pem	(revision 1257)
@@ -0,0 +1,20 @@
+-----BEGIN CERTIFICATE-----
+MIIDODCCAqGgAwIBAgIBATANBgkqhkiG9w0BAQUFADBsMQswCQYDVQQGEwJVUzEW
+MBQGA1UECBMNTWFzc2FjaHVzZXR0czEuMCwGA1UEChMlTWFzc2FjaHVzZXR0cyBJ
+bnN0aXR1dGUgb2YgVGVjaG5vbG9neTEVMBMGA1UECxMMQ2xpZW50IENBIHYxMB4X
+DTA2MDYwNzIyMDcyNVoXDTI2MDgwMTIyMDcyNVowbDELMAkGA1UEBhMCVVMxFjAU
+BgNVBAgTDU1hc3NhY2h1c2V0dHMxLjAsBgNVBAoTJU1hc3NhY2h1c2V0dHMgSW5z
+dGl0dXRlIG9mIFRlY2hub2xvZ3kxFTATBgNVBAsTDENsaWVudCBDQSB2MTCBnzAN
+BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwV11Ca4OyWTnlF6FH8z8MwCUa3L5JxuF
+srLsz7arGeTDS39WjWywDgCZM3vOCvOpziGFYzicS7n4JQuy04QuT+6Xdc2bEx7u
+JOhoeTz/VypA4DIwcsv20I63Cgr14aMNz5Ur4KWQjyn6zcgQ276fnM/cJD3wzAzX
+2fU9mF/1LFECAwEAAaOB6TCB5jAdBgNVHQ4EFgQUARibj0xtym66P6slAv0eCMB6
+wo8wgZYGA1UdIwSBjjCBi4AUARibj0xtym66P6slAv0eCMB6wo+hcKRuMGwxCzAJ
+BgNVBAYTAlVTMRYwFAYDVQQIEw1NYXNzYWNodXNldHRzMS4wLAYDVQQKEyVNYXNz
+YWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5MRUwEwYDVQQLEwxDbGll
+bnQgQ0EgdjGCAQEwDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAQYwEQYJYIZIAYb4
+QgEBBAQDAgEGMA0GCSqGSIb3DQEBBQUAA4GBAC/J7KTQjDXUi9xANDWxZmKc02Yn
+90TBhqbg/f7em6/9SHO9vcSGr04atve79wCxgM46m1Hvd493sxyTgPJSH5Un6GrK
+8CQ1Iyqq4gXvjLBORblricOCnyu5KaaZ63NjYxnjwvwN2uy9opsuXmijMAJ/gL7r
+4Gd9vK+Uzsz0qmJP
+-----END CERTIFICATE-----
Index: /tags/fc9-eol/server/fedora/config/etc/pki/tls/certs/cdsa.pem
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/pki/tls/certs/cdsa.pem	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/pki/tls/certs/cdsa.pem	(revision 1257)
@@ -0,0 +1,71 @@
+From mitcert@MIT.EDU Tue Nov 18 11:50:52 2008
+Date: Tue, 18 Nov 2008 11:45:34 -0500 (EST)
+From: mitcert@MIT.EDU
+To: geofft@mit.edu
+Subject: CSR for scripts virtual host: cdsa.mit.edu  [help.mit.edu #754403]
+
+Certificate:
+    Data:
+        Version: 3 (0x2)
+        Serial Number: 3121 (0xc31)
+        Signature Algorithm: sha1WithRSAEncryption
+        Issuer: C=US, ST=Massachusetts, O=Massachusetts Institute of Technology, OU=MIT Certification Authority
+        Validity
+            Not Before: Nov 16 17:00:00 2008 GMT
+            Not After : Nov 16 17:00:00 2009 GMT
+        Subject: C=US, ST=Massachusetts, L=Cambridge, O=Massachusetts Institute of Technology, OU=Student Information Processing Board, CN=cdsa.mit.edu/Email=scripts@mit.edu
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (1024 bit)
+                Modulus (1024 bit):
+                    00:b5:3e:21:4d:c1:89:6b:01:8c:47:80:fe:b3:37:
+                    27:76:f8:52:41:e6:a2:3d:4b:76:78:e5:f2:66:3c:
+                    0f:b1:ad:fb:97:8f:2e:a2:b6:53:d3:b6:0e:e2:66:
+                    f9:b9:0b:b7:ce:b4:d5:f5:1c:1f:6f:22:7d:48:f5:
+                    6d:f0:16:cd:8e:48:79:d1:14:4a:14:2f:2f:f8:c4:
+                    bd:1d:87:cf:7d:8b:5c:77:ad:58:24:b0:0e:a1:6d:
+                    d6:0a:c7:d8:bc:2f:67:65:c8:5d:d8:d8:31:c2:67:
+                    4b:4a:f4:a1:a5:54:82:af:cb:34:08:2a:04:7f:8e:
+                    7c:4c:b7:db:dc:6a:8a:5d:81
+                Exponent: 65537 (0x10001)
+        X509v3 extensions:
+            X509v3 Basic Constraints: 
+                CA:FALSE
+            Netscape Cert Type: 
+                SSL Client, SSL Server, S/MIME
+            X509v3 Extended Key Usage: 
+                TLS Web Server Authentication, E-mail Protection, TLS Web Client Authentication
+            X509v3 Key Usage: 
+                Digital Signature, Non Repudiation, Key Encipherment
+            X509v3 Subject Key Identifier: 
+                54:11:7C:09:55:44:1C:94:45:A9:A2:76:46:2B:2C:24:26:6A:44:E8
+    Signature Algorithm: sha1WithRSAEncryption
+        1e:5a:f1:e7:82:35:b4:41:29:71:b4:af:24:3f:5a:cc:5a:66:
+        db:1f:45:6a:c1:a1:5b:25:31:cb:c7:9b:57:f1:b5:d7:09:59:
+        1c:b6:d0:c3:3b:52:b8:f2:d0:7b:f0:b7:8b:a6:63:6f:dc:9d:
+        8c:21:f8:05:7d:85:4c:a6:7b:9f:05:90:be:c4:91:8e:07:b5:
+        b9:da:b3:96:cc:b0:3f:83:00:cc:a0:c7:4e:fa:34:ec:17:1e:
+        30:e6:34:8e:12:30:b1:7a:8d:4c:0d:97:2e:1f:27:dc:b7:40:
+        3c:11:a3:0e:4a:2c:f3:ae:89:9b:a5:69:9d:96:46:cd:c1:64:
+        a0:40
+-----BEGIN CERTIFICATE-----
+MIIDNzCCAqCgAwIBAgICDDEwDQYJKoZIhvcNAQEFBQAwezELMAkGA1UEBhMCVVMx
+FjAUBgNVBAgTDU1hc3NhY2h1c2V0dHMxLjAsBgNVBAoTJU1hc3NhY2h1c2V0dHMg
+SW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kxJDAiBgNVBAsTG01JVCBDZXJ0aWZpY2F0
+aW9uIEF1dGhvcml0eTAeFw0wODExMTYxNzAwMDBaFw0wOTExMTYxNzAwMDBaMIHP
+MQswCQYDVQQGEwJVUzEWMBQGA1UECBMNTWFzc2FjaHVzZXR0czESMBAGA1UEBxMJ
+Q2FtYnJpZGdlMS4wLAYDVQQKEyVNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBU
+ZWNobm9sb2d5MS0wKwYDVQQLEyRTdHVkZW50IEluZm9ybWF0aW9uIFByb2Nlc3Np
+bmcgQm9hcmQxFTATBgNVBAMTDGNkc2EubWl0LmVkdTEeMBwGCSqGSIb3DQEJARYP
+c2NyaXB0c0BtaXQuZWR1MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC1PiFN
+wYlrAYxHgP6zNyd2+FJB5qI9S3Z45fJmPA+xrfuXjy6itlPTtg7iZvm5C7fOtNX1
+HB9vIn1I9W3wFs2OSHnRFEoULy/4xL0dh899i1x3rVgksA6hbdYKx9i8L2dlyF3Y
+2DHCZ0tK9KGlVIKvyzQIKgR/jnxMt9vcaopdgQIDAQABo3UwczAJBgNVHRMEAjAA
+MBEGCWCGSAGG+EIBAQQEAwIF4DAnBgNVHSUEIDAeBggrBgEFBQcDAQYIKwYBBQUH
+AwQGCCsGAQUFBwMCMAsGA1UdDwQEAwIF4DAdBgNVHQ4EFgQUVBF8CVVEHJRFqaJ2
+RissJCZqROgwDQYJKoZIhvcNAQEFBQADgYEAHlrx54I1tEEpcbSvJD9azFpm2x9F
+asGhWyUxy8ebV/G11wlZHLbQwztSuPLQe/C3i6Zjb9ydjCH4BX2FTKZ7nwWQvsSR
+jge1udqzlsywP4MAzKDHTvo07BceMOY0jhIwsXqNTA2XLh8n3LdAPBGjDkos866J
+m6VpnZZGzcFkoEA=
+-----END CERTIFICATE-----
+
Index: /tags/fc9-eol/server/fedora/config/etc/pki/tls/certs/check.pl
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/pki/tls/certs/check.pl	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/pki/tls/certs/check.pl	(revision 1257)
@@ -0,0 +1,28 @@
+#!/usr/bin/perl
+
+use File::Basename;
+use Date::Parse;
+
+my $dir = basename($0);
+chdir $dir;
+
+my $now = time();
+
+our $verbose = 0;
+$verbose = 1 if ($ARGV[0] eq "-v");
+
+use constant WARNING => 60*60*24*14; # Warn if a cert is expiring within 14 days
+
+foreach my $cert (glob "*.pem") {
+  open(X509, "-|", qw(openssl x509 -in), $cert, qw(-enddate -noout)) or die "Couldn't invoke openssl x509: $!";
+  chomp(my $exp = <X509>);
+  close(X509);
+  $exp =~ s/^notAfter=// or warn "Cert appears broken: $cert";
+
+  my $time = str2time($exp);
+
+  if ($verbose || ($time - $now) <= WARNING) {
+    printf "Certificate expiring in %.2f days: %s for ", (($time - $now) / (60.0*60*24)), $cert;
+    system(qw(openssl x509 -in), $cert, qw(-subject -noout));
+  }
+}
Index: /tags/fc9-eol/server/fedora/config/etc/pki/tls/certs/crew.pem
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/pki/tls/certs/crew.pem	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/pki/tls/certs/crew.pem	(revision 1257)
@@ -0,0 +1,71 @@
+From mitcert@MIT.EDU Thu Aug 28 22:17:24 2008
+Date: Thu, 28 Aug 2008 22:17:12 -0400 (EDT)
+From: mitcert@MIT.EDU
+To: geofft@mit.edu
+Subject: CSR for crew.mit.edu (scripts vhost)  [help.mit.edu #695365]
+
+Certificate:
+    Data:
+        Version: 3 (0x2)
+        Serial Number: 2946 (0xb82)
+        Signature Algorithm: sha1WithRSAEncryption
+        Issuer: C=US, ST=Massachusetts, O=Massachusetts Institute of Technology, OU=MIT Certification Authority
+        Validity
+            Not Before: Aug 27 16:00:00 2008 GMT
+            Not After : Aug 27 16:00:00 2009 GMT
+        Subject: C=US, ST=Massachusetts, L=Cambridge, O=Massachusetts Institute of Technology, OU=Student Information Processing Board, CN=crew.mit.edu/Email=scripts@mit.edu
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (1024 bit)
+                Modulus (1024 bit):
+                    00:b5:3e:21:4d:c1:89:6b:01:8c:47:80:fe:b3:37:
+                    27:76:f8:52:41:e6:a2:3d:4b:76:78:e5:f2:66:3c:
+                    0f:b1:ad:fb:97:8f:2e:a2:b6:53:d3:b6:0e:e2:66:
+                    f9:b9:0b:b7:ce:b4:d5:f5:1c:1f:6f:22:7d:48:f5:
+                    6d:f0:16:cd:8e:48:79:d1:14:4a:14:2f:2f:f8:c4:
+                    bd:1d:87:cf:7d:8b:5c:77:ad:58:24:b0:0e:a1:6d:
+                    d6:0a:c7:d8:bc:2f:67:65:c8:5d:d8:d8:31:c2:67:
+                    4b:4a:f4:a1:a5:54:82:af:cb:34:08:2a:04:7f:8e:
+                    7c:4c:b7:db:dc:6a:8a:5d:81
+                Exponent: 65537 (0x10001)
+        X509v3 extensions:
+            X509v3 Basic Constraints: 
+                CA:FALSE
+            Netscape Cert Type: 
+                SSL Client, SSL Server, S/MIME
+            X509v3 Extended Key Usage: 
+                TLS Web Server Authentication, E-mail Protection, TLS Web Client Authentication
+            X509v3 Key Usage: 
+                Digital Signature, Non Repudiation, Key Encipherment
+            X509v3 Subject Key Identifier: 
+                54:11:7C:09:55:44:1C:94:45:A9:A2:76:46:2B:2C:24:26:6A:44:E8
+    Signature Algorithm: sha1WithRSAEncryption
+        65:9b:0b:1f:26:0a:93:c5:38:54:d4:42:4d:85:2c:bb:c2:58:
+        3b:15:3f:72:43:d3:97:d5:3d:bc:f8:43:d6:45:94:02:fd:23:
+        35:d6:8a:36:08:0c:db:11:f6:c5:2b:e4:6b:b0:ef:0d:ef:5f:
+        8a:91:b7:b2:f8:bc:30:4a:bf:1a:b7:7f:80:56:8a:6c:ba:20:
+        22:41:c7:5e:6b:f7:f6:db:19:c8:b3:aa:93:9f:d2:d6:a2:3b:
+        98:26:d5:a6:31:e6:16:b4:1d:73:a0:22:87:71:dc:de:9c:ed:
+        0f:4d:9c:20:f2:ca:76:67:bc:2d:57:61:68:7d:4b:fb:e1:b6:
+        c2:1c
+-----BEGIN CERTIFICATE-----
+MIIDNzCCAqCgAwIBAgICC4IwDQYJKoZIhvcNAQEFBQAwezELMAkGA1UEBhMCVVMx
+FjAUBgNVBAgTDU1hc3NhY2h1c2V0dHMxLjAsBgNVBAoTJU1hc3NhY2h1c2V0dHMg
+SW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kxJDAiBgNVBAsTG01JVCBDZXJ0aWZpY2F0
+aW9uIEF1dGhvcml0eTAeFw0wODA4MjcxNjAwMDBaFw0wOTA4MjcxNjAwMDBaMIHP
+MQswCQYDVQQGEwJVUzEWMBQGA1UECBMNTWFzc2FjaHVzZXR0czESMBAGA1UEBxMJ
+Q2FtYnJpZGdlMS4wLAYDVQQKEyVNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBU
+ZWNobm9sb2d5MS0wKwYDVQQLEyRTdHVkZW50IEluZm9ybWF0aW9uIFByb2Nlc3Np
+bmcgQm9hcmQxFTATBgNVBAMTDGNyZXcubWl0LmVkdTEeMBwGCSqGSIb3DQEJARYP
+c2NyaXB0c0BtaXQuZWR1MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC1PiFN
+wYlrAYxHgP6zNyd2+FJB5qI9S3Z45fJmPA+xrfuXjy6itlPTtg7iZvm5C7fOtNX1
+HB9vIn1I9W3wFs2OSHnRFEoULy/4xL0dh899i1x3rVgksA6hbdYKx9i8L2dlyF3Y
+2DHCZ0tK9KGlVIKvyzQIKgR/jnxMt9vcaopdgQIDAQABo3UwczAJBgNVHRMEAjAA
+MBEGCWCGSAGG+EIBAQQEAwIF4DAnBgNVHSUEIDAeBggrBgEFBQcDAQYIKwYBBQUH
+AwQGCCsGAQUFBwMCMAsGA1UdDwQEAwIF4DAdBgNVHQ4EFgQUVBF8CVVEHJRFqaJ2
+RissJCZqROgwDQYJKoZIhvcNAQEFBQADgYEAZZsLHyYKk8U4VNRCTYUsu8JYOxU/
+ckPTl9U9vPhD1kWUAv0jNdaKNggM2xH2xSvka7DvDe9fipG3svi8MEq/Grd/gFaK
+bLogIkHHXmv39tsZyLOqk5/S1qI7mCbVpjHmFrQdc6Aih3Hc3pztD02cIPLKdme8
+LVdhaH1L++G2whw=
+-----END CERTIFICATE-----
+
Index: /tags/fc9-eol/server/fedora/config/etc/pki/tls/certs/debathena.pem
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/pki/tls/certs/debathena.pem	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/pki/tls/certs/debathena.pem	(revision 1257)
@@ -0,0 +1,71 @@
+From mitcert@MIT.EDU Tue Jan 13 20:26:57 2009
+Date: Tue, 13 Jan 2009 20:26:49 -0500 (EST)
+From: mitcert@MIT.EDU
+To: geofft@mit.edu
+Subject: CSR for scripts vhost debathena.mit.edu  [help.mit.edu #786056]
+
+Certificate:
+    Data:
+        Version: 3 (0x2)
+        Serial Number: 3231 (0xc9f)
+        Signature Algorithm: sha1WithRSAEncryption
+        Issuer: C=US, ST=Massachusetts, O=Massachusetts Institute of Technology, OU=MIT Certification Authority
+        Validity
+            Not Before: Jan 12 17:00:00 2009 GMT
+            Not After : Jan 12 17:00:00 2010 GMT
+        Subject: C=US, ST=Massachusetts, L=Cambridge, O=Massachusetts Institute of Technology, OU=Student Information Processing Board, CN=debathena.mit.edu/Email=scripts@mit.edu
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (1024 bit)
+                Modulus (1024 bit):
+                    00:b5:3e:21:4d:c1:89:6b:01:8c:47:80:fe:b3:37:
+                    27:76:f8:52:41:e6:a2:3d:4b:76:78:e5:f2:66:3c:
+                    0f:b1:ad:fb:97:8f:2e:a2:b6:53:d3:b6:0e:e2:66:
+                    f9:b9:0b:b7:ce:b4:d5:f5:1c:1f:6f:22:7d:48:f5:
+                    6d:f0:16:cd:8e:48:79:d1:14:4a:14:2f:2f:f8:c4:
+                    bd:1d:87:cf:7d:8b:5c:77:ad:58:24:b0:0e:a1:6d:
+                    d6:0a:c7:d8:bc:2f:67:65:c8:5d:d8:d8:31:c2:67:
+                    4b:4a:f4:a1:a5:54:82:af:cb:34:08:2a:04:7f:8e:
+                    7c:4c:b7:db:dc:6a:8a:5d:81
+                Exponent: 65537 (0x10001)
+        X509v3 extensions:
+            X509v3 Basic Constraints: 
+                CA:FALSE
+            Netscape Cert Type: 
+                SSL Client, SSL Server, S/MIME
+            X509v3 Extended Key Usage: 
+                TLS Web Server Authentication, E-mail Protection, TLS Web Client Authentication
+            X509v3 Key Usage: 
+                Digital Signature, Non Repudiation, Key Encipherment
+            X509v3 Subject Key Identifier: 
+                54:11:7C:09:55:44:1C:94:45:A9:A2:76:46:2B:2C:24:26:6A:44:E8
+    Signature Algorithm: sha1WithRSAEncryption
+        6c:7b:1f:b3:f9:0c:03:3a:15:50:48:c4:ab:55:17:05:e5:7a:
+        20:b8:44:fa:a3:40:fc:79:54:33:83:d2:d0:7b:71:b8:0d:ce:
+        ca:ec:07:c0:21:78:59:41:2f:98:6c:61:3d:b1:f1:63:00:b2:
+        1c:a4:9d:d7:88:4b:96:53:f2:7e:d0:e0:14:01:b2:57:8a:d7:
+        90:30:66:e3:f8:9b:f1:78:ab:98:09:d3:f3:67:37:d9:cb:6e:
+        ab:76:b3:a3:7b:21:ff:9f:11:90:03:05:e2:88:f3:f9:1b:eb:
+        9b:1b:db:82:e5:ca:81:47:90:ed:6a:d3:d6:8f:9f:89:49:39:
+        1e:1d
+-----BEGIN CERTIFICATE-----
+MIIDPDCCAqWgAwIBAgICDJ8wDQYJKoZIhvcNAQEFBQAwezELMAkGA1UEBhMCVVMx
+FjAUBgNVBAgTDU1hc3NhY2h1c2V0dHMxLjAsBgNVBAoTJU1hc3NhY2h1c2V0dHMg
+SW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kxJDAiBgNVBAsTG01JVCBDZXJ0aWZpY2F0
+aW9uIEF1dGhvcml0eTAeFw0wOTAxMTIxNzAwMDBaFw0xMDAxMTIxNzAwMDBaMIHU
+MQswCQYDVQQGEwJVUzEWMBQGA1UECBMNTWFzc2FjaHVzZXR0czESMBAGA1UEBxMJ
+Q2FtYnJpZGdlMS4wLAYDVQQKEyVNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBU
+ZWNobm9sb2d5MS0wKwYDVQQLEyRTdHVkZW50IEluZm9ybWF0aW9uIFByb2Nlc3Np
+bmcgQm9hcmQxGjAYBgNVBAMTEWRlYmF0aGVuYS5taXQuZWR1MR4wHAYJKoZIhvcN
+AQkBFg9zY3JpcHRzQG1pdC5lZHUwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGB
+ALU+IU3BiWsBjEeA/rM3J3b4UkHmoj1Ldnjl8mY8D7Gt+5ePLqK2U9O2DuJm+bkL
+t8601fUcH28ifUj1bfAWzY5IedEUShQvL/jEvR2Hz32LXHetWCSwDqFt1grH2Lwv
+Z2XIXdjYMcJnS0r0oaVUgq/LNAgqBH+OfEy329xqil2BAgMBAAGjdTBzMAkGA1Ud
+EwQCMAAwEQYJYIZIAYb4QgEBBAQDAgXgMCcGA1UdJQQgMB4GCCsGAQUFBwMBBggr
+BgEFBQcDBAYIKwYBBQUHAwIwCwYDVR0PBAQDAgXgMB0GA1UdDgQWBBRUEXwJVUQc
+lEWponZGKywkJmpE6DANBgkqhkiG9w0BAQUFAAOBgQBsex+z+QwDOhVQSMSrVRcF
+5XoguET6o0D8eVQzg9LQe3G4Dc7K7AfAIXhZQS+YbGE9sfFjALIcpJ3XiEuWU/J+
+0OAUAbJXiteQMGbj+JvxeKuYCdPzZzfZy26rdrOjeyH/nxGQAwXiiPP5G+ubG9uC
+5cqBR5DtatPWj5+JSTkeHQ==
+-----END CERTIFICATE-----
+
Index: /tags/fc9-eol/server/fedora/config/etc/pki/tls/certs/eastgate.pem
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/pki/tls/certs/eastgate.pem	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/pki/tls/certs/eastgate.pem	(revision 1257)
@@ -0,0 +1,71 @@
+From mitcert@MIT.EDU Thu Feb 12 11:49:58 2009
+Date: Thu, 12 Feb 2009 11:49:49 -0500 (EST)
+From: mitcert@MIT.EDU
+To: geofft@mit.edu
+Subject: CSR for scripts vhost eastgate.mit.edu  [help.mit.edu #807896]
+
+Certificate:
+    Data:
+        Version: 3 (0x2)
+        Serial Number: 3292 (0xcdc)
+        Signature Algorithm: sha1WithRSAEncryption
+        Issuer: C=US, ST=Massachusetts, O=Massachusetts Institute of Technology, OU=MIT Certification Authority
+        Validity
+            Not Before: Feb 10 17:00:00 2009 GMT
+            Not After : Feb 10 17:00:00 2010 GMT
+        Subject: C=US, ST=Massachusetts, L=Cambridge, O=Massachusetts Institute of Technology, OU=Student Information Processing Board, CN=eastgate.mit.edu/Email=scripts@mit.edu
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (1024 bit)
+                Modulus (1024 bit):
+                    00:b5:3e:21:4d:c1:89:6b:01:8c:47:80:fe:b3:37:
+                    27:76:f8:52:41:e6:a2:3d:4b:76:78:e5:f2:66:3c:
+                    0f:b1:ad:fb:97:8f:2e:a2:b6:53:d3:b6:0e:e2:66:
+                    f9:b9:0b:b7:ce:b4:d5:f5:1c:1f:6f:22:7d:48:f5:
+                    6d:f0:16:cd:8e:48:79:d1:14:4a:14:2f:2f:f8:c4:
+                    bd:1d:87:cf:7d:8b:5c:77:ad:58:24:b0:0e:a1:6d:
+                    d6:0a:c7:d8:bc:2f:67:65:c8:5d:d8:d8:31:c2:67:
+                    4b:4a:f4:a1:a5:54:82:af:cb:34:08:2a:04:7f:8e:
+                    7c:4c:b7:db:dc:6a:8a:5d:81
+                Exponent: 65537 (0x10001)
+        X509v3 extensions:
+            X509v3 Basic Constraints: 
+                CA:FALSE
+            Netscape Cert Type: 
+                SSL Client, SSL Server, S/MIME
+            X509v3 Extended Key Usage: 
+                TLS Web Server Authentication, E-mail Protection, TLS Web Client Authentication
+            X509v3 Key Usage: 
+                Digital Signature, Non Repudiation, Key Encipherment
+            X509v3 Subject Key Identifier: 
+                54:11:7C:09:55:44:1C:94:45:A9:A2:76:46:2B:2C:24:26:6A:44:E8
+    Signature Algorithm: sha1WithRSAEncryption
+        41:50:fd:af:57:02:1a:fb:01:f4:ec:52:49:e1:fa:58:78:b4:
+        e2:04:2b:1e:87:b3:27:ba:27:23:35:a0:76:09:01:6e:63:ff:
+        7e:f0:b1:70:13:d2:70:90:65:c7:14:3b:aa:36:ca:3d:02:b9:
+        5d:3a:12:23:d6:76:8a:87:e2:48:e8:00:95:31:28:ed:e3:04:
+        80:67:01:7c:90:9a:d1:1b:31:07:5a:75:64:8c:0b:f9:70:7d:
+        52:8b:28:6b:a7:a5:71:9e:aa:1a:ae:1c:b1:10:5b:c7:e6:b8:
+        30:54:48:74:cb:dd:88:e9:ad:f2:43:2e:89:b6:35:2b:23:f1:
+        70:b7
+-----BEGIN CERTIFICATE-----
+MIIDOzCCAqSgAwIBAgICDNwwDQYJKoZIhvcNAQEFBQAwezELMAkGA1UEBhMCVVMx
+FjAUBgNVBAgTDU1hc3NhY2h1c2V0dHMxLjAsBgNVBAoTJU1hc3NhY2h1c2V0dHMg
+SW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kxJDAiBgNVBAsTG01JVCBDZXJ0aWZpY2F0
+aW9uIEF1dGhvcml0eTAeFw0wOTAyMTAxNzAwMDBaFw0xMDAyMTAxNzAwMDBaMIHT
+MQswCQYDVQQGEwJVUzEWMBQGA1UECBMNTWFzc2FjaHVzZXR0czESMBAGA1UEBxMJ
+Q2FtYnJpZGdlMS4wLAYDVQQKEyVNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBU
+ZWNobm9sb2d5MS0wKwYDVQQLEyRTdHVkZW50IEluZm9ybWF0aW9uIFByb2Nlc3Np
+bmcgQm9hcmQxGTAXBgNVBAMTEGVhc3RnYXRlLm1pdC5lZHUxHjAcBgkqhkiG9w0B
+CQEWD3NjcmlwdHNAbWl0LmVkdTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA
+tT4hTcGJawGMR4D+szcndvhSQeaiPUt2eOXyZjwPsa37l48uorZT07YO4mb5uQu3
+zrTV9RwfbyJ9SPVt8BbNjkh50RRKFC8v+MS9HYfPfYtcd61YJLAOoW3WCsfYvC9n
+Zchd2NgxwmdLSvShpVSCr8s0CCoEf458TLfb3GqKXYECAwEAAaN1MHMwCQYDVR0T
+BAIwADARBglghkgBhvhCAQEEBAMCBeAwJwYDVR0lBCAwHgYIKwYBBQUHAwEGCCsG
+AQUFBwMEBggrBgEFBQcDAjALBgNVHQ8EBAMCBeAwHQYDVR0OBBYEFFQRfAlVRByU
+RamidkYrLCQmakToMA0GCSqGSIb3DQEBBQUAA4GBAEFQ/a9XAhr7AfTsUknh+lh4
+tOIEKx6Hsye6JyM1oHYJAW5j/37wsXAT0nCQZccUO6o2yj0CuV06EiPWdoqH4kjo
+AJUxKO3jBIBnAXyQmtEbMQdadWSMC/lwfVKLKGunpXGeqhquHLEQW8fmuDBUSHTL
+3YjprfJDLom2NSsj8XC3
+-----END CERTIFICATE-----
+
Index: /tags/fc9-eol/server/fedora/config/etc/pki/tls/certs/familynet.pem
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/pki/tls/certs/familynet.pem	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/pki/tls/certs/familynet.pem	(revision 1257)
@@ -0,0 +1,64 @@
+Certificate:
+    Data:
+        Version: 3 (0x2)
+        Serial Number: 2903 (0xb57)
+        Signature Algorithm: sha1WithRSAEncryption
+        Issuer: C=US, ST=Massachusetts, O=Massachusetts Institute of Technology, OU=MIT Certification Authority
+        Validity
+            Not Before: Aug 11 16:00:00 2008 GMT
+            Not After : Aug 11 16:00:00 2009 GMT
+        Subject: C=US, ST=Massachusetts, L=Cambridge, O=Massachusetts Institute of Technology, OU=Student Information Processing Board, CN=familynet.mit.edu/Email=scripts@mit.edu
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (1024 bit)
+                Modulus (1024 bit):
+                    00:b5:3e:21:4d:c1:89:6b:01:8c:47:80:fe:b3:37:
+                    27:76:f8:52:41:e6:a2:3d:4b:76:78:e5:f2:66:3c:
+                    0f:b1:ad:fb:97:8f:2e:a2:b6:53:d3:b6:0e:e2:66:
+                    f9:b9:0b:b7:ce:b4:d5:f5:1c:1f:6f:22:7d:48:f5:
+                    6d:f0:16:cd:8e:48:79:d1:14:4a:14:2f:2f:f8:c4:
+                    bd:1d:87:cf:7d:8b:5c:77:ad:58:24:b0:0e:a1:6d:
+                    d6:0a:c7:d8:bc:2f:67:65:c8:5d:d8:d8:31:c2:67:
+                    4b:4a:f4:a1:a5:54:82:af:cb:34:08:2a:04:7f:8e:
+                    7c:4c:b7:db:dc:6a:8a:5d:81
+                Exponent: 65537 (0x10001)
+        X509v3 extensions:
+            X509v3 Basic Constraints: 
+                CA:FALSE
+            Netscape Cert Type: 
+                SSL Client, SSL Server, S/MIME
+            X509v3 Extended Key Usage: 
+                TLS Web Server Authentication, E-mail Protection, TLS Web Client Authentication
+            X509v3 Key Usage: 
+                Digital Signature, Non Repudiation, Key Encipherment
+            X509v3 Subject Key Identifier: 
+                54:11:7C:09:55:44:1C:94:45:A9:A2:76:46:2B:2C:24:26:6A:44:E8
+    Signature Algorithm: sha1WithRSAEncryption
+        35:8d:38:94:82:a8:a3:a4:ba:a4:0f:d9:b7:d5:f5:2a:89:5a:
+        0f:95:88:db:ff:e9:d6:4e:04:9b:24:41:57:2d:ff:a6:91:ba:
+        57:e6:74:63:ba:ca:2d:f6:30:e9:27:1c:ea:43:5b:cc:d3:21:
+        e3:dc:b1:2e:82:39:85:fa:0a:2a:db:47:2f:05:4c:a1:77:93:
+        0f:a3:c5:b7:f1:4b:76:ad:1a:2d:6b:f9:f9:46:48:e8:ab:2b:
+        09:86:67:10:64:c9:9b:9f:b2:9a:63:10:4b:bc:c7:db:78:d1:
+        1c:a3:6a:f8:0f:5c:d5:f2:b8:63:c1:16:6e:ac:ae:f1:44:3b:
+        10:92
+-----BEGIN CERTIFICATE-----
+MIIDPDCCAqWgAwIBAgICC1cwDQYJKoZIhvcNAQEFBQAwezELMAkGA1UEBhMCVVMx
+FjAUBgNVBAgTDU1hc3NhY2h1c2V0dHMxLjAsBgNVBAoTJU1hc3NhY2h1c2V0dHMg
+SW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kxJDAiBgNVBAsTG01JVCBDZXJ0aWZpY2F0
+aW9uIEF1dGhvcml0eTAeFw0wODA4MTExNjAwMDBaFw0wOTA4MTExNjAwMDBaMIHU
+MQswCQYDVQQGEwJVUzEWMBQGA1UECBMNTWFzc2FjaHVzZXR0czESMBAGA1UEBxMJ
+Q2FtYnJpZGdlMS4wLAYDVQQKEyVNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBU
+ZWNobm9sb2d5MS0wKwYDVQQLEyRTdHVkZW50IEluZm9ybWF0aW9uIFByb2Nlc3Np
+bmcgQm9hcmQxGjAYBgNVBAMTEWZhbWlseW5ldC5taXQuZWR1MR4wHAYJKoZIhvcN
+AQkBFg9zY3JpcHRzQG1pdC5lZHUwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGB
+ALU+IU3BiWsBjEeA/rM3J3b4UkHmoj1Ldnjl8mY8D7Gt+5ePLqK2U9O2DuJm+bkL
+t8601fUcH28ifUj1bfAWzY5IedEUShQvL/jEvR2Hz32LXHetWCSwDqFt1grH2Lwv
+Z2XIXdjYMcJnS0r0oaVUgq/LNAgqBH+OfEy329xqil2BAgMBAAGjdTBzMAkGA1Ud
+EwQCMAAwEQYJYIZIAYb4QgEBBAQDAgXgMCcGA1UdJQQgMB4GCCsGAQUFBwMBBggr
+BgEFBQcDBAYIKwYBBQUHAwIwCwYDVR0PBAQDAgXgMB0GA1UdDgQWBBRUEXwJVUQc
+lEWponZGKywkJmpE6DANBgkqhkiG9w0BAQUFAAOBgQA1jTiUgqijpLqkD9m31fUq
+iVoPlYjb/+nWTgSbJEFXLf+mkbpX5nRjusot9jDpJxzqQ1vM0yHj3LEugjmF+goq
+20cvBUyhd5MPo8W38Ut2rRota/n5RkjoqysJhmcQZMmbn7KaYxBLvMfbeNEco2r4
+D1zV8rhjwRZurK7xRDsQkg==
+-----END CERTIFICATE-----
Index: /tags/fc9-eol/server/fedora/config/etc/pki/tls/certs/lpq.pem
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/pki/tls/certs/lpq.pem	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/pki/tls/certs/lpq.pem	(revision 1257)
@@ -0,0 +1,71 @@
+From mitcert@MIT.EDU Thu Aug 28 22:15:25 2008
+Date: Thu, 28 Aug 2008 22:15:13 -0400 (EDT)
+From: mitcert@MIT.EDU
+To: geofft@mit.edu
+Subject: CSR for lpq.mit.edu (scripts vhost)  [help.mit.edu #695369]
+
+Certificate:
+    Data:
+        Version: 3 (0x2)
+        Serial Number: 2943 (0xb7f)
+        Signature Algorithm: sha1WithRSAEncryption
+        Issuer: C=US, ST=Massachusetts, O=Massachusetts Institute of Technology, OU=MIT Certification Authority
+        Validity
+            Not Before: Aug 27 16:00:00 2008 GMT
+            Not After : Aug 27 16:00:00 2009 GMT
+        Subject: C=US, ST=Massachusetts, L=Cambridge, O=Massachusetts Institute of Technology, OU=Student Information Processing Board, CN=lpq.mit.edu/Email=scripts@mit.edu
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (1024 bit)
+                Modulus (1024 bit):
+                    00:b5:3e:21:4d:c1:89:6b:01:8c:47:80:fe:b3:37:
+                    27:76:f8:52:41:e6:a2:3d:4b:76:78:e5:f2:66:3c:
+                    0f:b1:ad:fb:97:8f:2e:a2:b6:53:d3:b6:0e:e2:66:
+                    f9:b9:0b:b7:ce:b4:d5:f5:1c:1f:6f:22:7d:48:f5:
+                    6d:f0:16:cd:8e:48:79:d1:14:4a:14:2f:2f:f8:c4:
+                    bd:1d:87:cf:7d:8b:5c:77:ad:58:24:b0:0e:a1:6d:
+                    d6:0a:c7:d8:bc:2f:67:65:c8:5d:d8:d8:31:c2:67:
+                    4b:4a:f4:a1:a5:54:82:af:cb:34:08:2a:04:7f:8e:
+                    7c:4c:b7:db:dc:6a:8a:5d:81
+                Exponent: 65537 (0x10001)
+        X509v3 extensions:
+            X509v3 Basic Constraints: 
+                CA:FALSE
+            Netscape Cert Type: 
+                SSL Client, SSL Server, S/MIME
+            X509v3 Extended Key Usage: 
+                TLS Web Server Authentication, E-mail Protection, TLS Web Client Authentication
+            X509v3 Key Usage: 
+                Digital Signature, Non Repudiation, Key Encipherment
+            X509v3 Subject Key Identifier: 
+                54:11:7C:09:55:44:1C:94:45:A9:A2:76:46:2B:2C:24:26:6A:44:E8
+    Signature Algorithm: sha1WithRSAEncryption
+        35:d2:f1:8e:f1:91:bb:fd:d6:08:c7:d7:7b:5e:6f:a1:de:14:
+        be:c6:d6:2c:ed:4b:32:56:41:45:54:1c:24:01:80:ae:19:f6:
+        4f:86:16:11:52:12:9e:0e:13:93:94:bb:ed:6b:bb:c8:7b:bb:
+        11:3d:d0:5f:0f:cf:f8:9e:62:d0:cd:47:09:4e:d3:5d:80:9b:
+        bf:30:0d:4b:00:8b:fe:f7:8e:09:5c:57:5d:aa:56:33:97:5c:
+        49:be:a6:6f:58:65:74:70:6c:97:11:d4:ec:a7:f0:fe:1b:23:
+        fd:a9:60:ef:b3:d6:0a:21:36:2d:42:d2:d1:90:15:3c:d7:dc:
+        4e:3a
+-----BEGIN CERTIFICATE-----
+MIIDNjCCAp+gAwIBAgICC38wDQYJKoZIhvcNAQEFBQAwezELMAkGA1UEBhMCVVMx
+FjAUBgNVBAgTDU1hc3NhY2h1c2V0dHMxLjAsBgNVBAoTJU1hc3NhY2h1c2V0dHMg
+SW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kxJDAiBgNVBAsTG01JVCBDZXJ0aWZpY2F0
+aW9uIEF1dGhvcml0eTAeFw0wODA4MjcxNjAwMDBaFw0wOTA4MjcxNjAwMDBaMIHO
+MQswCQYDVQQGEwJVUzEWMBQGA1UECBMNTWFzc2FjaHVzZXR0czESMBAGA1UEBxMJ
+Q2FtYnJpZGdlMS4wLAYDVQQKEyVNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBU
+ZWNobm9sb2d5MS0wKwYDVQQLEyRTdHVkZW50IEluZm9ybWF0aW9uIFByb2Nlc3Np
+bmcgQm9hcmQxFDASBgNVBAMTC2xwcS5taXQuZWR1MR4wHAYJKoZIhvcNAQkBFg9z
+Y3JpcHRzQG1pdC5lZHUwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALU+IU3B
+iWsBjEeA/rM3J3b4UkHmoj1Ldnjl8mY8D7Gt+5ePLqK2U9O2DuJm+bkLt8601fUc
+H28ifUj1bfAWzY5IedEUShQvL/jEvR2Hz32LXHetWCSwDqFt1grH2LwvZ2XIXdjY
+McJnS0r0oaVUgq/LNAgqBH+OfEy329xqil2BAgMBAAGjdTBzMAkGA1UdEwQCMAAw
+EQYJYIZIAYb4QgEBBAQDAgXgMCcGA1UdJQQgMB4GCCsGAQUFBwMBBggrBgEFBQcD
+BAYIKwYBBQUHAwIwCwYDVR0PBAQDAgXgMB0GA1UdDgQWBBRUEXwJVUQclEWponZG
+KywkJmpE6DANBgkqhkiG9w0BAQUFAAOBgQA10vGO8ZG7/dYIx9d7Xm+h3hS+xtYs
+7UsyVkFFVBwkAYCuGfZPhhYRUhKeDhOTlLvta7vIe7sRPdBfD8/4nmLQzUcJTtNd
+gJu/MA1LAIv+944JXFddqlYzl1xJvqZvWGV0cGyXEdTsp/D+GyP9qWDvs9YKITYt
+QtLRkBU819xOOg==
+-----END CERTIFICATE-----
+
Index: /tags/fc9-eol/server/fedora/config/etc/pki/tls/certs/mitsoc.pem
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/pki/tls/certs/mitsoc.pem	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/pki/tls/certs/mitsoc.pem	(revision 1257)
@@ -0,0 +1,64 @@
+Certificate:
+    Data:
+        Version: 3 (0x2)
+        Serial Number: 2930 (0xb72)
+        Signature Algorithm: sha1WithRSAEncryption
+        Issuer: C=US, ST=Massachusetts, O=Massachusetts Institute of Technology, OU=MIT Certification Authority
+        Validity
+            Not Before: Aug 24 16:00:00 2008 GMT
+            Not After : Aug 24 16:00:00 2009 GMT
+        Subject: C=US, ST=Massachusetts, L=Cambridge, O=Massachusetts Institute of Technology, OU=Student Information Processing Board, CN=mitsoc.mit.edu/Email=scripts@mit.edu
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (1024 bit)
+                Modulus (1024 bit):
+                    00:b5:3e:21:4d:c1:89:6b:01:8c:47:80:fe:b3:37:
+                    27:76:f8:52:41:e6:a2:3d:4b:76:78:e5:f2:66:3c:
+                    0f:b1:ad:fb:97:8f:2e:a2:b6:53:d3:b6:0e:e2:66:
+                    f9:b9:0b:b7:ce:b4:d5:f5:1c:1f:6f:22:7d:48:f5:
+                    6d:f0:16:cd:8e:48:79:d1:14:4a:14:2f:2f:f8:c4:
+                    bd:1d:87:cf:7d:8b:5c:77:ad:58:24:b0:0e:a1:6d:
+                    d6:0a:c7:d8:bc:2f:67:65:c8:5d:d8:d8:31:c2:67:
+                    4b:4a:f4:a1:a5:54:82:af:cb:34:08:2a:04:7f:8e:
+                    7c:4c:b7:db:dc:6a:8a:5d:81
+                Exponent: 65537 (0x10001)
+        X509v3 extensions:
+            X509v3 Basic Constraints: 
+                CA:FALSE
+            Netscape Cert Type: 
+                SSL Client, SSL Server, S/MIME
+            X509v3 Extended Key Usage: 
+                TLS Web Server Authentication, E-mail Protection, TLS Web Client Authentication
+            X509v3 Key Usage: 
+                Digital Signature, Non Repudiation, Key Encipherment
+            X509v3 Subject Key Identifier: 
+                54:11:7C:09:55:44:1C:94:45:A9:A2:76:46:2B:2C:24:26:6A:44:E8
+    Signature Algorithm: sha1WithRSAEncryption
+        45:e4:eb:f1:94:d0:1a:a6:5a:11:df:88:3f:f3:cf:2d:3c:d7:
+        39:de:06:b1:d3:10:88:19:28:94:aa:91:a7:b5:d8:51:3d:85:
+        05:92:a8:19:b6:ce:ed:70:dc:76:eb:70:e2:de:0a:1b:22:57:
+        fc:00:e2:18:33:12:fb:e7:a8:cd:33:a3:b0:74:09:db:b6:c9:
+        f8:76:aa:b4:89:ed:c3:ea:af:d4:a4:cf:12:bf:98:99:51:0f:
+        dc:20:d7:5f:3b:e2:3d:8a:d7:99:3d:fa:0a:7f:f0:34:5e:e0:
+        f6:01:1f:5f:81:19:b1:69:9a:97:f8:a1:9c:42:d7:d3:81:66:
+        32:82
+-----BEGIN CERTIFICATE-----
+MIIDOTCCAqKgAwIBAgICC3IwDQYJKoZIhvcNAQEFBQAwezELMAkGA1UEBhMCVVMx
+FjAUBgNVBAgTDU1hc3NhY2h1c2V0dHMxLjAsBgNVBAoTJU1hc3NhY2h1c2V0dHMg
+SW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kxJDAiBgNVBAsTG01JVCBDZXJ0aWZpY2F0
+aW9uIEF1dGhvcml0eTAeFw0wODA4MjQxNjAwMDBaFw0wOTA4MjQxNjAwMDBaMIHR
+MQswCQYDVQQGEwJVUzEWMBQGA1UECBMNTWFzc2FjaHVzZXR0czESMBAGA1UEBxMJ
+Q2FtYnJpZGdlMS4wLAYDVQQKEyVNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBU
+ZWNobm9sb2d5MS0wKwYDVQQLEyRTdHVkZW50IEluZm9ybWF0aW9uIFByb2Nlc3Np
+bmcgQm9hcmQxFzAVBgNVBAMTDm1pdHNvYy5taXQuZWR1MR4wHAYJKoZIhvcNAQkB
+Fg9zY3JpcHRzQG1pdC5lZHUwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALU+
+IU3BiWsBjEeA/rM3J3b4UkHmoj1Ldnjl8mY8D7Gt+5ePLqK2U9O2DuJm+bkLt860
+1fUcH28ifUj1bfAWzY5IedEUShQvL/jEvR2Hz32LXHetWCSwDqFt1grH2LwvZ2XI
+XdjYMcJnS0r0oaVUgq/LNAgqBH+OfEy329xqil2BAgMBAAGjdTBzMAkGA1UdEwQC
+MAAwEQYJYIZIAYb4QgEBBAQDAgXgMCcGA1UdJQQgMB4GCCsGAQUFBwMBBggrBgEF
+BQcDBAYIKwYBBQUHAwIwCwYDVR0PBAQDAgXgMB0GA1UdDgQWBBRUEXwJVUQclEWp
+onZGKywkJmpE6DANBgkqhkiG9w0BAQUFAAOBgQBF5OvxlNAaploR34g/888tPNc5
+3gax0xCIGSiUqpGntdhRPYUFkqgZts7tcNx263Di3gobIlf8AOIYMxL756jNM6Ow
+dAnbtsn4dqq0ie3D6q/UpM8Sv5iZUQ/cINdfO+I9iteZPfoKf/A0XuD2AR9fgRmx
+aZqX+KGcQtfTgWYygg==
+-----END CERTIFICATE-----
Index: /tags/fc9-eol/server/fedora/config/etc/pki/tls/certs/next.pem
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/pki/tls/certs/next.pem	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/pki/tls/certs/next.pem	(revision 1257)
@@ -0,0 +1,71 @@
+From mitcert@MIT.EDU Thu Aug 28 22:16:41 2008
+Date: Thu, 28 Aug 2008 22:16:31 -0400 (EDT)
+From: mitcert@MIT.EDU
+To: geofft@mit.edu
+Subject: CSR for next.mit.edu (scripts vhost)  [help.mit.edu #695366]
+
+Certificate:
+    Data:
+        Version: 3 (0x2)
+        Serial Number: 2945 (0xb81)
+        Signature Algorithm: sha1WithRSAEncryption
+        Issuer: C=US, ST=Massachusetts, O=Massachusetts Institute of Technology, OU=MIT Certification Authority
+        Validity
+            Not Before: Aug 27 16:00:00 2008 GMT
+            Not After : Aug 27 16:00:00 2009 GMT
+        Subject: C=US, ST=Massachusetts, L=Cambridge, O=Massachusetts Institute of Technology, OU=Student Information Processing Board, CN=next.mit.edu/Email=scripts@mit.edu
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (1024 bit)
+                Modulus (1024 bit):
+                    00:b5:3e:21:4d:c1:89:6b:01:8c:47:80:fe:b3:37:
+                    27:76:f8:52:41:e6:a2:3d:4b:76:78:e5:f2:66:3c:
+                    0f:b1:ad:fb:97:8f:2e:a2:b6:53:d3:b6:0e:e2:66:
+                    f9:b9:0b:b7:ce:b4:d5:f5:1c:1f:6f:22:7d:48:f5:
+                    6d:f0:16:cd:8e:48:79:d1:14:4a:14:2f:2f:f8:c4:
+                    bd:1d:87:cf:7d:8b:5c:77:ad:58:24:b0:0e:a1:6d:
+                    d6:0a:c7:d8:bc:2f:67:65:c8:5d:d8:d8:31:c2:67:
+                    4b:4a:f4:a1:a5:54:82:af:cb:34:08:2a:04:7f:8e:
+                    7c:4c:b7:db:dc:6a:8a:5d:81
+                Exponent: 65537 (0x10001)
+        X509v3 extensions:
+            X509v3 Basic Constraints: 
+                CA:FALSE
+            Netscape Cert Type: 
+                SSL Client, SSL Server, S/MIME
+            X509v3 Extended Key Usage: 
+                TLS Web Server Authentication, E-mail Protection, TLS Web Client Authentication
+            X509v3 Key Usage: 
+                Digital Signature, Non Repudiation, Key Encipherment
+            X509v3 Subject Key Identifier: 
+                54:11:7C:09:55:44:1C:94:45:A9:A2:76:46:2B:2C:24:26:6A:44:E8
+    Signature Algorithm: sha1WithRSAEncryption
+        04:1a:e6:99:94:6b:73:b0:e2:9f:b4:31:47:93:53:a1:42:58:
+        8c:e8:f9:39:fb:61:c0:f6:9a:46:e3:e4:6a:81:82:0a:ca:37:
+        b0:27:d6:bc:32:2c:21:15:e7:ed:f0:80:f0:3d:d6:81:3b:a5:
+        b6:77:f4:55:8b:68:b7:d6:fe:da:a7:84:d7:84:a4:78:df:14:
+        69:79:33:2f:41:e1:3a:c4:a5:ec:2b:f3:4d:d2:e1:2a:3e:34:
+        01:05:99:71:c2:1c:a2:a5:b2:06:1d:27:1b:fd:3e:20:6e:ac:
+        ee:60:63:a6:9a:f0:84:7e:6b:4e:2f:df:75:07:85:f7:bb:73:
+        c0:92
+-----BEGIN CERTIFICATE-----
+MIIDNzCCAqCgAwIBAgICC4EwDQYJKoZIhvcNAQEFBQAwezELMAkGA1UEBhMCVVMx
+FjAUBgNVBAgTDU1hc3NhY2h1c2V0dHMxLjAsBgNVBAoTJU1hc3NhY2h1c2V0dHMg
+SW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kxJDAiBgNVBAsTG01JVCBDZXJ0aWZpY2F0
+aW9uIEF1dGhvcml0eTAeFw0wODA4MjcxNjAwMDBaFw0wOTA4MjcxNjAwMDBaMIHP
+MQswCQYDVQQGEwJVUzEWMBQGA1UECBMNTWFzc2FjaHVzZXR0czESMBAGA1UEBxMJ
+Q2FtYnJpZGdlMS4wLAYDVQQKEyVNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBU
+ZWNobm9sb2d5MS0wKwYDVQQLEyRTdHVkZW50IEluZm9ybWF0aW9uIFByb2Nlc3Np
+bmcgQm9hcmQxFTATBgNVBAMTDG5leHQubWl0LmVkdTEeMBwGCSqGSIb3DQEJARYP
+c2NyaXB0c0BtaXQuZWR1MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC1PiFN
+wYlrAYxHgP6zNyd2+FJB5qI9S3Z45fJmPA+xrfuXjy6itlPTtg7iZvm5C7fOtNX1
+HB9vIn1I9W3wFs2OSHnRFEoULy/4xL0dh899i1x3rVgksA6hbdYKx9i8L2dlyF3Y
+2DHCZ0tK9KGlVIKvyzQIKgR/jnxMt9vcaopdgQIDAQABo3UwczAJBgNVHRMEAjAA
+MBEGCWCGSAGG+EIBAQQEAwIF4DAnBgNVHSUEIDAeBggrBgEFBQcDAQYIKwYBBQUH
+AwQGCCsGAQUFBwMCMAsGA1UdDwQEAwIF4DAdBgNVHQ4EFgQUVBF8CVVEHJRFqaJ2
+RissJCZqROgwDQYJKoZIhvcNAQEFBQADgYEABBrmmZRrc7Din7QxR5NToUJYjOj5
+OfthwPaaRuPkaoGCCso3sCfWvDIsIRXn7fCA8D3WgTultnf0VYtot9b+2qeE14Sk
+eN8UaXkzL0HhOsSl7CvzTdLhKj40AQWZccIcoqWyBh0nG/0+IG6s7mBjpprwhH5r
+Ti/fdQeF97tzwJI=
+-----END CERTIFICATE-----
+
Index: /tags/fc9-eol/server/fedora/config/etc/pki/tls/certs/picker.pem
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/pki/tls/certs/picker.pem	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/pki/tls/certs/picker.pem	(revision 1257)
@@ -0,0 +1,64 @@
+Certificate:
+    Data:
+        Version: 3 (0x2)
+        Serial Number: 3256 (0xcb8)
+        Signature Algorithm: sha1WithRSAEncryption
+        Issuer: C=US, ST=Massachusetts, O=Massachusetts Institute of Technology, OU=MIT Certification Authority
+        Validity
+            Not Before: Jan 26 17:00:00 2009 GMT
+            Not After : Jan 26 17:00:00 2010 GMT
+        Subject: C=US, ST=Massachusetts, L=Cambridge, O=Massachusetts Institute of Technology, OU=Student Information Processing Board, CN=picker.mit.edu/Email=scripts@mit.edu
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (1024 bit)
+                Modulus (1024 bit):
+                    00:b5:3e:21:4d:c1:89:6b:01:8c:47:80:fe:b3:37:
+                    27:76:f8:52:41:e6:a2:3d:4b:76:78:e5:f2:66:3c:
+                    0f:b1:ad:fb:97:8f:2e:a2:b6:53:d3:b6:0e:e2:66:
+                    f9:b9:0b:b7:ce:b4:d5:f5:1c:1f:6f:22:7d:48:f5:
+                    6d:f0:16:cd:8e:48:79:d1:14:4a:14:2f:2f:f8:c4:
+                    bd:1d:87:cf:7d:8b:5c:77:ad:58:24:b0:0e:a1:6d:
+                    d6:0a:c7:d8:bc:2f:67:65:c8:5d:d8:d8:31:c2:67:
+                    4b:4a:f4:a1:a5:54:82:af:cb:34:08:2a:04:7f:8e:
+                    7c:4c:b7:db:dc:6a:8a:5d:81
+                Exponent: 65537 (0x10001)
+        X509v3 extensions:
+            X509v3 Basic Constraints: 
+                CA:FALSE
+            Netscape Cert Type: 
+                SSL Client, SSL Server, S/MIME
+            X509v3 Extended Key Usage: 
+                TLS Web Server Authentication, E-mail Protection, TLS Web Client Authentication
+            X509v3 Key Usage: 
+                Digital Signature, Non Repudiation, Key Encipherment
+            X509v3 Subject Key Identifier: 
+                54:11:7C:09:55:44:1C:94:45:A9:A2:76:46:2B:2C:24:26:6A:44:E8
+    Signature Algorithm: sha1WithRSAEncryption
+        14:6f:8e:33:4a:48:53:ff:f4:6a:f4:38:13:c9:74:d3:23:b8:
+        44:8b:28:0f:10:c0:20:28:fa:e7:cb:f3:74:66:f2:b0:01:26:
+        50:eb:ad:fc:54:52:3f:d1:e4:10:c8:d7:71:ae:5c:f2:44:e2:
+        b3:7c:b0:8a:6a:cc:33:cd:cd:f4:ad:17:a0:c9:1d:c6:3d:32:
+        31:93:04:b4:da:6d:ca:a0:bc:99:5b:f0:83:91:ec:40:c7:a5:
+        23:87:05:47:76:e6:13:20:a4:5a:d4:63:5e:3f:d5:f5:3f:98:
+        99:c3:1c:73:e7:36:0c:3f:5d:1e:12:d0:17:a7:f0:55:99:fa:
+        d9:c8
+-----BEGIN CERTIFICATE-----
+MIIDOTCCAqKgAwIBAgICDLgwDQYJKoZIhvcNAQEFBQAwezELMAkGA1UEBhMCVVMx
+FjAUBgNVBAgTDU1hc3NhY2h1c2V0dHMxLjAsBgNVBAoTJU1hc3NhY2h1c2V0dHMg
+SW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kxJDAiBgNVBAsTG01JVCBDZXJ0aWZpY2F0
+aW9uIEF1dGhvcml0eTAeFw0wOTAxMjYxNzAwMDBaFw0xMDAxMjYxNzAwMDBaMIHR
+MQswCQYDVQQGEwJVUzEWMBQGA1UECBMNTWFzc2FjaHVzZXR0czESMBAGA1UEBxMJ
+Q2FtYnJpZGdlMS4wLAYDVQQKEyVNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBU
+ZWNobm9sb2d5MS0wKwYDVQQLEyRTdHVkZW50IEluZm9ybWF0aW9uIFByb2Nlc3Np
+bmcgQm9hcmQxFzAVBgNVBAMTDnBpY2tlci5taXQuZWR1MR4wHAYJKoZIhvcNAQkB
+Fg9zY3JpcHRzQG1pdC5lZHUwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALU+
+IU3BiWsBjEeA/rM3J3b4UkHmoj1Ldnjl8mY8D7Gt+5ePLqK2U9O2DuJm+bkLt860
+1fUcH28ifUj1bfAWzY5IedEUShQvL/jEvR2Hz32LXHetWCSwDqFt1grH2LwvZ2XI
+XdjYMcJnS0r0oaVUgq/LNAgqBH+OfEy329xqil2BAgMBAAGjdTBzMAkGA1UdEwQC
+MAAwEQYJYIZIAYb4QgEBBAQDAgXgMCcGA1UdJQQgMB4GCCsGAQUFBwMBBggrBgEF
+BQcDBAYIKwYBBQUHAwIwCwYDVR0PBAQDAgXgMB0GA1UdDgQWBBRUEXwJVUQclEWp
+onZGKywkJmpE6DANBgkqhkiG9w0BAQUFAAOBgQAUb44zSkhT//Rq9DgTyXTTI7hE
+iygPEMAgKPrny/N0ZvKwASZQ6638VFI/0eQQyNdxrlzyROKzfLCKaswzzc30rReg
+yR3GPTIxkwS02m3KoLyZW/CDkexAx6UjhwVHduYTIKRa1GNeP9X1P5iZwxxz5zYM
+P10eEtAXp/BVmfrZyA==
+-----END CERTIFICATE-----
Index: /tags/fc9-eol/server/fedora/config/etc/pki/tls/certs/queues.pem
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/pki/tls/certs/queues.pem	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/pki/tls/certs/queues.pem	(revision 1257)
@@ -0,0 +1,71 @@
+From mitcert@MIT.EDU Thu Aug 28 22:13:11 2008
+Date: Thu, 28 Aug 2008 22:13:01 -0400 (EDT)
+From: mitcert@MIT.EDU
+To: geofft@mit.edu
+Subject: CSR for queues.mit.edu (scripts vhost)  [help.mit.edu #695371]
+
+Certificate:
+    Data:
+        Version: 3 (0x2)
+        Serial Number: 2941 (0xb7d)
+        Signature Algorithm: sha1WithRSAEncryption
+        Issuer: C=US, ST=Massachusetts, O=Massachusetts Institute of Technology, OU=MIT Certification Authority
+        Validity
+            Not Before: Aug 27 16:00:00 2008 GMT
+            Not After : Aug 27 16:00:00 2009 GMT
+        Subject: C=US, ST=Massachusetts, L=Cambridge, O=Massachusetts Institute of Technology, OU=Student Information Processing Board, CN=queues.mit.edu/Email=scripts@mit.edu
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (1024 bit)
+                Modulus (1024 bit):
+                    00:b5:3e:21:4d:c1:89:6b:01:8c:47:80:fe:b3:37:
+                    27:76:f8:52:41:e6:a2:3d:4b:76:78:e5:f2:66:3c:
+                    0f:b1:ad:fb:97:8f:2e:a2:b6:53:d3:b6:0e:e2:66:
+                    f9:b9:0b:b7:ce:b4:d5:f5:1c:1f:6f:22:7d:48:f5:
+                    6d:f0:16:cd:8e:48:79:d1:14:4a:14:2f:2f:f8:c4:
+                    bd:1d:87:cf:7d:8b:5c:77:ad:58:24:b0:0e:a1:6d:
+                    d6:0a:c7:d8:bc:2f:67:65:c8:5d:d8:d8:31:c2:67:
+                    4b:4a:f4:a1:a5:54:82:af:cb:34:08:2a:04:7f:8e:
+                    7c:4c:b7:db:dc:6a:8a:5d:81
+                Exponent: 65537 (0x10001)
+        X509v3 extensions:
+            X509v3 Basic Constraints: 
+                CA:FALSE
+            Netscape Cert Type: 
+                SSL Client, SSL Server, S/MIME
+            X509v3 Extended Key Usage: 
+                TLS Web Server Authentication, E-mail Protection, TLS Web Client Authentication
+            X509v3 Key Usage: 
+                Digital Signature, Non Repudiation, Key Encipherment
+            X509v3 Subject Key Identifier: 
+                54:11:7C:09:55:44:1C:94:45:A9:A2:76:46:2B:2C:24:26:6A:44:E8
+    Signature Algorithm: sha1WithRSAEncryption
+        6b:1e:d2:cf:18:ff:c8:18:4f:d9:4e:c8:b1:e0:4d:94:6d:7b:
+        28:3c:ab:e8:60:e3:e1:14:ed:ac:85:5a:6a:17:67:03:81:bf:
+        78:39:cd:5c:7e:0d:0f:02:a8:27:b2:e9:af:6b:45:9d:b0:01:
+        45:13:71:27:cf:49:14:32:c9:19:0b:91:1a:34:05:ca:29:ea:
+        94:d5:61:5e:fa:f5:a0:02:48:0f:b2:8f:aa:d3:2b:4b:46:f9:
+        ff:e1:00:14:1f:c9:d6:2a:b8:ae:b4:46:57:2e:6b:19:dc:70:
+        1a:fc:11:7c:d3:01:2e:83:af:3c:bc:23:90:7b:48:77:36:48:
+        5c:dd
+-----BEGIN CERTIFICATE-----
+MIIDOTCCAqKgAwIBAgICC30wDQYJKoZIhvcNAQEFBQAwezELMAkGA1UEBhMCVVMx
+FjAUBgNVBAgTDU1hc3NhY2h1c2V0dHMxLjAsBgNVBAoTJU1hc3NhY2h1c2V0dHMg
+SW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kxJDAiBgNVBAsTG01JVCBDZXJ0aWZpY2F0
+aW9uIEF1dGhvcml0eTAeFw0wODA4MjcxNjAwMDBaFw0wOTA4MjcxNjAwMDBaMIHR
+MQswCQYDVQQGEwJVUzEWMBQGA1UECBMNTWFzc2FjaHVzZXR0czESMBAGA1UEBxMJ
+Q2FtYnJpZGdlMS4wLAYDVQQKEyVNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBU
+ZWNobm9sb2d5MS0wKwYDVQQLEyRTdHVkZW50IEluZm9ybWF0aW9uIFByb2Nlc3Np
+bmcgQm9hcmQxFzAVBgNVBAMTDnF1ZXVlcy5taXQuZWR1MR4wHAYJKoZIhvcNAQkB
+Fg9zY3JpcHRzQG1pdC5lZHUwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALU+
+IU3BiWsBjEeA/rM3J3b4UkHmoj1Ldnjl8mY8D7Gt+5ePLqK2U9O2DuJm+bkLt860
+1fUcH28ifUj1bfAWzY5IedEUShQvL/jEvR2Hz32LXHetWCSwDqFt1grH2LwvZ2XI
+XdjYMcJnS0r0oaVUgq/LNAgqBH+OfEy329xqil2BAgMBAAGjdTBzMAkGA1UdEwQC
+MAAwEQYJYIZIAYb4QgEBBAQDAgXgMCcGA1UdJQQgMB4GCCsGAQUFBwMBBggrBgEF
+BQcDBAYIKwYBBQUHAwIwCwYDVR0PBAQDAgXgMB0GA1UdDgQWBBRUEXwJVUQclEWp
+onZGKywkJmpE6DANBgkqhkiG9w0BAQUFAAOBgQBrHtLPGP/IGE/ZTsix4E2UbXso
+PKvoYOPhFO2shVpqF2cDgb94Oc1cfg0PAqgnsumva0WdsAFFE3Enz0kUMskZC5Ea
+NAXKKeqU1WFe+vWgAkgPso+q0ytLRvn/4QAUH8nWKriutEZXLmsZ3HAa/BF80wEu
+g688vCOQe0h3Nkhc3Q==
+-----END CERTIFICATE-----
+
Index: /tags/fc9-eol/server/fedora/config/etc/pki/tls/certs/random-hall.pem
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/pki/tls/certs/random-hall.pem	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/pki/tls/certs/random-hall.pem	(revision 1257)
@@ -0,0 +1,64 @@
+Certificate:
+    Data:
+        Version: 3 (0x2)
+        Serial Number: 2937 (0xb79)
+        Signature Algorithm: sha1WithRSAEncryption
+        Issuer: C=US, ST=Massachusetts, O=Massachusetts Institute of Technology, OU=MIT Certification Authority
+        Validity
+            Not Before: Aug 25 16:00:00 2008 GMT
+            Not After : Aug 25 16:00:00 2009 GMT
+        Subject: C=US, ST=Massachusetts, L=Cambridge, O=Massachusetts Institute of Technology, OU=Student Information Processing Board, CN=random-hall.mit.edu/Email=scripts@mit.edu
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (1024 bit)
+                Modulus (1024 bit):
+                    00:b5:3e:21:4d:c1:89:6b:01:8c:47:80:fe:b3:37:
+                    27:76:f8:52:41:e6:a2:3d:4b:76:78:e5:f2:66:3c:
+                    0f:b1:ad:fb:97:8f:2e:a2:b6:53:d3:b6:0e:e2:66:
+                    f9:b9:0b:b7:ce:b4:d5:f5:1c:1f:6f:22:7d:48:f5:
+                    6d:f0:16:cd:8e:48:79:d1:14:4a:14:2f:2f:f8:c4:
+                    bd:1d:87:cf:7d:8b:5c:77:ad:58:24:b0:0e:a1:6d:
+                    d6:0a:c7:d8:bc:2f:67:65:c8:5d:d8:d8:31:c2:67:
+                    4b:4a:f4:a1:a5:54:82:af:cb:34:08:2a:04:7f:8e:
+                    7c:4c:b7:db:dc:6a:8a:5d:81
+                Exponent: 65537 (0x10001)
+        X509v3 extensions:
+            X509v3 Basic Constraints: 
+                CA:FALSE
+            Netscape Cert Type: 
+                SSL Client, SSL Server, S/MIME
+            X509v3 Extended Key Usage: 
+                TLS Web Server Authentication, E-mail Protection, TLS Web Client Authentication
+            X509v3 Key Usage: 
+                Digital Signature, Non Repudiation, Key Encipherment
+            X509v3 Subject Key Identifier: 
+                54:11:7C:09:55:44:1C:94:45:A9:A2:76:46:2B:2C:24:26:6A:44:E8
+    Signature Algorithm: sha1WithRSAEncryption
+        d0:1e:df:46:8c:2c:8f:9d:f6:36:35:5b:b7:9b:d8:01:56:7f:
+        c5:ce:e7:73:3c:1b:a6:0c:67:e5:f2:90:42:d3:89:84:af:89:
+        53:a4:a0:e1:6c:c9:7c:95:e1:7b:59:af:a2:84:15:af:29:3e:
+        29:d1:d3:eb:9e:43:78:37:7c:d4:9b:30:bc:8c:fb:86:1f:74:
+        a6:b8:2e:76:59:cb:87:df:b7:b2:8d:c6:02:d0:ee:72:f2:16:
+        0f:47:bc:0c:19:0f:9f:b4:db:5a:13:31:82:1c:c4:08:a2:1e:
+        f4:59:1e:ac:d6:23:2b:44:25:bb:19:f6:9e:0c:3b:44:6a:a4:
+        4c:be
+-----BEGIN CERTIFICATE-----
+MIIDPjCCAqegAwIBAgICC3kwDQYJKoZIhvcNAQEFBQAwezELMAkGA1UEBhMCVVMx
+FjAUBgNVBAgTDU1hc3NhY2h1c2V0dHMxLjAsBgNVBAoTJU1hc3NhY2h1c2V0dHMg
+SW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kxJDAiBgNVBAsTG01JVCBDZXJ0aWZpY2F0
+aW9uIEF1dGhvcml0eTAeFw0wODA4MjUxNjAwMDBaFw0wOTA4MjUxNjAwMDBaMIHW
+MQswCQYDVQQGEwJVUzEWMBQGA1UECBMNTWFzc2FjaHVzZXR0czESMBAGA1UEBxMJ
+Q2FtYnJpZGdlMS4wLAYDVQQKEyVNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBU
+ZWNobm9sb2d5MS0wKwYDVQQLEyRTdHVkZW50IEluZm9ybWF0aW9uIFByb2Nlc3Np
+bmcgQm9hcmQxHDAaBgNVBAMTE3JhbmRvbS1oYWxsLm1pdC5lZHUxHjAcBgkqhkiG
+9w0BCQEWD3NjcmlwdHNAbWl0LmVkdTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkC
+gYEAtT4hTcGJawGMR4D+szcndvhSQeaiPUt2eOXyZjwPsa37l48uorZT07YO4mb5
+uQu3zrTV9RwfbyJ9SPVt8BbNjkh50RRKFC8v+MS9HYfPfYtcd61YJLAOoW3WCsfY
+vC9nZchd2NgxwmdLSvShpVSCr8s0CCoEf458TLfb3GqKXYECAwEAAaN1MHMwCQYD
+VR0TBAIwADARBglghkgBhvhCAQEEBAMCBeAwJwYDVR0lBCAwHgYIKwYBBQUHAwEG
+CCsGAQUFBwMEBggrBgEFBQcDAjALBgNVHQ8EBAMCBeAwHQYDVR0OBBYEFFQRfAlV
+RByURamidkYrLCQmakToMA0GCSqGSIb3DQEBBQUAA4GBANAe30aMLI+d9jY1W7eb
+2AFWf8XO53M8G6YMZ+XykELTiYSviVOkoOFsyXyV4XtZr6KEFa8pPinR0+ueQ3g3
+fNSbMLyM+4YfdKa4LnZZy4fft7KNxgLQ7nLyFg9HvAwZD5+021oTMYIcxAiiHvRZ
+HqzWIytEJbsZ9p4MO0RqpEy+
+-----END CERTIFICATE-----
Index: /tags/fc9-eol/server/fedora/config/etc/pki/tls/certs/schuh.pem
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/pki/tls/certs/schuh.pem	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/pki/tls/certs/schuh.pem	(revision 1257)
@@ -0,0 +1,71 @@
+From mitcert@MIT.EDU Tue Mar  3 00:33:33 2009
+Date: Tue, 3 Mar 2009 00:32:10 -0500 (EST)
+From: mitcert@MIT.EDU
+To: geofft@mit.edu
+Subject: CSR for scripts vhost schuh.mit.edu  [help.mit.edu #821992]
+
+Certificate:
+    Data:
+        Version: 3 (0x2)
+        Serial Number: 3331 (0xd03)
+        Signature Algorithm: sha1WithRSAEncryption
+        Issuer: C=US, ST=Massachusetts, O=Massachusetts Institute of Technology, OU=MIT Certification Authority
+        Validity
+            Not Before: Mar  1 17:00:00 2009 GMT
+            Not After : Mar  1 17:00:00 2010 GMT
+        Subject: C=US, ST=Massachusetts, L=Cambridge, O=Massachusetts Institute of Technology, OU=Student Information Processing Board, CN=schuh.mit.edu/Email=scripts@mit.edu
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (1024 bit)
+                Modulus (1024 bit):
+                    00:b5:3e:21:4d:c1:89:6b:01:8c:47:80:fe:b3:37:
+                    27:76:f8:52:41:e6:a2:3d:4b:76:78:e5:f2:66:3c:
+                    0f:b1:ad:fb:97:8f:2e:a2:b6:53:d3:b6:0e:e2:66:
+                    f9:b9:0b:b7:ce:b4:d5:f5:1c:1f:6f:22:7d:48:f5:
+                    6d:f0:16:cd:8e:48:79:d1:14:4a:14:2f:2f:f8:c4:
+                    bd:1d:87:cf:7d:8b:5c:77:ad:58:24:b0:0e:a1:6d:
+                    d6:0a:c7:d8:bc:2f:67:65:c8:5d:d8:d8:31:c2:67:
+                    4b:4a:f4:a1:a5:54:82:af:cb:34:08:2a:04:7f:8e:
+                    7c:4c:b7:db:dc:6a:8a:5d:81
+                Exponent: 65537 (0x10001)
+        X509v3 extensions:
+            X509v3 Basic Constraints: 
+                CA:FALSE
+            Netscape Cert Type: 
+                SSL Client, SSL Server, S/MIME
+            X509v3 Extended Key Usage: 
+                TLS Web Server Authentication, E-mail Protection, TLS Web Client Authentication
+            X509v3 Key Usage: 
+                Digital Signature, Non Repudiation, Key Encipherment
+            X509v3 Subject Key Identifier: 
+                54:11:7C:09:55:44:1C:94:45:A9:A2:76:46:2B:2C:24:26:6A:44:E8
+    Signature Algorithm: sha1WithRSAEncryption
+        a1:12:c3:df:fc:16:6d:95:44:a4:b8:cb:f0:fe:36:9a:27:21:
+        71:2e:da:1c:cf:10:2c:fd:ae:bd:72:ca:34:12:b7:e7:5e:1c:
+        45:61:4e:9d:9e:ac:6f:33:30:24:f7:3d:9e:28:1e:62:fe:88:
+        c1:0b:ab:b7:2c:c7:90:8f:44:10:82:7f:4e:29:7e:bf:8b:e4:
+        aa:68:aa:b8:be:92:95:d6:e7:52:1e:19:e9:d0:d5:b9:b6:85:
+        d1:bc:de:ac:3f:9d:5d:3b:a1:2d:4d:f6:fe:40:e7:11:45:86:
+        27:be:5b:da:f7:02:b6:85:8b:3b:29:25:f3:31:86:bc:4e:cd:
+        e1:57
+-----BEGIN CERTIFICATE-----
+MIIDODCCAqGgAwIBAgICDQMwDQYJKoZIhvcNAQEFBQAwezELMAkGA1UEBhMCVVMx
+FjAUBgNVBAgTDU1hc3NhY2h1c2V0dHMxLjAsBgNVBAoTJU1hc3NhY2h1c2V0dHMg
+SW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kxJDAiBgNVBAsTG01JVCBDZXJ0aWZpY2F0
+aW9uIEF1dGhvcml0eTAeFw0wOTAzMDExNzAwMDBaFw0xMDAzMDExNzAwMDBaMIHQ
+MQswCQYDVQQGEwJVUzEWMBQGA1UECBMNTWFzc2FjaHVzZXR0czESMBAGA1UEBxMJ
+Q2FtYnJpZGdlMS4wLAYDVQQKEyVNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBU
+ZWNobm9sb2d5MS0wKwYDVQQLEyRTdHVkZW50IEluZm9ybWF0aW9uIFByb2Nlc3Np
+bmcgQm9hcmQxFjAUBgNVBAMTDXNjaHVoLm1pdC5lZHUxHjAcBgkqhkiG9w0BCQEW
+D3NjcmlwdHNAbWl0LmVkdTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAtT4h
+TcGJawGMR4D+szcndvhSQeaiPUt2eOXyZjwPsa37l48uorZT07YO4mb5uQu3zrTV
+9RwfbyJ9SPVt8BbNjkh50RRKFC8v+MS9HYfPfYtcd61YJLAOoW3WCsfYvC9nZchd
+2NgxwmdLSvShpVSCr8s0CCoEf458TLfb3GqKXYECAwEAAaN1MHMwCQYDVR0TBAIw
+ADARBglghkgBhvhCAQEEBAMCBeAwJwYDVR0lBCAwHgYIKwYBBQUHAwEGCCsGAQUF
+BwMEBggrBgEFBQcDAjALBgNVHQ8EBAMCBeAwHQYDVR0OBBYEFFQRfAlVRByURami
+dkYrLCQmakToMA0GCSqGSIb3DQEBBQUAA4GBAKESw9/8Fm2VRKS4y/D+NponIXEu
+2hzPECz9rr1yyjQSt+deHEVhTp2erG8zMCT3PZ4oHmL+iMELq7csx5CPRBCCf04p
+fr+L5Kpoqri+kpXW51IeGenQ1bm2hdG83qw/nV07oS1N9v5A5xFFhie+W9r3AraF
+izspJfMxhrxOzeFX
+-----END CERTIFICATE-----
+
Index: /tags/fc9-eol/server/fedora/config/etc/pki/tls/certs/scripts-cert.pem
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/pki/tls/certs/scripts-cert.pem	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/pki/tls/certs/scripts-cert.pem	(revision 1257)
@@ -0,0 +1,69 @@
+Certificate:
+    Data:
+        Version: 3 (0x2)
+        Serial Number:
+            bf:ae:ff:3a:cd:d8:29:65:eb:c7:3a:7a:57:81:3e:fb
+        Signature Algorithm: sha1WithRSAEncryption
+        Issuer: C=US, ST=Massachusetts, O=Massachusetts Institute of Technology, OU=MIT Certification Authority
+        Validity
+            Not Before: Jul  6 16:00:00 2009 GMT
+            Not After : Jul  8 16:00:00 2010 GMT
+        Subject: C=US, ST=Massachusetts, L=Cambridge, O=Massachusetts Institute of Technology, OU=Student Information Processing Board, CN=scripts-cert.mit.edu/emailAddress=scripts@mit.edu
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (1024 bit)
+                Modulus (1024 bit):
+                    00:b5:3e:21:4d:c1:89:6b:01:8c:47:80:fe:b3:37:
+                    27:76:f8:52:41:e6:a2:3d:4b:76:78:e5:f2:66:3c:
+                    0f:b1:ad:fb:97:8f:2e:a2:b6:53:d3:b6:0e:e2:66:
+                    f9:b9:0b:b7:ce:b4:d5:f5:1c:1f:6f:22:7d:48:f5:
+                    6d:f0:16:cd:8e:48:79:d1:14:4a:14:2f:2f:f8:c4:
+                    bd:1d:87:cf:7d:8b:5c:77:ad:58:24:b0:0e:a1:6d:
+                    d6:0a:c7:d8:bc:2f:67:65:c8:5d:d8:d8:31:c2:67:
+                    4b:4a:f4:a1:a5:54:82:af:cb:34:08:2a:04:7f:8e:
+                    7c:4c:b7:db:dc:6a:8a:5d:81
+                Exponent: 65537 (0x10001)
+        X509v3 extensions:
+            X509v3 Basic Constraints: 
+                CA:FALSE
+            Netscape Cert Type: 
+                SSL Client, SSL Server, S/MIME
+            X509v3 Extended Key Usage: 
+                TLS Web Server Authentication, E-mail Protection, TLS Web Client Authentication
+            X509v3 Key Usage: 
+                Digital Signature, Non Repudiation, Key Encipherment
+            X509v3 Subject Key Identifier: 
+                54:11:7C:09:55:44:1C:94:45:A9:A2:76:46:2B:2C:24:26:6A:44:E8
+            X509v3 CRL Distribution Points: 
+                URI:http://ca.mit.edu/ca/mitserver.crl
+
+    Signature Algorithm: sha1WithRSAEncryption
+        2b:39:ba:b0:36:13:fc:c1:bb:f5:34:95:d4:5a:0c:08:2a:db:
+        62:a0:7b:ea:9c:3b:a2:ed:21:22:6d:49:cb:78:b9:fd:7a:de:
+        aa:3e:19:d1:22:0a:09:f1:c8:9b:20:80:af:0c:9a:76:c6:cf:
+        8e:d3:1c:dd:e2:32:c2:da:9f:20:62:23:17:68:d6:da:0d:6d:
+        88:18:3e:4e:cb:2d:74:b0:af:23:38:ba:14:b5:1a:e7:8e:bd:
+        21:be:39:07:30:76:8e:71:7c:c9:f0:ad:f0:d5:d7:69:2f:7a:
+        ab:35:d8:4f:17:2b:ed:a7:fc:b4:1c:e2:fc:9e:00:af:51:2c:
+        46:28
+-----BEGIN CERTIFICATE-----
+MIIDhTCCAu6gAwIBAgIRAL+u/zrN2Cll68c6eleBPvswDQYJKoZIhvcNAQEFBQAw
+ezELMAkGA1UEBhMCVVMxFjAUBgNVBAgTDU1hc3NhY2h1c2V0dHMxLjAsBgNVBAoT
+JU1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kxJDAiBgNVBAsT
+G01JVCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wOTA3MDYxNjAwMDBaFw0x
+MDA3MDgxNjAwMDBaMIHXMQswCQYDVQQGEwJVUzEWMBQGA1UECBMNTWFzc2FjaHVz
+ZXR0czESMBAGA1UEBxMJQ2FtYnJpZGdlMS4wLAYDVQQKEyVNYXNzYWNodXNldHRz
+IEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5MS0wKwYDVQQLEyRTdHVkZW50IEluZm9y
+bWF0aW9uIFByb2Nlc3NpbmcgQm9hcmQxHTAbBgNVBAMTFHNjcmlwdHMtY2VydC5t
+aXQuZWR1MR4wHAYJKoZIhvcNAQkBFg9zY3JpcHRzQG1pdC5lZHUwgZ8wDQYJKoZI
+hvcNAQEBBQADgY0AMIGJAoGBALU+IU3BiWsBjEeA/rM3J3b4UkHmoj1Ldnjl8mY8
+D7Gt+5ePLqK2U9O2DuJm+bkLt8601fUcH28ifUj1bfAWzY5IedEUShQvL/jEvR2H
+z32LXHetWCSwDqFt1grH2LwvZ2XIXdjYMcJnS0r0oaVUgq/LNAgqBH+OfEy329xq
+il2BAgMBAAGjgaswgagwCQYDVR0TBAIwADARBglghkgBhvhCAQEEBAMCBeAwJwYD
+VR0lBCAwHgYIKwYBBQUHAwEGCCsGAQUFBwMEBggrBgEFBQcDAjALBgNVHQ8EBAMC
+BeAwHQYDVR0OBBYEFFQRfAlVRByURamidkYrLCQmakToMDMGA1UdHwQsMCowKKAm
+oCSGImh0dHA6Ly9jYS5taXQuZWR1L2NhL21pdHNlcnZlci5jcmwwDQYJKoZIhvcN
+AQEFBQADgYEAKzm6sDYT/MG79TSV1FoMCCrbYqB76pw7ou0hIm1Jy3i5/Xreqj4Z
+0SIKCfHImyCArwyadsbPjtMc3eIywtqfIGIjF2jW2g1tiBg+TsstdLCvIzi6FLUa
+5469Ib45BzB2jnF8yfCt8NXXaS96qzXYTxcr7af8tBzi/J4Ar1EsRig=
+-----END CERTIFICATE-----
Index: /tags/fc9-eol/server/fedora/config/etc/pki/tls/certs/scripts.pem
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/pki/tls/certs/scripts.pem	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/pki/tls/certs/scripts.pem	(revision 1257)
@@ -0,0 +1,65 @@
+Certificate:
+    Data:
+        Version: 3 (0x2)
+        Serial Number: 745256 (0xb5f28)
+        Signature Algorithm: sha1WithRSAEncryption
+        Issuer: C=US, O=Equifax, OU=Equifax Secure Certificate Authority
+        Validity
+            Not Before: Jun  4 20:22:36 2009 GMT
+            Not After : Jun  7 02:53:00 2011 GMT
+        Subject: C=US, ST=Massachusetts, L=Cambridge, O=Massachusetts Institute of Technology, OU=Student Information Processing Board, CN=scripts.mit.edu
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (1024 bit)
+                Modulus (1024 bit):
+                    00:b5:3e:21:4d:c1:89:6b:01:8c:47:80:fe:b3:37:
+                    27:76:f8:52:41:e6:a2:3d:4b:76:78:e5:f2:66:3c:
+                    0f:b1:ad:fb:97:8f:2e:a2:b6:53:d3:b6:0e:e2:66:
+                    f9:b9:0b:b7:ce:b4:d5:f5:1c:1f:6f:22:7d:48:f5:
+                    6d:f0:16:cd:8e:48:79:d1:14:4a:14:2f:2f:f8:c4:
+                    bd:1d:87:cf:7d:8b:5c:77:ad:58:24:b0:0e:a1:6d:
+                    d6:0a:c7:d8:bc:2f:67:65:c8:5d:d8:d8:31:c2:67:
+                    4b:4a:f4:a1:a5:54:82:af:cb:34:08:2a:04:7f:8e:
+                    7c:4c:b7:db:dc:6a:8a:5d:81
+                Exponent: 65537 (0x10001)
+        X509v3 extensions:
+            X509v3 Key Usage: critical
+                Digital Signature, Non Repudiation, Key Encipherment, Data Encipherment
+            X509v3 Subject Key Identifier: 
+                54:11:7C:09:55:44:1C:94:45:A9:A2:76:46:2B:2C:24:26:6A:44:E8
+            X509v3 CRL Distribution Points: 
+                URI:http://crl.geotrust.com/crls/secureca.crl
+
+            X509v3 Authority Key Identifier: 
+                keyid:48:E6:68:F9:2B:D2:B2:95:D7:47:D8:23:20:10:4F:33:98:90:9F:D4
+
+            X509v3 Extended Key Usage: 
+                TLS Web Server Authentication, TLS Web Client Authentication
+    Signature Algorithm: sha1WithRSAEncryption
+        0e:42:72:ba:24:61:07:eb:69:d6:3e:4a:e9:ec:a3:f8:16:c0:
+        a2:31:2d:f0:93:ec:37:2c:dc:c0:7c:a6:9e:60:52:d4:c6:af:
+        f4:c7:cb:f0:ad:bf:3c:b8:34:a7:1e:35:c3:15:84:f6:79:96:
+        f3:ec:d7:78:62:83:81:b5:bb:5e:77:0a:19:b6:d1:9f:ae:a9:
+        0b:f6:8a:7c:71:1e:a9:8e:e7:3d:e7:a6:38:47:3a:9f:0c:69:
+        37:a1:3f:0e:44:77:47:b9:75:4a:49:08:f3:42:43:58:2c:24:
+        d2:b9:5b:9c:8b:9a:5f:b6:83:cc:bb:ec:26:65:b7:75:50:83:
+        a6:5b
+-----BEGIN CERTIFICATE-----
+MIIDKDCCApGgAwIBAgIDC18oMA0GCSqGSIb3DQEBBQUAME4xCzAJBgNVBAYTAlVT
+MRAwDgYDVQQKEwdFcXVpZmF4MS0wKwYDVQQLEyRFcXVpZmF4IFNlY3VyZSBDZXJ0
+aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDkwNjA0MjAyMjM2WhcNMTEwNjA3MDI1MzAw
+WjCBsjELMAkGA1UEBhMCVVMxFjAUBgNVBAgTDU1hc3NhY2h1c2V0dHMxEjAQBgNV
+BAcTCUNhbWJyaWRnZTEuMCwGA1UEChMlTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUg
+b2YgVGVjaG5vbG9neTEtMCsGA1UECxMkU3R1ZGVudCBJbmZvcm1hdGlvbiBQcm9j
+ZXNzaW5nIEJvYXJkMRgwFgYDVQQDEw9zY3JpcHRzLm1pdC5lZHUwgZ8wDQYJKoZI
+hvcNAQEBBQADgY0AMIGJAoGBALU+IU3BiWsBjEeA/rM3J3b4UkHmoj1Ldnjl8mY8
+D7Gt+5ePLqK2U9O2DuJm+bkLt8601fUcH28ifUj1bfAWzY5IedEUShQvL/jEvR2H
+z32LXHetWCSwDqFt1grH2LwvZ2XIXdjYMcJnS0r0oaVUgq/LNAgqBH+OfEy329xq
+il2BAgMBAAGjga4wgaswDgYDVR0PAQH/BAQDAgTwMB0GA1UdDgQWBBRUEXwJVUQc
+lEWponZGKywkJmpE6DA6BgNVHR8EMzAxMC+gLaArhilodHRwOi8vY3JsLmdlb3Ry
+dXN0LmNvbS9jcmxzL3NlY3VyZWNhLmNybDAfBgNVHSMEGDAWgBRI5mj5K9KylddH
+2CMgEE8zmJCf1DAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDQYJKoZI
+hvcNAQEFBQADgYEADkJyuiRhB+tp1j5K6eyj+BbAojEt8JPsNyzcwHymnmBS1Mav
+9MfL8K2/PLg0px41wxWE9nmW8+zXeGKDgbW7XncKGbbRn66pC/aKfHEeqY7nPeem
+OEc6nwxpN6E/DkR3R7l1SkkI80JDWCwk0rlbnIuaX7aDzLvsJmW3dVCDpls=
+-----END CERTIFICATE-----
Index: /tags/fc9-eol/server/fedora/config/etc/pki/tls/certs/sipb.pem
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/pki/tls/certs/sipb.pem	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/pki/tls/certs/sipb.pem	(revision 1257)
@@ -0,0 +1,79 @@
+
+From mitcert@MIT.EDU Wed Nov 19 12:27:39 2008
+Date: Wed, 19 Nov 2008 12:10:45 -0500 (EST)
+From: mitcert@MIT.EDU
+To: jhawk@mit.edu
+Subject: [geofft@MIT.EDU: CSR for sipb.mit.edu for mitcert]  [help.mit.edu
+    #755313]
+
+Here you go.
+
+Certificate:
+    Data:
+        Version: 3 (0x2)
+        Serial Number: 3129 (0xc39)
+        Signature Algorithm: sha1WithRSAEncryption
+        Issuer: C=US, ST=Massachusetts, O=Massachusetts Institute of Technology,
+OU=MIT Certification Authority
+        Validity
+            Not Before: Nov 17 17:00:00 2008 GMT
+            Not After : Nov 17 17:00:00 2009 GMT
+        Subject: C=US, ST=Massachusetts, L=Cambridge, O=Massachusetts Institute
+of Technology, OU=Student Information Processing Board,
+CN=sipb.mit.edu/Email=scripts@mit.edu
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (1024 bit)
+                Modulus (1024 bit):
+                    00:b5:3e:21:4d:c1:89:6b:01:8c:47:80:fe:b3:37:
+                    27:76:f8:52:41:e6:a2:3d:4b:76:78:e5:f2:66:3c:
+                    0f:b1:ad:fb:97:8f:2e:a2:b6:53:d3:b6:0e:e2:66:
+                    f9:b9:0b:b7:ce:b4:d5:f5:1c:1f:6f:22:7d:48:f5:
+                    6d:f0:16:cd:8e:48:79:d1:14:4a:14:2f:2f:f8:c4:
+                    bd:1d:87:cf:7d:8b:5c:77:ad:58:24:b0:0e:a1:6d:
+                    d6:0a:c7:d8:bc:2f:67:65:c8:5d:d8:d8:31:c2:67:
+                    4b:4a:f4:a1:a5:54:82:af:cb:34:08:2a:04:7f:8e:
+                    7c:4c:b7:db:dc:6a:8a:5d:81
+                Exponent: 65537 (0x10001)
+        X509v3 extensions:
+            X509v3 Basic Constraints: 
+                CA:FALSE
+            Netscape Cert Type: 
+                SSL Client, SSL Server, S/MIME
+            X509v3 Extended Key Usage: 
+                TLS Web Server Authentication, E-mail Protection, TLS Web Client
+Authentication
+            X509v3 Key Usage: 
+                Digital Signature, Non Repudiation, Key Encipherment
+            X509v3 Subject Key Identifier: 
+                54:11:7C:09:55:44:1C:94:45:A9:A2:76:46:2B:2C:24:26:6A:44:E8
+    Signature Algorithm: sha1WithRSAEncryption
+        75:14:c0:e5:a0:ab:aa:5c:dd:4d:eb:0a:9c:06:eb:f4:4b:c9:
+        36:4d:71:2d:ac:03:e7:cd:b4:dd:e0:67:c8:10:cf:59:05:fc:
+        08:f6:a5:0c:59:e9:f8:eb:36:a9:3b:51:91:fa:fd:fd:10:34:
+        ad:73:c1:bb:cf:53:3d:63:44:04:9b:8d:37:aa:64:aa:e2:6e:
+        ee:1c:21:c1:4b:b9:f1:a3:7e:22:54:8b:72:a4:de:1d:78:4d:
+        6e:03:b6:33:33:39:d8:9f:aa:06:f0:fb:68:38:d0:74:e6:34:
+        34:05:be:51:a9:3f:b2:f1:15:9b:99:f2:34:ce:7a:46:28:3d:
+        58:58
+-----BEGIN CERTIFICATE-----
+MIIDNzCCAqCgAwIBAgICDDkwDQYJKoZIhvcNAQEFBQAwezELMAkGA1UEBhMCVVMx
+FjAUBgNVBAgTDU1hc3NhY2h1c2V0dHMxLjAsBgNVBAoTJU1hc3NhY2h1c2V0dHMg
+SW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kxJDAiBgNVBAsTG01JVCBDZXJ0aWZpY2F0
+aW9uIEF1dGhvcml0eTAeFw0wODExMTcxNzAwMDBaFw0wOTExMTcxNzAwMDBaMIHP
+MQswCQYDVQQGEwJVUzEWMBQGA1UECBMNTWFzc2FjaHVzZXR0czESMBAGA1UEBxMJ
+Q2FtYnJpZGdlMS4wLAYDVQQKEyVNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBU
+ZWNobm9sb2d5MS0wKwYDVQQLEyRTdHVkZW50IEluZm9ybWF0aW9uIFByb2Nlc3Np
+bmcgQm9hcmQxFTATBgNVBAMTDHNpcGIubWl0LmVkdTEeMBwGCSqGSIb3DQEJARYP
+c2NyaXB0c0BtaXQuZWR1MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC1PiFN
+wYlrAYxHgP6zNyd2+FJB5qI9S3Z45fJmPA+xrfuXjy6itlPTtg7iZvm5C7fOtNX1
+HB9vIn1I9W3wFs2OSHnRFEoULy/4xL0dh899i1x3rVgksA6hbdYKx9i8L2dlyF3Y
+2DHCZ0tK9KGlVIKvyzQIKgR/jnxMt9vcaopdgQIDAQABo3UwczAJBgNVHRMEAjAA
+MBEGCWCGSAGG+EIBAQQEAwIF4DAnBgNVHSUEIDAeBggrBgEFBQcDAQYIKwYBBQUH
+AwQGCCsGAQUFBwMCMAsGA1UdDwQEAwIF4DAdBgNVHQ4EFgQUVBF8CVVEHJRFqaJ2
+RissJCZqROgwDQYJKoZIhvcNAQEFBQADgYEAdRTA5aCrqlzdTesKnAbr9EvJNk1x
+LawD58203eBnyBDPWQX8CPalDFnp+Os2qTtRkfr9/RA0rXPBu89TPWNEBJuNN6pk
+quJu7hwhwUu58aN+IlSLcqTeHXhNbgO2MzM52J+qBvD7aDjQdOY0NAW+Uak/svEV
+m5nyNM56Rig9WFg=
+-----END CERTIFICATE-----
+
Index: /tags/fc9-eol/server/fedora/config/etc/pki/tls/certs/star.scripts.pem
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/pki/tls/certs/star.scripts.pem	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/pki/tls/certs/star.scripts.pem	(revision 1257)
@@ -0,0 +1,65 @@
+Certificate:
+    Data:
+        Version: 3 (0x2)
+        Serial Number: 744584 (0xb5c88)
+        Signature Algorithm: sha1WithRSAEncryption
+        Issuer: C=US, O=Equifax, OU=Equifax Secure Certificate Authority
+        Validity
+            Not Before: Jun  4 09:13:16 2009 GMT
+            Not After : Jun  5 13:13:22 2014 GMT
+        Subject: C=US, ST=Massachusetts, L=Cambridge, O=Massachusetts Institute of Technology, OU=Student Information Processing Board, CN=*.scripts.mit.edu
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (1024 bit)
+                Modulus (1024 bit):
+                    00:b5:3e:21:4d:c1:89:6b:01:8c:47:80:fe:b3:37:
+                    27:76:f8:52:41:e6:a2:3d:4b:76:78:e5:f2:66:3c:
+                    0f:b1:ad:fb:97:8f:2e:a2:b6:53:d3:b6:0e:e2:66:
+                    f9:b9:0b:b7:ce:b4:d5:f5:1c:1f:6f:22:7d:48:f5:
+                    6d:f0:16:cd:8e:48:79:d1:14:4a:14:2f:2f:f8:c4:
+                    bd:1d:87:cf:7d:8b:5c:77:ad:58:24:b0:0e:a1:6d:
+                    d6:0a:c7:d8:bc:2f:67:65:c8:5d:d8:d8:31:c2:67:
+                    4b:4a:f4:a1:a5:54:82:af:cb:34:08:2a:04:7f:8e:
+                    7c:4c:b7:db:dc:6a:8a:5d:81
+                Exponent: 65537 (0x10001)
+        X509v3 extensions:
+            X509v3 Key Usage: critical
+                Digital Signature, Non Repudiation, Key Encipherment, Data Encipherment
+            X509v3 Subject Key Identifier: 
+                54:11:7C:09:55:44:1C:94:45:A9:A2:76:46:2B:2C:24:26:6A:44:E8
+            X509v3 CRL Distribution Points: 
+                URI:http://crl.geotrust.com/crls/secureca.crl
+
+            X509v3 Authority Key Identifier: 
+                keyid:48:E6:68:F9:2B:D2:B2:95:D7:47:D8:23:20:10:4F:33:98:90:9F:D4
+
+            X509v3 Extended Key Usage: 
+                TLS Web Server Authentication, TLS Web Client Authentication
+    Signature Algorithm: sha1WithRSAEncryption
+        2c:25:90:82:a2:82:e8:03:58:b4:38:11:bc:c0:b5:f0:44:ee:
+        b3:d9:5f:90:ab:b3:f6:24:fa:92:6b:9c:3a:7d:5d:89:f4:a2:
+        3c:2f:cb:85:b2:fe:b6:92:0f:1b:94:65:2d:d6:70:f8:9f:77:
+        9c:b3:20:fa:16:91:9d:e1:b7:64:07:27:42:8b:be:e2:f3:d9:
+        78:71:42:12:3d:6f:33:37:4b:01:2e:1d:87:25:48:bf:50:23:
+        7a:b0:02:41:5d:35:08:bf:e7:15:08:5c:11:7d:91:10:06:52:
+        19:d3:05:01:94:86:07:f7:76:41:e1:fb:d9:1c:d0:ee:74:9f:
+        51:66
+-----BEGIN CERTIFICATE-----
+MIIDKjCCApOgAwIBAgIDC1yIMA0GCSqGSIb3DQEBBQUAME4xCzAJBgNVBAYTAlVT
+MRAwDgYDVQQKEwdFcXVpZmF4MS0wKwYDVQQLEyRFcXVpZmF4IFNlY3VyZSBDZXJ0
+aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDkwNjA0MDkxMzE2WhcNMTQwNjA1MTMxMzIy
+WjCBtDELMAkGA1UEBhMCVVMxFjAUBgNVBAgTDU1hc3NhY2h1c2V0dHMxEjAQBgNV
+BAcTCUNhbWJyaWRnZTEuMCwGA1UEChMlTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUg
+b2YgVGVjaG5vbG9neTEtMCsGA1UECxMkU3R1ZGVudCBJbmZvcm1hdGlvbiBQcm9j
+ZXNzaW5nIEJvYXJkMRowGAYDVQQDFBEqLnNjcmlwdHMubWl0LmVkdTCBnzANBgkq
+hkiG9w0BAQEFAAOBjQAwgYkCgYEAtT4hTcGJawGMR4D+szcndvhSQeaiPUt2eOXy
+ZjwPsa37l48uorZT07YO4mb5uQu3zrTV9RwfbyJ9SPVt8BbNjkh50RRKFC8v+MS9
+HYfPfYtcd61YJLAOoW3WCsfYvC9nZchd2NgxwmdLSvShpVSCr8s0CCoEf458TLfb
+3GqKXYECAwEAAaOBrjCBqzAOBgNVHQ8BAf8EBAMCBPAwHQYDVR0OBBYEFFQRfAlV
+RByURamidkYrLCQmakToMDoGA1UdHwQzMDEwL6AtoCuGKWh0dHA6Ly9jcmwuZ2Vv
+dHJ1c3QuY29tL2NybHMvc2VjdXJlY2EuY3JsMB8GA1UdIwQYMBaAFEjmaPkr0rKV
+10fYIyAQTzOYkJ/UMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjANBgkq
+hkiG9w0BAQUFAAOBgQAsJZCCooLoA1i0OBG8wLXwRO6z2V+Qq7P2JPqSa5w6fV2J
+9KI8L8uFsv62kg8blGUt1nD4n3ecsyD6FpGd4bdkBydCi77i89l4cUISPW8zN0sB
+Lh2HJUi/UCN6sAJBXTUIv+cVCFwRfZEQBlIZ0wUBlIYH93ZB4fvZHNDudJ9RZg==
+-----END CERTIFICATE-----
Index: /tags/fc9-eol/server/fedora/config/etc/pki/tls/certs/textbooks.pem
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/pki/tls/certs/textbooks.pem	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/pki/tls/certs/textbooks.pem	(revision 1257)
@@ -0,0 +1,71 @@
+From mitcert@MIT.EDU Tue Nov 18 11:50:11 2008
+Date: Tue, 18 Nov 2008 11:44:55 -0500 (EST)
+From: mitcert@MIT.EDU
+To: geofft@mit.edu
+Subject: CSR for scripts virtual host: textbooks.mit.edu  [help.mit.edu #754404]
+
+Certificate:
+    Data:
+        Version: 3 (0x2)
+        Serial Number: 3120 (0xc30)
+        Signature Algorithm: sha1WithRSAEncryption
+        Issuer: C=US, ST=Massachusetts, O=Massachusetts Institute of Technology, OU=MIT Certification Authority
+        Validity
+            Not Before: Nov 16 17:00:00 2008 GMT
+            Not After : Nov 16 17:00:00 2009 GMT
+        Subject: C=US, ST=Massachusetts, L=Cambridge, O=Massachusetts Institute of Technology, OU=Student Information Processing Board, CN=textbooks.mit.edu/Email=scripts@mit.edu
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (1024 bit)
+                Modulus (1024 bit):
+                    00:b5:3e:21:4d:c1:89:6b:01:8c:47:80:fe:b3:37:
+                    27:76:f8:52:41:e6:a2:3d:4b:76:78:e5:f2:66:3c:
+                    0f:b1:ad:fb:97:8f:2e:a2:b6:53:d3:b6:0e:e2:66:
+                    f9:b9:0b:b7:ce:b4:d5:f5:1c:1f:6f:22:7d:48:f5:
+                    6d:f0:16:cd:8e:48:79:d1:14:4a:14:2f:2f:f8:c4:
+                    bd:1d:87:cf:7d:8b:5c:77:ad:58:24:b0:0e:a1:6d:
+                    d6:0a:c7:d8:bc:2f:67:65:c8:5d:d8:d8:31:c2:67:
+                    4b:4a:f4:a1:a5:54:82:af:cb:34:08:2a:04:7f:8e:
+                    7c:4c:b7:db:dc:6a:8a:5d:81
+                Exponent: 65537 (0x10001)
+        X509v3 extensions:
+            X509v3 Basic Constraints: 
+                CA:FALSE
+            Netscape Cert Type: 
+                SSL Client, SSL Server, S/MIME
+            X509v3 Extended Key Usage: 
+                TLS Web Server Authentication, E-mail Protection, TLS Web Client Authentication
+            X509v3 Key Usage: 
+                Digital Signature, Non Repudiation, Key Encipherment
+            X509v3 Subject Key Identifier: 
+                54:11:7C:09:55:44:1C:94:45:A9:A2:76:46:2B:2C:24:26:6A:44:E8
+    Signature Algorithm: sha1WithRSAEncryption
+        21:82:ae:5c:43:40:ac:20:34:a6:02:e4:07:87:c7:95:d3:d1:
+        15:0e:52:0f:2e:2a:44:bf:bd:a9:06:43:3c:60:58:5a:36:9f:
+        66:ac:4f:ce:89:9f:d3:7d:46:31:52:42:52:b6:11:e4:8d:44:
+        48:a5:e0:df:f1:51:ef:36:7e:d6:db:a3:f4:01:2f:4b:1f:05:
+        bd:de:47:b5:58:dc:60:8a:9a:db:e5:d2:08:0c:0b:13:a2:59:
+        35:24:d3:36:2c:10:d4:8b:bc:ac:69:3c:9e:26:7d:90:15:ce:
+        fd:e7:d9:08:62:4a:90:b9:59:ce:eb:f8:c0:b0:0f:2f:93:a0:
+        f1:9c
+-----BEGIN CERTIFICATE-----
+MIIDPDCCAqWgAwIBAgICDDAwDQYJKoZIhvcNAQEFBQAwezELMAkGA1UEBhMCVVMx
+FjAUBgNVBAgTDU1hc3NhY2h1c2V0dHMxLjAsBgNVBAoTJU1hc3NhY2h1c2V0dHMg
+SW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kxJDAiBgNVBAsTG01JVCBDZXJ0aWZpY2F0
+aW9uIEF1dGhvcml0eTAeFw0wODExMTYxNzAwMDBaFw0wOTExMTYxNzAwMDBaMIHU
+MQswCQYDVQQGEwJVUzEWMBQGA1UECBMNTWFzc2FjaHVzZXR0czESMBAGA1UEBxMJ
+Q2FtYnJpZGdlMS4wLAYDVQQKEyVNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBU
+ZWNobm9sb2d5MS0wKwYDVQQLEyRTdHVkZW50IEluZm9ybWF0aW9uIFByb2Nlc3Np
+bmcgQm9hcmQxGjAYBgNVBAMTEXRleHRib29rcy5taXQuZWR1MR4wHAYJKoZIhvcN
+AQkBFg9zY3JpcHRzQG1pdC5lZHUwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGB
+ALU+IU3BiWsBjEeA/rM3J3b4UkHmoj1Ldnjl8mY8D7Gt+5ePLqK2U9O2DuJm+bkL
+t8601fUcH28ifUj1bfAWzY5IedEUShQvL/jEvR2Hz32LXHetWCSwDqFt1grH2Lwv
+Z2XIXdjYMcJnS0r0oaVUgq/LNAgqBH+OfEy329xqil2BAgMBAAGjdTBzMAkGA1Ud
+EwQCMAAwEQYJYIZIAYb4QgEBBAQDAgXgMCcGA1UdJQQgMB4GCCsGAQUFBwMBBggr
+BgEFBQcDBAYIKwYBBQUHAwIwCwYDVR0PBAQDAgXgMB0GA1UdDgQWBBRUEXwJVUQc
+lEWponZGKywkJmpE6DANBgkqhkiG9w0BAQUFAAOBgQAhgq5cQ0CsIDSmAuQHh8eV
+09EVDlIPLipEv72pBkM8YFhaNp9mrE/OiZ/TfUYxUkJSthHkjURIpeDf8VHvNn7W
+26P0AS9LHwW93ke1WNxgiprb5dIIDAsTolk1JNM2LBDUi7ysaTyeJn2QFc7959kI
+YkqQuVnO6/jAsA8vk6DxnA==
+-----END CERTIFICATE-----
+
Index: /tags/fc9-eol/server/fedora/config/etc/pki/tls/certs/tibetforum.pem
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/pki/tls/certs/tibetforum.pem	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/pki/tls/certs/tibetforum.pem	(revision 1257)
@@ -0,0 +1,71 @@
+From mitcert@MIT.EDU Tue Apr  7 10:34:18 2009
+Date: Tue, 7 Apr 2009 10:34:05 -0400 (EDT)
+From: mitcert@MIT.EDU
+To: quentin@mit.edu
+Subject: CSR for tibetforum.mit.edu  [help.mit.edu #851501]
+
+Certificate:
+    Data:
+        Version: 3 (0x2)
+        Serial Number: 3426 (0xd62)
+        Signature Algorithm: sha1WithRSAEncryption
+        Issuer: C=US, ST=Massachusetts, O=Massachusetts Institute of Technology, OU=MIT Certification Authority
+        Validity
+            Not Before: Apr  5 16:00:00 2009 GMT
+            Not After : Apr  5 16:00:00 2010 GMT
+        Subject: C=US, ST=Massachusetts, L=Cambridge, O=Massachusetts Institute of Technology, OU=Student Information Processing Board, CN=tibetforum.mit.edu/Email=scripts@mit.edu
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (1024 bit)
+                Modulus (1024 bit):
+                    00:b5:3e:21:4d:c1:89:6b:01:8c:47:80:fe:b3:37:
+                    27:76:f8:52:41:e6:a2:3d:4b:76:78:e5:f2:66:3c:
+                    0f:b1:ad:fb:97:8f:2e:a2:b6:53:d3:b6:0e:e2:66:
+                    f9:b9:0b:b7:ce:b4:d5:f5:1c:1f:6f:22:7d:48:f5:
+                    6d:f0:16:cd:8e:48:79:d1:14:4a:14:2f:2f:f8:c4:
+                    bd:1d:87:cf:7d:8b:5c:77:ad:58:24:b0:0e:a1:6d:
+                    d6:0a:c7:d8:bc:2f:67:65:c8:5d:d8:d8:31:c2:67:
+                    4b:4a:f4:a1:a5:54:82:af:cb:34:08:2a:04:7f:8e:
+                    7c:4c:b7:db:dc:6a:8a:5d:81
+                Exponent: 65537 (0x10001)
+        X509v3 extensions:
+            X509v3 Basic Constraints: 
+                CA:FALSE
+            Netscape Cert Type: 
+                SSL Client, SSL Server, S/MIME
+            X509v3 Extended Key Usage: 
+                TLS Web Server Authentication, E-mail Protection, TLS Web Client Authentication
+            X509v3 Key Usage: 
+                Digital Signature, Non Repudiation, Key Encipherment
+            X509v3 Subject Key Identifier: 
+                54:11:7C:09:55:44:1C:94:45:A9:A2:76:46:2B:2C:24:26:6A:44:E8
+    Signature Algorithm: sha1WithRSAEncryption
+        b7:b5:51:be:69:33:97:48:61:35:ef:6a:77:77:a6:4c:58:ec:
+        d4:3f:1d:1b:79:42:73:04:27:d5:6a:fd:44:eb:2c:42:59:55:
+        be:f1:14:7e:e1:ee:39:d6:f0:8f:02:73:07:66:bb:39:cd:a4:
+        a5:e9:e3:1b:16:c4:e4:5e:2e:85:ce:bc:0e:90:00:73:09:50:
+        42:03:94:0e:3a:06:a8:5a:bb:f9:66:4c:39:af:21:73:18:b6:
+        7b:38:df:6b:bf:1a:58:f0:33:8e:c9:bd:d0:b2:a9:16:89:6f:
+        ea:ce:61:38:9f:91:51:d7:7a:34:bf:cb:d8:65:c6:20:b0:05:
+        d7:d1
+-----BEGIN CERTIFICATE-----
+MIIDPTCCAqagAwIBAgICDWIwDQYJKoZIhvcNAQEFBQAwezELMAkGA1UEBhMCVVMx
+FjAUBgNVBAgTDU1hc3NhY2h1c2V0dHMxLjAsBgNVBAoTJU1hc3NhY2h1c2V0dHMg
+SW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kxJDAiBgNVBAsTG01JVCBDZXJ0aWZpY2F0
+aW9uIEF1dGhvcml0eTAeFw0wOTA0MDUxNjAwMDBaFw0xMDA0MDUxNjAwMDBaMIHV
+MQswCQYDVQQGEwJVUzEWMBQGA1UECBMNTWFzc2FjaHVzZXR0czESMBAGA1UEBxMJ
+Q2FtYnJpZGdlMS4wLAYDVQQKEyVNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBU
+ZWNobm9sb2d5MS0wKwYDVQQLEyRTdHVkZW50IEluZm9ybWF0aW9uIFByb2Nlc3Np
+bmcgQm9hcmQxGzAZBgNVBAMTEnRpYmV0Zm9ydW0ubWl0LmVkdTEeMBwGCSqGSIb3
+DQEJARYPc2NyaXB0c0BtaXQuZWR1MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKB
+gQC1PiFNwYlrAYxHgP6zNyd2+FJB5qI9S3Z45fJmPA+xrfuXjy6itlPTtg7iZvm5
+C7fOtNX1HB9vIn1I9W3wFs2OSHnRFEoULy/4xL0dh899i1x3rVgksA6hbdYKx9i8
+L2dlyF3Y2DHCZ0tK9KGlVIKvyzQIKgR/jnxMt9vcaopdgQIDAQABo3UwczAJBgNV
+HRMEAjAAMBEGCWCGSAGG+EIBAQQEAwIF4DAnBgNVHSUEIDAeBggrBgEFBQcDAQYI
+KwYBBQUHAwQGCCsGAQUFBwMCMAsGA1UdDwQEAwIF4DAdBgNVHQ4EFgQUVBF8CVVE
+HJRFqaJ2RissJCZqROgwDQYJKoZIhvcNAQEFBQADgYEAt7VRvmkzl0hhNe9qd3em
+TFjs1D8dG3lCcwQn1Wr9ROssQllVvvEUfuHuOdbwjwJzB2a7Oc2kpenjGxbE5F4u
+hc68DpAAcwlQQgOUDjoGqFq7+WZMOa8hcxi2ezjfa78aWPAzjsm90LKpFolv6s5h
+OJ+RUdd6NL/L2GXGILAF19E=
+-----END CERTIFICATE-----
+
Index: /tags/fc9-eol/server/fedora/config/etc/pki/tls/certs/tours.pem
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/pki/tls/certs/tours.pem	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/pki/tls/certs/tours.pem	(revision 1257)
@@ -0,0 +1,76 @@
+From mitcert@MIT.EDU Tue Jun 30 14:04:41 2009
+Date: Tue, 30 Jun 2009 14:04:07 -0400 (EDT)
+From: mitcert@MIT.EDU
+To: geofft@mit.edu
+Subject: CSR for scripts.mit.edu vhost "tours.mit.edu"  [help.mit.edu #943819]
+
+Certificate:
+    Data:
+        Version: 3 (0x2)
+        Serial Number:
+            76:0e:14:27:02:b6:2d:1b:82:46:00:79:87:74:7c:51
+        Signature Algorithm: sha1WithRSAEncryption
+        Issuer: C=US, ST=Massachusetts, O=Massachusetts Institute of Technology, OU=MIT Certification Authority
+        Validity
+            Not Before: Jun 29 16:00:00 2009 GMT
+            Not After : Jun 30 16:00:00 2010 GMT
+        Subject: C=US, ST=Massachusetts, L=Cambridge, O=Massachusetts Institute of Technology, OU=Student Information Processing Board, CN=tours.mit.edu/emailAddress=scripts@mit.edu
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (1024 bit)
+                Modulus (1024 bit):
+                    00:b5:3e:21:4d:c1:89:6b:01:8c:47:80:fe:b3:37:
+                    27:76:f8:52:41:e6:a2:3d:4b:76:78:e5:f2:66:3c:
+                    0f:b1:ad:fb:97:8f:2e:a2:b6:53:d3:b6:0e:e2:66:
+                    f9:b9:0b:b7:ce:b4:d5:f5:1c:1f:6f:22:7d:48:f5:
+                    6d:f0:16:cd:8e:48:79:d1:14:4a:14:2f:2f:f8:c4:
+                    bd:1d:87:cf:7d:8b:5c:77:ad:58:24:b0:0e:a1:6d:
+                    d6:0a:c7:d8:bc:2f:67:65:c8:5d:d8:d8:31:c2:67:
+                    4b:4a:f4:a1:a5:54:82:af:cb:34:08:2a:04:7f:8e:
+                    7c:4c:b7:db:dc:6a:8a:5d:81
+                Exponent: 65537 (0x10001)
+        X509v3 extensions:
+            X509v3 Basic Constraints: 
+                CA:FALSE
+            Netscape Cert Type: 
+                SSL Client, SSL Server, S/MIME
+            X509v3 Extended Key Usage: 
+                TLS Web Server Authentication, E-mail Protection, TLS Web Client Authentication
+            X509v3 Key Usage: 
+                Digital Signature, Non Repudiation, Key Encipherment
+            X509v3 Subject Key Identifier: 
+                54:11:7C:09:55:44:1C:94:45:A9:A2:76:46:2B:2C:24:26:6A:44:E8
+            X509v3 CRL Distribution Points: 
+                URI:http://ca.mit.edu/ca/mitserver.crl
+
+    Signature Algorithm: sha1WithRSAEncryption
+        6b:22:81:8e:b0:f1:3c:92:88:b0:71:65:85:42:aa:b5:be:4e:
+        11:34:72:74:49:5b:f9:d9:1d:ad:d0:d6:ee:96:eb:70:6e:6f:
+        78:33:04:6e:d1:1e:2d:bb:d8:32:62:ed:77:39:96:bb:7c:26:
+        e3:3a:85:dd:79:ff:22:3d:5f:a1:d3:3a:26:13:9b:79:75:95:
+        2e:1c:85:f0:0c:2c:da:61:a8:a1:86:4a:52:9a:ac:a8:38:5e:
+        70:f2:55:e4:01:13:ef:1c:3a:ba:f9:08:e1:da:9e:d9:60:7e:
+        2f:b1:16:25:2c:cc:e8:a4:d1:dd:31:a1:4a:90:45:f1:5d:df:
+        d1:0c
+-----BEGIN CERTIFICATE-----
+MIIDfTCCAuagAwIBAgIQdg4UJwK2LRuCRgB5h3R8UTANBgkqhkiG9w0BAQUFADB7
+MQswCQYDVQQGEwJVUzEWMBQGA1UECBMNTWFzc2FjaHVzZXR0czEuMCwGA1UEChMl
+TWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neTEkMCIGA1UECxMb
+TUlUIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA5MDYyOTE2MDAwMFoXDTEw
+MDYzMDE2MDAwMFowgdAxCzAJBgNVBAYTAlVTMRYwFAYDVQQIEw1NYXNzYWNodXNl
+dHRzMRIwEAYDVQQHEwlDYW1icmlkZ2UxLjAsBgNVBAoTJU1hc3NhY2h1c2V0dHMg
+SW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kxLTArBgNVBAsTJFN0dWRlbnQgSW5mb3Jt
+YXRpb24gUHJvY2Vzc2luZyBCb2FyZDEWMBQGA1UEAxMNdG91cnMubWl0LmVkdTEe
+MBwGCSqGSIb3DQEJARYPc2NyaXB0c0BtaXQuZWR1MIGfMA0GCSqGSIb3DQEBAQUA
+A4GNADCBiQKBgQC1PiFNwYlrAYxHgP6zNyd2+FJB5qI9S3Z45fJmPA+xrfuXjy6i
+tlPTtg7iZvm5C7fOtNX1HB9vIn1I9W3wFs2OSHnRFEoULy/4xL0dh899i1x3rVgk
+sA6hbdYKx9i8L2dlyF3Y2DHCZ0tK9KGlVIKvyzQIKgR/jnxMt9vcaopdgQIDAQAB
+o4GrMIGoMAkGA1UdEwQCMAAwEQYJYIZIAYb4QgEBBAQDAgXgMCcGA1UdJQQgMB4G
+CCsGAQUFBwMBBggrBgEFBQcDBAYIKwYBBQUHAwIwCwYDVR0PBAQDAgXgMB0GA1Ud
+DgQWBBRUEXwJVUQclEWponZGKywkJmpE6DAzBgNVHR8ELDAqMCigJqAkhiJodHRw
+Oi8vY2EubWl0LmVkdS9jYS9taXRzZXJ2ZXIuY3JsMA0GCSqGSIb3DQEBBQUAA4GB
+AGsigY6w8TySiLBxZYVCqrW+ThE0cnRJW/nZHa3Q1u6W63Bub3gzBG7RHi272DJi
+7Xc5lrt8JuM6hd15/yI9X6HTOiYTm3l1lS4chfAMLNphqKGGSlKarKg4XnDyVeQB
+E+8cOrr5COHantlgfi+xFiUszOik0d0xoUqQRfFd39EM
+-----END CERTIFICATE-----
+
Index: /tags/fc9-eol/server/fedora/config/etc/pki/tls/certs/twentytwelve.pem
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/pki/tls/certs/twentytwelve.pem	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/pki/tls/certs/twentytwelve.pem	(revision 1257)
@@ -0,0 +1,71 @@
+From mitcert@MIT.EDU Tue Nov 18 11:45:51 2008
+Date: Tue, 18 Nov 2008 11:44:07 -0500 (EST)
+From: mitcert@MIT.EDU
+To: geofft@mit.edu
+Subject: CSR for scripts virtual host: twentytwelve.mit.edu  [help.mit.edu #754405]
+
+Certificate:
+    Data:
+        Version: 3 (0x2)
+        Serial Number: 3119 (0xc2f)
+        Signature Algorithm: sha1WithRSAEncryption
+        Issuer: C=US, ST=Massachusetts, O=Massachusetts Institute of Technology, OU=MIT Certification Authority
+        Validity
+            Not Before: Nov 16 17:00:00 2008 GMT
+            Not After : Nov 16 17:00:00 2009 GMT
+        Subject: C=US, ST=Massachusetts, L=Cambridge, O=Massachusetts Institute of Technology, OU=Student Information Processing Board, CN=twentytwelve.mit.edu/Email=scripts@mit.edu
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (1024 bit)
+                Modulus (1024 bit):
+                    00:b5:3e:21:4d:c1:89:6b:01:8c:47:80:fe:b3:37:
+                    27:76:f8:52:41:e6:a2:3d:4b:76:78:e5:f2:66:3c:
+                    0f:b1:ad:fb:97:8f:2e:a2:b6:53:d3:b6:0e:e2:66:
+                    f9:b9:0b:b7:ce:b4:d5:f5:1c:1f:6f:22:7d:48:f5:
+                    6d:f0:16:cd:8e:48:79:d1:14:4a:14:2f:2f:f8:c4:
+                    bd:1d:87:cf:7d:8b:5c:77:ad:58:24:b0:0e:a1:6d:
+                    d6:0a:c7:d8:bc:2f:67:65:c8:5d:d8:d8:31:c2:67:
+                    4b:4a:f4:a1:a5:54:82:af:cb:34:08:2a:04:7f:8e:
+                    7c:4c:b7:db:dc:6a:8a:5d:81
+                Exponent: 65537 (0x10001)
+        X509v3 extensions:
+            X509v3 Basic Constraints: 
+                CA:FALSE
+            Netscape Cert Type: 
+                SSL Client, SSL Server, S/MIME
+            X509v3 Extended Key Usage: 
+                TLS Web Server Authentication, E-mail Protection, TLS Web Client Authentication
+            X509v3 Key Usage: 
+                Digital Signature, Non Repudiation, Key Encipherment
+            X509v3 Subject Key Identifier: 
+                54:11:7C:09:55:44:1C:94:45:A9:A2:76:46:2B:2C:24:26:6A:44:E8
+    Signature Algorithm: sha1WithRSAEncryption
+        09:b6:d9:af:5e:67:43:ba:24:74:24:7b:71:a8:c9:8b:25:a7:
+        b5:1d:8a:d0:96:5d:1a:13:05:b7:e8:d2:0e:98:fa:06:00:92:
+        e1:c6:69:89:1f:27:3e:af:97:17:f0:47:22:a5:72:70:a2:1d:
+        0a:d4:ff:5e:ea:d5:dd:15:d0:70:0e:66:17:91:85:75:f5:19:
+        fa:73:64:f6:39:b3:d5:0d:c1:00:f8:96:69:78:1e:68:d1:c6:
+        fb:16:12:24:bd:bd:37:7c:cb:87:f7:bc:fe:bc:c3:78:1b:ae:
+        3d:ad:3d:4c:af:2d:8d:30:94:30:8a:3f:fc:36:59:f4:f2:fa:
+        e6:6f
+-----BEGIN CERTIFICATE-----
+MIIDPzCCAqigAwIBAgICDC8wDQYJKoZIhvcNAQEFBQAwezELMAkGA1UEBhMCVVMx
+FjAUBgNVBAgTDU1hc3NhY2h1c2V0dHMxLjAsBgNVBAoTJU1hc3NhY2h1c2V0dHMg
+SW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kxJDAiBgNVBAsTG01JVCBDZXJ0aWZpY2F0
+aW9uIEF1dGhvcml0eTAeFw0wODExMTYxNzAwMDBaFw0wOTExMTYxNzAwMDBaMIHX
+MQswCQYDVQQGEwJVUzEWMBQGA1UECBMNTWFzc2FjaHVzZXR0czESMBAGA1UEBxMJ
+Q2FtYnJpZGdlMS4wLAYDVQQKEyVNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBU
+ZWNobm9sb2d5MS0wKwYDVQQLEyRTdHVkZW50IEluZm9ybWF0aW9uIFByb2Nlc3Np
+bmcgQm9hcmQxHTAbBgNVBAMTFHR3ZW50eXR3ZWx2ZS5taXQuZWR1MR4wHAYJKoZI
+hvcNAQkBFg9zY3JpcHRzQG1pdC5lZHUwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJ
+AoGBALU+IU3BiWsBjEeA/rM3J3b4UkHmoj1Ldnjl8mY8D7Gt+5ePLqK2U9O2DuJm
++bkLt8601fUcH28ifUj1bfAWzY5IedEUShQvL/jEvR2Hz32LXHetWCSwDqFt1grH
+2LwvZ2XIXdjYMcJnS0r0oaVUgq/LNAgqBH+OfEy329xqil2BAgMBAAGjdTBzMAkG
+A1UdEwQCMAAwEQYJYIZIAYb4QgEBBAQDAgXgMCcGA1UdJQQgMB4GCCsGAQUFBwMB
+BggrBgEFBQcDBAYIKwYBBQUHAwIwCwYDVR0PBAQDAgXgMB0GA1UdDgQWBBRUEXwJ
+VUQclEWponZGKywkJmpE6DANBgkqhkiG9w0BAQUFAAOBgQAJttmvXmdDuiR0JHtx
+qMmLJae1HYrQll0aEwW36NIOmPoGAJLhxmmJHyc+r5cX8EcipXJwoh0K1P9e6tXd
+FdBwDmYXkYV19Rn6c2T2ObPVDcEA+JZpeB5o0cb7FhIkvb03fMuH97z+vMN4G649
+rT1Mry2NMJQwij/8Nln08vrmbw==
+-----END CERTIFICATE-----
+
Index: /tags/fc9-eol/server/fedora/config/etc/pki/tls/certs/ua.pem
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/pki/tls/certs/ua.pem	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/pki/tls/certs/ua.pem	(revision 1257)
@@ -0,0 +1,71 @@
+From mitcert@MIT.EDU Tue Nov 18 11:45:39 2008
+Date: Tue, 18 Nov 2008 11:42:44 -0500 (EST)
+From: mitcert@MIT.EDU
+To: geofft@mit.edu
+Subject: CSR for scripts virtual host: ua.mit.edu  [help.mit.edu #754406]
+
+Certificate:
+    Data:
+        Version: 3 (0x2)
+        Serial Number: 3118 (0xc2e)
+        Signature Algorithm: sha1WithRSAEncryption
+        Issuer: C=US, ST=Massachusetts, O=Massachusetts Institute of Technology, OU=MIT Certification Authority
+        Validity
+            Not Before: Nov 16 17:00:00 2008 GMT
+            Not After : Nov 16 17:00:00 2009 GMT
+        Subject: C=US, ST=Massachusetts, L=Cambridge, O=Massachusetts Institute of Technology, OU=Student Information Processing Board, CN=ua.mit.edu/Email=scripts@mit.edu
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (1024 bit)
+                Modulus (1024 bit):
+                    00:b5:3e:21:4d:c1:89:6b:01:8c:47:80:fe:b3:37:
+                    27:76:f8:52:41:e6:a2:3d:4b:76:78:e5:f2:66:3c:
+                    0f:b1:ad:fb:97:8f:2e:a2:b6:53:d3:b6:0e:e2:66:
+                    f9:b9:0b:b7:ce:b4:d5:f5:1c:1f:6f:22:7d:48:f5:
+                    6d:f0:16:cd:8e:48:79:d1:14:4a:14:2f:2f:f8:c4:
+                    bd:1d:87:cf:7d:8b:5c:77:ad:58:24:b0:0e:a1:6d:
+                    d6:0a:c7:d8:bc:2f:67:65:c8:5d:d8:d8:31:c2:67:
+                    4b:4a:f4:a1:a5:54:82:af:cb:34:08:2a:04:7f:8e:
+                    7c:4c:b7:db:dc:6a:8a:5d:81
+                Exponent: 65537 (0x10001)
+        X509v3 extensions:
+            X509v3 Basic Constraints: 
+                CA:FALSE
+            Netscape Cert Type: 
+                SSL Client, SSL Server, S/MIME
+            X509v3 Extended Key Usage: 
+                TLS Web Server Authentication, E-mail Protection, TLS Web Client Authentication
+            X509v3 Key Usage: 
+                Digital Signature, Non Repudiation, Key Encipherment
+            X509v3 Subject Key Identifier: 
+                54:11:7C:09:55:44:1C:94:45:A9:A2:76:46:2B:2C:24:26:6A:44:E8
+    Signature Algorithm: sha1WithRSAEncryption
+        a3:fc:60:5d:65:34:5a:78:c3:ec:8e:ea:3a:4e:c7:81:3a:62:
+        78:f8:85:78:ea:27:d2:dc:b2:f4:d6:03:23:59:57:20:4a:cb:
+        eb:6f:30:ac:50:45:07:16:b5:88:d1:94:01:e5:d8:01:fd:8f:
+        e1:d4:9c:cd:70:e4:55:57:83:18:d3:44:c6:6b:d4:d6:d2:15:
+        4c:59:97:de:58:f4:f6:2e:17:96:a8:df:5e:7d:64:aa:2a:36:
+        85:c5:db:17:d5:89:db:1e:92:0e:5c:53:8b:e2:46:3f:63:56:
+        24:83:1b:06:9d:5e:52:3d:63:de:69:dd:89:e1:0d:c1:ee:9e:
+        71:c3
+-----BEGIN CERTIFICATE-----
+MIIDNTCCAp6gAwIBAgICDC4wDQYJKoZIhvcNAQEFBQAwezELMAkGA1UEBhMCVVMx
+FjAUBgNVBAgTDU1hc3NhY2h1c2V0dHMxLjAsBgNVBAoTJU1hc3NhY2h1c2V0dHMg
+SW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kxJDAiBgNVBAsTG01JVCBDZXJ0aWZpY2F0
+aW9uIEF1dGhvcml0eTAeFw0wODExMTYxNzAwMDBaFw0wOTExMTYxNzAwMDBaMIHN
+MQswCQYDVQQGEwJVUzEWMBQGA1UECBMNTWFzc2FjaHVzZXR0czESMBAGA1UEBxMJ
+Q2FtYnJpZGdlMS4wLAYDVQQKEyVNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBU
+ZWNobm9sb2d5MS0wKwYDVQQLEyRTdHVkZW50IEluZm9ybWF0aW9uIFByb2Nlc3Np
+bmcgQm9hcmQxEzARBgNVBAMTCnVhLm1pdC5lZHUxHjAcBgkqhkiG9w0BCQEWD3Nj
+cmlwdHNAbWl0LmVkdTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAtT4hTcGJ
+awGMR4D+szcndvhSQeaiPUt2eOXyZjwPsa37l48uorZT07YO4mb5uQu3zrTV9Rwf
+byJ9SPVt8BbNjkh50RRKFC8v+MS9HYfPfYtcd61YJLAOoW3WCsfYvC9nZchd2Ngx
+wmdLSvShpVSCr8s0CCoEf458TLfb3GqKXYECAwEAAaN1MHMwCQYDVR0TBAIwADAR
+BglghkgBhvhCAQEEBAMCBeAwJwYDVR0lBCAwHgYIKwYBBQUHAwEGCCsGAQUFBwME
+BggrBgEFBQcDAjALBgNVHQ8EBAMCBeAwHQYDVR0OBBYEFFQRfAlVRByURamidkYr
+LCQmakToMA0GCSqGSIb3DQEBBQUAA4GBAKP8YF1lNFp4w+yO6jpOx4E6Ynj4hXjq
+J9LcsvTWAyNZVyBKy+tvMKxQRQcWtYjRlAHl2AH9j+HUnM1w5FVXgxjTRMZr1NbS
+FUxZl95Y9PYuF5ao3159ZKoqNoXF2xfVidsekg5cU4viRj9jViSDGwadXlI9Y95p
+3YnhDcHunnHD
+-----END CERTIFICATE-----
+
Index: /tags/fc9-eol/server/fedora/config/etc/pki/tls/certs/wakeup.pem
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/pki/tls/certs/wakeup.pem	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/pki/tls/certs/wakeup.pem	(revision 1257)
@@ -0,0 +1,71 @@
+From mitcert@MIT.EDU Thu Aug 28 22:16:26 2008
+Date: Thu, 28 Aug 2008 22:15:54 -0400 (EDT)
+From: mitcert@MIT.EDU
+To: geofft@mit.edu
+Subject: CSR for wakeup.mit.edu (scripts vhost)  [help.mit.edu #695368]
+
+Certificate:
+    Data:
+        Version: 3 (0x2)
+        Serial Number: 2944 (0xb80)
+        Signature Algorithm: sha1WithRSAEncryption
+        Issuer: C=US, ST=Massachusetts, O=Massachusetts Institute of Technology, OU=MIT Certification Authority
+        Validity
+            Not Before: Aug 27 16:00:00 2008 GMT
+            Not After : Aug 27 16:00:00 2009 GMT
+        Subject: C=US, ST=Massachusetts, L=Cambridge, O=Massachusetts Institute of Technology, OU=Student Information Processing Board, CN=wakeup.mit.edu/Email=scripts@mit.edu
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (1024 bit)
+                Modulus (1024 bit):
+                    00:b5:3e:21:4d:c1:89:6b:01:8c:47:80:fe:b3:37:
+                    27:76:f8:52:41:e6:a2:3d:4b:76:78:e5:f2:66:3c:
+                    0f:b1:ad:fb:97:8f:2e:a2:b6:53:d3:b6:0e:e2:66:
+                    f9:b9:0b:b7:ce:b4:d5:f5:1c:1f:6f:22:7d:48:f5:
+                    6d:f0:16:cd:8e:48:79:d1:14:4a:14:2f:2f:f8:c4:
+                    bd:1d:87:cf:7d:8b:5c:77:ad:58:24:b0:0e:a1:6d:
+                    d6:0a:c7:d8:bc:2f:67:65:c8:5d:d8:d8:31:c2:67:
+                    4b:4a:f4:a1:a5:54:82:af:cb:34:08:2a:04:7f:8e:
+                    7c:4c:b7:db:dc:6a:8a:5d:81
+                Exponent: 65537 (0x10001)
+        X509v3 extensions:
+            X509v3 Basic Constraints: 
+                CA:FALSE
+            Netscape Cert Type: 
+                SSL Client, SSL Server, S/MIME
+            X509v3 Extended Key Usage: 
+                TLS Web Server Authentication, E-mail Protection, TLS Web Client Authentication
+            X509v3 Key Usage: 
+                Digital Signature, Non Repudiation, Key Encipherment
+            X509v3 Subject Key Identifier: 
+                54:11:7C:09:55:44:1C:94:45:A9:A2:76:46:2B:2C:24:26:6A:44:E8
+    Signature Algorithm: sha1WithRSAEncryption
+        8b:9b:7c:e8:02:8c:f3:02:09:18:93:a8:d1:44:b0:91:3a:d0:
+        a8:f6:e0:04:e6:60:ac:7c:99:f4:3b:20:86:a6:87:6b:5d:24:
+        e7:f9:bc:ef:02:9e:32:fc:a2:e8:64:ec:26:cc:31:d4:1b:7e:
+        36:62:22:34:04:07:13:70:20:1a:53:72:16:5f:a3:3e:ac:86:
+        0d:f1:e8:5e:1b:47:92:26:47:44:7e:0f:eb:19:68:f7:23:12:
+        f7:cb:f9:10:db:6c:f8:fb:d9:2e:29:cd:59:c8:e0:e1:03:da:
+        08:c2:57:8e:ac:10:f4:bc:22:e7:9b:50:8c:71:f6:f4:ab:ff:
+        38:f2
+-----BEGIN CERTIFICATE-----
+MIIDOTCCAqKgAwIBAgICC4AwDQYJKoZIhvcNAQEFBQAwezELMAkGA1UEBhMCVVMx
+FjAUBgNVBAgTDU1hc3NhY2h1c2V0dHMxLjAsBgNVBAoTJU1hc3NhY2h1c2V0dHMg
+SW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kxJDAiBgNVBAsTG01JVCBDZXJ0aWZpY2F0
+aW9uIEF1dGhvcml0eTAeFw0wODA4MjcxNjAwMDBaFw0wOTA4MjcxNjAwMDBaMIHR
+MQswCQYDVQQGEwJVUzEWMBQGA1UECBMNTWFzc2FjaHVzZXR0czESMBAGA1UEBxMJ
+Q2FtYnJpZGdlMS4wLAYDVQQKEyVNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBU
+ZWNobm9sb2d5MS0wKwYDVQQLEyRTdHVkZW50IEluZm9ybWF0aW9uIFByb2Nlc3Np
+bmcgQm9hcmQxFzAVBgNVBAMTDndha2V1cC5taXQuZWR1MR4wHAYJKoZIhvcNAQkB
+Fg9zY3JpcHRzQG1pdC5lZHUwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALU+
+IU3BiWsBjEeA/rM3J3b4UkHmoj1Ldnjl8mY8D7Gt+5ePLqK2U9O2DuJm+bkLt860
+1fUcH28ifUj1bfAWzY5IedEUShQvL/jEvR2Hz32LXHetWCSwDqFt1grH2LwvZ2XI
+XdjYMcJnS0r0oaVUgq/LNAgqBH+OfEy329xqil2BAgMBAAGjdTBzMAkGA1UdEwQC
+MAAwEQYJYIZIAYb4QgEBBAQDAgXgMCcGA1UdJQQgMB4GCCsGAQUFBwMBBggrBgEF
+BQcDBAYIKwYBBQUHAwIwCwYDVR0PBAQDAgXgMB0GA1UdDgQWBBRUEXwJVUQclEWp
+onZGKywkJmpE6DANBgkqhkiG9w0BAQUFAAOBgQCLm3zoAozzAgkYk6jRRLCROtCo
+9uAE5mCsfJn0OyCGpodrXSTn+bzvAp4y/KLoZOwmzDHUG342YiI0BAcTcCAaU3IW
+X6M+rIYN8eheG0eSJkdEfg/rGWj3IxL3y/kQ22z4+9kuKc1ZyODhA9oIwleOrBD0
+vCLnm1CMcfb0q/848g==
+-----END CERTIFICATE-----
+
Index: /tags/fc9-eol/server/fedora/config/etc/pki/tls/certs/westgate.pem
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/pki/tls/certs/westgate.pem	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/pki/tls/certs/westgate.pem	(revision 1257)
@@ -0,0 +1,71 @@
+From mitcert@MIT.EDU Thu Aug 28 22:18:03 2008
+Date: Thu, 28 Aug 2008 22:17:52 -0400 (EDT)
+From: mitcert@MIT.EDU
+To: geofft@mit.edu
+Subject: CSR for westgate.mit.edu (scripts vhost)  [help.mit.edu #695364]
+
+Certificate:
+    Data:
+        Version: 3 (0x2)
+        Serial Number: 2947 (0xb83)
+        Signature Algorithm: sha1WithRSAEncryption
+        Issuer: C=US, ST=Massachusetts, O=Massachusetts Institute of Technology, OU=MIT Certification Authority
+        Validity
+            Not Before: Aug 27 16:00:00 2008 GMT
+            Not After : Aug 27 16:00:00 2009 GMT
+        Subject: C=US, ST=Massachusetts, L=Cambridge, O=Massachusetts Institute of Technology, OU=Student Information Processing Board, CN=westgate.mit.edu/Email=scripts@mit.edu
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (1024 bit)
+                Modulus (1024 bit):
+                    00:b5:3e:21:4d:c1:89:6b:01:8c:47:80:fe:b3:37:
+                    27:76:f8:52:41:e6:a2:3d:4b:76:78:e5:f2:66:3c:
+                    0f:b1:ad:fb:97:8f:2e:a2:b6:53:d3:b6:0e:e2:66:
+                    f9:b9:0b:b7:ce:b4:d5:f5:1c:1f:6f:22:7d:48:f5:
+                    6d:f0:16:cd:8e:48:79:d1:14:4a:14:2f:2f:f8:c4:
+                    bd:1d:87:cf:7d:8b:5c:77:ad:58:24:b0:0e:a1:6d:
+                    d6:0a:c7:d8:bc:2f:67:65:c8:5d:d8:d8:31:c2:67:
+                    4b:4a:f4:a1:a5:54:82:af:cb:34:08:2a:04:7f:8e:
+                    7c:4c:b7:db:dc:6a:8a:5d:81
+                Exponent: 65537 (0x10001)
+        X509v3 extensions:
+            X509v3 Basic Constraints: 
+                CA:FALSE
+            Netscape Cert Type: 
+                SSL Client, SSL Server, S/MIME
+            X509v3 Extended Key Usage: 
+                TLS Web Server Authentication, E-mail Protection, TLS Web Client Authentication
+            X509v3 Key Usage: 
+                Digital Signature, Non Repudiation, Key Encipherment
+            X509v3 Subject Key Identifier: 
+                54:11:7C:09:55:44:1C:94:45:A9:A2:76:46:2B:2C:24:26:6A:44:E8
+    Signature Algorithm: sha1WithRSAEncryption
+        94:40:6d:a8:48:57:93:52:9c:21:59:96:4f:41:cd:8f:ff:b7:
+        ff:f1:20:b6:c7:ed:4c:3c:cc:15:82:4c:a2:13:27:39:e4:d2:
+        20:89:72:f0:f6:b5:24:05:ed:a2:31:d4:c6:22:b5:7e:d8:7d:
+        21:a0:cf:8d:49:88:6c:a8:03:24:44:eb:96:33:4f:a8:9b:6b:
+        b2:10:3a:d7:48:2d:64:cb:a6:24:a6:9f:b3:7c:6f:9e:53:23:
+        a1:48:69:a1:a6:f2:3a:0e:1e:af:5b:33:6e:e3:03:27:0e:d5:
+        7a:85:9c:d6:80:bb:e3:cf:34:21:4f:df:6b:83:67:3e:73:5d:
+        46:8e
+-----BEGIN CERTIFICATE-----
+MIIDOzCCAqSgAwIBAgICC4MwDQYJKoZIhvcNAQEFBQAwezELMAkGA1UEBhMCVVMx
+FjAUBgNVBAgTDU1hc3NhY2h1c2V0dHMxLjAsBgNVBAoTJU1hc3NhY2h1c2V0dHMg
+SW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kxJDAiBgNVBAsTG01JVCBDZXJ0aWZpY2F0
+aW9uIEF1dGhvcml0eTAeFw0wODA4MjcxNjAwMDBaFw0wOTA4MjcxNjAwMDBaMIHT
+MQswCQYDVQQGEwJVUzEWMBQGA1UECBMNTWFzc2FjaHVzZXR0czESMBAGA1UEBxMJ
+Q2FtYnJpZGdlMS4wLAYDVQQKEyVNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBU
+ZWNobm9sb2d5MS0wKwYDVQQLEyRTdHVkZW50IEluZm9ybWF0aW9uIFByb2Nlc3Np
+bmcgQm9hcmQxGTAXBgNVBAMTEHdlc3RnYXRlLm1pdC5lZHUxHjAcBgkqhkiG9w0B
+CQEWD3NjcmlwdHNAbWl0LmVkdTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA
+tT4hTcGJawGMR4D+szcndvhSQeaiPUt2eOXyZjwPsa37l48uorZT07YO4mb5uQu3
+zrTV9RwfbyJ9SPVt8BbNjkh50RRKFC8v+MS9HYfPfYtcd61YJLAOoW3WCsfYvC9n
+Zchd2NgxwmdLSvShpVSCr8s0CCoEf458TLfb3GqKXYECAwEAAaN1MHMwCQYDVR0T
+BAIwADARBglghkgBhvhCAQEEBAMCBeAwJwYDVR0lBCAwHgYIKwYBBQUHAwEGCCsG
+AQUFBwMEBggrBgEFBQcDAjALBgNVHQ8EBAMCBeAwHQYDVR0OBBYEFFQRfAlVRByU
+RamidkYrLCQmakToMA0GCSqGSIb3DQEBBQUAA4GBAJRAbahIV5NSnCFZlk9BzY//
+t//xILbH7Uw8zBWCTKITJznk0iCJcvD2tSQF7aIx1MYitX7YfSGgz41JiGyoAyRE
+65YzT6iba7IQOtdILWTLpiSmn7N8b55TI6FIaaGm8joOHq9bM27jAycO1XqFnNaA
+u+PPNCFP32uDZz5zXUaO
+-----END CERTIFICATE-----
+
Index: /tags/fc9-eol/server/fedora/config/etc/pki/tls/certs/whatsnext.pem
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/pki/tls/certs/whatsnext.pem	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/pki/tls/certs/whatsnext.pem	(revision 1257)
@@ -0,0 +1,71 @@
+From mitcert@MIT.EDU Tue Nov 18 11:41:37 2008
+Date: Tue, 18 Nov 2008 11:41:31 -0500 (EST)
+From: mitcert@MIT.EDU
+To: geofft@mit.edu
+Subject: CSR for scripts virtual host: whatsnext.mit.edu  [help.mit.edu #754407]
+
+Certificate:
+    Data:
+        Version: 3 (0x2)
+        Serial Number: 3117 (0xc2d)
+        Signature Algorithm: sha1WithRSAEncryption
+        Issuer: C=US, ST=Massachusetts, O=Massachusetts Institute of Technology, OU=MIT Certification Authority
+        Validity
+            Not Before: Nov 16 17:00:00 2008 GMT
+            Not After : Nov 16 17:00:00 2009 GMT
+        Subject: C=US, ST=Massachusetts, L=Cambridge, O=Massachusetts Institute of Technology, OU=Student Information Processing Board, CN=whatsnext.mit.edu/Email=scripts@mit.edu
+        Subject Public Key Info:
+            Public Key Algorithm: rsaEncryption
+            RSA Public Key: (1024 bit)
+                Modulus (1024 bit):
+                    00:b5:3e:21:4d:c1:89:6b:01:8c:47:80:fe:b3:37:
+                    27:76:f8:52:41:e6:a2:3d:4b:76:78:e5:f2:66:3c:
+                    0f:b1:ad:fb:97:8f:2e:a2:b6:53:d3:b6:0e:e2:66:
+                    f9:b9:0b:b7:ce:b4:d5:f5:1c:1f:6f:22:7d:48:f5:
+                    6d:f0:16:cd:8e:48:79:d1:14:4a:14:2f:2f:f8:c4:
+                    bd:1d:87:cf:7d:8b:5c:77:ad:58:24:b0:0e:a1:6d:
+                    d6:0a:c7:d8:bc:2f:67:65:c8:5d:d8:d8:31:c2:67:
+                    4b:4a:f4:a1:a5:54:82:af:cb:34:08:2a:04:7f:8e:
+                    7c:4c:b7:db:dc:6a:8a:5d:81
+                Exponent: 65537 (0x10001)
+        X509v3 extensions:
+            X509v3 Basic Constraints: 
+                CA:FALSE
+            Netscape Cert Type: 
+                SSL Client, SSL Server, S/MIME
+            X509v3 Extended Key Usage: 
+                TLS Web Server Authentication, E-mail Protection, TLS Web Client Authentication
+            X509v3 Key Usage: 
+                Digital Signature, Non Repudiation, Key Encipherment
+            X509v3 Subject Key Identifier: 
+                54:11:7C:09:55:44:1C:94:45:A9:A2:76:46:2B:2C:24:26:6A:44:E8
+    Signature Algorithm: sha1WithRSAEncryption
+        0d:ee:fc:2e:de:37:4d:e6:d4:67:fa:14:fe:71:54:7c:61:87:
+        6e:8e:16:63:11:b7:83:db:02:c7:b8:38:8b:a8:66:7a:1e:d3:
+        2c:98:6c:db:d9:0b:f7:b8:52:52:d8:8f:43:af:db:e4:44:01:
+        bc:2d:61:31:e5:81:64:e2:8a:70:ba:34:ff:4f:3b:67:26:de:
+        7b:37:b4:4d:bb:91:9e:4a:69:c7:e9:35:2b:b4:c9:fc:15:bf:
+        29:ed:0f:ea:3e:7d:7d:12:82:44:12:1a:3f:7f:71:15:2e:1d:
+        f0:3a:15:f7:ec:8c:74:ea:aa:d9:10:82:76:4e:f6:6a:6c:8b:
+        8e:bc
+-----BEGIN CERTIFICATE-----
+MIIDPDCCAqWgAwIBAgICDC0wDQYJKoZIhvcNAQEFBQAwezELMAkGA1UEBhMCVVMx
+FjAUBgNVBAgTDU1hc3NhY2h1c2V0dHMxLjAsBgNVBAoTJU1hc3NhY2h1c2V0dHMg
+SW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kxJDAiBgNVBAsTG01JVCBDZXJ0aWZpY2F0
+aW9uIEF1dGhvcml0eTAeFw0wODExMTYxNzAwMDBaFw0wOTExMTYxNzAwMDBaMIHU
+MQswCQYDVQQGEwJVUzEWMBQGA1UECBMNTWFzc2FjaHVzZXR0czESMBAGA1UEBxMJ
+Q2FtYnJpZGdlMS4wLAYDVQQKEyVNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBU
+ZWNobm9sb2d5MS0wKwYDVQQLEyRTdHVkZW50IEluZm9ybWF0aW9uIFByb2Nlc3Np
+bmcgQm9hcmQxGjAYBgNVBAMTEXdoYXRzbmV4dC5taXQuZWR1MR4wHAYJKoZIhvcN
+AQkBFg9zY3JpcHRzQG1pdC5lZHUwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGB
+ALU+IU3BiWsBjEeA/rM3J3b4UkHmoj1Ldnjl8mY8D7Gt+5ePLqK2U9O2DuJm+bkL
+t8601fUcH28ifUj1bfAWzY5IedEUShQvL/jEvR2Hz32LXHetWCSwDqFt1grH2Lwv
+Z2XIXdjYMcJnS0r0oaVUgq/LNAgqBH+OfEy329xqil2BAgMBAAGjdTBzMAkGA1Ud
+EwQCMAAwEQYJYIZIAYb4QgEBBAQDAgXgMCcGA1UdJQQgMB4GCCsGAQUFBwMBBggr
+BgEFBQcDBAYIKwYBBQUHAwIwCwYDVR0PBAQDAgXgMB0GA1UdDgQWBBRUEXwJVUQc
+lEWponZGKywkJmpE6DANBgkqhkiG9w0BAQUFAAOBgQAN7vwu3jdN5tRn+hT+cVR8
+YYdujhZjEbeD2wLHuDiLqGZ6HtMsmGzb2Qv3uFJS2I9Dr9vkRAG8LWEx5YFk4opw
+ujT/TztnJt57N7RNu5GeSmnH6TUrtMn8Fb8p7Q/qPn19EoJEEho/f3EVLh3wOhX3
+7Ix06qrZEIJ2TvZqbIuOvA==
+-----END CERTIFICATE-----
+
Index: /tags/fc9-eol/server/fedora/config/etc/pki/tls/openssl.cnf
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/pki/tls/openssl.cnf	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/pki/tls/openssl.cnf	(revision 1257)
@@ -0,0 +1,318 @@
+#
+# OpenSSL example configuration file.
+# This is mostly being used for generation of certificate requests.
+#
+
+# This definition stops the following lines choking if HOME isn't
+# defined.
+HOME			= .
+RANDFILE		= $ENV::HOME/.rnd
+
+# Extra OBJECT IDENTIFIER info:
+#oid_file		= $ENV::HOME/.oid
+oid_section		= new_oids
+
+# To use this configuration file with the "-extfile" option of the
+# "openssl x509" utility, name here the section containing the
+# X.509v3 extensions to use:
+# extensions		= 
+# (Alternatively, use a configuration file that has only
+# X.509v3 extensions in its main [= default] section.)
+
+[ new_oids ]
+
+# We can add new OIDs in here for use by 'ca' and 'req'.
+# Add a simple OID like this:
+# testoid1=1.2.3.4
+# Or use config file substitution like this:
+# testoid2=${testoid1}.5.6
+
+####################################################################
+[ ca ]
+default_ca	= CA_default		# The default ca section
+
+####################################################################
+[ CA_default ]
+
+dir		= ../../CA		# Where everything is kept
+certs		= $dir/certs		# Where the issued certs are kept
+crl_dir		= $dir/crl		# Where the issued crl are kept
+database	= $dir/index.txt	# database index file.
+#unique_subject	= no			# Set to 'no' to allow creation of
+					# several ctificates with same subject.
+new_certs_dir	= $dir/newcerts		# default place for new certs.
+
+certificate	= $dir/cacert.pem 	# The CA certificate
+serial		= $dir/serial 		# The current serial number
+crlnumber	= $dir/crlnumber	# the current crl number
+					# must be commented out to leave a V1 CRL
+crl		= $dir/crl.pem 		# The current CRL
+private_key	= $dir/private/cakey.pem# The private key
+RANDFILE	= $dir/private/.rand	# private random number file
+
+x509_extensions	= usr_cert		# The extentions to add to the cert
+
+# Comment out the following two lines for the "traditional"
+# (and highly broken) format.
+name_opt 	= ca_default		# Subject Name options
+cert_opt 	= ca_default		# Certificate field options
+
+# Extension copying option: use with caution.
+# copy_extensions = copy
+
+# Extensions to add to a CRL. Note: Netscape communicator chokes on V2 CRLs
+# so this is commented out by default to leave a V1 CRL.
+# crlnumber must also be commented out to leave a V1 CRL.
+# crl_extensions	= crl_ext
+
+default_days	= 365			# how long to certify for
+default_crl_days= 30			# how long before next CRL
+default_md	= sha1			# which md to use.
+preserve	= no			# keep passed DN ordering
+
+# A few difference way of specifying how similar the request should look
+# For type CA, the listed attributes must be the same, and the optional
+# and supplied fields are just that :-)
+policy		= policy_match
+
+# For the CA policy
+[ policy_match ]
+countryName		= match
+stateOrProvinceName	= match
+organizationName	= match
+organizationalUnitName	= optional
+commonName		= supplied
+emailAddress		= optional
+
+# For the 'anything' policy
+# At this point in time, you must list all acceptable 'object'
+# types.
+[ policy_anything ]
+countryName		= optional
+stateOrProvinceName	= optional
+localityName		= optional
+organizationName	= optional
+organizationalUnitName	= optional
+commonName		= supplied
+emailAddress		= optional
+
+####################################################################
+[ req ]
+default_bits		= 1024
+default_md		= sha1
+default_keyfile 	= privkey.pem
+distinguished_name	= req_distinguished_name
+attributes		= req_attributes
+x509_extensions	= v3_ca	# The extentions to add to the self signed cert
+
+# Passwords for private keys if not present they will be prompted for
+# input_password = secret
+# output_password = secret
+
+# This sets a mask for permitted string types. There are several options. 
+# default: PrintableString, T61String, BMPString.
+# pkix	 : PrintableString, BMPString.
+# utf8only: only UTF8Strings.
+# nombstr : PrintableString, T61String (no BMPStrings or UTF8Strings).
+# MASK:XXXX a literal mask value.
+# WARNING: current versions of Netscape crash on BMPStrings or UTF8Strings
+# so use this option with caution!
+# we use PrintableString+UTF8String mask so if pure ASCII texts are used
+# the resulting certificates are compatible with Netscape
+string_mask = MASK:0x2002
+
+# req_extensions = v3_req # The extensions to add to a certificate request
+
+[ req_distinguished_name ]
+countryName			= Country Name (2 letter code)
+countryName_default		= US
+countryName_min			= 2
+countryName_max			= 2
+
+stateOrProvinceName		= State or Province Name (full name)
+stateOrProvinceName_default	= Massachusetts
+
+localityName			= Locality Name (eg, city)
+localityName_default		= Cambridge
+
+0.organizationName		= Organization Name (eg, company)
+0.organizationName_default	= Massachusetts Institute of Technology
+
+# we can do this but it is not needed normally :-)
+#1.organizationName		= Second Organization Name (eg, company)
+#1.organizationName_default	= World Wide Web Pty Ltd
+
+organizationalUnitName		= OU
+organizationalUnitName_default	= Student Information Processing Board
+
+commonName			= Common Name (eg, your name or your server\'s hostname)
+commonName_max			= 64
+
+emailAddress			= Email Address
+emailAddress_max		= 64
+emailAddress_default		= scripts@mit.edu
+
+# SET-ex3			= SET extension number 3
+
+[ req_attributes ]
+challengePassword		= A challenge password
+challengePassword_min		= 4
+challengePassword_max		= 20
+
+unstructuredName		= An optional company name
+
+[ usr_cert ]
+
+# These extensions are added when 'ca' signs a request.
+
+# This goes against PKIX guidelines but some CAs do it and some software
+# requires this to avoid interpreting an end user certificate as a CA.
+
+basicConstraints=CA:FALSE
+
+# Here are some examples of the usage of nsCertType. If it is omitted
+# the certificate can be used for anything *except* object signing.
+
+# This is OK for an SSL server.
+# nsCertType			= server
+
+# For an object signing certificate this would be used.
+# nsCertType = objsign
+
+# For normal client use this is typical
+# nsCertType = client, email
+
+# and for everything including object signing:
+# nsCertType = client, email, objsign
+
+# This is typical in keyUsage for a client certificate.
+# keyUsage = nonRepudiation, digitalSignature, keyEncipherment
+
+# This will be displayed in Netscape's comment listbox.
+nsComment			= "OpenSSL Generated Certificate"
+
+# PKIX recommendations harmless if included in all certificates.
+subjectKeyIdentifier=hash
+authorityKeyIdentifier=keyid,issuer
+
+# This stuff is for subjectAltName and issuerAltname.
+# Import the email address.
+# subjectAltName=email:copy
+# An alternative to produce certificates that aren't
+# deprecated according to PKIX.
+# subjectAltName=email:move
+
+# Copy subject details
+# issuerAltName=issuer:copy
+
+#nsCaRevocationUrl		= http://www.domain.dom/ca-crl.pem
+#nsBaseUrl
+#nsRevocationUrl
+#nsRenewalUrl
+#nsCaPolicyUrl
+#nsSslServerName
+
+[ v3_req ]
+
+# Extensions to add to a certificate request
+
+basicConstraints = CA:FALSE
+keyUsage = nonRepudiation, digitalSignature, keyEncipherment
+
+[ v3_ca ]
+
+
+# Extensions for a typical CA
+
+
+# PKIX recommendation.
+
+subjectKeyIdentifier=hash
+
+authorityKeyIdentifier=keyid:always,issuer:always
+
+# This is what PKIX recommends but some broken software chokes on critical
+# extensions.
+#basicConstraints = critical,CA:true
+# So we do this instead.
+basicConstraints = CA:true
+
+# Key usage: this is typical for a CA certificate. However since it will
+# prevent it being used as an test self-signed certificate it is best
+# left out by default.
+# keyUsage = cRLSign, keyCertSign
+
+# Some might want this also
+# nsCertType = sslCA, emailCA
+
+# Include email address in subject alt name: another PKIX recommendation
+# subjectAltName=email:copy
+# Copy issuer details
+# issuerAltName=issuer:copy
+
+# DER hex encoding of an extension: beware experts only!
+# obj=DER:02:03
+# Where 'obj' is a standard or added object
+# You can even override a supported extension:
+# basicConstraints= critical, DER:30:03:01:01:FF
+
+[ crl_ext ]
+
+# CRL extensions.
+# Only issuerAltName and authorityKeyIdentifier make any sense in a CRL.
+
+# issuerAltName=issuer:copy
+authorityKeyIdentifier=keyid:always,issuer:always
+
+[ proxy_cert_ext ]
+# These extensions should be added when creating a proxy certificate
+
+# This goes against PKIX guidelines but some CAs do it and some software
+# requires this to avoid interpreting an end user certificate as a CA.
+
+basicConstraints=CA:FALSE
+
+# Here are some examples of the usage of nsCertType. If it is omitted
+# the certificate can be used for anything *except* object signing.
+
+# This is OK for an SSL server.
+# nsCertType			= server
+
+# For an object signing certificate this would be used.
+# nsCertType = objsign
+
+# For normal client use this is typical
+# nsCertType = client, email
+
+# and for everything including object signing:
+# nsCertType = client, email, objsign
+
+# This is typical in keyUsage for a client certificate.
+# keyUsage = nonRepudiation, digitalSignature, keyEncipherment
+
+# This will be displayed in Netscape's comment listbox.
+nsComment			= "OpenSSL Generated Certificate"
+
+# PKIX recommendations harmless if included in all certificates.
+subjectKeyIdentifier=hash
+authorityKeyIdentifier=keyid,issuer:always
+
+# This stuff is for subjectAltName and issuerAltname.
+# Import the email address.
+# subjectAltName=email:copy
+# An alternative to produce certificates that aren't
+# deprecated according to PKIX.
+# subjectAltName=email:move
+
+# Copy subject details
+# issuerAltName=issuer:copy
+
+#nsCaRevocationUrl		= http://www.domain.dom/ca-crl.pem
+#nsBaseUrl
+#nsRevocationUrl
+#nsRenewalUrl
+#nsCaPolicyUrl
+#nsSslServerName
+
+# This really needs to be in place for it to be a proxy certificate.
+proxyCertInfo=critical,language:id-ppl-anyLanguage,pathlen:3,policy:foo
Index: /tags/fc9-eol/server/fedora/config/etc/postfix/blocked_users
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/postfix/blocked_users	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/postfix/blocked_users	(revision 1257)
@@ -0,0 +1,2 @@
+reuter
+cycling-club
Index: /tags/fc9-eol/server/fedora/config/etc/postfix/main.cf
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/postfix/main.cf	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/postfix/main.cf	(revision 1257)
@@ -0,0 +1,33 @@
+#biff = no
+
+# appending .domain is the MUA's job.
+#append_dot_mydomain = no
+
+# Uncomment the next line to generate "delayed mail" warnings
+#delay_warning_time = 4h
+
+alias_maps = hash:/etc/aliases
+alias_database = hash:/etc/aliases
+myorigin = scripts.mit.edu
+mydestination = scripts.mit.edu, scripts, $myhostname, scripts-test.mit.edu, scripts-test, scripts-vhosts.mit.edu, scripts-vhosts, localhost
+relayhost =
+mynetworks = 127.0.0.0/8
+mailbox_command = /usr/bin/procmail -t -a "${EXTENSION}" ~/mail_scripts/procmailrc
+mailbox_size_limit = 0
+recipient_delimiter = +
+inet_interfaces = all
+readme_directory = /usr/share/doc/postfix-2.5.6/README_FILES
+sample_directory = /usr/share/doc/postfix-2.5.6/samples
+sendmail_path = /usr/sbin/sendmail
+html_directory = no
+setgid_group = postdrop
+command_directory = /usr/sbin
+manpage_directory = /usr/share/man
+daemon_directory = /usr/libexec/postfix
+newaliases_path = /usr/bin/newaliases
+mailq_path = /usr/bin/mailq
+queue_directory = /var/spool/postfix
+mail_owner = postfix
+virtual_alias_maps = hash:/etc/postfix/virtual, regexp:/etc/postfix/virtual_re
+data_directory = /var/lib/postfix
+authorized_submit_users = !/etc/postfix/blocked_users, static:all
Index: /tags/fc9-eol/server/fedora/config/etc/postfix/virtual
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/postfix/virtual	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/postfix/virtual	(revision 1257)
@@ -0,0 +1,7 @@
+webmaster@szs.mit.edu jdaniel@mit.edu
+webmaster@webzephyr.mit.edu jdaniel@mit.edu
+@szs.mit.edu webzephyr
+@webzephyr.mit.edu webzephyr
+# Domains also match here
+szs.mit.edu true
+webzephyr.mit.edu true
Index: /tags/fc9-eol/server/fedora/config/etc/postfix/virtual_re
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/postfix/virtual_re	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/postfix/virtual_re	(revision 1257)
@@ -0,0 +1,2 @@
+/^(.*)@([^@]*)\.scripts\.mit\.edu$/ $2+$1
+/^([^@]*)\.scripts\.mit\.edu$/ true
Index: /tags/fc9-eol/server/fedora/config/etc/rc.d/rc.local
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/rc.d/rc.local	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/rc.d/rc.local	(revision 1257)
@@ -0,0 +1,9 @@
+#!/bin/bash
+
+touch /var/lock/subsys/local
+
+if [ -r "/afs/athena.mit.edu" ]; then
+	/sbin/service postfix start
+fi
+
+/bin/mkdir -pm 1773 /tmp/sessions
Index: /tags/fc9-eol/server/fedora/config/etc/resolv.conf
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/resolv.conf	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/resolv.conf	(revision 1257)
@@ -0,0 +1,2 @@
+search mit.edu
+nameserver 127.0.0.1
Index: /tags/fc9-eol/server/fedora/config/etc/security/limits.conf
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/security/limits.conf	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/security/limits.conf	(revision 1257)
@@ -0,0 +1,57 @@
+# /etc/security/limits.conf
+#
+#Each line describes a limit for a user in the form:
+#
+#<domain>        <type>  <item>  <value>
+#
+#Where:
+#<domain> can be:
+#        - an user name
+#        - a group name, with @group syntax
+#        - the wildcard *, for default entry
+#        - the wildcard %, can be also used with %group syntax,
+#                 for maxlogin limit
+#
+#<type> can have the two values:
+#        - "soft" for enforcing the soft limits
+#        - "hard" for enforcing hard limits
+#
+#<item> can be one of the following:
+#        - core - limits the core file size (KB)
+#        - data - max data size (KB)
+#        - fsize - maximum filesize (KB)
+#        - memlock - max locked-in-memory address space (KB)
+#        - nofile - max number of open files
+#        - rss - max resident set size (KB)
+#        - stack - max stack size (KB)
+#        - cpu - max CPU time (MIN)
+#        - nproc - max number of processes
+#        - as - address space limit
+#        - maxlogins - max number of logins for this user
+#        - maxsyslogins - max number of logins on the system
+#        - priority - the priority to run user process with
+#        - locks - max number of file locks the user can hold
+#        - sigpending - max number of pending signals
+#        - msgqueue - max memory used by POSIX message queues (bytes)
+#        - nice - max nice priority allowed to raise to
+#        - rtprio - max realtime priority
+#
+#<domain>      <type>  <item>         <value>
+#
+
+# No limits for root
+root		-
+
+# For everyone else,
+*               soft    core            0
+*		-	rss		524268
+*		-	data		1048576
+*		-	as		1048576
+#*               hard    rss             10000
+#@student        hard    nproc           20
+#@faculty        soft    nproc           20
+#@faculty        hard    nproc           50
+#ftp             hard    nproc           0
+#@student        -       maxlogins       4
+
+# End of file
Index: /tags/fc9-eol/server/fedora/config/etc/selinux/strict/contexts/userhelper_context
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/selinux/strict/contexts/userhelper_context	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/selinux/strict/contexts/userhelper_context	(revision 1257)
@@ -0,0 +1,1 @@
+user_u:user_r:user_setuid_t:s0
Index: /tags/fc9-eol/server/fedora/config/etc/selinux/strict/contexts/users/root
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/selinux/strict/contexts/users/root	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/selinux/strict/contexts/users/root	(revision 1257)
@@ -0,0 +1,9 @@
+system_r:local_login_t:s0  sysadm_r:sysadm_t:s0 staff_r:staff_t:s0 user_r:user_t:s0
+system_r:crond_t:s0	sysadm_r:sysadm_crond_t:s0 staff_r:staff_crond_t:s0 user_r:user_crond_t:s0
+staff_r:staff_su_t:s0	sysadm_r:sysadm_t:s0 staff_r:staff_t:s0 user_r:user_t:s0
+sysadm_r:sysadm_su_t:s0	sysadm_r:sysadm_t:s0 staff_r:staff_t:s0 user_r:user_t:s0
+user_r:user_su_t:s0	sysadm_r:sysadm_t:s0 staff_r:staff_t:s0 user_r:user_t:s0
+#
+# Uncomment if you want to automatically login as sysadm_r
+#
+#system_r:sshd_t:s0 sysadm_r:sysadm_t:s0 staff_r:staff_t:s0 user_r:user_t:s0
Index: /tags/fc9-eol/server/fedora/config/etc/snmp/snmpd.conf
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/snmp/snmpd.conf	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/snmp/snmpd.conf	(revision 1257)
@@ -0,0 +1,1 @@
+rocommunity public
Index: /tags/fc9-eol/server/fedora/config/etc/ssh/shosts.equiv
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/ssh/shosts.equiv	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/ssh/shosts.equiv	(revision 1257)
@@ -0,0 +1,12 @@
+better-mousetrap.mit.edu
+old-faithful.mit.edu
+bees-knees.mit.edu
+cats-whiskers.mit.edu
+pancake-bunny.mit.edu
+busy-beaver.mit.edu
+172.21.0.53
+172.21.0.57
+172.21.0.167
+172.21.0.228
+172.21.0.237
+172.21.0.234
Index: /tags/fc9-eol/server/fedora/config/etc/ssh/ssh_config
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/ssh/ssh_config	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/ssh/ssh_config	(revision 1257)
@@ -0,0 +1,56 @@
+#	$OpenBSD: ssh_config,v 1.23 2007/06/08 04:40:40 pvalchev Exp $
+
+# This is the ssh client system-wide configuration file.  See
+# ssh_config(5) for more information.  This file provides defaults for
+# users, and the values can be changed in per-user configuration files
+# or on the command line.
+
+# Configuration data is parsed as follows:
+#  1. command line options
+#  2. user-specific file
+#  3. system-wide file
+# Any configuration value is only changed the first time it is set.
+# Thus, host-specific definitions should be at the beginning of the
+# configuration file, and defaults at the end.
+
+# Site-wide defaults for some commonly used options.  For a comprehensive
+# list of available options, their meanings and defaults, please see the
+# ssh_config(5) man page.
+
+# Host *
+#   ForwardAgent no
+#   ForwardX11 no
+#   RhostsRSAAuthentication no
+#   RSAAuthentication yes
+   EnableSSHKeysign yes
+   PasswordAuthentication no
+   HostbasedAuthentication yes
+#   GSSAPIAuthentication no
+#   GSSAPIDelegateCredentials no
+#   BatchMode no
+#   CheckHostIP yes
+#   AddressFamily any
+#   ConnectTimeout 0
+#   StrictHostKeyChecking ask
+#   IdentityFile ~/.ssh/identity
+#   IdentityFile ~/.ssh/id_rsa
+#   IdentityFile ~/.ssh/id_dsa
+#   Port 22
+#   Protocol 2,1
+#   Cipher 3des
+#   Ciphers aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,arcfour,aes192-cbc,aes256-cbc
+#   MACs hmac-md5,hmac-sha1,umac-64@openssh.com,hmac-ripemd160
+#   EscapeChar ~
+#   Tunnel no
+#   TunnelDevice any:any
+#   PermitLocalCommand no
+Host *
+	GSSAPIAuthentication yes
+# If this option is set to yes then remote X11 clients will have full access
+# to the original X11 display. As virtually no X11 client supports the untrusted
+# mode correctly we set this to yes.
+	ForwardX11Trusted yes
+# Send locale-related environment variables
+	SendEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES 
+	SendEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT 
+	SendEnv LC_IDENTIFICATION LC_ALL LANGUAGE
Index: /tags/fc9-eol/server/fedora/config/etc/ssh/ssh_known_hosts
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/ssh/ssh_known_hosts	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/ssh/ssh_known_hosts	(revision 1257)
@@ -0,0 +1,6 @@
+busy-beaver.mit.edu,busy-beaver,b-b.mit.edu,b-b,scripts7.mit.edu,scripts7,18.181.0.234,172.21.0.234 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAuEpkEgaIgjK7F1gV81lLSYTwSqIZX/9IJs37VaJCsJFv3D86uuJSdfI3Y94fPn2OH6AxfdaqGNksVdi27mKQfzvCB4ogjQgxmM391MIDLd+izZDY0YvCb4DqJLMJUpX49cNUMkj+/rJg1O0K2w/lb8DGr7wdoLSPKCUJNJv5WMMDxpFL253lPELsmnds4T+R6LpTt6W9+FalHl84me51sEjV9PbmhcTaNwuoJStAjhrKPfgHHDIKNyCUvaVkoHPXEsdzz00yY7i57djyZlzPV/jM7LKar+Xw2LB0Z3098IQcdbD8zmz2DdakPTlShxavNPC6kZDZ3WVqziC+bszaSQ==
+pancake-bunny.mit.edu,pancake-bunny,p-b.mit.edu,p-b,scripts6.mit.edu,scripts6,18.181.0.237,172.21.0.237 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAuEpkEgaIgjK7F1gV81lLSYTwSqIZX/9IJs37VaJCsJFv3D86uuJSdfI3Y94fPn2OH6AxfdaqGNksVdi27mKQfzvCB4ogjQgxmM391MIDLd+izZDY0YvCb4DqJLMJUpX49cNUMkj+/rJg1O0K2w/lb8DGr7wdoLSPKCUJNJv5WMMDxpFL253lPELsmnds4T+R6LpTt6W9+FalHl84me51sEjV9PbmhcTaNwuoJStAjhrKPfgHHDIKNyCUvaVkoHPXEsdzz00yY7i57djyZlzPV/jM7LKar+Xw2LB0Z3098IQcdbD8zmz2DdakPTlShxavNPC6kZDZ3WVqziC+bszaSQ==
+cats-whiskers.mit.edu,cats-whiskers,c-w.mit.edu,c-w,scripts4.mit.edu,scripts4,18.181.0.228,172.21.0.228 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAuEpkEgaIgjK7F1gV81lLSYTwSqIZX/9IJs37VaJCsJFv3D86uuJSdfI3Y94fPn2OH6AxfdaqGNksVdi27mKQfzvCB4ogjQgxmM391MIDLd+izZDY0YvCb4DqJLMJUpX49cNUMkj+/rJg1O0K2w/lb8DGr7wdoLSPKCUJNJv5WMMDxpFL253lPELsmnds4T+R6LpTt6W9+FalHl84me51sEjV9PbmhcTaNwuoJStAjhrKPfgHHDIKNyCUvaVkoHPXEsdzz00yY7i57djyZlzPV/jM7LKar+Xw2LB0Z3098IQcdbD8zmz2DdakPTlShxavNPC6kZDZ3WVqziC+bszaSQ==
+bees-knees.mit.edu,bees-knees,b-k.mit.edu,b-k,scripts3.mit.edu,scripts3,18.181.0.167,172.21.0.167 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAuEpkEgaIgjK7F1gV81lLSYTwSqIZX/9IJs37VaJCsJFv3D86uuJSdfI3Y94fPn2OH6AxfdaqGNksVdi27mKQfzvCB4ogjQgxmM391MIDLd+izZDY0YvCb4DqJLMJUpX49cNUMkj+/rJg1O0K2w/lb8DGr7wdoLSPKCUJNJv5WMMDxpFL253lPELsmnds4T+R6LpTt6W9+FalHl84me51sEjV9PbmhcTaNwuoJStAjhrKPfgHHDIKNyCUvaVkoHPXEsdzz00yY7i57djyZlzPV/jM7LKar+Xw2LB0Z3098IQcdbD8zmz2DdakPTlShxavNPC6kZDZ3WVqziC+bszaSQ==
+better-mousetrap.mit.edu,better-mousetrap,b-m.mit.edu,b-m,scripts1.mit.edu,scripts1,18.181.0.57,172.21.0.57 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAuEpkEgaIgjK7F1gV81lLSYTwSqIZX/9IJs37VaJCsJFv3D86uuJSdfI3Y94fPn2OH6AxfdaqGNksVdi27mKQfzvCB4ogjQgxmM391MIDLd+izZDY0YvCb4DqJLMJUpX49cNUMkj+/rJg1O0K2w/lb8DGr7wdoLSPKCUJNJv5WMMDxpFL253lPELsmnds4T+R6LpTt6W9+FalHl84me51sEjV9PbmhcTaNwuoJStAjhrKPfgHHDIKNyCUvaVkoHPXEsdzz00yY7i57djyZlzPV/jM7LKar+Xw2LB0Z3098IQcdbD8zmz2DdakPTlShxavNPC6kZDZ3WVqziC+bszaSQ==
+old-faithful.mit.edu,old-faithful,o-f.mit.edu,o-f,scripts2.mit.edu,scripts2,18.181.0.53,172.21.0.53 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAuEpkEgaIgjK7F1gV81lLSYTwSqIZX/9IJs37VaJCsJFv3D86uuJSdfI3Y94fPn2OH6AxfdaqGNksVdi27mKQfzvCB4ogjQgxmM391MIDLd+izZDY0YvCb4DqJLMJUpX49cNUMkj+/rJg1O0K2w/lb8DGr7wdoLSPKCUJNJv5WMMDxpFL253lPELsmnds4T+R6LpTt6W9+FalHl84me51sEjV9PbmhcTaNwuoJStAjhrKPfgHHDIKNyCUvaVkoHPXEsdzz00yY7i57djyZlzPV/jM7LKar+Xw2LB0Z3098IQcdbD8zmz2DdakPTlShxavNPC6kZDZ3WVqziC+bszaSQ==
Index: /tags/fc9-eol/server/fedora/config/etc/ssh/sshd_config
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/ssh/sshd_config	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/ssh/sshd_config	(revision 1257)
@@ -0,0 +1,21 @@
+Protocol 2
+SyslogFacility AUTHPRIV
+PasswordAuthentication no
+ChallengeResponseAuthentication yes
+GSSAPIAuthentication yes
+GSSAPICleanupCredentials yes
+UsePAM yes
+AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
+AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
+AcceptEnv LC_IDENTIFICATION LC_ALL
+AcceptEnv EDITOR VISUAL
+X11Forwarding no
+Banner /etc/issue.net
+Subsystem sftp /usr/libexec/openssh/sftp-server
+LogLevel VERBOSE
+
+# See trac #23
+HostbasedAuthentication yes
+IgnoreRhosts yes
+IgnoreUserKnownHosts yes
+DenyUsers root@old-faithful.mit.edu root@better-mousetrap.mit.edu root@bees-knees.mit.edu root@cats-whiskers.mit.edu root@pancake-bunny.mit.edu root@busy-beaver.mit.edu
Index: /tags/fc9-eol/server/fedora/config/etc/sudoers
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/sudoers	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/sudoers	(revision 1257)
@@ -0,0 +1,77 @@
+## Sudoers allows particular users to run various commands as
+## the root user, without needing the root password.
+##
+## Examples are provided at the bottom of the file for collections
+## of related commands, which can then be delegated out to particular
+## users or groups.
+## 
+## This file must be edited with the 'visudo' command.
+
+## Host Aliases
+## Groups of machines. You may prefer to use hostnames (perhaps using 
+## wildcards for entire domains) or IP addresses instead.
+# Host_Alias     FILESERVERS = fs1, fs2
+# Host_Alias     MAILSERVERS = smtp, smtp2
+
+## User Aliases
+## These aren't often necessary, as you can use regular groups
+## (ie, from files, LDAP, NIS, etc) in this file - just use %groupname 
+## rather than USERALIAS
+# User_Alias ADMINS = jsmith, mikem
+
+
+## Command Aliases
+## These are groups of related commands...
+
+## Networking
+Cmnd_Alias NETWORKING = /sbin/route, /sbin/ifconfig, /bin/ping, /sbin/dhclient, /usr/bin/net, /sbin/iptables, /usr/bin/rfcomm, /usr/bin/wvdial, /sbin/iwconfig, /sbin/mii-tool
+
+## Installation and management of software
+Cmnd_Alias SOFTWARE = /bin/rpm, /usr/bin/up2date, /usr/bin/yum
+
+## Services
+Cmnd_Alias SERVICES = /sbin/service, /sbin/chkconfig
+
+## Updating the locate database
+Cmnd_Alias LOCATE = /usr/sbin/updatedb
+
+## Storage
+Cmnd_Alias STORAGE = /sbin/fdisk, /sbin/sfdisk, /sbin/parted, /sbin/partprobe, /bin/mount, /bin/umount
+
+## Delegating permissions
+Cmnd_Alias DELEGATING = /usr/sbin/visudo, /bin/chown, /bin/chmod, /bin/chgrp 
+
+## Processes
+Cmnd_Alias PROCESSES = /bin/nice, /bin/kill, /usr/bin/kill, /usr/bin/killall
+
+## Drivers
+Cmnd_Alias DRIVERS = /sbin/modprobe
+
+#Defaults    requiretty
+
+Defaults    env_reset
+Defaults    env_keep =  "COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR LS_COLORS"
+Defaults    env_keep += "MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE"
+Defaults    env_keep += "LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES"
+Defaults    env_keep += "LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE"
+Defaults    env_keep += "LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY"
+
+## Next comes the main part: which users can run what software on 
+## which machines (the sudoers file can be shared between multiple
+## systems).
+## Syntax:
+##
+## 	user	MACHINE=COMMANDS
+##
+## The COMMANDS section may have other options added to it.
+##
+## Allow root to run any commands anywhere 
+root	ALL=(ALL) 	ALL
+
+scripts	ALL=(signup)	NOPASSWD: /usr/local/bin/ldap-backup
+rebecca	ALL=(root)	NOPASSWD: /sbin/service nscd restart
+
+Defaults:munin !syslog
+
+munin ALL=(root) SETENV: NOPASSWD: /etc/munin/plugins/postfix_mailqueue , /etc/munin/plugins/postfix_mailvolume , /etc/munin/plugins/hddtemp_smartctl , /etc/munin/plugins/sendmail* , /etc/munin/plugins/if_* , /etc/munin/plugins/if_err_eth2
+munin ALL=(root) NOPASSWD: /etc/munin/plugins/smart_*, /etc/munin/plugins/sensors_*
Index: /tags/fc9-eol/server/fedora/config/etc/sysconfig/crond
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/sysconfig/crond	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/sysconfig/crond	(revision 1257)
@@ -0,0 +1,12 @@
+# Settings for the CRON daemon.
+# CRONDARGS= :  any extra command-line startup arguments for crond
+# CRON_VALIDATE_MAILRCPTS=1:a non-empty value of this variable will
+#                           enable vixie-cron-4.1's validation of 
+#                           mail recipient names, which would then be
+#                           restricted to contain only the chars
+#                           from this tr(1) set : [@!:%-_.,:alnum:]
+#                           otherwise mailing is not attempted.
+CRONDARGS=
+
+# Force crond to always run with tokens
+su -c '/home/afsagent/renew' -l afsagent || :
Index: /tags/fc9-eol/server/fedora/config/etc/sysconfig/httpd
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/sysconfig/httpd	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/sysconfig/httpd	(revision 1257)
@@ -0,0 +1,22 @@
+# Configuration file for the httpd service.
+
+#
+# The default processing model (MPM) is the process-based
+# 'prefork' model.  A thread-based model, 'worker', is also
+# available, but does not work with some modules (such as PHP).
+# The service must be stopped before changing this variable.
+#
+HTTPD=/usr/sbin/httpd.worker
+
+#
+# To pass additional options (for instance, -D definitions) to the
+# httpd binary at startup, set OPTIONS here.
+#
+#OPTIONS=
+
+#
+# By default, the httpd process is started in the C locale; to 
+# change the locale in which the server runs, the HTTPD_LANG
+# variable can be set.
+#
+#HTTPD_LANG=C
Index: /tags/fc9-eol/server/fedora/config/etc/sysconfig/iptables
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/sysconfig/iptables	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/sysconfig/iptables	(revision 1257)
@@ -0,0 +1,26 @@
+# Generated by iptables-save v1.3.5 on Tue Jul 18 01:46:04 2006
+*mangle
+:PREROUTING ACCEPT [857:1670874]
+:INPUT ACCEPT [857:1670874]
+:FORWARD ACCEPT [0:0]
+:OUTPUT ACCEPT [1197:347244]
+:POSTROUTING ACCEPT [1195:345719]
+COMMIT
+# Completed on Tue Jul 18 01:46:04 2006
+# Generated by iptables-save v1.3.5 on Tue Jul 18 01:46:04 2006
+*nat
+:OUTPUT ACCEPT [0:0]
+:PREROUTING ACCEPT [0:0]
+:POSTROUTING ACCEPT [0:0]
+#-A PREROUTING -p tcp -m tcp --dport 3306 -j DNAT --to-destination 18.181.0.52:3306
+#-A POSTROUTING -p tcp -m tcp -d 18.181.0.52 --dport 3306 -j MASQUERADE
+COMMIT
+# Completed on Tue Jul 18 01:46:04 2006
+# Generated by iptables-save v1.3.5 on Tue Jul 18 01:46:04 2006
+*filter
+:INPUT ACCEPT [292118:164733476]
+-A INPUT -p udp -m udp --dport 161 -s ! 18.0.0.0/8 -j REJECT
+:FORWARD ACCEPT [0:0]
+:OUTPUT ACCEPT [500523:537785790]
+COMMIT
+# Completed on Tue Jul 18 01:46:04 2006
Index: /tags/fc9-eol/server/fedora/config/etc/sysconfig/network-scripts/ifcfg-lo:0
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/sysconfig/network-scripts/ifcfg-lo:0	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/sysconfig/network-scripts/ifcfg-lo:0	(revision 1257)
@@ -0,0 +1,5 @@
+DEVICE=lo:0
+IPADDR=18.181.0.46
+NETMASK=255.255.255.255
+NETWORK=18.181.0.0
+ONBOOT=yes
Index: /tags/fc9-eol/server/fedora/config/etc/sysconfig/network-scripts/ifcfg-lo:1
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/sysconfig/network-scripts/ifcfg-lo:1	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/sysconfig/network-scripts/ifcfg-lo:1	(revision 1257)
@@ -0,0 +1,5 @@
+DEVICE=lo:1
+IPADDR=18.181.0.50
+NETMASK=255.255.255.255
+NETWORK=18.181.0.0
+ONBOOT=yes
Index: /tags/fc9-eol/server/fedora/config/etc/sysconfig/network-scripts/ifcfg-lo:2
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/sysconfig/network-scripts/ifcfg-lo:2	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/sysconfig/network-scripts/ifcfg-lo:2	(revision 1257)
@@ -0,0 +1,5 @@
+DEVICE=lo:2
+IPADDR=18.181.0.49
+NETMASK=255.255.255.255
+NETWORK=18.181.0.0
+ONBOOT=yes
Index: /tags/fc9-eol/server/fedora/config/etc/sysconfig/network-scripts/ifcfg-lo:3
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/sysconfig/network-scripts/ifcfg-lo:3	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/sysconfig/network-scripts/ifcfg-lo:3	(revision 1257)
@@ -0,0 +1,5 @@
+DEVICE=lo:3
+IPADDR=18.181.0.43
+NETMASK=255.255.255.255
+NETWORK=18.181.0.0
+ONBOOT=yes
Index: /tags/fc9-eol/server/fedora/config/etc/sysconfig/network-scripts/route-eth1
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/sysconfig/network-scripts/route-eth1	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/sysconfig/network-scripts/route-eth1	(revision 1257)
@@ -0,0 +1,9 @@
+18.181.0.47 via 172.21.0.47
+18.181.0.56 via 172.21.0.56
+18.181.0.52 via 172.21.0.52
+18.181.0.53 via 172.21.0.53
+18.181.0.57 via 172.21.0.57
+18.181.0.167 via 172.21.0.167
+18.181.0.228 via 172.21.0.228
+18.181.0.234 via 172.21.0.234
+18.181.0.237 via 172.21.0.237
Index: /tags/fc9-eol/server/fedora/config/etc/sysconfig/openafs
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/sysconfig/openafs	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/sysconfig/openafs	(revision 1257)
@@ -0,0 +1,17 @@
+AFSD_ARGS="-afsdb -dynroot -fakestat-all -stat 25000 -daemons 100 -volumes 400 -files 400000 -chunksize 19"
+BOSSERVER_ARGS=
+
+postinit () {
+	/sbin/sysctl -q afs.GCPAGs=0
+	/usr/bin/fs setcrypt on
+	case "$(lsb_release -cs)" in
+	  Moonshine)
+	    /usr/bin/fs sysname 'amd64_fedora7_scripts' 'scripts' 'amd64_fedora7' 'amd64_linux26' 'i386_rhel4' 'i386_rhel3' 'i386_rh9' 'i386_linux26' 'i386_linux24' 'i386_linux22' 'i386_linux3' 'i386_linux2' 'i386_linux1' ;;
+	  Sulphur)
+	    /usr/bin/fs sysname 'amd64_fedora9_scripts' 'amd64_fedora7_scripts' 'scripts' 'amd64_fedora9' 'amd64_fedora7' 'amd64_linux26' 'i386_deb40' 'i386_rhel4' 'i386_rhel3' 'i386_rh9' 'i386_linux26' 'i386_linux24' 'i386_linux22' 'i386_linux3' 'i386_linux2' ;;
+	  *)
+	    echo "Warning: unknown platform. AFS sysname not set."
+	esac
+	/usr/bin/fs setcell -nosuid -c athena
+}
+AFS_POST_INIT=postinit
Index: /tags/fc9-eol/server/fedora/config/etc/sysconfig/sysstat
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/sysconfig/sysstat	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/sysconfig/sysstat	(revision 1257)
@@ -0,0 +1,2 @@
+# How long to keep log files (days), maximum is a month
+HISTORY=30
Index: /tags/fc9-eol/server/fedora/config/etc/sysctl.conf
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/sysctl.conf	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/sysctl.conf	(revision 1257)
@@ -0,0 +1,14 @@
+net.ipv4.ip_forward = 1
+net.ipv4.conf.default.rp_filter = 1
+net.ipv4.conf.default.accept_source_route = 0
+kernel.panic = 5
+kernel.sysrq = 1
+kernel.core_uses_pid = 1
+vm.panic_on_oom = 1
+net.ipv4.tcp_syncookies = 1
+net.ipv4.conf.default.arp_ignore = 1
+net.ipv4.conf.default.arp_announce = 2
+net.ipv4.conf.all.arp_ignore = 1
+net.ipv4.conf.all.arp_announce = 2
+net.ipv4.tcp_keepalive_time = 825
+afs.GCPAGs = 0
Index: /tags/fc9-eol/server/fedora/config/etc/syslog-ng/d_zroot.pl
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/syslog-ng/d_zroot.pl	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/syslog-ng/d_zroot.pl	(revision 1257)
@@ -0,0 +1,133 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+use Sys::Hostname;
+use Time::HiRes qw(ualarm);
+use File::Temp;
+
+our $ZCLASS = "scripts-auto";
+our @USERS = qw/root logview/;
+my $k5login;
+open $k5login, '/root/.k5login';
+our @RECIPIENTS = map {chomp; m|([^/@]*)| && $1} <$k5login>;
+close $k5login;
+
+our %USERS;
+@USERS{@USERS} = undef;
+
+sub zwrite($;$$@) {
+    my ($message, $class, $instance, @recipients) = @_;
+    $class ||= $ZCLASS;
+    $instance ||= 'root.'.hostname;
+    open(ZWRITE, "|-", qw|/usr/bin/zwrite -d -n -O log -c|, $class, '-i', $instance, '-s', hostname, @recipients) or die "Couldn't open zwrite";
+    print ZWRITE $message;
+    close(ZWRITE);
+}
+
+my %toclass;
+
+my %sshkeys;
+
+my %ips;
+
+sub buildKeyMap($) {
+    my ($file) = @_;
+    open (KEYS, $file) or warn "Couldn't open $file: $!";
+    while (<KEYS>) {
+	chomp;
+	my ($fingerprint, $comment) = parseKey($_);
+	$sshkeys{$fingerprint} = $comment;
+    }
+    close(KEYS);
+}
+
+sub parseKey($) {
+    my ($key) = @_;
+    my $tmp = new File::Temp;
+    print $tmp $key;
+    close $tmp;
+    open (KEYGEN, "-|", qw(/usr/bin/ssh-keygen -l -f), $tmp) or die "Couldn't call ssh-keygen: $!";
+    my ($line) = <KEYGEN>;
+    close(KEYGEN);
+    my (undef, $fingerprint, undef) = split(' ', $line, 3);
+    my (undef, undef, $comment) = split(' ', $key, 3);
+    #print "$fingerprint $comment";
+    return ($fingerprint, $comment);
+}
+
+buildKeyMap("/root/.ssh/authorized_keys");
+buildKeyMap("/root/.ssh/authorized_keys2");
+
+while (1) {
+    my @message = scalar(<>);
+    eval {
+        local $SIG{ALRM} = sub { die "alarm\n" }; # NB: \n required
+        ualarm(500*1000);
+        while (<>) { push @message, $_; }
+    };
+    chomp @message;
+    map { s/^(.*?): // } @message;
+    %toclass = ();
+    foreach my $message (@message) {
+	sub sendmsg ($;$) {
+	    my ($message, $class) = @_;
+	    $class ||= $ZCLASS;
+	    $toclass{$class} .= $message."\n";
+	}
+	if ($message =~ m|Accepted (\S+) for (\S+)|) {
+	    sendmsg($message) if exists $USERS{$2}
+	} elsif ($message =~ m|Authorized to (\S+),|) {
+	    sendmsg($message) if exists $USERS{$1};
+	} elsif ($message =~ m|Root (\S+) shell|) {
+	    sendmsg($message);
+	} elsif ($message =~ m|session \S+ for user (\S+)|) {
+	    sendmsg($message) if exists $USERS{$1};
+	} elsif ($message =~ m|^Found matching (\w+) key: (\S+)|) {
+	    if ($sshkeys{$2}) {
+		sendmsg($message." (".$sshkeys{$2}.")");
+	    } else {
+		sendmsg($message." (UNKNOWN KEY)");
+	    }
+	} elsif ($message =~ m|^Failed keyboard-interactive/pam for root from ([^ ]*)|) {
+	    my $count = ++$ips{$1};
+	    if ($count % 10 == 0 or $1 =~ /^18\./) {
+	    	sendmsg($message." (repeated $count times)", "scripts-spew");
+	    }
+	} elsif ($message =~ m|^Out of memory:|) {
+	    sendmsg($message);
+	} elsif ($message =~ m|^giving \S+ admin rights|) {
+	    sendmsg($message);
+	} elsif ($message =~ m|^Connection closed|) {
+	    # Do nothing
+	} elsif ($message =~ m|^Closing connection to |) {
+	} elsif ($message =~ m|^Connection from (\S+) port (\S+)|) {
+	} elsif ($message =~ m|^Invalid user|) {
+	} elsif ($message =~ m|^input_userauth_request: invalid user|) {
+	} elsif ($message =~ m|^Received disconnect from|) {
+	} elsif ($message =~ m|^Postponed keyboard-interactive|) {
+	} elsif ($message =~ m|^fatal: Read from socket failed: Connection reset by peer$|) {
+	} elsif ($message =~ m|^reverse mapping checking getaddrinfo|) {
+	} elsif ($message =~ m|^pam_succeed_if\(sshd\:auth\)\:|) {
+	} elsif ($message =~ m|^error: PAM: Authentication failure|) {
+	} elsif ($message =~ m|^pam_unix\(sshd:auth\): authentication failure|) {
+	} elsif ($message =~ m|^Postponed keyboard-interactive for invalid user |) {
+	} elsif ($message =~ m|^Failed keyboard-interactive/pam for invalid user |) {
+	} elsif ($message =~ m|^Postponed gssapi-with-mic for |) {
+	} elsif ($message =~ m|^Address \S+ maps to \S+, but this does not map back to the address|) {
+	} elsif ($message =~ m|^User child is on pid \d+$|) {
+	} elsif ($message =~ m|^Transferred: sent \d+, received \d+ bytes$|) {
+	} elsif ($message =~ m|^Setting tty modes failed: Invalid argument$|) {
+	} else {
+	    sendmsg($message, "scripts-spew");
+	}
+    }
+
+    foreach my $class (keys %toclass) {
+	if ($class eq "scripts-auto") {
+	    zwrite($toclass{$class}, $class);
+	} else {
+	    zwrite($toclass{$class}, $class, undef, @RECIPIENTS);
+	}
+    }
+}
Index: /tags/fc9-eol/server/fedora/config/etc/syslog-ng/syslog-ng.conf
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/syslog-ng/syslog-ng.conf	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/syslog-ng/syslog-ng.conf	(revision 1257)
@@ -0,0 +1,96 @@
+# syslog-ng configuration file.
+#
+# This should behave pretty much like the original syslog on RedHat. But
+# it could be configured a lot smarter.
+#
+# See syslog-ng(8) and syslog-ng.conf(5) for more information.
+#
+# 20000925 gb@sysfive.com
+#
+# Updated by Frank Crawford (<Frank.Crawford@ac3.com.au>) - 10 Aug 2002
+#   - for Red Hat 7.3
+#   - totally do away with klogd
+#   - add message "kernel:" as is done with klogd.
+#
+# Updated by Frank Crawford (<Frank.Crawford@ac3.com.au>) - 22 Aug 2002
+#   - use the log_prefix option as per Balazs Scheidler's email
+#
+# Updated by Jose Pedro Oliveira (<jpo at di.uminho.pt>) - 05 Apr 2003
+#   - corrected filters 'f_filter2' and 'f_filter6'
+#     these filters were only allowing messages of one specific
+#     priority level; they should be allowing messages from that
+#     priority and upper levels.
+#
+# Updated by Jose Pedro Oliveira (<jpo at di.uminho.pt>) - 25 Jan 2005
+#   - Don't sync the d_mail destination
+#
+# Updated by Jose Pedro Oliveira (<jpo at di.uminho.pt>) - 01 Feb 2005
+#   - /proc/kmsg is a file not a pipe.
+#     (https://lists.balabit.hu/pipermail/syslog-ng/2005-February/006963.html)
+#
+# Updated by Jose Pedro Oliveira (<jpo at di.uminho.pt>) - 31 May 2007
+#   - increase the number of unix-stream max-connections (syslog-ng 2.0.4)
+#
+# Updated by Jose Pedro Oliveira (<jpo at di.uminho.pt>) - 26 July 2007
+#   - revert previous unix-stream max-connections change
+#     (the new unix-stream max-connections default in syslog-ng 2.0.5 is 256)
+#
+
+options {
+    sync (0);
+    time_reopen (10);
+    log_fifo_size (1000);
+    long_hostnames (off);
+    use_dns (no);
+    use_fqdn (no);
+    create_dirs (no);
+    keep_hostname (yes);
+};
+
+source s_sys {
+    file ("/proc/kmsg" log_prefix("kernel: "));
+    unix-stream ("/dev/log");
+    internal();
+    # udp(ip(0.0.0.0) port(514));
+    # tcp(ip(0.0.0.0) port(514));
+};
+
+destination d_cons { file("/dev/console"); };
+destination d_mesg { file("/var/log/messages"); };
+destination d_auth { file("/var/log/secure"); };
+destination d_mail { file("/var/log/maillog" sync(10)); };
+destination d_spol { file("/var/log/spooler"); };
+destination d_boot { file("/var/log/boot.log"); };
+destination d_cron { file("/var/log/cron"); };
+destination d_mlal { usertty("*"); };
+
+destination d_zroot { program("/etc/syslog-ng/d_zroot.pl"); };
+#destination d_watch { program("/usr/local/libexec/watch-syslog.py"); };
+
+#filter f_filter1   { facility(kern); };
+filter f_filter2   { level(info..emerg) and
+                     not facility(mail,authpriv,cron); };
+filter f_filter3   { facility(authpriv); };
+filter f_filter4   { facility(mail); };
+filter f_filter5   { level(emerg); };
+filter f_filter6   { facility(uucp) or
+                     (facility(news) and level(crit..emerg)); };
+filter f_filter7   { facility(local7); };
+filter f_filter8   { facility(cron); };
+
+filter f_oom { facility(kern) and (match("Out of memory:") or match("Killed process")); };
+
+#log { source(s_sys); filter(f_filter1); destination(d_cons); };
+log { source(s_sys); filter(f_filter2); destination(d_mesg); };
+log { source(s_sys); filter(f_filter3); destination(d_auth); };
+log { source(s_sys); filter(f_filter4); destination(d_mail); };
+log { source(s_sys); filter(f_filter5); destination(d_mlal); };
+log { source(s_sys); filter(f_filter6); destination(d_spol); };
+log { source(s_sys); filter(f_filter7); destination(d_boot); };
+log { source(s_sys); filter(f_filter8); destination(d_cron); };
+
+log { source(s_sys); filter(f_filter3); destination(d_zroot); };
+#log { source(s_sys); filter(f_filter2); destination(d_watch); };
+log { source(s_sys); filter(f_oom); destination(d_zroot); };
+
+# vim:set ai ts=4 sw=4 sts=4 et:
Index: /tags/fc9-eol/server/fedora/config/etc/syslog.conf
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/syslog.conf	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/syslog.conf	(revision 1257)
@@ -0,0 +1,28 @@
+# Log all kernel messages to the console.
+# Logging much else clutters up the screen.
+#kern.*							/dev/console
+
+# Log anything (except mail) of level info or higher.
+# Don't log private authentication messages!
+*.info;mail.none;authpriv.none;cron.none;local0.none	/var/log/messages
+
+# The authpriv file has restricted access.
+authpriv.*						/var/log/secure
+
+# Log all the mail messages in one place.
+mail.*							-/var/log/maillog
+
+
+# Log cron stuff
+cron.*							/var/log/cron
+
+# Everybody gets emergency messages
+*.emerg							*
+
+# Save news errors of level crit and higher in a special file.
+uucp,news.crit						/var/log/spooler
+
+# Save boot messages also to boot.log
+local7.*						/var/log/boot.log
+
+local0.info	/var/log/heartbeat.log
Index: /tags/fc9-eol/server/fedora/config/etc/vimrc
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/vimrc	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/vimrc	(revision 1257)
@@ -0,0 +1,60 @@
+if v:lang =~ "utf8$" || v:lang =~ "UTF-8$"
+   set fileencodings=ucs-bom,utf-8,latin1
+endif
+
+set nocompatible	" Use Vim defaults (much better!)
+set bs=indent,eol,start		" allow backspacing over everything in insert mode
+"set ai			" always set autoindenting on
+"set backup		" keep a backup file
+set viminfo=		" don't keep a viminfo file
+set history=50		" keep 50 lines of command line history
+set ruler		" show the cursor position all the time
+
+" Only do this part when compiled with support for autocommands
+if has("autocmd")
+  " In text files, always limit the width of text to 78 characters
+  autocmd BufRead *.txt set tw=78
+  " When editing a file, always jump to the last cursor position
+  autocmd BufReadPost *
+  \ if line("'\"") > 0 && line ("'\"") <= line("$") |
+  \   exe "normal! g'\"" |
+  \ endif
+  " don't write swapfile on most commonly used directories for NFS mounts or USB sticks
+  autocmd BufNewFile,BufReadPre /media/*,/mnt/* set directory=~/tmp,/var/tmp,/tmp
+  " start with spec file template
+  autocmd BufNewFile *.spec 0r /usr/share/vim/vimfiles/template.spec
+endif
+
+if has("cscope") && filereadable("/usr/bin/cscope")
+   set csprg=/usr/bin/cscope
+   set csto=0
+   set cst
+   set nocsverb
+   " add any database in current directory
+   if filereadable("cscope.out")
+      cs add cscope.out
+   " else add database pointed to by environment
+   elseif $CSCOPE_DB != ""
+      cs add $CSCOPE_DB
+   endif
+   set csverb
+endif
+
+" Switch syntax highlighting on, when the terminal has colors
+" Also switch on highlighting the last used search pattern.
+if &t_Co > 2 || has("gui_running")
+  syntax on
+  set hlsearch
+endif
+
+filetype plugin on
+
+if &term=="xterm"
+     set t_Co=8
+     set t_Sb=[4%dm
+     set t_Sf=[3%dm
+endif
+
+" Don't wake up system with blinking cursor:
+" http://www.linuxpowertop.org/known.php
+let &guicursor = &guicursor . ",a:blinkon0"
Index: /tags/fc9-eol/server/fedora/config/etc/yum.conf
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/yum.conf	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/yum.conf	(revision 1257)
@@ -0,0 +1,14 @@
+[main]
+cachedir=/var/cache/yum
+keepcache=0
+debuglevel=2
+logfile=/var/log/yum.log
+exactarch=1
+obsoletes=1
+gpgcheck=1
+plugins=1
+metadata_expire=1800
+installonlypkgs=kernel kernel-devel kmod-openafs
+
+# PUT YOUR REPOS HERE OR IN separate files named file.repo
+# in /etc/yum.repos.d
Index: /tags/fc9-eol/server/fedora/config/etc/yum.repos.d/fedora-updates-testing-newkey.repo
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/yum.repos.d/fedora-updates-testing-newkey.repo	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/yum.repos.d/fedora-updates-testing-newkey.repo	(revision 1257)
@@ -0,0 +1,27 @@
+[updates-testing-newkey]
+name=Fedora $releasever - $basearch - Test Updates Newkey
+failovermethod=priority
+#baseurl=http://download.fedoraproject.org/pub/fedora/linux/updates/testing/$releasever/$basearch.newkey/
+mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=updates-testing-f$releasever.newkey&arch=$basearch
+enabled=1
+gpgcheck=1
+includepkgs=subversion mod_dav_svn subversion-devel
+gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-test-8-and-9-$basearch
+
+[updates-testing-newkey-debuginfo]
+name=Fedora $releasever - $basearch - Test Updates Debug Newkey
+failovermethod=priority
+#baseurl=http://download.fedoraproject.org/pub/fedora/linux/updates/testing/$releasever/$basearch.newkey/debug/
+mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=updates-testing-debug-f$releasever.newkey&arch=$basearch
+enabled=0
+gpgcheck=1
+gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-test-8-and-9-$basearch
+
+[updates-testing-newkey-source]
+name=Fedora $releasever - Test Updates Source Newkey
+failovermethod=priority
+#baseurl=http://download.fedoraproject.org/pub/fedora/linux/updates/testing/$releasever/SRPMS.newkey/
+mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=updates-testing-source-f$releasever.newkey&arch=$basearch
+enabled=0
+gpgcheck=1
+gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-test-8-and-9-$basearch
Index: /tags/fc9-eol/server/fedora/config/etc/yum.repos.d/scripts.repo
===================================================================
--- /tags/fc9-eol/server/fedora/config/etc/yum.repos.d/scripts.repo	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/etc/yum.repos.d/scripts.repo	(revision 1257)
@@ -0,0 +1,5 @@
+[scripts]
+name=Scripts
+baseurl=http://web.mit.edu/scripts/rpm/
+enabled=1
+gpgcheck=0
Index: /tags/fc9-eol/server/fedora/config/gems.py
===================================================================
--- /tags/fc9-eol/server/fedora/config/gems.py	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/gems.py	(revision 1257)
@@ -0,0 +1,18 @@
+#!/usr/bin/python
+"""Retrieve local ruby gem list from scripts.mit.edu
+
+Joe Presbrey <presbrey@mit.edu"""
+
+import commands, re, sys
+
+def scripts_gems():
+    o = commands.getoutput('gem list --local')
+    return map(lambda x: len(x) > 1 and (x[0], x[1].split(', ')) or x,
+               re.findall('([^\s]+)\s\(([^\)]+)\)', o))
+
+if __name__ == "__main__":
+    for x in scripts_gems():
+        if x[0] == 'sources': continue
+        #print >>sys.stderr, x
+        for y in x[1]:
+            print 'gem install %s --version %s -y' % (x[0], y)
Index: /tags/fc9-eol/server/fedora/config/home/scripts-build/.rpmmacros
===================================================================
--- /tags/fc9-eol/server/fedora/config/home/scripts-build/.rpmmacros	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/home/scripts-build/.rpmmacros	(revision 1257)
@@ -0,0 +1,3 @@
+%_topdir %(echo $HOME)/rpmbuild
+%_smp_mflags  -j3
+%__arch_install_post   /usr/lib/rpm/check-rpaths   /usr/lib/rpm/check-buildroot
Index: /tags/fc9-eol/server/fedora/config/php.sh
===================================================================
--- /tags/fc9-eol/server/fedora/config/php.sh	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/php.sh	(revision 1257)
@@ -0,0 +1,12 @@
+#!/bin/bash
+
+mkdir -p /etc/php.d/disable
+mv -f /etc/php.d/*.ini -u /etc/php.d/disable/
+rm -f /etc/php.d/*.ini
+pushd /etc/php.d/ >/dev/null
+touch `ls /etc/php.d/disable/*.ini | cut -d/ -f5` -t01010000
+popd >/dev/null
+
+svn revert /etc/php.d/scripts.ini
+
+restorecon -R /etc
Index: /tags/fc9-eol/server/fedora/config/rpms.sh
===================================================================
--- /tags/fc9-eol/server/fedora/config/rpms.sh	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/rpms.sh	(revision 1257)
@@ -0,0 +1,12 @@
+#!/bin/bash
+#
+# Retrieve package list from scripts.mit.edu
+# Install them with yum
+#
+# Joe Presbrey <presbrey@mit.edu>
+#
+# Skip openafs (custom built), kernel (pedantic), and pubkeys.
+
+ssh root@scripts.mit.edu rpm -qa --qf '%{name}.%{arch}\\n' | grep -v openafs | grep -v kernel | grep -v pubkey > rpms.log
+
+yum install `cat rpms.log`
Index: /tags/fc9-eol/server/fedora/config/selinux.sh
===================================================================
--- /tags/fc9-eol/server/fedora/config/selinux.sh	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/selinux.sh	(revision 1257)
@@ -0,0 +1,7 @@
+#!/bin/bash
+
+SESTAT=`getenforce`
+setenforce 0
+semanage user -P user -R user_r -R afsagent_r -a afsagent_u
+semanage login -s afsagent_u -a afsagent
+setenforce $SESTAT
Index: /tags/fc9-eol/server/fedora/config/services.sh
===================================================================
--- /tags/fc9-eol/server/fedora/config/services.sh	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/services.sh	(revision 1257)
@@ -0,0 +1,17 @@
+#!/bin/bash
+
+S_ON='acpid auditd autofs crond execsys-binfmt httpd ip6tables iptables lm_sensors mcstrans mdmonitor named network nrpe openafs-client restorecond sshd syslog sysstat zhm ntpd netfs nfslock portmap'
+S_OFF='NetworkManager NetworkManagerDispatcher anacron atd avahi-dnsconfd capi cpuspeed cups dc_client dc_server dhcdbd diskdump firstboot gpm haldaemon irda isdn kudzu mdmpd messagebus multipathd netdump netplugd nscd pcscd psacct rdisc readahead_later rpcgssd rpcidmapd rpcsvcgssd saslauthd sendmail snmpd snmptrapd spamassassin wpa_supplicant ypbind avahi-daemon readahead_early xfs xinetd yum-updatesd irqbalance smartd postfix nfs'
+
+for s in $S_OFF; do
+	/sbin/chkconfig $s off
+	/sbin/service $s stop
+done
+
+for s in $S_ON; do
+	/sbin/chkconfig --add $s
+	/sbin/chkconfig $s on
+	#/sbin/service $s status || runcon system_u:system_r:initrc_t:s0 /sbin/service $s start
+done
+
+restorecon -R /etc
Index: /tags/fc9-eol/server/fedora/config/signup.py
===================================================================
--- /tags/fc9-eol/server/fedora/config/signup.py	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/signup.py	(revision 1257)
@@ -0,0 +1,37 @@
+#!/usr/bin/python
+"""Add system users from external passwd and group files
+Joe Presbrey <presbrey@mit.edu>
+
+arguments: <passwd-file> <group-file>"""
+
+
+import commands
+import os,sys,string
+#import athena
+
+def do_groupfile(f):
+	for x in f.readlines():
+		gname = x.strip().split(':')[0]
+		gid = x.strip().split(':')[2]
+		c = commands.getstatusoutput('groupadd -g ' + gid + ' ' + gname)
+		if c[0] == 0:
+			print "group " + gname + "/" + gid + " added successfully."
+
+def do_userfile(f):
+	for x in f.readlines():
+		name = x.strip().split(':')[0]
+		#uathena = AthenaUser(name)
+		uid = x.strip().split(':')[2]
+		gid = x.strip().split(':')[3]
+		home = x.strip().split(':')[5]
+		if uid > 100:
+			c = commands.getstatusoutput('useradd -M -d ' + home + ' -u ' + uid + ' -g ' + gid + ' -G users -s /usr/local/bin/mbash ' + name)
+			if c[0] == 0:
+				print "user " + name + "/" + uid + " added successfully."
+
+if __name__ == "__main__":
+	if len(sys.argv) != 3:
+		print __doc__
+	else:
+		do_groupfile(file(sys.argv[2]))
+		do_userfile(file(sys.argv[1]))
Index: /tags/fc9-eol/server/fedora/config/usr/vice/etc/CellServDB.local
===================================================================
--- /tags/fc9-eol/server/fedora/config/usr/vice/etc/CellServDB.local	(revision 1257)
+++ /tags/fc9-eol/server/fedora/config/usr/vice/etc/CellServDB.local	(revision 1257)
@@ -0,0 +1,653 @@
+>athena.mit.edu		  #MIT/Athena cell
+18.7.1.66			#paris.mit.edu.
+18.9.48.11			#castor.mit.edu.
+18.9.48.12 			#pollux.mit.edu.
+>dev.mit.edu              #MIT/IS Development cell
+18.9.48.13                      #saw.mit.edu.
+18.9.60.110			#hammer.mit.edu.
+18.9.60.111			#screw.mit.edu.
+>net.mit.edu		  #MIT/Network Group cell
+18.7.7.73			#gracie.mit.edu.
+18.7.21.95			#george.mit.edu.
+>sipb.mit.edu		  #MIT/SIPB cell
+18.181.0.19			#reynelda.mit.edu.
+18.181.0.23			#ronald-ann.mit.edu.
+18.181.0.22			#rosebud.mit.edu.
+>lees.mit.edu		  #MIT/private Lab for Electromagnetic and Electronic Systems
+18.90.0.123			#sangeet.mit.edu.
+>grand.central.org      #GCO Public CellServDB 07 Nov 2008
+18.9.48.14			#grand.mit.edu.
+128.2.203.61                    #penn.central.org
+130.237.48.87                   #andrew.e.kth.se
+>wu-wien.ac.at          #University of Economics, Vienna, Austria
+137.208.3.33                    #goya.wu-wien.ac.at
+137.208.7.57                    #caravaggio.wu-wien.ac.at
+137.208.127.57                  #vermeer.wu-wien.ac.at
+>hephy.at               #hephy-vienna
+193.170.243.10                  #mowgli.oeaw.ac.at
+193.170.243.12                  #baloo.oeaw.ac.at
+193.170.243.14                  #akela.oeaw.ac.at
+>cgv.tugraz.at          #CGV cell
+129.27.218.30                   #phobos.cgv.tugraz.at
+129.27.218.31                   #deimos.cgv.tugraz.at
+129.27.218.32                   #trinculo.cgv.tugraz.at
+>itp.tugraz.at          #Institute of Theoretical and Computational Physics, TU Graz, Aus
+129.27.161.7                    #faepafs1.tu-graz.ac.at
+129.27.161.15                   #faepafs2.tu-graz.ac.at
+129.27.161.114                  #faepafs3.tu-graz.ac.at
+>sums.math.mcgill.ca    #Society of Undergraduate Mathematics Students of McGill Universi
+132.216.24.122                  #germain.sums.math.mcgill.ca
+132.216.24.125                  #turing.sums.math.mcgill.ca
+>cern.ch                #European Laboratory for Particle Physics, Geneva
+137.138.128.148                 #afsdb1.cern.ch
+137.138.246.50                  #afsdb3.cern.ch
+137.138.246.51                  #afsdb2.cern.ch
+>ams.cern.ch            #AMS Experiment
+137.138.188.185                 #ams.cern.ch
+137.138.199.58                  #pcamsf4.cern.ch
+>epfl.ch                #Swiss Federal Institute of Technology at Lausanne
+128.178.109.111                 #kd1.epfl.ch
+128.178.109.112                 #kd2.epfl.ch
+128.178.109.113                 #kd3.epfl.ch
+>ethz.ch                #Swiss Federal Inst. of Tech. - Zurich, Switzerland
+129.132.97.19                   #amalthea.ethz.ch
+129.132.97.27                   #nethzafs-001.ethz.ch
+129.132.115.3                   #himalia.ethz.ch
+129.132.115.37                  #nethzafs-005.ethz.ch
+129.132.115.38                  #nethzafs-006.ethz.ch
+>psi.ch                 #Paul Scherrer Institut - Villigen, Switzerland
+129.129.190.140                 #afs00.psi.ch
+129.129.190.141                 #afs01.psi.ch
+129.129.190.142                 #afs02.psi.ch
+>extundo.com            #Simon Josefsson's cell
+195.42.214.241                  #slipsten.extundo.com
+>freedaemon.com         #Free Daemon Consulting, Oklahoma City, OK, USA
+66.210.104.254                  #afs0.freedaemon.com
+>membrain.com           #membrain.com
+66.93.118.125                   #stormy
+130.85.24.11                    #weasel
+130.85.24.13                    #straykitten
+>setfilepointer.com     #SetFilePointer.com
+63.224.10.2                     #hamlet.SetFilePointer.com
+63.224.10.4                     #troilus.SetFilePointer.com
+>sodre.cx               #Sodre.cx
+128.8.140.165                   #greed.sodre.cx
+>ruk.cuni.cz            #Charles University Computer Centre, Prague, CR
+195.113.0.36                    #asterix.ruk.cuni.cz
+195.113.0.37                    #obelix.ruk.cuni.cz
+195.113.0.40                    #sal.ruk.cuni.cz
+>ics.muni.cz            #Masaryk university
+147.251.3.11                    #grond.ics.muni.cz
+147.251.3.15                    #nimloth.ics.muni.cz
+147.251.3.19                    #sirion.ics.muni.cz
+>zcu.cz                 #University of West Bohemia, Czech Republic
+147.228.10.18                   #sauron.zcu.cz
+147.228.52.10                   #oknos.zcu.cz
+147.228.52.17                   #nic.zcu.cz
+>desy.de                #Deutsches Elektronen-Synchrotron
+131.169.2.19                    #afsdb2.desy.de
+131.169.2.20                    #afsdb3.desy.de
+131.169.244.60                  #solar00.desy.de
+>gppc.de                #GPP Chemnitz mbH
+213.187.92.33                   #gpp1.gppc.de
+213.187.92.34                   #paulchen.gppc.de
+213.187.92.35                   #lotus.gppc.de
+>cms.hu-berlin.de       #Humboldt University Berlin
+141.20.1.65                     #commodus.cms.hu-berlin.de
+141.20.1.66                     #faustinus.cms.hu-berlin.de
+141.20.1.67                     #marcellus.cms.hu-berlin.de
+>ifh.de                 #DESY Zeuthen
+141.34.22.10                    #romulus.ifh.de
+141.34.22.11                    #remus.ifh.de
+141.34.22.29                    #hekate.ifh.de
+>lrz-muenchen.de        #Leibniz Computing Centre, Germany
+129.187.10.36                   #afs1.lrz-muenchen.de
+129.187.10.56                   #afs3.lrz-muenchen.de
+129.187.10.57                   #afs2.lrz-muenchen.de
+>ipp-garching.mpg.de    #Institut fuer Plasmaphysik
+130.183.9.5                     #afs-db1.rzg.mpg.de
+130.183.100.10                  #afs-db2.aug.ipp-garching.mpg.de
+130.183.100.23                  #afs-db3.aug.ipp-garching.mpg.de
+>mpe.mpg.de             #MPE cell
+130.183.130.7                   #irafs1.mpe-garching.mpg.de
+130.183.134.20                  #irafs2.mpe-garching.mpg.de
+>i1.informatik.rwth-aachen.de #Informatik I, RWTH Aachen
+137.226.244.79                  #remus.informatik.rwth-aachen.de
+>combi.tfh-wildau.de    #Philips Research Lab
+194.95.50.106                   #joda13.combi.tfh-wildau.de
+>tu-bs.de               #Technical University of Braunschweig, Germany
+134.169.1.1                     #rzafs1.rz.tu-bs.de
+134.169.1.5                     #rzafs2.rz.tu-bs.de
+134.169.1.6                     #rzafs3.rz.tu-bs.de
+>tu-chemnitz.de         #Technische Universitaet Chemnitz, Germany
+134.109.2.1                     #zuse.hrz.tu-chemnitz.de
+134.109.2.15                    #phoenix.hrz.tu-chemnitz.de
+134.109.200.7                   #aetius.hrz.tu-chemnitz.de
+>e18.ph.tum.de          #Experimental Physics, TU Munich, Germany
+129.187.154.223                 #hamlet.e18.physik.tu-muenchen.de
+>uni-bonn.de            #University of Bonn, Computing Center
+131.220.14.198                  #work15-eth.rhrz.uni-bonn.de
+131.220.14.205                  #node05.rhrz.uni-bonn.de
+131.220.15.197                  #afs-db1.rhrz.uni-bonn.de
+>atlass01.physik.uni-bonn.de #Bonn ATLAS
+131.220.165.43                  #atlass01.physik.uni-bonn.de
+>uni-freiburg.de        #Albert-Ludwigs-Universitat Freiburg
+132.230.6.235                   #sv6.ruf.uni-freiburg.de
+132.230.6.236                   #sv7.ruf.uni-freiburg.de
+132.230.6.237                   #sv8.ruf.uni-freiburg.de
+>physik.uni-freiburg.de #institute of physics, university Freiburg, Germany
+132.230.77.16                   #hepafs.physik.uni-freiburg.de
+>urz.uni-heidelberg.de  #Uni Heidelberg (Rechenzentrum)
+129.206.119.10                  #afsdb.urz.uni-heidelberg.de
+129.206.119.16                  #afsdb1.urz.uni-heidelberg.de
+129.206.119.17                  #afsdb2.urz.uni-heidelberg.de
+>uni-hohenheim.de       #University of Hohenheim
+144.41.2.2                      #rs13.serv.uni-hohenheim.de
+144.41.2.3                      #rs14.serv.uni-hohenheim.de
+144.41.2.4                      #rs15.serv.uni-hohenheim.de
+>rz.uni-jena.de         #Rechenzentrum University of Jena, Germany
+141.35.2.180                    #afs00.rz.uni-jena.de
+141.35.2.181                    #afs01.rz.uni-jena.de
+141.35.2.182                    #afs02.rz.uni-jena.de
+>impetus.uni-koeln.de   #Univ. of Cologne - Geophysics/Meteorology Inst.
+134.95.80.39                    #forano.meteo.uni-koeln.de
+>meteo.uni-koeln.de     #Univ. of Cologne - Inst. for Geophysics & Meteorology
+134.95.144.22                   #afs1.meteo.uni-koeln.de
+134.95.144.24                   #afs2.meteo.uni-koeln.de
+>rrz.uni-koeln.de       #University of Cologne - Reg Comp Center
+134.95.19.3                     #afsdb1.rrz.uni-koeln.de
+134.95.19.10                    #lyra.rrz.uni-koeln.de
+134.95.67.97                    #afs.thp.uni-koeln.de
+134.95.141.243                  #agrippina.rrz.uni-koeln.de
+>physik.uni-mainz.de    #institute of physics, university Mainz, Germany
+134.93.130.93                   #hardy.physik.uni-mainz.de
+>uni-mannheim.de        #Uni Mannheim (Rechenzentrum)
+134.155.97.204                  #afsdb1.uni-mannheim.de
+134.155.97.205                  #afsdb2.uni-mannheim.de
+134.155.97.206                  #afsdb3.uni-mannheim.de
+>uni-paderborn.de       #University of Paderborn, Germany
+131.234.137.10                  #afsdb1.uni-paderborn.de
+131.234.137.11                  #afsdb2.uni-paderborn.de
+131.234.137.12                  #afsdb3.uni-paderborn.de
+>physik.uni-wuppertal.de #Physics department of Bergische Universität Wuppertal
+132.195.104.3                   #afs1.physik.uni-wuppertal.de
+132.195.104.230                 #afs2.physik.uni-wuppertal.de
+>s-et.aau.dk            #Aalborg Univ., The Student Society, Denmark
+130.225.196.22                  #afs.s-et.aau.dk
+>ies.auc.dk             #Aalborg Univ., Inst. of Electronic Systems, Denmark
+130.225.51.73                   #afsdb1.kom.auc.dk
+130.225.51.74                   #afsdb2.kom.auc.dk
+130.225.51.85                   #afsdb3.kom.auc.dk
+>asu.edu                #Arizona State University
+129.219.10.69                   #authen2.asu.edu
+129.219.10.70                   #authen1.asu.edu
+129.219.10.72                   #authen3.asu.edu
+129.219.100.16                  #authen4.asu.edu
+>mars.asu.edu           #Mars Space Flight Facility - ASU Mars Research
+149.169.146.57                  #kdc1.mars.asu.edu
+149.169.146.58                  #kdc2.mars.asu.edu
+149.169.146.59                  #kdc3.mars.asu.edu
+>eecs.berkeley.edu      #University of California, Berkeley - EECS Dept.
+128.32.139.34                   #greed.eecs.berkeley.edu
+128.32.139.35                   #gluttony.eecs.berkeley.edu
+169.229.60.112                  #envy.eecs.berkeley.edu
+>hep.caltech.edu        #Caltech High Energy Physics
+131.215.116.20                  #afs.hep.caltech.edu
+>ugcs.caltech.edu       #Caltech UGCS lab
+131.215.176.65                  #afs-c.ugcs.caltech.edu
+131.215.176.67                  #afs-a.ugcs.caltech.edu
+131.215.176.68                  #afs-b.ugcs.caltech.edu
+>clarkson.edu           #Clarkson University, Potsdam, New York USA
+128.153.1.111                   #arthur.clarkson.edu
+128.153.9.111                   #lancelot.clarkson.edu
+128.153.17.111                  #uther.clarkson.edu
+>andrew.cmu.edu         #Carnegie Mellon University - Computing Services Cell
+128.2.10.2                      #vice2.fs.andrew.cmu.edu
+128.2.10.7                      #vice7.fs.andrew.cmu.edu
+128.2.10.11                     #vice11.fs.andrew.cmu.edu
+128.2.10.28                     #vice28.fs.andrew.cmu.edu
+128.2.32.44                     #new-vice12.fs.andrew.cmu.edu
+>club.cc.cmu.edu        #Carnegie Mellon University Computer Club
+128.2.204.149                   #barium.club.cc.cmu.edu
+128.237.157.11                  #sodium.club.cc.cmu.edu
+128.237.157.13                  #potassium.club.cc.cmu.edu
+>chem.cmu.edu           #Carnegie Mellon University - Chemistry Dept.
+128.2.40.134                    #afs.chem.cmu.edu
+128.2.40.140                    #afs2.chem.cmu.edu
+>cs.cmu.edu             #Carnegie Mellon University - School of Comp. Sci.
+128.2.184.215                   #pumpkin.srv.cs.cmu.edu
+128.2.201.46                    #strawberry.srv.cs.cmu.edu
+128.2.201.48                    #cherry.srv.cs.cmu.edu
+>ece.cmu.edu            #Carnegie Mellon University - Elec. Comp. Eng. Dept.
+128.2.129.7                     #porok.ece.cmu.edu
+128.2.129.8                     #vicio.ece.cmu.edu
+128.2.129.9                     #e-xing.ece.cmu.edu
+>scotch.ece.cmu.edu     #CMU ECE CALCM research group
+128.2.134.82                    #lagavulin.ece.cmu.edu
+>qatar.cmu.edu          #Carnegie Mellon University - Qatar
+86.36.46.6                      #afs1.qatar.cmu.edu
+86.36.46.7                      #afs2.qatar.cmu.edu
+>sbp.ri.cmu.edu         #Carnegie Mellon University - Sensor Based Planning Lab
+128.2.179.12                    #nihao.sbp.ri.cmu.edu
+128.2.179.113                   #youtheman.sbp.ri.cmu.edu
+>cnf.cornell.edu        #CNF
+128.253.198.9                   #hole.cnf.cornell.edu
+128.253.198.27                  #smoke.cnf.cornell.edu
+>msc.cornell.edu        #Cornell University Materials Science Center
+128.84.231.242                  #miranda.ccmr.cornell.edu
+128.84.241.35                   #co.ccmr.cornell.edu
+128.84.249.78                   #dax.ccmr.cornell.edu
+>dbic.dartmouth.edu     #Dartmouth Brain Imaging Center
+129.170.30.143                  #dbicafs1.dartmouth.edu
+129.170.30.144                  #dbicafs2.dartmouth.edu
+129.170.30.145                  #dbicafs3.dartmouth.edu
+>northstar.dartmouth.edu #Dartmouth College Research Computing
+129.170.16.22                   #halley.dartmouth.edu
+129.170.16.26                   #andromeda.dartmouth.edu
+129.170.16.43                   #cygnusx1.dartmouth.edu
+>cs.hm.edu              #Department Computer Science Munich University Of Applied Science
+129.187.208.2                   #srv1.informatik.fh-muenchen.de
+>eecs.harvard.edu       #Harvard - EECS
+140.247.60.64                   #lefkada.eecs.harvard.edu
+140.247.60.83                   #corfu.eecs.harvard.edu
+>iastate.edu            #Iowa State University
+129.186.1.243                   #afsdb-1.iastate.edu
+129.186.6.243                   #afsdb-2.iastate.edu
+129.186.142.243                 #afsdb-3.iastate.edu
+>msu.edu                #Michigan State University Main Cell
+35.9.7.10                       #afsdb0.cl.msu.edu
+>nd.edu                 #University of Notre Dame
+129.74.223.17                   #john.helios.nd.edu
+129.74.223.33                   #lizardo.helios.nd.edu
+129.74.223.65                   #buckaroo.helios.nd.edu
+>crc.nd.edu             #University of Notre Dame - Center for Research Computing
+129.74.85.34                    #afsdb1.crc.nd.edu
+129.74.85.35                    #afsdb2.crc.nd.edu
+129.74.85.36                    #afsdb3.crc.nd.edu
+>pitt.edu               #University of Pittsburgh
+136.142.8.15                    #afs09.srv.cis.pitt.edu
+136.142.8.20                    #afs10.srv.cis.pitt.edu
+136.142.8.21                    #afs11.srv.cis.pitt.edu
+>cs.pitt.edu            #University of Pittsburgh - Computer Science
+130.49.220.11                   #afs01.cs.pitt.edu
+130.49.220.12                   #afs02.cs.pitt.edu
+130.49.220.13                   #afs03.cs.pitt.edu
+>psc.edu                #PSC (Pittsburgh Supercomputing Center)
+128.182.59.182                  #shaggy.psc.edu
+128.182.66.184                  #velma.psc.edu
+128.182.66.185                  #daphne.psc.edu
+>scoobydoo.psc.edu      #PSC Test Cell
+128.182.59.181                  #scooby.psc.edu
+>cede.psu.edu           #Penn State - Center for Engr. Design & Entrepeneurship
+146.186.218.10                  #greenly.cede.psu.edu
+146.186.218.60                  #b50.cede.psu.edu
+146.186.218.246                 #stalin.cede.psu.edu
+>rose-hulman.edu        #Rose-Hulman Institute of Technology
+137.112.7.11                    #afs1.rose-hulman.edu
+137.112.7.12                    #afs2.rose-hulman.edu
+137.112.7.13                    #afs3.rose-hulman.edu
+>cs.rose-hulman.edu     #Rose-Hulman CS Department
+137.112.40.10                   #galaxy.cs.rose-hulman.edu
+>rpi.edu                #Rensselaer Polytechnic Institute
+128.113.22.11                   #saul.server.rpi.edu
+128.113.22.12                   #joab.server.rpi.edu
+128.113.22.13                   #korah.server.rpi.edu
+128.113.22.14                   #achan.server.rpi.edu
+>hep.sc.edu             #University of South Carolina, Dept. of Physics
+129.252.78.77                   #cpeven.physics.sc.edu
+>cs.stanford.edu        #Stanford University Computer Science Department
+171.64.64.10                    #cs-afs-1.Stanford.EDU
+171.64.64.66                    #cs-afs-2.stanford.edu
+171.64.64.69                    #cs-afs-3.stanford.edu
+>ir.stanford.edu        #Stanford University
+171.64.7.222                    #afsdb1.stanford.edu
+171.64.7.234                    #afsdb2.stanford.edu
+171.64.7.246                    #afsdb3.stanford.edu
+>slac.stanford.edu      #Stanford Linear Accelerator Center
+134.79.18.25                    #afsdb1.slac.stanford.edu
+134.79.18.26                    #afsdb2.slac.stanford.edu
+134.79.18.27                    #afsdb3.slac.stanford.edu
+>ucdavis.edu            #University of California at Davis
+169.237.104.100                 #afs1.ucdavis.edu
+169.237.235.176                 #afs2.ucdavis.edu
+169.237.247.91                  #afs3.ucdavis.edu
+>home.ucdavis.edu       #University of California at Davis home directories
+169.237.105.91                  #home1.ucdavis.edu
+169.237.105.92                  #home2.ucdavis.edu
+169.237.105.93                  #home3.ucdavis.edu
+>physics.ucsb.edu       #UC Santa Barbara, Physics Dept
+128.111.18.161                  #ledzeppelin.physics.ucsb.edu
+>cats.ucsc.edu          #UC Santa Cruz, Comp and Tech Services, California U.S.A
+128.114.123.14                  #elan.ucsc.edu
+128.114.123.15                  #ichabod.ucsc.edu
+128.114.123.18                  #maneki.ucsc.edu
+>acm.uiuc.edu           #ACM at the University of Illinois
+128.174.251.8                   #alnitak.acm.uiuc.edu
+128.174.251.9                   #alnilam.acm.uiuc.edu
+128.174.251.10                  #mintaka.acm.uiuc.edu
+>illigal.uiuc.edu       #Illinois Genetic Algorithms Labaratory
+128.174.193.200                 #ial.illigal.uiuc.edu
+128.174.193.201                 #cac.illigal.uiuc.edu
+128.174.193.202                 #gcs.illigal.uiuc.edu
+>ncsa.uiuc.edu          #University of Illinois
+141.142.3.5                     #congo.ncsa.uiuc.edu
+141.142.3.8                     #nile.ncsa.uiuc.edu
+141.142.3.9                     #kaskaskia.ncsa.uiuc.edu
+>umbc.edu               #University of Maryland, Baltimore County
+130.85.24.23                    #db2.afs.umbc.edu
+130.85.24.87                    #db3.afs.umbc.edu
+130.85.24.101                   #db1.afs.umbc.edu
+>glue.umd.edu           #University of Maryland - Project Glue
+128.8.70.11                     #olmec.umd.edu
+128.8.236.4                     #egypt.umd.edu
+128.8.236.230                   #babylon.umd.edu
+>wam.umd.edu            #University of Maryland Network WAM Project
+128.8.70.9                      #csc-srv.wam.umd.edu
+128.8.236.5                     #avw-srv.wam.umd.edu
+128.8.236.231                   #ptx-srv.wam.umd.edu
+>umich.edu              #University of Michigan - Campus
+141.211.1.32                    #fear.ifs.umich.edu
+141.211.1.33                    #surprise.ifs.umich.edu
+141.211.1.34                    #ruthless.ifs.umich.edu
+>atlas.umich.edu        #ATLAS group cell in physics at University of Michigan
+141.211.43.102                  #linat02.grid.umich.edu
+141.211.43.103                  #linat03.grid.umich.edu
+141.211.43.104                  #linat04.grid.umich.edu
+>citi.umich.edu         #Center for Information Technology Integration
+141.211.133.5                   #babylon.citi.umich.edu
+>sph.umich.edu          #University of Michigan -- School of Public  Health
+141.211.51.137                  #afssph7.sph.umich.edu
+141.211.51.139                  #afssph0.sph.umich.edu
+141.211.51.142                  #afssph6.sph.umich.edu
+>isis.unc.edu           #Univ. of NC at Chapel Hill - ITS
+152.2.1.5                       #db0.isis.unc.edu
+152.2.1.6                       #db1.isis.unc.edu
+152.2.1.7                       #db2.isis.unc.edu
+>physics.unc.edu        #Univ. of NC at Chapel Hill, Dept. of Physics
+152.2.4.1                       #who.physics.unc.edu
+152.2.4.3                       #what.physics.unc.edu
+152.2.4.5                       #when.physics.unc.edu
+>uncc.edu               #University of NC at Charlotte Mosaic AFS Cell
+152.15.10.70                    #as-sm1.uncc.edu
+152.15.93.186                   #as-ece1.uncc.edu
+152.15.181.175                  #as-me1.uncc.edu
+>eng.utah.edu           #University of Utah - Engineering
+155.98.111.9                    #lenny.eng.utah.edu
+155.98.111.10                   #carl.eng.utah.edu
+>cs.uwm.edu             #University of Wisconsin--Milwaukee
+129.89.38.124                   #solomons.cs.uwm.edu
+>cs.wisc.edu            #Univ. of Wisconsin-Madison, Computer Sciences Dept.
+128.105.132.14                  #timon.cs.wisc.edu
+128.105.132.15                  #pumbaa.cs.wisc.edu
+128.105.132.16                  #zazu.cs.wisc.edu
+>engr.wisc.edu          #University of Wisconsin-Madison, College of Engineering
+144.92.13.14                    #larry.cae.wisc.edu
+144.92.13.15                    #curly.cae.wisc.edu
+144.92.13.16                    #moe.cae.wisc.edu
+>hep.wisc.edu           #University of Wisconsin -- High Energy Physics
+128.104.28.219                  #anise.hep.wisc.edu
+144.92.180.7                    #rosemary.hep.wisc.edu
+144.92.180.30                   #fennel.hep.wisc.edu
+>physics.wisc.edu       #Univ. of Wisconsin-Madison, Physics Department
+128.104.160.13                  #kendra.physics.wisc.edu
+128.104.160.14                  #fray.physics.wisc.edu
+128.104.160.15                  #buffy.physics.wisc.edu
+>ciemat.es              #Ciemat, Madrid, Spain
+130.206.11.42                   #afsdb1.ciemat.es
+130.206.11.217                  #afsdb2.ciemat.es
+130.206.11.247                  #afsdb3.ciemat.es
+>ifca.unican.es         #Instituto de Fisica de Cantabria (IFCA), Santander, Spain
+193.144.209.20                  #gridwall.ifca.unican.es
+>ific.uv.es             #Instituto de Fisica Corpuscular, Valencia, Spain
+147.156.163.11                  #alpha.ific.uv.es
+>biocenter.helsinki.fi  #University of Helsinki, Institute of Biotechnology
+128.214.58.174                  #afsdb1.biocenter.helsinki.fi
+128.214.88.114                  #afsdb2.biocenter.helsinki.fi
+>dapnia.saclay.cea.fr   #CEA DAPNIA
+132.166.32.7                    #dphrsg.saclay.cea.fr
+132.166.32.12                   #dphrsl.saclay.cea.fr
+>grif.fr                #GRIF cell
+192.54.208.18                   #node03.datagrid.cea.fr
+>in2p3.fr               #IN2P3 production cell
+134.158.104.11                  #ccafsdb01.in2p3.fr
+134.158.104.12                  #ccafsdb02.in2p3.fr
+134.158.232.11                  #ccafsdb1.in2p3.fr
+134.158.232.12                  #ccafsdb2.in2p3.fr
+134.158.232.13                  #ccafsdb3.in2p3.fr
+>mcc.ac.gb              #University of Manchester
+130.88.203.41                   #nevis.mc.man.ac.uk
+130.88.203.144                  #eryri.mc.man.ac.uk
+130.88.203.145                  #scafell.mc.man.ac.uk
+>anl.gov                #Argonne National Laboratory
+146.137.96.33                   #arteus.it.anl.gov
+146.137.162.88                  #agamemnon.it.anl.gov
+146.137.194.80                  #antenor.it.anl.gov
+>rhic.bnl.gov           #Relativistic Heavy Ion Collider
+130.199.6.51                    #rafs03.rcf.bnl.gov
+130.199.6.52                    #rafs02.rcf.bnl.gov
+130.199.6.69                    #rafs01.rcf.bnl.gov
+>usatlas.bnl.gov        #US Atlas Tier 1 Facility at BNL
+130.199.48.32                   #aafs01.usatlas.bnl.gov
+130.199.48.33                   #aafs02.usatlas.bnl.gov
+130.199.48.34                   #aafs03.usatlas.bnl.gov
+>fnal.gov               #Fermi National Acclerator Laboratory
+131.225.68.1                    #fsus01.fnal.gov
+131.225.68.4                    #fsus03.fnal.gov
+131.225.68.14                   #fsus04.fnal.gov
+>ic-afs.arc.nasa.gov    #Code IC, Ames Research Center
+128.102.105.62                  #udanax.arc.nasa.gov
+>jpl.nasa.gov           #Jet Propulsion Laboratory
+137.78.160.21                   #afsdb08.jpl.nasa.gov
+137.78.160.22                   #afsdb09.jpl.nasa.gov
+137.78.160.23                   #afsdb10.jpl.nasa.gov
+>nersc.gov              #National Energy Research Supercomputer Center
+128.55.128.250                  #mars.nersc.gov
+128.55.128.252                  #alfred.nersc.gov
+128.55.128.254                  #lurch.nersc.gov
+>doe.atomki.hu          #Institute of Nuclear Research (MTA ATOMKI), Debrecen, Hungary
+193.6.179.31                    #afs.doe.atomki.hu
+>bme.hu                 #Budapest University of Technology and Economics
+152.66.241.6                    #afs.iit.bme.hu
+>kfki.hu                #Research Institute for Nuclear and Particle Physics - Budapest,H
+148.6.8.14                      #afs.kfki.hu
+>caspur.it              #CASPUR Inter-University Computing Consortium, Rome
+193.204.5.45                    #pomodoro.caspur.it
+193.204.5.46                    #banana.caspur.it
+193.204.5.50                    #maslo.caspur.it
+>enea.it                #ENEA New Tech. Energy & Environment Agency, Italy
+192.107.54.5                    #aixfs.frascati.enea.it
+192.107.54.11                   #rs2ced.frascati.enea.it
+192.107.54.12                   #43p.frascati.enea.it
+192.107.61.235                  #serverinfo02.bologna.enea.it
+192.107.71.6                    #glauco.casaccia.enea.it
+192.107.96.233                  #riscdb.trisaia.enea.it
+>fusione.it             #Assoz. FUSIONE/Euratom, ENEA, Frascati-Italy
+192.107.90.2                    #fusafs1.frascati.enea.it
+192.107.90.3                    #fusafs2.frascati.enea.it
+192.107.90.4                    #fusafs3.frascati.enea.it
+>icemb.it               #ICEMB, Universita' La Sapienza - Rome - Italy
+193.204.6.130                   #icembfs.caspur.it
+>infn.it                #Istituto Nazionale di Fisica Nucleare (INFN), Italia
+131.154.1.7                     #afscnaf.infn.it
+141.108.26.75                   #afsrm1.roma1.infn.it
+192.84.134.75                   #afsna.na.infn.it
+>ba.infn.it             #INFN, Sezione di Bari
+193.206.185.235                 #baafsserver.ba.infn.it
+193.206.185.236                 #debsrv.ba.infn.it
+>kloe.infn.it           #INFN, KLOE experiment at Laboratori di Frascati
+192.135.25.111                  #kloeafs1.lnf.infn.it
+192.135.25.112                  #kloeafs2.lnf.infn.it
+>le.infn.it             #INFN, Sezione di Lecce
+192.84.152.40                   #afs01.le.infn.it
+192.84.152.148                  #afs02.le.infn.it
+>lnf.infn.it            #INFN, Laboratori Nazionali di Frascati
+193.206.84.121                  #afs1.lnf.infn.it
+193.206.84.122                  #afs2.lnf.infn.it
+193.206.84.123                  #afs3.lnf.infn.it
+>lngs.infn.it           #INFN, Laboratori Nazionali di Gran Sasso
+192.84.135.21                   #rsgs05.lngs.infn.it
+>pi.infn.it             #INFN, Sezione di Pisa
+131.114.134.26                  #unknownhost.pi.infn.it
+192.84.133.50                   #aix1.pi.infn.it
+>roma3.infn.it          #Istituto Nazionale di Fisica Nucleare (INFN), Italia
+193.205.159.17                  #afsrm3.roma3.infn.it
+>psm.it                 #Progetto San Marco, Universita' di Roma-1
+151.100.1.65                    #atlante.psm.uniroma1.it
+>tgrid.it               #CASPUR-CILEA-CINECA Grid Cell
+193.204.5.33                    #cccgrid.caspur.it
+>ictp.trieste.it        #The Abdus Salam International Centre for Theoretical Physics (IC
+140.105.16.8                    #fs1.ictp.trieste.it
+140.105.16.9                    #fs2.ictp.trieste.it
+>math.unifi.it          #math.unifi.it
+150.217.34.182                  #xeno.math.unifi.it
+>ing.uniroma1.it        #Universita' La Sapienza, Fac. Ingeneria
+151.100.85.253                  #alfa.ing.uniroma1.it
+>dia.uniroma3.it        #University Roma Tre - DIA
+193.204.161.79                  #plm.dia.uniroma3.it
+193.204.161.118                 #afs.dia.uniroma3.it
+>vn.uniroma3.it         #University of Rome 3, Area Vasca Navale
+193.204.161.136                 #alfa.dia.uniroma3.it
+193.204.161.137                 #beta.dia.uniroma3.it
+193.204.161.138                 #gamma.dia.uniroma3.it
+>italia                 #Italian public AFS cell
+193.204.5.9                     #afs.caspur.it
+>cmf.nrl.navy.mil       #Naval Research Lab - CCS
+134.207.10.68                   #picard.cmf.nrl.navy.mil
+134.207.10.69                   #riker.cmf.nrl.navy.mil
+134.207.10.70                   #kirk.cmf.nrl.navy.mil
+>lcp.nrl.navy.mil       #Naval Research Lab - Lab for Computational Physics
+132.250.114.2                   #afs1.lcp.nrl.navy.mil
+132.250.114.4                   #afs2.lcp.nrl.navy.mil
+132.250.114.6                   #afs3.lcp.nrl.navy.mil
+>es.net                 #Energy Sciences Net
+198.128.3.21                    #fs1.es.net
+198.128.3.22                    #fs2.es.net
+198.128.3.23                    #fs3.es.net
+>laroia.net             #Laroia Networks
+66.66.102.254                   #supercore.laroia.net
+>sinenomine.net         #Sine Nomine Associates
+66.135.48.108                   #tx2srv03.sinenomine.net
+72.73.30.42                     #va.sinenomine.net
+>slackers.net           #The Slackers' Network
+199.4.150.159                   #alexandria.slackers.net
+>tproa.net              #The People's Republic of Ames
+204.11.35.83                    #service-3.tproa.net
+204.11.35.84                    #service-4.tproa.net
+204.11.35.85                    #service-5.tproa.net
+>interdose.net          #Interdose Ltd. & Co. KG, Germany
+80.190.171.42                   #bfd9000.tow5.interdose.net
+217.111.69.188                  #bfd9001.z2.interdose.net
+>nikhef.nl              #The Dutch National Institute for High Energy Physics
+192.16.185.26                   #afs1.nikhef.nl
+192.16.185.27                   #afs2.nikhef.nl
+>1ts.org                #1TS.ORG, Cambridge, MA
+69.25.196.51                    #pancake.1ts.org
+>acm-csuf.org           #California State Univerisity Fullerton ACM
+137.151.29.193                  #afs1.acm-csuf.org
+>bazquux.org            #Baz Quux Organization
+66.207.142.196                  #baxquux.org
+>coed.org               #Adam Pennington's Cell
+66.93.61.184                    #vice1.coed.org
+128.237.157.35                  #vice3.coed.org
+>dementia.org           #Dementia Unlimited
+128.2.12.45                     #alycia.dementia.org
+128.2.120.216                   #meredith.dementia.org
+>dsrw.org               #The DSRW
+65.103.82.83                    #straylight.dsrw.org
+65.103.82.84                    #chiba.dsrw.org
+65.103.82.85                    #freeside.dsrw.org
+>hackish.org            #Hackish.org
+24.167.65.213                   #avatar.sys.hackish.org
+128.2.120.138                   #kurma.sys.hackish.org
+>idahofuturetruck.org   #University of Idaho hybrid vehicle development
+12.18.238.210                   #dsle210.fsr.net
+>mrow.org               #MROW.ORG and RITLUG Cell
+88.198.46.111                   #mrow.org
+129.21.205.119                  #mirror.rit.edu
+>mrph.org               #Mrph
+66.207.133.1                    #sanber.mrph.org
+128.2.99.209                    #hernandarias.mrph.org
+>mstacm.org             #Missouri Science & Technology - ACM
+131.151.88.2                    #acmwork.device.mst.edu
+>nimlabs.org            #Nimlabs, Ink. Cell.
+18.238.1.103                    #olfin.nimlabs.org
+18.238.1.105                    #caerbanog.nimlabs.org
+>nomh.org               #nomh.org
+204.29.154.12                   #iota.nomh.org
+204.29.154.32                   #adversity.xi.nomh.org
+>oc7.org                #The OC7 Project
+128.2.122.140                   #knife.oc7.org
+207.22.77.170                   #spoon.oc7.org
+>riscpkg.org            #The RISC OS Packaging Project
+83.104.175.10                   #delenn.riscpkg.org
+>kth.se                 #Royal Institute of Technology, Stockholm, Sweden
+130.237.32.145                  #sonen.e.kth.se
+130.237.48.7                    #anden.e.kth.se
+130.237.48.244                  #fadern.e.kth.se
+>hallf.kth.se           #Royal Institute of Technology, HALLF
+130.237.24.11                   #afs1.hallf.kth.se
+130.237.24.104                  #afs2.hallf.kth.se
+>isk.kth.se             #Royal Institute of Technology, ISK
+130.237.209.5                   #afsdb2.isk.kth.se
+130.237.216.17                  #afsdb1.isk.kth.se
+>it.kth.se              #Royal Institute of Technology, IT
+130.237.212.15                  #ptah.it.kth.se
+130.237.212.16                  #toth.it.kth.se
+130.237.215.7                   #isis.it.kth.se
+>md.kth.se              #Royal Institute of Technology, MMK
+130.237.57.21                   #euler.md.kth.se
+130.237.57.68                   #trinity.md.kth.se
+130.237.57.72                   #morpheus.md.kth.se
+>mech.kth.se            #Royal Institute of Technology, MECH
+130.237.233.142                 #matterhorn.mech.kth.se
+130.237.233.143                 #castor.mech.kth.se
+130.237.233.144                 #pollux.mech.kth.se
+>nada.kth.se            #Royal Institute of Technology, NADA
+130.237.222.20                  #kosmos.nada.kth.se
+130.237.223.12                  #sputnik.nada.kth.se
+130.237.224.78                  #mir.nada.kth.se
+130.237.227.23                  #gagarin.nada.kth.se
+130.237.228.28                  #laika.nada.kth.se
+>pdc.kth.se             #Royal Institute of Technology, PDC
+130.237.232.29                  #crab.pdc.kth.se
+130.237.232.112                 #anna.pdc.kth.se
+130.237.232.114                 #hokkigai.pdc.kth.se
+>stacken.kth.se         #Stacken Computer Club
+130.237.234.3                   #milko.stacken.kth.se
+130.237.234.43                  #hot.stacken.kth.se
+130.237.234.101                 #fishburger.stacken.kth.se
+>syd.kth.se             #Royal Institute of Technology, KTH-Syd
+130.237.83.23                   #afs.haninge.kth.se
+>physto.se              #Physics department Stockholm University
+130.237.205.36                  #sysafs1.physto.se
+130.237.205.72                  #sysafs2.physto.se
+>sanchin.se             #Sanchin Consulting AB, Sweden
+192.195.148.10                  #sesan.sanchin.se
+>su.se                  #Stockholm University
+130.237.162.81                  #afsdb1.su.se
+130.237.162.82                  #afsdb2.su.se
+130.237.162.230                 #afsdb3.su.se
+>f9.ijs.si              #F9, Jozef Stefan Institue
+194.249.156.1                   #brenta.ijs.si
+>p-ng.si                #Nova Gorica Polytechnic
+193.2.120.2                     #solkan.p-ng.si
+>hep-ex.physics.metu.edu.tr #METU Department of Physics, Experimental HEP group, Ankara/Turke
+144.122.31.131                  #neutrino.physics.metu.edu.tr
+>phy.bris.ac.uk         #Bristol University - phyics
+137.222.58.9                    #afs1.phy.bris.ac.uk
+>inf.ed.ac.uk           #School of Informatics, University of Edinburgh
+129.215.64.16                   #afsdb0.inf.ed.ac.uk
+129.215.64.17                   #afsdb1.inf.ed.ac.uk
+129.215.64.18                   #afsdb2.inf.ed.ac.uk
+>ic.ac.uk               #Imperial College London
+155.198.63.148                  #icafs2.cc.ic.ac.uk
+155.198.63.149                  #icafs1.cc.ic.ac.uk
+>hep.man.ac.uk          #Manchester HEP
+194.36.2.3                      #afs1.hep.man.ac.uk
+194.36.2.4                      #afs2.hep.man.ac.uk
+194.36.2.5                      #afs3.hep.man.ac.uk
+>rl.ac.uk               #Rutherford Appleton Lab, England
+130.246.183.164                 #wallace.cc.rl.ac.uk
+130.246.183.203                 #afs1.gridpp.rl.ac.uk
+130.246.183.204                 #afs2.gridpp.rl.ac.uk
+130.246.183.205                 #afs3.gridpp.rl.ac.uk
Index: /tags/fc9-eol/server/fedora/ref-prepatch/README
===================================================================
--- /tags/fc9-eol/server/fedora/ref-prepatch/README	(revision 1257)
+++ /tags/fc9-eol/server/fedora/ref-prepatch/README	(revision 1257)
@@ -0,0 +1,5 @@
+This directory contains some reference Fedora source files that are known to
+work with our patches.
+
+This information is useful to have around when a patch does not apply or does
+not work.
Index: /tags/fc9-eol/server/fedora/ref-prepatch/VERSIONS
===================================================================
--- /tags/fc9-eol/server/fedora/ref-prepatch/VERSIONS	(revision 1257)
+++ /tags/fc9-eol/server/fedora/ref-prepatch/VERSIONS	(revision 1257)
@@ -0,0 +1,2 @@
+krb5.spec and kuserok.c from FC6's krb5-1.5-7.src.rpm
+httpd.spec and suexec.c from FC6's httpd-2.2.3-5.src.rpm
Index: /tags/fc9-eol/server/fedora/ref-prepatch/httpd.spec
===================================================================
--- /tags/fc9-eol/server/fedora/ref-prepatch/httpd.spec	(revision 1257)
+++ /tags/fc9-eol/server/fedora/ref-prepatch/httpd.spec	(revision 1257)
@@ -0,0 +1,686 @@
+%define contentdir /var/www
+%define suexec_caller apache
+%define mmn 20051115
+%define vstring Fedora
+%define distro Fedora Core
+
+Summary: Apache HTTP Server
+Name: httpd
+Version: 2.2.3
+Release: 5
+URL: http://httpd.apache.org/
+Source0: http://www.apache.org/dist/httpd/httpd-%{version}.tar.gz
+Source1: index.html
+Source3: httpd.logrotate
+Source4: httpd.init
+Source5: httpd.sysconf
+Source7: powered_by_fedora.png
+Source10: httpd.conf
+Source11: ssl.conf
+Source12: welcome.conf
+Source13: manual.conf
+Source14: proxy_ajp.conf
+# Documentation
+Source30: migration.xml
+Source31: migration.css
+Source32: html.xsl
+Source33: README.confd
+# build/scripts patches
+Patch1: httpd-2.1.10-apctl.patch
+Patch2: httpd-2.1.10-apxs.patch
+Patch3: httpd-2.0.45-deplibs.patch
+Patch4: httpd-2.1.10-disablemods.patch
+Patch5: httpd-2.1.10-layout.patch
+Patch6: httpd-2.2.2-ac260.patch
+# Features/functional changes
+Patch20: httpd-2.0.48-release.patch
+Patch21: httpd-2.0.40-xfsz.patch
+Patch22: httpd-2.1.10-pod.patch
+Patch23: httpd-2.0.45-export.patch
+Patch24: httpd-2.0.48-corelimit.patch
+Patch25: httpd-2.0.54-selinux.patch
+# Bug fixes
+Patch50: httpd-2.0.45-encode.patch
+Patch54: httpd-2.2.0-authnoprov.patch
+License: Apache Software License
+Group: System Environment/Daemons
+BuildRoot: %{_tmppath}/%{name}-root
+BuildRequires: autoconf, perl, pkgconfig, xmlto >= 0.0.11, findutils
+BuildRequires: db4-devel, expat-devel, zlib-devel, libselinux-devel
+BuildRequires: apr-devel >= 1.2.0, apr-util-devel >= 1.2.0, pcre-devel >= 5.0, 
+Requires: /etc/mime.types, gawk, /usr/share/magic.mime, /usr/bin/find
+Requires: initscripts >= 8.36
+Obsoletes: httpd-suexec
+Prereq: /sbin/chkconfig, /bin/mktemp, /bin/rm, /bin/mv
+Prereq: sh-utils, textutils, /usr/sbin/useradd
+Provides: webserver
+Provides: httpd-mmn = %{mmn}
+Obsoletes: apache, secureweb, mod_dav, mod_gzip, stronghold-apache, stronghold-htdocs
+Obsoletes: mod_put, mod_roaming, mod_jk
+Conflicts: pcre < 4.0
+
+%description
+The Apache HTTP Server is a powerful, efficient, and extensible
+web server.
+
+%package devel
+Group: Development/Libraries
+Summary: Development tools for the Apache HTTP server.
+Obsoletes: secureweb-devel, apache-devel, stronghold-apache-devel
+Requires: apr-devel, apr-util-devel, pkgconfig
+Requires: httpd = %{version}-%{release}
+
+%description devel
+The httpd-devel package contains the APXS binary and other files
+that you need to build Dynamic Shared Objects (DSOs) for the
+Apache HTTP Server.
+
+If you are installing the Apache HTTP server and you want to be
+able to compile or develop additional modules for Apache, you need
+to install this package.
+
+%package manual
+Group: Documentation
+Summary: Documentation for the Apache HTTP server.
+Requires: httpd = %{version}-%{release}
+Obsoletes: secureweb-manual, apache-manual
+
+%description manual
+The httpd-manual package contains the complete manual and
+reference guide for the Apache HTTP server. The information can
+also be found at http://httpd.apache.org/docs/2.2/.
+
+%package -n mod_ssl
+Group: System Environment/Daemons
+Summary: SSL/TLS module for the Apache HTTP server
+Epoch: 1
+BuildRequires: openssl-devel, distcache-devel
+Requires(post): openssl >= 0.9.7f-4, /bin/cat
+Requires: httpd = 0:%{version}-%{release}, httpd-mmn = %{mmn}
+Obsoletes: stronghold-mod_ssl
+
+%description -n mod_ssl
+The mod_ssl module provides strong cryptography for the Apache Web
+server via the Secure Sockets Layer (SSL) and Transport Layer
+Security (TLS) protocols.
+
+%prep
+%setup -q
+%patch1 -p1 -b .apctl
+%patch2 -p1 -b .apxs
+%patch3 -p1 -b .deplibs
+%patch4 -p1 -b .disablemods
+%patch5 -p1 -b .layout
+%patch6 -p1 -b .ac260
+
+%patch21 -p0 -b .xfsz
+%patch22 -p1 -b .pod
+%patch23 -p1 -b .export
+%patch24 -p1 -b .corelimit
+%patch25 -p1 -b .selinux
+
+# no -b to prevent droplets in install root
+%patch50 -p1
+%patch54 -p1 -b .authnoprov
+
+# Patch in vendor/release string
+sed "s/@RELEASE@/%{vstring}/" < %{PATCH20} | patch -p1
+
+# Safety check: prevent build if defined MMN does not equal upstream MMN.
+vmmn=`echo MODULE_MAGIC_NUMBER_MAJOR | cpp -include include/ap_mmn.h | sed -n '/^2/p'`
+if test "x${vmmn}" != "x%{mmn}"; then
+   : Error: Upstream MMN is now ${vmmn}, packaged MMN is %{mmn}.
+   : Update the mmn macro and rebuild.
+   exit 1
+fi
+
+: Building for '%{distro}' with MMN %{mmn} and vendor string '%{vstring}'
+
+%build
+# forcibly prevent use of bundled apr, apr-util, pcre
+rm -rf srclib/{apr,apr-util,pcre}
+
+# regenerate configure scripts
+autoheader && autoconf || exit 1
+
+# Limit size of CHANGES to recent history
+echo '1,/Changes with Apache MPM/wq' | ed CHANGES
+
+# Before configure; fix location of build dir in generated apxs
+%{__perl} -pi -e "s:\@exp_installbuilddir\@:%{_libdir}/httpd/build:g" \
+	support/apxs.in
+# update location of migration guide in apachectl
+%{__perl} -pi -e "s:\@docdir\@:%{_docdir}/%{name}-%{version}:g" \
+	support/apachectl.in
+
+# Build the migration guide
+sed 's/@DISTRO@/%{distro}/' < $RPM_SOURCE_DIR/migration.xml > migration.xml
+xmlto -x $RPM_SOURCE_DIR/html.xsl html-nochunks migration.xml
+cp $RPM_SOURCE_DIR/migration.css . # make %%doc happy
+
+CFLAGS=$RPM_OPT_FLAGS
+SH_LDFLAGS="-Wl,-z,relro"
+export CFLAGS SH_LDFLAGS
+
+function mpmbuild()
+{
+mpm=$1; shift
+mkdir $mpm; pushd $mpm
+../configure \
+ 	--prefix=%{_sysconfdir}/httpd \
+ 	--exec-prefix=%{_prefix} \
+ 	--bindir=%{_bindir} \
+ 	--sbindir=%{_sbindir} \
+ 	--mandir=%{_mandir} \
+	--libdir=%{_libdir} \
+	--sysconfdir=%{_sysconfdir}/httpd/conf \
+	--includedir=%{_includedir}/httpd \
+	--libexecdir=%{_libdir}/httpd/modules \
+	--datadir=%{contentdir} \
+        --with-installbuilddir=%{_libdir}/httpd/build \
+	--with-mpm=$mpm \
+        --with-apr=%{_prefix} --with-apr-util=%{_prefix} \
+	--enable-suexec --with-suexec \
+	--with-suexec-caller=%{suexec_caller} \
+	--with-suexec-docroot=%{contentdir} \
+	--with-suexec-logfile=%{_localstatedir}/log/httpd/suexec.log \
+	--with-suexec-bin=%{_sbindir}/suexec \
+	--with-suexec-uidmin=500 --with-suexec-gidmin=100 \
+        --enable-pie \
+        --with-pcre \
+	$*
+
+make %{?_smp_mflags}
+popd
+}
+
+# Build everything and the kitchen sink with the prefork build
+mpmbuild prefork \
+        --enable-mods-shared=all \
+	--enable-ssl --with-ssl --enable-distcache \
+	--enable-proxy \
+        --enable-cache --enable-mem-cache \
+        --enable-file-cache --enable-disk-cache \
+        --enable-ldap --enable-authnz-ldap \
+        --enable-cgid \
+        --enable-authn-anon --enable-authn-alias
+
+# For the other MPMs, just build httpd and no optional modules
+mpmbuild worker --enable-modules=none
+#mpmbuild event --enable-modules=none
+
+%install
+rm -rf $RPM_BUILD_ROOT
+
+# Classify ab and logresolve as section 1 commands, as they are in /usr/bin
+mv docs/man/ab.8 docs/man/ab.1
+mv docs/man/logresolve.8 docs/man/logresolve.1
+
+pushd prefork
+make DESTDIR=$RPM_BUILD_ROOT install
+popd
+
+# install alternative MPMs
+install -m 755 worker/httpd $RPM_BUILD_ROOT%{_sbindir}/httpd.worker
+#install -m 755 event/httpd $RPM_BUILD_ROOT%{_sbindir}/httpd.event
+
+# install conf file/directory
+mkdir $RPM_BUILD_ROOT%{_sysconfdir}/httpd/conf.d
+install -m 644 $RPM_SOURCE_DIR/README.confd \
+    $RPM_BUILD_ROOT%{_sysconfdir}/httpd/conf.d/README
+for f in ssl.conf welcome.conf manual.conf proxy_ajp.conf; do
+  install -m 644 $RPM_SOURCE_DIR/$f $RPM_BUILD_ROOT%{_sysconfdir}/httpd/conf.d/$f
+done
+
+rm $RPM_BUILD_ROOT%{_sysconfdir}/httpd/conf/*.conf
+install -m 644 $RPM_SOURCE_DIR/httpd.conf \
+   $RPM_BUILD_ROOT%{_sysconfdir}/httpd/conf/httpd.conf
+
+mkdir $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig
+install -m 644 $RPM_SOURCE_DIR/httpd.sysconf \
+   $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig/httpd
+
+# for holding mod_dav lock database
+mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/lib/dav
+
+# create a prototype session cache
+mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/cache/mod_ssl
+touch $RPM_BUILD_ROOT%{_localstatedir}/cache/mod_ssl/scache.{dir,pag,sem}
+
+# create cache root
+mkdir $RPM_BUILD_ROOT%{_localstatedir}/cache/mod_proxy
+
+# move utilities to /usr/bin
+mv $RPM_BUILD_ROOT%{_sbindir}/{ab,htdbm,logresolve,htpasswd,htdigest} \
+   $RPM_BUILD_ROOT%{_bindir}
+
+# Make the MMN accessible to module packages
+echo %{mmn} > $RPM_BUILD_ROOT%{_includedir}/httpd/.mmn
+
+# docroot
+mkdir $RPM_BUILD_ROOT%{contentdir}/html
+install -m 644 $RPM_SOURCE_DIR/index.html \
+	$RPM_BUILD_ROOT%{contentdir}/error/noindex.html
+
+# remove manual sources
+find $RPM_BUILD_ROOT%{contentdir}/manual \( \
+    -name \*.xml -o -name \*.xml.* -o -name \*.ent -o -name \*.xsl -o -name \*.dtd \
+    \) -print0 | xargs -0 rm -f
+
+# Strip the manual down just to English and replace the typemaps with flat files:
+set +x
+for f in `find $RPM_BUILD_ROOT%{contentdir}/manual -name \*.html -type f`; do
+   if test -f ${f}.en; then
+      cp ${f}.en ${f}
+      rm ${f}.*
+   fi
+done
+set -x
+
+install -m 644 $RPM_SOURCE_DIR/powered_by_fedora.png \
+	$RPM_BUILD_ROOT%{contentdir}/icons
+
+# logs
+rmdir $RPM_BUILD_ROOT%{_sysconfdir}/httpd/logs
+mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/log/httpd
+
+# symlinks for /etc/httpd
+ln -s ../..%{_localstatedir}/log/httpd $RPM_BUILD_ROOT/etc/httpd/logs
+ln -s ../..%{_localstatedir}/run $RPM_BUILD_ROOT/etc/httpd/run
+ln -s ../..%{_libdir}/httpd/modules $RPM_BUILD_ROOT/etc/httpd/modules
+
+# install SYSV init stuff
+mkdir -p $RPM_BUILD_ROOT/etc/rc.d/init.d
+install -m755 $RPM_SOURCE_DIR/httpd.init \
+	$RPM_BUILD_ROOT/etc/rc.d/init.d/httpd
+%{__perl} -pi -e "s:\@docdir\@:%{_docdir}/%{name}-%{version}:g" \
+	$RPM_BUILD_ROOT/etc/rc.d/init.d/httpd	
+
+# install log rotation stuff
+mkdir -p $RPM_BUILD_ROOT/etc/logrotate.d
+install -m644 $RPM_SOURCE_DIR/httpd.logrotate \
+	$RPM_BUILD_ROOT/etc/logrotate.d/httpd
+
+# fix man page paths
+sed -e "s|/usr/local/apache2/conf/httpd.conf|/etc/httpd/conf/httpd.conf|" \
+    -e "s|/usr/local/apache2/conf/mime.types|/etc/mime.types|" \
+    -e "s|/usr/local/apache2/conf/magic|/etc/httpd/conf/magic|" \
+    -e "s|/usr/local/apache2/logs/error_log|/var/log/httpd/error_log|" \
+    -e "s|/usr/local/apache2/logs/access_log|/var/log/httpd/access_log|" \
+    -e "s|/usr/local/apache2/logs/httpd.pid|/var/run/httpd.pid|" \
+    -e "s|/usr/local/apache2|/etc/httpd|" < docs/man/httpd.8 \
+  > $RPM_BUILD_ROOT%{_mandir}/man8/httpd.8
+
+# Make ap_config_layout.h libdir-agnostic
+sed -i '/.*DEFAULT_..._LIBEXECDIR/d;/DEFAULT_..._INSTALLBUILDDIR/d' \
+    $RPM_BUILD_ROOT%{_includedir}/httpd/ap_config_layout.h
+
+# Remove unpackaged files
+rm -f $RPM_BUILD_ROOT%{_libdir}/*.exp \
+      $RPM_BUILD_ROOT/etc/httpd/conf/mime.types \
+      $RPM_BUILD_ROOT%{_libdir}/httpd/modules/*.exp \
+      $RPM_BUILD_ROOT%{_libdir}/httpd/build/config.nice \
+      $RPM_BUILD_ROOT%{_bindir}/ap?-config \
+      $RPM_BUILD_ROOT%{_sbindir}/{checkgid,dbmmanage,envvars*} \
+      $RPM_BUILD_ROOT%{contentdir}/htdocs/* \
+      $RPM_BUILD_ROOT%{_mandir}/man1/dbmmanage.* \
+      $RPM_BUILD_ROOT%{contentdir}/cgi-bin/*
+
+rm -rf $RPM_BUILD_ROOT/etc/httpd/conf/{original,extra}
+
+# Make suexec a+rw so it can be stripped.  %%files lists real permissions
+chmod 755 $RPM_BUILD_ROOT%{_sbindir}/suexec
+
+%pre
+# Add the "apache" user
+/usr/sbin/useradd -c "Apache" -u 48 \
+	-s /sbin/nologin -r -d %{contentdir} apache 2> /dev/null || :
+
+%triggerpostun -- apache < 2.0, stronghold-apache < 2.0
+/sbin/chkconfig --add httpd
+
+# Prevent removal of index.html on upgrades from 1.3
+%triggerun -- apache < 2.0, stronghold-apache < 2.0
+if [ -r %{contentdir}/index.html -a ! -r %{contentdir}/index.html.rpmold ]; then
+  mv %{contentdir}/index.html %{contentdir}/index.html.rpmold
+fi
+
+%post
+# Register the httpd service
+/sbin/chkconfig --add httpd
+
+%preun
+if [ $1 = 0 ]; then
+	/sbin/service httpd stop > /dev/null 2>&1
+	/sbin/chkconfig --del httpd
+fi
+
+%define sslcert %{_sysconfdir}/pki/tls/certs/localhost.crt
+%define sslkey %{_sysconfdir}/pki/tls/private/localhost.key
+
+%post -n mod_ssl
+umask 077
+
+if [ ! -f %{sslkey} ] ; then
+%{_bindir}/openssl genrsa -rand /proc/apm:/proc/cpuinfo:/proc/dma:/proc/filesystems:/proc/interrupts:/proc/ioports:/proc/pci:/proc/rtc:/proc/uptime 1024 > %{sslkey} 2> /dev/null
+fi
+
+FQDN=`hostname`
+if [ "x${FQDN}" = "x" ]; then
+   FQDN=localhost.localdomain
+fi
+
+if [ ! -f %{sslcert} ] ; then
+cat << EOF | %{_bindir}/openssl req -new -key %{sslkey} \
+         -x509 -days 365 -set_serial $RANDOM \
+         -out %{sslcert} 2>/dev/null
+--
+SomeState
+SomeCity
+SomeOrganization
+SomeOrganizationalUnit
+${FQDN}
+root@${FQDN}
+EOF
+fi
+
+%check
+# Check the built modules are all PIC
+if readelf -d $RPM_BUILD_ROOT%{_libdir}/httpd/modules/*.so | grep TEXTREL; then
+   : modules contain non-relocatable code
+   exit 1
+fi
+
+# Verify that the same modules were built into the httpd binaries
+./prefork/httpd -l | grep -v prefork > prefork.mods
+for mpm in worker; do
+  ./${mpm}/httpd -l | grep -v ${mpm} > ${mpm}.mods
+  if ! diff -u prefork.mods ${mpm}.mods; then
+    : Different modules built into httpd binaries, will not proceed
+    exit 1
+  fi
+done
+
+%clean
+rm -rf $RPM_BUILD_ROOT
+
+%files
+%defattr(-,root,root)
+
+%doc ABOUT_APACHE README CHANGES LICENSE VERSIONING NOTICE
+%doc migration.html migration.css
+
+%dir %{_sysconfdir}/httpd
+%{_sysconfdir}/httpd/modules
+%{_sysconfdir}/httpd/logs
+%{_sysconfdir}/httpd/run
+%dir %{_sysconfdir}/httpd/conf
+%config %{_sysconfdir}/httpd/conf/httpd.conf
+%config(noreplace) %{_sysconfdir}/httpd/conf.d/welcome.conf
+%config(noreplace) %{_sysconfdir}/httpd/conf.d/proxy_ajp.conf
+%config(noreplace) %{_sysconfdir}/httpd/conf/magic
+
+%config(noreplace) %{_sysconfdir}/logrotate.d/httpd
+%config %{_sysconfdir}/rc.d/init.d/httpd
+
+%dir %{_sysconfdir}/httpd/conf.d
+%{_sysconfdir}/httpd/conf.d/README
+
+%config(noreplace) %{_sysconfdir}/sysconfig/httpd
+
+%{_bindir}/*
+%{_sbindir}/ht*
+%{_sbindir}/apachectl
+%{_sbindir}/rotatelogs
+%attr(4510,root,%{suexec_caller}) %{_sbindir}/suexec
+
+%dir %{_libdir}/httpd
+%dir %{_libdir}/httpd/modules
+%{_libdir}/httpd/modules/mod*.so
+%exclude %{_libdir}/httpd/modules/mod_ssl.so
+
+%dir %{contentdir}
+%dir %{contentdir}/cgi-bin
+%dir %{contentdir}/html
+%dir %{contentdir}/icons
+%dir %{contentdir}/error
+%dir %{contentdir}/error/include
+%{contentdir}/icons/*
+%{contentdir}/error/README
+%{contentdir}/error/noindex.html
+%config %{contentdir}/error/*.var
+%config %{contentdir}/error/include/*.html
+
+%attr(0700,root,root) %dir %{_localstatedir}/log/httpd
+%attr(0700,apache,apache) %dir %{_localstatedir}/lib/dav
+%attr(0700,apache,apache) %dir %{_localstatedir}/cache/mod_proxy
+
+%{_mandir}/man?/*
+%exclude %{_mandir}/man8/apxs.8*
+
+%files manual
+%defattr(-,root,root)
+%{contentdir}/manual
+%config %{_sysconfdir}/httpd/conf.d/manual.conf
+
+%files -n mod_ssl
+%defattr(-,root,root)
+%{_libdir}/httpd/modules/mod_ssl.so
+%config(noreplace) %{_sysconfdir}/httpd/conf.d/ssl.conf
+%attr(0700,apache,root) %dir %{_localstatedir}/cache/mod_ssl
+%attr(0600,apache,root) %ghost %{_localstatedir}/cache/mod_ssl/scache.dir
+%attr(0600,apache,root) %ghost %{_localstatedir}/cache/mod_ssl/scache.pag
+%attr(0600,apache,root) %ghost %{_localstatedir}/cache/mod_ssl/scache.sem
+
+%files devel
+%defattr(-,root,root)
+%{_includedir}/httpd
+%{_sbindir}/apxs
+%{_mandir}/man8/apxs.8*
+%dir %{_libdir}/httpd/build
+%{_libdir}/httpd/build/*.mk
+%{_libdir}/httpd/build/*.sh
+
+%changelog
+* Mon Sep 11 2006 Joe Orton <jorton@redhat.com> 2.2.3-5
+- updated "powered by Fedora" logo (#205573, Diana Fong)
+- tweak welcome page wording slightly (#205880)
+
+* Fri Aug 18 2006 Jesse Keating <jkeating@redhat.com> - 2.2.3-4
+- rebuilt with latest binutils to pick up 64K -z commonpagesize on ppc*
+  (#203001)
+
+* Thu Aug  3 2006 Joe Orton <jorton@redhat.com> 2.2.3-3
+- init: use killproc() delay to avoid race killing parent
+
+* Fri Jul 28 2006 Joe Orton <jorton@redhat.com> 2.2.3-2
+- update to 2.2.3
+- trim %%changelog to >=2.0.52
+
+* Thu Jul 20 2006 Joe Orton <jorton@redhat.com> 2.2.2-8
+- fix segfault on dummy connection failure at graceful restart (#199429)
+
+* Wed Jul 19 2006 Joe Orton <jorton@redhat.com> 2.2.2-7
+- fix "apxs -g"-generated Makefile
+- fix buildconf with autoconf 2.60
+
+* Wed Jul 12 2006 Jesse Keating <jkeating@redhat.com> - 2.2.2-5.1
+- rebuild
+
+* Wed Jun  7 2006 Joe Orton <jorton@redhat.com> 2.2.2-5
+- require pkgconfig for -devel (#194152)
+- fixes for installed support makefiles (special.mk et al)
+- BR autoconf
+
+* Fri Jun  2 2006 Joe Orton <jorton@redhat.com> 2.2.2-4
+- make -devel package multilib-safe (#192686)
+
+* Thu May 11 2006 Joe Orton <jorton@redhat.com> 2.2.2-3
+- build DSOs using -z relro linker flag
+
+* Wed May  3 2006 Joe Orton <jorton@redhat.com> 2.2.2-2
+- update to 2.2.2
+
+* Thu Apr  6 2006 Joe Orton <jorton@redhat.com> 2.2.0-6
+- rebuild to pick up apr-util LDAP interface fix (#188073)
+
+* Fri Feb 10 2006 Jesse Keating <jkeating@redhat.com> - (none):2.2.0-5.1.2
+- bump again for double-long bug on ppc(64)
+
+* Tue Feb 07 2006 Jesse Keating <jkeating@redhat.com> - (none):2.2.0-5.1.1
+- rebuilt for new gcc4.1 snapshot and glibc changes
+
+* Mon Feb  6 2006 Joe Orton <jorton@redhat.com> 2.2.0-5.1
+- mod_auth_basic/mod_authn_file: if no provider is configured,
+  and AuthUserFile is not configured, decline to handle authn
+  silently rather than failing noisily.
+
+* Fri Feb  3 2006 Joe Orton <jorton@redhat.com> 2.2.0-5
+- mod_ssl: add security fix for CVE-2005-3357 (#177914)
+- mod_imagemap: add security fix for CVE-2005-3352 (#177913)
+- add fix for AP_INIT_* designated initializers with C++ compilers
+- httpd.conf: enable HTMLTable in default IndexOptions
+- httpd.conf: add more "redirect-carefully" matches for DAV clients
+
+* Thu Jan  5 2006 Joe Orton <jorton@redhat.com> 2.2.0-4
+- mod_proxy_ajp: fix Cookie handling (Mladen Turk, r358769)
+
+* Fri Dec 09 2005 Jesse Keating <jkeating@redhat.com>
+- rebuilt
+
+* Wed Dec  7 2005 Joe Orton <jorton@redhat.com> 2.2.0-3
+- strip manual to just English content
+
+* Mon Dec  5 2005 Joe Orton <jorton@redhat.com> 2.2.0-2
+- don't strip C-L from HEAD responses (Greg Ames, #110552)
+- load mod_proxy_balancer by default
+- add proxy_ajp.conf to load/configure mod_proxy_ajp
+- Obsolete mod_jk
+- update docs URLs in httpd.conf/ssl.conf
+
+* Fri Dec  2 2005 Joe Orton <jorton@redhat.com> 2.2.0-1
+- update to 2.2.0
+
+* Wed Nov 30 2005 Joe Orton <jorton@redhat.com> 2.1.10-2
+- enable mod_authn_alias, mod_authn_anon
+- update default httpd.conf
+
+* Fri Nov 25 2005 Joe Orton <jorton@redhat.com> 2.1.10-1
+- update to 2.1.10
+- require apr >= 1.2.0, apr-util >= 1.2.0
+
+* Wed Nov  9 2005 Tomas Mraz <tmraz@redhat.com> 2.0.54-16
+- rebuilt against new openssl
+
+* Thu Nov  3 2005 Joe Orton <jorton@redhat.com> 2.0.54-15
+- log notice giving SELinux context at startup if enabled
+- drop SSLv2 and restrict default cipher suite in default
+ SSL configuration
+
+* Thu Oct 20 2005 Joe Orton <jorton@redhat.com> 2.0.54-14
+- mod_ssl: add security fix for SSLVerifyClient (CVE-2005-2700)
+- add security fix for byterange filter DoS (CVE-2005-2728)
+- add security fix for C-L vs T-E handling (CVE-2005-2088)
+- mod_ssl: add security fix for CRL overflow (CVE-2005-1268)
+- mod_ldap/mod_auth_ldap: add fixes from 2.0.x branch (upstream #34209 etc)
+- add fix for dummy connection handling (#167425)
+- mod_auth_digest: fix hostinfo comparison in CONNECT requests
+- mod_include: fix variable corruption in nested includes (upstream #12655)
+- mod_ssl: add fix for handling non-blocking reads
+- mod_ssl: fix to enable output buffering (upstream #35279)
+- mod_ssl: buffer request bodies for per-location renegotiation (upstream #12355)
+
+* Sat Aug 13 2005 Joe Orton <jorton@redhat.com> 2.0.54-13
+- don't load by default: mod_cern_meta, mod_asis
+- do load by default: mod_ext_filter (#165893)
+
+* Thu Jul 28 2005 Joe Orton <jorton@redhat.com> 2.0.54-12
+- drop broken epoch deps
+
+* Thu Jun 30 2005 Joe Orton <jorton@redhat.com> 2.0.54-11
+- mod_dav_fs: fix uninitialized variable (#162144)
+- add epoch to dependencies as appropriate
+- mod_ssl: drop dependencies on dev, make
+- mod_ssl: mark post script dependencies as such
+
+* Mon May 23 2005 Joe Orton <jorton@redhat.com> 2.0.54-10
+- remove broken symlink (Robert Scheck, #158404)
+
+* Wed May 18 2005 Joe Orton <jorton@redhat.com> 2.0.54-9
+- add piped logger fixes (w/Jeff Trawick)
+
+* Mon May  9 2005 Joe Orton <jorton@redhat.com> 2.0.54-8
+- drop old "powered by Red Hat" logos
+
+* Wed May  4 2005 Joe Orton <jorton@redhat.com> 2.0.54-7
+- mod_userdir: fix memory allocation issue (upstream #34588)
+- mod_ldap: fix memory corruption issue (Brad Nicholes, upstream #34618)
+
+* Tue Apr 26 2005 Joe Orton <jorton@redhat.com> 2.0.54-6
+- fix key/cert locations in post script
+
+* Mon Apr 25 2005 Joe Orton <jorton@redhat.com> 2.0.54-5
+- create default dummy cert in /etc/pki/tls
+- use a pseudo-random serial number on the dummy cert
+- change default ssl.conf to point at /etc/pki/tls
+- merge back -suexec subpackage; SELinux policy can now be
+  used to persistently disable suexec (#155716)
+- drop /etc/httpd/conf/ssl.* directories and Makefiles
+- unconditionally enable PIE support
+- mod_ssl: fix for picking up -shutdown options (upstream #34452)
+
+* Mon Apr 18 2005 Joe Orton <jorton@redhat.com> 2.0.54-4
+- replace PreReq with Requires(pre) 
+
+* Mon Apr 18 2005 Joe Orton <jorton@redhat.com> 2.0.54-3
+- update to 2.0.54
+
+* Tue Mar 29 2005 Joe Orton <jorton@redhat.com> 2.0.53-6
+- update default httpd.conf:
+ * clarify the comments on AddDefaultCharset usage (#135821)
+ * remove all the AddCharset default extensions
+ * don't load mod_imap by default
+ * synch with upstream 2.0.53 httpd-std.conf
+- mod_ssl: set user from SSLUserName in access hook (upstream #31418)
+- htdigest: fix permissions of created files (upstream #33765)
+- remove htsslpass
+
+* Wed Mar  2 2005 Joe Orton <jorton@redhat.com> 2.0.53-5
+- apachectl: restore use of $OPTIONS again
+
+* Wed Feb  9 2005 Joe Orton <jorton@redhat.com> 2.0.53-4
+- update to 2.0.53
+- move prefork/worker modules comparison to %%check
+
+* Mon Feb  7 2005 Joe Orton <jorton@redhat.com> 2.0.52-7
+- fix cosmetic issues in "service httpd reload"
+- move User/Group higher in httpd.conf (#146793)
+- load mod_logio by default in httpd.conf
+- apachectl: update for correct libselinux tools locations
+
+* Tue Nov 16 2004 Joe Orton <jorton@redhat.com> 2.0.52-6
+- add security fix for CVE CAN-2004-0942 (memory consumption DoS)
+- SELinux: run httpd -t under runcon in configtest (Steven Smalley)
+- fix SSLSessionCache comment for distcache in ssl.conf
+- restart using SIGHUP not SIGUSR1 after logrotate
+- add ap_save_brigade fix (upstream #31247)
+- mod_ssl: fix possible segfault in auth hook (upstream #31848)
+- add htsslpass(1) and configure as default SSLPassPhraseDialog (#128677)
+- apachectl: restore use of $OPTIONS
+- apachectl, httpd.init: refuse to restart if $HTTPD -t fails
+- apachectl: run $HTTPD -t in user SELinux context for configtest
+- update for pcre-5.0 header locations
+
+* Sat Nov 13 2004 Jeff Johnson <jbj@redhat.com> 2.0.52-5
+- rebuild against db-4.3.21 aware apr-util.
+
+* Thu Nov 11 2004 Jeff Johnson <jbj@jbj.org> 2.0.52-4
+- rebuild against db-4.3-21.
+
+* Thu Sep 28 2004 Joe Orton <jorton@redhat.com> 2.0.52-3
+- add dummy connection address fixes from HEAD
+- mod_ssl: add security fix for CAN-2004-0885
+
+* Tue Sep 28 2004 Joe Orton <jorton@redhat.com> 2.0.52-2
+- update to 2.0.52
+
Index: /tags/fc9-eol/server/fedora/ref-prepatch/krb5.spec
===================================================================
--- /tags/fc9-eol/server/fedora/ref-prepatch/krb5.spec	(revision 1257)
+++ /tags/fc9-eol/server/fedora/ref-prepatch/krb5.spec	(revision 1257)
@@ -0,0 +1,1309 @@
+%if %{?WITH_SELINUX:0}%{!?WITH_SELINUX:1}
+%define WITH_SELINUX 0
+%endif
+
+%define krb5prefix %{_prefix}/kerberos
+
+# FIXME: is it upstream's intention that the new autoconf macro be installed?
+%define install_macro 0
+
+Summary: The Kerberos network authentication system.
+Name: krb5
+Version: 1.5
+Release: 7
+# Maybe we should explode from the now-available-to-everybody tarball instead?
+# http://web.mit.edu/kerberos/dist/krb5/1.5/krb5-1.5-signed.tar
+Source0: krb5-%{version}.tar.gz
+Source1: krb5-%{version}.tar.gz.asc
+Source2: kpropd.init
+Source3: krb524d.init
+Source4: kadmind.init
+Source5: krb5kdc.init
+Source6: krb5.conf
+Source7: krb5.sh
+Source8: krb5.csh
+Source9: kdcrotate
+Source10: kdc.conf
+Source11: kadm5.acl
+Source12: krsh
+Source13: krlogin
+Source14: eklogin.xinetd
+Source15: klogin.xinetd
+Source16: kshell.xinetd
+Source17: krb5-telnet.xinetd
+Source18: gssftp.xinetd
+Source19: krb5kdc.sysconfig
+Source20: kadmin.sysconfig
+Source21: krb524.sysconfig
+Source22: ekrb5-telnet.xinetd
+
+Patch2: krb5-1.3-manpage-paths.patch
+Patch3: krb5-1.3-netkit-rsh.patch
+Patch4: krb5-1.3-rlogind-environ.patch
+Patch5: krb5-1.3-ksu-access.patch
+Patch6: krb5-1.5-ksu-path.patch
+Patch9: krb5-1.5-brokenrev.patch
+Patch11: krb5-1.2.1-passive.patch
+Patch12: krb5-1.4-ktany.patch
+Patch13: krb5-1.3-large-file.patch
+Patch14: krb5-1.3-ftp-glob.patch
+Patch15: krb5-1.3-check.patch
+Patch16: krb5-1.5-no-rpath.patch
+Patch18: krb5-1.2.7-reject-bad-transited.patch
+Patch21: krb5-selinux.patch
+Patch23: krb5-1.3.1-dns.patch
+Patch25: krb5-1.4-null.patch
+Patch26: krb5-1.3.2-efence.patch
+Patch27: krb5-1.3.3-rcp-sendlarge.patch
+Patch29: krb5-1.3.5-kprop-mktemp.patch
+Patch30: krb5-1.3.4-send-pr-tempfile.patch
+Patch32: krb5-1.4-ncurses.patch
+Patch33: krb5-1.5-io.patch
+Patch35: krb5-1.5-fclose.patch
+Patch36: krb5-1.3.3-rcp-markus.patch
+Patch39: krb5-1.4.1-api.patch
+Patch40: krb5-1.4.1-telnet-environ.patch
+Patch41: krb5-1.2.7-login-lpass.patch
+Patch44: krb5-1.4.3-enospc.patch
+Patch45: krb5-1.5-gssinit.patch
+Patch46: http://web.mit.edu/kerberos/advisories/2006-001-patch_1.5.txt
+
+License: MIT, freely distributable.
+URL: http://web.mit.edu/kerberos/www/
+Group: System Environment/Libraries
+BuildRoot: %{_tmppath}/%{name}-%{version}-root
+Prereq: grep, info, sh-utils, /sbin/install-info
+BuildPrereq: autoconf, bison, e2fsprogs-devel >= 1.35, flex
+BuildPrereq: gzip, ncurses-devel, rsh, texinfo, tar
+
+Patch1000: krb5-kuserok-scripts.patch
+
+%description
+Kerberos V5 is a trusted-third-party network authentication system,
+which can improve your network's security by eliminating the insecure
+practice of cleartext passwords.
+
+%package devel
+Summary: Development files needed to compile Kerberos 5 programs.
+Group: Development/Libraries
+Requires: %{name}-libs = %{version}-%{release}, e2fsprogs-devel
+
+%description devel
+Kerberos is a network authentication system. The krb5-devel package
+contains the header files and libraries needed for compiling Kerberos
+5 programs. If you want to develop Kerberos-aware programs, you need
+to install this package.
+
+%package libs
+Summary: The shared libraries used by Kerberos 5.
+Group: System Environment/Libraries
+Prereq: grep, /sbin/ldconfig, sh-utils
+Obsoletes: krb5-configs
+
+%description libs
+Kerberos is a network authentication system. The krb5-libs package
+contains the shared libraries needed by Kerberos 5. If you are using
+Kerberos, you need to install this package.
+
+%package server
+Group: System Environment/Daemons
+Summary: The server programs for Kerberos 5.
+Requires: %{name}-libs = %{version}-%{release}
+Prereq: grep, /sbin/install-info, /bin/sh, sh-utils, /sbin/chkconfig
+
+%description server
+Kerberos is a network authentication system. The krb5-server package
+contains the programs that must be installed on a Kerberos 5 server.
+If you are installing a Kerberos 5 server, you need to install this
+package (in other words, most people should NOT install this
+package).
+
+%package workstation
+Summary: Kerberos 5 programs for use on workstations.
+Group: System Environment/Base
+Requires: %{name}-libs = %{version}-%{release}
+Prereq: grep, /sbin/install-info, /bin/sh, sh-utils
+# mktemp is used by krb5-send-pr
+Requires: mktemp
+
+%description workstation
+Kerberos is a network authentication system. The krb5-workstation
+package contains the basic Kerberos programs (kinit, klist, kdestroy,
+kpasswd) as well as kerberized versions of Telnet and FTP. If your
+network uses Kerberos, this package should be installed on every
+workstation.
+
+%changelog
+* Wed Sep  6 2006 Nalin Dahyabhai <nalin@redhat.com> - 1.5-7
+- set SS_LIB at configure-time so that libss-using apps get working readline
+  support (#197044)
+
+* Fri Aug 18 2006 Nalin Dahyabhai <nalin@redhat.com> - 1.5-6
+- switch to the updated patch for MITKRB-SA-2006-001
+
+* Tue Aug  8 2006 Nalin Dahyabhai <nalin@redhat.com> - 1.5-5
+- apply patch to address MITKRB-SA-2006-001 (CVE-2006-3084)
+
+* Mon Aug  7 2006 Nalin Dahyabhai <nalin@redhat.com> - 1.5-4
+- ensure that the gssapi library's been initialized before walking the
+  internal mechanism list in gss_release_oid(), needed if called from
+  gss_release_name() right after a gss_import_name() (#198092)
+
+* Tue Jul 25 2006 Nalin Dahyabhai <nalin@redhat.com> - 1.5-3
+- rebuild
+
+* Tue Jul 25 2006 Nalin Dahyabhai <nalin@redhat.com> - 1.5-2
+- pull up latest revision of patch to reduce lockups in rsh/rshd
+
+* Mon Jul 17 2006 Nalin Dahyabhai <nalin@redhat.com> - 1.5-1.2
+- rebuild
+
+* Wed Jul 12 2006 Jesse Keating <jkeating@redhat.com> - 1.5-1.1
+- rebuild
+
+* Thu Jul  6 2006 Nalin Dahyabhai <nalin@redhat.com> 1.5-1
+- build
+
+* Wed Jul  5 2006 Nalin Dahyabhai <nalin@redhat.com> 1.5-0
+- update to 1.5
+
+* Fri Jun 23 2006 Nalin Dahyabhai <nalin@redhat.com> 1.4.3-9
+- mark profile.d config files noreplace (Laurent Rineau, #196447)
+
+* Thu Jun  8 2006 Nalin Dahyabhai <nalin@redhat.com> 1.4.3-8
+- add buildprereq for autoconf
+
+* Mon May 22 2006 Nalin Dahyabhai <nalin@redhat.com> 1.4.3-7
+- further munge krb5-config so that 'libdir=/usr/lib' is given even on 64-bit
+  architectures, to avoid multilib conflicts; other changes will conspire to
+  strip out the -L flag which uses this, so it should be harmless (#192692)
+
+* Fri Apr 28 2006 Nalin Dahyabhai <nalin@redhat.com> 1.4.3-6
+- adjust the patch which removes the use of rpath to also produce a
+  krb5-config which is okay in multilib environments (#190118)
+- make the name-of-the-tempfile comment which compile_et adds to error code
+  headers always list the same file to avoid conflicts on multilib installations
+- strip SIZEOF_LONG out of krb5.h so that it doesn't conflict on multilib boxes
+- strip GSS_SIZEOF_LONG out of gssapi.h so that it doesn't conflict on mulitlib
+  boxes
+
+* Fri Apr 14 2006 Stepan Kasal <skasal@redhat.com> 1.4.3-5
+- Fix formatting typo in kinit.1 (krb5-kinit-man-typo.patch)
+
+* Fri Feb 10 2006 Jesse Keating <jkeating@redhat.com> 1.4.3-4.1
+- bump again for double-long bug on ppc(64)
+
+* Mon Feb  6 2006 Nalin Dahyabhai <nalin@redhat.com> 1.4.3-4
+- give a little bit more information to the user when kinit gets the catch-all
+  I/O error (#180175)
+
+* Thu Jan 19 2006 Nalin Dahyabhai <nalin@redhat.com> 1.4.3-3
+- rebuild properly when pthread_mutexattr_setrobust_np() is defined but not
+  declared, such as with recent glibc when _GNU_SOURCE isn't being used
+
+* Thu Jan 19 2006 Matthias Clasen <mclasen@redhat.com> 1.4.3-2
+- Use full paths in krb5.sh to avoid path lookups
+
+* Fri Dec 09 2005 Jesse Keating <jkeating@redhat.com>
+- rebuilt
+
+* Thu Dec  1 2005 Nalin Dahyabhai <nalin@redhat.com>
+- login: don't truncate passwords before passing them into crypt(), in
+  case they're significant (#149476)
+
+* Thu Nov 17 2005 Nalin Dahyabhai <nalin@redhat.com> 1.4.3-1
+- update to 1.4.3
+- make ksu setuid again (#137934, others)
+
+* Tue Sep 13 2005 Nalin Dahyabhai <nalin@redhat.com> 1.4.2-4
+- mark %%{krb5prefix}/man so that files which are packaged within it are
+  flagged as %%doc (#168163)
+
+* Tue Sep  6 2005 Nalin Dahyabhai <nalin@redhat.com> 1.4.2-3
+- add an xinetd configuration file for encryption-only telnetd, parallelling
+  the kshell/ekshell pair (#167535)
+
+* Wed Aug 31 2005 Nalin Dahyabhai <nalin@redhat.com> 1.4.2-2
+- change the default configured encryption type for KDC databases to the
+  compiled-in default of des3-hmac-sha1 (#57847)
+
+* Thu Aug 11 2005 Nalin Dahyabhai <nalin@redhat.com> 1.4.2-1
+- update to 1.4.2, incorporating the fixes for MIT-KRB5-SA-2005-002 and
+  MIT-KRB5-SA-2005-003
+
+* Wed Jun 29 2005 Nalin Dahyabhai <nalin@redhat.com> 1.4.1-6
+- rebuild
+
+* Wed Jun 29 2005 Nalin Dahyabhai <nalin@redhat.com> 1.4.1-5
+- fix telnet client environment variable disclosure the same way NetKit's
+  telnet client did (CAN-2005-0488) (#159305)
+- keep apps which call krb5_principal_compare() or krb5_realm_compare() with
+  malformed or NULL principal structures from crashing outright (Thomas Biege)
+  (#161475)
+
+* Tue Jun 28 2005 Nalin Dahyabhai <nalin@redhat.com>
+- apply fixes from draft of MIT-KRB5-SA-2005-002 (CAN-2005-1174,CAN-2005-1175)
+  (#157104)
+- apply fixes from draft of MIT-KRB5-SA-2005-003 (CAN-2005-1689) (#159755)
+
+* Fri Jun 24 2005 Nalin Dahyabhai <nalin@redhat.com> 1.4.1-4
+- fix double-close in keytab handling
+- add port of fixes for CAN-2004-0175 to krb5-aware rcp (#151612)
+
+* Fri May 13 2005 Nalin Dahyabhai <nalin@redhat.com> 1.4.1-3
+- prevent spurious EBADF in krshd when stdin is closed by the client while
+  the command is running (#151111)
+
+* Fri May 13 2005 Martin Stransky <stransky@redhat.com> 1.4.1-2
+- add deadlock patch, removed old patch
+
+* Fri May  6 2005 Nalin Dahyabhai <nalin@redhat.com> 1.4.1-1
+- update to 1.4.1, incorporating fixes for CAN-2005-0468 and CAN-2005-0469
+- when starting the KDC or kadmind, if KRB5REALM is set via the /etc/sysconfig
+  file for the service, pass it as an argument for the -r flag
+
+* Wed Mar 23 2005 Nalin Dahyabhai <nalin@redhat.com> 1.4-3
+- drop krshd patch for now
+
+* Thu Mar 17 2005 Nalin Dahyabhai <nalin@redhat.com>
+- add draft fix from Tom Yu for slc_add_reply() buffer overflow (CAN-2005-0469)
+- add draft fix from Tom Yu for env_opt_add() buffer overflow (CAN-2005-0468)
+
+* Wed Mar 16 2005 Nalin Dahyabhai <nalin@redhat.com> 1.4-2
+- don't include <term.h> into the telnet client when we're not using curses
+
+* Thu Feb 24 2005 Nalin Dahyabhai <nalin@redhat.com> 1.4-1
+- update to 1.4
+  - v1.4 kadmin client requires a v1.4 kadmind on the server, or use the "-O"
+    flag to specify that it should communicate with the server using the older
+    protocol
+  - new libkrb5support library
+  - v5passwdd and kadmind4 are gone
+  - versioned symbols
+- pick up $KRB5KDC_ARGS from /etc/sysconfig/krb5kdc, if it exists, and pass
+  it on to krb5kdc
+- pick up $KADMIND_ARGS from /etc/sysconfig/kadmin, if it exists, and pass
+  it on to kadmind
+- pick up $KRB524D_ARGS from /etc/sysconfig/krb524, if it exists, and pass
+  it on to krb524d *instead of* "-m"
+- set "forwardable" in [libdefaults] in the default krb5.conf to match the
+  default setting which we supply for pam_krb5
+- set a default of 24h for "ticket_lifetime" in [libdefaults], reflecting the
+  compiled-in default
+
+* Mon Dec 20 2004 Nalin Dahyabhai <nalin@redhat.com> 1.3.6-3
+- rebuild
+
+* Mon Dec 20 2004 Nalin Dahyabhai <nalin@redhat.com> 1.3.6-2
+- rebuild
+
+* Mon Dec 20 2004 Nalin Dahyabhai <nalin@redhat.com> 1.3.6-1
+- update to 1.3.6, which includes the previous fix
+
+* Mon Dec 20 2004 Nalin Dahyabhai <nalin@redhat.com> 1.3.5-8
+- apply fix from Tom Yu for MITKRB5-SA-2004-004 (CAN-2004-1189)
+
+* Fri Dec 17 2004 Martin Stransky <stransky@redhat.com> 1.3.5-7
+- fix deadlock during file transfer via rsync/krsh
+- thanks goes to James Antil for hint
+
+* Fri Nov 26 2004 Nalin Dahyabhai <nalin@redhat.com> 1.3.5-6
+- rebuild
+
+* Mon Nov 22 2004 Nalin Dahyabhai <nalin@redhat.com> 1.3.5-3
+- fix predictable-tempfile-name bug in krb5-send-pr (CAN-2004-0971, #140036)
+
+* Tue Nov 16 2004 Nalin Dahyabhai <nalin@redhat.com>
+- silence compiler warning in kprop by using an in-memory ccache with a fixed
+  name instead of an on-disk ccache with a name generated by tmpnam()
+
+* Tue Nov 16 2004 Nalin Dahyabhai <nalin@redhat.com> 1.3.5-2
+- fix globbing patch port mode (#139075)
+
+* Mon Nov  1 2004 Nalin Dahyabhai <nalin@redhat.com> 1.3.5-1
+- fix segfault in telnet due to incorrect checking of gethostbyname_r result
+  codes (#129059)
+
+* Fri Oct 15 2004 Nalin Dahyabhai <nalin@redhat.com>
+- remove rc4-hmac:norealm and rc4-hmac:onlyrealm from the default list of
+  supported keytypes in kdc.conf -- they produce exactly the same keys as
+  rc4-hmac:normal because rc4 string-to-key ignores salts
+- nuke kdcrotate -- there are better ways to balance the load on KDCs, and
+  the SELinux policy for it would have been scary-looking
+- update to 1.3.5, mainly to include MITKRB5SA 2004-002 and 2004-003
+
+* Tue Aug 31 2004 Nalin Dahyabhai <nalin@redhat.com> 1.3.4-7
+- rebuild
+
+* Tue Aug 24 2004 Nalin Dahyabhai <nalin@redhat.com> 1.3.4-6
+- rebuild
+
+* Tue Aug 24 2004 Nalin Dahyabhai <nalin@redhat.com> 1.3.4-5
+- incorporate revised fixes from Tom Yu for CAN-2004-0642, CAN-2004-0644,
+  CAN-2004-0772
+
+* Mon Aug 23 2004 Nalin Dahyabhai <nalin@redhat.com> 1.3.4-4
+- rebuild
+
+* Mon Aug 23 2004 Nalin Dahyabhai <nalin@redhat.com> 1.3.4-3
+- incorporate fixes from Tom Yu for CAN-2004-0642, CAN-2004-0772
+  (MITKRB5-SA-2004-002, #130732)
+- incorporate fixes from Tom Yu for CAN-2004-0644 (MITKRB5-SA-2004-003, #130732)
+
+* Tue Jul 27 2004 Nalin Dahyabhai <nalin@redhat.com> 1.3.4-2
+- fix indexing error in server sorting patch (#127336)
+
+* Tue Jun 15 2004 Elliot Lee <sopwith@redhat.com>
+- rebuilt
+
+* Mon Jun 14 2004 Nalin Dahyabhai <nalin@redhat.com> 1.3.4-0.1
+- update to 1.3.4 final
+
+* Mon Jun  7 2004 Nalin Dahyabhai <nalin@redhat.com> 1.3.4-0
+- update to 1.3.4 beta1
+- remove MITKRB5-SA-2004-001, included in 1.3.4
+
+* Mon Jun  7 2004 Nalin Dahyabhai <nalin@redhat.com> 1.3.3-8
+- rebuild
+
+* Fri Jun  4 2004 Nalin Dahyabhai <nalin@redhat.com> 1.3.3-7
+- rebuild
+
+* Fri Jun  4 2004 Nalin Dahyabhai <nalin@redhat.com> 1.3.3-6
+- apply updated patch from MITKRB5-SA-2004-001 (revision 2004-06-02)
+
+* Tue Jun  1 2004 Nalin Dahyabhai <nalin@redhat.com> 1.3.3-5
+- rebuild
+
+* Tue Jun  1 2004 Nalin Dahyabhai <nalin@redhat.com> 1.3.3-4
+- apply patch from MITKRB5-SA-2004-001 (#125001)
+
+* Wed May 12 2004 Thomas Woerner <twoerner@redhat.com> 1.3.3-3
+- removed rpath
+
+* Thu Apr 15 2004 Nalin Dahyabhai <nalin@redhat.com> 1.3.3-2
+- re-enable large file support, fell out in 1.3-1
+- patch rcp to use long long and %%lld format specifiers when reporting file
+  sizes on large files
+
+* Tue Apr 13 2004 Nalin Dahyabhai <nalin@redhat.com> 1.3.3-1
+- update to 1.3.3
+
+* Wed Mar 10 2004 Nalin Dahyabhai <nalin@redhat.com> 1.3.2-1
+- update to 1.3.2
+
+* Mon Mar  8 2004 Nalin Dahyabhai <nalin@redhat.com> 1.3.1-12
+- rebuild
+
+* Tue Mar 02 2004 Elliot Lee <sopwith@redhat.com> 1.3.1-11.1
+- rebuilt
+
+* Fri Feb 13 2004 Elliot Lee <sopwith@redhat.com> 1.3.1-11
+- rebuilt
+
+* Mon Feb  9 2004 Nalin Dahyabhai <nalin@redhat.com> 1.3.1-10
+- catch krb4 send_to_kdc cases in kdc preference patch
+
+* Mon Feb  2 2004 Nalin Dahyabhai <nalin@redhat.com> 1.3.1-9
+- remove patch to set TERM in klogind which, combined with the upstream fix in
+  1.3.1, actually produces the bug now (#114762)
+
+* Mon Jan 19 2004 Nalin Dahyabhai <nalin@redhat.com> 1.3.1-8
+- when iterating over lists of interfaces which are "up" from getifaddrs(),
+  skip over those which have no address (#113347)
+
+* Mon Jan 12 2004 Nalin Dahyabhai <nalin@redhat.com>
+- prefer the kdc which last replied to a request when sending requests to kdcs
+
+* Mon Nov 24 2003 Nalin Dahyabhai <nalin@redhat.com> 1.3.1-7
+- fix combination of --with-netlib and --enable-dns (#82176)
+
+* Tue Nov 18 2003 Nalin Dahyabhai <nalin@redhat.com>
+- remove libdefault ticket_lifetime option from the default krb5.conf, it is
+  ignored by libkrb5
+
+* Thu Sep 25 2003 Nalin Dahyabhai <nalin@redhat.com> 1.3.1-6
+- fix bug in patch to make rlogind start login with a clean environment a la
+  netkit rlogin, spotted and fixed by Scott McClung
+
+* Tue Sep 23 2003 Nalin Dahyabhai <nalin@redhat.com> 1.3.1-5
+- include profile.d scriptlets in krb5-devel so that krb5-config will be in
+  the path if krb5-workstation isn't installed, reported by Kir Kolyshkin
+
+* Mon Sep  8 2003 Nalin Dahyabhai <nalin@redhat.com>
+- add more etypes (arcfour) to the default enctype list in kdc.conf
+- don't apply previous patch, refused upstream
+
+* Fri Sep  5 2003 Nalin Dahyabhai <nalin@redhat.com> 1.3.1-4
+- fix 32/64-bit bug storing and retrieving the issue_date in v4 credentials
+
+* Wed Sep 3 2003 Dan Walsh <dwalsh@redhat.com> 1.3.1-3
+- Don't check for write access on /etc/krb5.conf if SELinux
+
+* Tue Aug 26 2003 Nalin Dahyabhai <nalin@redhat.com> 1.3.1-2
+- fixup some int/pointer varargs wackiness
+
+* Tue Aug  5 2003 Nalin Dahyabhai <nalin@redhat.com> 1.3.1-1
+- rebuild
+
+* Mon Aug  4 2003 Nalin Dahyabhai <nalin@redhat.com> 1.3.1-0
+- update to 1.3.1
+
+* Thu Jul 24 2003 Nalin Dahyabhai <nalin@redhat.com> 1.3-2
+- pull fix for non-compliant encoding of salt field in etype-info2 preauth
+  data from 1.3.1 beta 1, until 1.3.1 is released.
+
+* Mon Jul 21 2003 Nalin Dahyabhai <nalin@redhat.com> 1.3-1
+- update to 1.3
+
+* Mon Jul  7 2003 Nalin Dahyabhai <nalin@redhat.com> 1.2.8-4
+- correctly use stdargs
+
+* Wed Jun 18 2003 Nalin Dahyabhai <nalin@redhat.com> 1.3-0.beta.4
+- test update to 1.3 beta 4
+- ditch statglue build option
+- krb5-devel requires e2fsprogs-devel, which now provides libss and libcom_err
+
+* Wed Jun 04 2003 Elliot Lee <sopwith@redhat.com>
+- rebuilt
+
+* Wed May 21 2003 Jeremy Katz <katzj@redhat.com> 1.2.8-2
+- gcc 3.3 doesn't implement varargs.h, include stdarg.h instead
+
+* Wed Apr  9 2003 Nalin Dahyabhai <nalin@redhat.com> 1.2.8-1
+- update to 1.2.8
+
+* Mon Mar 31 2003 Nalin Dahyabhai <nalin@redhat.com> 1.2.7-14
+- fix double-free of enc_part2 in krb524d
+
+* Fri Mar 21 2003 Nalin Dahyabhai <nalin@redhat.com> 1.2.7-13
+- update to latest patch kit for MITKRB5-SA-2003-004
+
+* Wed Mar 19 2003 Nalin Dahyabhai <nalin@redhat.com> 1.2.7-12
+- add patch included in MITKRB5-SA-2003-003 (CAN-2003-0028)
+
+* Mon Mar 17 2003 Nalin Dahyabhai <nalin@redhat.com> 1.2.7-11
+- add patches from patchkit from MITKRB5-SA-2003-004 (CAN-2003-0138 and
+  CAN-2003-0139)
+
+* Thu Mar  6 2003 Nalin Dahyabhai <nalin@redhat.com> 1.2.7-10
+- rebuild
+
+* Thu Mar  6 2003 Nalin Dahyabhai <nalin@redhat.com> 1.2.7-9
+- fix buffer underrun in unparsing certain principals (CAN-2003-0082)
+
+* Tue Feb  4 2003 Nalin Dahyabhai <nalin@redhat.com> 1.2.7-8
+- add patch to document the reject-bad-transited option in kdc.conf
+
+* Mon Feb  3 2003 Nalin Dahyabhai <nalin@redhat.com>
+- add patch to fix server-side crashes when principals have no
+  components (CAN-2003-0072)
+
+* Thu Jan 23 2003 Nalin Dahyabhai <nalin@redhat.com> 1.2.7-7
+- add patch from Mark Cox for exploitable bugs in ftp client
+
+* Wed Jan 22 2003 Tim Powers <timp@redhat.com>
+- rebuilt
+
+* Wed Jan 15 2003 Nalin Dahyabhai <nalin@redhat.com> 1.2.7-5
+- use PICFLAGS when building code from the ktany patch
+
+* Thu Jan  9 2003 Bill Nottingham <notting@redhat.com> 1.2.7-4
+- debloat
+
+* Tue Jan  7 2003 Jeremy Katz <katzj@redhat.com> 1.2.7-3
+- include .so.* symlinks as well as .so.*.*
+
+* Mon Dec  9 2002 Jakub Jelinek <jakub@redhat.com> 1.2.7-2
+- always #include <errno.h> to access errno, never do it directly
+- enable LFS on a bunch of other 32-bit arches
+
+* Wed Dec  4 2002 Nalin Dahyabhai <nalin@redhat.com>
+- increase the maximum name length allowed by kuserok() to the higher value
+  used in development versions
+
+* Mon Dec  2 2002 Nalin Dahyabhai <nalin@redhat.com>
+- install src/krb524/README as README.krb524 in the -servers package,
+  includes information about converting for AFS principals
+
+* Fri Nov 15 2002 Nalin Dahyabhai <nalin@redhat.com> 1.2.7-1
+- update to 1.2.7
+- disable use of tcl
+
+* Mon Nov 11 2002 Nalin Dahyabhai <nalin@redhat.com>
+- update to 1.2.7-beta2 (internal only, not for release), dropping dnsparse
+  and kadmind4 fixes
+
+* Wed Oct 23 2002 Nalin Dahyabhai <nalin@redhat.com> 1.2.6-5
+- add patch for buffer overflow in kadmind4 (not used by default)
+
+* Fri Oct 11 2002 Nalin Dahyabhai <nalin@redhat.com> 1.2.6-4
+- drop a hunk from the dnsparse patch which is actually redundant (thanks to
+  Tom Yu)
+
+* Wed Oct  9 2002 Nalin Dahyabhai <nalin@redhat.com> 1.2.6-3
+- patch to handle truncated dns responses
+
+* Mon Oct  7 2002 Nalin Dahyabhai <nalin@redhat.com> 1.2.6-2
+- remove hashless key types from the default kdc.conf, they're not supposed to
+  be there, noted by Sam Hartman on krbdev
+
+* Fri Sep 27 2002 Nalin Dahyabhai <nalin@redhat.com> 1.2.6-1
+- update to 1.2.6
+
+* Fri Sep 13 2002 Nalin Dahyabhai <nalin@redhat.com> 1.2.5-7
+- use %%{_lib} for the sake of multilib systems
+
+* Fri Aug  2 2002 Nalin Dahyabhai <nalin@redhat.com> 1.2.5-6
+- add patch from Tom Yu for exploitable bugs in rpc code used in kadmind
+
+* Tue Jul 23 2002 Nalin Dahyabhai <nalin@redhat.com> 1.2.5-5
+- fix bug in krb5.csh which would cause the path check to always succeed
+
+* Fri Jul 19 2002 Jakub Jelinek <jakub@redhat.com> 1.2.5-4
+- build even libdb.a with -fPIC and $RPM_OPT_FLAGS.
+
+* Fri Jun 21 2002 Tim Powers <timp@redhat.com>
+- automated rebuild
+
+* Sun May 26 2002 Tim Powers <timp@redhat.com>
+- automated rebuild
+
+* Wed May  1 2002 Nalin Dahyabhai <nalin@redhat.com> 1.2.5-1
+- update to 1.2.5
+- disable statglue
+
+* Fri Mar  1 2002 Nalin Dahyabhai <nalin@redhat.com> 1.2.4-1
+- update to 1.2.4
+
+* Wed Feb 20 2002 Nalin Dahyabhai <nalin@redhat.com> 1.2.3-5
+- rebuild in new environment
+- reenable statglue
+
+* Sat Jan 26 2002 Florian La Roche <Florian.LaRoche@redhat.de>
+- prereq chkconfig for the server subpackage
+
+* Wed Jan 16 2002 Nalin Dahyabhai <nalin@redhat.com> 1.2.3-3
+- build without -g3, which gives us large static libraries in -devel
+
+* Tue Jan 15 2002 Nalin Dahyabhai <nalin@redhat.com> 1.2.3-2
+- reintroduce ld.so.conf munging in the -libs %%post
+
+* Thu Jan 10 2002 Nalin Dahyabhai <nalin@redhat.com> 1.2.3-1
+- rename the krb5 package back to krb5-libs; the previous rename caused
+  something of an uproar
+- update to 1.2.3, which includes the FTP and telnetd fixes
+- configure without --enable-dns-for-kdc --enable-dns-for-realm, which now set
+  the default behavior instead of enabling the feature (the feature is enabled
+  by --enable-dns, which we still use)
+- reenable optimizations on Alpha
+- support more encryption types in the default kdc.conf (heads-up from post
+  to comp.protocols.kerberos by Jason Heiss)
+
+* Fri Aug  3 2001 Nalin Dahyabhai <nalin@redhat.com> 1.2.2-14
+- rename the krb5-libs package to krb5 (naming a subpackage -libs when there
+  is no main package is silly)
+- move defaults for PAM to the appdefaults section of krb5.conf -- this is
+  the area where the krb5_appdefault_* functions look for settings)
+- disable statglue (warning: breaks binary compatibility with previous
+  packages, but has to be broken at some point to work correctly with
+  unpatched versions built with newer versions of glibc)
+
+* Fri Aug  3 2001 Nalin Dahyabhai <nalin@redhat.com> 1.2.2-13
+- bump release number and rebuild
+
+* Wed Aug  1 2001 Nalin Dahyabhai <nalin@redhat.com>
+- add patch to fix telnetd vulnerability
+
+* Fri Jul 20 2001 Nalin Dahyabhai <nalin@redhat.com>
+- tweak statglue.c to fix stat/stat64 aliasing problems
+- be cleaner in use of gcc to build shlibs
+
+* Wed Jul 11 2001 Nalin Dahyabhai <nalin@redhat.com>
+- use gcc to build shared libraries
+
+* Wed Jun 27 2001 Nalin Dahyabhai <nalin@redhat.com>
+- add patch to support "ANY" keytab type (i.e.,
+  "default_keytab_name = ANY:FILE:/etc/krb5.keytab,SRVTAB:/etc/srvtab"
+  patch from Gerald Britton, #42551)
+- build with -D_FILE_OFFSET_BITS=64 to get large file I/O in ftpd (#30697)
+- patch ftpd to use long long and %%lld format specifiers to support the SIZE
+  command on large files (also #30697)
+- don't use LOG_AUTH as an option value when calling openlog() in ksu (#45965)
+- implement reload in krb5kdc and kadmind init scripts (#41911)
+- lose the krb5server init script (not using it any more)
+
+* Sun Jun 24 2001 Elliot Lee <sopwith@redhat.com>
+- Bump release + rebuild.
+
+* Tue May 29 2001 Nalin Dahyabhai <nalin@redhat.com>
+- pass some structures by address instead of on the stack in krb5kdc
+
+* Tue May 22 2001 Nalin Dahyabhai <nalin@redhat.com>
+- rebuild in new environment
+
+* Thu Apr 26 2001 Nalin Dahyabhai <nalin@redhat.com>
+- add patch from Tom Yu to fix ftpd overflows (#37731)
+
+* Wed Apr 18 2001 Than Ngo <than@redhat.com>
+- disable optimizations on the alpha again
+
+* Fri Mar 30 2001 Nalin Dahyabhai <nalin@redhat.com>
+- add in glue code to make sure that libkrb5 continues to provide a
+  weak copy of stat()
+
+* Thu Mar 15 2001 Nalin Dahyabhai <nalin@redhat.com>
+- build alpha with -O0 for now
+
+* Thu Mar  8 2001 Nalin Dahyabhai <nalin@redhat.com>
+- fix the kpropd init script
+
+* Mon Mar  5 2001 Nalin Dahyabhai <nalin@redhat.com>
+- update to 1.2.2, which fixes some bugs relating to empty ETYPE-INFO
+- re-enable optimization on Alpha
+
+* Thu Feb  8 2001 Nalin Dahyabhai <nalin@redhat.com>
+- build alpha with -O0 for now
+- own %{_var}/kerberos
+
+* Tue Feb  6 2001 Nalin Dahyabhai <nalin@redhat.com>
+- own the directories which are created for each package (#26342)
+
+* Tue Jan 23 2001 Nalin Dahyabhai <nalin@redhat.com>
+- gettextize init scripts
+
+* Fri Jan 19 2001 Nalin Dahyabhai <nalin@redhat.com>
+- add some comments to the ksu patches for the curious
+- re-enable optimization on alphas
+
+* Mon Jan 15 2001 Nalin Dahyabhai <nalin@redhat.com>
+- fix krb5-send-pr (#18932) and move it from -server to -workstation
+- buildprereq libtermcap-devel
+- temporariliy disable optimization on alphas
+- gettextize init scripts
+
+* Tue Dec  5 2000 Nalin Dahyabhai <nalin@redhat.com>
+- force -fPIC
+
+* Fri Dec  1 2000 Nalin Dahyabhai <nalin@redhat.com>
+- rebuild in new environment
+
+* Tue Oct 31 2000 Nalin Dahyabhai <nalin@redhat.com>
+- add bison as a BuildPrereq (#20091)
+
+* Mon Oct 30 2000 Nalin Dahyabhai <nalin@redhat.com>
+- change /usr/dict/words to /usr/share/dict/words in default kdc.conf (#20000)
+
+* Thu Oct  5 2000 Nalin Dahyabhai <nalin@redhat.com>
+- apply kpasswd bug fixes from David Wragg
+
+* Wed Oct  4 2000 Nalin Dahyabhai <nalin@redhat.com>
+- make krb5-libs obsolete the old krb5-configs package (#18351)
+- don't quit from the kpropd init script if there's no principal database so
+  that you can propagate the first time without running kpropd manually
+- don't complain if /etc/ld.so.conf doesn't exist in the -libs %post
+
+* Tue Sep 12 2000 Nalin Dahyabhai <nalin@redhat.com>
+- fix credential forwarding problem in klogind (goof in KRB5CCNAME handling)
+  (#11588)
+- fix heap corruption bug in FTP client (#14301)
+
+* Wed Aug 16 2000 Nalin Dahyabhai <nalin@redhat.com>
+- fix summaries and descriptions
+- switched the default transfer protocol from PORT to PASV as proposed on
+  bugzilla (#16134), and to match the regular ftp package's behavior
+
+* Wed Jul 19 2000 Jeff Johnson <jbj@redhat.com>
+- rebuild to compress man pages.
+
+* Sat Jul 15 2000 Bill Nottingham <notting@redhat.com>
+- move initscript back
+
+* Fri Jul 14 2000 Nalin Dahyabhai <nalin@redhat.com>
+- disable servers by default to keep linuxconf from thinking they need to be
+  started when they don't
+
+* Thu Jul 13 2000 Prospector <bugzilla@redhat.com>
+- automatic rebuild
+
+* Mon Jul 10 2000 Nalin Dahyabhai <nalin@redhat.com>
+- change cleanup code in post to not tickle chkconfig
+- add grep as a Prereq: for -libs
+
+* Thu Jul  6 2000 Nalin Dahyabhai <nalin@redhat.com>
+- move condrestarts to postun
+- make xinetd configs noreplace
+- add descriptions to xinetd configs
+- add /etc/init.d as a prereq for the -server package
+- patch to properly truncate $TERM in krlogind
+
+* Fri Jun 30 2000 Nalin Dahyabhai <nalin@redhat.com>
+- update to 1.2.1
+- back out Tom Yu's patch, which is a big chunk of the 1.2 -> 1.2.1 update
+- start using the official source tarball instead of its contents
+
+* Thu Jun 29 2000 Nalin Dahyabhai <nalin@redhat.com>
+- Tom Yu's patch to fix compatibility between 1.2 kadmin and 1.1.1 kadmind
+- pull out 6.2 options in the spec file (sonames changing in 1.2 means it's not
+  compatible with other stuff in 6.2, so no need)
+
+* Wed Jun 28 2000 Nalin Dahyabhai <nalin@redhat.com>
+- tweak graceful start/stop logic in post and preun
+
+* Mon Jun 26 2000 Nalin Dahyabhai <nalin@redhat.com>
+- update to the 1.2 release
+- ditch a lot of our patches which went upstream
+- enable use of DNS to look up things at build-time
+- disable use of DNS to look up things at run-time in default krb5.conf
+- change ownership of the convert-config-files script to root.root
+- compress PS docs
+- fix some typos in the kinit man page
+- run condrestart in server post, and shut down in preun
+
+* Mon Jun 19 2000 Nalin Dahyabhai <nalin@redhat.com>
+- only remove old krb5server init script links if the init script is there
+
+* Sat Jun 17 2000 Nalin Dahyabhai <nalin@redhat.com>
+- disable kshell and eklogin by default
+
+* Thu Jun 15 2000 Nalin Dahyabhai <nalin@redhat.com>
+- patch mkdir/rmdir problem in ftpcmd.y
+- add condrestart option to init script
+- split the server init script into three pieces and add one for kpropd
+
+* Wed Jun 14 2000 Nalin Dahyabhai <nalin@redhat.com>
+- make sure workstation servers are all disabled by default
+- clean up krb5server init script
+
+* Fri Jun  9 2000 Nalin Dahyabhai <nalin@redhat.com>
+- apply second set of buffer overflow fixes from Tom Yu
+- fix from Dirk Husung for a bug in buffer cleanups in the test suite
+- work around possibly broken rev binary in running test suite
+- move default realm configs from /var/kerberos to %{_var}/kerberos
+
+* Tue Jun  6 2000 Nalin Dahyabhai <nalin@redhat.com>
+- make ksu and v4rcp owned by root
+
+* Sat Jun  3 2000 Nalin Dahyabhai <nalin@redhat.com>
+- use %%{_infodir} to better comply with FHS
+- move .so files to -devel subpackage
+- tweak xinetd config files (bugs #11833, #11835, #11836, #11840)
+- fix package descriptions again
+
+* Wed May 24 2000 Nalin Dahyabhai <nalin@redhat.com>
+- change a LINE_MAX to 1024, fix from Ken Raeburn
+- add fix for login vulnerability in case anyone rebuilds without krb4 compat
+- add tweaks for byte-swapping macros in krb.h, also from Ken
+- add xinetd config files
+- make rsh and rlogin quieter
+- build with debug to fix credential forwarding
+- add rsh as a build-time req because the configure scripts look for it to
+  determine paths
+
+* Wed May 17 2000 Nalin Dahyabhai <nalin@redhat.com>
+- fix config_subpackage logic
+
+* Tue May 16 2000 Nalin Dahyabhai <nalin@redhat.com>
+- remove setuid bit on v4rcp and ksu in case the checks previously added
+  don't close all of the problems in ksu
+- apply patches from Jeffrey Schiller to fix overruns Chris Evans found
+- reintroduce configs subpackage for use in the errata
+- add PreReq: sh-utils
+
+* Mon May 15 2000 Nalin Dahyabhai <nalin@redhat.com>
+- fix double-free in the kdc (patch merged into MIT tree)
+- include convert-config-files script as a documentation file
+
+* Wed May 03 2000 Nalin Dahyabhai <nalin@redhat.com>
+- patch ksu man page because the -C option never works
+- add access() checks and disable debug mode in ksu
+- modify default ksu build arguments to specify more directories in CMD_PATH
+  and to use getusershell()
+
+* Wed May 03 2000 Bill Nottingham <notting@redhat.com>
+- fix configure stuff for ia64
+
+* Mon Apr 10 2000 Nalin Dahyabhai <nalin@redhat.com>
+- add LDCOMBINE=-lc to configure invocation to use libc versioning (bug #10653)
+- change Requires: for/in subpackages to include %{version}
+
+* Wed Apr 05 2000 Nalin Dahyabhai <nalin@redhat.com>
+- add man pages for kerberos(1), kvno(1), .k5login(5)
+- add kvno to -workstation
+
+* Mon Apr 03 2000 Nalin Dahyabhai <nalin@redhat.com>
+- Merge krb5-configs back into krb5-libs.  The krb5.conf file is marked as
+  a %%config file anyway.
+- Make krb5.conf a noreplace config file.
+
+* Thu Mar 30 2000 Nalin Dahyabhai <nalin@redhat.com>
+- Make klogind pass a clean environment to children, like NetKit's rlogind does.
+
+* Wed Mar 08 2000 Nalin Dahyabhai <nalin@redhat.com>
+- Don't enable the server by default.
+- Compress info pages.
+- Add defaults for the PAM module to krb5.conf
+
+* Mon Mar 06 2000 Nalin Dahyabhai <nalin@redhat.com>
+- Correct copyright: it's exportable now, provided the proper paperwork is
+  filed with the government.
+
+* Fri Mar 03 2000 Nalin Dahyabhai <nalin@redhat.com>
+- apply Mike Friedman's patch to fix format string problems
+- don't strip off argv[0] when invoking regular rsh/rlogin
+
+* Thu Mar 02 2000 Nalin Dahyabhai <nalin@redhat.com>
+- run kadmin.local correctly at startup
+
+* Mon Feb 28 2000 Nalin Dahyabhai <nalin@redhat.com>
+- pass absolute path to kadm5.keytab if/when extracting keys at startup
+
+* Sat Feb 19 2000 Nalin Dahyabhai <nalin@redhat.com>
+- fix info page insertions
+
+* Wed Feb  9 2000 Nalin Dahyabhai <nalin@redhat.com>
+- tweak server init script to automatically extract kadm5 keys if
+  /var/kerberos/krb5kdc/kadm5.keytab doesn't exist yet
+- adjust package descriptions
+
+* Thu Feb  3 2000 Nalin Dahyabhai <nalin@redhat.com>
+- fix for potentially gzipped man pages
+
+* Fri Jan 21 2000 Nalin Dahyabhai <nalin@redhat.com>
+- fix comments in krb5-configs
+
+* Fri Jan  7 2000 Nalin Dahyabhai <nalin@redhat.com>
+- move /usr/kerberos/bin to end of PATH
+
+* Tue Dec 28 1999 Nalin Dahyabhai <nalin@redhat.com>
+- install kadmin header files
+
+* Tue Dec 21 1999 Nalin Dahyabhai <nalin@redhat.com>
+- patch around TIOCGTLC defined on alpha and remove warnings from libpty.h
+- add installation of info docs
+- remove krb4 compat patch because it doesn't fix workstation-side servers
+
+* Mon Dec 20 1999 Nalin Dahyabhai <nalin@redhat.com>
+- remove hesiod dependency at build-time
+
+* Sun Dec 19 1999 Nalin Dahyabhai <nsdahya1@eos.ncsu.edu>
+- rebuild on 1.1.1
+
+* Thu Oct  7 1999 Nalin Dahyabhai <nsdahya1@eos.ncsu.edu>
+- clean up init script for server, verify that it works [jlkatz]
+- clean up rotation script so that rc likes it better
+- add clean stanza
+
+* Mon Oct  4 1999 Nalin Dahyabhai <nsdahya1@eos.ncsu.edu>
+- backed out ncurses and makeshlib patches
+- update for krb5-1.1
+- add KDC rotation to rc.boot, based on ideas from Michael's C version
+
+* Mon Sep 26 1999 Nalin Dahyabhai <nsdahya1@eos.ncsu.edu>
+- added -lncurses to telnet and telnetd makefiles
+
+* Mon Jul  5 1999 Nalin Dahyabhai <nsdahya1@eos.ncsu.edu>
+- added krb5.csh and krb5.sh to /etc/profile.d
+
+* Mon Jun 22 1999 Nalin Dahyabhai <nsdahya1@eos.ncsu.edu>
+- broke out configuration files
+
+* Mon Jun 14 1999 Nalin Dahyabhai <nsdahya1@eos.ncsu.edu>
+- fixed server package so that it works now
+
+* Sat May 15 1999 Nalin Dahyabhai <nsdahya1@eos.ncsu.edu>
+- started changelog (previous package from zedz.net)
+- updated existing 1.0.5 RPM from Eos Linux to krb5 1.0.6
+- added --force to makeinfo commands to skip errors during build
+
+%prep
+%setup -q
+%patch2  -p1 -b .manpage-paths
+%patch3  -p1 -b .netkit-rsh
+%patch4  -p1 -b .rlogind-environ
+%patch5  -p1 -b .ksu-access
+%patch6  -p1 -b .ksu-path
+%patch9  -p1 -b .brokenrev
+%patch11 -p1 -b .passive
+%patch12 -p1 -b .ktany
+%patch13 -p1 -b .large-file
+%patch14 -p1 -b .ftp-glob
+%patch15 -p1 -b .check
+%patch16 -p1 -b .no-rpath
+%patch18 -p1 -b .reject-bad-transited
+%if %{WITH_SELINUX}
+%patch21 -p1 -b .selinux
+%endif
+%patch23 -p1 -b .dns
+%patch25 -p1 -b .null
+# Removes a malloc(0) case, nothing more.
+# %patch26 -p1 -b .efence
+%patch27 -p1 -b .rcp-sendlarge
+%patch29 -p1 -b .kprop-mktemp
+%patch30 -p1 -b .send-pr-tempfile
+%patch32 -p1 -b .ncurses
+%patch33 -p1 -b .io
+%patch35 -p1 -b .fclose
+%patch36 -p1 -b .rcp-markus
+%patch39 -p1 -b .api
+%patch40 -p1 -b .telnet-environ
+%patch41 -p1 -b .login-lpass
+%patch44 -p1 -b .enospc
+%patch45 -p1 -b .gssinit
+pushd src
+%patch46 -p0 -b .2006-001
+popd
+cp src/krb524/README README.krb524
+gzip doc/*.ps
+%patch1000 -p1 -b .scripts
+cd src
+top=`pwd`
+for configurein in `find -name configure.in -type f` ; do
+	pushd `dirname $configurein`
+	autoconf -I "$top"
+	popd
+done
+
+%build
+cd src
+INCLUDES=-I%{_includedir}/et
+# Get LFS support on systems that need it which aren't already 64-bit.
+%ifarch %{ix86} s390 ppc sparc
+DEFINES="-D_FILE_OFFSET_BITS=64" ; export DEFINES
+%endif
+CFLAGS="`echo $RPM_OPT_FLAGS $DEFINES $INCLUDES -fPIC`"
+CPPFLAGS="`echo $DEFINES $INCLUDES`"
+%configure \
+	CC=%{__cc} \
+	CFLAGS="$CFLAGS" \
+	LDFLAGS="-pie" \
+	CPPFLAGS="$CPPFLAGS" \
+	SS_LIB="-lss -lcurses" \
+	--enable-shared --enable-static \
+	--bindir=%{krb5prefix}/bin \
+	--mandir=%{krb5prefix}/man \
+	--sbindir=%{krb5prefix}/sbin \
+	--datadir=%{krb5prefix}/share \
+	--localstatedir=%{_var}/kerberos \
+	--with-krb4 \
+	--with-system-et \
+	--with-system-ss \
+	--with-netlib=-lresolv \
+	--without-tcl \
+	--enable-dns
+# Now build it.  Override the RPATH_FLAG and PROG_LIBPATH to drop the rpath, and
+# override LDCOMBINE to use gcc instead of ld to build shared libraries.
+make	RPATH_FLAG= PROG_RPATH= \
+	OBJLISTS="OBJS.ST OBJS.SH" \
+	LDCOMBINE='%{__cc} -shared -Wl,-soname=lib$(LIB)$(SHLIBSEXT) $(CFLAGS)'
+
+# Run the test suite.
+: make	RPATH_FLAG= PROG_RPATH= check TMPDIR=%{_tmppath}
+
+%install
+[ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT
+
+# Shell scripts wrappers for Kerberized rsh and rlogin.
+mkdir -p $RPM_BUILD_ROOT%{krb5prefix}/bin
+install -m 755 $RPM_SOURCE_DIR/{krsh,krlogin} $RPM_BUILD_ROOT/%{krb5prefix}/bin/
+
+# Info docs.
+mkdir -p $RPM_BUILD_ROOT%{_infodir}
+install -m 644 doc/*.info* $RPM_BUILD_ROOT%{_infodir}/
+# Forcefully compress the info pages so that we know the right file name to
+# pass to install-info in %%post.
+gzip $RPM_BUILD_ROOT%{_infodir}/*.info*
+
+# Sample KDC config files.
+mkdir -p $RPM_BUILD_ROOT%{_var}/kerberos/krb5kdc
+install -m 644 $RPM_SOURCE_DIR/kdc.conf  $RPM_BUILD_ROOT%{_var}/kerberos/krb5kdc/
+install -m 644 $RPM_SOURCE_DIR/kadm5.acl $RPM_BUILD_ROOT%{_var}/kerberos/krb5kdc/
+
+# Login-time scriptlets to fix the PATH variable.
+mkdir -p $RPM_BUILD_ROOT/etc/profile.d
+install -m 644 $RPM_SOURCE_DIR/krb5.conf $RPM_BUILD_ROOT/etc/krb5.conf
+install -m 755 $RPM_SOURCE_DIR/krb5.{sh,csh} $RPM_BUILD_ROOT/etc/profile.d/
+
+# Server init scripts.
+mkdir -p $RPM_BUILD_ROOT/etc/rc.d/init.d
+install -m 755 $RPM_SOURCE_DIR/krb5kdc.init $RPM_BUILD_ROOT/etc/rc.d/init.d/krb5kdc
+install -m 755 $RPM_SOURCE_DIR/kadmind.init $RPM_BUILD_ROOT/etc/rc.d/init.d/kadmin
+install -m 755 $RPM_SOURCE_DIR/kpropd.init $RPM_BUILD_ROOT/etc/rc.d/init.d/kprop
+install -m 755 $RPM_SOURCE_DIR/krb524d.init $RPM_BUILD_ROOT/etc/rc.d/init.d/krb524
+mkdir -p $RPM_BUILD_ROOT/etc/sysconfig
+install -m 644 $RPM_SOURCE_DIR/krb5kdc.sysconfig $RPM_BUILD_ROOT/etc/sysconfig/krb5kdc
+install -m 644 $RPM_SOURCE_DIR/kadmin.sysconfig $RPM_BUILD_ROOT/etc/sysconfig/kadmin
+install -m 644 $RPM_SOURCE_DIR/krb524.sysconfig $RPM_BUILD_ROOT/etc/sysconfig/krb524
+
+# Xinetd configuration files.
+mkdir -p $RPM_BUILD_ROOT/etc/xinetd.d/
+for xinetd in eklogin klogin kshell ekrb5-telnet krb5-telnet gssftp ; do
+	install -m 644 $RPM_SOURCE_DIR/${xinetd}.xinetd \
+	$RPM_BUILD_ROOT/etc/xinetd.d/${xinetd}
+done
+
+# The rest of the binaries, headers, libraries, and docs.
+make -C src DESTDIR=$RPM_BUILD_ROOT install
+
+# Fixup permissions on header files.
+find $RPM_BUILD_ROOT/%{_includedir} -type d | xargs chmod 755
+find $RPM_BUILD_ROOT/%{_includedir} -type f | xargs chmod 644
+
+# Fixup strange shared library permissions.
+chmod 755 $RPM_BUILD_ROOT%{_libdir}/*.so{,.*}
+
+# Munge the krb5-config script to remove rpaths.
+sed "s|^CC_LINK=.*|CC_LINK='\$(CC) \$(PROG_LIBPATH)'|g" src/krb5-config > $RPM_BUILD_ROOT%{krb5prefix}/bin/krb5-config
+
+# Munge krb5-config yet again.  This is totally wrong for 64-bit, but chunks
+# of the no-rpath patch already conspire to strip out /usr/<anything> from the
+# list of link flags.
+sed -r -i -e 's|^libdir=/usr/lib(64)?$|libdir=/usr/lib|g' $RPM_BUILD_ROOT%{krb5prefix}/bin/krb5-config
+
+# Remove the randomly-generated compile-et filename comment from header files.
+sed -i -e 's|^ \* ettmp[^ \t]*\.h:$| * ettmpXXXXXX.h:|g' $RPM_BUILD_ROOT%{_includedir}/*{,/*}.h
+
+%if %{install_macro}
+# Install the autoconf macro.
+mkdir -p $RPM_BUILD_ROOT/%{_datadir}/aclocal
+install -m644 src/util/ac_check_krb5.m4 $RPM_BUILD_ROOT/%{_datadir}/aclocal/
+%endif
+
+%clean
+[ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT
+
+%post libs -p /sbin/ldconfig
+
+%postun libs -p /sbin/ldconfig
+
+%post server
+# Remove the init script for older servers.
+[ -x /etc/rc.d/init.d/krb5server ] && /sbin/chkconfig --del krb5server
+# Install the new ones.
+/sbin/chkconfig --add krb5kdc
+/sbin/chkconfig --add kadmin
+/sbin/chkconfig --add krb524
+/sbin/chkconfig --add kprop
+# Install info pages.
+/sbin/install-info %{_infodir}/krb425.info.gz %{_infodir}/dir
+/sbin/install-info %{_infodir}/krb5-admin.info.gz %{_infodir}/dir
+/sbin/install-info %{_infodir}/krb5-install.info.gz %{_infodir}/dir
+
+%preun server
+if [ "$1" = "0" ] ; then
+	/sbin/chkconfig --del krb5kdc
+	/sbin/chkconfig --del kadmin
+	/sbin/chkconfig --del krb524
+	/sbin/chkconfig --del kprop
+	/sbin/service krb5kdc stop > /dev/null 2>&1 || :
+	/sbin/service kadmin stop > /dev/null 2>&1 || :
+	/sbin/service krb524 stop > /dev/null 2>&1 || :
+	/sbin/service kprop stop > /dev/null 2>&1 || :
+	/sbin/install-info --delete %{_infodir}/krb425.info.gz %{_infodir}/dir
+	/sbin/install-info --delete %{_infodir}/krb5-admin.info.gz %{_infodir}/dir
+	/sbin/install-info --delete %{_infodir}/krb5-install.info.gz %{_infodir}/dir
+fi
+
+%postun server
+if [ "$1" -ge 1 ] ; then
+	/sbin/service krb5kdc condrestart > /dev/null 2>&1 || :
+	/sbin/service kadmin condrestart > /dev/null 2>&1 || :
+	/sbin/service krb524 condrestart > /dev/null 2>&1 || :
+	/sbin/service kprop condrestart > /dev/null 2>&1 || :
+fi
+
+%post workstation
+/sbin/install-info %{_infodir}/krb5-user.info %{_infodir}/dir
+/sbin/service xinetd reload > /dev/null 2>&1 || :
+
+%preun workstation
+if [ "$1" = "0" ] ; then
+	/sbin/install-info --delete %{_infodir}/krb5-user.info %{_infodir}/dir
+fi
+
+%postun workstation
+/sbin/service xinetd reload > /dev/null 2>&1 || :
+
+%files workstation
+%defattr(-,root,root)
+
+%config(noreplace) /etc/profile.d/krb5.sh
+%config(noreplace) /etc/profile.d/krb5.csh
+
+%config(noreplace) /etc/xinetd.d/*
+
+%docdir %{krb5prefix}/man
+%doc doc/krb5-user/*.html doc/user*.ps.gz src/config-files/services.append
+%doc doc/{ftp,kdestroy,kinit,klist,kpasswd,ksu,rcp,rlogin,rsh,telnet}.html
+%attr(0755,root,root) %doc src/config-files/convert-config-files
+%{_infodir}/krb5-user.info*
+
+%dir %{krb5prefix}
+%dir %{krb5prefix}/bin
+%dir %{krb5prefix}/man
+%dir %{krb5prefix}/man/man1
+%dir %{krb5prefix}/man/man5
+%dir %{krb5prefix}/man/man8
+%dir %{krb5prefix}/sbin
+
+%{krb5prefix}/bin/ftp
+%{krb5prefix}/man/man1/ftp.1*
+%{krb5prefix}/bin/gss-client
+%{krb5prefix}/bin/kdestroy
+%{krb5prefix}/man/man1/kdestroy.1*
+%{krb5prefix}/man/man1/kerberos.1*
+%{krb5prefix}/bin/kinit
+%{krb5prefix}/man/man1/kinit.1*
+%{krb5prefix}/bin/klist
+%{krb5prefix}/man/man1/klist.1*
+%{krb5prefix}/bin/kpasswd
+%{krb5prefix}/man/man1/kpasswd.1*
+%{krb5prefix}/bin/krb524init
+%{krb5prefix}/man/man1/krb524init.1*
+%{krb5prefix}/sbin/k5srvutil
+%{krb5prefix}/man/man8/k5srvutil.8*
+%{krb5prefix}/sbin/kadmin
+%{krb5prefix}/man/man8/kadmin.8*
+%{krb5prefix}/sbin/ktutil
+%{krb5prefix}/man/man8/ktutil.8*
+%attr(4755,root,root) %{krb5prefix}/bin/ksu
+%{krb5prefix}/man/man1/ksu.1*
+%{krb5prefix}/bin/kvno
+%{krb5prefix}/man/man1/kvno.1*
+%{krb5prefix}/bin/rcp
+%{krb5prefix}/man/man1/rcp.1*
+%{krb5prefix}/bin/krlogin
+%{krb5prefix}/bin/rlogin
+%{krb5prefix}/man/man1/rlogin.1*
+%{krb5prefix}/bin/krsh
+%{krb5prefix}/bin/rsh
+%{krb5prefix}/man/man1/rsh.1*
+%{krb5prefix}/bin/telnet
+%{krb5prefix}/man/man1/telnet.1*
+%{krb5prefix}/man/man1/tmac.doc*
+%attr(0755,root,root) %{krb5prefix}/bin/v4rcp
+%{krb5prefix}/man/man1/v4rcp.1*
+%{krb5prefix}/bin/sim_client
+%{krb5prefix}/bin/uuclient
+%{krb5prefix}/sbin/login.krb5
+%{krb5prefix}/man/man8/login.krb5.8*
+%{krb5prefix}/sbin/ftpd
+%{krb5prefix}/man/man8/ftpd.8*
+%{krb5prefix}/sbin/gss-server
+%{krb5prefix}/sbin/klogind
+%{krb5prefix}/man/man8/klogind.8*
+%{krb5prefix}/sbin/krb5-send-pr
+%{krb5prefix}/man/man1/krb5-send-pr.1*
+%{krb5prefix}/sbin/kshd
+%{krb5prefix}/man/man8/kshd.8*
+%{krb5prefix}/sbin/telnetd
+%{krb5prefix}/man/man8/telnetd.8*
+%{krb5prefix}/sbin/uuserver
+%{krb5prefix}/man/man5/.k5login.5*
+%{krb5prefix}/man/man5/krb5.conf.5*
+
+%files server
+%defattr(-,root,root)
+
+%config /etc/rc.d/init.d/krb5kdc
+%config /etc/rc.d/init.d/kadmin
+%config /etc/rc.d/init.d/krb524
+%config /etc/rc.d/init.d/kprop
+%config(noreplace) /etc/sysconfig/krb5kdc
+%config(noreplace) /etc/sysconfig/kadmin
+%config(noreplace) /etc/sysconfig/krb524
+
+%docdir %{krb5prefix}/man
+%doc doc/admin*.ps.gz doc/krb5-admin/*.html
+%doc doc/krb425*.ps.gz doc/krb425/*.html
+%doc doc/install*.ps.gz doc/krb5-install/*.html
+%doc README.krb524
+
+%{_infodir}/krb5-admin.info*
+%{_infodir}/krb5-install.info*
+%{_infodir}/krb425.info*
+
+%dir %{_var}/kerberos
+%dir %{_var}/kerberos/krb5kdc
+%config(noreplace) %{_var}/kerberos/krb5kdc/kdc.conf
+%config(noreplace) %{_var}/kerberos/krb5kdc/kadm5.acl
+
+%dir %{krb5prefix}/bin
+%dir %{_libdir}/krb5
+%dir %{_libdir}/krb5/plugins
+%dir %{_libdir}/krb5/plugins/kdb
+%{_libdir}/krb5/plugins/kdb/db2.so
+%dir %{krb5prefix}/man
+%dir %{krb5prefix}/man/man1
+%dir %{krb5prefix}/man/man5
+%dir %{krb5prefix}/man/man8
+%dir %{krb5prefix}/sbin
+
+%{krb5prefix}/man/man5/kdc.conf.5*
+%{krb5prefix}/sbin/kadmin.local
+%{krb5prefix}/man/man8/kadmin.local.8*
+%{krb5prefix}/sbin/kadmind
+%{krb5prefix}/man/man8/kadmind.8*
+%{krb5prefix}/sbin/kdb5_util
+%{krb5prefix}/man/man8/kdb5_util.8*
+%{krb5prefix}/sbin/kprop
+%{krb5prefix}/man/man8/kprop.8*
+%{krb5prefix}/sbin/kpropd
+%{krb5prefix}/man/man8/kpropd.8*
+%{krb5prefix}/sbin/krb524d
+%{krb5prefix}/man/man8/krb524d.8*
+%{krb5prefix}/sbin/krb5kdc
+%{krb5prefix}/man/man8/krb5kdc.8*
+%{krb5prefix}/sbin/sim_server
+# This is here for people who want to test their server, and also 
+# included in devel package for similar reasons.
+%{krb5prefix}/bin/sclient
+%{krb5prefix}/man/man1/sclient.1*
+%{krb5prefix}/sbin/sserver
+%{krb5prefix}/man/man8/sserver.8*
+
+%files libs
+%defattr(-,root,root)
+#%config /etc/rc.d/init.d/kdcrotate
+%config(noreplace) /etc/krb5.conf
+%docdir %{krb5prefix}/man
+%{_libdir}/lib*.so.*
+%dir %{_libdir}/krb5
+%dir %{_libdir}/krb5/plugins
+%{krb5prefix}/share
+
+%files devel
+%defattr(-,root,root)
+
+%config(noreplace) /etc/profile.d/krb5.sh
+%config(noreplace) /etc/profile.d/krb5.csh
+
+%docdir %{krb5prefix}/man
+%doc doc/api
+%doc doc/implement
+%doc doc/kadm5
+%doc doc/kadmin
+%doc doc/krb5-protocol
+%doc doc/rpc
+%doc doc/threads.txt
+
+%dir %{krb5prefix}
+%dir %{krb5prefix}/bin
+%dir %{krb5prefix}/man
+%dir %{krb5prefix}/man/man1
+%dir %{krb5prefix}/man/man8
+%dir %{krb5prefix}/sbin
+
+%{_includedir}/*
+%{_libdir}/lib*.a
+%{_libdir}/lib*.so
+%if %{install_macro}
+%{_datadir}/aclocal/*
+%endif
+
+%{krb5prefix}/bin/krb5-config
+%{krb5prefix}/bin/sclient
+%{krb5prefix}/man/man1/krb5-config.1*
+%{krb5prefix}/man/man1/sclient.1*
+%{krb5prefix}/man/man8/sserver.8*
+%{krb5prefix}/sbin/sserver
Index: /tags/fc9-eol/server/fedora/ref-prepatch/kuserok.c
===================================================================
--- /tags/fc9-eol/server/fedora/ref-prepatch/kuserok.c	(revision 1257)
+++ /tags/fc9-eol/server/fedora/ref-prepatch/kuserok.c	(revision 1257)
@@ -0,0 +1,171 @@
+/*
+ * lib/krb5/os/kuserok.c
+ *
+ * Copyright 1990,1993 by the Massachusetts Institute of Technology.
+ * All Rights Reserved.
+ *
+ * Export of this software from the United States of America may
+ *   require a specific license from the United States Government.
+ *   It is the responsibility of any person or organization contemplating
+ *   export to obtain such a license before exporting.
+ * 
+ * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and
+ * distribute this software and its documentation for any purpose and
+ * without fee is hereby granted, provided that the above copyright
+ * notice appear in all copies and that both that copyright notice and
+ * this permission notice appear in supporting documentation, and that
+ * the name of M.I.T. not be used in advertising or publicity pertaining
+ * to distribution of the software without specific, written prior
+ * permission.  Furthermore if you modify this software you must label
+ * your software as modified software and not distribute it in such a
+ * fashion that it might be confused with the original M.I.T. software.
+ * M.I.T. makes no representations about the suitability of
+ * this software for any purpose.  It is provided "as is" without express
+ * or implied warranty.
+ * 
+ *
+ * krb5_kuserok()
+ */
+
+#include "k5-int.h"
+#if !defined(_WIN32)		/* Not yet for Windows */
+#include <stdio.h>
+#include <pwd.h>
+
+#if defined(_AIX) && defined(_IBMR2)
+#include <sys/access.h>
+/* xlc has a bug with "const" */
+#define getpwnam(user) getpwnam((char *)user)
+#endif
+
+#define MAX_USERNAME 65
+
+#if defined(__APPLE__) && defined(__MACH__)
+#include <hfs/hfs_mount.h>	/* XXX */
+#define FILE_OWNER_OK(UID)  ((UID) == 0 || (UID) == UNKNOWNUID)
+#else
+#define FILE_OWNER_OK(UID)  ((UID) == 0)
+#endif
+
+/*
+ * Given a Kerberos principal "principal", and a local username "luser",
+ * determine whether user is authorized to login according to the
+ * authorization file ("~luser/.k5login" by default).  Returns TRUE
+ * if authorized, FALSE if not authorized.
+ *
+ * If there is no account for "luser" on the local machine, returns
+ * FALSE.  If there is no authorization file, and the given Kerberos
+ * name "server" translates to the same name as "luser" (using
+ * krb5_aname_to_lname()), returns TRUE.  Otherwise, if the authorization file
+ * can't be accessed, returns FALSE.  Otherwise, the file is read for
+ * a matching principal name, instance, and realm.  If one is found,
+ * returns TRUE, if none is found, returns FALSE.
+ *
+ * The file entries are in the format produced by krb5_unparse_name(),
+ * one entry per line.
+ *
+ */
+
+krb5_boolean KRB5_CALLCONV
+krb5_kuserok(krb5_context context, krb5_principal principal, const char *luser)
+{
+    struct stat sbuf;
+    struct passwd *pwd;
+    char pbuf[MAXPATHLEN];
+    krb5_boolean isok = FALSE;
+    FILE *fp;
+    char kuser[MAX_USERNAME];
+    char *princname;
+    char linebuf[BUFSIZ];
+    char *newline;
+    int gobble;
+
+    /* no account => no access */
+    char pwbuf[BUFSIZ];
+    struct passwd pwx;
+    if (k5_getpwnam_r(luser, &pwx, pwbuf, sizeof(pwbuf), &pwd) != 0)
+	return(FALSE);
+    (void) strncpy(pbuf, pwd->pw_dir, sizeof(pbuf) - 1);
+    pbuf[sizeof(pbuf) - 1] = '\0';
+    (void) strncat(pbuf, "/.k5login", sizeof(pbuf) - 1 - strlen(pbuf));
+
+    if (access(pbuf, F_OK)) {	 /* not accessible */
+	/*
+	 * if he's trying to log in as himself, and there is no .k5login file,
+	 * let him.  To find out, call
+	 * krb5_aname_to_localname to convert the principal to a name
+	 * which we can string compare. 
+	 */
+	if (!(krb5_aname_to_localname(context, principal,
+				      sizeof(kuser), kuser))
+	    && (strcmp(kuser, luser) == 0)) {
+	    return(TRUE);
+	}
+    }
+    if (krb5_unparse_name(context, principal, &princname))
+	return(FALSE);			/* no hope of matching */
+
+    /* open ~/.k5login */
+    if ((fp = fopen(pbuf, "r")) == NULL) {
+	free(princname);
+	return(FALSE);
+    }
+    /*
+     * For security reasons, the .k5login file must be owned either by
+     * the user himself, or by root.  Otherwise, don't grant access.
+     */
+    if (fstat(fileno(fp), &sbuf)) {
+	fclose(fp);
+	free(princname);
+	return(FALSE);
+    }
+    if (sbuf.st_uid != pwd->pw_uid && !FILE_OWNER_OK(sbuf.st_uid)) {
+	fclose(fp);
+	free(princname);
+	return(FALSE);
+    }
+
+    /* check each line */
+    while (!isok && (fgets(linebuf, BUFSIZ, fp) != NULL)) {
+	/* null-terminate the input string */
+	linebuf[BUFSIZ-1] = '\0';
+	newline = NULL;
+	/* nuke the newline if it exists */
+	if ((newline = strchr(linebuf, '\n')))
+	    *newline = '\0';
+	if (!strcmp(linebuf, princname)) {
+	    isok = TRUE;
+	    continue;
+	}
+	/* clean up the rest of the line if necessary */
+	if (!newline)
+	    while (((gobble = getc(fp)) != EOF) && gobble != '\n');
+    }
+    free(princname);
+    fclose(fp);
+    return(isok);
+}
+
+#else /* _WIN32 */
+
+/*
+ * If the given Kerberos name "server" translates to the same name as "luser"
+ * (using * krb5_aname_to_lname()), returns TRUE.
+ */
+krb5_boolean KRB5_CALLCONV
+krb5_kuserok(context, principal, luser)
+    krb5_context context;
+    krb5_principal principal;
+    const char *luser;
+{
+    char kuser[50];
+
+    if (krb5_aname_to_localname(context, principal, sizeof(kuser), kuser))
+        return FALSE;
+
+    if (strcmp(kuser, luser) == 0)
+	    return TRUE;
+
+    return FALSE;
+}
+#endif /* _WIN32 */
Index: /tags/fc9-eol/server/fedora/ref-prepatch/suexec.c
===================================================================
--- /tags/fc9-eol/server/fedora/ref-prepatch/suexec.c	(revision 1257)
+++ /tags/fc9-eol/server/fedora/ref-prepatch/suexec.c	(revision 1257)
@@ -0,0 +1,636 @@
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*
+ * suexec.c -- "Wrapper" support program for suEXEC behaviour for Apache
+ *
+ ***********************************************************************
+ *
+ * NOTE! : DO NOT edit this code!!!  Unless you know what you are doing,
+ *         editing this code might open up your system in unexpected
+ *         ways to would-be crackers.  Every precaution has been taken
+ *         to make this code as safe as possible; alter it at your own
+ *         risk.
+ *
+ ***********************************************************************
+ *
+ *
+ */
+
+#include "apr.h"
+#include "ap_config.h"
+#include "suexec.h"
+
+#include <sys/param.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <string.h>
+#include <time.h>
+#if APR_HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+#include <stdio.h>
+#include <stdarg.h>
+#include <stdlib.h>
+
+#ifdef HAVE_PWD_H
+#include <pwd.h>
+#endif
+
+#ifdef HAVE_GRP_H
+#include <grp.h>
+#endif
+
+/*
+ ***********************************************************************
+ * There is no initgroups() in QNX, so I believe this is safe :-)
+ * Use cc -osuexec -3 -O -mf -DQNX suexec.c to compile.
+ *
+ * May 17, 1997.
+ * Igor N. Kovalenko -- infoh mail.wplus.net
+ ***********************************************************************
+ */
+
+#if defined(NEED_INITGROUPS)
+int initgroups(const char *name, gid_t basegid)
+{
+    /* QNX and MPE do not appear to support supplementary groups. */
+    return 0;
+}
+#endif
+
+#if defined(SUNOS4)
+extern char *sys_errlist[];
+#define strerror(x) sys_errlist[(x)]
+#endif
+
+#if defined(PATH_MAX)
+#define AP_MAXPATH PATH_MAX
+#elif defined(MAXPATHLEN)
+#define AP_MAXPATH MAXPATHLEN
+#else
+#define AP_MAXPATH 8192
+#endif
+
+#define AP_ENVBUF 256
+
+extern char **environ;
+static FILE *log = NULL;
+
+static const char *const safe_env_lst[] =
+{
+    /* variable name starts with */
+    "HTTP_",
+    "SSL_",
+
+    /* variable name is */
+    "AUTH_TYPE=",
+    "CONTENT_LENGTH=",
+    "CONTENT_TYPE=",
+    "DATE_GMT=",
+    "DATE_LOCAL=",
+    "DOCUMENT_NAME=",
+    "DOCUMENT_PATH_INFO=",
+    "DOCUMENT_ROOT=",
+    "DOCUMENT_URI=",
+    "GATEWAY_INTERFACE=",
+    "HTTPS=",
+    "LAST_MODIFIED=",
+    "PATH_INFO=",
+    "PATH_TRANSLATED=",
+    "QUERY_STRING=",
+    "QUERY_STRING_UNESCAPED=",
+    "REMOTE_ADDR=",
+    "REMOTE_HOST=",
+    "REMOTE_IDENT=",
+    "REMOTE_PORT=",
+    "REMOTE_USER=",
+    "REDIRECT_HANDLER=",
+    "REDIRECT_QUERY_STRING=",
+    "REDIRECT_REMOTE_USER=",
+    "REDIRECT_STATUS=",
+    "REDIRECT_URL=",
+    "REQUEST_METHOD=",
+    "REQUEST_URI=",
+    "SCRIPT_FILENAME=",
+    "SCRIPT_NAME=",
+    "SCRIPT_URI=",
+    "SCRIPT_URL=",
+    "SERVER_ADMIN=",
+    "SERVER_NAME=",
+    "SERVER_ADDR=",
+    "SERVER_PORT=",
+    "SERVER_PROTOCOL=",
+    "SERVER_SIGNATURE=",
+    "SERVER_SOFTWARE=",
+    "UNIQUE_ID=",
+    "USER_NAME=",
+    "TZ=",
+    NULL
+};
+
+
+static void err_output(int is_error, const char *fmt, va_list ap)
+{
+#ifdef AP_LOG_EXEC
+    time_t timevar;
+    struct tm *lt;
+
+    if (!log) {
+        if ((log = fopen(AP_LOG_EXEC, "a")) == NULL) {
+            fprintf(stderr, "suexec failure: could not open log file\n");
+            perror("fopen");
+            exit(1);
+        }
+    }
+
+    if (is_error) {
+        fprintf(stderr, "suexec policy violation: see suexec log for more "
+                        "details\n");
+    }
+
+    time(&timevar);
+    lt = localtime(&timevar);
+
+    fprintf(log, "[%d-%.2d-%.2d %.2d:%.2d:%.2d]: ",
+            lt->tm_year + 1900, lt->tm_mon + 1, lt->tm_mday,
+            lt->tm_hour, lt->tm_min, lt->tm_sec);
+
+    vfprintf(log, fmt, ap);
+
+    fflush(log);
+#endif /* AP_LOG_EXEC */
+    return;
+}
+
+static void log_err(const char *fmt,...)
+{
+#ifdef AP_LOG_EXEC
+    va_list ap;
+
+    va_start(ap, fmt);
+    err_output(1, fmt, ap); /* 1 == is_error */
+    va_end(ap);
+#endif /* AP_LOG_EXEC */
+    return;
+}
+
+static void log_no_err(const char *fmt,...)
+{
+#ifdef AP_LOG_EXEC
+    va_list ap;
+
+    va_start(ap, fmt);
+    err_output(0, fmt, ap); /* 0 == !is_error */
+    va_end(ap);
+#endif /* AP_LOG_EXEC */
+    return;
+}
+
+static void clean_env(void)
+{
+    char pathbuf[512];
+    char **cleanenv;
+    char **ep;
+    int cidx = 0;
+    int idx;
+
+    /* While cleaning the environment, the environment should be clean.
+     * (e.g. malloc() may get the name of a file for writing debugging info.
+     * Bad news if MALLOC_DEBUG_FILE is set to /etc/passwd.  Sprintf() may be
+     * susceptible to bad locale settings....)
+     * (from PR 2790)
+     */
+    char **envp = environ;
+    char *empty_ptr = NULL;
+
+    environ = &empty_ptr; /* VERY safe environment */
+
+    if ((cleanenv = (char **) calloc(AP_ENVBUF, sizeof(char *))) == NULL) {
+        log_err("failed to malloc memory for environment\n");
+        exit(120);
+    }
+
+    sprintf(pathbuf, "PATH=%s", AP_SAFE_PATH);
+    cleanenv[cidx] = strdup(pathbuf);
+    cidx++;
+
+    for (ep = envp; *ep && cidx < AP_ENVBUF-1; ep++) {
+        for (idx = 0; safe_env_lst[idx]; idx++) {
+            if (!strncmp(*ep, safe_env_lst[idx],
+                         strlen(safe_env_lst[idx]))) {
+                cleanenv[cidx] = *ep;
+                cidx++;
+                break;
+            }
+        }
+    }
+
+    cleanenv[cidx] = NULL;
+
+    environ = cleanenv;
+}
+
+int main(int argc, char *argv[])
+{
+    int userdir = 0;        /* ~userdir flag             */
+    uid_t uid;              /* user information          */
+    gid_t gid;              /* target group placeholder  */
+    char *target_uname;     /* target user name          */
+    char *target_gname;     /* target group name         */
+    char *target_homedir;   /* target home directory     */
+    char *actual_uname;     /* actual user name          */
+    char *actual_gname;     /* actual group name         */
+    char *prog;             /* name of this program      */
+    char *cmd;              /* command to be executed    */
+    char cwd[AP_MAXPATH];   /* current working directory */
+    char dwd[AP_MAXPATH];   /* docroot working directory */
+    struct passwd *pw;      /* password entry holder     */
+    struct group *gr;       /* group entry holder        */
+    struct stat dir_info;   /* directory info holder     */
+    struct stat prg_info;   /* program info holder       */
+
+    /*
+     * Start with a "clean" environment
+     */
+    clean_env();
+
+    prog = argv[0];
+    /*
+     * Check existence/validity of the UID of the user
+     * running this program.  Error out if invalid.
+     */
+    uid = getuid();
+    if ((pw = getpwuid(uid)) == NULL) {
+        log_err("crit: invalid uid: (%ld)\n", uid);
+        exit(102);
+    }
+    /*
+     * See if this is a 'how were you compiled' request, and
+     * comply if so.
+     */
+    if ((argc > 1)
+        && (! strcmp(argv[1], "-V"))
+        && ((uid == 0)
+#ifdef _OSD_POSIX
+        /* User name comparisons are case insensitive on BS2000/OSD */
+            || (! strcasecmp(AP_HTTPD_USER, pw->pw_name)))
+#else  /* _OSD_POSIX */
+            || (! strcmp(AP_HTTPD_USER, pw->pw_name)))
+#endif /* _OSD_POSIX */
+        ) {
+#ifdef AP_DOC_ROOT
+        fprintf(stderr, " -D AP_DOC_ROOT=\"%s\"\n", AP_DOC_ROOT);
+#endif
+#ifdef AP_GID_MIN
+        fprintf(stderr, " -D AP_GID_MIN=%d\n", AP_GID_MIN);
+#endif
+#ifdef AP_HTTPD_USER
+        fprintf(stderr, " -D AP_HTTPD_USER=\"%s\"\n", AP_HTTPD_USER);
+#endif
+#ifdef AP_LOG_EXEC
+        fprintf(stderr, " -D AP_LOG_EXEC=\"%s\"\n", AP_LOG_EXEC);
+#endif
+#ifdef AP_SAFE_PATH
+        fprintf(stderr, " -D AP_SAFE_PATH=\"%s\"\n", AP_SAFE_PATH);
+#endif
+#ifdef AP_SUEXEC_UMASK
+        fprintf(stderr, " -D AP_SUEXEC_UMASK=%03o\n", AP_SUEXEC_UMASK);
+#endif
+#ifdef AP_UID_MIN
+        fprintf(stderr, " -D AP_UID_MIN=%d\n", AP_UID_MIN);
+#endif
+#ifdef AP_USERDIR_SUFFIX
+        fprintf(stderr, " -D AP_USERDIR_SUFFIX=\"%s\"\n", AP_USERDIR_SUFFIX);
+#endif
+        exit(0);
+    }
+    /*
+     * If there are a proper number of arguments, set
+     * all of them to variables.  Otherwise, error out.
+     */
+    if (argc < 4) {
+        log_err("too few arguments\n");
+        exit(101);
+    }
+    target_uname = argv[1];
+    target_gname = argv[2];
+    cmd = argv[3];
+
+    /*
+     * Check to see if the user running this program
+     * is the user allowed to do so as defined in
+     * suexec.h.  If not the allowed user, error out.
+     */
+#ifdef _OSD_POSIX
+    /* User name comparisons are case insensitive on BS2000/OSD */
+    if (strcasecmp(AP_HTTPD_USER, pw->pw_name)) {
+        log_err("user mismatch (%s instead of %s)\n", pw->pw_name, AP_HTTPD_USER);
+        exit(103);
+    }
+#else  /*_OSD_POSIX*/
+    if (strcmp(AP_HTTPD_USER, pw->pw_name)) {
+        log_err("user mismatch (%s instead of %s)\n", pw->pw_name, AP_HTTPD_USER);
+        exit(103);
+    }
+#endif /*_OSD_POSIX*/
+
+    /*
+     * Check for a leading '/' (absolute path) in the command to be executed,
+     * or attempts to back up out of the current directory,
+     * to protect against attacks.  If any are
+     * found, error out.  Naughty naughty crackers.
+     */
+    if ((cmd[0] == '/') || (!strncmp(cmd, "../", 3))
+        || (strstr(cmd, "/../") != NULL)) {
+        log_err("invalid command (%s)\n", cmd);
+        exit(104);
+    }
+
+    /*
+     * Check to see if this is a ~userdir request.  If
+     * so, set the flag, and remove the '~' from the
+     * target username.
+     */
+    if (!strncmp("~", target_uname, 1)) {
+        target_uname++;
+        userdir = 1;
+    }
+
+    /*
+     * Error out if the target username is invalid.
+     */
+    if (strspn(target_uname, "1234567890") != strlen(target_uname)) {
+        if ((pw = getpwnam(target_uname)) == NULL) {
+            log_err("invalid target user name: (%s)\n", target_uname);
+            exit(105);
+        }
+    }
+    else {
+        if ((pw = getpwuid(atoi(target_uname))) == NULL) {
+            log_err("invalid target user id: (%s)\n", target_uname);
+            exit(121);
+        }
+    }
+
+    /*
+     * Error out if the target group name is invalid.
+     */
+    if (strspn(target_gname, "1234567890") != strlen(target_gname)) {
+        if ((gr = getgrnam(target_gname)) == NULL) {
+            log_err("invalid target group name: (%s)\n", target_gname);
+            exit(106);
+        }
+        gid = gr->gr_gid;
+        actual_gname = strdup(gr->gr_name);
+    }
+    else {
+        gid = atoi(target_gname);
+        actual_gname = strdup(target_gname);
+    }
+
+#ifdef _OSD_POSIX
+    /*
+     * Initialize BS2000 user environment
+     */
+    {
+        pid_t pid;
+        int status;
+
+        switch (pid = ufork(target_uname)) {
+        case -1:    /* Error */
+            log_err("failed to setup bs2000 environment for user %s: %s\n",
+                    target_uname, strerror(errno));
+            exit(150);
+        case 0:     /* Child */
+            break;
+        default:    /* Father */
+            while (pid != waitpid(pid, &status, 0))
+                ;
+            /* @@@ FIXME: should we deal with STOP signals as well? */
+            if (WIFSIGNALED(status)) {
+                kill (getpid(), WTERMSIG(status));
+            }
+            exit(WEXITSTATUS(status));
+        }
+    }
+#endif /*_OSD_POSIX*/
+
+    /*
+     * Save these for later since initgroups will hose the struct
+     */
+    uid = pw->pw_uid;
+    actual_uname = strdup(pw->pw_name);
+    target_homedir = strdup(pw->pw_dir);
+
+    /*
+     * Log the transaction here to be sure we have an open log
+     * before we setuid().
+     */
+    log_no_err("uid: (%s/%s) gid: (%s/%s) cmd: %s\n",
+               target_uname, actual_uname,
+               target_gname, actual_gname,
+               cmd);
+
+    /*
+     * Error out if attempt is made to execute as root or as
+     * a UID less than AP_UID_MIN.  Tsk tsk.
+     */
+    if ((uid == 0) || (uid < AP_UID_MIN)) {
+        log_err("cannot run as forbidden uid (%d/%s)\n", uid, cmd);
+        exit(107);
+    }
+
+    /*
+     * Error out if attempt is made to execute as root group
+     * or as a GID less than AP_GID_MIN.  Tsk tsk.
+     */
+    if ((gid == 0) || (gid < AP_GID_MIN)) {
+        log_err("cannot run as forbidden gid (%d/%s)\n", gid, cmd);
+        exit(108);
+    }
+
+    /*
+     * Change UID/GID here so that the following tests work over NFS.
+     *
+     * Initialize the group access list for the target user,
+     * and setgid() to the target group. If unsuccessful, error out.
+     */
+    if (((setgid(gid)) != 0) || (initgroups(actual_uname, gid) != 0)) {
+        log_err("failed to setgid (%ld: %s)\n", gid, cmd);
+        exit(109);
+    }
+
+    /*
+     * setuid() to the target user.  Error out on fail.
+     */
+    if ((setuid(uid)) != 0) {
+        log_err("failed to setuid (%ld: %s)\n", uid, cmd);
+        exit(110);
+    }
+
+    /*
+     * Get the current working directory, as well as the proper
+     * document root (dependant upon whether or not it is a
+     * ~userdir request).  Error out if we cannot get either one,
+     * or if the current working directory is not in the docroot.
+     * Use chdir()s and getcwd()s to avoid problems with symlinked
+     * directories.  Yuck.
+     */
+    if (getcwd(cwd, AP_MAXPATH) == NULL) {
+        log_err("cannot get current working directory\n");
+        exit(111);
+    }
+
+    if (userdir) {
+        if (((chdir(target_homedir)) != 0) ||
+            ((chdir(AP_USERDIR_SUFFIX)) != 0) ||
+            ((getcwd(dwd, AP_MAXPATH)) == NULL) ||
+            ((chdir(cwd)) != 0)) {
+            log_err("cannot get docroot information (%s)\n", target_homedir);
+            exit(112);
+        }
+    }
+    else {
+        if (((chdir(AP_DOC_ROOT)) != 0) ||
+            ((getcwd(dwd, AP_MAXPATH)) == NULL) ||
+            ((chdir(cwd)) != 0)) {
+            log_err("cannot get docroot information (%s)\n", AP_DOC_ROOT);
+            exit(113);
+        }
+    }
+
+    if ((strncmp(cwd, dwd, strlen(dwd))) != 0) {
+        log_err("command not in docroot (%s/%s)\n", cwd, cmd);
+        exit(114);
+    }
+
+    /*
+     * Stat the cwd and verify it is a directory, or error out.
+     */
+    if (((lstat(cwd, &dir_info)) != 0) || !(S_ISDIR(dir_info.st_mode))) {
+        log_err("cannot stat directory: (%s)\n", cwd);
+        exit(115);
+    }
+
+    /*
+     * Error out if cwd is writable by others.
+     */
+    if ((dir_info.st_mode & S_IWOTH) || (dir_info.st_mode & S_IWGRP)) {
+        log_err("directory is writable by others: (%s)\n", cwd);
+        exit(116);
+    }
+
+    /*
+     * Error out if we cannot stat the program.
+     */
+    if (((lstat(cmd, &prg_info)) != 0) || (S_ISLNK(prg_info.st_mode))) {
+        log_err("cannot stat program: (%s)\n", cmd);
+        exit(117);
+    }
+
+    /*
+     * Error out if the program is writable by others.
+     */
+    if ((prg_info.st_mode & S_IWOTH) || (prg_info.st_mode & S_IWGRP)) {
+        log_err("file is writable by others: (%s/%s)\n", cwd, cmd);
+        exit(118);
+    }
+
+    /*
+     * Error out if the file is setuid or setgid.
+     */
+    if ((prg_info.st_mode & S_ISUID) || (prg_info.st_mode & S_ISGID)) {
+        log_err("file is either setuid or setgid: (%s/%s)\n", cwd, cmd);
+        exit(119);
+    }
+
+    /*
+     * Error out if the target name/group is different from
+     * the name/group of the cwd or the program.
+     */
+    if ((uid != dir_info.st_uid) ||
+        (gid != dir_info.st_gid) ||
+        (uid != prg_info.st_uid) ||
+        (gid != prg_info.st_gid)) {
+        log_err("target uid/gid (%ld/%ld) mismatch "
+                "with directory (%ld/%ld) or program (%ld/%ld)\n",
+                uid, gid,
+                dir_info.st_uid, dir_info.st_gid,
+                prg_info.st_uid, prg_info.st_gid);
+        exit(120);
+    }
+    /*
+     * Error out if the program is not executable for the user.
+     * Otherwise, she won't find any error in the logs except for
+     * "[error] Premature end of script headers: ..."
+     */
+    if (!(prg_info.st_mode & S_IXUSR)) {
+        log_err("file has no execute permission: (%s/%s)\n", cwd, cmd);
+        exit(121);
+    }
+
+#ifdef AP_SUEXEC_UMASK
+    /*
+     * umask() uses inverse logic; bits are CLEAR for allowed access.
+     */
+    if ((~AP_SUEXEC_UMASK) & 0022) {
+        log_err("notice: AP_SUEXEC_UMASK of %03o allows "
+                "write permission to group and/or other\n", AP_SUEXEC_UMASK);
+    }
+    umask(AP_SUEXEC_UMASK);
+#endif /* AP_SUEXEC_UMASK */
+
+    /*
+     * Be sure to close the log file so the CGI can't
+     * mess with it.  If the exec fails, it will be reopened
+     * automatically when log_err is called.  Note that the log
+     * might not actually be open if AP_LOG_EXEC isn't defined.
+     * However, the "log" cell isn't ifdef'd so let's be defensive
+     * and assume someone might have done something with it
+     * outside an ifdef'd AP_LOG_EXEC block.
+     */
+    if (log != NULL) {
+        fclose(log);
+        log = NULL;
+    }
+
+    /*
+     * Execute the command, replacing our image with its own.
+     */
+#ifdef NEED_HASHBANG_EMUL
+    /* We need the #! emulation when we want to execute scripts */
+    {
+        extern char **environ;
+
+        ap_execve(cmd, &argv[3], environ);
+    }
+#else /*NEED_HASHBANG_EMUL*/
+    execv(cmd, &argv[3]);
+#endif /*NEED_HASHBANG_EMUL*/
+
+    /*
+     * (I can't help myself...sorry.)
+     *
+     * Uh oh.  Still here.  Where's the kaboom?  There was supposed to be an
+     * EARTH-shattering kaboom!
+     *
+     * Oh well, log the failure and error out.
+     */
+    log_err("(%d)%s: exec failed (%s)\n", errno, strerror(errno), cmd);
+    exit(255);
+}
Index: /tags/fc9-eol/server/fedora/specs/accountadm.spec
===================================================================
--- /tags/fc9-eol/server/fedora/specs/accountadm.spec	(revision 1257)
+++ /tags/fc9-eol/server/fedora/specs/accountadm.spec	(revision 1257)
@@ -0,0 +1,68 @@
+Summary: scripts.mit.edu locker administration system
+Group: Applications/System
+Name: accountadm
+Version: 0.%{scriptsversion}
+Release: 0
+Vendor: The scripts.mit.edu Team (scripts@mit.edu)
+URL: http://scripts.mit.edu
+License: GPL
+Source: %{name}.tar.gz 
+BuildRoot: %{_tmppath}/%(%{__id_u} -n)-%{name}-%{version}-root
+BuildRequires: scripts-openafs-devel
+%define debug_package %{nil}
+Prereq: /usr/bin/fs, /usr/bin/pts
+
+%description 
+
+scripts.mit.edu locker administration system
+Contains:
+ - Perl script for checking whether a user is a locker admin <admof>
+ - setuid C program used to start a signup request <signup-scripts-frontend>
+ - Perl script that handles signup requests <signup-scripts-backend>
+ - vhostadd,vhostedit: admin tools for adding and editing virtualhosts
+ - cronload: userspace tool for setting crontab from Athena
+See http://scripts.mit.edu/wiki for more information.
+
+%prep
+%setup -q -n %{name}
+
+%build
+./configure --with-fs=/usr/bin/fs --with-pts=/usr/bin/pts
+make
+
+%install
+[ $RPM_BUILD_ROOT != / ] && rm -rf $RPM_BUILD_ROOT
+make install DESTDIR=$RPM_BUILD_ROOT prefix=/usr/local
+
+%clean
+[ $RPM_BUILD_ROOT != / ] && rm -rf $RPM_BUILD_ROOT
+
+%files
+%defattr(0644, root, root)
+/usr/local/etc/mbashrc
+%defattr(0755, root, root)
+/usr/local/bin/mbash
+/usr/local/bin/admof
+/usr/local/bin/cronload
+/usr/local/sbin/ssh-admof
+/usr/local/sbin/signup-scripts-backend
+/usr/local/sbin/vhostadd
+/usr/local/sbin/vhostedit
+%defattr(4755, signup, signup)
+/usr/local/sbin/signup-scripts-frontend
+
+%pre
+groupadd -g 102 signup || [ $? -eq 9 ]
+useradd -u 102 -g signup -d /afs/athena.mit.edu/contrib/scripts/signup -M signup || [ $? -eq 9 ]
+
+%postun
+if [ "$1" = "0" ] ; then
+   userdel signup
+fi
+
+%changelog
+* Wed Dec 31 2008  Quentin Smith <quentin@mit.edu> - 0.917-0
+- don't delete signup user on upgrades
+
+* Sat Sep 30 2006  Jeff Arnold <jbarnold@MIT.EDU> 0.00
+- prerelease
Index: /tags/fc9-eol/server/fedora/specs/athrun.spec
===================================================================
--- /tags/fc9-eol/server/fedora/specs/athrun.spec	(revision 1257)
+++ /tags/fc9-eol/server/fedora/specs/athrun.spec	(revision 1257)
@@ -0,0 +1,37 @@
+Summary: scripts.mit.edu version of Athena athrun utility
+Group: Applications/System
+Name: athrun
+Version: 0.%{scriptsversion}
+Release: 0
+Vendor: The scripts.mit.edu Team (scripts@mit.edu)
+URL: http://scripts.mit.edu
+License: MIT
+Source: %{name}.tar.gz 
+BuildRoot: %{_tmppath}/%(%{__id_u} -n)-%{name}-%{version}-root
+%define debug_package %{nil}
+
+%description 
+
+scripts.mit.edu version of Athena athrun utility
+
+%prep
+%setup -q -n %{name}
+
+%build
+./configure
+make
+
+%install
+[ $RPM_BUILD_ROOT != / ] && rm -rf $RPM_BUILD_ROOT
+make install DESTDIR=$RPM_BUILD_ROOT prefix=/usr/local
+
+%clean
+[ $RPM_BUILD_ROOT != / ] && rm -rf $RPM_BUILD_ROOT
+
+%files
+%defattr(0755, root, root)
+/usr/local/bin/athrun
+
+%changelog
+* Wed Jul 01 2009  Mitchell Berger <mitchb@MIT.EDU> 0.00
+- Initial version
Index: /tags/fc9-eol/server/fedora/specs/execsys.spec
===================================================================
--- /tags/fc9-eol/server/fedora/specs/execsys.spec	(revision 1257)
+++ /tags/fc9-eol/server/fedora/specs/execsys.spec	(revision 1257)
@@ -0,0 +1,70 @@
+Summary: scripts.mit.edu glue associated with file execution
+Group: Applications/System
+Name: execsys
+Version: 0.%{scriptsversion}
+Release: 0
+Vendor: The scripts.mit.edu Team (scripts@mit.edu)
+URL: http://scripts.mit.edu
+License: GPL
+Requires: xinetd
+Source: %{name}.tar.gz
+BuildRoot: %{_tmppath}/%(%{__id_u} -n)-%{name}-%{version}-root
+%define debug_package %{nil}
+
+%description
+
+scripts.mit.edu glue associated with file execution
+Contains:
+ - Apache configuration file <execsys.conf>
+ - binfmt_misc init script <execsys-binfmt>
+ - Binary for serving static content <static-cat>
+See http://scripts.mit.edu/wiki for more information.
+
+%prep
+%setup -q -n %{name}
+
+%build
+./configure --prefix=/usr/local --with-pl=/usr/bin/perl --with-php=/usr/bin/php-cgi --with-py=/usr/bin/python --with-exe=/usr/bin/mono
+make SYSCATDIR=/usr/local/sbin
+
+%install
+[ $RPM_BUILD_ROOT != / ] && rm -rf $RPM_BUILD_ROOT
+make install DESTDIR=$RPM_BUILD_ROOT SYSCATDIR=/usr/local/sbin
+
+%clean
+[ $RPM_BUILD_ROOT != / ] && rm -rf $RPM_BUILD_ROOT
+
+%files
+%defattr(0644, root, root)
+/etc/httpd/conf.d/execsys.conf
+%defattr(0755, root, root)
+/usr/local/bin/static-cat
+/etc/init.d/execsys-binfmt
+/usr/local/sbin/ldapize.pl
+/usr/local/sbin/svnproxy.pl
+/usr/libexec/scripts-trusted/svn
+/etc/xinetd.d/scripts-svn
+/usr/local/sbin/gitproxy.pl
+/usr/libexec/scripts-trusted/git
+/etc/xinetd.d/scripts-git
+
+%post
+chkconfig --add execsys-binfmt
+service execsys-binfmt start
+service xinetd reload
+
+%preun
+if [ "$1" = "0" ] ; then
+   service execsys-binfmt stop
+   chkconfig --del execsys-binfmt
+fi
+
+%postun
+service xinetd reload
+
+%changelog
+* Wed Dec 31 2008  Quentin Smith <quentin@mit.edu>
+- don't stop execsys on package updates
+
+* Sat Sep 30 2006  Jeff Arnold <jbarnold@MIT.EDU> 0.00
+- initial prerelease version
Index: /tags/fc9-eol/server/fedora/specs/httpd.spec.patch
===================================================================
--- /tags/fc9-eol/server/fedora/specs/httpd.spec.patch	(revision 1257)
+++ /tags/fc9-eol/server/fedora/specs/httpd.spec.patch	(revision 1257)
@@ -0,0 +1,59 @@
+--- httpd.spec.orig	2009-03-28 13:32:47.000000000 -0400
++++ httpd.spec	2009-03-28 14:20:15.000000000 -0400
+@@ -6,7 +6,7 @@
+ Summary: Apache HTTP Server
+ Name: httpd
+ Version: 2.2.10
+-Release: 1%{?dist}
++Release: 1%{?dist}.scripts.%{scriptsversion}
+ URL: http://httpd.apache.org/
+ Source0: http://www.apache.org/dist/httpd/httpd-%{version}.tar.gz
+ Source1: index.html
+@@ -54,6 +54,12 @@
+ Conflicts: pcre < 4.0
+ Requires: httpd-tools = %{version}-%{release}
+ 
++Provides: scripts-httpd
++Patch1000: httpd-suexec-scripts.patch
++Patch1001: httpd-2.2.x-sni.patch
++Patch1003: httpd-2.2.x-mod_status-security.patch
++Patch1004: httpd-2.2.x-304.patch
++
+ %description
+ The Apache HTTP Server is a powerful, efficient, and extensible
+ web server.
+@@ -100,6 +106,7 @@
+ BuildRequires: openssl-devel, distcache-devel
+ Requires(post): openssl >= 0.9.7f-4, /bin/cat
+ Requires: httpd = 0:%{version}-%{release}, httpd-mmn = %{mmn}
++Provides: scripts-mod_ssl
+ Obsoletes: stronghold-mod_ssl
+ 
+ %description -n mod_ssl
+@@ -127,6 +134,11 @@
+ # Patch in vendor/release string
+ sed "s/@RELEASE@/%{vstring}/" < %{PATCH20} | patch -p1
+ 
++%patch1000 -p1 -b .scripts
++%patch1001 -p1 -b .sni
++%patch1003 -p1 -b .permitstatus
++%patch1004 -p1 -b .scripts-304
++
+ # Safety check: prevent build if defined MMN does not equal upstream MMN.
+ vmmn=`echo MODULE_MAGIC_NUMBER_MAJOR | cpp -include include/ap_mmn.h | sed -n '/^2/p'`
+ if test "x${vmmn}" != "x%{mmn}"; then
+@@ -175,10 +187,12 @@
+         --with-apr=%{_prefix} --with-apr-util=%{_prefix} \
+ 	--enable-suexec --with-suexec \
+ 	--with-suexec-caller=%{suexec_caller} \
+-	--with-suexec-docroot=%{contentdir} \
++	--with-suexec-docroot=/ \
++	--with-suexec-userdir=web_scripts \
++	--with-suexec-trusteddir=/usr/libexec/scripts-trusted \
+ 	--with-suexec-logfile=%{_localstatedir}/log/httpd/suexec.log \
+ 	--with-suexec-bin=%{_sbindir}/suexec \
+-	--with-suexec-uidmin=500 --with-suexec-gidmin=100 \
++	--with-suexec-uidmin=50 --with-suexec-gidmin=50 \
+         --enable-pie \
+         --with-pcre \
+ 	$*
Index: /tags/fc9-eol/server/fedora/specs/httpdmods.spec
===================================================================
--- /tags/fc9-eol/server/fedora/specs/httpdmods.spec	(revision 1257)
+++ /tags/fc9-eol/server/fedora/specs/httpdmods.spec	(revision 1257)
@@ -0,0 +1,50 @@
+Summary: scripts.mit.edu custom apache modules
+Group: Applications/System
+Name: httpdmods 
+Version: 0.%{scriptsversion}
+Release: 0
+Vendor: The scripts.mit.edu Team (scripts@mit.edu)
+URL: http://scripts.mit.edu
+License: GPL
+Source: %{name}.tar.gz 
+BuildRoot: %{_tmppath}/%(%{__id_u} -n)-%{name}-%{version}-root
+%define debug_package %{nil}
+
+%description 
+
+scripts.mit.edu custom apache modules
+Contains:
+ - module to do authentication based on SSL certificates <mod_auth_sslcert>
+ - module to do authorization based on Athena AFS groups <mod_authz_afsgroup>
+ - module to enable optional authentication <mod_auth_optional>
+ - module to get vhosts from LDAP, taken from Debian <mod_vhost_ldap>
+See http://scripts.mit.edu/wiki for more information.
+
+%prep
+%setup -q -n %{name}
+
+%build
+./configure CFLAGS="-I/usr/include/httpd -I/usr/include/apr-1"
+make
+
+%install
+[ $RPM_BUILD_ROOT != / ] && rm -rf $RPM_BUILD_ROOT
+install -D .libs/mod_auth_sslcert.so $RPM_BUILD_ROOT/usr/lib64/httpd/modules/mod_auth_sslcert.so
+install -D .libs/mod_authz_afsgroup.so $RPM_BUILD_ROOT/usr/lib64/httpd/modules/mod_authz_afsgroup.so
+install -D .libs/mod_auth_optional.so $RPM_BUILD_ROOT/usr/lib64/httpd/modules/mod_auth_optional.so
+install -D .libs/mod_vhost_ldap.so $RPM_BUILD_ROOT/usr/lib64/httpd/modules/mod_vhost_ldap.so
+
+%clean
+[ $RPM_BUILD_ROOT != / ] && rm -rf $RPM_BUILD_ROOT
+
+%files
+%defattr(0755, root, root)
+/usr/lib64/httpd/modules/mod_auth_sslcert.so
+/usr/lib64/httpd/modules/mod_authz_afsgroup.so
+/usr/lib64/httpd/modules/mod_auth_optional.so
+/usr/lib64/httpd/modules/mod_vhost_ldap.so
+
+%changelog
+
+* Sun Jan 13 2006  Jeff Arnold <jbarnold@MIT.EDU> 0.00
+- initial prerelease version
Index: /tags/fc9-eol/server/fedora/specs/krb5.spec.patch
===================================================================
--- /tags/fc9-eol/server/fedora/specs/krb5.spec.patch	(revision 1257)
+++ /tags/fc9-eol/server/fedora/specs/krb5.spec.patch	(revision 1257)
@@ -0,0 +1,36 @@
+--- krb5.spec.old	2009-04-08 06:26:23.000000000 -0400
++++ krb5.spec	2009-04-08 06:29:20.000000000 -0400
+@@ -16,7 +16,7 @@
+ Summary: The Kerberos network authentication system.
+ Name: krb5
+ Version: 1.6.3
+-Release: 16%{?dist}
++Release: 16%{?dist}.scripts.%{scriptsversion}
+ # Maybe we should explode from the now-available-to-everybody tarball instead?
+ # http://web.mit.edu/kerberos/dist/krb5/1.6/krb5-1.6.2-signed.tar
+ Source0: krb5-%{version}.tar.gz
+@@ -105,6 +105,8 @@
+ Patch82: krb5-CVE-2009-0846.patch
+ Patch83: krb5-CVE-2009-0847.patch
+ 
++Patch1000: krb5-kuserok-scripts.patch
++
+ License: MIT, freely distributable.
+ URL: http://web.mit.edu/kerberos/www/
+ Group: System Environment/Libraries
+@@ -146,6 +148,7 @@
+ Group: System Environment/Libraries
+ Prereq: grep, /sbin/ldconfig, sh-utils
+ Obsoletes: krb5-configs
++Provides: scripts-krb5-libs
+ 
+ %description libs
+ Kerberos is a network authentication system. The krb5-libs package
+@@ -1389,6 +1392,7 @@
+ %patch81 -p1 -b .CVE-2009-0844-0845-2
+ %patch82 -p1 -b .CVE-2009-0846
+ %patch83 -p1 -b .CVE-2009-0847
++%patch1000 -p1 -b .kuserok
+ cp src/krb524/README README.krb524
+ gzip doc/*.ps
+ 
Index: /tags/fc9-eol/server/fedora/specs/logview.spec
===================================================================
--- /tags/fc9-eol/server/fedora/specs/logview.spec	(revision 1257)
+++ /tags/fc9-eol/server/fedora/specs/logview.spec	(revision 1257)
@@ -0,0 +1,54 @@
+Summary: scripts.mit.edu logview program
+Group: Applications/System
+Name: logview
+Version: 0.%{scriptsversion}
+Release: 0
+Vendor: The scripts.mit.edu Team (scripts@mit.edu)
+URL: http://scripts.mit.edu
+License: GPL
+Source: %{name}.tar.gz 
+BuildRoot: %{_tmppath}/%(%{__id_u} -n)-%{name}-%{version}-root
+%define debug_package %{nil}
+
+%description 
+
+scripts.mit.edu logview program
+See http://scripts.mit.edu/wiki for more information.
+
+%prep
+%setup -q -n %{name}
+
+%build
+./configure
+make
+
+%install
+[ $RPM_BUILD_ROOT != / ] && rm -rf $RPM_BUILD_ROOT
+make install DESTDIR=$RPM_BUILD_ROOT prefix=/usr/local
+
+%clean
+[ $RPM_BUILD_ROOT != / ] && rm -rf $RPM_BUILD_ROOT
+
+%pre
+useradd logview || [ $? -eq 9 ]
+
+%postun
+if [ "$1" = "0" ] ; then
+   userdel logview
+fi
+
+%files
+%defattr(0755, root, root)
+/usr/local/bin/logview.pl
+%defattr(4755, logview, root)
+/usr/local/bin/logview
+
+%changelog
+* Wed Dec 31 2008  Quentin Smith <quentin@mit.edu>
+- ignore preexisting user
+
+* Wed Dec 31 2008  Quentin Smith <quentin@mit.edu> - 0.917-0
+- don't delete logview user on upgrades
+
+* Tue Jan 30 2006  Jeff Arnold <jbarnold@MIT.EDU> 0.00
+- prerelease
Index: /tags/fc9-eol/server/fedora/specs/mit-zephyr.spec.patch
===================================================================
--- /tags/fc9-eol/server/fedora/specs/mit-zephyr.spec.patch	(revision 1257)
+++ /tags/fc9-eol/server/fedora/specs/mit-zephyr.spec.patch	(revision 1257)
@@ -0,0 +1,10 @@
+--- mit-zephyr.spec	2006-08-10 10:32:01.000000000 -0400
++++ mit-zephyr.spec.new	2007-01-14 15:43:04.000000000 -0500
+@@ -67,7 +67,6 @@
+ Source1: zhm.init
+ URL: http://web.mit.edu/afs/dev.mit.edu/source/src-current/athena/lib/zephyr/
+ Buildroot: %{_tmppath}/%{name}-%{version}-%{release}-buildroot
+-Requires: mit-krb-config
+ BuildPreReq: readline-devel, ncurses-devel
+ %if %{redhat}=="yes"
+ Requires: hesiod, krb5-libs
Index: /tags/fc9-eol/server/fedora/specs/nss-ldapd.spec.patch
===================================================================
--- /tags/fc9-eol/server/fedora/specs/nss-ldapd.spec.patch	(revision 1257)
+++ /tags/fc9-eol/server/fedora/specs/nss-ldapd.spec.patch	(revision 1257)
@@ -0,0 +1,81 @@
+--- nss-ldapd.spec.orig	2009-03-30 04:33:50.000000000 -0400
++++ nss-ldapd.spec	2009-05-24 18:39:15.000000000 -0400
+@@ -19,18 +19,19 @@
+ 
+ 
+ Name:           nss-ldapd
+-BuildRequires:  db-devel krb5-devel openldap2-devel
++BuildRequires:  db4-devel krb5-devel openldap-devel autoconf automake libtool
++Conflicts:      nss_ldap
+ License:        LGPL v2.1 or later
+ Group:          Productivity/Networking/LDAP/Clients
+ AutoReqProv:    on
+ PreReq:         /bin/chmod
+ Conflicts:      nss_ldap
+ Version:        0.6.8
+-Release:        2.1
++Release:        2.1.scripts.%{scriptsversion}
+ Summary:        NSS module and daemon for using LDAP as a naming service
+ Url:            http://ch.tudelft.nl/~arthur/nss-ldapd/
+ Source:         nss-ldapd-%{version}.tar.bz2
+-Source1:        rc.nslcd
++Patch1000:      rc.nslcd.patch
+ Source100:      nss-ldapd-0.6.8-rpmlintrc
+ BuildRoot:      %{_tmppath}/%{name}-%{version}-build
+ 
+@@ -52,7 +53,7 @@
+ 
+ %prep
+ %setup -q
+-cp -v %{S:1} .
++%patch1000 -p0 -b .rc
+ 
+ %build
+ %{?suse_update_config:%{suse_update_config -f}}
+@@ -72,7 +73,6 @@
+ mkdir -p $RPM_BUILD_ROOT/etc/init.d/
+ mkdir -p $RPM_BUILD_ROOT/usr/sbin/
+ install -m 755 rc.nslcd $RPM_BUILD_ROOT/etc/init.d/nslcd
+-ln -sf ../../etc/init.d/nslcd $RPM_BUILD_ROOT/usr/sbin/rcnslcd
+ make DESTDIR=$RPM_BUILD_ROOT install
+ mkdir -p $RPM_BUILD_ROOT/var/run/nslcd
+ install -m 644 man/nss-ldapd.conf.5 $RPM_BUILD_ROOT/usr/share/man/man5
+@@ -88,13 +88,8 @@
+     /bin/chmod 640 /etc/nss-ldapd.conf
+ fi
+ 
+-%preun
+-%stop_on_removal nslcd
+-
+ %postun 
+ /sbin/ldconfig
+-%restart_on_update nslcd
+-%insserv_cleanup
+ 
+ %files
+ %defattr(-,root,root)
+@@ -104,11 +99,12 @@
+ %doc %{_mandir}/man8/*
+ %config(noreplace) %attr(640,root,root) /etc/nss-ldapd.conf
+ %config /etc/init.d/nslcd
+-/usr/sbin/rcnslcd
+ %dir /var/run/nslcd
+ /usr/sbin/nslcd
+ 
+ %changelog
++* Sun May 24 2009 Anders Kaseorg <andersk@mit.edu> - 0.6.8-2.1
++- Update for Fedora again.
+ * Wed Mar 25 2009 rhafer@suse.de
+ - Updated to 0.6.8:
+   * the nss-ldapd.conf was created world-readable which could cause
+@@ -129,6 +125,10 @@
+ - Adjust config file permissions upon update, to fix world-readable
+   /etc/nss-ldapd.conf as created by older versions
+   (bnc#487737, CVE-2009-1073)
++* Wed Dec 31 2008  <quentin@mit.edu> - 0.6.4-3.0
++- add init script for Fedora
++* Wed Dec 31 2008  <quentin@mit.edu> - 0.6.4-2.4
++- port from openSUSE to Fedora
+ * Fri Aug 15 2008 rhafer@suse.de
+ - Fixed "Required-Stop" Tag to include the same services as
+   "Required-Start"
Index: /tags/fc9-eol/server/fedora/specs/nss_nonlocal.spec
===================================================================
--- /tags/fc9-eol/server/fedora/specs/nss_nonlocal.spec	(revision 1257)
+++ /tags/fc9-eol/server/fedora/specs/nss_nonlocal.spec	(revision 1257)
@@ -0,0 +1,63 @@
+Summary: nsswitch proxy module to prevent local account spoofing
+Group: System Environment/Libraries
+Name: nss_nonlocal
+Version: 1.9
+Release: 0
+URL: http://debathena.mit.edu/nss_nonlocal/
+BuildRequires: autoconf
+BuildRequires: automake
+BuildRequires: libtool
+License: GPL
+Source: %{name}.tar.gz
+BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
+
+%description
+This nsswitch module acts as a proxy for other nsswitch modules like hesiod,
+but prevents non-local users from potentially gaining local privileges by
+spoofing local UIDs and GIDs.
+
+%prep
+%setup -q -n %{name}
+
+cat >find_requires.sh <<EOF
+#!/bin/sh
+%{__find_requires} | grep -v GLIBC_PRIVATE
+exit 0
+EOF
+chmod +x find_requires.sh
+%define _use_internal_dependency_generator 0
+%define __find_requires %{_builddir}/%{buildsubdir}/find_requires.sh
+
+%build
+autoreconf -i
+%configure --libdir=/%{_lib}
+make
+
+%install
+[ $RPM_BUILD_ROOT != / ] && rm -rf $RPM_BUILD_ROOT
+make install DESTDIR=$RPM_BUILD_ROOT
+
+%clean
+[ $RPM_BUILD_ROOT != / ] && rm -rf $RPM_BUILD_ROOT
+
+%files
+%defattr(-, root, root)
+%doc README
+/%{_lib}/libnss_nonlocal.so.*
+
+%pre
+groupadd -r nss-local-users || :
+groupadd -r nss-nonlocal-users || :
+
+%post
+/sbin/ldconfig
+
+%postun
+/sbin/ldconfig
+test "$1" != 0 || groupdel nss-local-users || :
+test "$1" != 0 || groupdel nss-nonlocal-users || :
+
+%changelog
+
+* Thu May  8 2008 Anders Kaseorg <andersk@mit.edu> 1.6-0
+- Initial RPM release.
Index: /tags/fc9-eol/server/fedora/specs/openafs.spec.patch
===================================================================
--- /tags/fc9-eol/server/fedora/specs/openafs.spec.patch	(revision 1257)
+++ /tags/fc9-eol/server/fedora/specs/openafs.spec.patch	(revision 1257)
@@ -0,0 +1,91 @@
+--- openafs.spec.orig	2009-04-08 08:17:00.000000000 -0400
++++ openafs.spec	2009-04-14 04:32:44.000000000 -0400
+@@ -8,7 +8,7 @@
+ # for beta/rc releases make pkgrel 0.X.<tag>
+ # for real releases make pkgrel 1 (or more for extra releases)
+ #%define pkgrel 0.1.rc1
+-%define pkgrel 1.1
++%define pkgrel 1.1.99scripts.%{scriptsversion}
+ 
+ %if %{?osvers:0}%{!?osvers:1}
+ %define osvers 1
+@@ -261,6 +261,11 @@
+ %endif
+ ExclusiveArch: %{ix86} x86_64 ia64 s390 s390x sparc64 ppc ppc64
+ 
++Patch1000: openafs-scripts.patch
++Patch1001: openafs-postinit.patch
++Patch1002: openafs-pts-encrypt.patch
++Patch1003: openafs-localcsdb.patch
++
+ #    http://dl.openafs.org/dl/openafs/candidate/%{afsvers}/...
+ Source0: http://www.openafs.org/dl/openafs/%{afsvers}/openafs-%{afsvers}-src.tar.bz2
+ Source1: http://www.openafs.org/dl/openafs/%{afsvers}/openafs-%{afsvers}-doc.tar.bz2
+@@ -343,6 +348,7 @@
+ %if %{build_userspace}
+ 
+ %package client
++Provides: scripts-openafs-client
+ Requires: binutils, openafs = %{PACKAGE_VERSION}
+ 
+ %if %{fedorakmod}
+@@ -403,6 +409,7 @@
+ 
+ %if %{build_authlibs}
+ %package authlibs
++Provides: scripts-openafs-authlibs
+ Summary: OpenAFS authentication shared libraries
+ Group: Networking/Filesystems
+ 
+@@ -419,6 +426,7 @@
+ %endif
+ 
+ %package authlibs-devel
++Provides: scripts-openafs-authlibs-devel
+ %if %{build_authlibs}
+ Requires: openafs-authlibs = %{PACKAGE_VERSION}
+ %endif
+@@ -437,6 +445,7 @@
+ libraries.
+ 
+ %package devel
++Provides: scripts-openafs-devel
+ Summary: OpenAFS Development Libraries and Headers
+ Group: Development/Filesystems
+ 
+@@ -465,6 +474,7 @@
+ administrators.
+ 
+ %package kernel-source
++Provides: scripts-openafs-kernel-source
+ Summary: OpenAFS Kernel Module source tree
+ Group: Networking/Filesystems
+ Provides: openafs-kernel = %{PACKAGE_VERSION}
+@@ -514,6 +524,7 @@
+ 
+ %if %{krb5support}
+ %package krb5
++Provides: scripts-openafs-krb5
+ Summary: OpenAFS programs to use with krb5
+ Requires: openafs = %{PACKAGE_VERSION}
+ Group: Networking/Filesystems
+@@ -540,7 +551,7 @@
+ %if %{build_modules}
+ 
+ %if %{fedorakmod}
+-%{expand:%(%{kmodtool} rpmtemplate %{kmod_name} %{kverrel} %{kvariants} 2>/dev/null)}
++%{expand:%(%{kmodtool} rpmtemplate %{kmod_name} %{kverrel} %{kvariants} | sed '/^%package/ aProvides: scripts-kmod-openafs' 2>/dev/null)}
+ 
+ %else
+ 
+@@ -699,6 +710,10 @@
+ 
+ # Patch openafs to build a kernel module named "openafs" instead of "libafs"
+ %patch0 -p1 -b .kmod26
++%patch1000 -p1 -b .scripts
++%patch1001 -p1 -b .postinit
++%patch1002 -p1 -b .pts-encrypt
++%patch1003 -p1 -b .localcsdb
+ 
+ ##############################################################################
+ #
Index: /tags/fc9-eol/server/fedora/specs/openssh.spec.patch
===================================================================
--- /tags/fc9-eol/server/fedora/specs/openssh.spec.patch	(revision 1257)
+++ /tags/fc9-eol/server/fedora/specs/openssh.spec.patch	(revision 1257)
@@ -0,0 +1,36 @@
+--- openssh.spec.orig	2009-01-01 21:06:01.000000000 -0500
++++ openssh.spec	2009-01-01 22:52:02.000000000 -0500
+@@ -63,7 +63,7 @@
+ Summary: The OpenSSH implementation of SSH protocol versions 1 and 2
+ Name: openssh
+ Version: 5.1p1
+-Release: 3%{?dist}%{?rescue_rel}
++Release: 3%{?dist}%{?rescue_rel}.scripts.%{scriptsversion}
+ URL: http://www.openssh.com/portable.html
+ #Source0: ftp://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-%{version}.tar.gz
+ #Source1: ftp://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-%{version}.tar.gz.asc
+@@ -74,6 +74,7 @@
+ Source1: openssh-nukeacss.sh
+ Source2: sshd.pam
+ Source3: sshd.init
++Patch1000: openssh-5.0p1-multihomed.patch
+ Patch0: openssh-5.1p1-redhat.patch
+ Patch2: openssh-5.1p1-skip-initial.patch
+ Patch3: openssh-3.8.1p1-krb5-config.patch
+@@ -159,6 +160,7 @@
+ Requires(post): chkconfig >= 0.9, /sbin/service
+ Requires(pre): /usr/sbin/useradd
+ Requires: pam >= 1.0.1-3
++Provides: scripts-openssh-server
+ 
+ %package askpass
+ Summary: A passphrase dialog for OpenSSH and X
+@@ -232,6 +234,8 @@
+ %patch63 -p1 -b .bannerlen
+ %patch64 -p1 -b .compat-sessions
+ 
++%patch1000 -p1 -b .multihomed
++
+ autoreconf
+ 
+ %build
Index: /tags/fc9-eol/server/fedora/specs/php.spec.patch
===================================================================
--- /tags/fc9-eol/server/fedora/specs/php.spec.patch	(revision 1257)
+++ /tags/fc9-eol/server/fedora/specs/php.spec.patch	(revision 1257)
@@ -0,0 +1,31 @@
+--- php.spec.orig	2009-04-23 11:58:08.000000000 -0400
++++ php.spec	2009-04-23 12:00:32.000000000 -0400
+@@ -7,7 +7,7 @@
+ Summary: PHP scripting language for creating dynamic web sites
+ Name: php
+ Version: 5.2.9
+-Release: 2%{?dist}
++Release: 2%{?dist}.scripts.%{scriptsversion}
+ License: PHP
+ Group: Development/Languages
+ URL: http://www.php.net/
+@@ -38,6 +38,10 @@
+ Patch60: php-5.2.7-tests-dashn.patch
+ Patch61: php-5.0.4-tests-wddx.patch
+ 
++# Fix for the-bug (PHP bug #42362, php.cvs #56693)
++Provides: scripts-php
++Patch100: php-scripts-304.patch
++
+ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
+ 
+ BuildRequires: bzip2-devel, curl-devel >= 7.9, db4-devel, gmp-devel
+@@ -374,6 +378,8 @@
+ %patch60 -p1 -b .tests-dashn
+ %patch61 -p1 -b .tests-wddx
+ 
++%patch100 -p1 -b .scripts-304
++
+ # Prevent %%doc confusion over LICENSE files
+ cp Zend/LICENSE Zend/ZEND_LICENSE
+ cp TSRM/LICENSE TSRM_LICENSE
Index: /tags/fc9-eol/server/fedora/specs/php_scripts.spec
===================================================================
--- /tags/fc9-eol/server/fedora/specs/php_scripts.spec	(revision 1257)
+++ /tags/fc9-eol/server/fedora/specs/php_scripts.spec	(revision 1257)
@@ -0,0 +1,41 @@
+Summary: scripts.mit.edu php logging module
+Group: Applications/System
+Name: php_scripts
+Version: 0.%{scriptsversion}
+Release: 0
+Vendor: The scripts.mit.edu Team (scripts@mit.edu)
+URL: http://scripts.mit.edu
+License: GPL
+Source: %{name}.tar.gz 
+BuildRoot: %{_tmppath}/%(%{__id_u} -n)-%{name}-%{version}-root
+BuildRequires: php-devel
+%define debug_package %{nil}
+
+%description 
+
+scripts.mit.edu php logging module
+
+%prep
+%setup -q -n %{name}
+
+%build
+cp php_scripts-config.m4 config.m4
+phpize
+./configure
+make
+
+%install
+[ $RPM_BUILD_ROOT != / ] && rm -rf $RPM_BUILD_ROOT
+install -D .libs/scripts.so $RPM_BUILD_ROOT/usr/lib64/php/modules/scripts.so
+
+%clean
+[ $RPM_BUILD_ROOT != / ] && rm -rf $RPM_BUILD_ROOT
+
+%files
+%defattr(0755, root, root)
+/usr/lib64/php/modules/scripts.so
+
+%changelog
+
+* Fri Jul 03 2009  Mitchell Berger <mitchb@MIT.EDU> 0.00
+- initial version
Index: /tags/fc9-eol/server/fedora/specs/pysvn.spec.patch
===================================================================
--- /tags/fc9-eol/server/fedora/specs/pysvn.spec.patch	(revision 1257)
+++ /tags/fc9-eol/server/fedora/specs/pysvn.spec.patch	(revision 1257)
@@ -0,0 +1,19 @@
+--- pysvn.spec	2009-03-23 10:49:59.000000000 -0400
++++ pysvn.spec.new	2009-03-23 10:53:10.000000000 -0400
+@@ -2,7 +2,7 @@
+ 
+ Name:           pysvn
+ Version:        1.6.2
+-Release:        1%{dist}
++Release:        1%{dist}.scripts.%{scriptsversion}
+ Summary:        Pythonic style bindings for Subversion
+ Group:          Development/Languages
+ License:        ASL 1.1
+@@ -17,6 +17,7 @@
+ BuildRequires:  neon-devel
+ BuildRequires:  apr-devel
+ BuildRequires:  openssl-devel
++Provides:       scripts-pysvn
+ 
+ %description
+ Pythonic style bindings for Subversion
Index: /tags/fc9-eol/server/fedora/specs/python-routefs.spec
===================================================================
--- /tags/fc9-eol/server/fedora/specs/python-routefs.spec	(revision 1257)
+++ /tags/fc9-eol/server/fedora/specs/python-routefs.spec	(revision 1257)
@@ -0,0 +1,55 @@
+%{!?python_sitelib: %define python_sitelib %(%{__python} -c "from distutils.sysconfig import get_python_lib; print get_python_lib()")}
+
+Name:		python-routefs
+Version:	0.0.1
+Release:	1%{?dist}
+Summary:	A FUSE API wrapper based on URL routing
+
+Group:		Development/Languages
+License:	MIT
+URL:		http://ebroder.net/code/python-routefs.git
+Source0:	python-routefs.tar.gz
+BuildRoot:	%{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
+
+BuildRequires:	python-devel
+BuildRequires:	python-routes >= 1.7
+BuildRequires:	fuse-python >= 0.2
+Requires:	python-routes >= 1.7
+Requires:	fuse-python >= 0.2
+
+%description
+
+RouteFS is a base class for developing read-only FUSE filesystems that
+lets you focus on the directory tree instead of the system calls.
+
+RouteFS uses the Routes library developed for Pylons. URLs were
+inspired by filesystems, and now you can have filesystems inspired by
+URLs.
+
+
+%prep
+%setup -q -n %{name}
+
+
+%build
+%{__python} setup.py build
+
+
+%install
+rm -rf $RPM_BUILD_ROOT
+%{__python} setup.py install -O1 --skip-build --root $RPM_BUILD_ROOT
+
+ 
+%clean
+rm -rf $RPM_BUILD_ROOT
+
+
+%files
+%defattr(-,root,root,-)
+%doc
+%{python_sitelib}/*
+
+
+%changelog
+* Sun Sep 14 2008 Anders Kaseorg <andersk@mit.edu> - 0.0.1
+- Initial RPM release.
Index: /tags/fc9-eol/server/fedora/specs/scripts-base.spec
===================================================================
--- /tags/fc9-eol/server/fedora/specs/scripts-base.spec	(revision 1257)
+++ /tags/fc9-eol/server/fedora/specs/scripts-base.spec	(revision 1257)
@@ -0,0 +1,34 @@
+Summary: scripts.mit.edu base packages
+Group: Applications/System
+Name: scripts-base
+Version: 0.%{scriptsversion}
+Release: 0
+Vendor: The scripts.mit.edu Team (scripts@mit.edu)
+URL: http://scripts.mit.edu
+License: GPL
+Source: %{name}.tar.gz 
+BuildRoot: %{_tmppath}/%(%{__id_u} -n)-%{name}-%{version}-root
+Requires: accountadm, execsys, scripts-kmod-openafs, scripts-krb5-libs, scripts-httpd, scripts-mod_ssl, openafs, scripts-openafs-client, scripts-openafs-authlibs, scripts-openafs-devel, scripts-openafs-krb5, openafs-docs, scripts-openssh-server, sql-signup, tokensys, whoisd, logview, nss-ldapd, scripts-pysvn, scripts-php, php_scripts
+%define debug_package %{nil}
+
+%description 
+
+scripts.mit.edu base package
+Contains:
+ - Dependencies to install rpms required for base scripts functionality
+See http://scripts.mit.edu/wiki for more information.
+
+%prep
+%setup -q -n %{name}
+
+%build
+
+%install
+
+%clean
+
+%files
+
+%changelog
+* Thu Jan  1 2009  Quentin Smith <quentin@mit.edu>
+- prerelease
Index: /tags/fc9-eol/server/fedora/specs/scripts-python-path.spec
===================================================================
--- /tags/fc9-eol/server/fedora/specs/scripts-python-path.spec	(revision 1257)
+++ /tags/fc9-eol/server/fedora/specs/scripts-python-path.spec	(revision 1257)
@@ -0,0 +1,37 @@
+Summary: scripts.mit.edu python path configuration
+Group: Development/Languages
+Name: scripts-python-path
+Version: 0.%{scriptsversion}
+Release: 0
+Vendor: The scripts.mit.edu Team (scripts@mit.edu)
+URL: http://scripts.mit.edu
+License: GPL
+Source: %{name}.tar.gz 
+BuildRoot: %{_tmppath}/%(%{__id_u} -n)-%{name}-%{version}-root
+
+%description 
+
+scripts.mit.edu python path configuration
+See http://scripts.mit.edu/wiki for more information.
+
+%prep
+%setup -q -n %{name}
+%{!?python_sitelib: %global python_sitelib %(%{__python} -c "from distutils.sysconfig import get_python_lib; print get_python_lib()")}
+
+%install
+[ $RPM_BUILD_ROOT != / ] && rm -rf $RPM_BUILD_ROOT
+install -d $RPM_BUILD_ROOT%{python_sitelib}
+install -m 644 00scripts-home.pth $RPM_BUILD_ROOT%{python_sitelib}
+
+%clean
+[ $RPM_BUILD_ROOT != / ] && rm -rf $RPM_BUILD_ROOT
+
+%files
+%defattr(0644, root, root)
+%{python_sitelib}/00scripts-home.pth
+
+%changelog
+* Thu Jul  9 2009  Geoffrey Thomas <geofft@mit.edu>
+- Update to Python 2.6
+* Tue Jan 27 2009  Quentin Smith <quentin@mit.edu>
+- initial release
Index: /tags/fc9-eol/server/fedora/specs/sql-signup.spec
===================================================================
--- /tags/fc9-eol/server/fedora/specs/sql-signup.spec	(revision 1257)
+++ /tags/fc9-eol/server/fedora/specs/sql-signup.spec	(revision 1257)
@@ -0,0 +1,44 @@
+Summary:        Signup interface to <sql.mit.edu> for <scripts.mit.edu>.
+Group:			Applications/System
+Name:           sql-signup
+Version:        0.%{scriptsversion}
+Release:        0
+Vendor:			The scripts.mit.edu Team (scripts@mit.edu)
+URL:			http://scripts.mit.edu
+License:        GPL
+Source0:        %{name}.tar.gz
+BuildRoot:      %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
+%define debug_package %{nil}
+
+BuildRequires:  make
+Requires:       pam, usermode
+
+%description
+
+
+%prep
+%setup -q -n %{name}
+
+%build
+
+
+%install
+rm -rf $RPM_BUILD_ROOT
+make install DESTDIR=$RPM_BUILD_ROOT prefix=/usr/local
+
+%clean
+rm -rf $RPM_BUILD_ROOT
+
+%files
+%defattr(-,root,root,-)
+%defattr(755,root,root,-)
+%{_bindir}/sql-signup
+%{_sbindir}/sql-signup
+%defattr(644,root,root,-)
+%config /etc/pam.d/sql-signup
+%config /etc/security/console.apps/sql-signup
+
+%changelog
+
+* Fri Jan 26 2007 Joe Presbrey <presbrey@mit.edu> 0.00
+- prerelease
Index: /tags/fc9-eol/server/fedora/specs/tokensys.spec
===================================================================
--- /tags/fc9-eol/server/fedora/specs/tokensys.spec	(revision 1257)
+++ /tags/fc9-eol/server/fedora/specs/tokensys.spec	(revision 1257)
@@ -0,0 +1,60 @@
+Summary: scripts.mit.edu AFS administration system
+Group: Applications/System
+Name: tokensys
+Version: 0.%{scriptsversion}
+Release: 0
+Vendor: The scripts.mit.edu Team (scripts@mit.edu)
+URL: http://scripts.mit.edu
+License: GPL
+Source: %{name}.tar.gz
+BuildRoot: %{_tmppath}/%(%{__id_u} -n)-%{name}-%{version}-root
+%define debug_package %{nil}
+Prereq: /usr/kerberos/bin/kinit, /usr/bin/aklog
+
+%description
+
+scripts.mit.edu AFS administration system
+Contains:
+ - A shell script for renewing the scripts AFS credentials <renew>
+ - A crontab for calling the renew script <crontab>
+See http://scripts.mit.edu/wiki for more information.
+
+%prep
+%setup -q -n %{name}
+
+%build
+./configure --with-kinit=/usr/kerberos/bin/kinit --with-aklog=/usr/bin/aklog
+
+%install
+[ $RPM_BUILD_ROOT != / ] && rm -rf $RPM_BUILD_ROOT
+install -D renew $RPM_BUILD_ROOT/home/afsagent/renew
+install -D crontab $RPM_BUILD_ROOT/etc/cron.d/afsagent
+
+%clean
+[ $RPM_BUILD_ROOT != / ] && rm -rf $RPM_BUILD_ROOT
+
+%files
+%defattr(0600, root, root)
+/etc/cron.d/afsagent
+%defattr(0755, afsagent, afsagent)
+/home/afsagent/renew
+
+%pre
+groupadd -g 101 afsagent || [ $? -eq 9 ]
+useradd -u 101 -g 101 afsagent || [ $? -eq 9 ]
+
+%postun
+if [ "$1" = "0" ] ; then
+   userdel -r afsagent
+fi
+
+%changelog
+* Wed Dec 31 2008  Quentin Smith <quentin@mit.edu>
+- only remove afsagent user on erase
+- ignore preexisting user
+
+* Wed Apr 11 2007  Joe Presbrey <presbrey@mit.edu>
+- crontab moved system-wide (/etc/cron.d) to isolate from fail-over cron service
+
+* Sat Sep 30 2006  Jeff Arnold <jbarnold@MIT.EDU> 0.00
+- initial prerelease version
Index: /tags/fc9-eol/server/fedora/specs/whoisd.spec
===================================================================
--- /tags/fc9-eol/server/fedora/specs/whoisd.spec	(revision 1257)
+++ /tags/fc9-eol/server/fedora/specs/whoisd.spec	(revision 1257)
@@ -0,0 +1,41 @@
+Summary:        whoisd for <scripts.mit.edu> (virtualhost aware)
+Group:			Applications/System
+Name:           whoisd
+Version:        0.%{scriptsversion}
+Release:        0
+Vendor:			The scripts.mit.edu Team (scripts@mit.edu)
+URL:			http://scripts.mit.edu
+License:        GPL
+Source0:        %{name}.tar.gz
+BuildRoot:      %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
+%define debug_package %{nil}
+
+#BuildRequires:  make
+Requires:       python-twisted-core
+
+%description
+
+
+%prep
+%setup -q -n %{name}
+
+%build
+./configure
+
+%install
+[ $RPM_BUILD_ROOT != / ] && rm -rf $RPM_BUILD_ROOT
+make install DESTDIR=$RPM_BUILD_ROOT exec_prefix=/usr/local
+
+%clean
+[ $RPM_BUILD_ROOT != / ] && rm -rf $RPM_BUILD_ROOT
+
+%files
+%defattr(0644,root,root,-)
+/usr/local/libexec/whoisd.tac
+%defattr(0600,root,root)
+/etc/cron.d/whoisd
+
+%changelog
+
+* Tue Jun 03 2008 Joe Presbrey <presbrey@mit.edu> 0.00
+- prerelease
Index: /tags/fc9-eol/server/fedora/support/deploy.py
===================================================================
--- /tags/fc9-eol/server/fedora/support/deploy.py	(revision 1257)
+++ /tags/fc9-eol/server/fedora/support/deploy.py	(revision 1257)
@@ -0,0 +1,33 @@
+#!/usr/bin/python
+"""scripts.mit.edu deployment sychronization support
+Copyright (C) 2006, Joe Presbrey <presbrey@mit.edu>
+"""
+
+import sys,os,os.path as path
+import string
+import getopt
+
+class Usage(Exception):
+	def __init__(self, msg):
+		self.msg = msg
+
+def main(argv=None):
+	if argv is None:
+		argv = sys.argv
+	try:
+		try:
+			opts, args = getopt.getopt(sys.argv[1:], "h", ["help"])
+		except getopt.error, msg:
+			raise Usage(msg)
+	except Usage, err:
+		print >>sys.stderr, err.msg
+		print >>sys.stderr, "for help use --help"
+		return 2
+
+	for o, a in opts:
+		if o in ("-h", "--help"):
+			print __doc__
+			return 0
+
+if __name__ == "__main__":
+	sys.exit(main())
Index: /tags/fc9-eol/server/fedora/support/setup.sh
===================================================================
--- /tags/fc9-eol/server/fedora/support/setup.sh	(revision 1257)
+++ /tags/fc9-eol/server/fedora/support/setup.sh	(revision 1257)
@@ -0,0 +1,4 @@
+#!/bin/sh
+
+yum -y install nagios-plugins nagios-plugins-disk nagios-plugins-users nagios-plugins-procs nagios-plugins-load net-snmp
+rpm -Uvh http://scripts.mit.edu/src/RPMS/x86_64/nagios-nrpe-2.5.1-1.rf.x86_64.rpm
