test master
authormegacz_admin <adam@megacz.com>
Wed, 31 Oct 2007 04:06:12 +0000 (00:06 -0400)
committermegacz_admin <adam@megacz.com>
Wed, 31 Oct 2007 04:06:12 +0000 (00:06 -0400)
229 files changed:
.ikiwiki/commitlock [new file with mode: 0644]
.ikiwiki/hyperestraier/_attr/0001/depot [new file with mode: 0644]
.ikiwiki/hyperestraier/_attr/0002/depot [new file with mode: 0644]
.ikiwiki/hyperestraier/_attr/0003/depot [new file with mode: 0644]
.ikiwiki/hyperestraier/_attr/depot [new file with mode: 0644]
.ikiwiki/hyperestraier/_aux [new file with mode: 0644]
.ikiwiki/hyperestraier/_fwm [new file with mode: 0644]
.ikiwiki/hyperestraier/_idx/0001 [new file with mode: 0644]
.ikiwiki/hyperestraier/_kwd/0001/depot [new file with mode: 0644]
.ikiwiki/hyperestraier/_kwd/0002/depot [new file with mode: 0644]
.ikiwiki/hyperestraier/_kwd/0003/depot [new file with mode: 0644]
.ikiwiki/hyperestraier/_kwd/depot [new file with mode: 0644]
.ikiwiki/hyperestraier/_list [new file with mode: 0644]
.ikiwiki/hyperestraier/_meta [new file with mode: 0644]
.ikiwiki/hyperestraier/_text/0001/depot [new file with mode: 0644]
.ikiwiki/hyperestraier/_text/0002/depot [new file with mode: 0644]
.ikiwiki/hyperestraier/_text/0003/depot [new file with mode: 0644]
.ikiwiki/hyperestraier/_text/0004/depot [new file with mode: 0644]
.ikiwiki/hyperestraier/_text/0005/depot [new file with mode: 0644]
.ikiwiki/hyperestraier/_text/0006/depot [new file with mode: 0644]
.ikiwiki/hyperestraier/_text/0007/depot [new file with mode: 0644]
.ikiwiki/hyperestraier/_text/depot [new file with mode: 0644]
.ikiwiki/hyperestraier/_xfm [new file with mode: 0644]
.ikiwiki/hyperestraier/cgi [new symlink]
.ikiwiki/hyperestraier/cgi.conf [new file with mode: 0644]
.ikiwiki/hyperestraier/cgi.tmpl [new file with mode: 0644]
.ikiwiki/ikiwiki.setup [new file with mode: 0644]
.ikiwiki/index [new file with mode: 0644]
.ikiwiki/lockfile [new file with mode: 0644]
.ikiwiki/sessions.db [new file with mode: 0644]
.ikiwiki/sessions.db.lck [new file with mode: 0644]
.ikiwiki/userdb [new file with mode: 0644]
AdamChlipala.mdwn [new file with mode: 0755]
AdamMegacz.mdwn [new file with mode: 0755]
AdamMegacz/zombie.jpeg [new file with mode: 0755]
AdminArea.mdwn [new file with mode: 0755]
AdminGroup.mdwn [new file with mode: 0755]
AdminPolicies.mdwn [new file with mode: 0755]
AfsClientConfiguration.mdwn [new file with mode: 0755]
AfsFedoraClientConfiguration.mdwn [new file with mode: 0755]
AlexandreSantos.mdwn [new file with mode: 0755]
AndrewFileSystem.mdwn [new file with mode: 0755]
AnilNarayanan.mdwn [new file with mode: 0755]
AnishJacob.mdwn [new file with mode: 0755]
AuthenticationScheme.mdwn [new file with mode: 0755]
BackupInfo.mdwn [new file with mode: 0755]
BackupServices.mdwn [new file with mode: 0755]
BadContent.mdwn [new file with mode: 0755]
BoardArea.mdwn [new file with mode: 0755]
BoardOfDirectors.mdwn [new file with mode: 0755]
CategoryOutdated.mdwn [new file with mode: 0755]
CategorySystemAdministration.mdwn [new file with mode: 0755]
ChangingAdminPassword.mdwn [new file with mode: 0755]
ClintonEbadi.mdwn [new file with mode: 0755]
ColocationPlans.mdwn [new file with mode: 0755]
ColocationPlansServiceProviders.mdwn [new file with mode: 0755]
ColocationProvidersEvaluation.mdwn [new file with mode: 0755]
ColocationProvidersEvaluation/Peer1.QuarterCab.Proposal.pdf [new file with mode: 0755]
ColocationProvidersEvaluation/Site_Spec_NYC_111_8th_.pdf [new file with mode: 0755]
ColocationProvidersEvaluation/Site_Spec_NYC_60_Hudson_8.01.05.pdf [new file with mode: 0755]
ColocationProvidersEvaluation/Site_Spec_NYC_65_Broadway_4.22.05.pdf [new file with mode: 0755]
ColocationProvidersEvaluation/he_colo.pdf [new file with mode: 0755]
ContactHcoop.mdwn [new file with mode: 0755]
CurrentSystemGripes.mdwn [new file with mode: 0755]
DSAvsRSA.mdwn [new file with mode: 0755]
DaemonAdmin.mdwn [new file with mode: 0755]
DaemonAdmin/Apache.mdwn [new file with mode: 0755]
DaemonAdmin/Bind.mdwn [new file with mode: 0755]
DaemonAdmin/LDAP.mdwn [new file with mode: 0755]
DaemonAdmin/MySQL.mdwn [new file with mode: 0755]
DaemonAdmin/PostgreSQL.mdwn [new file with mode: 0755]
DaemonFileSecurity.mdwn [new file with mode: 0755]
DavidBettis.mdwn [new file with mode: 0755]
DavorOcelic.mdwn [new file with mode: 0755]
DefaultFrontPage.mdwn [new file with mode: 0755]
DeveloperGuidelines.mdwn [new file with mode: 0755]
DnsConfiguration.mdwn [new file with mode: 0755]
DomTool.mdwn [new file with mode: 0755]
DomTool/AdditionalClients.mdwn [new file with mode: 0755]
DomTool/AdminProcedures.mdwn [new file with mode: 0755]
DomTool/ArchitectureOverview.mdwn [new file with mode: 0755]
DomTool/Building.mdwn [new file with mode: 0755]
DomTool/Debugging.mdwn [new file with mode: 0755]
DomTool/Examples.mdwn [new file with mode: 0755]
DomTool/Implementation.mdwn [new file with mode: 0755]
DomTool/LanguageReference.mdwn [new file with mode: 0755]
DomTool/Plugins.mdwn [new file with mode: 0755]
DomTool/SslProcedures.mdwn [new file with mode: 0755]
DomTool/UserGuide.mdwn [new file with mode: 0755]
DomainRegistration.mdwn [new file with mode: 0755]
DomainTool.mdwn [new file with mode: 0755]
DomtoolTwo.mdwn [new file with mode: 0755]
DrewRaines.mdwn [new file with mode: 0755]
DynamicWebSites.mdwn [new file with mode: 0755]
Election2005.mdwn [new file with mode: 0755]
Election2006.mdwn [new file with mode: 0755]
Election2007.mdwn [new file with mode: 0755]
EmailConfiguration.mdwn [new file with mode: 0755]
EnvironmentalPolicy.mdwn [new file with mode: 0755]
FeedingSpamAssassin.mdwn [new file with mode: 0755]
FileTransfer.mdwn [new file with mode: 0755]
FinancingIssues.mdwn [new file with mode: 0755]
FirewallRules.mdwn [new file with mode: 0755]
FrankBynum.mdwn [new file with mode: 0755]
FrontPage.mdwn [new file with mode: 0755]
FtpConfiguration.mdwn [new file with mode: 0755]
GenderBiasedLanguage.mdwn [new file with mode: 0755]
GenderNeutralLanguage.mdwn [new file with mode: 0755]
GrahamFreeman.mdwn [new file with mode: 0755]
HCoopAdvocacy.mdwn [new file with mode: 0755]
HardwareDonations.mdwn [new file with mode: 0755]
HardwareSpecs.mdwn [new file with mode: 0755]
HcoopAddresses.mdwn [new file with mode: 0755]
HcoopBylaws.mdwn [new file with mode: 0755]
HcoopGuidelines.mdwn [new file with mode: 0755]
HcoopPolicies.mdwn [new file with mode: 0755]
HcoopPublicity.mdwn [new file with mode: 0755]
HcoopStructure.mdwn [new file with mode: 0755]
HistoricalColocationProvidersInformation.mdwn [new file with mode: 0755]
HistoricalGenderNeutralLanguage.mdwn [new file with mode: 0755]
InstallationLog.mdwn [new file with mode: 0755]
InstalledSoftware.mdwn [new file with mode: 0755]
IpAddresses.mdwn [new file with mode: 0755]
IrcChannel.mdwn [new file with mode: 0755]
IrcChannel/test [new file with mode: 0755]
IrcMeetings.mdwn [new file with mode: 0755]
JabberServer.mdwn [new file with mode: 0755]
JabberUsers.mdwn [new file with mode: 0755]
JohnSettino.mdwn [new file with mode: 0755]
JoinUs.mdwn [new file with mode: 0755]
JustinLeitgeb.mdwn [new file with mode: 0755]
Kerberos.mdwn [new file with mode: 0755]
KrunkInfoz.mdwn [new file with mode: 0755]
KvmInfo.mdwn [new file with mode: 0755]
LogoDiscussion.mdwn [new file with mode: 0755]
LogoDiscussion/hcoop-script.png [new file with mode: 0755]
MailingListConfiguration.mdwn [new file with mode: 0755]
MailmanInstallation.mdwn [new file with mode: 0755]
MatthieuSozeau.mdwn [new file with mode: 0755]
Meeting20060624.mdwn [new file with mode: 0755]
Meeting20060909.mdwn [new file with mode: 0755]
Meeting20071021.mdwn [new file with mode: 0755]
MemberDues.mdwn [new file with mode: 0755]
MemberManual.mdwn [new file with mode: 0755]
MemberManual/Databases.mdwn [new file with mode: 0755]
MemberManual/DistributedSecurity.mdwn [new file with mode: 0755]
MemberManual/EmailDelivery.mdwn [new file with mode: 0755]
MemberManual/GettingStarted.mdwn [new file with mode: 0755]
MemberManual/GettingStarted/AccountCreated.mdwn [new file with mode: 0755]
MemberManual/GettingStarted/AfsExamples.mdwn [new file with mode: 0755]
MemberManual/GettingStarted/NewMember.mdwn [new file with mode: 0755]
MemberManual/MigrationGuide.mdwn [new file with mode: 0755]
MemberManual/RunningUnattendedCommands.mdwn [new file with mode: 0755]
MemberManual/ServingWebsites.mdwn [new file with mode: 0755]
MemberManual/TransferringFiles.mdwn [new file with mode: 0755]
MemberManual/UsingCron.mdwn [new file with mode: 0755]
MemberManual/UsingDomtool.mdwn [new file with mode: 0755]
MemberManual/VersionControl.mdwn [new file with mode: 0755]
MichaelLeonhard.mdwn [new file with mode: 0755]
MichaelOlson.mdwn [new file with mode: 0755]
MoinMoinConfiguration.mdwn [new file with mode: 0755]
NamingConventions.mdwn [new file with mode: 0755]
NathanKennedy.mdwn [new file with mode: 0755]
NewFeatures.mdwn [new file with mode: 0755]
NewServersSetup/FinalPreparations.mdwn [changed mode: 0644->0755]
NewSystemHardware.mdwn [new file with mode: 0755]
NewSystemHardwareArchive.mdwn [new file with mode: 0755]
OldWelcomePage.mdwn [new file with mode: 0755]
OlderColocationProviderInfo.mdwn [new file with mode: 0755]
OmryYadan.mdwn [new file with mode: 0755]
OnSiteStuff.mdwn [new file with mode: 0755]
OneTimeCosts2007.mdwn [new file with mode: 0755]
OpenProblems/Mire_sda_SMART_details.txt [new file with mode: 0755]
OpenProblems/Mire_sdb_SMART_details.txt [new file with mode: 0755]
OtherGroups.mdwn [new file with mode: 0755]
OurHistory.mdwn [new file with mode: 0755]
PasswordlessLogin.mdwn [new file with mode: 0755]
PaymentPlanProposals.mdwn [new file with mode: 0755]
PowerEdge2850.mdwn [new file with mode: 0755]
PreviouslyConsideredColocationProviders.mdwn [new file with mode: 0755]
PrincipalsForNonHumans.mdwn [new file with mode: 0755]
ProcmailExample.mdwn [new file with mode: 0755]
ProspectiveHostsQuoteRequest.mdwn [new file with mode: 0755]
ProspectiveMemberFaq.mdwn [new file with mode: 0755]
RackMountingEquipment.mdwn [new file with mode: 0755]
RegisteredAgent.mdwn [new file with mode: 0755]
ResourceLimits.mdwn [new file with mode: 0755]
RewriteGoals.mdwn [new file with mode: 0755]
RewriteGoals/PagesNeedingLove.mdwn [new file with mode: 0755]
RewriteGoals/PagesToDelete.mdwn [new file with mode: 0755]
RickHull.mdwn [new file with mode: 0755]
RobGubler.mdwn [new file with mode: 0755]
RobLinwood.mdwn [new file with mode: 0755]
RyanMikulovsky.mdwn [new file with mode: 0755]
SevenPrinciples.mdwn [new file with mode: 0755]
ShaunEmpie.mdwn [new file with mode: 0755]
SoftwareArchitecturePlans.mdwn [new file with mode: 0755]
SpamAssassin.mdwn [new file with mode: 0755]
SpamAssassinAdmin.mdwn [new file with mode: 0755]
SpamAssassinFilter.mdwn [new file with mode: 0755]
SshConfiguration.mdwn [new file with mode: 0755]
StoneSoup.mdwn [new file with mode: 0755]
StyleGuide.mdwn [new file with mode: 0755]
SystemArchitecturePlans.mdwn [new file with mode: 0755]
SystemArchitecturePlans/network_diagram_20060325.dia [new file with mode: 0755]
SystemArchitecturePlans/network_diagram_20060325.png [new file with mode: 0755]
SystemAuthentication.mdwn [new file with mode: 0755]
T-Shirt.mdwn [new file with mode: 0755]
TanveerSingh.mdwn [new file with mode: 0755]
TaskDistribution.mdwn [new file with mode: 0755]
TheHcoopLook.mdwn [new file with mode: 0755]
TipsAndTricks.mdwn [new file with mode: 0755]
TripWire.mdwn [new file with mode: 0755]
TroubleshootingAFS.mdwn [new file with mode: 0755]
TroubleshootingKerberos.mdwn [new file with mode: 0755]
UserManagement.mdwn [new file with mode: 0755]
UserWebsites.mdwn [new file with mode: 0755]
UsingDatabases.mdwn [new file with mode: 0755]
UsingEmail.mdwn [new file with mode: 0755]
UsingResourceLimits.mdwn [new file with mode: 0755]
UsingSsl.mdwn [new file with mode: 0755]
VirtualHostConfiguration.mdwn [new file with mode: 0755]
VolunteerResponsePolicy.mdwn [new file with mode: 0755]
WebSpam.mdwn [new file with mode: 0755]
WebsitePasswordExample.mdwn [new file with mode: 0755]
WelcomePage.mdwn [new file with mode: 0755]
WikiSandBox.mdwn [new file with mode: 0755]
WikiStuff.mdwn [new file with mode: 0755]
ZoneTransfers.mdwn [new file with mode: 0755]

diff --git a/.ikiwiki/commitlock b/.ikiwiki/commitlock
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/.ikiwiki/hyperestraier/_attr/0001/depot b/.ikiwiki/hyperestraier/_attr/0001/depot
new file mode 100644 (file)
index 0000000..5396c63
Binary files /dev/null and b/.ikiwiki/hyperestraier/_attr/0001/depot differ
diff --git a/.ikiwiki/hyperestraier/_attr/0002/depot b/.ikiwiki/hyperestraier/_attr/0002/depot
new file mode 100644 (file)
index 0000000..ae47ea4
Binary files /dev/null and b/.ikiwiki/hyperestraier/_attr/0002/depot differ
diff --git a/.ikiwiki/hyperestraier/_attr/0003/depot b/.ikiwiki/hyperestraier/_attr/0003/depot
new file mode 100644 (file)
index 0000000..91de8c2
Binary files /dev/null and b/.ikiwiki/hyperestraier/_attr/0003/depot differ
diff --git a/.ikiwiki/hyperestraier/_attr/depot b/.ikiwiki/hyperestraier/_attr/depot
new file mode 100644 (file)
index 0000000..6c5c9cb
Binary files /dev/null and b/.ikiwiki/hyperestraier/_attr/depot differ
diff --git a/.ikiwiki/hyperestraier/_aux b/.ikiwiki/hyperestraier/_aux
new file mode 100644 (file)
index 0000000..fa42f5b
Binary files /dev/null and b/.ikiwiki/hyperestraier/_aux differ
diff --git a/.ikiwiki/hyperestraier/_fwm b/.ikiwiki/hyperestraier/_fwm
new file mode 100644 (file)
index 0000000..9809893
Binary files /dev/null and b/.ikiwiki/hyperestraier/_fwm differ
diff --git a/.ikiwiki/hyperestraier/_idx/0001 b/.ikiwiki/hyperestraier/_idx/0001
new file mode 100644 (file)
index 0000000..522bc8f
Binary files /dev/null and b/.ikiwiki/hyperestraier/_idx/0001 differ
diff --git a/.ikiwiki/hyperestraier/_kwd/0001/depot b/.ikiwiki/hyperestraier/_kwd/0001/depot
new file mode 100644 (file)
index 0000000..4a63c1d
Binary files /dev/null and b/.ikiwiki/hyperestraier/_kwd/0001/depot differ
diff --git a/.ikiwiki/hyperestraier/_kwd/0002/depot b/.ikiwiki/hyperestraier/_kwd/0002/depot
new file mode 100644 (file)
index 0000000..4a63c1d
Binary files /dev/null and b/.ikiwiki/hyperestraier/_kwd/0002/depot differ
diff --git a/.ikiwiki/hyperestraier/_kwd/0003/depot b/.ikiwiki/hyperestraier/_kwd/0003/depot
new file mode 100644 (file)
index 0000000..4a63c1d
Binary files /dev/null and b/.ikiwiki/hyperestraier/_kwd/0003/depot differ
diff --git a/.ikiwiki/hyperestraier/_kwd/depot b/.ikiwiki/hyperestraier/_kwd/depot
new file mode 100644 (file)
index 0000000..6c5c9cb
Binary files /dev/null and b/.ikiwiki/hyperestraier/_kwd/depot differ
diff --git a/.ikiwiki/hyperestraier/_list b/.ikiwiki/hyperestraier/_list
new file mode 100644 (file)
index 0000000..6061eb9
Binary files /dev/null and b/.ikiwiki/hyperestraier/_list differ
diff --git a/.ikiwiki/hyperestraier/_meta b/.ikiwiki/hyperestraier/_meta
new file mode 100644 (file)
index 0000000..7b9bdd2
Binary files /dev/null and b/.ikiwiki/hyperestraier/_meta differ
diff --git a/.ikiwiki/hyperestraier/_text/0001/depot b/.ikiwiki/hyperestraier/_text/0001/depot
new file mode 100644 (file)
index 0000000..bdb9822
Binary files /dev/null and b/.ikiwiki/hyperestraier/_text/0001/depot differ
diff --git a/.ikiwiki/hyperestraier/_text/0002/depot b/.ikiwiki/hyperestraier/_text/0002/depot
new file mode 100644 (file)
index 0000000..333c5b1
Binary files /dev/null and b/.ikiwiki/hyperestraier/_text/0002/depot differ
diff --git a/.ikiwiki/hyperestraier/_text/0003/depot b/.ikiwiki/hyperestraier/_text/0003/depot
new file mode 100644 (file)
index 0000000..70d5f0f
Binary files /dev/null and b/.ikiwiki/hyperestraier/_text/0003/depot differ
diff --git a/.ikiwiki/hyperestraier/_text/0004/depot b/.ikiwiki/hyperestraier/_text/0004/depot
new file mode 100644 (file)
index 0000000..83fc2f3
Binary files /dev/null and b/.ikiwiki/hyperestraier/_text/0004/depot differ
diff --git a/.ikiwiki/hyperestraier/_text/0005/depot b/.ikiwiki/hyperestraier/_text/0005/depot
new file mode 100644 (file)
index 0000000..f518260
Binary files /dev/null and b/.ikiwiki/hyperestraier/_text/0005/depot differ
diff --git a/.ikiwiki/hyperestraier/_text/0006/depot b/.ikiwiki/hyperestraier/_text/0006/depot
new file mode 100644 (file)
index 0000000..c298952
Binary files /dev/null and b/.ikiwiki/hyperestraier/_text/0006/depot differ
diff --git a/.ikiwiki/hyperestraier/_text/0007/depot b/.ikiwiki/hyperestraier/_text/0007/depot
new file mode 100644 (file)
index 0000000..bfcba6e
Binary files /dev/null and b/.ikiwiki/hyperestraier/_text/0007/depot differ
diff --git a/.ikiwiki/hyperestraier/_text/depot b/.ikiwiki/hyperestraier/_text/depot
new file mode 100644 (file)
index 0000000..c839e8f
Binary files /dev/null and b/.ikiwiki/hyperestraier/_text/depot differ
diff --git a/.ikiwiki/hyperestraier/_xfm b/.ikiwiki/hyperestraier/_xfm
new file mode 100644 (file)
index 0000000..fa42f5b
Binary files /dev/null and b/.ikiwiki/hyperestraier/_xfm differ
diff --git a/.ikiwiki/hyperestraier/cgi b/.ikiwiki/hyperestraier/cgi
new file mode 120000 (symlink)
index 0000000..723630c
--- /dev/null
@@ -0,0 +1 @@
+/usr/lib/estraier/estseek.cgi
\ No newline at end of file
diff --git a/.ikiwiki/hyperestraier/cgi.conf b/.ikiwiki/hyperestraier/cgi.conf
new file mode 100644 (file)
index 0000000..828b3ef
--- /dev/null
@@ -0,0 +1,31 @@
+indexname: /afs/hcoop.net/common/ikiwiki/source//.ikiwiki/hyperestraier
+tmplfile: /afs/hcoop.net/common/ikiwiki/source//.ikiwiki/hyperestraier/cgi.tmpl
+topfile: /dev/null
+logfile:
+logformat: 
+replace: ^file:///afs/hcoop.net/common/ikiwiki/dest{{!}}http://ikiwiki.hcoop.net/
+showreal: false
+perpage: 10,20,30,40,50,100
+attrselect: false
+showscore: false
+extattr: date|Date
+snipwwidth: 480
+sniphwidth: 96
+snipawidth: 96
+condgstep: 2
+dotfidf: true
+scancheck: false
+smplphrase: true
+phraseform: 2
+candetail: true
+smlrvnum: 0
+smlrtune: 16 1024 4096
+clipview: 2
+relkeynum: 0
+spcache:
+wildmax: 256
+qxpndcmd:
+helpfile: estseek.help
+deftitle: 
+attrwidth: 80
+dispproxy: 
diff --git a/.ikiwiki/hyperestraier/cgi.tmpl b/.ikiwiki/hyperestraier/cgi.tmpl
new file mode 100644 (file)
index 0000000..afb8c83
--- /dev/null
@@ -0,0 +1,35 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html>
+<head>
+<base href="http://ikiwiki.hcoop.net/" />
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<title>search</title>
+<link rel="stylesheet" href="http://ikiwiki.hcoop.net/style.css" type="text/css" />
+<link rel="stylesheet" href="http://ikiwiki.hcoop.net/local.css" type="text/css" />
+
+</head>
+<body>
+
+<div class="header">
+<span>
+<a href="http://ikiwiki.hcoop.net/">Hcoop Ikiwiki</a>/ search
+</span>
+</div>
+
+<div id="content">
+<!--ESTFORM-->
+
+<!--ESTRESULT-->
+
+<!--ESTINFO-->
+
+
+</div>
+
+<div id="footer">
+<!-- from Hcoop Ikiwiki -->
+</div>
+
+</body>
+</html>
diff --git a/.ikiwiki/ikiwiki.setup b/.ikiwiki/ikiwiki.setup
new file mode 100644 (file)
index 0000000..32b4f00
--- /dev/null
@@ -0,0 +1,114 @@
+#!/usr/bin/perl
+
+#
+#  Please make sure that all paths in this file are in /afs -- this
+#  makes it possible to "git push" via AFS.
+#
+
+# Remember to re-run ikiwiki --setup any time you edit this file.
+
+use IkiWiki::Setup::Standard {
+    wikiname => "Hcoop Ikiwiki",
+    adminemail => 'admins@hcoop.net',
+
+    # Be sure to customise these..
+    srcdir => "/afs/hcoop.net/common/ikiwiki/source/",
+    destdir => "/afs/hcoop.net/common/ikiwiki/dest/",
+
+    url => "http://ikiwiki.hcoop.net/",
+    cgiurl => "http://ikiwiki.hcoop.net/cgi",
+    templatedir => "/afs/hcoop.net/common/ikiwiki/templates",
+    underlaydir => "/afs/hcoop.net/common/ikiwiki/basewiki",
+
+    rcs => "git",
+
+    # mwolson, do you know how to set these?
+    #historyurl => "http://git.example.org/gitweb.cgi?p=wiki.git;a=history;f=[[file]]",
+    #diffurl => "http://git.example.org/gitweb.cgi?p=wiki.git;a=blobdiff;h=[[sha1_to]];hp=[[sha1_from]];hb=[[sha1_parent]];f=[[file]]",
+    gitorigin_branch => "origin",
+    gitmaster_branch => "master",
+
+    wrappers => [
+        {
+            # The cgi wrapper; generated by 'ikiwiki --wrappers'
+            cgi => 1,
+            wrapper => "/afs/hcoop.net/common/ikiwiki/bin/ikiwiki.cgi",
+            wrappermode => "06755",
+        },
+        {
+            wrapper => "/afs/hcoop.net/common/ikiwiki/repo/hooks/post-update",
+            wrappermode => "04755",
+            # Enable mail notifications of commits.
+            notify => 1,
+        },
+    ],
+
+    # Generate rss feeds for blogs?
+    rss => 1,
+    # Generate atom feeds for blogs?
+    atom => 1,
+
+    # Urls to ping with XML-RPC when rss feeds are updated
+    #pingurl => [qw{http://rpc.technorati.com/rpc/ping}],
+    # Include discussion links on all pages?
+    discussion => 1,
+
+    # To exclude files matching a regexp from processing. This adds to
+    # the default exclude list.
+    #exclude => qr/*\.wav/,
+    # To change the extension used for generated html files.
+    #htmlext => 'htm',
+    # Time format (for strftime)
+    #timeformat => '%c',
+    # Locale to use. Must be a UTF-8 locale.
+    #locale => 'en_US.UTF-8',
+    # Only send cookies over SSL connections.
+    #sslcookie => 1,
+
+    # Logging settings:
+    #verbose => 1,
+    syslog => 0,
+
+    # To link to user pages in a subdirectory of the wiki.
+    #userdir => "users",
+    # To create output files named page.html rather than page/index.html.
+    #usedirs => 0,
+    # Simple spam prevention: require an account-creation password.
+    #account_creation_password => "example",
+
+    # editdiff doesn't seem to work
+    add_plugins => [qw{httpauth camelcase wikitext search teximg editdiff graphviz table more toggle plaintext poll img linkmap toc sidebar fortune tag html meta orphans brokenlinks pagecount inline}],
+
+# waiting for {attach} plugin to be released; use git for now
+#    attach => {
+#       enabled => 1, #If false, no new attachments are allowed via the web interface
+#       every_page => 1, #Toggles whether attachments are allowed on every page of the IkiWiki
+#    },
+
+
+    #add_plugins => [qw{goodstuff search wikitext camelcase
+    #                   htmltidy fortune sidebar map rst anonok}],
+    # If you want to disable any of the default plugins, list them here.
+    disable_plugins => [qw{passwordauth}],
+    #disable_plugins => [qw{inline htmlscrubber passwordauth openid}],
+    # To add a directory to the perl searh path, use this.
+    #libdir => "/home/me/.ikiwiki/",
+
+    # For use with the tag plugin, make all tags be located under a
+    # base page.
+    #tagbase => "tag",
+
+    # For use with the search plugin if your estseek.cgi is located
+    # somewhere else.
+    #estseek => "/usr/lib/estraier/estseek.cgi",
+
+    # For use with the openid plugin, to give an url to a page users
+    # can use to signup for an OpenID.
+    #openidsignup => "http://myopenid.com/",
+
+    # For use with the mirrorlist plugin, a list of mirrors.
+    #mirrorlist => {
+    #    mirror1 => "http://hostname1",
+    #    mirror2 => "http://hostname2/mirror",
+    #},
+}
diff --git a/.ikiwiki/index b/.ikiwiki/index
new file mode 100644 (file)
index 0000000..68eb17b
--- /dev/null
@@ -0,0 +1,122 @@
+mtime=1193537498 ctime=1193537498 src=DomTool/Examples.mdwn dest=DomTool/Examples/index.html link=DomTool link=WebNodes link=DocumentRoot link=DomTool/Examples/discussion depends=sidebar
+mtime=1193534889 ctime=1193534889 src=membermanual.mdwn dest=membermanual/index.html link=membermanual/discussion depends=sidebar
+mtime=1192992183 ctime=1171139226 src=pagespec.mdwn dest=pagespec/index.html link=PageSpec link=SubPage link=SandBox link=pagespec/discussion depends=sidebar
+mtime=1193537497 ctime=1193537497 src=ContactHcoop.mdwn dest=ContactHcoop/index.html link=IrcChannel link=ContactHcoop/discussion depends=sidebar
+mtime=1192992183 ctime=1171139226 src=local.css dest=local.css
+mtime=1193537497 ctime=1193537497 src=AfsClientConfiguration.mdwn dest=AfsClientConfiguration/index.html link=AfsFedoraClientConfiguration link=TroubleshootingAFS link=AfsClientConfiguration/discussion depends=sidebar
+mtime=1192992183 ctime=1171139226 src=shortcuts.mdwn dest=shortcuts/index.html link=shortcuts/discussion depends=sidebar
+mtime=1193537498 ctime=1193537498 src=JustinLeitgeb.mdwn dest=JustinLeitgeb/index.html link=JustinLeitgeb/discussion depends=sidebar
+mtime=1192992183 ctime=1171139225 src=smileys/alert.png dest=smileys/alert.png
+mtime=1193537498 ctime=1193537498 src=MemberManual/UsingDomtool.mdwn dest=MemberManual/UsingDomtool/index.html link=MemberManual link=DomTool link=DomTool/UserGuide link=MemberManual/UsingDomtool/discussion depends=sidebar
+mtime=1193537498 ctime=1193537498 src=MemberManual/UsingCron.mdwn dest=MemberManual/UsingCron/index.html link=MemberManual/RunningUnattendedCommands link=MemberManual/UsingCron/discussion depends=sidebar
+mtime=1192992183 ctime=1171139226 src=preprocessordirective.mdwn dest=preprocessordirective/index.html link=WikiLink link=preprocessordirective/discussion depends=sidebar
+mtime=1193537498 ctime=1193537498 src=MemberManual/Databases.mdwn dest=MemberManual/Databases/index.html link=MemberManual link=MemberManual/Databases/discussion depends=sidebar
+mtime=1193537498 ctime=1193537498 src=TipsAndTricks.mdwn dest=TipsAndTricks/index.html link=TipsAndTricks/discussion depends=sidebar
+mtime=1193537497 ctime=1193537497 src=AdminArea.mdwn dest=AdminArea/index.html link=AndrewFileSystem link=BackupInfo link=ChangingAdminPassword link=DaemonAdmin link=DomTool link=IpAddresses link=NewSystemHardware link=TaskDistribution link=SoftwareArchitecturePlans link=SystemArchitecturePlans link=OnSiteStuff link=OneTimeCosts2007 link=HcoopAddresses link=AdminArea/discussion depends=sidebar
+mtime=1193537498 ctime=1193537498 src=TaskDistribution.mdwn dest=TaskDistribution/index.html link=MichaelOlson link=AdamChlipala link=NathanKennedy link=AdamMegacz link=DavorOcelic link=JustinLeitgeb link=ClintonEbadi link=BrianTempleton link=DomtoolTwo link=TaskDistribution/discussion depends=sidebar
+mtime=1192992183 ctime=1171139225 src=smileys/smile4.png dest=smileys/smile4.png
+mtime=1193537498 ctime=1193537498 src=MemberManual/GettingStarted/AccountCreated.mdwn dest=MemberManual/GettingStarted/AccountCreated/index.html link=MemberManual link=MemberManual/GettingStarted/AccountCreated/discussion depends=sidebar
+mtime=1193537497 ctime=1193537497 src=DaemonAdmin.mdwn dest=DaemonAdmin/index.html link=DaemonAdmin/Apache link=DaemonAdmin/Bind link=DaemonAdmin/LDAP link=DaemonAdmin/MySQL link=DaemonAdmin/PostgreSQL link=DaemonAdmin/discussion depends=sidebar
+mtime=1192992183 ctime=1171139225 src=smileys/tired.png dest=smileys/tired.png
+mtime=1192992183 ctime=1171139225 src=smileys/star_on.png dest=smileys/star_on.png
+mtime=1192992183 ctime=1171139225 src=smileys/ohwell.png dest=smileys/ohwell.png
+mtime=1193537497 ctime=1193537497 src=AdminGroup.mdwn dest=AdminGroup/index.html link=IpAddresses link=FrankBynum link=AdamChlipala link=NathanKennedy link=AdamMegacz link=DavorOcelic link=MichaelOlson link=OmryYadan link=AdminGroup/discussion depends=sidebar
+mtime=1193537498 ctime=1193537498 src=HCoopAdvocacy.mdwn dest=HCoopAdvocacy/index.html link=ProspectiveMemberFaq link=JoinUs link=MemberManual link=OurHistory link=TheHcoopLook link=T-Shirt link=HcoopPublicity link=LogoDiscussion link=NathanKennedy link=HCoopAdvocacy/discussion depends=sidebar
+mtime=1193537498 ctime=1193537498 src=DomTool/UserGuide.mdwn dest=DomTool/UserGuide/index.html link=DomTool link=MemberManual/GettingStarted/AfsExamples link=DomTool/LanguageReference link=DocumentRoot link=DomTool/Examples link=DomTool/UserGuide/discussion depends=sidebar
+mtime=1193537498 ctime=1193537498 src=HcoopPolicies.mdwn dest=HcoopPolicies/index.html link=EnvironmentalPolicy link=NamingConventions link=SevenPrinciples link=VolunteerResponsePolicy link=HcoopPolicies/discussion depends=sidebar
+mtime=1193537498 ctime=1193537498 src=OldWelcomePage.mdwn dest=OldWelcomePage/index.html link=DefaultFrontPage link=NewServersSetup link=MigrationTips link=NewFeatures link=ProspectiveMemberFaq link=MemberFaq link=NewMember link=SshConfiguration link=FtpConfiguration link=FirewallRules link=FileTransfer link=UserWebsites link=UsingEmail link=UsingDatabases link=DynamicWebSites link=SystemAuthentication link=BackupServices link=UsingResourceLimits link=JabberServer link=SpamAssassin link=WebSpam link=CustomDaemons link=TipsAndTricks link=DomainRegistration link=DomainTool link=DnsConfiguration link=EmailConfiguration link=AfsClientConfiguration link=MailingListConfiguration link=MoinMoinConfiguration link=UsingSsl link=VirtualHostConfiguration link=MemberDues link=ContactHcoop link=HcoopMarketing link=HcoopPolicies link=HcoopGuidelines link=HcoopStructure link=IrcMeetings link=OtherGroups link=CategoryOutdated link=InstalledSoftware link=InstallationLog link=CategorySystemAdministration link=PrincipalsForNonHumans link=OpenProblems link=KvmInfo link=BackupInfo link=OldWelcomePage/discussion depends=sidebar
+mtime=1193537498 ctime=1193537498 src=IpAddresses.mdwn dest=IpAddresses/index.html link=IpAddresses/discussion depends=sidebar
+mtime=1192992183 ctime=1171139225 src=smileys/thumbs-up.png dest=smileys/thumbs-up.png
+mtime=1193537498 ctime=1193537498 src=MemberManual/MigrationGuide.mdwn dest=MemberManual/MigrationGuide/index.html link=NewServersSetup link=Kerberos link=RealSecurity link=DenyHosts link=UsingDatabases link=DomTool link=ProcmailExample link=SpamAssassin link=UsingEmail link=AndrewFileSystem link=MemberManual/MigrationGuide/discussion depends=sidebar
+mtime=1193537498 ctime=1193537498 src=OmryYadan.mdwn dest=OmryYadan/index.html link=OmryYadan/discussion depends=sidebar
+mtime=1193537498 ctime=1193537498 src=FtpConfiguration.mdwn dest=FtpConfiguration/index.html link=FtpConfiguration/discussion depends=sidebar
+mtime=1193537498 ctime=1193537498 src=ProspectiveMemberFaq.mdwn dest=ProspectiveMemberFaq/index.html link=HcoopBylaws link=IrcChannel link=PayPal link=DomTool link=WelcomePage link=HardwareSpecs link=ProspectiveMemberFaq/discussion depends=sidebar
+mtime=1193087757 ctime=1193086461 src=imelite.mdwn dest=imelite/index.html link=imelite/discussion depends=sidebar
+mtime=1193537498 ctime=1193537498 src=KrunkInfoz.mdwn dest=KrunkInfoz/index.html link=KrunkInfoz/discussion depends=sidebar
+mtime=1192992183 ctime=1171139225 src=smileys/redface.png dest=smileys/redface.png
+mtime=1192990630 ctime=1192990630 src=README.CRUCIAL-AVOID.CORRUPTION dest=README.CRUCIAL-AVOID.CORRUPTION
+mtime=1193537498 ctime=1193537498 src=UsingEmail.mdwn dest=UsingEmail/index.html link=SpamAssassin link=DomainTool link=NathanKennedy link=SpamAssassinFilter link=FeedingSpamAssassin link=SpamAssassinAdmin link=MichaelOlson link=ProcmailExample link=X509Anchors link=AdamChlipala link=AndreKuehne link=UsingEmail/discussion depends=sidebar
+mtime=1193091550 ctime=1193089952 src=examplepageinrawhtml.html dest=examplepageinrawhtml/index.html link=PayPal link=examplepageinrawhtml/discussion depends=sidebar
+mtime=1192992183 ctime=1171139226 src=helponformatting.mdwn dest=helponformatting/index.html link=MarkDown link=WikiLink link=PreProcessorDirective link=smileys link=helponformatting/discussion depends=sidebar
+mtime=1192992183 ctime=1171139226 src=subpage.mdwn dest=subpage/index.html link=SubPage link=SubPage/LinkingRules link=LinkingRules link=subpage/discussion depends=sidebar
+mtime=1192992183 ctime=1171139225 src=smileys/frown.png dest=smileys/frown.png
+mtime=1192992183 ctime=1171139226 src=smileys.mdwn dest=smileys/index.html link=smileys/smile.png link=smileys/biggrin.png link=smileys/smile2.png link=smileys/smile3.png link=smileys/smile4.png link=smileys/ohwell.png link=smileys/devil.png link=smileys/angry.png link=smileys/frown.png link=smileys/sad.png link=smileys/tongue.png link=smileys/redface.png link=smileys/tired.png link=smileys/thumbs-up.png link=smileys/icon-error.png link=smileys/checkmark.png link=smileys/idea.png link=smileys/attention.png link=smileys/alert.png link=smileys/star_on.png link=smileys/star_off.png link=WikiLink link=smileys/discussion depends=sidebar
+mtime=1193537498 ctime=1193537498 src=MemberManual/GettingStarted/NewMember.mdwn dest=MemberManual/GettingStarted/NewMember/index.html link=PayPal link=MemberDues link=SshConfiguration link=MemberManual link=MemberManual/GettingStarted/NewMember/discussion depends=sidebar
+mtime=1193091694 ctime=1193091694 src=images/ikiwiki.png dest=images/ikiwiki.png depends=sidebar
+mtime=1193537497 ctime=1193537497 src=BackupInfo.mdwn dest=BackupInfo/index.html link=BackupInfo/discussion depends=sidebar
+mtime=1192992183 ctime=1171139225 src=smileys/smile.png dest=smileys/smile.png
+mtime=1193537497 ctime=1193537497 src=DaemonAdmin/Bind.mdwn dest=DaemonAdmin/Bind/index.html link=DomTool link=DomTool/AdminProcedures link=DaemonAdmin/Bind/discussion depends=sidebar
+mtime=1193537498 ctime=1193537498 src=MemberManual/VersionControl.mdwn dest=MemberManual/VersionControl/index.html link=MemberManual link=MemberManual/VersionControl/discussion depends=sidebar
+mtime=1193537498 ctime=1193537498 src=HcoopGuidelines.mdwn dest=HcoopGuidelines/index.html link=GenderNeutralLanguage link=DeveloperGuidelines link=HcoopGuidelines/discussion depends=sidebar
+mtime=1193537498 ctime=1193537498 src=DomTool/Implementation.mdwn dest=DomTool/Implementation/index.html link=DomTool link=DomTool/UserGuide link=DomTool/Building link=DomTool/ArchitectureOverview link=DomTool/LanguageReference link=DomTool/Implementation/discussion depends=sidebar
+mtime=1193091908 ctime=1193089797 src=sidebar.mdwn dest=sidebar/index.html link=sidebar/discussion link=images/ikiwiki.png depends=((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((*)&#32;or&#32;(sidebar))&#32;or&#32;(*))&#32;or&#32;(*))&#32;or&#32;(*))&#32;or&#32;(*))&#32;or&#32;(*))&#32;or&#32;(*))&#32;or&#32;(*))&#32;or&#32;(*))&#32;or&#32;(*))&#32;or&#32;(*))&#32;or&#32;(*))&#32;or&#32;(*))&#32;or&#32;(*))&#32;or&#32;(*))&#32;or&#32;(*))&#32;or&#32;(*))&#32;or&#32;(*))&#32;or&#32;(*))&#32;or&#32;(*))&#32;or&#32;(*))&#32;or&#32;(*))&#32;or&#32;(*))&#32;or&#32;(*))&#32;or&#32;(*))&#32;or&#32;(*))&#32;or&#32;(*))&#32;or&#32;(*))&#32;or&#32;(*))&#32;or&#32;(*))&#32;or&#32;(*))&#32;or&#32;(*))&#32;or&#32;(*))&#32;or&#32;(*))&#32;or&#32;(*))&#32;or&#32;(*))&#32;or&#32;(*))&#32;or&#32;(*))&#32;or&#32;(*))&#32;or&#32;(*))&#32;or&#32;(*))&#32;or&#32;(*))&#32;or&#32;(*))&#32;or&#32;(*))&#32;or&#32;(*))&#32;or&#32;(*))&#32;or&#32;(*))&#32;or&#32;(*))&#32;or&#32;(*))&#32;or&#32;(*))&#32;or&#32;(*))&#32;or&#32;(*))&#32;or&#32;(*))&#32;or&#32;(*))&#32;or&#32;(*))&#32;or&#32;(*))&#32;or&#32;(*))&#32;or&#32;(*))&#32;or&#32;(*))&#32;or&#32;(*))&#32;or&#32;(*))&#32;or&#32;(*))&#32;or&#32;(*))&#32;or&#32;(*))&#32;or&#32;(*))&#32;or&#32;(*))&#32;or&#32;(*))&#32;or&#32;(*))&#32;or&#32;(*))&#32;or&#32;(*))&#32;or&#32;(*))&#32;or&#32;(*))&#32;or&#32;(*))&#32;or&#32;(*))&#32;or&#32;(*))&#32;or&#32;(*))&#32;or&#32;(*))&#32;or&#32;(*))&#32;or&#32;(*))&#32;or&#32;(*))&#32;or&#32;(*))&#32;or&#32;(*))&#32;or&#32;(*))&#32;or&#32;(*))&#32;or&#32;(*))&#32;or&#32;(*))&#32;or&#32;(*))&#32;or&#32;(*))&#32;or&#32;(*))&#32;or&#32;(*))&#32;or&#32;(*))&#32;or&#32;(*)
+mtime=1193537674 ctime=1192990171 src=index.mdwn dest=index.html link=OldWelcomePage link=MemberManual link=HCoopAdvocacy link=ContactHcoop link=AdminArea link=BoardArea link=WikiStuff link=MichaelOlson link=index/discussion depends=sidebar
+mtime=1193537498 ctime=1193537498 src=MemberManual/GettingStarted/AfsExamples.mdwn dest=MemberManual/GettingStarted/AfsExamples/index.html link=MemberManual/GettingStarted/AfsExamples/discussion depends=sidebar
+mtime=1193537498 ctime=1193537498 src=HcoopStructure.mdwn dest=HcoopStructure/index.html link=HcoopBylaws link=RegisteredAgent link=BoardOfDirectors link=HcoopStructure/discussion depends=sidebar
+mtime=1193537577 ctime=1193537498 src=WelcomePage.mdwn dest=WelcomePage/index.html link=OldWelcomePage link=MemberManual link=HCoopAdvocacy link=ContactHcoop link=AdminArea link=BoardArea link=WikiStuff link=MichaelOlson link=WelcomePage/discussion depends=sidebar
+mtime=1193537498 ctime=1193537498 src=StyleGuide.mdwn dest=StyleGuide/index.html link=TableOfContents link=DomTool link=MemberManual link=StyleGuide/discussion depends=sidebar
+mtime=1193537498 ctime=1193537498 src=SoftwareArchitecturePlans.mdwn dest=SoftwareArchitecturePlans/index.html link=AdamChlipala link=DavorOcelic link=JustinLeitgeb link=DnsConfiguration link=DomainRegistration link=FtpConfiguration link=FileTransfer link=ServedOn link=ClintonEbadi link=UserWebsites link=DynamicWebSites link=VirtualHostConfiguration link=UsingEmail link=EmailConfiguration link=JabberServer link=MailingListConfiguration link=UsingDatabases link=SpamAssassin link=FeedingSpamAssassin link=SpamAssassinAdmin link=SshConfiguration link=ShaunEmpie link=DomainTool link=SquirrelMail link=MoinMoin link=MichaelOlson link=UserPreferences link=ResourceLimits link=DaemonFileSecurity link=FirewallRules link=SoftwareArchitecturePlans/discussion depends=sidebar
+mtime=1192992183 ctime=1171139225 src=smileys/star_off.png dest=smileys/star_off.png
+mtime=1192992183 ctime=1171139225 src=smileys/smile2.png dest=smileys/smile2.png
+mtime=1193537497 ctime=1193537497 src=ChangingAdminPassword.mdwn dest=ChangingAdminPassword/index.html link=ChangingAdminPassword/discussion depends=sidebar
+mtime=1193537498 ctime=1193537498 src=NewServersSetup/FinalPreparations.mdwn dest=NewServersSetup/FinalPreparations/index.html link=NewServersSetup link=NewServersSetup/FinalPreparations/discussion depends=sidebar
+mtime=1193537497 ctime=1193537497 src=DomTool/AdminProcedures.mdwn dest=DomTool/AdminProcedures/index.html link=DomTool/UserGuide link=DomTool link=DomTool/Building link=DomTool/AdminProcedures/discussion depends=sidebar
+mtime=1193537498 ctime=1193537498 src=Meeting20060909.mdwn dest=Meeting20060909/index.html link=DomtoolTwo link=Meeting20060909/discussion depends=sidebar
+mtime=1192992183 ctime=1171139225 src=smileys/checkmark.png dest=smileys/checkmark.png
+mtime=1192992183 ctime=1171139225 src=smileys/icon-info.png dest=smileys/icon-info.png
+mtime=1193537498 ctime=1193537498 src=RewriteGoals/PagesToDelete.mdwn dest=RewriteGoals/PagesToDelete/index.html link=ProjectGroupsTemplate link=ProjectTemplate link=ThwartingPackages link=MichaelOlson link=RewriteGoals/PagesToDelete/discussion depends=sidebar
+mtime=1193537497 ctime=1193537497 src=DomTool.mdwn dest=DomTool/index.html link=DomTool/UserGuide link=DomTool/Examples link=DomTool/LanguageReference link=DomTool/AdminProcedures link=DomTool link=DomTool/ArchitectureOverview link=DomTool/Plugins link=DomTool/AdditionalClients link=DomTool/SslProcedures link=DomTool/Building link=DomTool/Implementation link=DomTool/Debugging link=DomainTool link=DomtoolTwo link=AdamChlipala link=DomTool/discussion depends=sidebar
+mtime=1193537498 ctime=1193537498 src=WikiStuff.mdwn dest=WikiStuff/index.html link=DefaultFrontPage link=MoinMoin link=StyleGuide link=WikiStuff/discussion depends=sidebar
+mtime=1192992183 ctime=1171139225 src=subpage/linkingrules.mdwn dest=subpage/linkingrules/index.html link=SubPage link=WikiLink link=FooBar link=OtherPage link=BazBar link=subpage/linkingrules/discussion depends=sidebar
+mtime=1193537498 ctime=1193537498 src=ProcmailExample.mdwn dest=ProcmailExample/index.html link=LifeReader link=Neki_Fujiyama link=InfoWorld link=JustinLeitgeb link=ProcmailExample/discussion depends=sidebar
+mtime=1193537498 ctime=1193537498 src=IrcMeetings.mdwn dest=IrcMeetings/index.html link=Meeting20071021 link=Meeting20060909 link=Meeting20060624 link=IrcMeetings/discussion depends=sidebar
+mtime=1192992183 ctime=1171139225 src=smileys/angry.png dest=smileys/angry.png
+mtime=1192992183 ctime=1171139225 src=smileys/biggrin.png dest=smileys/biggrin.png
+mtime=1193537498 ctime=1193537498 src=MemberManual.mdwn dest=MemberManual/index.html link=MemberManual/MigrationGuide link=MemberManual/GettingStarted link=MemberManual/UsingDomtool link=DomTool link=MemberManual/TransferringFiles link=MemberManual/EmailDelivery link=MemberManual/ServingWebsites link=MemberManual/Databases link=MemberManual/RunningUnattendedCommands link=MemberManual/UsingCron link=MemberManual/VersionControl link=MichaelOlson link=MemberManual/discussion depends=sidebar
+mtime=1193537498 ctime=1193537498 src=TroubleshootingAFS.mdwn dest=TroubleshootingAFS/index.html link=CellServerDB link=TroubleshootingAFS/discussion depends=sidebar
+mtime=1193537497 ctime=1193537497 src=DaemonAdmin/LDAP.mdwn dest=DaemonAdmin/LDAP/index.html link=AuthenticationScheme link=DaemonAdmin/LDAP/discussion depends=sidebar
+mtime=1193537498 ctime=1193537498 src=RewriteGoals/PagesNeedingLove.mdwn dest=RewriteGoals/PagesNeedingLove/index.html link=MemberManual/UsingDomtool link=DomTool link=DomTool/UserGuide link=MemberManual link=AdamChlipala link=MemberManual/MigrationGuide link=MemberManual/TransferringFiles link=MemberManual/EmailDelivery link=MemberManual/ServingWebsites link=MemberManual/UsingCron link=JoinUs link=OurHistory link=MemberManual/VersionControl link=MemberManual/VersionControl/git link=RewriteGoals/PagesNeedingLove/discussion depends=sidebar
+mtime=1193537497 ctime=1193537497 src=BadContent.mdwn dest=BadContent/index.html link=MyServer link=SaNaLHaCKERLaR link=ViewMyLoan link=BadContent/discussion depends=sidebar
+mtime=1192992183 ctime=1171139226 src=wikilink.mdwn dest=wikilink/index.html link=WikiLinks link=WikiLink link=SubPage/LinkingRules link=SubPage link=SandBox link=wikilink/discussion depends=sidebar
+mtime=1193537498 ctime=1193537498 src=MoinMoinConfiguration.mdwn dest=MoinMoinConfiguration/index.html link=MoinMoin link=HelpOnInstalling/WikiInstanceCreation link=VirtualHostConfiguration link=DnsConfiguration link=AdamChlipala link=JeremyPenner link=DavorOcelic link=MoinMoinConfiguration/discussion depends=sidebar
+mtime=1193537498 ctime=1193537498 src=RewriteGoals.mdwn dest=RewriteGoals/index.html link=WelcomePage link=DomTool/Examples link=MigrationTips link=MemberManual link=StyleGuide link=MichaelOlson link=RyanMikulovsky link=MichaelPotter link=RewriteGoals/PagesToDelete link=RewriteGoals/PagesNeedingLove link=RewriteGoals/discussion depends=sidebar
+mtime=1192992183 ctime=1171139226 src=markdown.mdwn dest=markdown/index.html link=HelpOnFormatting link=WikiLink link=PreProcessorDirective link=markdown/discussion depends=sidebar
+mtime=1193537497 ctime=1193537497 src=BoardArea.mdwn dest=BoardArea/index.html link=BoardOfDirectors link=HcoopPolicies link=HcoopGuidelines link=HcoopStructure link=IrcMeetings link=BoardArea/discussion depends=sidebar
+mtime=1193537498 ctime=1193537498 src=DomTool/Plugins.mdwn dest=DomTool/Plugins/index.html link=DomTool/UserGuide link=DomTool link=DomTool/Plugins/discussion depends=sidebar
+mtime=1193537498 ctime=1193537498 src=SpamAssassinAdmin.mdwn dest=SpamAssassinAdmin/index.html link=SpamAssassin link=SiteSpam link=SiteHam link=CategorySystemAdministration link=SpamAssassinAdmin/discussion depends=sidebar
+mtime=1193537498 ctime=1193537498 src=MemberManual/RunningUnattendedCommands.mdwn dest=MemberManual/RunningUnattendedCommands/index.html link=MemberManual link=MemberManual/RunningUnattendedCommands/discussion depends=sidebar
+mtime=1193537498 ctime=1193537498 src=NewSystemHardware.mdwn dest=NewSystemHardware/index.html link=NewSystemHardwareArchive link=NewServersSetup link=PowerEdge link=KrunkInfoz link=ShaunEmpie link=HardwareDonations link=JustinLeitgeb link=__91__AdamMegacz link=StarTech link=NewSystemHardware/discussion depends=sidebar
+mtime=1193537497 ctime=1193537497 src=DomTool/ArchitectureOverview.mdwn dest=DomTool/ArchitectureOverview/index.html link=DomTool link=DomTool/LanguageReference link=VeriSign link=AdamChlipala link=DomTool/ArchitectureOverview/discussion depends=sidebar
+mtime=1193537498 ctime=1193537498 src=NewFeatures.mdwn dest=NewFeatures/index.html link=DomTool link=DomTool/Examples link=NewFeatures/discussion depends=sidebar
+mtime=1193537498 ctime=1193537498 src=MemberManual/TransferringFiles.mdwn dest=MemberManual/TransferringFiles/index.html link=MemberManual link=MemberManual/TransferringFiles/discussion depends=sidebar
+mtime=1193537520 ctime=1193537520 src=subpage/bazbar.mdwn dest=subpage/bazbar/index.html link=subpage/bazbar/discussion depends=sidebar
+mtime=1193537498 ctime=1193537498 src=MemberManual/DistributedSecurity.mdwn dest=MemberManual/DistributedSecurity/index.html link=PasswordlessLogin link=MemberManual/DistributedSecurity/discussion depends=sidebar
+mtime=1192992183 ctime=1171139226 src=sandbox.mdwn dest=sandbox/index.html link=SandBox link=WikiLink link=sandbox/discussion depends=sidebar
+mtime=1193537498 ctime=1193537498 src=FrankBynum.mdwn dest=FrankBynum/index.html link=FrankBynum/discussion depends=sidebar
+mtime=1192992183 ctime=1171139225 src=smileys/attention.png dest=smileys/attention.png
+mtime=1193084957 ctime=1193084957 src=discussion.mdwn dest=discussion/index.html link=discussion/discussion depends=sidebar
+mtime=1193088403 ctime=1193088403 src=exampleofaplaintextpage.txt dest=exampleofaplaintextpage/index.html link=exampleofaplaintextpage/discussion depends=sidebar
+mtime=1192992183 ctime=1171139226 src=style.css dest=style.css
+mtime=1192992183 ctime=1171139225 src=smileys/devil.png dest=smileys/devil.png
+mtime=1193537498 ctime=1193537498 src=RyanMikulovsky.mdwn dest=RyanMikulovsky/index.html link=RyanMikulovsky/discussion depends=sidebar
+mtime=1193537498 ctime=1193537498 src=VolunteerResponsePolicy.mdwn dest=VolunteerResponsePolicy/index.html link=HcoopBylaws link=AdamChlipala link=NathanKennedy link=AdamMegacz link=DavorOcelic link=MichaelOlson link=TaskDistribution link=VolunteerResponsePolicy/discussion depends=sidebar
+mtime=1193537497 ctime=1193537497 src=DaemonAdmin/Apache.mdwn dest=DaemonAdmin/Apache/index.html link=DaemonAdmin/Apache/discussion depends=sidebar
+mtime=1193537498 ctime=1193537498 src=DomTool/LanguageReference.mdwn dest=DomTool/LanguageReference/index.html link=DomTool link=DomTool/UserGuide link=DomTool/Building link=DomTool/Implementation link=DomTool/LanguageReference/discussion depends=sidebar
+mtime=1192992183 ctime=1171139226 src=blog.mdwn dest=blog/index.html link=PreProcessorDirective link=PageSpec link=SubPage link=blog/discussion depends=sidebar
+mtime=1193537497 ctime=1193537497 src=AdminPolicies.mdwn dest=AdminPolicies/index.html link=TaskDistribution link=VolunteerResponsePolicy link=PayPal link=DomainTool link=AdminPolicies/discussion depends=sidebar
+mtime=1192992183 ctime=1171139225 src=smileys/smile3.png dest=smileys/smile3.png
+mtime=1192992183 ctime=1171139225 src=smileys/idea.png dest=smileys/idea.png
+mtime=1193537497 ctime=1193537497 src=DomTool/Building.mdwn dest=DomTool/Building/index.html link=DomTool link=SourceForge link=ConfigDefault link=DomTool/Building/discussion depends=sidebar
+mtime=1193537498 ctime=1193537498 src=MemberManual/GettingStarted.mdwn dest=MemberManual/GettingStarted/index.html link=MemberManual link=IrcChannel link=MemberManual/GettingStarted/discussion depends=sidebar
+mtime=1192992183 ctime=1171139225 src=smileys/tongue.png dest=smileys/tongue.png
+mtime=1193537497 ctime=1193537497 src=AnishJacob.mdwn dest=AnishJacob/index.html link=CategoryHomepage link=AnishJacob/discussion depends=sidebar
+mtime=1192992183 ctime=1171139225 src=smileys/icon-error.png dest=smileys/icon-error.png
+mtime=1193537497 ctime=1193537497 src=DomTool/AdditionalClients.mdwn dest=DomTool/AdditionalClients/index.html link=DomTool link=SpamAssassin link=DomTool/AdditionalClients/discussion depends=sidebar
+mtime=1193537498 ctime=1193537498 src=MemberManual/EmailDelivery.mdwn dest=MemberManual/EmailDelivery/index.html link=MemberManual link=MemberManual/EmailDelivery/discussion depends=sidebar
+mtime=1192992183 ctime=1171139226 src=favicon.ico dest=favicon.ico
+mtime=1193537498 ctime=1193537498 src=JoinUs.mdwn dest=JoinUs/index.html link=MemberManual link=JoinUs/discussion depends=sidebar
+mtime=1192992183 ctime=1171139225 src=smileys/sad.png dest=smileys/sad.png
+mtime=1193084974 ctime=1193084974 src=index/discussion.mdwn dest=index/discussion/index.html link=index/discussion/discussion depends=sidebar
+mtime=1193537498 ctime=1193537498 src=MemberManual/ServingWebsites.mdwn dest=MemberManual/ServingWebsites/index.html link=MemberManual link=MemberManual/ServingWebsites/discussion depends=sidebar
+mtime=1192992183 ctime=1171139226 src=wikiicons/diff.png dest=wikiicons/diff.png
+mtime=1193537498 ctime=1193537498 src=Meeting20071021.mdwn dest=Meeting20071021/index.html link=Meeting20071021/discussion depends=sidebar
diff --git a/.ikiwiki/lockfile b/.ikiwiki/lockfile
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/.ikiwiki/sessions.db b/.ikiwiki/sessions.db
new file mode 100644 (file)
index 0000000..4c1811e
Binary files /dev/null and b/.ikiwiki/sessions.db differ
diff --git a/.ikiwiki/sessions.db.lck b/.ikiwiki/sessions.db.lck
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/.ikiwiki/userdb b/.ikiwiki/userdb
new file mode 100644 (file)
index 0000000..7d53388
Binary files /dev/null and b/.ikiwiki/userdb differ
diff --git a/AdamChlipala.mdwn b/AdamChlipala.mdwn
new file mode 100755 (executable)
index 0000000..a88e8cb
--- /dev/null
@@ -0,0 +1,6 @@
+Board member, president, treasurer, and person in charge of custom software like DomTool\r
+\r
+Home page: http://www.schizomaniac.net/\r
+\r
+----\r
+CategoryHomepage\r
diff --git a/AdamMegacz.mdwn b/AdamMegacz.mdwn
new file mode 100755 (executable)
index 0000000..8660a5c
--- /dev/null
@@ -0,0 +1,4 @@
+attachment:zombie.jpeg\r
+\r
+.\r
+y\r
diff --git a/AdamMegacz/zombie.jpeg b/AdamMegacz/zombie.jpeg
new file mode 100755 (executable)
index 0000000..f62b01b
Binary files /dev/null and b/AdamMegacz/zombie.jpeg differ
diff --git a/AdminArea.mdwn b/AdminArea.mdwn
new file mode 100755 (executable)
index 0000000..24212aa
--- /dev/null
@@ -0,0 +1,30 @@
+#pragma section-numbers off\r
+\r
+This contains a list of pages that are of interest to the admins.\r
+\r
+[[TableOfContents]]\r
+\r
+= General =\r
+\r
+ * AdminGroup: Listing of HCoop system administrators.\r
+ * AndrewFileSystem: Using our new shared filesystem.\r
+ * BackupInfo: Information on how to recover deleted files from our off-site backups.\r
+ * ChangingAdminPassword: How admins can change their UNIX passwords.\r
+ * DomTool: Administering and using the new domtool.\r
+ * IpAddresses: Listing of IPs that we use.\r
+ * NewSystemHardware: Information on the new hardware.\r
+ * SoftwareArchitecturePlans: Plans for software installation.\r
+ * SystemArchitecturePlans: Plans regarding our hardware.\r
+ * OnSiteStuff: Checklist for the next on-site visit to the new machines.\r
+ * OneTimeCosts2007: Costs associated with the new servers through April 2007.\r
+ * HcoopAddresses: Physical addresses relevant to us.\r
+\r
+= Responsibilities =\r
+\r
+ * TaskDistribution: What each sysadmin is responsible for.\r
+ * VolunteerResponsePolicy: Guidelines for responding to requests and email.\r
+\r
+= Programs =\r
+\r
+ * DaemonAdmin: Daemon-specific pages aimed at admins.\r
+ * MailmanInstallation: Additional things we must do to keep Mailman happy.\r
diff --git a/AdminGroup.mdwn b/AdminGroup.mdwn
new file mode 100755 (executable)
index 0000000..2715ccb
--- /dev/null
@@ -0,0 +1,13 @@
+#acl All:read\r
+\r
+This is a listing of the people who have access to the IpAddresses page\r
+and other protected pages.  They also are the only ones who have the\r
+ability to delete pages.\r
+\r
+ * FrankBynum\r
+ * AdamChlipala\r
+ * NathanKennedy\r
+ * AdamMegacz\r
+ * DavorOcelic\r
+ * MichaelOlson\r
+ * OmryYadan\r
diff --git a/AdminPolicies.mdwn b/AdminPolicies.mdwn
new file mode 100755 (executable)
index 0000000..f9eec88
--- /dev/null
@@ -0,0 +1,75 @@
+If we want to scale up to a larger member base and high reliability, then we need to know exactly what is expected of people who volunteer for particular duties.  That way, someone can turn down a role if he knows he can't meet the time requirements, and he knows exactly what is expected of him if he ''does'' sign on.  This page is our scratch pad for ideas on formal guidelines in this direction.\r
+\r
+See the TaskDistribution page for an in-progress assignment of people to jobs.\r
+\r
+= Policies deserving their own pages =\r
+\r
+ * VolunteerResponsePolicy\r
+\r
+= Summaries of official roles and their duties =\r
+\r
+ * '''President''': Mostly general moral leadership :-)\r
+ * '''Treasurer''': Manage that money!\r
+ * '''Secretary''': Keep official records\r
+ * '''System administrator''': Both plan and set up technical infrastructure and keep it running on a day to day basis\r
+  Note that the President/Treasurer/Secretary are officers on the board of directors, and have legal decision-making power defined under Pennsylvania law and HCoop's bylaws and articles of incorporation.  System administrators, by contrast, have only powers delegated to them by the board of directors.  Despite this, sysadmins may act quite autonomously and may be more involved with the day to day operations of HCoop than directors, though they are ultimately subordinate to and acting on behalf of the board, which in turn is elected by and represents the interests of the membership at large.\r
+\r
+= Requirements of anyone in an official role =\r
+\r
+ * Respond to e-mail to his HCoop e-mail address within 24 hours of when it is sent, barring extreme situations, whenever that mail makes it clear that it expects a response from the particular person\r
+ * Make an official notification to the co-op when he won't be able to meet the above requirement, because he goes on vacation or for whatever other reason\r
+   * Send e-mail to a list containing just people in special roles?\r
+   * Post to a wiki page?\r
+\r
+= Sysadmin stuff =\r
+\r
+How many sysadmins (all with root access) should we have?  4 seems like about the right number.  It would be nice if we could somehow pick admins with good spread across the different time zones, to give us more times when one is likely to be awake and able to handle emergencies.\r
+\r
+It might be nice for each sysadmin to have brief "office hours" each week, where he agrees to be on IRC answering questions and helping people in real time.\r
+\r
+= Official list of tasks =\r
+\r
+We should try to come up with a list of task types that covers everything expected of people in special roles. Each task should have an associated list of people in charge of it, listed in a total order.  At any time, the first person on the list for a task who is not "on vacation" via the above allowance is responsible by default for handling it.  Of course, it's always possible to make special arrangements for some tasks, but the lead person for the task will be in charge of arranging them.\r
+\r
+I expect that the tasks of the officers (president/secretary/treasurer) will almost always be performed by single officers, since they will tend to be less time-critical.  The sysadmin tasks should probably be spread evenly among the sysadmins.\r
+\r
+Let's list the tasks, organized by which role we expect to handle them.\r
+\r
+== President ==\r
+\r
+ * Schedule meetings\r
+ * Run meetings\r
+\r
+== Treasurer ==\r
+\r
+ * Process new member payments and alert sysadmins when someone has paid and can have an account created\r
+ * Process ongoing payments by updating the portal's financial records\r
+ * Hunt down people who are behind in payments\r
+ * Do physical payment processing for rare people who aren't willing to use Pay``Pal\r
+ * Handle support tickets in the Financial category\r
+\r
+== Secretary ==\r
+\r
+ * Keep meeting minutes\r
+ * Maintain the board's [http://hcoop.net/board/ webpage]\r
+ * Keep files of all HCoop-related paperwork, and post scans or transcripts of any particularly important documents to the board's webpage\r
+ * Conduct all elections and official membership votes, report and archive their results\r
+\r
+== Sysadmins ==\r
+\r
+ * Add new members who have been approved and have paid\r
+ * Process specific support requests:\r
+   * Requests for a domain in DomainTool\r
+   * Requests for apt package installation\r
+   * Requests for Mailman lists\r
+ * Process other support tickets, differentiated by category on the portal:\r
+   * Web\r
+   * E-mail\r
+   * Server Misc (possibly add more categories, since this category is used fairly often...)\r
+   * Meta\r
+ * Periodically update packages through Debian apt\r
+ * Manage the firewall\r
+ * Manage relational database servers\r
+ * Advising the board as to policy matters, or setting policies as enabled to do so by the board.\r
+ * Maintaining and auditing the security of HCoop's servers.\r
+ * Protecting and respecting the privacy of HCoop members.  Abuse of superuser privileges to view private member files or communication (except to the extent necessary in the course of legitimate sysadmin duties) is strictly forbidden, and is ground for immediate termination of sysadmin status and also for termination of membership, in the same way that use of HCoop services for cracking is grounds for expulsion.\r
diff --git a/AfsClientConfiguration.mdwn b/AfsClientConfiguration.mdwn
new file mode 100755 (executable)
index 0000000..7c8aa2b
--- /dev/null
@@ -0,0 +1,7 @@
+= AFS Client Configuration =\r
+\r
+HCoop is using AFS on the new shared server configuration at Peer 1.  You can use AFS to have files with the same name accessible from various computers.  Here is how you can configure AFS at home or work for use with HCoop:\r
+\r
+ * AfsFedoraClientConfiguration\r
+\r
+See http://research.cs.berkeley.edu/doc/afs/debian.html for how to get the OpenAFS client to work in Debian/Ubuntu, and ["TroubleshootingAFS"] for informations on problems you might have getting it to work.\r
diff --git a/AfsFedoraClientConfiguration.mdwn b/AfsFedoraClientConfiguration.mdwn
new file mode 100755 (executable)
index 0000000..0e8e62c
--- /dev/null
@@ -0,0 +1,57 @@
+= AFS Fedora Client Configuration =\r
+\r
+This describes how to get an AFS client at home working with a HCoop AFS cell on a Fedora workstation.\r
+\r
+= Basic Steps =\r
+\r
+ * Download the [http://www.openafs.org/release/latest.html openafs source RPM for your version of Fedora].  This will have a filename like openafs-1.4.4-fc6.2.src.rpm.\r
+ * Build this on your machine with an rpmbuild command like the following: sudo rpmbuild --rebuild --target=i686 openafs-1.4.4-fc6.2.src.rpm (you will need to have the kernel-headers package installed for this to work.\r
+ * If the build completed successfully, you should see some lines that say "Wrote: " towards the end of the output.  Use an rpm command like "rpm -ivh packagename" to install this rpm on your system.  ''Note: should you install a new kernel, you'll have to repeat this part of the process!''\r
+ * Install openafs-1.4.4-fc6.2.i386.rpm, openafs-client-1.4.4-fc6.2.i386.rpm, and openafs-krb5-1.4.4-fc6.2.i386.rpm, or the newest stable packages for your platform.\r
+\r
+ * Change the home cell in {{{/usr/vice/etc/ThisCell}}} to hcoop.net.\r
+ * Start the openafs client with {{{sudo /etc/init.d/openafs-client start}}}\r
+ * Run kinit and type your password\r
+ * Make sure that afsd is running.\r
+ * Run "klist" just to make sure that you have a valid token.\r
+ * Run aklog - if this works you should be able to see /afs/hcoop.net.\r
+\r
+== Rebuilding openafs for new kernels ==\r
+\r
+You will have to rebuild the source RPM every time your kernel is updated.  If you followed the steps above, the source rpm should have been installed in /usr/src/redhat/SRPMS/.  Use the rpmbuild command above to build this.  This resulting RPM file will be put in an appropriate directory under /usr/src/redhat/RPMS if the build is successful.  It will contain the name of the running kernel.  Install this RPM, and when you run /etc/init.d/openafs-client start the daemon should start properly.\r
+\r
+If you're lazy you may want to script the process of creating a new openafs module each time you install a new kernel.  Here is a script that works no my Fedora 7 system.  It rebuilds the source RPM, installs it, and starts the openafs daemon.  It hasn't been well tested and I wrote it very quickly, so feel free to make it more robust if you want to:\r
+\r
+{{{\r
+#!/bin/bash\r
+\r
+# Re-builds the openafs modules for the currently running kernel.\r
+# Should work on Fedora systems.\r
+# This has not been broadly tested, written Tue Jun  5 11:30:35 EDT 2007\r
+# by Justin S. Leitgeb [leitgebj AT hcoop -- NOSPAM -- net].\r
+\r
+OPENAFS_SRPM="/usr/src/redhat/SRPMS/openafs-1.4.4-fc6.2.src.rpm"\r
+\r
+if [ -a  $OPENAFS_SRPM ] ; then\r
+    echo SRPM $OPENAFS_SRPM exists, starting rebuild. ;\r
+    rpmbuild --rebuild --target=i686 $OPENAFS_SRPM\r
+    \r
+    # Figure out what the filename should be for the new RPM based on\r
+    # running kernel version, then install it.\r
+    kernel_name_for_afs=`uname -r | sed 's/-/_/'`\r
+\r
+    # Not a pretty command but it worked for me... we'll see if it does in the future.\r
+    new_afs_rpm=`find /usr/src/redhat/RPMS/ -type f | grep openafs | grep $kernel_name_for_afs | grep kernel | head -1`\r
+    \r
+    rpm -ivh $new_afs_rpm\r
+\r
+    echo Re-starting openafs client...\r
+    /etc/init.d/openafs-client start\r
+fi\r
+}}}\r
+\r
+== Troubleshooting ==\r
+\r
+If you get an error like "aklog: unable to obtain tokens for cell hcoop.net (status: 11862790)" it may mean that your router is blocking SRV requests.  If you're running djbdns locally (used by lots of operating systems for embedded devices, such as OpenWrt), make sure that the line {{{filterwin2k}}} is commented out in /etc/dnsmasq.conf, or whatever the config file is on your machine.\r
+\r
+Read TroubleshootingKerberos for more.\r
diff --git a/AlexandreSantos.mdwn b/AlexandreSantos.mdwn
new file mode 100755 (executable)
index 0000000..d1e6f93
--- /dev/null
@@ -0,0 +1 @@
+A regular member.\r
diff --git a/AndrewFileSystem.mdwn b/AndrewFileSystem.mdwn
new file mode 100755 (executable)
index 0000000..a21d97d
--- /dev/null
@@ -0,0 +1,88 @@
+= Basic Architecture =\r
+\r
+Using the shared filesystem involves a combination of Kerberos and OpenAFS.\r
+\r
+= File conventions =\r
+\r
+The `/afs` tree contains shared filesystems.  `/afs/hcoop.net` (symlinked from `/afs/hcoop` as well) is our piece of the AFS-o-sphere.  Subdirectories include:\r
+\r
+ * `/afs/hcoop.net/user`, the home of home directories\r
+ * `/afs/hcoop.net/user/U/US/$USERNAME`, `$USERNAME`'s home directory\r
+ * `/afs/hcoop.net/common/etc`, the home of non-platform-specific fun stuff like DomTool\r
+\r
+= Connecting to AFS from an HCoop server =\r
+\r
+I found this handy summary of the commands that must be run:\r
+  http://www.eos.ncsu.edu/remoteaccess/LinuxOpenAfs/kreset_debian/kreset\r
+\r
+On our servers, it seems sufficient to run:\r
+{{{kinit\r
+aklog}}}\r
+\r
+These should be run automatically if you log in normally, but admins who manually `kinit` to different users (for\r
+the purpose of testing access permissions most often), need to of course run both `kinit; aklog` to completely\r
+switch to a target user.\r
+\r
+= The kadmin shell =\r
+\r
+All Kerberos administration commands are run from a special shell, called Kadmin. There are two variants of Kadmin:\r
+kadmin is the usual, remote version of the command which can be run on any machine; kadmin.local is the "local"\r
+version which can only be ran on the AFS fileserver (deleuze).\r
+\r
+Invoke kadmin.local as `sudo kadmin.local -p YOURUSERNAME_admin`. It is good to include "-p YOURUSERNAME_admin", or\r
+kadmin will "authenticate" as the first user it finds in the ticket cache, which may or may not be the username you\r
+expected. All the administrative commands would work anyway (since you ran kadmin.local), but an incorrect principal\r
+name would make various statistics incorrect (like name of principal who was adding/changing entries in the DB).\r
+\r
+To invoke kadmin, use `kadmin -p YOURUSERNAME_admin`. In normal course of action, kadmin asks for a password. This is\r
+impractical for automated scripts. As usual, instead of a password, you can also pass a keytab file. Our keytabs are\r
+saved in /etc/keytabs/ on each system, and they are readable by group 'wheel'. So administrators should be able\r
+to invoke 'kadmin' (use control shell) or kinit/k5start (impersonate any user) by supplying target user's key from\r
+a keytab, such as `kadmin -p domtool/deleuze -k -t /etc/keytabs/domtool.deleuze` .\r
+\r
+= Creating a new user =\r
+\r
+We follow the convention that Kerberos users for daemons are named `$DAEMON`, where `$DAEMON` is the name of the daemon (for instance, the name of system user it runs as, or the name of its `/etc/init.d` file). ''Some daemons\r
+currently use DAEMON/HOST scheme, but this will be changed later and is not to be used for any new principals\r
+you create''.\r
+\r
+To add the Kerberos principal for a daemon, run this in kadmin:{{{\r
+addprinc -randkey -policy service $DAEMON}}}\r
+\r
+AFS users exist separately from Kerberos principals.  To add the AFS user for a daemon to which you want to assign UID `$UID`, run:{{{\r
+pts createuser $DAEMON}}}\r
+\r
+"keytab" files smooth the way to running daemons that run with AFS privileges. An access-protected local file contains a user's credentials, and daemons read these files on starting up in order to authenticate.\r
+\r
+To create a keytab for a daemon, run this in kadmin:{{{\r
+ktadd -k /etc/keytabs/$DAEMON -e "des3-hmac-sha1:normal rc4-hmac:normal" $DAEMON\r
+chown $DAEMON:wheel /etc/keytabs/$DAEMON\r
+chmod 440 /etc/keytabs/$DAEMON\r
+}}}\r
+\r
+In the example above, only one key (of 4 or 5 created) is exported for a user. Sometimes it might be desirable to\r
+only export a specific key into a keytab file, but we generally just omit the `-e KEY_TYPE` parameter and export\r
+all keys to the keytab file.\r
+\r
+You can view keys stored in a keytab by doing `sudo klist -k /etc/keytabs/KEYTAB_FILE`.\r
+\r
+To make daemons properly kinit/aklog as the user you created for them, use ``k5start`` command. Many examples\r
+of how to use it are already found in our /etc/init.d/ scripts. Important options include `-U` (which kinits as\r
+the first principal found in the keytab file, without the need to explicitly name a principal), -f (which specifies\r
+the keytab file to kinit from), and -K MINUTES (which re-news the ticket after MINUTES, so that daemons can run\r
+for long periods of time).\r
+\r
+To give $DAEMON the actual permission in AFS space, for most common actions, `fs setacl DIR $DAEMON read` or `write` \r
+are good. All subdirectories that get created within the toplevel directory for which you give permissions, will \r
+inherit all the permissions.\r
+\r
+= Listing and setting quotas =\r
+\r
+To list volume quota, run{{{\r
+fs lq DIR\r
+}}}\r
+\r
+\r
+To set volume quota in 1-kilobyte blocks, run{{{\r
+fs sq DIR -max SIZE\r
+}}}\r
diff --git a/AnilNarayanan.mdwn b/AnilNarayanan.mdwn
new file mode 100755 (executable)
index 0000000..0cd7a38
--- /dev/null
@@ -0,0 +1,17 @@
+#format wiki\r
+#language en\r
+\r
+Email: http://anil.net.in/images/web/mailidg.png\r
+Homepage: http://anil.net.in\r
+\r
+==== Probable migration concerns ====\r
+\r
+ * ssh stuff (pub key, no UDP for use with krb).\r
+ * Missing user group-id.\r
+ * Apache server layout (wait for DomTool)\r
+ * Would port forwarding be available ?\r
+ * 400MB quota.\r
+ * When would fyodor be put out of commission ?\r
+\r
+----\r
+CategoryHomepage\r
diff --git a/AnishJacob.mdwn b/AnishJacob.mdwn
new file mode 100755 (executable)
index 0000000..2e37dfb
--- /dev/null
@@ -0,0 +1,13 @@
+##master-page:HomepageTemplate\r
+#format wiki\r
+== Anish Jacob ==\r
+\r
+I have been a member of hcoop since Sept 2006.\r
+I live in Pune, India.\r
+\r
+Email: [[MailTo(me AT SPAMFREE aizak DOT net)]]\r
+\r
+...\r
+\r
+----\r
+CategoryHomepage\r
diff --git a/AuthenticationScheme.mdwn b/AuthenticationScheme.mdwn
new file mode 100755 (executable)
index 0000000..908532c
--- /dev/null
@@ -0,0 +1,12 @@
+= Authentication Scheme =\r
+\r
+Regarding the exact authentication mechanism on HCoop:\r
+\r
+We have Kerberos and LDAP working. Kerberos holds user "principals" (account names + passwords), while LDAP keeps account names plus everything else (such as UIDs, GIDs, home directories, real names, permissions etc.). General policy is: all users have LDAP accounts and a Kerberos principal. Admins have passwd file account and a Kerberos principal. When needed, admins can also create a pure local-files-based account.\r
+\r
+The whole authentication work is performed though a series of PAM (Pluggable Authentication Modules) configuration directives. PAM has four "management groups", listed in most-common order of execution: auth, account, session, and password. (The exact order of execution is controlled by the order of lines in /etc/pam.d/* files, with each file corresponding to a particular service).\r
+\r
+ * Auth is concerned with actual username/password verification in the database. \r
+ * Account checks things like password aging etc. If the user has an LDAP account, then the Kerberos account module is invoked which checks for the list of allowed principals in ''~/.k5login''. Users with no LDAP account are just checked in the local password files. Currently, the pam_krb5 module we use does not check password aging information in Kerberos'''. Russ Allbery did a new module which will be in Debian Etch.\r
+ * Session sets up session details, including limits. pam_krb5 is invoked and only succeeds if the user has a Kerberos principal. (If it has, it initializes the TGT ticket for them automatically). And then, finally, pam_unix_session is called which just logs session creation (and later session termination) to system log files. At that point, users are logged in.\r
+ * Password is the management group involved only in changing the password (or whatever the authentication mechanism is). Currently, by default, Kerberos password is changed. Running '''kpasswd''' will change the Kerberos password; running '''passwd''' will change the local-files password, and will only work for people with pure local accounts.\r
diff --git a/BackupInfo.mdwn b/BackupInfo.mdwn
new file mode 100755 (executable)
index 0000000..b2c5c43
--- /dev/null
@@ -0,0 +1,73 @@
+This page describes the procedure for accessing and using our off-site backups.  Only admins can do this -- if you want to get some file or directory back from the dead and are not an admin, please contact the hcoop-sysadmin list for assistance.\r
+\r
+== Backups of AFS Volumes ==\r
+\r
+=== Getting access ===\r
+\r
+{{{\r
+ssh FOO_admin@deleuze.hcoop.net\r
+\r
+aklog -c megacz.com\r
+}}}\r
+\r
+=== Navigating the available backups ===\r
+\r
+{{{\r
+cd /afs/megacz.com/hcoop-backup/\r
+\r
+cd $DESIRED_BACKUP_DATE\r
+}}}\r
+\r
+=== Restoring the volume dump to a volume with a new name ===\r
+\r
+{{{\r
+cat $VOLNAME.dump.bz2.aescrypt | \\r
+  ccrypt -cdk /etc/backup-encryption-key | \\r
+  bunzip2 | \\r
+  vos restore deleuze /vicepa $VOLNAME.restored\r
+}}}\r
+\r
+=== Mounting the newly restored volume onto the filesystem ===\r
+\r
+{{{\r
+fs mkm /afs/hcoop.net/.old/tmp-mount $VOLNAME.restored\r
+vos release old\r
+}}}\r
+\r
+=== Restoring a particular file ===\r
+\r
+{{{\r
+# examine /afs/hcoop.net/.old/tmp-mount\r
+}}}\r
+\r
+=== Unmounting the restored volume ===\r
+\r
+{{{\r
+fs rm /afs/hcoop.net/.old/tmp-mount\r
+}}}\r
+\r
+=== Renaming the restored volume so it takes the place of the damaged/corrupted/erased volume ===\r
+\r
+Do this if you want to restore an entire volume.  This deletes the old volume and replaces it with the backup.\r
+\r
+{{{\r
+vos remove $VOLNAME\r
+vos rename $VOLNAME.restored $VOLNAME\r
+}}}\r
+\r
+=== Removing the restored volume ===\r
+\r
+If you only wanted to restore a few files from the volume, you should remove the local copy of the backup volume when done.\r
+\r
+{{{\r
+vos remove -id $VOLNAME.restored\r
+}}}\r
+\r
+== Database Backups ==\r
+\r
+{{{\r
+cat databases.tar.bz2.aescrypt | \\r
+  ccrypt -cdk /etc/backup-encryption-key | \\r
+  bunzip2 | \\r
+  tar -xvzf -\r
+}}}\r
diff --git a/BackupServices.mdwn b/BackupServices.mdwn
new file mode 100755 (executable)
index 0000000..08c1451
--- /dev/null
@@ -0,0 +1,25 @@
+We considered a number of services that you can use to recover your data in the event that you accidentally delete it, our hardware fails, or some malicious party finds a way to corrupt it.\r
+\r
+'''For now, we don't have any backup services.  All of the text below describes techniques that we tried and stopped using for various reasons.'''\r
+\r
+= On-disk backups =\r
+\r
+For the sake of the first two categories above, we maintain multiple "snapshots" of the filesystem in previous states.  You can browse through these at your leisure and retrieve old versions of files.  At the moment, we archive only `/home` (where most user-associated files live, thanks to our attempts to keep everything users can modify significantly on this partition) and `/etc`.\r
+\r
+This will save you if you delete your files accidentally, but the old versions were intact at the time of one of our 6 most recent hourly backups, 7 most recent daily backups, 4 most recent weeklies, or 6 most recent monthlies.  These frequencies are the defaults in the Debian rsnapshot package, and we'll see how well they mesh with the realities of disk space usage, and probably adjust them accordingly.\r
+\r
+If our hardware fails, it's likely that the failure will be in at most one of our RAID disk pair at once, in which case the backup information will remain stored safely while we copy the filesystem onto a replacement disk.\r
+\r
+We use the [http://www.rsnapshot.org/ rsnapshot] program to manage these backups incrementally.  This handy rsync-based approach uses hard links in a way that allows backups whose size is mostly proportional to the size of files that have ''changed'' since the last backup.  You can find the current snapshots in `/backup`, where, for example, `/backup/hourly.0` is the most recent hourly snapshot, `/backup/daily.2` is the third most recent daily snapshot, etc..\r
+\r
+'''/backup is currently unavailable and will remain so until someone figures out how to mount the same directory in both read-only-for-users and read-write-for-root-only modes, when that directory isn't the root of a partition.  We currently don't know the right firewall configuration to allow a self-NFS-mount, which is the recommended method on the rsnapshot site.'''\r
+\r
+= Off-site backups =\r
+\r
+If some unauthorized person ever finds a way to get root access to one of our servers, he can trash any on-disk backups.  Moreover, even if we ever switch to storing that kind of backup on a remote filesystem, it's probably true that root has access to write to that filesystem arbitrarily, since we want the backup process to be automatic.  As a result, we need some backup storage that even root on our own servers can't modify.\r
+\r
+Our current approach to this is ad-hoc.  About once a month, an admin tars and compresses all of `/home` and `/etc` and transfers it to some other location.  The resulting archive file can be burned to CDs or similar.\r
+\r
+Naturally, users can't automatically restore their files from such an image.  However, this should only be a problem if someone gets root access on a server, in which case it will be a problem for everyone, and admins will be very involved, anyway.\r
+\r
+Suggestions are welcome for a more automated solution, or a solution that involves paying a company a reasonable price to do this.\r
diff --git a/BadContent.mdwn b/BadContent.mdwn
new file mode 100755 (executable)
index 0000000..47d6aec
--- /dev/null
@@ -0,0 +1,3804 @@
+## Please edit system and help pages ONLY in the moinmaster wiki! For more\r
+## information, please see MoinMaster:MoinPagesEditorGroup.\r
+##master-page:Unknown-Page\r
+##master-date:Unknown-Date\r
+#acl All:read\r
+#format plain\r
+#language en\r
+([\w\-_.]+\.)?(l(so|os)tr)\.[a-z]{2,}\r
+(blow)[\w\-_.]*job[\w\-_.]*\.[a-z]{2,}\r
+(buy)[\w\-_.]*online[\w\-_.]*\.[a-z]{2,}\r
+(gambling|porn|\bsms|busty|prescription|pharmacy|penis|pills|enlarge)[\w\-_.]*\.[a-z]{2,}\r
+(diet|penis)[\w\-_.]*(pills|enlargement)[\w\-_.]*\.[a-z]{2,}\r
+(annunci|tatuaggi|canzoni|musicali|scarica|salute|sesso|hentai|ragazze|sonnerie)[\w\-_.]*\.[a-z]{2,}\r
+(i|la)-sonneries?[\w\-_.]*\.[a-z]{2,}\r
+(incest|beastiality)[\w\-_.]*\.[a-z]{2,3}\r
+(levitra|lolita|phentermine|viagra|vig-?rx|zyban|valtex|xenical|adipex|meridia\b)[\w\-_.]*\.[a-z]{2,}\r
+(magazine)[\w\-_.]*(finder|netfirms)[\w\-_.]*\.[a-z]{2,}\r
+(mike)[\w\-_.]*apartment[\w\-_.]*\.[a-z]{2,}\r
+(milf)[\w\-_.]*(hunter|moms|fucking)[\w\-_.]*\.[a-z]{2,}\r
+(online)[\w\-_.]*casino[\w\-_.]*\.[a-z]{2,}\r
+(paid|online)[\w\-_.]*surveys[\w\-_.]*\.[a-z]{2,}\r
+(prozac|zoloft|xanax|valium|hydrocodone|vicodin|paxil|vioxx)[\w\-_.]*\.[a-z]{2,}\r
+(puss(ie|y)|adult|sex|fuck|suck|cock|virgin)\S{0,15}\.info/\r
+(ragazze)-?\w+\.[a-z]{2,}\r
+(ultram\b|\btenuate|tramadol|pheromones|phendimetrazine|ionamin|ortho.?tricyclen|retin.?a)[\w\-_.]*\.[a-z]{2,}\r
+(valtrex|zyrtec|\bhgh\b|ambien\b|flonase|allegra|didrex|renova\b|bontril|nexium)[\w\-_.]*\.[a-z]{2,}\r
+\.(chat|boom|fromru|hotmail|newmail|nightmail|nm|narod|pochta)\.ru\r
+\.[0-9]{5,}\.(com|net|org|us|biz|cn|ru)\r
+\.4t\.com\r
+\.51\.net\r
+\.6x\.to\r
+\.a\.la/\r
+\.b3\.nu\r
+\.cameroun\.ws\r
+\.flywebs\.com\r
+\.free-25\.de\r
+\.gb.com\r
+\.hostrim\.com\r
+\.qn.com\r
+\.sbn\.bz\r
+\.shell\.la\r
+\.static\.net\r
+\.t35\.com\r
+\.uk\.to\r
+\.uni\.cc\r
+\.w28\.org\r
+\.wol\.bz\r
+\.wtf\.la\r
+\.xs3\.com\r
+\.ya\.com\r
+\.yadoo\.cn\r
+\bby\.ru\b\r
+\bda\.ru\b\r
+\bde\.gg\b\r
+\bde\.nr\b\r
+\bde\.tc\b\r
+\bde\.tp\b\r
+\bgo\.ro\b\r
+\w+\.sh\.cn\r
+0008888.com\r
+000site\.com\r
+0020.net\r
+0030.net\r
+00freehost\.com\r
+01-beltonen.com\r
+01-klingeltoene.at\r
+01-klingeltoene.de\r
+01-loghi.com\r
+01-logot?.com\r
+01-logotyper.com\r
+01-melodias?.com\r
+01mobile.com\r
+01-ringe?tones?.com\r
+01-ringe?tones?.us\r
+01-ringsignaler.com\r
+01ringtones.co.uk\r
+01-soittoaanet.com\r
+01-suonerie.com\r
+01-toque.com\r
+0adult-cartoon.com\r
+0cartoon.com\r
+0cartoon-sex.com\r
+0catch.com\r
+0livesex.com\r
+0sex-toons.com\r
+0sfondi.com\r
+0sfondi-desktop.com\r
+0suonerie.com\r
+0toons.com\r
+0xxx-cartoon.com\r
+1000\-celebs\.com\r
+100comm.com\r
+100hgh.com\r
+100-sex.com\r
+100megsfree5\.com\r
+108bikes.com\r
+110fat.com\r
+11126.com\r
+123-sign-making-equipment-and-supplies.com\r
+125mb.com\r
+125we.com\r
+148-law.com\r
+150m\.com\r
+158hk\.com\.cn\r
+163ns.com\r
+163school.com.cn\r
+168Education.com\r
+168marketing.com\r
+168wire.com\r
+16safe.com\r
+17train.com\r
+1816.net\r
+18caixin.com\r
+18ny.com\r
+18show.cn\r
+1accesshost\.com\r
+1afm\.com\r
+1asphost.com\r
+1-bignaturals.com\r
+1concerttickets.com\r
+1-cumfiesta.com\r
+1domiks\.org\r
+1ebalo\.org\r
+1foleks\.org\r
+1footballtickets.com\r
+1golod\.org\r
+1hrens\.org\r
+1ibanusiks\.org\r
+1jolla\.org\r
+1-klingeltone.com\r
+1so.com.cn\r
+1so\.net\.cn\r
+1st-(auto-insurance-4u|phonecard|printer-ink-cartridge|shemale-sex).com\r
+1st-host.org\r
+1stindustrialdirectory.com\r
+1stlookcd.com\r
+1stop[\w-]*.com\r
+1st-payday-loans.net\r
+1sweethost\.com\r
+1-texas-holdem.us\r
+1und1-shopping.de\r
+1-welivetogether.com\r
+1-wholesale-distributor.com\r
+1xp6z.com\r
+2008travel.com\r
+20fr.com\r
+216.130.167.230\r
+24-hour-fitness-online.com\r
+269s.tinline.com\r
+269s\.com\r
+2ndmortgageinterestrates.com\r
+2twinks.com\r
+321cigarettes.com\r
+3333.ws\r
+35tk\.com\r
+365jp.com\r
+3ccenter\.com\r
+3host.com\r
+3-sexy.com\r
+3sheng.net\r
+3sixtyfour.com\r
+3yaoi.com\r
+404host.com\r
+41b.net\r
+42tower.ws\r
+4mg.com\r
+4u-topshelfpussy.com\r
+4womenoftheworld.com\r
+5118.com\r
+5118.net.cn\r
+512j.com\r
+5151office\.cn\r
+51asa.com\r
+51dragon.com\r
+51nlp\.com\r
+51weixing.com\r
+51wisdom.com\r
+51zhengxing.net\r
+54eo.com\r
+5782601.net\r
+58798309dyb.com\r
+591dy.com\r
+625fang\.com\r
+63174828.com\r
+63dns.com\r
+65.217.108.182\r
+66.197.102.2\r
+666house\.com\r
+66battery.com\r
+66cable.com\r
+66cellphone.com\r
+66ceramic.com\r
+66floor.com\r
+66interior.com\r
+66logistics.com\r
+66machine.com\r
+66packing.com\r
+66sculpture.com\r
+66supply.com\r
+66tools.com\r
+68685633.com\r
+68l.com\r
+69.61.11.163\r
+69yo.com\r
+6p.org.uk\r
+6x.to\r
+71space\.[a-z]{2,}\r
+7p.org.uk\r
+8848flower.com\r
+888cas.com\r
+888jack.com\r
+888steel.com\r
+888-texas-holdem.com\r
+88aabb.com\r
+88feedstuff.com\r
+88fiber.com\r
+88telephone.com\r
+8cx.net\r
+8cx\.net\r
+8k.com\r
+8th\S*street\S*latina\S*\.[a-z]{2,}\r
+911\.uni\.cc\r
+9136\.cn\r
+91dir.com\r
+91xz.info\r
+999777888.com/jkcy009\r
+99bbcc.com\r
+99caixin.com\r
+99jl.net\r
+9sf\.cn\r
+a1-mortgage-finder.com\r
+a-1-versicherungsvergleich.de\r
+a688.net\r
+aaaaaaaa.ru\r
+aaff.net\r
+aajj.net\r
+aaliyah\.ws\r
+aauu.net\r
+abc3x.com\r
+abcink\.com\r
+abnehmen-ganz-sicher.com\r
+abocams.de\r
+abymetro.org.uk\r
+ac8888.com\r
+academytrans.com\r
+accessories-car.com\r
+accompagnatrici.cc\r
+acme\-arts\.com\r
+acmetranslation\.com\r
+acornwebdesign.co.uk\r
+activeshow\.net\r
+acupuncturealliance\.org\r
+acyclovir.net\r
+ad.huwh.org\r
+aducasher.spb.ru\r
+adult\-categories\.info\r
+adult-dvds?-dot.com\r
+adultfreehosting.com\r
+adult-free-webcams.com\r
+adult-friend.info\r
+adultfriendfinder.com\r
+adultfriendfindernow.com\r
+adultfriendfindersite.com\r
+adultfriendsite.com\r
+adult-games.name\r
+adulthostpro.com\r
+adultlingerieuk.com\r
+adultnonstop.com\r
+adultpics.com\r
+adultserviceproviders.com\r
+adultshare.com\r
+advantage-quotes.com\r
+a--e.com\r
+aegean.net.cn\r
+aektschen.de\r
+aerohose.com\r
+aesthetics.co.il\r
+afreeserver.com\r
+agentsmax\.com\r
+agreatserver.com\r
+aids120.95.cn\r
+aimaiti.com\r
+aimite.com\r
+air520\.com\r
+airfare-links.net\r
+airshow-china.com.cn\r
+airtrip.com.cn\r
+akkx\.info\r
+alawna.blogspot.com\r
+alexanet.com\r
+alfago.com\r
+alhaurin.to\r
+all-debt-consolidation.org\r
+allfind.us\r
+all-fioricet.com\r
+allinsurancetype.com\r
+allmagic.ru\r
+allof.myphotos.cc\r
+alloha.info\r
+allohaweb.com\r
+all-porn.info\r
+all-rxdrugs.com\r
+all-we-live-together.com\r
+allwoodoxford.com\r
+almacenpc.com\r
+alprazolam-online.qn.com\r
+amateur-(lesbian|movie|naked|site).us\r
+amateurs.r00m.com\r
+amateursuite.com\r
+amateurs-xxx.us\r
+amateur-thumbs.net\r
+ambien-online-order.zx81.at\r
+ambien-prescription.qn.com\r
+americacashfast.com\r
+americancdduplication.com\r
+americanpaydayloans.net\r
+american-single-dating.com\r
+amoxicillin-online.net\r
+amoyplastic.com\r
+anacondasex\.info\r
+analloverz.com\r
+anal-sex-pictures.us\r
+anchuang.com.cn\r
+andyedf.de\r
+angenehmen-aufenthalt.de\r
+animalsex-movies-archive.com\r
+animalsex-pics-gallery.com\r
+anime1.org\r
+anime-adult.us\r
+anlinet.com\r
+annuaire.biz.ly\r
+annuaire.tk\r
+anonymous-blogger.com\r
+antely.com\r
+anti-exploit.com\r
+antu.com.cn\r
+anxietydisorders.biz\r
+anything4health.com\r
+anzwers\.net\r
+anzwers\.org\r
+a-onedigitizing.com\r
+a-oneemb.com\r
+aotubang.com\r
+aotubangshi.net\r
+ap8\.com\r
+apa-redlion.com\r
+apicalsoft.com\r
+a-pics.net\r
+apollopatch.com\r
+appliances66.com\r
+apply-to-green-card.org\r
+appollo.org\r
+approachina.com\r
+approval-loan.com\r
+a-purfectdream-expression.com\r
+aquari.ru\r
+aquatyca.net\r
+arbat\.or\.at\r
+arcsecurity.co.uk\r
+area-code-npa-nxx.com\r
+argendrom.com\r
+armor2net.com\r
+aromacc.com\r
+arrecife.to\r
+arterydesign.com\r
+artsdeal.com\r
+asianbum.com\r
+asian-girls.name\r
+asian-nude.blogspot.com\r
+asian-sex-woman.com\r
+asp169.com\r
+ass-picture.us\r
+a-stories.com\r
+atetech.com.cn\r
+atkinsexpert.com\r
+auctionmoneymakers.com\r
+auktions-uebersicht.de\r
+autodetailproducts.com\r
+autodirektversicherung.com\r
+autofinanzierung-autokredit.de\r
+autofinanzierung-zum-festzins.de\r
+autohandelsmarktplatz.de\r
+autoing.com\.cn\r
+autoing\.com\.cn\r
+auto-insurance-links.net\r
+autokredit-autofinanzierung.de\r
+autokredit-tipp.de\r
+auto-loans-usa.biz\r
+automotive.com\r
+autoversicherung-vergleichen.info\r
+autumn-jade.com\r
+avon-one.com\r
+awxk.net\r
+ayamonte.to\r
+ba2000.com\r
+babes-d.com\r
+babes-maidens\.info\r
+babes-plus.com\r
+baby-info\.org\r
+babymarktplatz-aktiv.de\r
+baby-perfekt.de\r
+background-check.info\r
+bad-movies.net\r
+bad-passion.com\r
+bahraichfun.com\r
+baidublog.com\r
+baifaa.cn\r
+balancingmachine.cn\r
+bali-dewadewi-tours.com\r
+balidiscovery.org\r
+bali-hotels.co.uk\r
+balivillas.net\r
+banialoba3w.150m.com\r
+bannedhome.com\r
+banned-pics.com\r
+barbate.to\r
+barcelona.to\r
+barcode555.com\r
+barcodes.cn\r
+bare.org\r
+barely-legald.com\r
+barely-legal-teenb.com\r
+bargeld-tipp.de\r
+barrym.co.uk\r
+bast3.ru\r
+batukaru\.[a-z]{2,}\r
+bayareabags\.com\r
+bbell.com\r
+bbs.csnec.net\r
+bccec.com.cn\r
+bccinet.org\r
+bc-printer.com\r
+bdi-bone.com\r
+bdsensors.com.cn\r
+bdsm-story.blogspot.com\r
+beast(iality|sex)-(movies|stories|animal-sex-stories).(com|net)\r
+beaumont-bar.co.uk\r
+beauty333.com\r
+beauty-farm.net\r
+beautysilk.net\r
+beer-china.com\r
+beijingkh.com\r
+belinking.com\r
+beltonen-logos-spel.com\r
+benalmadena-costa-del-sol.to\r
+benavista.to\r
+benessere.us\r
+benidorm.to\r
+bestasianteens.com\r
+best-buy-cialis.com\r
+best-cialis-source.com\r
+bestdvdclubs.com\r
+bestel.com.cn\r
+besthandever.com\r
+best-high-speed-internet.com\r
+bestialitylinks.org\r
+bestiality-pics.org\r
+bestialityzoo.sytes.net\r
+best-internet-bingo.com\r
+bestits.net\r
+best-make-money.com\r
+bestonline-medication.com\r
+bestonline-medication.net\r
+bestonline-shopping.com\r
+best-result-fast.com\r
+bet-on-horseracing.com\r
+better-56.com\r
+beverlyhillspimps?andhos.com\r
+bhs-design.com\r
+big-(black-butts|breast-success|hooters|natural-boobs|naturals-4u).(com|net|us|org)\r
+big(bras-club|moms|titchaz).com\r
+bigmag.com.ua\r
+big-rant.com\r
+bigsitecity.com\r
+bigxigua\.com\r
+bildmitteilung.us\r
+billigfluege-billige-fluege.de\r
+billleo.com\r
+bio-snoop.com\r
+birth-control-links.com\r
+bizhat.com\r
+bizhome\.org\r
+bj-?(acca|erwai|fusheng|fyhj|hchy|hsdx|cas|gift|khp|xhjy|sd|zufang).(cn|com)\r
+bj701.com\r
+bjdyzs\.com\r
+bjerwai.com\r
+bjfusheng.com\r
+bjhsdx.com\r
+bjicp.net\r
+bj-page.com\r
+bj-qsan\.com\r
+bjsister.com\r
+bjxin\.com\r
+bjzyy.com\r
+black-?jack-?(4u|777|dot|homepage|play-blackjack|site|winner)?.(net|com|fm)\r
+black-amateur-cock.net\r
+blackjack-123.com\r
+blackjack-p.com\r
+blahblah.tk\r
+blanes.to\r
+b-liver.com\r
+blk-web.de\r
+bllogspot.com\r
+blog.co.tz/dexters\r
+blogbus.com\r
+blogcn.com\r
+blogforbaby.com/blog/deepsea\r
+blogforbaby.com/blog/jbilder\r
+bloggersdream.com/ahorcar\r
+bloggersdream.com/emscience\r
+bloggingmadness.com/aufmerksamkeitsdefizitsyndrom\r
+bloglabs.biz\r
+blogman.biz\r
+blogmen.net\r
+blogspam.org\r
+blogspoint.com/kostas\r
+blogspoint.com/marklanegan\r
+blogstudio.net\r
+blog-tips.com\r
+blonde-(pussy|video|xxx).us\r
+blumengruss-onlineshop.de\r
+blumenshop-versand.de\r
+b-mailbox.com\r
+bnuol.com\r
+bochao.com.cn\r
+bodet-clocks.co.uk\r
+body-jewelry.reestr.net\r
+bodyjock.com\r
+body-piercing.softinterop.com\r
+bokaibj.com\r
+bolonia.to\r
+bondage-story.blogspot.com\r
+bon-referencement.com\r
+boobmorning.com\r
+boobspost.com\r
+booking-room.com\r
+book-translation\.com\r
+boom.ru\r
+boom\.ru\r
+boylaser\.com\r
+breast-augmentation.top-big-tits.com\r
+briana-banks-dot.com\r
+british-hardcore.net\r
+brownlion.com.cn\r
+brrddd.org\r
+budget-phonecards.co.uk\r
+bueroversand-xxl.de\r
+bugaboo-stroller.com\r
+buildermax\.com\r
+bulkemailsoft.com\r
+burda\.isgre\.at\r
+burningcar.net\r
+businessbloging.com/benzaldehyde\r
+businessbloging.com/gesetz\r
+business-grants.org\r
+butalbital.org\r
+butianshi.com\r
+buy.*\.qn\.com\r
+buy-[\w-]+-online\.\r
+buy-adult-sex-toys.com\r
+buy-adult-toys.biz\r
+buy-ambien.8bit.at\r
+buyambienonline\.blogspirit\.com\r
+buy-car-insurance-4-us.com\r
+buy-carisoprodol\.qo\.pl\r
+buy-cheap-soma\.ar\.gs\r
+buy-cialis.ws\r
+buy-cialis-1.qn.com\r
+buy-cialis-online.qn.com\r
+buy-codeine.bebto.com\r
+buy-codeine.qn.com\r
+buy-codeine-online.b3.nu\r
+buy-computer.us\r
+buy-computer-memory.net\r
+buy-discount-airline-tickets.com\r
+buy-hydrocodone.qn.com\r
+buy-hydrocodone-online.sinfree.net\r
+buy-hydrocodone-online.u4l.com\r
+buyhydrocodonewhere.bigsitecity.com\r
+buy-laptop.biz\r
+buy-levitra-1.qn.com\r
+buy-levitra-online.qn.com\r
+buy-order-cheap-online\.info\r
+buy-rx-usa.com\r
+buy-sex-toys.net\r
+buystuffpayless.com\r
+buy-valium.imess.net\r
+buy-valium.qn.com\r
+buy-valium-online.enacre.net\r
+buy-vicodin.dd.vg\r
+buy-xanax.qn.com\r
+buy-zolpidem.qn.com\r
+buzz-hotels.co.uk\r
+bvicr\.cn\r
+b-witchedcentral.co.uk\r
+by-and-by.com\r
+byondart\.com\r
+byronbayinternet.com\r
+c911c\.com\r
+cabopino.to\r
+cadaques.to\r
+cadiz-andalucia.to\r
+cai4\.com\r
+caipiaowangzhi.com\r
+calahonda.to\r
+california.k9.pl\r
+callingcardchoice.com\r
+calling-phone-cards\.org\r
+calpe.to\r
+cambridgetherapynotebook.co.uk\r
+camemberts.org\r
+camera-cn.com\r
+canada-travel.cn\r
+canos-de-meca.to\r
+cantonfairhotelguangzhou.com\r
+cantonfairhotelguangzhou\.com\r
+cantwell2000.com\r
+CAPAZ MESMO, ISTO E UM FATO MALUCO\r
+capital-credit-cards.com\r
+captain-stabbin.blogspot.com\r
+captain-stabbin-4u.com\r
+cardsloansmortgages.com\r
+careersmax\.com\r
+car-financing-low-rates.biz\r
+car-fuck.net\r
+carisoprodol.q03.net\r
+carisoprodolonline.bigsitecity.com\r
+carlack.cn\r
+carmenblue.com\r
+carnalhost.com\r
+carnumbers.ru\r
+car-rental-links.com\r
+car-rentals-2go.com\r
+car-rental-search.com\r
+cars-links.com\r
+cartama.to\r
+cartoni(-animati|erotici|giapponesi).com\r
+cartopia.com\r
+cashadvanceclub.com\r
+cash-advance-quick.com\r
+cashmerebiz.com\r
+casillas-del-angel.to\r
+casoft.com.cn\r
+castingagentur2004.de\r
+cast-shadow.com\r
+cat-guide\.org\r
+cbitech.com\r
+ccie130.com\r
+ccie-ccnie.com\r
+ccna130.com\r
+ccna-ccna.com\r
+ccnp130.com\r
+ccnp-ccnp.com\r
+cd21\.cn\r
+cdshop-guenstig.de\r
+cds-xxl.de\r
+cebooks.net\r
+cegcr\.cn\r
+celebritylust.blog-city.com\r
+celebritypics.ws\r
+celebskin.com\r
+celebtastic.com\r
+cell-phone-accessories-dot.com\r
+ceool\.cn\r
+ceramic168.com\r
+certificationking.net\r
+certified-(new|used)-(autos|cars|suvs).com\r
+cfeenet.com\r
+changweia.cn\r
+chaosmagic.com/weblog/catastrophic\r
+chat\.ru\r
+chat-l.de\r
+chatten.bilder-j.de\r
+chauffeurtours.co.uk\r
+cheap.*\.6x\.to\r
+cheap-4.com\r
+cheap-adult-sex-toys.com\r
+cheap-ambien.qn.com\r
+cheap-cialis.qn.com\r
+cheap-cigarettes.com\r
+cheaper-digital-cameras.uk.com\r
+cheapest-phone.co.uk\r
+cheap-levitra.qn.com\r
+cheap-valium.my-age.net\r
+cheap-web-hosting-companies.com\r
+cheap-xanax.qn.com\r
+chem888.com\r
+cherrybrady.com\r
+chickz.com\r
+china\.com\r
+china0519.com\r
+chinaad-design.com\r
+china-af.com\r
+chinaaircatering.com\r
+china-am.com\r
+china-apt.com\r
+chinaaxletree.com\r
+china-cp.com\r
+china-digital-camera.com\r
+china-dope.com\r
+chinagoldcoininc.com\r
+chinahr.com\r
+chinalatex.com\r
+chinaqygl.com\r
+chinasensor\.info\r
+china-sports-kit.com\r
+chinaswk.com\r
+china-transformer.com\r
+china-vcr.com\r
+chinaw3.com\r
+china-wood-floor.com\r
+china-wp.com\r
+chindata.com\r
+chindmoz.com\r
+chipiona.to\r
+chloesworld.com\r
+choose-online-university.com\r
+chrislaker.co.uk\r
+chuanganqi.dzsc.com\r
+chuanqisuji.com\r
+chunmeng.com\r
+cialis.homeip.net\r
+cialis.incredishop.com\r
+cialis.xs3.com\r
+cialisapcalis.com\r
+cialis-buy.com\r
+cialis-dot.com\r
+cialis-express.com\r
+cialis-online.b3.nu\r
+cialis-online-1.qn.com\r
+cialisusa.bravehost.com\r
+ciscochina.com\r
+claireburgos.com\r
+clamber.de\r
+clanbov.com\r
+clarks-shoe.u4l.com\r
+classifiche-italiane.org\r
+claudiachristian.co.uk\r
+clayjames.com\r
+cleannbright.co.uk\r
+click\.hn\.org\r
+click-or-not.de\r
+clophillac.org.uk\r
+closed-network.com\r
+club69.net\r
+cmeontv.de\r
+cmmdc.com.cn\r
+cn80051.1816.net\r
+cnbess.com\r
+cnbjflower.com\r
+cn-clothing.com\r
+cn-computer.com\r
+cndevi.com\r
+cn-dynamotor.com\r
+cn-exhibition.com\r
+cn-fashion.com\r
+cnfibernet\.com\.cn\r
+cnfti.org.cn\r
+cngreat\.net\r
+cn-present.com\r
+cn-press.com\r
+cn-Satellite-tv.com\r
+cnsec.cn\r
+cntaiyangneng.com\r
+cntoplead.com\r
+cn-vcr.com\r
+cnvideomeeting.com\r
+co.tradeinfo.cn\r
+codeine.xs3.com\r
+codeine-online.imess.net\r
+coin-abndalucia.to\r
+college-girl-pic.com\r
+college-links.net\r
+coma-cn.com\r
+combaltec.com\r
+comeback.com\r
+cometo(japan|malaysia|singapore|thailand).com\r
+commovie-china.com\r
+competa.to\r
+completelycars.com\r
+completelyherbal.com\r
+comptershops-online.de\r
+computer666.com\r
+computer888.com\r
+computer-onlinebestellung.de\r
+computer-und-erotische-spiele-download.com\r
+computerversand-xxl.de\r
+confession-of.mine\r
+conil.to\r
+conjhost.com\r
+container-partner.de\r
+contake.com\r
+cool\.as\r
+cool-extreme.com\r
+coolgoose.com\r
+coolhost\.biz\r
+coolp.(biz|net|org)\r
+copy168.com\r
+cor-admin.co\r
+cor-admin.com\r
+coresleep.com\r
+cornishholidaysuk.com\r
+cosmetics2008.com\r
+cosmetics666.com\r
+costa-blanca-alicante.to\r
+costa-blanca-denia.to\r
+costa-blanca-elche.to\r
+costa-blanca-ibi.to\r
+costa-blanca-javea.to\r
+costa-blanca-torrevieja.to\r
+couponmountain.com\r
+cover-your-feet.com\r
+cpravo.ru\r
+cqychy.com\r
+craftwork2008.com\r
+cragrats-catering.co.uk\r
+cragrats-education.co.uk\r
+cragrats-inspiring.co.uk\r
+cragrats-react.co.uk\r
+cragratstraining.co.uk\r
+crazypussy.info\r
+crazyvirgin\.info\r
+creavic.com.cn\r
+creditcardpost.com\r
+credit-factor.com\r
+credit-links.net\r
+credit-report-links.net\r
+csnec.net\r
+cstarcom.com\r
+cszg\.net\r
+cum-facials.us\r
+cumfiesta-4u.com\r
+cumon.no-ip.org\r
+customer-reviews.org\r
+cvdiy.com\r
+cvdiy\.com\r
+cw92013.chinaw3.com\r
+cxcn\.info\r
+cyberfreehost.com\r
+cycatki.com\r
+cyclobenzaprine.00freehost.com\r
+cyclo-cross.co.uk\r
+cykanax.com\r
+czwin.com.cn\r
+dad-daughter-incest.com\r
+dadi009\.91\.tc\r
+dahongbao.com\r
+dailyliving.info\r
+damadaoju.com\r
+damianer.top-100.pl\r
+danni.com\r
+dapt\.org\r
+darest.de\r
+datasoon.com\r
+datestop.net\r
+dating-(choice|harmony|service-dating|services-dating-service).com\r
+dating999.com\r
+dating-online-dating.org\r
+day4sex.com\r
+deathblow\r
+debt-consolidation-care\.com\r
+debtconsolidationfirm.net\r
+debt-consolidation-kick-a.com\r
+debt-consolidation-low-rates.biz\r
+debt-consolidation-now-online.com\r
+debtconsolidationusa.org\r
+debt-disappear.com\r
+debtmanagementcompanyonline.com\r
+debt-solution-tips.com\r
+decorationsexport.com\r
+dedichepersonali.com\r
+deep-ice.com\r
+deikmann.de\r
+dela88.com\r
+delay-dva.com\r
+deli.net.cn\r
+dentalinsurancehealth.com\r
+department-storez.com\r
+desiraesworld.com\r
+deutschlandweite-immobilienangebote.de\r
+devonanal.com\r
+devon-daniels.com\r
+diabetes-cn.com\r
+dianepoppos.com\r
+dianying8.net\r
+diarypeople.com\r
+diecastdot.com\r
+digitale-teile.de\r
+digital-projector.net\r
+dindon.cn\r
+dinmo.net\r
+directcarrental.com\r
+directcti.com\r
+directrape.com\r
+directringtones.com\r
+direct-tv-for-free.com\r
+dirty-story.blogspot.com\r
+discount-airfares-guide.com\r
+discount-cheap-dental-insurance.com\r
+discount-life-insurance.us\r
+discountprinterrefill.com\r
+discoveryofusa.com\r
+divorce-links.com\r
+dlctc.com\r
+dmoznet.com\r
+dmoznet.net\r
+dmoznet.org\r
+dnip.net\r
+dn-register.com\r
+dns\.com\.cn\r
+dns110.com\r
+do\.9jh\.com\r
+dogolz.de\r
+domkino.com.ua\r
+dongdao.net\r
+dont-lost-money.info\r
+doo.pl\r
+door168.com\r
+doppi.static.net\r
+dorka\.ifindex\.com\r
+dostweb.com\r
+dotas.com\r
+dotcomup.com\r
+dotmoment.com\r
+downloadzipcode.com\r
+downsms.com\r
+dr\.ag\r
+dragonball-?x*.biz\r
+dragonball-?x*.cc\r
+dressagehorseinternational.co.uk\r
+dress-cn.com\r
+drive-backup.com\r
+drochka.com\r
+drozd\.voxelperfect\.net\r
+drs.infosec.org.cn\r
+drugsexperts.com\r
+drugstore.blog-city.com\r
+drugstore.st\r
+drugstore-online.us\r
+drunk-girls-(flashing|party).(com|us)\r
+dstmedia.com\r
+dudoctor\.com\r
+duducat.com\r
+dunecliffesaunton.co.uk\r
+duriel.static.net\r
+duvx\.com/bbs\.php?bbs=vs\r
+dvd2.us\r
+dvd-copier.info\r
+dvd-home-theatre.com\r
+dwoq.com\r
+dzhsc.com\r
+e40.nl\r
+earphone168.com\r
+easy-money-investing.com\r
+easyrecorder.com\r
+easyseek.us\r
+ebackground-checks\.com\r
+ebaybusiness.net\r
+ebony-xxx.us\r
+ebookers.co.uk\r
+e-bookszone.com\r
+ec198.com\r
+ec51.cn\r
+ec51.com\r
+ec51.net\r
+ec51.org\r
+ec91.com\r
+ecar-rentals\.com\r
+ecblast.com\r
+eccentrix.com/members/casinotips\r
+echinabid.com\r
+echinabid\.com\r
+echofourdesign.com\r
+e-cialis.net\r
+ecologix.co.uk\r
+e-credit-card-debt.com\r
+ecredit-report\.com\r
+eden\.fx120\.net\r
+e-discus.com\r
+e-dishnetworks\.com\r
+edrugstore.md\r
+edwardbaskett.com\r
+effexor.cc\r
+effexor-web.com\r
+e-fioricet.com\r
+e-free-credit-reports.com\r
+eggesfordhotel.co.uk\r
+egyway.com\r
+einfach-wunschgewicht.com\r
+elcenter-s.ru\r
+eldorado.com.ua\r
+electromark-uk.co.uk\r
+electronics-info.com\r
+elegant-candles.com\r
+elektronikshop-xxl.de\r
+elie\.com\.cn\r
+elite-change.com\r
+elitecities.com\r
+eliulin.com\r
+elrocio.to\r
+elviria.to\r
+emmasarah.com\r
+emmss.com\r
+enacre.net\r
+ena-free-show\.info\r
+endns.net\r
+e-news.host.sk\r
+enine-pv.com\r
+envoyer-des-fleurs.com\r
+e-online-bingo.com\r
+eonsystems.com\r
+e-order-propecia.com\r
+epackshop.net\r
+e--pics.com\r
+eplastic-surgery\.com\r
+e-play-bingo.com\r
+epsystem.net\r
+erbium12.com\r
+erosway.com\r
+erotic4free.net\r
+eroticalservers.net\r
+erotic-free.com\r
+erotic-lesbian-story.blogspot.com\r
+erotic-video.us\r
+erotische-geschichten-portal.com\r
+errolware.com\r
+escort-links.net\r
+escorts-links.com\r
+eScrew is\r
+esmartdesign.com\r
+esmoz.com\r
+estepona.to\r
+ethixsouthwest.com\r
+etoo.cn\r
+etowns\.org\r
+e-tutor.com\r
+evanstonpl.org\r
+event-kalendarium.de\r
+everyvoice.net\r
+evromaster.ru\r
+exdrawings.com\r
+execsoft-software.co.uk\r
+executive-chauffeur-hire.co.uk\r
+ex-machine.com\r
+exoticdvds.co.uk\r
+exoticmoms.com\r
+expatdream.com/blog/aclarar\r
+experienceflagstaff.com/blogs/xzchro\r
+extralife\.biz\r
+extrasms.de\r
+extreme-rape.org\r
+extreme-sex.org\r
+eye-laser.co.uk\r
+f2g.net\r
+f2s.be\r
+fabida.net\r
+fabricant-accessories.co.uk\r
+fabulos.de\r
+fabuloussextoys.com\r
+facial-skin-care-center.com\r
+fairchild.com.cn\r
+fairland.cn\r
+fairyblog.com/conect\r
+fakir\.zenno\.info\r
+family-incest.us\r
+fangso\.com\r
+fansjiaoab.blog.163.com\r
+fantasyfootballsportsbook.com\r
+farm-beastiality.com\r
+farmsx.com\r
+fasa\.jetco-ops\.com\r
+fashuo300.com\r
+fast-fioricet.com\r
+fast-mortgage-4-u.com\r
+fat-cash.com\r
+fateback.com\r
+fat-lesbians.net\r
+fat-pussy-sex.net\r
+fatty-liver.cn\r
+fatwarfare.com\r
+favilon.net\r
+fda.com.cn\r
+fdl.net.cn\r
+feexpert.com\r
+feilun.com.cn\r
+female-orgasms.org\r
+ferta\.imlds\.com\r
+fielit.de\r
+figa.nu\r
+finance-world.net\r
+finanzen-marktplatz.de\r
+find-a-mortgage.co.uk\r
+findbookmakers.com\r
+find-cheap-dental-plans.com\r
+finddatingsites.com\r
+findsexmovie.info\r
+findsexxx.us\r
+find-u-that-mortgage.com\r
+findyouruni.com\r
+finger-bobs.com\r
+fioricet.batcave.net\r
+fioricet.bravehost.com\r
+fioricet.st\r
+fioricet-dot.com\r
+fioricet-web.com\r
+firefoxdownload\.us\r
+first-time-story.blogspot.com\r
+fishoilmiracle.com\r
+fitness-links.net\r
+fitnessx.net\r
+fittest\.250m.com\r
+flash77.com\r
+flatbedshipping.com\r
+fleet-drive.co.uk\r
+fleshlight.org\r
+flewblog.net\r
+flexeril-web.com\r
+flirt08.de\r
+floraday\.com\.cn\r
+flowertobj.com\r
+flowerwish.com\r
+flug-und-mietwagen.de\r
+fly-sky.com\r
+fm360.net\r
+food-cn.com\r
+football-betting-nfl.com\r
+forceful.de\r
+forex.inc.ru\r
+forex[\w-]*\.info\r
+forex-online-now.com\r
+forlovedones.com\r
+forseo\.\r
+foto-gay.us\r
+found-money-investment.info\r
+franchise\.ws\r
+frangelicasplace.org\r
+frankpictures.com\r
+free(hostingpeople|webs|web-hosting).com\r
+free-adult-chat-room.com\r
+free-adult-check.com\r
+freeallsearch.com\r
+free-britney-spears-nude.biz\r
+free-debt-consolidation-online.us\r
+freedvdplayer.cjb.net\r
+freeeads.co.uk\r
+free-fast.net\r
+free-games-links.com\r
+free-gay-video-clip.com\r
+free-hilton-paris-sex-video.com\r
+free-horoscopes.biz\r
+free-incest-stories-site.com\r
+free-latina-mpg.com\r
+freemovie-cn.com\r
+free-net-sex.com\r
+freenetshopper.com\r
+freenudegallery.org\r
+free-paris-nikki-hilton.blogspot.com\r
+freepicsdaily.com\r
+free-satellite-tv-directv-nocable.com\r
+free-satellite-tv-now.com\r
+freeteenpicsandmovies.com\r
+free-teens-galleries.com\r
+free-texas-?hold-?em.(biz|us)\r
+freewebpage.org\r
+freewhileshopping.com\r
+freshsexhosting.com\r
+friko.pl\r
+fromru.com\r
+fspv.com\r
+fssj.com\r
+fsyflower\.com\r
+fuck\-my\-ass\.info\r
+fuck-animals.com\r
+fuckfrompussy\.info\r
+fuelcellmarketplace.co.uk\r
+fuel-dispenser.com\r
+fuengirola-costa-del-sol.to\r
+fuerteventura.to\r
+fuhaidasha.com.cn\r
+fulongcn.com\r
+funasia.cn\r
+funmod.com\r
+funny-girls\.info\r
+fun-spass-game.de.ms\r
+furensteel.cn\r
+furensteel\.cn\r
+furniture135.com\r
+furrios.de\r
+furry-kinks-looking.com\r
+furry-kinks-looking.net\r
+futurenet.com.cn\r
+fzrr.com\r
+gagnerargent.com\r
+gals4all.com\r
+galsonbed.com\r
+gamble-on-football-online.com\r
+gambling\Sgames.cc\r
+gamefinder.de\r
+games-advanced.de\r
+gang-rape.org\r
+gangxing.com\r
+gaokao.net.cn\r
+garment-china.com\r
+garrywa.com\r
+gartenshopper.de\r
+garthfans.co.uk\r
+gaucin.to\r
+gay-b.com\r
+gaybloghosting.com/kushi\r
+gay-boy.us\r
+gayfunplaces.com\r
+gayhomes\.net\r
+gay-male-story.blogspot.com\r
+gay-nude.us\r
+gay--sex.org\r
+gay-sex-videos.com\r
+gays-sex-gay-sex-gays.us\r
+gay-twinks-sex.com\r
+gayx.us\r
+gcchq.com\r
+gdgc.org\r
+gelago.de\r
+gem2.de\r
+gemtienda.co.uk\r
+generic-ambien.qn.com\r
+generic-cialis.qn.com\r
+generic-levitra.qn.com\r
+generic-propecia.net\r
+generic-valium.512bit.at\r
+genimat.220v.org\r
+genimat.cjb.net\r
+geocities.com/alexgolddphumanrbriar\r
+geocities.com/avbmaxtirodpaulmatt\r
+geocities.com/brandtdleffmatthias7\r
+geocities.com/cclibrannar_rover\r
+geocities.com/constpolonskaalniko7\r
+geocities.com/forestavmiagdust\r
+geocities.com/free_satellite_tv_dish_system\r
+geocities.com/ofconvbdemikqfolium\r
+geocities.com/pashkabandtvcom\r
+geocities.com/pautovalexasha_kagal\r
+geocities.com/reutovoalexeypetrovseverin5\r
+geocities.com/timryancompassmedius\r
+gerardoknutson.com\r
+germanytek.com\r
+gesundheitsshop-kosmetik.de\r
+gesundheit-total.com\r
+getapussy\.info\r
+get-cell-phone-accessories.com\r
+getdomainsandhosting.com\r
+get-free-catalogs.com\r
+get-freetrial.us\r
+get-hardcore-sex.com\r
+gethelp24x7.net\r
+get-insurance-quotes.com\r
+getitip.org\r
+getmoregiveless.com\r
+getrxscripts.biz\r
+get-satellite-tv-dish.com\r
+getstarted24x7.net\r
+getyourlyrics.com\r
+get-zoo.com\r
+gghggh.com\r
+gguu\.com\r
+ghettoinc.com\r
+giantipps.de\r
+gifs-clipart-smiley.de\r
+gilerarunner.8m.com\r
+giochi-online.us\r
+giochix.com\r
+girls\-pussies.info\r
+girlshost.net\r
+girlswantsmore\.info\r
+girls-with-cunts\.info\r
+giveramp.com\r
+give-u-the-perfect-mortgage.com\r
+glass8888.com\r
+glendajackson.co.uk\r
+global-phonecard.co.uk\r
+globalsearch.cn\r
+global-verreisen.de\r
+globalwebbrain.com\r
+globalwiremesh\.com\r
+glory-vision.com\r
+gloveboxes.com.cn\r
+gloveboxes\.com\.cn\r
+go.nease.net\r
+godere.org\r
+gogito.com\r
+gogoogle.net\r
+gogt\.info\r
+gojerk.com\r
+goldenholiday.com\r
+golfhq\.org\r
+gomvents.com\r
+gongi.pl\r
+gonzalesltd.com\r
+goodasses\.info\r
+goodlife2000-geheimtipp.com\r
+goodsexy.com\r
+goodwebsite.org/blog/elrincondelvago\r
+google8.net\r
+googleandbaidu.com\r
+googlebaidu.com\r
+googlepromotion.com\r
+google-seo.net\r
+googlesweb\.com\r
+googletosh.com\r
+go-pussy.titanhousing.com\r
+gotobiz.net\r
+gotooa.com\r
+government-grants.org\r
+government-grants.ws\r
+gpo4.com\r
+gpsplanet\.org\r
+grafit\.zenno\.info\r
+grancanaria.to\r
+grannypictgp.com\r
+grannysexthumbs.com\r
+great-cialis.com\r
+greatnow.com\r
+greecehotels-discount.com\r
+green-gradens\.org\r
+green-tx.com\r
+greewon\.com\.cn\r
+grinding-mill.net\r
+group-eurosex.com\r
+gt-lite.com\r
+guadalmina.to\r
+guardami.org\r
+guenstige-(krankenversicherung|onlineshops|sportartikel|versicherungstarife).(com|de)\r
+guizang.net\r
+guttermag.com\r
+gyhx.com\r
+gym-equipments\.org\r
+gyrohost.com/iboga\r
+h1\.ripway\.com/xz\r
+h2kmatrix.com\r
+haffa.static.net\r
+haidianjiaxiao.com\r
+hainan35\.com\r
+hair-loss-cure.net\r
+hairy-pussy-sex.net\r
+haishun.net\r
+hallo-tierfreund.de\r
+hand-job.us\r
+handwerksartikel-xxl.de\r
+handy-klingeltoene.eu.tp\r
+handylogos-klingeltoene.net.ms\r
+handysprueche.de\r
+handytone.us\r
+hangchen.cn\r
+hangchen.com\r
+haole\.cn\r
+happyagency.com\r
+happy-shopping-online.com\r
+hardcore-(jpg|junky|pictures|pussy|sex|video).(com|us|bz|net)\r
+hardcorecash.net\r
+hard-sex-teen.com\r
+hardware123.com\r
+hardware888.com\r
+hartsflorist\.com\r
+haugeprint.co.uk\r
+hautesavoieimmobilier.com\r
+hchcinc.com\r
+hddata.com\r
+hdfix.com.cn\r
+headachetreatment.net\r
+healthmore.net\r
+healthrules.org\r
+heartbeatofhealing.org\r
+heavytools.webzdarma.cz\r
+heb-shuntong.com\r
+hebu.myrice.com\r
+hello\.to\r
+hentay.us\r
+herpies.net\r
+hewittlandscapes.co.uk\r
+heydo.com\r
+hg-fix\.com\r
+hgxweb.de\r
+hhpumps.cn\r
+high-risk-merchant-account.org\r
+hilton-nicky-paris.blogspot.com\r
+hion.cn\r
+hit168.net\r
+hit-melodias.com\r
+hits?-logos?-(games|klingeltone?|ringe?tone|suoneria).com\r
+hitslogosgames.com\r
+hjsos.com\r
+hk99689.com\r
+hk99w.com\r
+hkfor\.cn\r
+hkfor\.com\r
+hkfor\.net\r
+hkfor\.org\r
+hksaa\.net\r
+hksac\.org\r
+hlduanjian.com\r
+hmlaser.com\r
+hmxuan.com\r
+hnhqmj\.com\r
+hobbs-farm.com\r
+hogwatch\.org\r
+hold-em-big.com\r
+hold-pok.com\r
+hold-screen.com\r
+home.soufun.com\r
+home\.ro\b\r
+home\-trade\.net\r
+home4web.org/(hainan|fanguangcailiao|gongzuofu|niupixian|tuozhan)\r
+home-business-ideas-investment.info\r
+home-business-investments.info\r
+home-internet-business-investment.info\r
+homelivecams.com\r
+homenetworkingsolutions.co.uk\r
+home-secure\.org\r
+home-videos.net\r
+hongkong\.richful\.net\r
+hongkongcompanyregistry\.com\r
+horny-honey.com\r
+hornymoms.net\r
+hornypages.com\r
+horny-world.com\r
+horoskop-auswertung.de\r
+horse-racebetting.com\r
+horse-sex.ws\r
+hospitalonline\.cn\r
+hostingplus.com\r
+hostultra.com\r
+hotchina.org\r
+hot-cialis.com\r
+hotel\.altse\.com\r
+hotel\.netsuns\.net\r
+hotelbookingserver.com\r
+hotel-bordeaux.cjb.net\r
+hotelsaficionado.com\r
+hotelsplustours.com\r
+hot-escort-services.com\r
+hotfunsingles.com\r
+hot-mates.info\r
+hotmoko\.info\r
+hot-naked-guys.net\r
+hotsexys.com\r
+hotusa.org\r
+house222.com\r
+house263\.com\r
+houseclub.com.cn\r
+how-quit-smoking.com\r
+how-to-make-money-investment.info\r
+hp-ibm.com\r
+hs168.com\r
+ht-sensor\.com\r
+https?://[^/\n]*8k\.com\r
+https?://[^/\n]*ap8\.com\r
+https?://[^/\n]*bare\.org\r
+https?://[^/\n]*danni\.com\r
+https?://[^/\n]*doo\.pl\r
+https?://[^/\n]*dr\.ag\r
+https?://[^/\n]*e40\.nl\r
+https?://[^/\n]*f2s\.be\r
+https?://[^/\n]*it\.tt\r
+https?://[^/\n]*t35\.com\r
+https?://[^/\n]*via\.net\r
+huafei7.cn\r
+huahuan.com\r
+hua-shun.com.cn\r
+huazhangmba.com\r
+huelva.to\r
+huihualin.com\r
+human-cn.com\r
+humangrowthhormone.org\r
+hunksandbabes.com\r
+hustler.bz\r
+hustlerw.com\r
+huyprossish\.pcadsl\.com\.tw\r
+hydrocodone.webzdarma.cz\r
+hydrocodone-online.hotusa.org\r
+hydrocodone-without-prescription.enacre.net\r
+hyip[\w-]*\.(info|com)\r
+hyper-sex.com\r
+hypnobabies.co.uk\r
+hzjl365.com\r
+hzn.cn\r
+ialmostdied\.com\r
+ibiza-island.to\r
+i-black-jack.com\r
+i-butalbital-fioricet.com\r
+i-buy-mortgage.com\r
+icpcn\.com\r
+idc2008\.cn\r
+idebtconsolidation.org\r
+i-directv.net\r
+i-dish-network.org\r
+i-flexeril.com\r
+ifreepages.com\r
+ig3.net\r
+ihongtai\.com\r
+i-horny.com\r
+i-ink-cartridges.com\r
+illegalhome.com\r
+illegalspace.com\r
+imeanit.org\r
+imess.net\r
+imitrex-web.com\r
+immobilien-?(auswaehlen|angebote-auswahl|makler-angebote|makler-l|-l).de\r
+immobilienmarkt-grundstuecke.de\r
+immobilierdessavoie.com\r
+immodev.com\r
+im-naked.com\r
+Imobissimo.com\r
+i-mortgage-online.com\r
+important\.as\r
+impotence-rx.biz\r
+incest-?((pics|photos?|stories|movies|videos)-?(collection|download|gallery|archive|library)?|reality|relations|taboo).(com|biz|net|ws)\r
+incest[0-9]\.org\r
+incest-pics--incest.com\r
+incest--stories.org\r
+inc-magazine.com\r
+incredishop.com\r
+indiasilk.biz\r
+indiasilktradition.com\r
+industrialresource.biz\r
+industrial-testing-equipment.com\r
+i-need-money-ideas.info\r
+inescudna.com\r
+inexpensiverx.net\r
+infopoint.cn\r
+inforceable.com\r
+inforceables.com\r
+innfg.de\r
+insatax\.com\r
+insatiablepussy.com\r
+inspection-trips.com\r
+insurance.*\.go\.ro\r
+insurancehere.net\r
+insurance-quotes-fast.com\r
+interealty.es\r
+international-candle-shop.com\r
+international-cheese-shop.com\r
+internet-explorer\.ws\r
+internet-goulasch.com\r
+internette-anbieter.de\r
+interphone555.com\r
+interracial-sex.ws\r
+inter-ross.ru\r
+interseo\.com\r
+int-fed-aromatherapy.co.uk\r
+in-the-vip.org\r
+inthevip-4u.com\r
+inthevip-sex.com\r
+intking.com\r
+intlcr\.cn\r
+intlcr\.com\r
+intlcr\.net\r
+intlcr\.org\r
+intymnie.com\r
+investing-get-rich-quick.info\r
+investments-free-money.info\r
+inviare-mms.net\r
+invio-mms.us\r
+Invite-cn.com\r
+i-online-bingo.com\r
+ipaddressworld.com\r
+i-play-bingo.com\r
+i-play-blackjack.com\r
+ipmotor.com\r
+ipodnano\.cn\r
+ipodshop\.cn\r
+ipsnihongo.org\r
+iqwork.com\r
+irianjaya.co.uk\r
+isgre\.at\r
+i-shemale.com\r
+i-skelaxin.com\r
+islacanela.to\r
+islacristina.to\r
+isla-fisher\.com\r
+islantilla.to\r
+i-soma.net\r
+isourceindia.com\r
+isparkl.com\r
+ispycameltoe.com\r
+i-texas-hold-?em.(biz|com|info|us)\r
+itisok\.net\r
+it-mgz.ir/forfamilies\r
+itzhongguo.com\r
+iul-online.de\r
+i-university-guide.com\r
+ivoryvaughan.com\r
+iwebbroker.com\r
+i-wellbutrin.com\r
+i-will-find-the-best-mortgage-lead.com\r
+i-win-bingo.com\r
+iza.net/\r
+jack-x.com\r
+jade.bilder-i.de\r
+jandia.to\r
+japan-partner.com\r
+javelin.static.net\r
+jbbjcc.com\r
+jerez.to\r
+jewelry4navel.com\r
+jewelry666.com\r
+jforce.no-ip.org\r
+jgc-network.co.uk\r
+jgzhutanfang.com\r
+jhhkw.com\r
+jhyujik\.org\r
+jiadian666.com\r
+jialicn.com\r
+jialicn\.com\r
+jieju-china.com\r
+jingtong\.com.cn\r
+jinlong.co.uk\r
+jinxique.com\r
+jinyibei.com.cn\r
+jinyuetuan\.cn\r
+jipu.com.cn\r
+jk-999.com\r
+jnqidong.com\r
+jobbnu.com\r
+job-interview-questions-tips.com\r
+joes\.com\r
+johnhowesatty.com\r
+join-2008.com\r
+joinin-cn.com\r
+jokeria.de\r
+jp114\.cn\r
+js-chenguang.com\r
+judahskateboards.com\r
+juliamiles.co.uk\r
+jungfrauen-sex.com\r
+junyuan.com.cn\r
+justasex.com\r
+jzhrb.com.cn\r
+jz-machine\.com\r
+kamerry.com\r
+kangdachemical.online.sh.cn\r
+kangxin.com\r
+kantorg.h10.ru\r
+karibubaskets.com\r
+karma.za.pl\r
+karmicdebtconsolidation.com\r
+kcufrecnac.com\r
+keikoasura.com\r
+keithandrew.co.uk\r
+kewler.net\r
+kewl-links.com\r
+kickme\.to\r
+kickmy.com\r
+ki-disease.com\r
+kinggimp.org\r
+kinkyhosting.com\r
+kiranthakrar.co.uk\r
+kitehost.com/decoratie\r
+kktthhyy\.org\r
+kleinkinder-shop.de\r
+klingeltoene-handylogos.de.be\r
+klingeltone-logo.com\r
+klingelton-logos-mms.de\r
+klitoris.ca\r
+kln.com.cn\r
+kmsenergy.com\r
+kohost.us\r
+koihoo.com\r
+kontaktanzeigen-bild.de.ms\r
+kontaktlinsen-kaufen.de.ms\r
+kontaktlinsen-partner.de\r
+korol.lir.dk\r
+kostenlose-sexkontakte.org\r
+kraskidliavas.ru\r
+kredite-online.de.ms\r
+kredite-portal.de\r
+kredite-sofortzusage.de\r
+kreditkarten-sofort.de.ms\r
+kredit-ratenkredit-sofortkredit.de\r
+krutop.static.net\r
+kuangye.net\r
+kupibuket.ru\r
+kyfarmhouse.org\r
+labelcan\.com\r
+lablog.biz\r
+lach-ab.de\r
+lajares.to\r
+lakesideartonline.com\r
+lalinea.to\r
+lambethcouncil.com\r
+landscape-painting.as.ro\r
+langsrestaurant.com\r
+lannygordon.com\r
+lannythurman.com\r
+lanreport.com\r
+lantai.com.cn\r
+lanucia.to\r
+laptopy.biz.pl\r
+laser-eye.co.uk\r
+laser-eye-centre.co.uk\r
+laser-eye-correction.co.uk\r
+lasikclinic.co.uk\r
+lastminute-blitz.de\r
+lasvegas-real-estate.net\r
+las-vegas-real-estate-1.com\r
+lasvegasrealtor.com\r
+lasvegastourfinder.com\r
+latina-sex.ws\r
+lavalifedating.com\r
+lavinuela.to\r
+law-translation\.com\r
+lcd-cn.com\r
+leadbanx.com\r
+leather168.com\r
+leatherfamous.com\r
+lechery-family.com\r
+left-page.com\r
+legalblonde.com\r
+leonabruno.com\r
+lesbian-girl.us\r
+lesbichex.com\r
+leseratten-wunderland.de\r
+letemgo.de\r
+letomol\.com\r
+leveltendesign.com\r
+lexapro-web.com\r
+lgt-clan.ru\r
+liaozhi\.org\r
+lifedna.com\r
+life-insurance-advisor.com\r
+lifeinsurancefinders.com\r
+lifeslittle-luxuries.co.uk\r
+lifuchao.com\r
+light518.com\r
+likesmature.com\r
+lindsaylife\.com\r
+lingerie-guide\.org\r
+lingerie-land.com\r
+link-dir.com\r
+linkedin\.com\.cn\r
+linkliste-geschenke.de\r
+linseysworld.com\r
+linuxwaves.net\r
+lipitordiscount.biz\r
+lipitordiscount.com\r
+list1st.com\r
+listbanx.com\r
+livetexasholdem.com\r
+livetreff.tv\r
+livevents.de\r
+livingchina.cn\r
+lizziemills.com\r
+lkcx\.com\r
+l-king.com.cn\r
+lliippoo\.org\r
+lloret.to\r
+lnhbsb\.com\r
+loaninfotoday.com\r
+loan-king.com\r
+loans.de.vu\r
+loans-4all.com\r
+loan-superstore.com\r
+locationcorse.free.fr\r
+logical-planet.co.uk\r
+logod-helinad-mangud.com\r
+logoer-mobil.com\r
+logos?-(beltonen|downloads|free|klingeltone|max|melodias|mobiel|mobile-repondeurs?|moviles|phones|repondeurs?-mobile|spiele|tones?).com\r
+logosik.pl\r
+logos-logos.be\r
+logos-melodijas-speles.com\r
+logotyper-mobil.com\r
+lolita-bbs.name\r
+longcrossgroup.co.uk\r
+longslabofjoy.com\r
+longsuncard.com\r
+lookforukhotels.com\r
+lop\.t28\.net\r
+loraxe.com\r
+lotye\.schillerstudent\.com\r
+love.csnec.net\r
+lowclass.de\r
+lowcost.us.com\r
+lowest-rates-mortgages.com\r
+ltjz2000.com\r
+lucking.com.cn\r
+luffassociates.co.uk\r
+luxus-gourmetartikel.de\r
+lvrealty.net\r
+lygweb.com\r
+lynskey-admiration.org.uk\r
+lyriclovers.com\r
+ly-yufeng.com\r
+lzbiz\.com\r
+ma-cabinet.com\r
+machine168.com\r
+machine88.com\r
+macinstruct.net\r
+maffi.static.net\r
+magus1.net\r
+mail333.com\r
+mainentrypoint.com\r
+mainjob.ru\r
+majorapplewhite.info\r
+make-money-investment.info\r
+malaga-costa-del-sol.to\r
+mallorca-island.to\r
+mallorycoatings.co.uk\r
+man.interhousing.com\r
+management666.com\r
+map666\.com\r
+marriage666.com\r
+marshallsupersoft.com\r
+marteq-on.com\r
+matalascanas.to\r
+match-me-up.com\r
+matureacts.com\r
+mature-big-tits.net\r
+maturefolk.com\r
+mature-old-mature.com\r
+mature-women\.enter-in\.etowns\.org\r
+mavina.static.net\r
+maxigenweb.com\r
+maxxsearch.com\r
+mba100.com\r
+mbgeezers.com\r
+medcenterstore.com\r
+mediaaustralia.com.au\r
+medications-4all.com\r
+medicine-supply.com\r
+meds-pill.com\r
+medyep.com\r
+meetpeopleforsex.com\r
+mega-spass.com\r
+melincs.org\r
+melodias-logos-juegos.com\r
+melucky.com\r
+members.fortunecity.com/kennetharmstrong\r
+members.lycos.co.uk/tramadol\r
+menexis.com\r
+mengfuxiang.com\r
+menguma.co.uk\r
+menguma.com\r
+menorca.to\r
+men-sex.us\r
+menzyme.com\r
+meoko.com\r
+mewqsd.org\r
+mercedesazcona.com.ar\r
+mercefina.com\r
+merditer.com\r
+merlinworld.com\r
+mesothelioma-asbestos-help.com\r
+mesothelioma-health.com\r
+metroshopperguide.com\r
+mfdy8\.cn\r
+mhgzs\.com\r
+micrasci.com\r
+microscope-cn.com\r
+midi\.99caixin\.com\r
+mietangebote-domain.de\r
+migraine-relief.com\r
+mijas.to\r
+mikebunton.com\r
+mikewsd.org\r
+milesscaffolding.co.uk\r
+millionaire-blogs.com/cosmeticdentistry\r
+minxinghb.com\r
+missoula.com/blog/occupation\r
+misterwolf.net\r
+mmorpg-headlines.com\r
+mms.coay.com\r
+mmsanimati.com\r
+mneuron.com\r
+mobilefor.com\r
+-mobile-phones.org\r
+mobilequicksale.com\r
+mobile-repondeurs?-logos?.com\r
+mobilesandringtones.com\r
+mode-domain.de\r
+mode-einkaufsbummel.de\r
+molding-tool.com\r
+moltobene.ru\r
+momcare.com.cn\r
+monarch.com.cn\r
+moneybg.com\r
+money-room.com\r
+montaguefineart.com\r
+mookyong.com\r
+mooo.com\r
+mortage-4all.com\r
+mortgage-info-center.com\r
+mortgage-rates-guide.net\r
+mortgages-links.net\r
+mortloan.com\r
+mostika.us\r
+mother-son-incest-sex.net\r
+moto-cn.com\r
+motonet.pl\r
+motor2008.com\r
+movie-online123.com\r
+movies6.com\r
+mp3download.bz\r
+mp3x.biz\r
+mpeg2pci.com\r
+mqblog.cn/user1/jipiao\r
+mqblog.cn/user1/qiufeng\r
+mqfzj.blog.ccidnet.com\r
+mrpiercing.com\r
+mujweb.cz\r
+mujweb\.cz\r
+multipurpose-plants.net\r
+multiservers.com\r
+multivision.com.hk\r
+murcia.to\r
+musica-gratis.biz\r
+musica-gratis.org\r
+musica-karaoke.net\r
+musical88.com\r
+musica-mp3.biz\r
+musicamp3.us\r
+musiccheap.us\r
+music-downloads-links.com\r
+musicenergy.com\r
+muxa.ru\r
+mxbearings.com\r
+mxzt.com\r
+my.nbip.net/homepage/nblulei/\r
+my-age.net\r
+myasiahotels.com\r
+mybestclick.com\r
+mybooktown.com\r
+mycv.cn\r
+mycv.com.cn\r
+mycv\.com\.cn\r
+mydatingagency.com\r
+my-dating-agency.com\r
+mydear\.biz\r
+my-discount-cigarettes.com\r
+myeuropehotels.com\r
+myfavlinks.de\r
+myflooring\.org\r
+mygenericrx.com\r
+mymistake.biz\r
+mymixture.com\r
+my-mom.kicks-ass.net\r
+myricenet.com\r
+myrtlejones.com\r
+myseo.com.cn\r
+MyServer.org\r
+my-sex-toys-store.com\r
+myslimpatch.com\r
+mystify2001.com\r
+naar\.be\r
+nabm(il|li)or.com\r
+nabpak.org\r
+naked-gay.us\r
+naked-pussy.us\r
+naked-womens-wrestling-league-dvds.com\r
+naked-womens-wrestling-league-videos.com\r
+nancyflowerswilson.com\r
+nanyangcn.net\r
+narod.ru\r
+nasty-pages.com\r
+natel-mobiles.com\r
+natural-barleygreen.com\r
+natural-breasts-enhancement.net\r
+naturalknockers.net\r
+navinic\.com\r
+nazari.org\r
+nbflashlights.com\r
+nbip.net\r
+ne1\.net\r
+nease.net\r
+nebulax.net\r
+necsi.com.cn\r
+neiladams.org.uk\r
+nemarov.com\r
+nerja.to\r
+netbank.cn\r
+netfirms.com\r
+netisc\.net\r
+netizen.org\r
+netlogo.us\r
+net-mature.com\r
+netnetn.com\r
+netsuns.net\r
+netsuns\.net\r
+netsx.org\r
+net-von-dir.de\r
+neurogenics.co.uk\r
+neverback.com\r
+new-cialis.com\r
+newfurnishing.com\r
+newgallery.co.uk\r
+newideatrade.com\r
+newsnewsmedia.com\r
+newxwave.com\r
+nextdayid.co.uk\r
+nfl-football-tickets.biz\r
+nicepages.(biz|net|org)\r
+nice-pussy.us\r
+niceshemales.net\r
+nichehit.com\r
+nicolepeters.com\r
+nieruchomosci.biz.pl\r
+nifty-erotic-story-archive.blogspot.com\r
+nikechina.net\r
+nikeproduct.com\r
+nikeshoesshop.com\r
+nikeshoeswholesale.org\r
+nikesupplier.com\r
+nikkiwilliams.info\r
+njhma.com\r
+njlvtong.com\r
+njningri.com\r
+njunite.net\r
+njuyq.com\r
+nnyykkii\.org\r
+no-1.com.cn\r
+no-1.org.cn\r
+no1pics.com\r
+no-cavities.com\r
+nohassle-loans.com\r
+no-more.dyndns.org\r
+noni-?(jungbrunnen|top-chance|vitalgetraenk|expert).com\r
+nonstopsex.org\r
+noslip-picks.com\r
+notebook555.com\r
+no-title.de\r
+notsure.de\r
+novacspacetravel.com\r
+novosanctipetri.to\r
+nr-challenges.org\r
+nude-(black|movies?|videos?).us\r
+nude-teens.name\r
+nudevol.us\r
+nuevaandalucia.to\r
+nuppy.static.net\r
+nutritional-supplements.ws\r
+nutritionalsupplementstoday.com\r
+nwwl-dvds.com\r
+nwwl-videos.com\r
+nz.com.ua\r
+office-021\.com\r
+office-stock\.com\r
+officialdarajoy.com/wwwboard\r
+officialdentalplan.com\r
+officialsatellitetv.com\r
+offseasonelves.com\r
+ohamerica.org\r
+okings.com\r
+okuk.org\r
+oldgrannyfucking.com\r
+oliva.to\r
+olsenstyle.com\r
+omega-fatty-acid.com\r
+omeida.com\r
+one-cialis.com\r
+one-debt-consolidation.com\r
+onepiecex.net\r
+one-propecia.com\r
+oneseo.com\r
+one-soma.com\r
+onexone.org\r
+online-?hgh.com\r
+online-auction-tricks.com\r
+online-blackjack-online.com\r
+online-buy-plavix.com\r
+online-casino.descom.es\r
+online-ccc.com\r
+online-credit-report-online.com\r
+online-dating-singles-service.com\r
+online-deals99.com\r
+on-line-degree.org\r
+online-dot.com\r
+online-escort-service.com\r
+online-flexeril.com\r
+online-games24x7.com\r
+online-games24x7.net\r
+online-games-links.net\r
+onlinehgh.com\r
+online-investing-ideas.info\r
+on-line-kasino-de.com\r
+online-medications24x7.com\r
+online-photo-print.com\r
+onlineshop.us.com\r
+onlinesmoker.com\r
+online-texas-?hold-?em.(net|us)\r
+on-pok.com\r
+opensorcerer.org\r
+operazione-trionfo.net\r
+oraengel.com\r
+oral-sex-cum.com\r
+orangeyogi.net\r
+orbanus.static.net\r
+order-?(claritin|effexor|medicine|naturals).(com|net)\r
+order-ambien-1.qn.com\r
+order-cialis-1.qn.com\r
+order-codeine.deep-ice.com\r
+order-levitra-1.qn.com\r
+order-valium-online.deep-ice.com\r
+orlandodominguez.com\r
+orospu.us\r
+otito.com\r
+ottawavalleyag.org\r
+ourhealthylife.net\r
+our-planet.org\r
+outoff.de\r
+ovulation-kit.com\r
+owaceilings.co.uk\r
+owns1.com\r
+ownsthis.com\r
+oxford-english.com\r
+oxgm.com\r
+p105.ezboard.com/bdatingpersonalsadultdating\r
+p5.org.uk\r
+p7.org.uk\r
+p8.org.uk\r
+p9.org.uk\r
+pack001.com\r
+packing-machine.com\r
+pafu.w4.dns2008.cn\r
+page.zhongsou.com\r
+pagerealm.com\r
+pages4people.com\r
+paidsurveysforall.com\r
+pai-gow-keno.com\r
+paisleydevelopmentassociation.org\r
+paite.net\r
+pajara.to\r
+panpanddc.com\r
+pantandsocks.co.uk\r
+paperscn.com\r
+paper-translation\.com\r
+paris-(movie|naked|nicky|nikki)-hilton.blogspot.com\r
+paris-and-nicky-hilton-pictures.blogspot.com\r
+paris-hilton-video-blog.com\r
+paris-hilton-videos.biz\r
+parkersexecutivecar.co.uk\r
+partnersmanager.com\r
+partnersuche-partnervermittlung.com\r
+partybingo.com\r
+passende-klamotten.de\r
+passion.org.cn\r
+passwordspussynudity.com\r
+pastramisandwich.us\r
+pasuquinio.com\r
+paybacksh\.com\r
+payday-loan\.de\.com\r
+payday-loan-payday.com\r
+paydayloans-guide\.com\r
+paysites.info\r
+pc-choices.com\r
+pcdweb.com\r
+pcpages.com\r
+pcpages.com/abyssal\r
+pcvr.com.cn\r
+pdxx.com\r
+peak-e.com\r
+peepissing.com\r
+penase\.org\r
+penelopeschenk.com\r
+peoplegrad\.gen\.in\r
+perepug\.ig3\.net\r
+perfect-dedicated-server.com\r
+perfect-mortgage-lead-4-u.com\r
+personalads.us.com\r
+personal-finance-tips.com\r
+personals-online-personals.com\r
+petlesbians.com\r
+petroglyphx.com\r
+pety-viagra.newmail.ru\r
+pfxb.com\r
+phantadu.de\r
+pharmaceicall.com\r
+phente.m...\.do\.nu\r
+phentermine\r
+phentermine.webzdarma.cz\r
+phone-cards-globe.pushline.com\r
+phono.co.il\r
+photobloggy.buzznet.com\r
+phrensy.org\r
+pickevents.com\r
+pickone.org\r
+picsfreesex.com\r
+pics--movies.com\r
+pics-stories.com\r
+picsteens.com\r
+pictures-movies.net\r
+piercing-auswaehlen.de\r
+piercing-magic.com\r
+piercingx.com\r
+pill(-buy|blue|chart|hub|hunt|inc|tip).com\r
+pimp(hop|hos|space).com\r
+pinkzoo.com\r
+pinnaclepeakrealty.com\r
+pj-city.com\r
+planetluck.com\r
+plastic168.com\r
+playandwin777.com\r
+playandwinit777.net\r
+play-cash-bingo-online.com\r
+player-tech.com\r
+playgay.biz\r
+playmydvd.com\r
+play-texas-hold-?em.us\r
+play-texas-holdem-today.net\r
+playweb.blogspot.com\r
+plazaerotica.com\r
+plcm.com.cn\r
+plygms.de\r
+pm.tsinghua.edu.cn\r
+poizen.info\r
+pokemonx.biz\r
+polifoniczne.org\r
+polott.org\r
+polyphone.us\r
+pompini.nu\r
+Ponderosa\r
+ponytest.com\r
+pops.pp.ru\r
+post.baidu.com\r
+posters?-?shop.us\r
+power-rico.de\r
+power-tools.rx24.co.uk\r
+predictive-dialers.org\r
+pregnancy-guide\.org\r
+pregnant\.sumale\.net\r
+pregnant-sex-free.us\r
+p-reise.de\r
+pre-machine.com\r
+prepaid-telephonecards.co.uk\r
+prepaylegalinsurance.com\r
+preteen-(models|sex|young).(biz|info|net)\r
+prettypiste.com\r
+princeofprussia.org\r
+printer-cn.com\r
+prism-lupus.org\r
+privacy-online.biz\r
+private-krankenversicherung-uebersicht.com\r
+private-network.net\r
+pro-collegefootballbetting.com\r
+product-paradise.com\r
+projector-me.com\r
+promindandbody.com\r
+prom-prepared.com\r
+propecia.bravehost.com\r
+propecia-for-hair-loss.com\r
+propecia-for-hair-loss.net\r
+propecia-info.net\r
+propecia-store.com\r
+property2u.com\r
+property2u\.com\r
+prosearchs.com\r
+protech.net.cn\r
+psearch.163.com\r
+pseudobreccia60.tripod.com.ve\r
+psites.(biz|net|org|us)\r
+puertaumbria.to\r
+puertobanus.to\r
+puertoreal.to\r
+punksongslyrics.com\r
+purchase-ambien.qn.com\r
+purchase-valium.hotusa.org\r
+pureteenz.com\r
+pushline.com\r
+pussy-(d|cum|movies).(com|us)\r
+pussy\.the-best\.etowns\.org\r
+qd-heli.com\r
+qiangzhe\.cn\r
+qianyijia.com\r
+qingchundoua.cn\r
+qitao.wy8.net\r
+qj100\.net\r
+qm0?0[0-9]\.com\r
+qmnet\.cn\r
+qmwa\.com\r
+qqba.com\r
+qqmei.com\r
+quangoweb.com\r
+quickchina.com.cn\r
+quickdomainnameregistration.com\r
+quick-drugs.biz\r
+quick-drugs.com\r
+quickie-quotes.com\r
+qumingqiming.com.cn\r
+qybalancingmachine.com\r
+qz168.com\r
+qzkfw.co\r
+racconti-gay.org\r
+radsport-artikel.de\r
+raf-ranking.com\r
+ragazze-?\w+\.[a-z]{2,}\r
+rampantrabbitvibrator.co.uk\r
+randysrealtyreview.com\r
+ranklink.org\r
+rape-(fantasy-pics|stories).(biz|com)\r
+rapid-merchant-account.com\r
+ratenkredit-center.de\r
+ratenkredit-shop.de\r
+raw-pussy.us\r
+raymondmill.biz\r
+rbfanz.com\r
+readytocopy\.com\r
+real.net.cn\r
+real-estate-investment-online.info\r
+realestate-max\.com\r
+reality-sites.com\r
+reality-xxx.biz\r
+real-sex.us\r
+realtickling.com\r
+real-worldinternational.co.uk\r
+rebjorn.co.uk\r
+recycle.myrice.com\r
+redcentre.org\r
+redi.tk\r
+refinance-mortgage-home-equity-loan.com\r
+reggaeboyzfanz.com\r
+reggdr.org\r
+registerxonline.com\r
+reglament-np.ru\r
+reisen-domain.de\r
+relay888.com\r
+relievepain.org\r
+relocationmax\.com\r
+rentalcarsplus.com\r
+repondeurs-logos-mobile.com\r
+republika.pl\r
+restaurant-l.de\r
+reviewonlinedating.com\r
+rfhk\.cn\r
+rfhk\.net\r
+rfhk\.org\r
+rfhz\.com\r
+rfhz\.net\r
+rfhz\.org\r
+ricettegolose.com\r
+richshemales.com\r
+rincondelavictoria.to\r
+ringsguide\.org\r
+ringsignaler-ikon-spel.com\r
+ringtone-logo-game.com\r
+ringtoner-logoer-spill.com\r
+ringtonespy.com\r
+rittenhouse.ca\r
+rituo.com\r
+riyao.com.cn\r
+roboticmilking.com\r
+roche.to\r
+romane-buecher.de\r
+romeo-ent.com\r
+ronda.to\r
+room-ordering.com\r
+roscoeluna.com\r
+rota-andalucia.to\r
+rotek.com.cn\r
+roulette---online.com\r
+roulette-w.com\r
+royaladult.com\r
+royalfreehost.com/teen/amymiller\r
+royalprotectionplan\.com\r
+rr365.net\r
+rrank.net\r
+ru(send|idea)\.com\r
+ru21.to\r
+ruilong.com.cn\r
+rx4.mine.nu\r
+rxbkfw.com\r
+rx-central.net\r
+rx-lexapro.biz\r
+rxpainrelief.net\r
+rx-phentermine.newmail.ru\r
+rx-store.com\r
+rxweightloss.org\r
+rydoncycles.co.uk\r
+safetytech.cn\r
+salcia.co.uk\r
+sandrabre.de\r
+sanfernando.to\r
+sanlucar.to\r
+sanpedro.to\r
+santamaria.to\r
+sarennasworld.com\r
+satellite.bravehost.com\r
+satellite-direct-for-you.com\r
+satellite-network-tv.com\r
+satellitetv-reviewed.tripod.com\r
+saveondentalplans.com\r
+saving-money-hyip.info\r
+saw-blade.net\r
+sba\.com\.cn\r
+sbdforum.com\r
+sbn\.bz\r
+sbt-scooter.com\r
+scent-shopper.com\r
+scepter.static.net\r
+schanee.de\r
+schmuck-domain.de\r
+scottneiss.net\r
+scpv.net\r
+screencn.com\r
+scuba-guide\.com\r
+s-cyclobenzaprine.fromru.com\r
+sd-dq\.com\r
+sdsanrex.com\r
+search.online.sh.cn\r
+search.sohu.com\r
+search-1.info\r
+search722.com\r
+search-engine-optimization-4-us.com\r
+searchfix.net\r
+sec66.com\r
+sec-battery.co.uk\r
+secureroot.org\r
+security-result.com\r
+seitensprung-gratis.com\r
+selectedsex.com\r
+selena-u.ru\r
+selten-angeklickt.de\r
+sempo-tahoe.com\r
+sense.com.cn\r
+sensor168.com\r
+seodetails\.com\r
+seov.net\r
+seoy.com\r
+servicesmax\.com\r
+se-traf.com\r
+seven-card-stud.biz\r
+seven-card-stud.us\r
+sevilla-andalucia.to\r
+sewilla.de\r
+sex-(4you|bondagenet|lover|photos).org\r
+sex(ushost|webclub|websites).com\r
+sex--.*\.com\r
+--sex\.com\r
+sex4dollar.com\r
+sexbrides.com\r
+sexcia.com\r
+sexe.vc\r
+sexforfree.webzdarma.cz\r
+sex-friend.info\r
+sexglory.com\r
+sexiestserver.com\r
+sexingitup.com\r
+sex-livecam-erotik.net\r
+sex-mates.info\r
+sexmuch.com\r
+sexo9.com\r
+sex-pic-sex.com\r
+sexplanets.com\r
+sex-pussy.us\r
+sexschlucht.de\r
+sexshop.tk\r
+sexshop-sexeshop.com\r
+sex-toys-next-day.com\r
+sextoysportal.com\r
+sexual-shemales.com\r
+sexual-story.blogspot.com\r
+sexvoyager.com\r
+sexy-(ass|babes|lesbian|pussy).us\r
+sexy-celebrity-photos.com\r
+sexy-girls.org\r
+sexy-girls\.org\r
+sexynudea.com\r
+sfondi-desktop-gratis.com\r
+sfondi--gratis.com\r
+s-fuck.com\r
+shadowbaneguides.net\r
+shannon-e.co.uk\r
+shareint-store.com\r
+sheffield800.freeserve.co.uk\r
+shellbitumen.com.cn\r
+shemalesex.biz\r
+shemalesland.com\r
+shemalezhost.com\r
+shemalki.com\r
+Shemok\r
+shengdanuclei.com\r
+shenman.com\r
+shfldz\.com\r
+shfx-bj.com\r
+shimiana.cn\r
+shinylights\.org\r
+shirts-t-shirts.com\r
+shluhen.lir.dk\r
+shoesbuynow.com\r
+shoeswholesale.cn\r
+shop.tc\r
+shop24x7.net\r
+shop263.com\r
+shop-opyt.com\r
+shopping-cn.com\r
+shoppingideen-xxl.de\r
+shopping-liste.de\r
+shoppyix.com\r
+showsontv.com\r
+sh-shengde.com\r
+shtestm.com\r
+shtravel.net\r
+shunfeng-pioneer.com\r
+sh-xinping.com\r
+simplemeds.com\r
+simpsonowen.co.uk\r
+sina.com.cn\r
+sinfree.net\r
+singtaotor\.com\r
+sinoart.com.cn\r
+sino-bee.com\r
+sinodragon.freewebpage.org\r
+sinostrategy.com\r
+sinski.com\r
+sister8.com\r
+site\.neogen\.ro/xy[\w]+/files/ps_imagini\.php\r
+site-mortgage.com\r
+sitesarchive.com\r
+site-webarea.com\r
+sjdd.com.cn\r
+sjlstp\.com\r
+sjzyxh.com\r
+skf-baijia.com\r
+skidman.com\r
+ski-resorts-guide.com\r
+sky\.static\.net\r
+slimmobile.org\r
+slmj.com\r
+slng.de\r
+slotmachinesguide.net\r
+slot-machines-slots.com\r
+slots-w.com\r
+slowdownrelax.com\r
+slpblogs.com/expenditure\r
+slutcities.com\r
+slut-wife-story.blogspot.com\r
+smartdot.com\r
+smartonlineshop.com\r
+smeego.com/gettext\r
+smerfy.pl\r
+smutwebsites.com\r
+sneakysleuth.com\r
+s-norco.fromru.com\r
+so18.cn\r
+socoplan.org\r
+sofortkredit-tipps.de\r
+sofort-mitgewinnen.de\r
+soft.center.prv.pl\r
+soft-industry.com\r
+softsenior.com\r
+softwaredevelopmentindia.com\r
+software-einkaufsmarkt.de\r
+software-engine.org\r
+software-linkliste.de\r
+softwarematrix\.org\r
+software-review-center.org\r
+sohublog.com\r
+soittoaanet-logot-peli.com\r
+sol-web.de\r
+soma-(cheap-soma|solution|web).com\r
+soma.st\r
+somaspot.com\r
+somee.com\r
+sommerreisen-2004.de\r
+sonderpreis.de.com\r
+songshangroup\.com\r
+sorglos-kredit.de\r
+sorry\.yi\.org\r
+sotogrande.to\r
+sou23.com\r
+soulfulstencils.com\r
+source.dyndns.dk\r
+sowang\.com/translation\.htm\r
+spaces.msn.com/members/wangluoyingxiao/\r
+spacige-domains.de\r
+spannende-spiele.de\r
+spassmaker.de\r
+speedy-insurance-quotes.com\r
+spiele-kostenlose.com\r
+spiele-planet.com\r
+sportartikel-auswahl.de\r
+sportecdigital.com\r
+sportlich-chic.de\r
+sports---betting.com\r
+sports-inter-action.com\r
+spp-net.de\r
+spy-patrol.com\r
+spyware-links.com\r
+spzd\.com\r
+ss-cn.com\r
+s-sites.net\r
+ssy-web.com\r
+staffordshires.net\r
+stars-laser.com\r
+static.net\r
+stationery555.com\r
+stationfoundation\.org\r
+statusforsale.de\r
+steel168.com\r
+steelstockholder.co.uk\r
+stellenangebote-checken.de\r
+stellenangebote-l.de\r
+stevespoliceequipment.com\r
+stfc-isc.org\r
+sting.cc\r
+stock-cn.com\r
+stock-power.com\r
+stolb.net\r
+stop-depression.com\r
+stopp-hier.de\r
+stopthatfilthyhabit.com\r
+stories-adult.net\r
+stories--archive.com\r
+stories-inc.com\r
+striemline.de\r
+strivectinsd.com\r
+stst-cn.com\r
+stunningsextoys.com\r
+styrax-benzoin.com\r
+submit-your-cock\.info\r
+success-biz-replica.com\r
+suckingsex\.info\r
+sudian.com.cn\r
+suma-eintragen.de\r
+sumaeintrag-xxl.de\r
+sunbandits.com\r
+sunnyby.com\r
+suonerie-(center|download|loghi-gratis).com\r
+suonerieloghix.com\r
+suoneriex.net\r
+suoyan.com\r
+super-celebs.com\r
+super-cialis.com\r
+surfe-und-staune.de\r
+susiewildin.com\r
+sutra-sex.com\r
+svitonline.com\r
+swan-storage.com\r
+sweet-?(horny|hotgirls).com\r
+sweetapussy\.info\r
+swinger-story.blogspot.com\r
+swing-in-golf.com\r
+switch168.com\r
+switch88.com\r
+sxcoal.com\r
+sydney-harbour.info\r
+sylphiel.org\r
+sylviapanda.com\r
+sysaud.com\r
+szpromotion.com\r
+t35.com\r
+t3n.org\r
+tabsinc.com\r
+t-agency.com\r
+taifudamy\.com\r
+tailongjixie.com\r
+take-credit-cards.com\r
+taliesinfellows.org\r
+talkie.stce.net\r
+talktobabes.com\r
+tamsquare.com\r
+tang\.la\r
+tanganyikan-cichlids.co.uk\r
+tangzhengfa.com\r
+tapbuster.co.uk\r
+taremociecall.com\r
+targetingpain.net\r
+tarifa.to\r
+tattoo-entwuerfe.de\r
+tb-china.com\r
+tcom-control.co.uk\r
+tdk-n.com\r
+teajk\.com\r
+teardust.net/blog/bulletingboard\r
+techfeng.com\r
+teen-(babes|movie|video|xxx).us\r
+teenblog.org/alerts\r
+teenblog.org/handicrafts\r
+teen-boys-fuck-paysite.com\r
+teen-d.com\r
+teens7ever.info\r
+teensluts.org\r
+teenxxxpix.net\r
+teflontape.cn\r
+tejia\.net\.cn\r
+telechargement-logiciel.com\r
+telematicsone.com\r
+telematiksone.co.uk\r
+tenerife-info.to\r
+terminator-sales.com\r
+terra.es/personal\r
+testersedge.com\r
+testi.cc\r
+tests-shop.com\r
+tette.bz\r
+tettone.cc\r
+teulada.to\r
+texas-hold-em-(4u|555|winner).(com|net)\r
+texas-holdem-0.com\r
+texasholdem777.net\r
+texas-holdem-a.com\r
+texas-holdem-big.com\r
+texasholdem-flip-flop.com\r
+texasholdemking.com\r
+texas-holdem-now.com\r
+texasholdem-online.us\r
+texasholdemsite.net\r
+texas-hold-em-w.com\r
+textile88.com\r
+tgplist.us\r
+the1930shome.co.uk\r
+the-bestiality-stories.stories-movies.com\r
+theblackfoxes.com\r
+the-boysfirsttime.com\r
+theceleb.com\r
+thecraftersgallery.com\r
+the-date.com\r
+thefreecellphone.com\r
+thehadhams.net\r
+the-horsesex.stories-movies.com\r
+the-hun-site.com\r
+the-hun-yellow-page-tgp.com\r
+themadpiper.net\r
+the-pill-bottle.com\r
+the-proxy.com\r
+thepurplepitch.com\r
+thepussies\.info\r
+therosygarden.com\r
+the-sad-diary-of.mine.nu\r
+thesoftwaregarage.co.uk\r
+thespecialweb.com\r
+thewebbrains.com\r
+thfh\.com\r
+thorcarlson.com\r
+thoth\.cn\r
+thumbscape.com\r
+thuriam.com\r
+tianjinpump\.com\r
+ticket88.com\r
+ticket-marktplatz.de\r
+tickets4events.de\r
+tiere-futter.de\r
+tiffany-towers.com\r
+tikattack.com\r
+timead.net\r
+timeguru.org\r
+timescooter.com\r
+tips-1a.de\r
+tire-cn.com\r
+tits-center.com\r
+tits-cumshots.net\r
+tjht.net\r
+tjht\.net\r
+tjtools.com\r
+tjwatch.com\r
+tl800\.com\r
+tldyjc.com\r
+tmrr.com\r
+tofik.pl\r
+tokyojoes.info\r
+toner-cartridge\.mx\.gs\r
+tontian.com\r
+tonzh.com\r
+topaktuelle-tattos.de\r
+top-cialis.com\r
+topcities.com\r
+top-dedicated-servers.com\r
+top-des-rencontres.com\r
+top-fioricet.com\r
+top-internet-blackjack.com\r
+top-of-best.de\r
+top-online-slots.com\r
+top-point.net\r
+top-result.com.cn\r
+top-skelaxin.com\r
+top-soma.com\r
+top-the-best.de\r
+toques-logos-jogos.com\r
+torch.cc\r
+torredelmar.to\r
+torremolinos-costa-del-sol.to\r
+torrox.to\r
+toshain.com\r
+tossa.to\r
+totallyfreecreditreport.org\r
+total-verspielt.de\r
+touchweb\.com\.cn\r
+touchwoodmagazine.org.uk\r
+toy-china.com\r
+traceboard\.com.cn\r
+tracyhickey.com\r
+tradeba.com\r
+tradeinvests\.cn\r
+tradeinvests\.org\r
+training-one.co.uk\r
+tran4u.com\r
+tranny-pic-free.com\r
+trannysexmovie.com\r
+transcn.net\r
+transestore.com\r
+transpire.de\r
+traum-pcs.de\r
+trendsbuilder.com\r
+treocat.com\r
+triadindustries.co.uk\r
+troggen.de\r
+troie.bz\r
+trolliges.de\r
+trucchi-giochi.us\r
+trueuninstall.com\r
+ts998\.com\r
+ts-wood.com\r
+tt33tt.com\r
+tt7.org\r
+ttuuoopp\.org\r
+tuff-enuff.fnpsites.com\r
+tumor-cn.com\r
+tuofaa.cn\r
+tv-bazzar\.com\r
+tygef.org\r
+tyjyllrj.go1.icpcn.com\r
+tykh\.com\.cn\r
+tzonline.cn\r
+ua\-princeton.com\r
+ufosearch.net\r
+ukeas.com\r
+uk-virtual-office-solutions.com\r
+ultracet-web.com\r
+ultraseek.us\r
+unbeatablecellphones.com\r
+unbeatablemobiles.co.uk\r
+unbeatablerx.com\r
+unccd.ch\r
+underage-pussy.net\r
+undonet.com\r
+unexpectedmovement.b4net.lt\r
+uni-card.ru\r
+universalplastic.com\r
+unscramble.de\r
+unterm-rock.us\r
+uoo.com\r
+upoisoning.com\r
+ups123.com\r
+upsms.de\r
+urlaubssonne-tanken.de\r
+usa-birthday-flowers.com\r
+usa-car-insurance.com\r
+usa-car-loans.com\r
+usbitches.com\r
+us-cash.com\r
+uscashloan.com\r
+user1.7host.com\r
+us-meds.com\r
+uswebdata.com\r
+uusky.com\r
+uusky.net\r
+uusky.org\r
+uusky.zj.com\r
+uusky2.home.sunbo.net\r
+uvinewine.co.uk\r
+u-w-m.ru\r
+v(27|29|3).(net|be)\r
+vacation-rentals-guide.com\r
+vaiosony.com\r
+valentine-gifts.qn.com\r
+valeofglamorganconservatives.org\r
+valium-online.1024bit.at\r
+valium-online.sinfree.net\r
+venera-agency.com\r
+veranstaltungs-tickets.de\r
+vergleich-versicherungsangebote.de\r
+versicherungsangebote-vergleichen.de\r
+versicherungsvergleiche-xxl.de\r
+versteigerungs-festival.de\r
+verybrowse.com\r
+verycd.com\r
+verycheapdentalinsurance.com\r
+vfrrto.org\r
+viaggix.com\r
+viagra\.freespaces\.com\r
+viapaxton.com\r
+viasho.com\r
+video-n.com\r
+videoportfolios.com\r
+vietdiary.com/andromedical\r
+vilentium.de\r
+vilez\.zenno\.info\r
+villagesx.com\r
+villajoyosa.to\r
+villamara.net\r
+vindaloosystems\.com\r
+vip-condom.com\r
+vitamins-for-each.com\r
+vivalatinmag.com\r
+vivlart.com\r
+vixensisland.com\r
+vod-solutions.com\r
+voip99.com\r
+voip99.net\r
+voip-guide.org\r
+vttolldd.org\r
+vtsae.org\r
+vttthtgg.org\r
+waldner-msa.co.uk\r
+warblog.net\r
+wasblog.com/ascitis\r
+washere.de\r
+watches-sales.com\r
+waterbeds-dot.com\r
+waycn.com\r
+wblogs.com\r
+wcdma2000.com\r
+wcgaaa.org\r
+wchao.net\r
+wdc\.com\.cn\r
+wding.com\r
+we.rx.pp.ru\r
+weareconfused.org.uk\r
+wearethechampions.com\r
+weaver.com.cn\r
+web.csnec.net\r
+web3dchina.com\r
+webanfragen.de\r
+webblogs.biz\r
+webcam-erotiche.com\r
+webcenter.pl\r
+web-cialis.com\r
+webcopywizard.net\r
+w-ebony.com\r
+webpage-cn.com\r
+webpark.pl\r
+webrank.cn\r
+web-revenue.com\r
+websamba\.com\r
+websitedesigningpromotion.com\r
+website-expansion.com\r
+websitespace-cn.com\r
+webzdarma.cz\r
+wecony.com\r
+weddings-info.com\r
+weddings-links.com\r
+weedns.com\r
+weighlessrx.com\r
+weight-loss-central.org\r
+weight-loss-links.net\r
+weightlossplace.net\r
+weitere-stellenangebote.de\r
+welan\.com\r
+welding\.mx\.gs\r
+we-live-together-4u.com\r
+wellness-getraenk.de\r
+weroom.com\r
+westzh.com\r
+wet-?(4all|pussy|horny).(com|us)\r
+whitehouse.com\r
+white-shadow-nasty-story.blogspot.com\r
+whizzkidsuk.co.uk\r
+wholesalepocketbike.com\r
+willcommen.de\r
+wincmd.ru\r
+wincrestal.com\r
+windcomesdown.com\r
+wine-booking.com\r
+wine-shop001.com\r
+wirenorth.com\r
+wiset-online.com\r
+witch-watch.com\r
+witji.com\r
+witz-net.de\r
+wizardsoul.com\r
+wjmgy.com\r
+wol\.bz\r
+women-fitness\.org\r
+workfromhome-homebasedbusiness.com\r
+worldblognet.com/eurasia\r
+world-candle.com\r
+world-cheese.com\r
+worldmusic.com\r
+worldsexi.com\r
+worldwide-(deals|games|holdem).(com|net)\r
+worldwide.php5.sk\r
+wotcher.de\r
+wrrirk\.poes\.net\r
+wujing-eyes.com\r
+wuyue.cn\r
+ww\.\d+\.com\r
+www.bhcyts.cn\r
+www.bjicp.com\r
+www.bungee-international.com\r
+www.it01.com.cn\r
+www.lamp-expert.com\r
+www.richtone.com.cn\r
+www.sex-portal.us\r
+www.webcamss.com\r
+www\.76e\.net\r
+www\.8z\.cn\r
+www\.banzhao\.com\r
+www\.chat-live\.net\r
+www\.pasca\.info\r
+www\.roth-401k-forum\.com\r
+www-sesso\r
+www-webspace.de\r
+wxals.com\r
+wxboall.cn\r
+wxfl.net\r
+wxwz.fwhost.com\r
+wxwz.tabrays.com\r
+x24.com.ru\r
+x8x.weedns.com\r
+x911\.net\r
+xanax.qn.com\r
+xanax-online.qn.com\r
+xaper.com\r
+xazl.net\r
+xazlkjh.blog.ccidnet.com\r
+x-baccarat.com\r
+x-baccarat.us\r
+x-beat.com\r
+x-bingo.com\r
+x-craps.com\r
+x-craps.us\r
+xdolar.com\r
+x-fioricet.com\r
+xfreehosting.com\r
+xgsm.org\r
+xhhj.com.cn\r
+xianggangjc.com\r
+xianliming.com\r
+xianwahl\.com\r
+xinchen.net.cn\r
+xin-web.de\r
+xinyifang.net\r
+xinyitong\.org\r
+x-jack.us\r
+xlboobs.net\r
+xmtmdart.com\r
+xnan2.91x.net\r
+xnan2.blogdriver.com\r
+xnxxx.com\r
+x-pictures.net\r
+x-pictures.org\r
+xpictx.com\r
+xprv.com\r
+xratedcities.com\r
+xrblog.com/ezetimib\r
+x-ring-?tones.com\r
+x-roulette.com\r
+x-roulette.us\r
+x-roullete.com\r
+xs3.com\r
+xsjby.cn\r
+x-slots.com\r
+x-slots.us\r
+x-stories.org\r
+xt[\w]+.proboards\d\d\.com\r
+xtnm.com\r
+xxshopadult.com\r
+xxx(chan|seeker|washington).com\r
+xxx-alt-sex-story.blogspot.com\r
+xxx-beastiality.com\r
+xxx-database.com\r
+xxx-dvd.biz\r
+xxx-erotic-sex-story.blogspot.com\r
+xxx-first-time-sex-story.blogspot.com\r
+xxx-free-erotic-sex-story.blogspot.com\r
+xxx-gay-sex-story.blogspot.com\r
+xxx-girls-sex.com\r
+xxx-password-web.com\r
+xxx-pussy.us\r
+xxx-rape.org\r
+xxx-sex-movies.org\r
+xxx-sex-story-post.blogspot.com\r
+xxx-spanking-story.blogspot.com\r
+xxx-stories.net\r
+xxx-story.blogspot.com\r
+xy[\w]+\.blogg.de\r
+xyu[\w]+\.easyjournal\.com\r
+xyxy.net\r
+xz[\w]+\.over-blog\.com\r
+xz9.com\r
+yaninediaz.com\r
+ycc-zipper.com.cn\r
+ychzn.com\r
+yculblog.com\r
+ygci.com\r
+yihongtai.com\r
+ying0.com\r
+yipu.com.cn\r
+yipu\.com\.cn\r
+yisounet.com\r
+yisounet.net\r
+yl-jx\.com\r
+ylqx.org\r
+ymf.name\r
+yoll.net\r
+you-date.com\r
+youll.com.cn\r
+young\-tender\.info\r
+young-ass.us\r
+yourdentalinsuranceonline.com\r
+yourowncolours.co.uk\r
+yourserver.com\r
+your-tattoo.de\r
+youyipu\.com\r
+yubatech.com\r
+yukka.inc.ru\r
+yunchou.com.cn\r
+yyhq.com\r
+z0rz.com\r
+zahara.to\r
+zahara-de-la-sierra.to\r
+zahara-de-los-atunes.to\r
+zazlibrary.com\r
+zbbz.com\r
+zcfounder.com\r
+zchb.com\r
+zenno\.info\r
+zeonline.com.cn\r
+zfgfz.net\r
+zgpt.cn\r
+zgqygl.com\r
+zgxbw\.cn\r
+zhiliaotuofa.com\r
+zhjx-sh.com\r
+zhkaw.com\r
+zhongzhou-sh.com\r
+zhqzw.com\r
+ziliaowang\.cn\r
+zipcodedownload.com\r
+zipcodesmap.com\r
+zithromax-online.net\r
+zjww\.com\r
+znpp.com\r
+zo.servehttp.com\r
+zoo(-zone|europe|fil).com\r
+zoo-?sex-?(pics|motion-videos|pictures)?.(com|biz)\r
+zoosx.net\r
+zorpia\.com/xt\r
+zpics.net\r
+zt148.com\r
+zum-bestpreis.de\r
+zxyzxy.com\r
+zybxg.net\r
+zy-image.com\r
+zzdh.com\r
+zzgj.net\r
+\r
+abouthongkong\.asexblogs\.com/\r
+abouthongkong\.bloggingmax\.com/\r
+abouthongkong\.blogslinger\.com/\r
+abouthongkong\.satublog\.com/\r
+berko\.com\.au/merry/\r
+blog\.bachhoacung\.ws/freey/\r
+blog\.mogway\.com/abouthongkong/\r
+blog\.myaliyah\.com/\?u=abouthongkong\r
+blogcharm\.com/huanger/\r
+blogs\.thesubculture\.com/\?u=abouthongkong\r
+cancerblog\.com\.au/abouthongkong/\r
+film4vn\.net/blog/\?w=lieey\r
+rockstart\.net/blog/\?u=abouthongkong\r
+smeego\.com/feier/\r
+tornblog\.com/abouthongkong/\r
+um\.com\.my/win/\r
+vfwnjwebcom\.org/abouthongkong/\r
+we-r-blogs\.com/\?w=drewer\r
+weblog\.statisticounter\.com/abouthongkong/\r
+www\.asiannotes\.com/art/\r
+www\.betterbrain\.com/blog/\?u=abouthongkong\r
+www\.billionaire-blogs\.com/abouthongkong/\r
+www\.blarbitration\.com/lelby/\r
+www\.blog3\.com/\?u=abouthongkong\r
+www\.blogfreely\.com/abouthongkong/\r
+www\.blogstuff\.co\.uk/\?u=abouthongkong\r
+www\.blogtoowoomba\.com/\?w=homuy\r
+www\.earthtank\.com/diewu/\r
+www\.elblog\.de/howue/\r
+www\.freescrapblogs\.com/red/\r
+www\.fsaalumni\.net/blog/\?u=abouthongkong\r
+www\.kosova\.ch/yourblog/\?u=abouthongkong\r
+www\.love2k\.com/weblogs/\?u=abouthongkong\r
+www\.mattian\.co\.uk/liuhcai/\r
+www\.nukeblog\.info/\?u=abouthongkong]]\r
+www\.pandablogs\.com/xiangang\r
+www\.picturethisblog\.com/\?u=abouthongkong\r
+www\.sblnet\.co\.uk/sblogger/abouthongkong/\r
+www\.skaffe\.com/weblog/abouthongkong/\r
+www\.slickblogs\.com/abouthongkong/\r
+www\.slpblogs\.com/abouthongkong/\r
+www\.soccerblogger\.co\.uk/\?w=uowek\r
+www\.sovereigngracesingles\.com/sgs_blog/\?u=abouthongkong\r
+www\.spottersblog\.com/tremo/\r
+www\.spweblog\.com/abouthongkong/\r
+www\.stitch-studios\.com/weblogs/\?u=abouthongkong\r
+www\.stu-c\.com/blogs/abouthongkong/\r
+www\.tatsulok\.com/yuer/\r
+www\.teenblog\.org/abouthongkong/\r
+www\.toiyeu\.net/nhatky/\?w=toiyew\r
+www\.totalvideogames\.com/blog/laner\r
+www\.vfwmowebcom\.org/nicer/\r
+www\.weblogone\.com/dry/\r
+www\.westwoodbapt\.org/blog/abouthongkong/\r
+www\.worldblognet\.com/abouthongkong/\r
+www\.ym1\.com/abouthongkong/\r
+chio92\.com\r
+onlinepoker\.happyhost\.org\r
+kolloidales-silber\.at\r
+sonyy1\.com\r
+tdk14\.com\r
+nyteam\.info\r
+ethock\.info\r
+pepsi14\.info\r
+jiayinte\.cn\r
+moxor\.info\r
+maxor\.info\r
+chevy\.ws\r
+adoption\.ws\r
+carpetcleaning\.ws\r
+hrentut\.org\r
+icwak\.info\r
+humela\.info\r
+guoyong\.com\r
+ziyangwz\.com\r
+zhanziyang\.com\r
+ziyangshiwo\.com\r
+short\-termhealthinsurance\.com\r
+scooter\-web\.org\r
+bikesplanet\.org\r
+aishwaryalife\.com\r
+jessicaalbalife\.com\r
+shakiralife\.com\r
+terapatricklife\.com\r
+adrianalimapics\.org\r
+wifiguide\.org\r
+wifi-planet\.org\r
+wifi-world\.org\r
+teainfo\.org\r
+pizzaguide\.org\r
+coffee-guide\.us\r
+chocolateplanet\.org\r
+girls-xxx-party\.com\r
+trinitao\.com\r
+tjshenguang\.com\r
+liveadulthost\.com\r
+speedorado\.com\r
+sexsdreams\.com\r
+carpassion\.com\r
+neureich\.de\r
+v-ringtones\.com\r
+4vti8\.com\r
+artsmediamag\.com\r
+ringtones\.konaxil\.be\r
+upcoming\.netteen\.net\r
+cfcsouthpugetsound\.org\r
+xultin\.info\r
+tidep\.info\r
+ythrip\.info\r
+yston\.info\r
+xution\.info\r
+gosle\.info\r
+tallygotmoves\.com\r
+sexstar2000\.com\r
+dante4all\.com\r
+q7voda\.com\r
+fetishrred\.spycams777\.com\r
+discovery\.teenorg\.net\r
+cosmo02\.net\r
+(cam|sex|gay|fuck|swingers|adult|dating|erotic|personal|ads|cum|wife-swap)[\w\-_.]*\.blogspot\.com\r
+irzar\.com\r
+gokdep\.com\r
+nittion\.com\r
+cheapwowgold\.co\.uk\r
+win\.com\.cn\r
+wowgoldworld\.com\r
+starsnak\.biz\r
+shop-now\.be\r
+whitewalker\.com\r
+beatroulette\.atspace\.com\r
+onlines-slots-game\.atspace\.com\r
+(friendlysearch|medchoice|freesearches|getmedicineeasy)\.bravehost\.com\r
+gihore\.info\r
+soseik\.info\r
+ithyr\.info\r
+letreal\.info\r
+efdmen\.info\r
+udwryp\.info\r
+bupyere\.info\r
+tagmyn\.info\r
+suogman\.info\r
+gegbyl\.info\r
+laww\.info\r
+plonehostingdemo\.nidelven-it\.no\r
+wiki\.opennetcf\.org/upload\r
+sprint\.zope\.it\r
+ssdcard\.info\r
+soujipiao\.com\r
+5ijipiao\.com\r
+jipiao126\.com\r
+jipiaoair\.com\r
+canjipiao\.com\r
+bjxiongfei\.com\r
+SaNaLHaCKERLaR\.ORG\r
+jspit7\.info\r
+kokoxx\.info\r
+donte\.info\r
+lib/exe/fetch.php\?media=\r
+imhotep\.sphosting\.com\r
+1-myspace-layout\.blogspot\.com\r
+dinmo\.cn\r
+51education\.com\r
+sispc.com\.cn\r
+sh-dzgs\.com\r
+teyi21\.com\r
+yizhish\.com\r
+oa586\.com\r
+watesi\.com\r
+sh-shenhuang\.com\r
+guojikuaidi\.com\r
+lbjq2h\.com\r
+xingaoweixing\.com\r
+shyw\.com\r
+shnakano\.com\r
+ihtc\.cn\r
+chonggong\.com\r
+kkvalve\.com\.cn\r
+uwb1hhc\.info\r
+vzh5k87\.info\r
+mvuxq60z\.info\r
+bodybillboardz\.com\r
+blog\.lide\.cz\r
+teeenp0rn\.org\r
+creditcarddebt\.neo\.cx\r
+dhzilnwr\.com\r
+hntwzokt\.com\r
+xoyeeuqx\.com\r
+badcredpersloan\.new\.fr\r
+securedcreditcard\.neo\.li\r
+hometown\.aol\.com\r
+(creditcons|creditreport|freeannualcr1|freecreditro|freecredits|cealis)\.monforum\.com\r
+fishmls\.com\r
+localendar\.com/public/\r
+\.maxblog\.pl\r
+\.phpbbx\.de\r
+foroswebgratis\.com\r
+(cabrini|annotation)\.bravepages\.com\r
+(asp|impaction|monocled|wriggle|maneating|migrations)\.1sweethost\.com\r
+(bailee|carrycot|webmasters|markab|homewards)\.dreamstation\.com\r
+(bohemians|encloses|gravel|verite|tenderfeet|sabers)\.exactpages\.com\r
+(drained|shuffles|diathermy)\.fcpages\.com\r
+(headland|similar|muffler|normalise|typologist|buckshots)\.741\.com\r
+(ctenophore|failles|whistle|mayflies|nestled|eunice)\.angelcities\.com\r
+(arcady|tulip|undreamt|impair|reamers|hokiest|catnapping)\.greatnow\.com\r
+(absolutely|bellman|kwangchow|fluctuant|trouping)\.wtcsites\.com\r
+(wafers|whensoever|prescient|spacious|acadia|toothsome|gasolines)\.envy\.nu\r
+(smuggles|showboat|ipecacs|skivvying|straying)\.150m\.com\r
+(suffixed|barbeques|dispersal)\.100freemb\.com\r
+(killer|grumbles|despoiler|termites)\.kogaryu\.com\r
+(adversely|militated)\.g0g\.net\r
+(brunettes|struts)\.o-f\.com\r
+(reconnect|clownishly)\.00freehost\.com\r
+(drygoods|fl|liberia)\.9cy\.com\r
+(membership|retarders|spoonfed|pointedly)\.freewebsitehosting\.com\r
+(unwiser|innervates|woofed)\.ibnsites\.com\r
+(goodnight|shortens|brokering)\.freewebpages\.org\r
+(epaulet|impotency|jewelries)\.1accesshost\.com\r
+homepage\.mac\.com/(nonreader|cartels|cornflour|docilities|unanswered|feelings1)/\r
+(imagist|phosphor|hatecrime|landward)\.freecities\.com\r
+(ainsurance|diflucanmed|mypropecia|1creditrepair)\.proboards104\.com\r
+(carisoprodol|tadalafil)\.mybbland\.com\r
+(refinancingmortgage|cheapautoinsurance|autoinsurancequote)\.(forumactif|actifforum)\.com\r
+fioricetmed\.blogcu\.com\r
+the-sabotage\.org\r
+spygrup\.org\r
+gencnesil\.org\r
+\.(blogsitemaking|blogginpoint)\.info\r
+hjlxmosb\.com\r
+dohzqmod\.com\r
+dadbhpsu\.com\r
+supermegapizdetc\.com\r
+cjbqixzs\.com\r
+tacmbuqe\.com\r
+qcprkjgp\.com\r
+wwcldvob\.com\r
+nhdwinyg\.com\r
+pewddohw\.com\r
+x-uqur\.org\r
+toyota-corollailf\.blogspot\.com\r
+corolla-toyota730\.blogspot\.com\r
+staticstroke\.tr\.cx\r
+vuhavrva\.com\r
+nfzwzphv\.com\r
+ljhasdic\.com\r
+volny\.cz\r
+peoazsog\.com\r
+szsbqqdb\.com\r
+kvxkloks\.com\r
+turkatesi\.net\r
+megaturks\.com\r
+rnsgroup\.us\r
+turkstorm\.org\r
+(ladyboy|shemale)\.viptop\.org\r
+nxyvarpv\.com\r
+shlmsapu\.com\r
+wjmlwkvk\.com\r
+www\.umes\.edu/accsupport/ossd/ossdchat/\r
+jiyxhkdf\.com\r
+hpdrsykw\.com\r
+wminyrxj\.com\r
+gucvfiuh\.com\r
+osgtpzde\.com\r
+szexqgix\.com\r
+susiesbeads\.net\r
+swliuxue\.com\r
+mindtouch\.com\r
+e-parishilton\.com\r
+\.vg\.edu\r
+euitaly\.info\r
+sprzedam\.pl\r
+wpi\.biz\r
+galadriel\.nmsu\.edu\r
+d007\.phpnet\.us\r
+todosvem\.info\r
+flowers-shop\.sitesfree\.com\r
+bcasinos1\.ovp\.pl\r
+\.greatkozel(site|world)\.info\r
+hack-e\.com\r
+eelive\.info\r
+asi\.0moola\.com\r
+Valintino.Guxxi\r
+web\.hit\.bg\r
+\.sportsinfoitaly\.info\r
+urlbee\.com\r
+site3\.info\r
+bdqt\.org\r
+\.svt\.pl\r
+ycaol\.com\r
+abunimah\.org\r
+aypp\.info\r
+poker\.blog\.drecom\.jp\r
+idisk\.mac\.com/ringtonesforyou\r
+chaco\.gov\.ar/meccyt/subsecyt/_act1\r
+forourbano\.gov\.ar/_forodisc/\r
+tx-bridge\.com\r
+beijingimpression\.com\r
+enrichuk\.com\r
+recphone\.cn\r
+kcmp\.cn\r
+pumppump\.cn\r
+officezx\.com\r
+vcd-dvd168\.com\.cn\r
+dinmoseo\.com\r
+wow-powerleveling-wow\.com\r
+e-fanyi\.net\r
+chongshang\.com\.cn\r
+radfort\.com\r
+eachost\.com\r
+bjjly\.net\r
+sino-(jipiao|liuxue|zufang|lvyou)\.com(\.cn)?\r
+citylight\.com\.cn\r
+e4u\.cn\r
+china-co\.com\r
+celsnet\.cn\r
+deqinfy\.com\r
+mycomb\.com\r
+dm-(baojie|jipiao)\.cn\r
+xttg\.cn\r
+cthb\.com\.cn\r
+china-byt\.com\r
+china(yuntong|lipin|yiyao)(\.com|\.net)?\.cn\r
+jinpack\.com\r
+xinyuanit\.com\r
+timeyiqi\.com\.cn\r
+mendean\.net\r
+zgpdw\.cn\r
+5i8811sf\.com\r
+my-projector\.net\r
+bjlhj\.cn\r
+imperial\.edu/maria\.coronel/\r
+vca\.org\r
+faculty\.chi\.devry\.edu/ksteinkr/\r
+encyko\.bee\.pl\r
+(synthroid|cialis|depakote|zithromax|cipro|aciphex-meds|diflucan-777|lipitor|zocor|norvasc|propecia|imitrex)\.ca\.cx # this is the specific regex\r
+\.ca\.cx # if noone complains we'll just keep that\r
+fpoker\.abc\.pl\r
+ftpoker\.ir\.pl\r
+ftpoker\.blogjapan\.jp\r
+wxerqxad\.com\r
+mnwftplr\.com\r
+ixgqwyaj\.com\r
+lglpvgdi\.com\r
+khmifkyd\.com\r
+fnabdymv\.com\r
+maomzyex\.com\r
+iprnhyeb\.com\r
+qytkgqkk\.com\r
+supermeganah\.com\r
+xnjehmqg\.com\r
+koufoadi\.com\r
+palgdhek\.com\r
+kcqdqjiv\.com\r
+xxqzcrbx\.com\r
+ejulbpnr\.com\r
+dfywxiza\.com\r
+wjdvppas\.com\r
+qfoijpym\.com\r
+usphwxib\.com\r
+fawhongh\.com\r
+xjayjaqh\.com\r
+hmaugptw\.com\r
+saeoazbj\.com\r
+pnjugiiu\.com\r
+xpubccoq\.com\r
+umbmjyug\.com\r
+lqbguwrt\.com\r
+1url\.org/go/1yolui\r
+uwrejaag\.com\r
+wjlnjljz\.com\r
+jacpusnk\.com\r
+51ticket\.net\r
+galasale\.com\r
+bjcdmaker\.com\r
+sdcy\.com\.cn\r
+ukpass\.org\r
+archifashion\.com\r
+sino-ups\.com\r
+qwerty\.wblogs\.org/2007/06/\r
+astroguia\.org/bitacoras/qwerty/2007/06/\r
+trinilopez\.com/_msgbrd/00002992\r
+thyoapan\.com\r
+qfrtsyrp\.com\r
+uooyqazf\.com\r
+websearchdir\.net\r
+firstwebdirect\.org\r
+webdironline\.org\r
+nwdirect\.org\r
+wwbol\.info\r
+maagrenn?a\.tripod\.com\r
+(trumtrum|bugaga)\.ifrance\.com\r
+(bugogo|damdan)\.ibelgique\.com\r
+(sukonah|tramtram)\.isuisse\.com\r
+(gurevin|grandan)\.awardspace\.com\r
+uubol\.info\r
+rrbol\.info\r
+iibol\.info\r
+qqbol\.info\r
+iibol\.info\r
+eoajx\.quotaless\.com\r
+hardcorerapecomics\.tripod\.com\r
+(qq|pp|yy)adv\.biz\r
+(dd|gg)coll\.info\r
+rietdekkersbedrijfscholten\.com\r
+taylorrain\.newsit\.es\r
+\.webdirext\.com\r
+(sh)?chfang\.com\r
+xianweijin\.com\r
+strawberrydelights\.com\r
+whichsideofthefence\.com\r
+it\.snhu\.edu\r
+free-online-dating\r
+sudu\.info\r
+shcbprint\.net\r
+toppowerlevel\.net\r
+mysiteup\.my2gig\.com\r
+globalceoforum\.com\.cn\r
+isefc\.com\.cn\r
+teamflyelectronic\.com\r
+hzmqzs\.com\r
+coolingame\.com\r
+mydofus\.com\r
+rs2myth\.com\r
+levelmyth\.com\r
+ankama\.us\r
+buy-dofus-kamas\.net\r
+vulturesknob\.com\r
+yournetexpert\.hostwq\.net\r
+fundorro\.net\r
+normalforce\.com\r
+sei-mein-bester-freund\.de\r
+titaniuexport\.kiev\.ua\r
+loveangelinajolie\.com\r
+movief\.5gbfree\.com\r
+ylhz\.net\r
+grendamix\.com\r
+89bm\.net\r
+temaxd\.cn\r
+gglhctm\.cn\r
+xgswd\.cn\r
+ofcpa\.com\r
+netbai\.net\r
+power-level\.net\r
+e489d\.com\r
+lingollc\.com\r
+boinbb\.com\r
+fourw\.jp\r
+sweepdesign\.jp\r
+chn-job\.com\.cn\r
+xfgkj\.com\r
+houseso\.cn\r
+beijingxiezilou\.com\r
+xiezilouxinxi\.com\r
+kibonbarcode\.com\r
+xzhfblp\.com\r
+linuxbj\.com\r
+pr1ma\.info\r
+dom\d\.info\r
+cardz\d\.info\r
+hom\d\.info\r
+rossa\d\.info\r
+svx\d\.info\r
+bomb\d\.info\r
+filmes[\w\-_.]*sexo\r
+filmes[\w\-_.]*gratis\r
+video[\w\-_.]*sexo\r
+video[\w\-_.]*gratis\r
+foto[\w\-_.]*nudo\r
+seeyo\.info\r
+suphost\.info\r
+freehostss\.info\r
+hostzz\.info\r
+19mb\.info\r
+freespase\.info\r
+host24h\.info\r
+cdq369\.com\r
+datangshutong\.com\r
+jonchn\.com\.cn\r
+sweepdesign\.jp\r
+bj5yuehua\.com\r
+jonchn\.com\.cn\r
+bjht888\.com\r
+zgxbzlw\.com\r
+466tv\.cn\r
+sixnet\.com\.cn\r
+99caigang\.cn\r
+cydjk\.com\r
+fstzb\.com\r
+znstudio\.net\r
+datangshutong\.com\r
+liaoxinbj\.com\r
+bjhrj\.cn\r
+flowervoice\.com\r
+jonchn\.com\.cn\r
+iiwezxmkwzht\.com\r
+miqiatwuypzw\.com\r
+hjigunxxrqaf\.com\r
+slondcnixlwj\.com\r
+bengfa168\.cn\r
+kaiquan\.com\.cn\r
+huigao-v\.com\r
+bgzb\.com\r
+spvalve\.com\r
+dltools\.cn\r
+rosement\.com\.cn\r
+stone-ebay\.com\r
+zgxbzlw\.com\r
+farfly\.com\r
+e-bjmelody\.cn\r
+adsmc\.com\r
+yhht-valve\.com\r
+qmtyblphlilu\.com\r
+qewojlupomxg\.com\r
+zoqecyrqdfhc\.com\r
+jbhazglyuzml\.com\r
+bodt\.com\.cnn\r
+bodt\.com\.cn\r
+onebedroomfurniture\.com\r
+69bm\.com\r
+69bm\.net\r
+cp788\.com\r
+1k888\.com\r
+libfondo\.info\r
+nimerino\.info\r
+minutospa\.info\r
+ihtibel\.info\r
+akmandel\.info\r
+168xh\.net\r
+posui\.net\.cn\r
+szgwjy\.com\r
+tcl\.com\r
+johnsonip\.cn\r
+szwanyang\.com\r
+lfhcn\.com\r
+89bm\.com\r
+caishen\d*\.cn\r
+hcplasticmold\.com\r
+ViewMyLoan\.com\r
+hotwetred\.info\r
+uniwuros\.com\r
+cbyanrbp\.com\r
+vmwtynhs\.com\r
+odosuz\.cn\r
+idakoxic\.cn\r
+ifom\.info\r
+omiducer\.cn\r
+isekecec\.cn\r
+hzylin\.cn\r
+vaqyjcqu\.com\r
+nvzisslp\.com\r
+jxzgdglq\.com\r
+wetwetwett\.info\r
+nudevidz\.info\r
+nunde4free\.info\r
+668w\.com\r
+fregalz\.info\r
+hothothott\.info\r
+163\.(com|net)\r
+ifux\.info\r
+jzups\.com\.cn\r
+longre\.com\r
+wecomesh\.com\r
+cjh120\.com\r
+cctv8168\.com\r
+meter17\.cn\r
+quntuo\.com\r
+bjjinshan\.com\r
+cccstandard\.com\r
+szlrwl\.cn\r
+deqinfy\.net\r
+ebakvqsq\.com\r
+adklnaum\.com\r
+gohzmgek\.com\r
+hypoq\.(org|info)\r
+cerbaq\.info\r
+vertyn\.info\r
+bjyyct\.com\r
+blt\.net\.cn\r
+qemlcnwg\.com\r
+hudwzsfh\.com\r
+ppyecsia\.com\r
+impactcrusher\.net\.cn\r
+hammercrushers\.com\r
+benconq\.com\r
+jawcrusher\.net\.cn\r
+raymondmill\.cn\r
+zenithcrusher\.com\r
+cnzenith\.com\r
+conecrushers\.com\.cn\r
+impactcrusher\.net\.cn\r
+beconq\.com\r
+benconq\.com\r
+crusher-cn\.com\r
+zenithcrusher\.com\r
+lemmings.dontexist\.com\r
+bjjjjgd\.cn\r
+mingshengximqm\.com\r
+shangguanhong\.net\r
+zooxtreme\.(com|net|org)\r
+beastplace\.(com|net|org)\r
+beastzone\.(com|net|org)\r
+beast-space\.(com|net|org)\r
+3vindia\.info\r
+2kool4u\.net\r
+22web\.net\r
+isgreat\.org\r
+iblogger\.org\r
+talk4fun\.net\r
+prophp\.org\r
+totalh\.com\r
+xanga\.com\r
+stonecrusher\.net\.cn\r
+vone\.net\.cn\r
+aggregate-plant\.com\r
+grindingmill\.cn\r
+huili-cn\.com\r
+globalchineseedu\.com\r
+zgxbzlw\.com\r
+wahlee\.net\r
+lilyspring\.com\r
+wetlesbiansx\.com\r
+wetindians\.net\r
+sex4uonly\.net\r
+jxpump\.com\r
+bfjxkf\.com\r
+zzdehong\.com\r
+wet-n-hairy\.net\r
+pinkshaved\.net\r
+sweetttits\.com\r
+jxpump\.com\r
+uextkhveawym\.com\r
+ghzbstszrpgo\.com\r
+qsevvccxnzlb\.com\r
+ahxxugvpswym\.com\r
+cce-china\.cn\r
+cd8545\.com\r
+travelnursingdirect\.com\r
+cone-crusher\.org\r
+chinadrtv\.com\r
+jsd-coffee\.com\r
+flolon\.com\r
+sc818\.com\r
+seo315\.net\r
+pkseo\.cn\r
+nabirbsb\.com\r
+oqholfwb\.com\r
+wjoupiyw\.com\r
+yejuntech\.com\r
+ngvvlxpwuqhh\.com\r
+opggdydlpwsx\.com\r
+jrrwpwbungrk\.com\r
+lmkjshlsejlh\.com\r
+lovewind\.cn\r
+jormabridal\.com(\.cn)?\r
+paddletotheheadwaters\.com\r
+muzica-mp3\.ro\r
+movie2b\.com\r
+(stone|jaw|impact|cone|hammer)[-]*crusher\.(org|com|net|cn)\r
+pfkf999\.com\r
+hnpjs\.cn\r
+pysz\.com\.cn\r
+dxb\.ha\.cn\r
+ganbing120\.com\.cn\r
diff --git a/BoardArea.mdwn b/BoardArea.mdwn
new file mode 100755 (executable)
index 0000000..495c2d8
--- /dev/null
@@ -0,0 +1,15 @@
+\r
+This page describes the HCoop board, its workings, its policies, and so on.\r
+\r
+[[TableOfContents]]\r
+\r
+== About the board ==\r
+\r
+ * BoardOfDirectors: The members of the board.\r
+\r
+== Policies and guidelines ==\r
+\r
+ * HcoopPolicies: Our various policies.\r
+ * HcoopGuidelines: Guidelines for communicating, being HCoop staff, and more.\r
+ * HcoopStructure: Co-op bylaws, board members, and other legal details about the cooperative.\r
+ * IrcMeetings: View official meetings that are logged.\r
diff --git a/BoardOfDirectors.mdwn b/BoardOfDirectors.mdwn
new file mode 100755 (executable)
index 0000000..0df7028
--- /dev/null
@@ -0,0 +1,7 @@
+The second board of directors for HCOOP, Inc. consists of:\r
+\r
+ *AdamChlipala, President and Treasurer\r
+ *NathanKennedy, Secretary\r
+ *DavorOcelic\r
+\r
+Please see the board's static website at http://hcoop.net/board/\r
diff --git a/CategoryOutdated.mdwn b/CategoryOutdated.mdwn
new file mode 100755 (executable)
index 0000000..7a265cb
--- /dev/null
@@ -0,0 +1,15 @@
+#format wiki\r
+#language en\r
+\r
+Some content that isn't directly relevant anymore\r
+\r
+'''List of pages in this category:'''\r
+\r
+ 1. AccountPrivileges\r
+ 1. AdminVolunteers\r
+ 1. MemberMigration\r
+ 1. OurOwnHostingFacility\r
+ 1. PaymentProcessing: Figure out how we should accept electronic payments.\r
+\r
+----\r
+CategoryCategory\r
diff --git a/CategorySystemAdministration.mdwn b/CategorySystemAdministration.mdwn
new file mode 100755 (executable)
index 0000000..a803b07
--- /dev/null
@@ -0,0 +1,11 @@
+#format wiki\r
+#language en\r
+\r
+Here is system administration information that is not directly relevant to normal users.\r
+\r
+'''List of pages in this category:'''\r
+\r
+[[FullSearch(regex:(----(-*)(\r)?\n)(.*)CategorySystemAdministration\b)]]\r
+\r
+----\r
+CategoryCategory\r
diff --git a/ChangingAdminPassword.mdwn b/ChangingAdminPassword.mdwn
new file mode 100755 (executable)
index 0000000..540df88
--- /dev/null
@@ -0,0 +1,14 @@
+This page describes how admins may change their UNIX password (which is stored in {{{/etc/shadow}}}) on the new machines without disrupting Kerberos.\r
+\r
+ 1. Run {{{\r
+grub-md5-crypt\r
+}}}\r
+ and type your password twice.  If you have GRUB installed on your home machine, you can do this there.  Otherwise, log into {{{mire.hcoop.net}}} and do it.\r
+ 1. Copy the generated hash into the clipboard.\r
+ 1. Log into the machine where you want to change your password.\r
+ 1. Run {{{\r
+EDITOR=emacs vipw -s\r
+}}}\r
+ This opens up {{{/etc/shadow}}} in {{{vi}}}, and adds a safety net in case you make an error, by refusing to apply your changes if they would cause an error.\r
+ 1. Find the entry for your username.  Replace the existing password hash for yourself.  It will be the second field.\r
+ 1. Save and quit.  {{{vipw}}} will tell you if there was an error.  If there was not an error, it will apply your changes.\r
diff --git a/ClintonEbadi.mdwn b/ClintonEbadi.mdwn
new file mode 100755 (executable)
index 0000000..e292a4a
--- /dev/null
@@ -0,0 +1,23 @@
+I am Clinton Ebadi. \r
+\r
+= Contact =\r
+ * [[MailTo(clinton at unknownlamer dot org)]] (Email)\r
+ * unknownlamer (AOL Instant Messenger)\r
+ * 41087914 (ICQ)\r
+ * [[MailTo(clinton at hcoop dot net)]] (Jabber)\r
+ * unknown_lamer on [http://freenode.net freenode] (IRC) in #hcoop\r
+ * +1 443 538 8058 (Phone, SMS preffered)\r
+\r
+= Websites =\r
+ * http://unknownlamer.org '''Personal Homepage'''\r
+ * http://lazybastard.net\r
+\r
+= Stuff I Do for HCoop =\r
+I maintain the JabberServer service. Contact me if you want a jabber account.\r
+\r
+= Something Else =\r
+\r
+I a bicycling and beer brewing anarchist who espouses a philosophy of complete pesonal freedom. I hack code in Lisp and Scheme, and working on a magical project to replace the web with something better. It shall be put on ice for a bit as I am intending to go on a several month long bicycle tour of the northeast US in the spring and summer of 2007, but I hope to return more well read and with the skills required to undertake such a large project effectively.\r
+\r
+----\r
+CategoryHomepage\r
diff --git a/ColocationPlans.mdwn b/ColocationPlans.mdwn
new file mode 100755 (executable)
index 0000000..6251900
--- /dev/null
@@ -0,0 +1,28 @@
+'''This page is outdated.  You might want to see NewServersSetup instead.'''\r
+\r
+Pretty soon we'll have more people wanting to join than we can support nicely on a single standard "dedicated server."  This page contains information and links to other pages related to the planning and details of our next architecture.\r
+\r
+= Current state of the project =\r
+\r
+Currently, we are hashing out final software and network plans for the new architecture at SystemArchitecturePlans.  To accompany this we have put together a page outlining ColocationNextSteps.\r
+\r
+During our meeting on June 24, 2006 we agreed on the following points regarding our new server configuration and the structure of HCoop:\r
+\r
+ * We decided on the pieces of hardware that we will need.  This is described in more detail on NewSystemHardware.  NewSystemHardware will also be the forum for collaboration on brands/models of hardware that will be purchased.\r
+ * Peer 1 will be the colocation provider for our next infrastructure.\r
+ * MichaelOlson and JustinLeitgeb will be system administrators after the move to the new system configuration is installed.  Currently, they will be handling issues related to the new hardware and software.\r
+ * We will reconvene on FreeNode, #hcoop at 2:00 EST next week to talk about hardware specifics based on our research.\r
+\r
+The group previously researched different hosting providers for our new infrastructure.  This information is archived on the page HistoricalColocationProvidersInformation.\r
+\r
+Overall, the goal of our project is to provide an architecture that will scale with the growing member base of Hcoop, Inc.  Please see the page SystemArchitecturePlans to find out how we are planning to construct our servers to meet the needs of our growing hosting coop.  Overall, the new system architecture has been planned to address the problems with our current system infrastructure detailed at the wiki page CurrentSystemGripes.\r
+\r
+Please feel free to help us grow by modifying any of these wiki pages.\r
+\r
+= Members most active in new system construction =\r
+\r
+The following Hcoop, Inc. members have expressed an interest in helping with the new server infrastructure on the mailing list:\r
+\r
+ * KarlChen\r
+ * ShaunEmpie\r
+ * JustinLeitgeb\r
diff --git a/ColocationPlansServiceProviders.mdwn b/ColocationPlansServiceProviders.mdwn
new file mode 100755 (executable)
index 0000000..e058156
--- /dev/null
@@ -0,0 +1,47 @@
+= Possible Colocation Service Providers =\r
+\r
+Currently, the Hcoop Inc. group planning the next server architecture is compiling a list of companies that we will contact with our quote request letter, detailed on the page ProspectiveHostsQuoteRequest.  All members are invited to submit new companies to the pool that will be considered for hosting our next architecture by the deadline of April 14, 2006.  You may also petition to remove hosting companies from consideration by that date.\r
+\r
+In order to remove or add companies from consideration, you may modify the list of companies below.  If for any reason you would prefer not to modify the wiki page, email JustinLeitgeb at justin@phq.org and he will modify the wiki page for you.\r
+\r
+Also, JustinLeitgeb will be the default representative from the group to send out the quote requests, unless anyone else volunteers.  If certain members would like to contact any of the hosting companies below, perhaps to maintain continuity of a relationship, add a comment stating this next to the name of the appropriate company below.\r
+\r
+Once we begin to receive requests from the companies concerned, the results will be posted for member review on the page ServiceProvidersReview.  The hcoop discussion email list will be mailed to indicate when results are ready for review as we lead up to a vote.\r
+\r
+== List of Providers we will send our Quote Request to ==\r
+\r
+This is the list of providers, in alphabetical order, that we will send our quote request to, once the letter on ColocationPlans has been finalized.  All will be contacted by JustinLeitgeb unless noted otherwise to the right of the company name.\r
+\r
+''Sat Apr  8 10:49:16 EDT 2006 Update: JustinLeitgeb sent quote requests to all of the organizations listed below, except for the one that NathanKennedy contacted previously.  Please feel free to modify this list by the April 14 deadline, and any provider that is appended to the list will have a quote request sent to them.  Otherwise, be patient for a few days and you will see the wiki page ColocationProvidersEvaluation populated with a summary of responses that we have received from the providers in contention for our colo needs.''\r
+\r
+ 1. [http://www.gaiahost.coop/ GAIA Host]\r
+ 2. [http://www.he.net/ he.net] Large colo provider with two? data centers and a solid reputation.\r
+ 3. [http://www.inreach.com/ InReach]\r
+ 4. [http://www.peer1.net/ Peer1] Another large colo provider, with about 5 data centers.  Perhaps slightly larger than he.net.\r
+ 5. [http://seaccp.org/ The Seattle Community Colo Project], which is sponsored by [http://www.riseup.net/ riseup.net].  \r
+    \r
+      - I have sent a quote request to Riseup.net --NathanKennedy \r
+\r
+      - I would like to consider the [http://nyccp.net/ New York Community Colo Project], which is a branch of this project that may be closer to a larger portion of member base.\r
+\r
+ 6. [http://www.simpli.biz/ Simpli] (my personal favorite so far --AdamChlipala)\r
+ 7. [http://www.switchanddata.com/index.asp Switch and Data] has many carrier-neutral data centers in New York that I would like to check for pricing.\r
+\r
+== Service providers no longer in contention, unless members have valid reasons for including them in the pool ==\r
+\r
+ * [http://www.monkeybrains.net/ Monkey Brains]\r
+  This is a one-man shop renting cabinets from a real datacenter.  I don't think this guy is capable of providing the support we need.  Very disturbing FAQ line:\r
+\r
+  '''Is there a hidden bandwidth limit?'''\r
+\r
+  ''I haven't had any 'heavy' users, so the limits have yet to be tested.''\r
+\r
+  In other words, he's not much bigger than we want to be, soon. --NathanKennedy\r
+\r
+  ''(FYI - I think that most of the colo providers we are looking at here are small companies or individuals renting from data centers.  Even Simpli still just rents two "cages" or rooms from a larger data center.  The only exceptions to this might be bigger shops like [http://www.he.net he.net] that have their own data centers.  -- JustinLeitgeb)''\r
+\r
+== See Also ==\r
+\r
+Pages that are related to this are ColocationPlans, which is the main page for discussion of the new architecture, and SystemArchitecturePlans, which provides details and diagrams on hardware and software configuration issues related to the new hcoop network.\r
+\r
+Finally, OlderColocationProviderInfo holds page of historical interest based on previous inquiries.  I would like to consider this page deprecated as rates may have changed since we initially contacted these companies.\r
diff --git a/ColocationProvidersEvaluation.mdwn b/ColocationProvidersEvaluation.mdwn
new file mode 100755 (executable)
index 0000000..be651b7
--- /dev/null
@@ -0,0 +1,75 @@
+= Evaluation of Potential Colocation Providers =\r
+Below are the service providers that Hcoop, Inc. is considering for our future hosting needs, along with available information about pricing and infrastructure. Some providers that are no longer being considered for our hosting needs are listed at the page PreviouslyConsideredColocationProviders.\r
+\r
+== Peer 1 ==\r
+http://www.peer1.net\r
+\r
+Peer 1 offers a quarter cabinet for 10U. A fast ethernet port with a 5MB/s connection is provided. Monthly costs for the space will be $750, and there would be a $400 initial charge for installation of a rack/cabinet.  A 10 amp circuit is provided.\r
+\r
+Peer 1 does not sell hardware.\r
+\r
+Their response to our request as a PDF: attachment:Peer1.QuarterCab.Proposal.pdf\r
+\r
+ . It looks pretty clear that Peer1 is by far the highest quality provider on our list, and I was impressed by their letter and quote. The bar to entry is also high; $750 a month and 10U to utilize. On the other hand it is tempting; PLENTY of room for growth probably for years to come, a first-class network (450 direct tier one peers, 1-ms maximum intercity latency, 4-ms maximum intercity latency delivery to any tier one peer). We would NOT be having the kind of network issues we were plagued with in the past with Interserver. It is definitely a good value, but it an awfully big step up from where we are now--we don't want to waste member resources if the cabinet went vastly underutilized for long periods of time; we would need a major membership drive or some really big clients. Another advantage is the datacenter is in Manhattan and provides secure unescorted access. I could personally be there to fix, install, or upgrade stuff from my house within an hour. Of course if we are thinking beyond two years we can't just count on me, since who knows what I will be doing then, and of course on-site response can't be replaced in a lot of situations, but having an alternative to a $150/hour remote hands fee for most situations would be nice. NathanKennedy Another thing, I seriously think we should consider marketing dedicated servers or collocation ourselves. This would be another valuable service we could provide, which would make it much easier to fill larger cabinets and allow even our $5/mo. members to benefit from the best possible facilities. NathanKennedy\r
+\r
+== He.net ==\r
+http://www.he.net/\r
+\r
+If we can stay under 1MB/s, the rate for bandwidth plus up to 7U is $300/month.\r
+\r
+He.net does not sell hardware.\r
+\r
+Their response to our request as a PDF: attachment:he_colo.pdf\r
+\r
+ . HE looks great. I have heard great things about them, and this is definitely a good deal for what it is. I think they come a close second after Peer1 for quality. NathanKennedy\r
+ . .\r
+ . I ran my Artelope web site off a basic user account on HE for 5 or 6 years. I was always satisfied with their service, both in terms of uptime and in terms of helping me out with a human being when I had a problem. I closed my account and came here because I felt their price was too much to pay for a small site like mine. JoshGoldfoot\r
+\r
+== Switch and Data ==\r
+http://www.switchanddata.com/\r
+\r
+Switch and Data is carrier-neutral, meaning that they would give us space, and we would buy bandwidth from another provider (or multiple providers, eventually). I got quotes for three locations that Switch and Data has in NYC. The reason that the 65 Broadway location is slightly less expensive than the other two locations is because it has connections to fewer providers available compared to the other locations in NYC. If we can live with the providers\r
+\r
+Bundled Half Cabinet:\r
+\r
+Includes: (1) Half Locking Cabinet/Open Face Rack, 10 AMPS AC Power, (1) Cross Connect (Media Agnostic)\r
+\r
+65 Broadway: $625.00 Monthly Recurring Cost\r
+\r
+111 8th & 60 Hudson St: $775.00 Monthly Recurring Cost\r
+\r
+The Switch and Data representative also gave me site specifications for their three locations in NYC.\r
+\r
+ * attachment:Site_Spec_NYC_111_8th_.pdf\r
+ * attachment:Site_Spec_NYC_60_Hudson_8.01.05.pdf\r
+ * attachment:Site_Spec_NYC_65_Broadway_4.22.05.pdf\r
+== Simpli ==\r
+Justin had disqualified Simpli before, but I was surprised at their nonresponsiveness, because I'd had some nice e-mail conversations with the founder in the past. So, I e-mailed her asking what was up and she got back to us in a few days. She said that she hadn't replied before because Simpli is currently figuring out the details of expanding into some new hosting space and that made some pricing issues uncertain. I don't think it was acceptable to give us no reply because of this, but I at least have reason to believe that these are good people at Simpli and that we should consider them, given their much lower rates for colocation at our current modest needs. --AdamChlipala\r
+\r
+I think that any provider which does not respond in a timely manner should be removed from consideration, without exception.  This was a warning sign with InterServer that we failed to heed.  --MichaelOlson\r
+\r
+They would provide the hardware with 1-year parts and labor warranties:\r
+\r
+{{{\r
+Web server (each): $964.60 (includes 3Ware 2-port Serial ATA hardware RAID\r
+card; subtract $150 if you would prefer software RAID)\r
+- Uses 2x80GB Western Digital SATA drives.\r
+\r
+Database server: $2700 with 500GB drives\r
+$2180 with 400GB drives\r
+(includes 3Ware 4-port Serial ATA hardware RAID card; subtract $380 if you\r
+would prefer software RAID)\r
+\r
+Both configurations are 1U. Each server comes with a 1-year parts and labor\r
+warranty. After the year, we can replace parts for the part cost + labor\r
+(which is $100/hour) or you can buy the parts yourself through us or through\r
+any vendor and replace it yourself by scheduling a datacenter visit.\r
+\r
+Your total colocation price would be $70/month for 2U of space (assuming 2\r
+servers) plus whatever bandwidth costs you would have.\r
+\r
+Serial console service is $20/month per server. We don't currently have an\r
+offsite backup service such as the one you are looking for, but we will in\r
+the next 2-3 months as we open a second location.\r
+}}}\r
+This leaves out some details of bandwidth pricing, which can be found at http://www.simpli.biz/colocation.php.\r
diff --git a/ColocationProvidersEvaluation/Peer1.QuarterCab.Proposal.pdf b/ColocationProvidersEvaluation/Peer1.QuarterCab.Proposal.pdf
new file mode 100755 (executable)
index 0000000..5a13158
Binary files /dev/null and b/ColocationProvidersEvaluation/Peer1.QuarterCab.Proposal.pdf differ
diff --git a/ColocationProvidersEvaluation/Site_Spec_NYC_111_8th_.pdf b/ColocationProvidersEvaluation/Site_Spec_NYC_111_8th_.pdf
new file mode 100755 (executable)
index 0000000..071726c
Binary files /dev/null and b/ColocationProvidersEvaluation/Site_Spec_NYC_111_8th_.pdf differ
diff --git a/ColocationProvidersEvaluation/Site_Spec_NYC_60_Hudson_8.01.05.pdf b/ColocationProvidersEvaluation/Site_Spec_NYC_60_Hudson_8.01.05.pdf
new file mode 100755 (executable)
index 0000000..9e7f4ba
Binary files /dev/null and b/ColocationProvidersEvaluation/Site_Spec_NYC_60_Hudson_8.01.05.pdf differ
diff --git a/ColocationProvidersEvaluation/Site_Spec_NYC_65_Broadway_4.22.05.pdf b/ColocationProvidersEvaluation/Site_Spec_NYC_65_Broadway_4.22.05.pdf
new file mode 100755 (executable)
index 0000000..6515443
Binary files /dev/null and b/ColocationProvidersEvaluation/Site_Spec_NYC_65_Broadway_4.22.05.pdf differ
diff --git a/ColocationProvidersEvaluation/he_colo.pdf b/ColocationProvidersEvaluation/he_colo.pdf
new file mode 100755 (executable)
index 0000000..403f867
Binary files /dev/null and b/ColocationProvidersEvaluation/he_colo.pdf differ
diff --git a/ContactHcoop.mdwn b/ContactHcoop.mdwn
new file mode 100755 (executable)
index 0000000..733d81f
--- /dev/null
@@ -0,0 +1,8 @@
+Here are various methods to get in touch with Hcoop.\r
+[[TableOfContents]]\r
+== Members and Non-Members ==\r
+ * IrcChannel: Join our "chat" channel for 24/7 discussion.\r
+ * abuse@hcoop.net: for DMCA violations and other complaints about the use of our servers.\r
+\r
+== Members ==\r
+ * [http://members2.hcoop.net Portal]: for taking care of common administrative tasks on HCoop's new systems.\r
diff --git a/CurrentSystemGripes.mdwn b/CurrentSystemGripes.mdwn
new file mode 100755 (executable)
index 0000000..4740145
--- /dev/null
@@ -0,0 +1,18 @@
+The planning of a new system architecture at Hcoop, Inc. is motivated by a set of concerns with the current infrastructure.  This page details these concerns in order to improve ourselves in Hcoop, Inc. v. 2.\r
+\r
+= What deficiencies in our current set-up do we want to correct? =\r
+\r
+ * If one machine goes down, then our services will go down, too.\r
+ * No way for members to buy arbitrary amounts of disk space\r
+ * No automated off-machine backups\r
+   * ''Until we get new machine(s) set up, would it be possible to rsync the server contents off-site?  I would be willing to contribute space on my linux workstation to this purpose... or do bandwidth constraints make this unreasonable?  I imagine that our content is relatively static so that might make this possible.'' --JustinLeitgeb\r
+ * We don't have a human administration set-up where everyone with an admin job:\r
+   * Feels compensated in proportion to the work he does\r
+   * Is accessible on a predictable schedule\r
+ * PHP scripts have a time limit.  This created problems with Squirrel Mail:\r
+   * It is often impossible to attach large files or download large attachments.\r
+   * When Fyodor is running its backup, the system becomes slow.  Sometimes folder listings don't display because the php script times out before the folder is read from the imapd.\r
+      * ''Can we correct this by "nicing" the backup process?  Might be a quick fix.''  --JustinLeitgeb\r
+      * ''Already done, unfortunately.'' --AdamChlipala\r
+ * Downloads from www.hcoop.net/~username are not counted toward the user's bandwidth usage\r
+   * ''Actually, they are counted as much as any other web activity, though we don't have any formal idea of "bandwidth quota" ATM.  Do you have any information to indicate otherwise?'' --AdamChlipala\r
diff --git a/DSAvsRSA.mdwn b/DSAvsRSA.mdwn
new file mode 100755 (executable)
index 0000000..c51554b
--- /dev/null
@@ -0,0 +1,66 @@
+== Choosing DSA (Digital Signature Algorithm) or RSA (Rivest, Shamir, Adleman) ==\r
+\r
+=== For the purposes of SSH Authentication ===\r
+\r
+The text below was copied from various referenced websites.  Conclusions are shown at the top, with context below.\r
+\r
+From [http://ac.umfk.maine.edu/~romeo/?p=69]:\r
+\r
+Conclusion: \r
+{{{ \r
+I always use 1280-bit DSA key pairs for SSH authentication, i.e. the keys are generated with “ssh-keygen -t dsa -b 1280″ \r
+}}}\r
+\r
+''Note: my version of openssh limits DSA keys to 1024 bits.'' -- RickHull\r
+\r
+Context:\r
+{{{\r
+For RSA, a 1536-bit key pair is recommended now for most uses e.g.\r
+SSH public-key authentication, but longer keys shall be used for signing\r
+documents that should not be forged even after many years.\r
+Nevertheless, most Web sites that use HTTPS, have only 1024-bit RSA key\r
+pairs, those are still reasonably secure for now, but in a few years\r
+they will become breakable. An 1536-bit RSA public/private key pair\r
+requires about the same time for breaking as a 90-bit key of a\r
+secret-key algorithm. Nonetheless, in reality 1536-bit RSA is much more\r
+secure than 90-bit, because either a huge memory (much beyond what is\r
+currently possible) is needed for the computation or, if the memory is\r
+unavailable, the computation becomes much slower, so the RSA key will be\r
+equivalent in strength with a longer secret key.\r
+\r
+RSA is more appropriate for signing certificates, because it can be\r
+verified faster, but for the authentication of the initial message\r
+exchange in network connection establishments, like in IPsec, TLS/SSL or\r
+SSH, DSA can be better, because there are an equal number of signing and\r
+verification operations, so only the sum of the execution times for\r
+signing and verification matters. DSA has the advantage that it has the\r
+same security as RSA at a shorter key length, i.e. 1280-bit DSA has\r
+about the same security as 1536-bit RSA. For that reason I always use\r
+1280-bit DSA key pairs for SSH authentication, i.e. the keys are\r
+generated with “ssh-keygen -t dsa -b 1280″, both for the server host key\r
+and for the users’ workstations.\r
+\r
+DSA has a disadvantage that is not a property of the algorithm but\r
+only of its implementation in OpenSSL, OpenSSH and other common\r
+programs, it has several parameters that must be increased\r
+simultaneously for better security, but applications like ssh-keygen let\r
+you specify only the key length and they keep the other parameters\r
+unchanged. Because of that it is absolutely useless to increase the DSA\r
+key length beyond 1280-bit, because the security is not improven. On\r
+the other hand, with RSA you can specify 2048-bit, 3072-bit or longer\r
+key pairs, if you so desire. \r
+}}}\r
+\r
+From [http://www.chiark.greenend.org.uk/~sgtatham/putty/faq.html#faq-dsa PuTTY FAQ]:\r
+\r
+Conclusion: \r
+{{{ \r
+we still recommend you use RSA instead \r
+}}}\r
+\r
+Context:\r
+{{{\r
+DSA has a major weakness if badly implemented: it relies on a random number generator to far too great an extent. If the random number generator produces a number an attacker can predict, the DSA private key is exposed - meaning that the attacker can log in as you on all systems that accept that key.\r
+\r
+The PuTTY policy changed because the developers were informed of ways to implement DSA which do not suffer nearly as badly from this weakness, and indeed which don't need to rely on random numbers at all. For this reason we now believe PuTTY's DSA implementation is probably OK. However, if you have the choice, we still recommend you use RSA instead. \r
+}}}\r
diff --git a/DaemonAdmin.mdwn b/DaemonAdmin.mdwn
new file mode 100755 (executable)
index 0000000..3039ac3
--- /dev/null
@@ -0,0 +1,7 @@
+We've recorded some special instructions, hints, etc., for these daemons on our new servers hosted at Peer 1:\r
+\r
+ * ["DaemonAdmin/Apache"]\r
+ * ["DaemonAdmin/Bind"]\r
+ * ["DaemonAdmin/LDAP"]\r
+ * ["DaemonAdmin/MySQL"]\r
+ * ["DaemonAdmin/PostgreSQL"]\r
diff --git a/DaemonAdmin/Apache.mdwn b/DaemonAdmin/Apache.mdwn
new file mode 100755 (executable)
index 0000000..f497c82
--- /dev/null
@@ -0,0 +1,35 @@
+\r
+This page describes how to deal with Apache issues.  It is intended for use by HCoop administrators.\r
+\r
+[[TableOfContents]]\r
+\r
+== Dealing with too many apache processes ==\r
+\r
+Sometimes on our old machines (fyodor), too many apache processes are run, and they consume all available memory.  In case this same problem is ever experienced on the new machines, it could be handy to know how to do this recovery procedure.\r
+\r
+This problem can be diagnosed by running\r
+\r
+{{{\r
+free\r
+}}}\r
+\r
+to check the amount of memory being used, and\r
+\r
+{{{\r
+ps -e | grep [a]pache2 | wc -l\r
+}}}\r
+\r
+to see how many Apache processes are running.  If there are around 100 processes or more running, and we have less than 60MB memory free, and are using more than 50% of swap, we need to continue with the "apache2 draining" procedure listed below.\r
+\r
+To get rid of apache2 processes, do the following.\r
+\r
+{{{\r
+iptables -I INPUT 1 --proto tcp --dport 80 -j REJECT\r
+/etc/init.d/apache2 stop  # wait about 5 minutes, then hit Ctrl+c a few times to stop\r
+killall apache2\r
+killall -9 apache2\r
+/etc/init.d/apache2 start\r
+iptables -D INPUT 1\r
+}}}\r
+\r
+Now check to see whether member websites can be browsed.  Also, check to see whether the amount of free memory has increased substantially.\r
diff --git a/DaemonAdmin/Bind.mdwn b/DaemonAdmin/Bind.mdwn
new file mode 100755 (executable)
index 0000000..1d96683
--- /dev/null
@@ -0,0 +1,16 @@
+\r
+[[TableOfContents]]\r
+\r
+= Filesystem layout =\r
+\r
+On both deleuze and mire, BIND data lives in `/etc/bind`.  This directory is seeded with the default files from the Debian `bind9` package.  Additionally, we add a `zones` subdirectory.\r
+\r
+DomTool periodically deposits `/etc/bind/named.conf.local`, listing all of our hosted DNS zones and their master/slave statuses and configuration.  DomTool also populates `/etc/bind/zones` with zonefiles referenced by `/etc/bind/named.conf.local`.\r
+\r
+== Permissions ==\r
+\r
+`/etc/bind/zones` should be owned by user `bind`, since BIND seems to like creating temporary files there.  I've only yet seen this matter during updating of slave zone information.\r
+\r
+= Adding new hcoop subdomains =\r
+\r
+This is '''not''' done by editing anything in {{{/etc/bind}}}.  Instead, see ["DomTool/AdminProcedures"].\r
diff --git a/DaemonAdmin/LDAP.mdwn b/DaemonAdmin/LDAP.mdwn
new file mode 100755 (executable)
index 0000000..b6ac0b3
--- /dev/null
@@ -0,0 +1,4 @@
+\r
+ * To edit LDAP database from a GUI tool, use ''gq'' program\r
+ * To connect to hcoop's ldap server using ''gq'', create a SSH tunnel: ''' ssh -f -N -L 389:localhost:389 USERNAME@deleuze.hcoop.net''', and then connect to ''localhost:389'' in ''gq''.\r
+ * For the description of the actual authentication scheme, see AuthenticationScheme.\r
diff --git a/DaemonAdmin/MySQL.mdwn b/DaemonAdmin/MySQL.mdwn
new file mode 100755 (executable)
index 0000000..ec2d3eb
--- /dev/null
@@ -0,0 +1,82 @@
+Because we wanted to have version 5 of MySQL running on our stable server, we used the [http://dotdeb.org] package.  For this reason there should be mirrors from dotdeb.org listed in the file ''/etc/apt/sources.list'' on deleuze.\r
+\r
+= Configuration details =\r
+\r
+my.cnf file modified to leave a port open over the network, default is local pipe only.\r
+\r
+= Progress =\r
+\r
+As of Sat Jan  6 12:29:23 EST 2007, the MySQL 5.0 daemon and client libraries have been installed on deleuze.  I also installed the mysql-common and mysql-client 5.0 packages on mire which should will allow for users to connect back to the main DB server.\r
+\r
+= To Do =\r
+\r
+The new dbtool implemented as part of DomTool can now be used to create MySQL users and databases and the associated AFS directories. We still need to figure out how to allow users to drop tables from their databases without letting them drop the databases themselves. Since users retain permissions on a database even after it's dropped, the user could drop his database and recreate it on the partition where /var/lib/mysql lives, instead of in AFS.\r
+\r
+We also need to work out exactly what hostname mask to use in creating users and granting them privileges.\r
+\r
+= Steps to perform =\r
+\r
+== Logical steps ==\r
+\r
+ 1. Create user's database volume in AFS, if one isn't there already\r
+ 1. Create directory structure with proper permission within the AFS volume (the sole existence of the directory is enough for MySQL to consider it a database, even if just an empty one). NOTE: If we stick to existing behavior on fyodor, requested database name should be prefixed with USERNAME_ .\r
+ 1. Create a symbolic link in /var/lib/mysql/ that points to the database\r
+ 1. Grant the user rights on the new DB\r
+\r
+And, in terms of command line, the steps are:\r
+\r
+== Initialize DB space for any DB ==\r
+\r
+You need to perform this as any user who has AFS admin permissions:\r
+\r
+ 1. $dir = /afs/hcoop.net/common/.databases/'''USERNAME'''\r
+\r
+'''If  vos examine db.USER  says there's no volume created:'''\r
+ 1. vos create  -server afs -partition a -name db.'''USERNAME''' -maxquota 5000\r
+\r
+\r
+'''If db.USER volume is there, but $dir is not present (volume isn't mounted):'''\r
+ 1. fs mkmount -dir /afs/hcoop.net/common/.databases/'''USERNAME''' -vol db.'''USERNAME''' -rw\r
+ 1. vos release common.databases\r
+\r
+'''And this can be done always:'''\r
+ 1. fs setacl -dir $dir -acl databases l\r
+ 1. fs setacl -dir $dir -acl system:backup rl\r
+\r
+\r
+== Database creation routine when the db space has been initialized ==\r
+\r
+You need to perform this as any user who has AFS admin permissions:\r
+\r
+ 1. $dir = /afs/hcoop.net/common/databases/'''USERNAME'''/mysql\r
+ 1. mkdir -p $dir\r
+ 1. fs setacl -dir $dir -acl mysql lid\r
+ 1. fs setacl -dir $dir -acl databases none    # (keep out other databases, just in case)\r
+ 1. fs setacl -dir $dir -acl system:backup rl  # (should be inherited from parent dir)\r
+ 1. sudo mkdir $dir/'''DBNAME''' || exit  # (Must not exist)\r
+ 1. sudo chown mysql:mysql $dir/'''DBNAME'''\r
+ 1. sudo chmod 770 $dir/'''DBNAME''' # (Just for visual impression)\r
+ 1. sudo ln -sf $dir/'''DBNAME''' /var/lib/mysql/'''DBNAME'''\r
+ 1. fs setacl -dir $dir/'''DBNAME'''/ -acl mysql all\r
+\r
+Now, about users and granting permissions to the database, I would like to see users being able create new users\r
+and passwords and their privileges (to their databases) themselves. This would allow fine-grained tuning\r
+of what service uses which DB username/pw, and what access rights it has. Maybe a list of users/passwords,\r
+or an appropriate support ticket would be cool.\r
+\r
+So anyway, the procedure for creating a user and giving privileges, executed on behalf of the admin user\r
+(domtool2), which can be specified as   '''sudo -H mysql -e "<COMMAND HERE>" mysql''':\r
+\r
+ 1. CREATE USER ''''USERNAME''''@''''HOSTNAME'''' IDENTIFIED BY ''''PASSWORD'''';\r
+ 1. GRANT SELECT,INSERT,UPDATE,DELETE,INDEX,ALTER,CREATE VIEW,SHOW VIEW,GRANT OPTION ON   '''DBNAME.*'''   TO '''USERNAME'''@'%.hcoop.net';\r
+ 1. FLUSH PRIVILEGES;\r
+\r
+(Thing to note here: Wildcard '%' can be used in hostname part, for things like '%.hcoop.net'.)\r
+\r
+\r
+There are two other things related to users, one is changing password and the other is deleting users. These simply map to\r
+mysql SET PASSWORD and DROP USER commands, if you go to implement them.\r
+\r
+And one last thing; mysql is listening both on localhost and network interfaces (deleuze external IP). Maybe we want to restrict\r
+it to run on just one of them. Or if not, if it will run on both, then the access rule ( USERNAME@'%.hcoop.net' ) has to be duplicated\r
+in a way (for USERNAME@localhost), OR the users will always have to specify mysql host "deleuze" instead of "localhost". Another solution to this is that we don't try to be clever at all, but simply let users make sure the hostname part in their support ticket will match the interface they'll be using to connect.\r
diff --git a/DaemonAdmin/PostgreSQL.mdwn b/DaemonAdmin/PostgreSQL.mdwn
new file mode 100755 (executable)
index 0000000..ac7f528
--- /dev/null
@@ -0,0 +1,20 @@
+See MySQL for list of things that have to be done for any database\r
+(both MySQL and Postgres).\r
+\r
+= Postgres-specific setup =\r
+\r
+   1. $dir = /afs/hcoop.net/common/databases/USERNAME/postgres\r
+\r
+If $dir does NOT exist:\r
+\r
+   1. sudo -u postgres psql -c "CREATE USER '''USERNAME'''" template1\r
+   1. mkdir -p $dir\r
+   1. chown postgres:postgres "$dir"\r
+   1. fs setacl -dir $dir -acl postgres write\r
+   1. fs setacl -dir $dir -acl databases none # (keep out other databases, just in case)\r
+   1. fs setacl -dir $dir -acl system:backup rl # (should be inherited from parent dir)\r
+   1. sudo -u postgres psql -c "CREATE TABLESPACE user_'''USERNAME''' OWNER '''USERNAME''' LOCATION '$dir'" template1\r
+\r
+When it does, go directly to database creation step:\r
+\r
+   1. sudo -u postgres createdb -O '''USERNAME''' -D user_'''USERNAME''' '''DBNAME'''\r
diff --git a/DaemonFileSecurity.mdwn b/DaemonFileSecurity.mdwn
new file mode 100755 (executable)
index 0000000..f9fc232
--- /dev/null
@@ -0,0 +1,47 @@
+Part of the reason hcoop is so swell is that we (try to) make it easy for members to take advantage of shared daemons.  Of course, it's important that no one can take advantage of this to interfere with the services a daemon provides for others.  This page focuses on how we do this for the particular case of data and configuration files associated with particular daemons but conceptually belonging to particular users.\r
+\r
+There are two main things to watch out for:\r
+ * One user shouldn't be able to exhaust available disk space through his configuration of a daemon. This would include getting a system user, e.g. the one that runs a particular database server, to exceed its disk quota or fill up the partition its data files live on. To achieve this goal, a common theme is that we try to keep all files with the potential to be large on `/home` and make sure that they belong to the group of the human user who we consider responsible for them. With this, we can use group quotas as single-point limits on disk usage.\r
+ * Through direct filesystem access, users shouldn't be able to break any daemons with respect to the services that those daemons provide for other users, though we don't care if users can hose their own services like this.\r
+\r
+= Static web sites =\r
+\r
+This one's easy.  Users manage their own files and just need to make them readable by `www-data`, the Apache user.\r
+\r
+= domtool configuration files =\r
+\r
+Individual domain directories are basically extensions of users' home directories, permissions-wise, so again there are no problems.\r
+\r
+= Mailboxes =\r
+\r
+Users are given ownership of both their primary mailboxes (`~/Maildir`) and virtual mailboxes (`/home/vmail/<domain>/<name>`).  We're assuming that Exim and Courier IMAP are robust enough that errors in these mailboxes won't prevent delivery of mail to other mailboxes or prevent others from checking their mail.\r
+\r
+= Mailing lists =\r
+\r
+We modify the default Mailman set-up in the following ways:\r
+\r
+ * Symlink `/var/lib/mailman/[archives|lists]` to `/home/mailman/[archives|lists]`, where the real action is.\r
+ * For a mailing list `mylist@mydom.com` owned by user `me`, we create it by running `/usr/local/bin/listnew mylist mydom.com me somepasswd`, which runs the following for each value of `F` in `/home/mailman/lists/mylist`, `/home/mailman/archives/private/mylist`, and `/home/mailman/archives/private/mylist.mbox`:\r
+\r
+{{{chmod -R g+s F\r
+chmod -R g-rwx F\r
+chmod -R u-s F\r
+chown -R list.me F}}}\r
+\r
+   In other words, `list`, the Mailman user, owns the files. They have the human user's group, but this group is given no more permissions than the rest of the world gets. It's only there as a marker for `/home` group quotas. The directories are setgid, so that new files created belong to the human user's group.\r
+ * Change the Mailman CGI scripts in `/usr/lib/cgi-bin/mailman` to be owned by `list.list` and to be setuid instead of setgid. These scripts already cry bloody murder if run by anyone but `www-data`, so this use of setuid should be secure. They let the CGI scripts run as the Mailman user itself, since belonging only to Mailman's group is no longer enough to access the list data.\r
+\r
+= SpamAssassin training =\r
+\r
+Everyone has write access to the shared folders where misclassified spam and ham should be deposited.  This is definitely a security problem if someone wants to train Spam``Assassin to mark legitimate and important messages as spam to harrass other users.  Also, by copying files directly instead of going through IMAP, users may be able to screw up the folders in some way that impacts others.\r
+\r
+= MySQL databases =\r
+\r
+The databases of user `me` live in `/home/mysql/me_*`.  Each of these directories is owned by `mysql.me` and is symlinked from the usual MySQL database location.  There are no write permissions for the group, so `me` can't modify the database directly in an effort to confuse or crash MySQL; and, of course, all database files are counted towards `me`'s group quota.\r
+\r
+= PostgreSQL databases =\r
+\r
+The databases of user `me` live in `/home/postgres/me/`. We use the new PostgreSQL's "tablespace" mechanism to make this more elegant than the MySQL set-up.  Tablespaces are named containers for databases that are associated with particular roots in the filesystem.  We give each user his own tablespace, with the usual ownership by his group, setgid, and no group permissions. `me` can't modify the database directly in an effort to confuse or crash Postgres; and, of course, all database files are counted towards `me`'s group quota.\r
+\r
+----\r
+CategorySystemAdministration\r
diff --git a/DavidBettis.mdwn b/DavidBettis.mdwn
new file mode 100755 (executable)
index 0000000..b48d025
--- /dev/null
@@ -0,0 +1,3 @@
+Founding member and concerned citizen.\r
+\r
+http://enthalpy.net/\r
diff --git a/DavorOcelic.mdwn b/DavorOcelic.mdwn
new file mode 100755 (executable)
index 0000000..9c84994
--- /dev/null
@@ -0,0 +1,59 @@
+DavorOcelic, HCOOP Inc. system administrator and Board of Directors member.\r
+\r
+= System administrator position =\r
+\r
+One year ago\r
+ * we were still using our now-old server (fyodor.hcoop.net)\r
+ * we were a little more than half the current size (currently: 110 members)\r
+ * more of us were visiting #hcoop channel at the FreeNode IRC network (irc.gnu.org server, for example)\r
+ * more manual user-to-admin communication was required\r
+\r
+Today, things are looking different. We have a new infrastructure that will be deployed shortly\r
+ * the 2 new servers + old Abulafia (hopefully with increased automation and security infrastructure)\r
+ * a nice member base (kind greeting to everyone who joined!)\r
+ * an extraordinary members portal ([http://members.hcoop.net/] - all Domtool and Portal fame richly deserved by AdamChlipala), and this new wiki ([http://wiki.hcoop.net/])\r
+\r
+As far as our current technology and my system administrator position at HCOOP are concerned, in 2007 I plan to:\r
+ * continue with the current, usual system administration tasks\r
+ * improve on the security infrastructure\r
+ * develop a global (authentication and other) infrastructure for all HCoop servers\r
+ * as always, help with any tasks that pop up\r
+\r
+As mentioned, we are working on a new HCoop infrastructure. The areas I work on can be seen on the TaskDistribution page.\r
+\r
+'''I would like to thank Justin Leitgeb, Ray Racine and Shaun Empie for valuable hardware donations that made the next round of HCoop expansion much easier in all aspects! See NewSystemHardware.'''\r
+\r
+= Board of Directors position (2007) =\r
+\r
+I should also give you a word on the nature of the Board of Directors position.\r
+HCoop is democratic in its roots, thanks to the original principles set (and rigorously conducted) by Adam Chlipala. While AdamChlipala is (and will probably always be ;) "The HCoop Founder", it's important to understand that Adam is not making decisions single-handedly, especially since we became a legal and officially recognized organization in all aspects (HCOOP, Inc.). Instead, the power is held within the member base, and ultimately within the Board of Directors (read our HcoopBylaws page).\r
+\r
+So the Board of Directors (BoD) position has a few specifics:\r
+ * the number of directors is very small (only three of all members, as you see. Although with plans to increase that number to five)\r
+ * the position requires combination of both management and technical abilities\r
+ * each directors is worth a whole 33.3%, and two-thirds of the board can take immediate action\r
+ * the number of directors will not grow linearly with the number of HCoop members\r
+\r
+For the above, it is important that you pay close attention to the Board being a "good balance of skills, geographic locations, and personalities" (as NathanKennedy nicely put it).\r
+\r
+Finally, there is another part of Nathan's previous-year platform that I would like to quote:\r
+\r
+"I hope you will re-elect the three current members of the board (Adam Chlipala, Nathan Kennedy, and Davor Ocelic).\r
+I believe that together we can continue to bring the membership together to create a service that gets better all the time."\r
+\r
+Thank you all,\r
+\r
+Davor Ocelic\r
+\r
+= Board of Directors position (2006) =\r
+\r
+I would like to thank everyone who voted for me on our first BoD HCOOP elections (see ["Election2006"]).\r
+\r
+= Board of Directors position (2005) =\r
+\r
+I would like to thank everyone who voted for me on our first BoD HCOOP elections (see ["Election2005"]).\r
+\r
+Close to what I initially predicted, our first year was marked mostly by advances in the system setup.\r
+On a parallel front, NathanKennedy was working on issues related to our legal status (see  [http://hcoop.net/board/]).\r
+\r
+Few members-related issues did pop up, but nothing that would require the Board to meet outside of the scheduled meetings.\r
diff --git a/DefaultFrontPage.mdwn b/DefaultFrontPage.mdwn
new file mode 100755 (executable)
index 0000000..b28bfd6
--- /dev/null
@@ -0,0 +1,26 @@
+#format wiki\r
+#language en\r
+#pragma section-numbers off\r
+= WikiName Wiki =\r
+\r
+What is this wiki about?\r
+\r
+Interesting starting points:\r
+ * RecentChanges: see where people are currently working\r
+ * WikiSandBox: feel free to change this page and experiment with editing\r
+ * FindPage: search or browse the database in various ways\r
+ * SyntaxReference: quick access to wiki syntax\r
+ * SiteNavigation: get an overview over this site and what it contains\r
+\r
+\r
+== How to use this site ==\r
+\r
+A Wiki is a collaborative site, anyone can contribute and share:\r
+ * Edit any page by pressing '''[[GetText(Edit)]]''' at the top or the bottom of the page \r
+ * Create a link to another page with joined capitalized words (like WikiSandBox) or with {{{["quoted words in brackets"]}}}\r
+ * Search for page titles or text within pages using the search box at the top of any page\r
+ * See HelpForBeginners to get you going, HelpContents for all help pages.\r
+\r
+To learn more about what a WikiWikiWeb is, read about MoinMoin:WhyWikiWorks and the MoinMoin:WikiNature. Also, consult the MoinMoin:WikiWikiWebFaq. \r
+\r
+This wiki is powered by MoinMoin.\r
diff --git a/DeveloperGuidelines.mdwn b/DeveloperGuidelines.mdwn
new file mode 100755 (executable)
index 0000000..f53ccd5
--- /dev/null
@@ -0,0 +1,7 @@
+We keep all of our non-trivial custom programs and scripts in CVS for [http://hcoop.sourceforge.net/ our SourceForge project].  All HCoop admins should have Source``Forge accounts and be added as developers for project `hcoop`.\r
+\r
+There are [http://sourceforge.net/cvs/?group_id=99567 instructions on how to use our project CVS], both for admins and curious others.\r
+\r
+Every commit to our repository triggers an e-mail to the [https://lists.sourceforge.net/lists/listinfo/hcoop-cvs hcoop-cvs mailing list] hosted at Source``Forge.  All developers for the project should probably subscribe to this list.  It's open to the public, so anyone else should feel free to subscribe, too.\r
+\r
+Our CVS repository contains several modules.  Most of them are custom tools implemented in ML and "owned" by AdamChlipala, so that most others won't even need to check them out for modification.  However, the `misc` module is of particular interest to all admins.  Whenever you make significant changes to some script (for instance, modifying an `/etc/init.d` script to add AFS support), it should be checked into the appropriate subdirectory of the `misc` module.  Rely on the `README` files in that module to determine which subdirectory that is, and be sure to add new `README`s and new entries to existing files as necessary to keep the module self-explanatory.\r
diff --git a/DnsConfiguration.mdwn b/DnsConfiguration.mdwn
new file mode 100755 (executable)
index 0000000..a9dc817
--- /dev/null
@@ -0,0 +1,51 @@
+Before continuing with this page, you probably want to read DomainTool to learn the basics of how we handle shared daemon configuration.\r
+\r
+A {{{.dns}}} file in a domain's directory controls its DNS settings. Such files consist of a sequence of lines of the following types:\r
+\r
+ * {{{Master <ip>}}}: Designates a master DNS server from which we should fetch all data for this domain. Any DNS configuration in a {{{.dns}}} file after any {{{Master}}} directive is ignored, except for {{{Mail}}} lines which determine the behavior of our SMTP server. You can use multiple {{{Master}}} directives, but the later IP addresses will only be used if the earlier servers are not contactable.  The DNS data is queried using the standard zone transfer protocol.\r
+ * {{{Slave <slave>}}}: Usually appears at top of file. Discussed in the next section.\r
+ * {{{TTL <seconds>}}}: {{{seconds}}} is an integer specifying the lifetime in seconds of the DNS records coming after this directive and before the next {{{TTL}}} directive, if any.  DNS caches around the 'net will feel free to assume that these mappings remain valid for that long without consulting our DNS servers to verify that this is really the case.  This is valuable behavior, since it saves wear and tear on our servers.  You should only use this directive if you have a particular, compelling reason, such as that a particular DNS mapping is updated regularly by a program.  {{{domtool}}} enforces that the TTL that you enter is at least some minimum value.  The current minimum is 120 seconds, which we can change if someone has a good reason.\r
+ * {{{TTL default}}}: Switch back to using default TTLs after using the directive described in the last entry.  Different kinds of entries have different default TTLs that will be used, based on what the author of djbdns thought makes sense in the general case.\r
+ * {{{Primary <host> <ip>}}}: Sets the primary DNS server for the domain to IP address {{{ip}}}, naming it {{{host.domain}}}\r
+ * {{{Primary <full_hostname>}}}: Use this to set your primary DNS server to a hostname from another domain. For example, you should use this if you want to use our default {{{ns.hcoop.net}}}/{{{ns2.hcoop.net}}} DNS configuration and your registrar complains that your DNS servers report different hostnames for nameservers than you gave to the registrar. We've only yet encountered one case where this was necessary. The set of allowed hostnames is specified in root-administered {{{.nses}}} files, which are handled in the same way as {{{.slaves}}} files.  {{{ns.hcoop.net}}} and {{{ns2.hcoop.net}}} will both always be available.\r
+ * {{{Secondary <host> <ip>}}}: Adds a secondary DNS server for the domain with IP address {{{ip}}}, naming it {{{host.domain}}}\r
+ * {{{Secondary <full_hostname>}}}: Analagous to the {{{Primary}}} form above for full hostnames.\r
+ * {{{Mail <host> <ip>}}}: Add a server to process e-mail for the domain with IP address {{{ip}}}, naming it {{{host.domain}}}. Mail servers will attempt to deliver mail to the servers you list following the order in which you list them, starting from the first.\r
+ * {{{BackupMail <host> <ip>}}}: This like like {{{Mail}}}, but, instead of declaring that mail for a domain is accepted locally, it declares that our mail server should accept mail for this domain and forward it on to one of that domain's "real" mail servers.  This is useful in case that domain's primary mail server goes down, in which case our mail queue can hold messages meant for it.\r
+ * {{{Mail <full.host>}}}: Add an external server {{{full.host}}} to process e-mail for this domain. This form doesn't add an A record, so you will only want to use it for non-HCoop mail servers that already have A records elsewhere.\r
+  * Mail creates a DNS __MX__ record.\r
+ * {{{Default <ip>}}}: Sets the IP address for {{{domain}}} to {{{ip}}}\r
+ * {{{Host <host> <ip>}}}: Sets the IP address for {{{host.domain}}} to {{{ip}}}\r
+ * {{{Alias <host> <ip>}}}: Sets the IP address for {{{host.domain}}} to {{{ip}}}; use this when this IP address has already been assigned a name in this domain with {{{Default}}} or {{{Host}}}\r
+  * Alias creates a DNS __A__ record.\r
+ * {{{Redir <host1> <host2>}}}: Sets {{{host1.domain}}} to have the same IP address as {{{host2}}}. This should almost never be used, as it requires every client resolution of this hostname to follow the chain of redirections, possibly across different servers. You should usually define a variable for a commonly used host IP address and use it with {{{Host}}} and {{{Alias}}} directives.\r
+  * Redir creates a __CNAME__ record. CNAME is usefull when you want to resolve to a server on a different DNS server / hosting provider.\r
+''Note'': The entries for Primary and Secondary DNS servers are required for the other entries to have any useful effect. (If you don't specify that our servers are in charge of your domain, no one will know to ask them about it.) See the {{{.dns}}} files for other working domains to get an idea of how this file should look.\r
+\r
+= Subdomains =\r
+Creating subdomains is easy.  For instance, to create a subdomain {{{a.me.com}}} of domain {{{me.com}}} that you control in domtool, create the directory {{{/etc/domains/com/me/a}}}.  You can then configure your subdomain like any other domain, by editing files in its directory and running {{{domtool}}}.\r
+\r
+Copying all the files in your domain directory into a subdomain directory is a bad idea. At least delete your {{{.users}}}, {{{.groups}}}, and {{{.paths}}} files if you do so, since domtool will generate error messages for everyone as long as you have any files with those names that are owned by your UNIX user.\r
+\r
+= Slave servers =\r
+It's also true that your Secondary servers need to agree with us on which host names go where.  One way to accomplish this is to use whatever ad-hoc mechanisms you like on these secondary servers.  Another way is to use the "slave server" mechanisms built into domtool.\r
+\r
+Domain directories can have root-maintained {{{.slaves}}} files that specify allowable slave servers for those domains and their subdomains, in the style of {{{.paths}}}.  These files map short server names into strings that are suitable parameters to rsync, specifying where to drop off updates to DNS data.\r
+\r
+As an example, we can look at this system-wide slave server, declared in {{{/etc/domains/.slaves}}}:\r
+\r
+{{{abu newdns@63.246.10.45:data/;newdns@63.246.10.45:/service/autoaxfr/root/slaves/}}}\r
+\r
+This is the slave server that you're most likely to use, if you don't want to worry about figuring out your own DNS infrastructure.  You can use it to replicate your DNS mappings on our secondary DNS server, Abulafia.  This slave is named {{{abu}}}, and data meant for it should be put in the {{{data}}} subdirectory of user {{{newdns}}}'s home directory on the server at IP address 63.246.10.45.  There is an additional rsync path, separated from the first by a semicolon, that specifies the path for "sub-slaves," which are cases where this domain's data is queried from a remote host via {{{Master,}}} but you still want to instruct further servers to serve that same data.\r
+\r
+You can use this slave in your own {{{.dns}}} files by beginning them with the line:\r
+\r
+{{{Slave abu}}}\r
+\r
+Data lines are only shared with slaves declared ''before'' those data lines.  This means that you could do something like dividing your DNS data into layers, where some slaves only receive data up to a specific layer.  However, it's not clear why you'd want to do that, and domtool mostly supports this "feature" because it made implementation easier. :)\r
+\r
+For our example to work out, we had to set up the password-less ssh login described in SshConfiguration between {{{root}}} on our server and {{{newdns}}} on Abulafia.  Abulafia's DNS build process takes into account the data files that our main server hands to it.  If you want to hand data to your own slave servers, you will need to do similar work to make your servers put the data to good use.\r
+\r
+Currently, we only support slaves based on [http://http://cr.yp.to/djbdns.html djbdns], as that is the data format we send to remote slaves.  If there is demand, we may add support for more conventional BIND transfers.\r
+\r
+You can implement "sub-slaves" by following a sequence of {{{Slave}}} directives with a sequence of {{{Master}}} directives.  In this case, {{{fyodor}}} and all slaves that you specify will get their data for your domain from the masters that you specify.\r
diff --git a/DomTool.mdwn b/DomTool.mdwn
new file mode 100755 (executable)
index 0000000..d8d35b5
--- /dev/null
@@ -0,0 +1,24 @@
+This is the master page for information on HCoop's distributed system configuration tool.\r
+\r
+= For everyone... =\r
+\r
+ * DomTool/UserGuide: An introduction to configuring shared daemons at HCoop\r
+ * ["DomTool/Examples"]: A smorgasbord of example configuration snippets\r
+ * DomTool/LanguageReference: A complete description of the programming language used for configuration files\r
+ * [http://deleuze.hcoop.net/domtool/ Standard library reference], including all of the primitive actions for configuring shared daemons\r
+\r
+= For admins (and the curious)... =\r
+\r
+ * DomTool/AdminProcedures: The daily care and feeding of DomTool\r
+ * DomTool/ArchitectureOverview: How does this beast work, anyway?\r
+ * ["DomTool/Plugins"]: Descriptions of the different plugins responsible for configuring various daemons, including how they publish their configuration for those daemons to use\r
+ * DomTool/AdditionalClients: Several other command-line tools mentioned elsewhere on this wiki are really DomTool clients. This page collects notes on their implementations.\r
+ * DomTool/SslProcedures: How to set up the various certificates used by the domtool clients and servers\r
+ * ["DomTool/Building"]: Obtaining and building the DomTool source\r
+ * ["DomTool/Implementation"]: Details on the implementation of the DomTool tools\r
+ * ["DomTool/Debugging"]: Some tricks to do manually what DomTool usually does automatically\r
+\r
+= Old pages =\r
+\r
+ * DomainTool describes the previous version of domtool.\r
+ * DomtoolTwo is the preview added by AdamChlipala before we began migrating to our new servers.\r
diff --git a/DomTool/AdditionalClients.mdwn b/DomTool/AdditionalClients.mdwn
new file mode 100755 (executable)
index 0000000..27d89ce
--- /dev/null
@@ -0,0 +1,25 @@
+This page documents command-line tools besides the `domtool*` family that act as DomTool clients. It's aimed at admins. Most members will probably find the most useful documentation on these tools in other places scattered throughout this wiki.\r
+\r
+[[TableOfContents()]]\r
+\r
+= dbtool =\r
+\r
+`dbtool` handles DBMS user and database creation. See the DomTool `Dbms` module for the hooks used to add handling for a new database server.\r
+\r
+''More detail should follow as we figure out how we'll be storing databases.''\r
+\r
+= vmail =\r
+\r
+`vmail` manages mappings from virtual mailbox e-mail addresses to the locations of their Maildir mailboxes and their IMAP/POP passwords. Data goes into `/etc/courier/userdb`, which must be owned by the `domtool` user for `vmail` to work properly. `/etc/courier/exim` (text version of mapping database) and `/etc/courier/exim.dat` (compiled DBM version) are root-owned, and DomTool uses `domtool-publish` with `sudo` to manipulate them.\r
+\r
+= setsa =\r
+\r
+`setsa` sets SpamAssassin analysis preferences for different e-mail addresses. The set of addresses to filter is those who have files named after them in `/etc/spamassassin/addrs`, which should be owned by `domtool`.\r
+\r
+= smtplog =\r
+\r
+`smtplog` (previously called `rlog`) returns lines from the current SMTP log (in `/var/log/exim4/mainlog`) that contain a domain name. `sudo domtool-publish` is used to read this root-only file with `grep`.\r
+\r
+= mysql-fixperms =\r
+\r
+Runs `/usr/bin/sudo -H /afs/hcoop.net/common/etc/scripts/mysql-grant-table-drop` to grant users drop permissions on their MySQL tables.\r
diff --git a/DomTool/AdminProcedures.mdwn b/DomTool/AdminProcedures.mdwn
new file mode 100755 (executable)
index 0000000..16a0568
--- /dev/null
@@ -0,0 +1,122 @@
+This page is only of direct interest to HCoop admins; that is, people with root privileges on our servers.  Most members should probably start at DomTool/UserGuide.\r
+\r
+[[TableOfContents()]]\r
+\r
+= Conventions for this document =\r
+\r
+We'll use:\r
+ * `$USER` to stand for the UNIX username that should be clear from context\r
+ * `$USERPATH` to stand for the first letter of the username, a slash, the next two letters of the username, a slash, and the username, concatenated.  For example, a `$USER` of "adamc" would have `$USERPATH` be "a/ad/adamc".\r
+ * `$DOMTOOL` to stand for `/afs/hcoop.net/common/etc/domtool`, the root of global DomTool data\r
+\r
+= Adding users =\r
+\r
+When a new UNIX user is added who should have DomTool access, run:{{{\r
+domtool-adduser $USER}}}\r
+\r
+This does a few things:\r
+ 1. Creates a `$DOMTOOL/keys/$USER` directory if it doesn't already exist, setting its ownership to `domtool.domtool` and granting `$USER` read permissions on it.  The AFS permissions inherited from `$DOMTOOL/keys` already prevent other users from peeking at keys stored in this directory.\r
+ 1. Use `openssl req` to generate (to file `$DOMTOOL/keys/$USER/key.pem`) a new RSA key for purposes of `$USER`'s interactions with DomTool.  The only fields given values on this key are:\r
+    * Common name: Set to `$USER`\r
+    * E-mail address: Set to `$USER@hcoop.net`\r
+ 1. Use `openssl ca` to sign the key with the DomTool certificate authority.  The result is a certificate file in `$DOMTOOL/certs/$USER.pem`, owned by `domtool.domtool`.\r
+ 1. Grant some standard DomTool permissions to the user:\r
+    * `user $USER`\r
+    * `group $USER`\r
+    * `path /afs/hcoop.net/user/$USERPATH`\r
+\r
+All of these actions should be idempotent.  That is, running `domtool-adduser` repeatedly with the same argument should work just fine.  The only consequence that might bother perfectionists is that our certificate authority will issue a new certificate each time with a new serial number, incrementing the saved serial number count.  It should also be safe to re-run `domtool-adduser` after a previous invocation failed halfway through.\r
+\r
+Sometimes you only want to run the SSL-related commands or the DomTool permission-related commands.  For those cases, run `domtool-addcert $USER` or `domtool-addacl $USER`.\r
+\r
+= Removing users =\r
+\r
+When someone leaves HCoop and you want to squelch all of his domains and DomTool privileges, run:{{{\r
+domtool-rmuser $USER}}}\r
+\r
+This does a few things:\r
+ 1. Delete `$DOMTOOL/keys/$USER`.\r
+ 1. Delete `$DOMTOOL/certs/$USER.pem`.\r
+ 1. Run `domtool-admin rmuser $USER`, which:\r
+    1. Removes all DomTool privileges for `$USER`.\r
+    1. Deletes all domains to which only `$USER` has the `domain` permission.  This includes removing all configuration related to those domains in real daemons.\r
+\r
+= Querying permissions =\r
+\r
+== Listing a user's permissions ==\r
+\r
+To list all permission that `$USER` has, run:{{{\r
+domtool-admin perms $USER}}}\r
+\r
+== Finding out who has a permission ==\r
+\r
+To list all the users that have permission `$CLASS`/`$VALUE`, run:{{{\r
+domtool-admin whohas $CLASS $VALUE}}}\r
+\r
+For instance, to see which users are allowed to configure hcoop.net, run:{{{\r
+domtool-admin whohas domain hcoop.net}}}\r
+\r
+= Changing permissions =\r
+\r
+== Granting a permission ==\r
+\r
+To give `$USER` permission `$CLASS`/`$VALUE`, run:{{{\r
+domtool-admin grant $USER $CLASS $VALUE}}}\r
+\r
+Such as:\r
+{{{\r
+domtool-admin grant docelic domain spinlocksolutions.com\r
+domtool-admin grant docelic cert /etc/apache2/ssl/apache.pem\r
+}}}\r
+\r
+== Revoking a permission ==\r
+\r
+To revoke permission `$CLASS`/`$VALUE` from `$USER` , run:{{{\r
+domtool-admin revoke $USER $CLASS $VALUE}}}\r
+\r
+= Updating domtool =\r
+\r
+== Reinstalling domtool ==\r
+\r
+In the case that you make changes to domtool and want to reinstall it, see ["DomTool/Building"], the ''Reinstalling the standalone tools'' section, for instructions.\r
+\r
+== Validating after a major change ==\r
+\r
+If something changes in the Domtool standard library, users' configuration might stop working.  If you just run `domtool-admin regen` in such a case, those users' domains will go down, which will probably make them sad.  Instead, run this first:{{{\r
+domtool-admin regen -tc}}}\r
+\r
+This just verifies that all configuration type-checks.  You can go through and fix the errors, which show up in `/var/log/domtool.log` on deleuze, one at a time, and only run `domtool-admin regen` (as in the following section) after everything type-checks.\r
+\r
+== Regenerating files ==\r
+\r
+To effectively erase all published configuration and regenerate it all by running all files found in `.domtool` subdirectories of users' AFS volumes, run:{{{\r
+domtool-admin regen}}}\r
+\r
+You might want to do this if there has been some nasty kind of data corruption, or if a security vulnerability has been discovered in DomTool and you want to drop all old, unsafe configuration directives that the buggy DomTool had been letting through.\r
+\r
+= Managing domains =\r
+\r
+== Adding a domain ==\r
+\r
+To grant a user `$USER` some domain `$DOMAIN`, run:{{{\r
+domtool-admin grant $USER domain $DOMAIN}}}\r
+\r
+== Removing a domain ==\r
+\r
+To remove all configuration associated with a domain `$DOMAIN`, run:{{{\r
+domtool-admin rmdom $DOMAIN}}}\r
+\r
+This clears out DomTool configuration related to `$DOMAIN` and removes any reference to it from the actual configuration files used by real daemons.  However, users' permissions to configure the domain are left untouched.  You can remove those separately with `domtool-admin revoke`.\r
+\r
+== Managing admin-run domains ==\r
+\r
+Every domain is thought of as owned by a user.  By convention:\r
+ * User `domtool` owns `localhost`, so you should edit `~domtool/domtool/localhost` for such purposes as adding local e-mail aliases.\r
+ * User `hcoop` owns `hcoop.net` and sub-domains, so you should edit `~hcoop/domtool/deleuze.hcoop.net`, `~hcoop/domtool/hcoop.net`, etc., as appropriate.  (`hcoop` also owns the portal, the wiki, and other "informational" services that are relatively low security.)\r
+\r
+= Debugging other users' configuration files =\r
+\r
+The relevant typing rules for configuration files vary based on which user is processing files.  For instance, the values of `your_domain` depend on which permissions the user has been granted.  You can always use `domtool-admin regen` to reload all config, executed as the appropriate users.  However, reprocessing everything has a significant cost, so you might want to run single files as particular users.  To do this, use this pattern:{{{\r
+DOMTOOL_USER=$SOMEONE domtool $FILENAME}}}\r
+\r
+You can also use other ways of setting the UNIX environment variable `DOMTOOL_USER`.  Note that an invocation with `DOMTOOL_USER` set depends on the ability to read that user's private key from AFS, so you will need AFS admin permissions to do this in general.\r
diff --git a/DomTool/ArchitectureOverview.mdwn b/DomTool/ArchitectureOverview.mdwn
new file mode 100755 (executable)
index 0000000..7f00ef7
--- /dev/null
@@ -0,0 +1,60 @@
+This page describes the client/server distributed configuration architecture of DomTool.  For (largely orthogonal) information on the programming language used for configuration, see DomTool/LanguageReference.\r
+\r
+[[TableOfContents()]]\r
+\r
+= Conventions for this document =\r
+\r
+We'll use these conventions:\r
+ * `$DOMTOOL` refers to `/afs/hcoop.net/common/etc/domtool`, the root of global DomTool data\r
+\r
+= Users and authentication =\r
+\r
+The principals that figure into DomTool authentication are either AFS/Kerberos users (like `adamc`) or HCoop machine hostnames (like `mire`). When one of these entities connects to another with some request to make, it authenticates using SSL.\r
+\r
+To faciliate this, we have our own SSL certificate authority (CA) living in `/etc/domtool` on `deleuze.hcoop.net`. We use this CA to sign keys belonging to DomTool-related principals. The DomTool tools only recognize this certificate authority, so, e.g., Veri``Sign can't grant any DomTool privileges.\r
+\r
+Each principal has its CA-signed certificate stored in `$DOMTOOL/certs/$NAME.pem`, where `$NAME` is the UNIX username of a user or the one-word hostname of a server. Any user is allowed to read these certificates, which are the public key halves of public key cryptography.\r
+\r
+The private keys are stored in `$DOMTOOL/keys/$NAME/key.pem`. AFS permissions are set such that, besides admins, only the user in question has the ability to read the key data. In contrast to certificates, keys have their own directories because AFS only allows directory-level permissions.\r
+\r
+'''Meta note''': This clearly isn't the most direct way to do authentication. I chose to do things this way initially because of that wise security mantra to implement as little as possible of your own cryptography infrastructure. By basing our authentication on that implemented in well-tested OpenAFS code, along with some help from the OpenSSL library, we avoid opportunities to introduce new bugs. But the result definitely isn't so aesthetically pleasing. --AdamChlipala\r
+\r
+= Access control lists =\r
+\r
+As in the cases of so many fancy systems, DomTool has its own notion of access control lists relevant to the resources it controls. The ACL data is serialized to `$DOMTOOL/acl`, though it is usually accessed via in-memory data structures in the different `DomTool` tools, after they read initial values from that file.\r
+\r
+There's nothing novel or surprising about ACLs in DomTool. The ACL list is essentially a set of '''user'''/'''class'''/'''value''' triples. Users are DomTool principals as discussed in the last section. ''Classes'' include things like domain configuration rights, rights to run programs as particular UNIX users, rights to use particular filesystem paths, etc.. ''Values'' are class-specific capabilities, like the name of a domain that the user may configure.\r
+\r
+== Standard ACL classes ==\r
+\r
+ * `user`: As which UNIX users may this principal run programs?\r
+ * `group`: With which UNIX groups may this principal run programs?\r
+ * `path`: Which filesystem directories is this principal allowed to reference in his configuration? Subdirectories of these are also allowed.\r
+ * `domain`: Which Internet domain names may this principal configure?\r
+ * `priv`: What kinds of admin actions may this principal perform?  Useful values include:\r
+   * `all`: Let the principal do whatever he asks. This privilege is required for administration of the ACL database itself.\r
+   * `dns`: The principal may configure DNS settings on servers whose DNS daemons are off-limits to normal members.\r
+   * `mail`: The principal may configure mail settings on servers whose mail daemons are off-limits to normal members.\r
+   * `www`: The principal may configure web settings on servers whose web daemons are off-limits to normal members.\r
+   * `regen`: The principal may run `domtool-admin regen` to reload all domain configuration from scratch.\r
+\r
+= Client/server model =\r
+\r
+Here's the anatomy of the handling of a user's configuration request.\r
+\r
+ 1. A user writes his domain configuration in the form of source code in the DomTool language. (See DomTool/LanguageReference.) The file can have any name. Ideally it is stored at the top level of the `.domtool` subdirectory of the user's AFS volume, as otherwise the corresponding configuration will be dropped if an admin triggers a  regeneration.\r
+ 1. The user runs `domtool $FILENAME`.\r
+ 1. `domtool` parses and type-checks `$FILENAME`. The DomTool language and its type system are designed to have the lovely property that type-checking implies proper adherence to access rights and general good citizenship. This means that users can check their configuration for acceptability locally, not taking up shared daemons' time until after validation.\r
+ 1. The user opens an SSL connection to our DomTool dispatcher on deleuze.hcoop.net, port 1234.\r
+   1. The dispatcher authenticates the user by way of his SSL certificate, and the user does the same for the dispatcher. This relies on the fact that only the user has permissions to read his key file in AFS.\r
+ 1. The user sends the text of his configuration program to the dispatcher.\r
+ 1. The dispatcher again parses and type-checks the program. If any errors arise, the dispatcher informs the user of this and terminates the session.\r
+ 1. Otherwise, the dispatcher runs the program.\r
+    1. A DomTool program is a purely functional expression that evaluates into a description of actions to be taken. Running the program involves executing these actions, which generally add new files to a temporary directory tree (which we'll call `$TMP` here) representing configuration. The roots of `$TMP` are HCoop server names like `deleuze` and `mire`. Each server's subdirectory contains configuration specific to its daemons. Each subdirectory has a tree structure mirroring the structure of Internet domain names. For instance, `$TMP/mire/net/hcoop` stores configuration related to `hcoop.net` on mire's daemons. '''Only domains that have been configured during this session''' will be present in any of these trees. This is part of a critical optimization to avoid reprocessing all configuration on every change.\r
+    1. Once the configuration program has been run, it's time to propagate the changes into the real world. The first step of doing this is to copy the modified domains from `$TMP` into the permanent configuration tree, located at `$DOMTOOL/nodes`. Not only are new/changed configuration files propagated, but old configuration files not present in `$TMP` are deleted from `$DOMTOOL/nodes`. Crucially for performance, parts of `$DOMTOOL/nodes` for domains not configured during this session are not examined or changed.\r
+    1. Now all the relevant configuration is in AFS and accessible to all HCoop servers. What remains is to publish it into the real daemons. The different DomTool plugins register handlers for different filenames that might be found in `$DOMTOOL/nodes`. For instance, the Apache plugin asks to be notified of changes to files ending in `.vhost`. This handler copies these files to `/var/domtool/vhosts`. The Apache plugin also registers a post-handler to copy all files from `/var/domtool/vhosts` to `/etc/apache/vhosts` and reload Apache configuration after any `.vhost` file has changed.\r
+       1. For all files in `$DOMTOOL/nodes/deleuze` whose status changed on this invocation, the dispatcher itself runs the matching handlers.\r
+       1. For configuration in `$DOMTOOL/nodes/$NODE` for other values of `$NODE`, the dispatcher opens an SSL connection to a slave daemon on `$NODE` on port 1235.\r
+          1. Two-way SSL authentication proceeds in the same way as for user-dispatcher connections.\r
+          1. The slave server runs the appropriate file handlers locally.\r
+ 1. Weather permitting, the dispatcher informs the user that the configuration has succeeded, and the session ends.\r
diff --git a/DomTool/Building.mdwn b/DomTool/Building.mdwn
new file mode 100755 (executable)
index 0000000..bd6b0f5
--- /dev/null
@@ -0,0 +1,72 @@
+[[TableOfContents()]]\r
+\r
+= Prerequisites =\r
+\r
+== Compilers ==\r
+\r
+To compile the standalone DomTool tools, you will need the [http://mlton.org/ MLton] [http://www.standardml.org/ Standard ML] compiler. It's available as Debian package "mlton". The version in Debian testing works fine, but the stable version is too old, so grab the Debian stable version of the latest release from [http://mlton.org/Download the MLton download page].\r
+\r
+To use DomTool from an interactive SML REPL session, you will need a recent version of [http://www.smlnj.org/ Standard ML of New Jersey]. The SML/NJ packages in non-experimental Debian are so old that I don't bother using them, opting to install SML/NJ manually following the directions on the SML/NJ web site. Chances are you can get by just fine without support for interactive REPL use and can skip installing SML/NJ if you don't want it for some other purpose.\r
+\r
+Why am I referencing two different compilers here? Well, developing with SML/NJ and building release binaries with MLton is standard practice in the SML world. SML/NJ supports separate compilation and interactive use, which are very helpful during development. MLton is a whole-program optimizing compiler that produces extremely efficient binaries, at the cost of much greater compile-time time and memory usage than SML/NJ.\r
+\r
+== Libraries ==\r
+\r
+You will need the OpenSSL C library with development files, available in Debian package "libssl-dev".\r
+\r
+== Utilities ==\r
+\r
+If you plan to run a server (dispatcher or slave), you'll need rsync, which is available in Debian package "rsync".\r
+\r
+= Getting the source code =\r
+\r
+You can obtain the approximately-latest version of the DomTool source code from [http://sourceforge.net/cvs/?group_id=99567 SourceForge anonymous CVS]. The module name is `domtool2`. I write "approximately" because it can take about a day for the latest changes to propagate from developer CVS to anonymous CVS. I'll duplicate the directions from that Source``Forge help page and tell you that you can check out this module by running:\r
+{{{cvs -d:pserver:anonymous@hcoop.cvs.sourceforge.net:/cvsroot/hcoop login\r
+cvs -z3 -d:pserver:anonymous@hcoop.cvs.sourceforge.net:/cvsroot/hcoop co -P domtool2}}}\r
+\r
+Just press enter when prompted for a password.\r
+\r
+If you have been granted write permission to the repository and plan to commit code changes, then you'll want to check the repo out from developer CVS, like so:\r
+{{{export CVS_RSH=ssh \r
+cvs -z3 -d:ext:developername@hcoop.cvs.sourceforge.net:/cvsroot/hcoop co -P domtool2}}}\r
+\r
+= Building the standalone tools =\r
+\r
+First, in the `domtool2` directory that you have checked out, create a file `config.sml` containing:\r
+{{{structure Config :> CONFIG = struct\r
+  open ConfigDefault\r
+end}}}\r
+\r
+Heck, you could even go ahead and set some non-standard configuration values! If you leave it as is, you inherit the defaults, which should be appropriate for HCoop servers.\r
+\r
+Even if you set configuration parameters until you're blue in the face, this stuff probably won't work very well in environments that don't look much like Linux. Perhaps some day greater portability will become enough of a priority for us to fix that.\r
+\r
+Once you have that done, the rest is easy! Just run{{{\r
+make}}}\r
+\r
+This will populate `domtool2/bin/` with the compiled DomTool programs. As root, run{{{\r
+make install}}}\r
+\r
+to copy these programs and some additional scripts to appropriate standard locations. Consult the Makefile if you'd like to see what those locations are ahead of time.\r
+\r
+== Reinstalling the standalone tools ==\r
+\r
+If you want to reinstall domtool on machines that are running it already, then it is best to use a slightly modified set of instructions.\r
+\r
+First, create a {{{config.sml}}} file as directed above, and run {{{make}}}.\r
+\r
+If the current machine is a slave, then run {{{\r
+make install_slave}}}\r
+\r
+If the current machine is a server, then run {{{\r
+make install_server}}}\r
+\r
+= Building for SML/NJ =\r
+\r
+After following the same procedure as above for `config.sml`, run{{{\r
+make smlnj}}}\r
+\r
+followed by{{{\r
+make install}}}\r
+\r
+as root. Now you should be able to run `sml` in the base `domtool2` directory and run `CM.make "src/domtool.cm";`. If you don't see any error messages, then the DomTool modules are loaded and you can start poking them. For instance, running `open Main;` should print information on the primary entry-points.\r
diff --git a/DomTool/Debugging.mdwn b/DomTool/Debugging.mdwn
new file mode 100755 (executable)
index 0000000..644a43e
--- /dev/null
@@ -0,0 +1,7 @@
+= AFS authentication =\r
+\r
+To "become" the domtool user on deleuze, run:{{{\r
+sudo -u domtool -s\r
+k5start -U -f /etc/keytabs/domtool.deleuze\r
+aklog\r
+}}}\r
diff --git a/DomTool/Examples.mdwn b/DomTool/Examples.mdwn
new file mode 100755 (executable)
index 0000000..17ff192
--- /dev/null
@@ -0,0 +1,325 @@
+Here are some example configuration files for DomTool, our distributed configuration management system.\r
+\r
+[[TableOfContents()]]\r
+\r
+= Domains =\r
+\r
+== The Model T ==\r
+\r
+If you just want to declare your domain with a `www.yourdomain` virtual host serving out of `~/public_html/` and all mail forwarded to your mailbox, use:\r
+{{{dom "yourdomain" with\r
+end;}}}\r
+\r
+== Upgraded Model T ==\r
+\r
+If you like everything `dom` gives you but want to add additional configuration, include it between `with`..`end`. For instance, to add an extra web virtual host `other`:\r
+{{{dom "yourdomain" with\r
+  web "other" with\r
+    (* More configuration could go here *)\r
+  end;\r
+end;}}}\r
+\r
+== Attack of the Model T Clones ==\r
+\r
+We can take the Model T and use it with some alternate names for the domain we're configuring.\r
+{{{dom "yourdomain" where\r
+  Aliases = ["yourotherdomain", "yourotherotherdomain"]\r
+with\r
+end;}}}\r
+A single Apache virtual host is created, answering to multiple names.  Other configuration is duplicated like you had entered it in a separate `dom` block for each alias.\r
+\r
+== The Do-It-Yourself ==\r
+\r
+The lowest-level way of configuring a domain is the `domain` directive, which does nothing but set up basic DNS parameters and provide a space for including further directives:\r
+{{{domain "yourdomain" with\r
+  (* Your directives here *)\r
+end;}}}\r
+\r
+= DNS =\r
+\r
+Here's a tour through the available DNS features.\r
+\r
+{{{domain "yourdomain" with\r
+  nameserver "ns1.hcoop.net";\r
+  nameserver "ns3.hcoop.net";\r
+  (* Specify two DNS servers that are authoritative for yourdomain *)\r
+\r
+  dnsIP "host" "1.2.3.4";\r
+  (* Add a mapping from host.yourdomain to IP address 1.2.3.4 *)\r
+\r
+  dnsMail 23 "mail.yourdomain";\r
+  (* Register mail.yourdomain as an SMTP handler for yourdomain, with priority 23 *)\r
+\r
+  dnsAlias "hcoop" "hcoop.net";\r
+  (* Add an alias such that hcoop.yourdomain resolves to the same thing as hcoop.net *)\r
+\r
+  dnsIP "dynamic" "5.6.7.8" where\r
+    TTL = 100\r
+  end;\r
+  (* Add an IP mapping with an abnormally low time-to-live of 100 *)\r
+end;}}}\r
+\r
+== Keeping DNS elsewhere ==\r
+\r
+This example shows how to configure mail handling for a domain that is primarily hosted off of HCoop:\r
+\r
+{{{domain "yourdomain" where\r
+  DNS = noDns\r
+with\r
+  handleMail;\r
+end;}}}\r
+\r
+= Mail =\r
+\r
+{{{domain "yourdomain" with\r
+  handleMail;\r
+  (* HCoop should provide relaying for yourdomain *)\r
+\r
+  emailAlias "user1" "user1@gmail.com";\r
+  (* Forward mail from user1@yourdomain to user1@gmail.com *)\r
+\r
+  emailAlias "user2" "me";\r
+  (* Forward mail from user2@yourdomain to HCoop user me *)\r
+\r
+  aliasMulti "pals" ["pal1@yahoo.com", "pal2@prodigy.com", "pal3"];\r
+  (* Forward mail from pals@yorudomain to pal1@yahoo.com, pal2@prodigy.com, and HCoop user pal3 *)\r
+\r
+  aliasDrop "spamtrap";\r
+  (* Silently drop all mail to spamtrap@yourdomain *)\r
+\r
+  defaultAlias "me";\r
+  (* Send all yourdomain mail that doesn't match some local user or other special rule to user me *)\r
+\r
+  catchAllAlias "me";\r
+  (* Send all yourdomain mail, period, to user me *)\r
+end;}}}\r
+\r
+= Apache =\r
+\r
+== The Model T ==\r
+\r
+{{{domain "yourdomain" with\r
+  web "www" with\r
+    (* This is a web host found at www.yourdomain. *)\r
+  end;\r
+end;}}}\r
+\r
+Note that the `web` directive also adds the right DNS mapping for your virtual host.\r
+\r
+== The Do-It-Yourself ==\r
+\r
+{{{domain "yourdomain" with\r
+  vhost "www" with\r
+  end;\r
+end;}}}\r
+\r
+This one doesn't add any DNS mappings.\r
+\r
+== Using a nonstandard web server ==\r
+\r
+{{{domain "yourdomain" with\r
+  web "www" where\r
+    WebNodes = ["fyodor"]\r
+  with\r
+  end;\r
+end;}}}\r
+\r
+== Bucking all the trends ==\r
+\r
+{{{domain "yourdomain" with\r
+  web "www" where\r
+    DocumentRoot = home "private_html";\r
+    User = "me_web";\r
+    Group = "me_web";\r
+    SSL = use_cert "/home/me/mycert.pem"\r
+  with\r
+  end;\r
+end;}}}\r
+\r
+`home "private_html"` builds the full path to subdirectory `private_html` of your home directory.\r
+\r
+== Basic URL handling ==\r
+\r
+{{{domain "yourdomain" with\r
+  web "www" with\r
+    alias "/doc" "/usr/local/doc";\r
+    (* Serve all URIs beginning in /doc out of directory /usr/local/doc *)\r
+\r
+    scriptAlias "/my-script" "/var/cgi/a-program";\r
+    (* Handle requests for /my-script by calling the CGI program /var/cgi/a-program.\r
+       The example here uses a file, but scriptAlias directive can also alias CGI\r
+       directories, as you'd expect: scriptAlias "/location/" "/directory/" *)\r
+\r
+    errorDocument "404" "not_found.html";\r
+    (* Handle HTTP error code 404 by sending file not_found.html *)\r
+  end;\r
+end;}}}\r
+\r
+== Location-specific configuration ==\r
+\r
+{{{domain "yourdomain" with\r
+  web "www" with\r
+    location "/private" with\r
+       errorDocument "404" "not_found_private.html";\r
+    end;\r
+    (* When in the /private tree of URI-space, handle 404s with not_found_private.html *)\r
+\r
+    directory "/usr/local/doc" with\r
+       errorDocument "404" "not_found_doc.html";\r
+    end;\r
+    (* When looking for a file in real directory /usr/local/doc, handle 404s with not_found_doc.html *)\r
+  end;\r
+end;}}}\r
+\r
+== Server aliases ==\r
+\r
+{{{domain "yourdomain" with\r
+  web "www" with\r
+    serverAliasHost "www2.yourdomain";\r
+    serverAliasHost "www.otherdomain";\r
+    (* www2.yourdomain and www.otherdomain are alternate names for this vhost *)\r
+\r
+    serverAlias "www3";\r
+    (* Short form for an alternate name within the current domain *)\r
+\r
+    serverAliasDefault;\r
+    (* Make this virtual host answer to yourdomain, with no extra hostname needed in front. *)\r
+  end;\r
+end;}}}\r
+\r
+Note that you must have domtool configuration rights to all domains you name with `serverAlias`.\r
+\r
+== Directory options ==\r
+\r
+\r
+{{{domain "yourdomain" with\r
+  web "www" with\r
+    options [execCGI, indexes];\r
+    (* Use exactly the Apache options execCGI and indexes by default for this vhost *)\r
+\r
+    set_options [includesNOEXEC];\r
+    (* Add the option includesNOEXEC, leaving the others alone *)\r
+\r
+    unset_options [indexes];\r
+    (* Change our mind about including indexes *)\r
+\r
+    directoryIndex ["index.html", "index.php", "index.txt"];\r
+    (* When looking for the default file to serve for a directory, consider these possibilities in order *)\r
+\r
+    action "image/gif" "/cgi-bin/images.cgi";\r
+    (* Run /cgi-bin/images.cgi to serve images *)\r
+\r
+    addDefaultCharset "utf-8";\r
+    (* Use the UTF-8 character set by default *)\r
+\r
+    location "/prefix" with\r
+       forceType "text/plain";\r
+       (* Serve all files in this location as plain text *)\r
+\r
+       forceTypeOff;\r
+       (* Change our mind about that! *)\r
+\r
+       (* All the other directives mentioned above can be used in locations, too, but forceType* _must_ be in a location. *)\r
+    end;\r
+  end;\r
+end;}}}\r
+\r
+== Access control ==\r
+\r
+{{{domain "yourdomain" with\r
+  vhost "www" with\r
+    location "/loc1" with\r
+      authType basic;\r
+      (* Use HTTP basic authentication in this location *)\r
+\r
+      authName "my domain";\r
+      (* Tell users that they're authenticating for "my domain" *)\r
+\r
+      authUserFile "/etc/webusers";\r
+      (* Look up user/password information in /etc/webusers *)\r
+\r
+      orderAllowDeny;\r
+      (* Access is denied by default *)\r
+\r
+      requireValidUser;\r
+      (* Anyone providing a valid password is allowed *)\r
+\r
+      denyFrom "badguys.evil.net";\r
+      (* However, anyone coming from this domain is banned *)\r
+\r
+      denyFrom "1.2";\r
+      (* Also ban anyone with a 1.2.*.* IP address *)\r
+    end;\r
+\r
+    location "/loc2";\r
+       authType basic;\r
+       authName "my other domain";\r
+       authUserFile "/etc/otherone";\r
+\r
+       denyFromAll;\r
+       (* Deny everyone by default *)\r
+\r
+       requireUser ["fred", "barney"];\r
+       (* Allow fred and barney in *)\r
+\r
+       requireGroup ["prehistoric"];\r
+       (* Also require membership in the prehistoric group *)\r
+    end;\r
+  end;\r
+end}}}\r
+\r
+== Fancy directory index generation ==\r
+\r
+{{{domain "yourdomain" with\r
+  web "www" with\r
+    addDescription "The planet Mars" "/web/pics/mars.gif";\r
+    (* Describe /web/pics/mars.gif as "The planet Mars" on index pages *)\r
+\r
+    indexOptions [fancyIndexing, htmlTable, iconHeight 10, iconWidth 10];\r
+    (* Set some index-generation options *)\r
+\r
+    headerName "header.html";\r
+    (* Include header.html at the start of a directory listing *)\r
+\r
+    footerName "footer.html";\r
+    (* Include footer.html at the end of a directory listing *)\r
+  end;\r
+end;}}}\r
+\r
+== mod_rewrite ==\r
+\r
+{{{domain "yourdomain" with\r
+  web "www" with\r
+    rewriteRule "^(.+)\.php$" "$1.sml" [];\r
+    (* Rewrite all URLs ending in .php to end in .sml *)\r
+\r
+    rewriteRule "/gone.html" "http://somewhere.else/there.html" [redirectWith permanent];\r
+    (* Redirect /gone.html to http://somewhere.else/there.html, giving an HTTP code indicating a permanent relocation *)\r
+\r
+    rewriteLogLevel 1;\r
+    (* Turn on some more logging for rewrite debugging in /afs/hcoop.net/usr/$USER/apache/log/$NODE/www.yourdomain/rewrite.log *)\r
+  end;\r
+end;}}}\r
+\r
+== mod_proxy ==\r
+\r
+{{{domain "yourdomain" with\r
+  vhost "www" with\r
+    proxyPass "/mirror/foo/" "http://localhost:5555/";\r
+    (* Proxy path /mirror/foo/ to a local server with URL base http://localhost:5555/ *)\r
+\r
+    proxyPassReverse "/mirror/foo/" "http://localhost:5555/";\r
+    (* Adjust Location and other HTTP headers appropriately for the above proxying *)\r
+  end;\r
+end;}}}\r
+\r
+= Mailman =\r
+\r
+{{{domain "yourdomain" with\r
+  mailmanWebHost "lists.yourdomain";\r
+  (* The default server for web interfaces to this domain's mailing lists is lists.yourdomain *)\r
+end;}}}\r
+\r
+= Live Examples in HCoop AFS =\r
+\r
+ * /afs/hcoop.net/user/d/do/docelic/.domtool/spinlocksolutions.com\r
diff --git a/DomTool/Implementation.mdwn b/DomTool/Implementation.mdwn
new file mode 100755 (executable)
index 0000000..28e05c4
--- /dev/null
@@ -0,0 +1,87 @@
+This page describes the implementation of the DomTool language interpreter and other tools. Most members would probably be better served visiting DomTool/UserGuide.\r
+\r
+[[TableOfContents()]]\r
+\r
+= Languages =\r
+\r
+DomTool is implemented mostly in [http://en.wikipedia.org/wiki/Standard_ML Standard ML] (SML), with teeny tiny bits of C and shell script.  Standard ML is a [http://en.wikipedia.org/wiki/Statically_typed statically-typed] [http://en.wikipedia.org/wiki/Functional_programming_language functional programming language] with much to recommend it, including a [http://portal.acm.org/citation.cfm?id=549659 language standard] (with formal semantics), [http://mlton.org/ one of the best open source optimizing compilers ever for any language], and open development models and communities associated with the major implementations (out of about 10 total language implementations floating around today).\r
+\r
+But really, why choose a programming language that "nobody's ever heard of"? The answer is simple. With SML, you can program at a high level of abstraction without having to worry about performance penalties and other historical undesirables.\r
+\r
+In the following sections, I'll often refer to SML modules by name, instead of giving source file paths. A module named `Name` will be defined in either `domtool2/name.sml` or `domtool2/plugins/name.sml`, depending on whether it's part of core DomTool or of a plugin. You'll also find signature `NAME` defined in `domtool2/name.sig` or `domtool2/plugins/name.sig`. I readily point the reader to the source code itself, and the signature files in particular, as the best sources of detailed documentation on the implementation. Readers coming from backgrounds outside of statically-typed functional programming may be pleasantly surprised at how well ML code documents itself!\r
+\r
+Information about obtaining and building the DomTool tools is found on ["DomTool/Building"].\r
+\r
+= Build process =\r
+\r
+MLton and SML/NJ take different inputs to drive their build processes. The main Makefile is responsible for building `src/domtool.cm` (the input to SML/NJ) and `src/domtool-*.mlb` (the tool-specific inputs to MLton) from `src/sources` and some other compiler-specific files. When adding a new source file to the system, include it in `src/sources`, not any of the generated files, and take care to insert it in dependency order relative to the sources already in the file.\r
+\r
+A C library `openssl_sml.so` is built to provide a cleaner (but spartan) interface to the OpenSSL library. The Makefile uses the [http://ttic.uchicago.edu/~blume/papers/nlffi.pdf NLFFI] tools shipped with MLton and SML/NJ to build compiler-specific SML interfaces to this library, and then compiler-agnostic code takes over and defines the visible `OpenSSL` structure based on the common interface supported by all NLFFI tools. Code specific to compiler `$COMPILER` lives in `domtool2/openssl/$COMPILER`.\r
+\r
+= Configuration =\r
+\r
+As is more and more the fashion lately, DomTool supports many tweakable configuration variables, and the particular settings of those variables are conveyed via program source code. In particular, the various pieces of the DomTool implementation look for configuration in different members of a `Config` module in an SML source file `config.sml` in the `domtool2` base directory. When building the standalone tools with MLton, these configuration settings will be inlined into the places where they're used in the resulting binary, possibly triggering opportunities for further optimization. Isn't compilation technology wonderful?\r
+\r
+Any particular installation of DomTool is unlikely to want to set custom values for all or even most of the available variables. Thus, the implementation takes modest advantage of SML's module system to allow inheritance of default settings via the `open` declaration, while maintaining the possibility for piecemeal setting of custom values.\r
+\r
+DomTool involves a number of distinct plugins and sources of functionality, all of which have some configuration parameters. The implementation uses Makefile-driven concatenation of files following a certain convention to build the overall default configuration module from files associated with the separate plugins. In particular, in `domtool2/configDefault`, you will find a set of `.cfg`, `.cfs`, and `.csg` files. All the `.cfs` files are concatenated together to form the definition of the signature `CONFIG`, while `.csg` files are concatenated together to form supporting definitions of sub-signatures. The `.cfg` files are concatenated together to form the definition of a structure `ConfigDefault` ascribing opaquely to `CONFIG`. Your custom configuration structure `Config` also ascribes to `CONFIG` and may `open` `ConfigDefault`.\r
+\r
+= The language interpreter =\r
+\r
+The process of reading, checking, and running a DomTool source file goes like this:\r
+\r
+ 1. The lexer breaks the textual input into tokens. It's embodied by the `DomtoolLexFn` functor, built by ml-lex from `domtool.lex`.\r
+ 1. The parser converts the stream of tokens into an abstract syntax tree (AST). It's embodied by the `DomtoolLrValsFn` functor, built by ml-yacc from `domtool.grm`. The `Parse` module ties together the lexer and parser.\r
+ 1. The `Tycheck` module type-checks the AST.\r
+ 1. The `Reduce` module applies familiar lambda calculus-style reduction rules to simplify the AST as much as possible.\r
+ 1. For input files that request configuration rather than just add definitions, the `Eval` module executes the resulting configuration value.\r
+\r
+Every piece of this pipeline is independent of the distributed configuration aspect of DomTool described on DomTool/ArchitectureOverview, though every stage after the parser provides hooks that can be used to conscript the language implementation for use in that and other applications.\r
+\r
+One important hook of this kind in `Tycheck` is in the form of its members `allowExterns` and `disallowExterns`. Call the appropriate one of these functions to set whether or not `extern type` and `extern val` declarations should be allowed in the source file to check.\r
+\r
+As DomTool/LanguageReference explains, all configuration takes place through the configuration monad, which has a lot in common with the [http://www.haskell.org/ Haskell] [http://www.nomaware.com/monads/html/iomonad.html IO monad]. Haskell newcomers often have trouble understanding how the IO monad enables the use of imperative code within a pure functional language. My favorite explanation for this is that values in the IO monad are runtime representations of programs in an embedded imperative language, which you hope will be run by some entity outside the scope of the Haskell language. In the DomTool implementation, this idea appears quite literally. The `Reduce` module handles the "pure functional" aspects of the language semantics, reducing input programs into first-order imperative programs, in the form of configuration values. `Eval` is the component that actually runs the resulting configuration, like the mythical top-level IO-meister in Haskell.\r
+\r
+= Plugin architecture =\r
+\r
+DomTool provides a number of ways to request callbacks when certain events occur or when certain add-on features are used. Plugins work by calling these hook functions, typically many times per plugin. By convention, a plugin is a module defined in `domtool2/src/plugins/` that registers some callbacks as a side-effect of its definition.\r
+\r
+The following subsections summarize the hooks that are available for DomTool plugins. There are other hooks that are only of interest when using the DomTool language implementation in a different application.\r
+\r
+== Extern functions ==\r
+\r
+Declared `extern val` functions can be implemented in two different ways. One hardly counts as implementation: you can leave them unimplemented and just treat them as purely syntactic entities, since some of the later callbacks that we'll cover are passed general DomTool ASTs as arguments. The second option is to register an extern function handler. `Env.registerFunction` is the hook for this.\r
+\r
+== Actions ==\r
+\r
+Actions are the connection between functional DomTool programs and "real-world" configuration. Call `Env.registerAction` to register the actual code that should be run when an action is encountered during `Eval`, giving the action's name and a function for transforming an environment variable mapping and a list of argument ASTs into a new environment variable mapping. These are DomTool, not UNIX, environment variables.\r
+\r
+There is a family of convenience functions `Env.action_none`, `Env.action_one`, etc., for registering actions taking argument lists of fixed length with known types. Values of type `Env.arg` are used to encapsulate methods for extracting native SML values from DomTool ASTs of known types.\r
+\r
+== Containers ==\r
+\r
+Containers are actions that take actions as additional arguments, like `domain` and `vhost`. Their handlers are registered very similarly to other actions, with the addition that containers have associated callbacks that are run after all nested configuration has been processed. When a container is encountered during `Eval`, its action handler is run, then all of its nested configuration is evaluated, and finally the container's "afterward" callback is run.  There are functions `Env.container_none`, `Env.container_one`, etc., that correspond to the convenience functions for regular actions.\r
+\r
+== Extern types ==\r
+\r
+Types declared with `extern type` are treated as refinement types. That is, each should have an associated simple type to which an additional filtering predicate is applied. `Env.type_one` is the hook to register a new extern type by giving its name, an `Env.arg` for converting its values to native SML, and a boolean predicate for deciding which values of the base type are allowed in the new type. This predicate can be arbitrary SML code. It may rely on imperativity, but it should never be visibly inconsistent in its decisions within a single type-checking. For example, our use of the DomTool language for distributed configuration has extern type handlers that use imperativity to determine the current user, what domains he may configure, etc., but this information is set before type-checking begins and doesn't change until it's over.\r
+\r
+== Environment variable defaults ==\r
+\r
+Call `Defaults.registerDefault` to provide a default value for an environment variable that should be set before type-checking begins. You must provide the variable's name, its type, and a (possibly impure) function for generating its initial expression value.\r
+\r
+== Reset handlers ==\r
+\r
+When an admin runs `domtool-admin regen`, we need a way to revert to a pristine configuration where everything users have added is gone, before we build it all back up again from scratch. `Domain.registerResetGlobal` registers a function to perform this clean-up on global (i.e., AFS) configuration, while `Domain.registerResetLocal` registers a similar function to be run on each node before regeneration. For example, the Webalizer plugin uses `registerResetGlobal` to delete all Webalizer configuration files, and the Apache plugin uses `registerResetLocal` to clear the contents of `/var/domtool/vhosts`.\r
+\r
+== Before/after domains ==\r
+\r
+Call `Domain.registerBefore` and `Domain.registerAfter` to register callbacks to be called before and after a `domain` directive's nested configuration is run.\r
+\r
+== File change handlers ==\r
+\r
+Call `Slave.registerFileHandler` to register a callback to call whenever a file's status in `$DOMTOOL/nodes` changes. See DomTool/ArchitectureOverview for more information on when such callbacks would be triggered.\r
+\r
+== Pre/post-handlers ==\r
+\r
+Call `Slave.registerPreHandler` and `Slave.registerPostHandler` to register functions to be called before and after a DomTool configuration session, which might include arbitrarily many domains and source files.\r
diff --git a/DomTool/LanguageReference.mdwn b/DomTool/LanguageReference.mdwn
new file mode 100755 (executable)
index 0000000..6ecedd5
--- /dev/null
@@ -0,0 +1,121 @@
+This page gives an in-depth specification of the DomTool language. Most members would probably prefer the more informal presentation in DomTool/UserGuide.\r
+\r
+[[TableOfContents()]]\r
+\r
+= Source code =\r
+\r
+For a complete, precise, and accurate grammatical specification, see the lexer and parser specifications `src/domtool.lex` and `src/domtool.grm` in the DomTool source code. See `src/tycheck.sml` for the type-checker implementation. ["DomTool/Building"] has information on obtaining the source.\r
+\r
+= Token conventions =\r
+\r
+In the grammars that follow, we use these lexical token class names:\r
+\r
+|| '''Name''' || '''Description''' ||\r
+|| `Int` || Integer constant ||\r
+|| `String` || String constant (enclosed in double quotes) ||\r
+|| `Symbol` || Identifier starting with a lowercase letter ||\r
+|| `CSymbol` || Identifier starting with a capital letter ||\r
+\r
+= Predicates =\r
+\r
+DomTool uses '''predicates''' to describe in what contexts an action may occur. For instance, web-related actions should only occur inside the scope of a virtual host directive. Predicates are built up following the grammar in the table below, using the letter `P` as the non-terminal for predicates.\r
+\r
+Meanings are given as statements that must hold about the context where an action is found. The context is represented as a stack of '''context IDs''' which have been declared with `context` declarations.\r
+\r
+|| '''Syntax''' || '''Description''' || '''Meaning''' ||\r
+|| `Root` || Root || The stack is empty. ||\r
+|| `CSymbol` || Context ID || `CSymbol` is on the top of the stack. ||\r
+|| `^P` || Suffixes || Some (not necessarily strict) suffix of the stack matches `P`. ||\r
+|| `!P` || Not || The stack ''doesn't'' match `P`. ||\r
+|| `P1 & P2` || And || The stack matches both `P1` and `P2`. ||\r
+|| `(P)` || Grouping || Identical to `P` ||\r
+\r
+= Types =\r
+\r
+Types describe expressions. As is standard in statically-typed programming languages, they are used only for validation purposes and have no real effect on the "output" of a program. The following table gives the grammar of types `T`. The section on expressions will give the meanings of types in terms of which expressions have which types.\r
+\r
+|| '''Syntax''' || '''Description''' ||\r
+|| `Symbol` || Extern type ||\r
+|| `[T]` || List of `T`s ||\r
+|| `T1 -> T2` || Function from `T1` to `T2` ||\r
+|| `[P]` || Action allowed only when `P` is satisified; requires no environment variables on input and writes none of its own ||\r
+|| `[P] {CSymbol1 : T1, ..., CSymbolN : TN}` || Action that requires environment variables `CSymbol1`, ..., `CSymbolN` to have the given types when run ||\r
+|| `[P] {CSymbol1_1 : T1_1, ..., CSymbol1_N : T1_N} => {CSymbol2_1 : T2_1, ..., CSymbol2_M : T2_M}` || Like the last case, but the second set of typed environment variables describes what the action will write ||\r
+|| `P => T` || A nested action that requires that its nested configuration satisfy `P`; `T` should be some action type ||\r
+|| `(T)` || Grouping ||\r
+\r
+= Expressions =\r
+\r
+Here is the grammar of expressions `E`. As is standard in ML-family languages and Haskell, juxtaposition is used to represent function application, with application associating to the left.\r
+\r
+|| '''Syntax''' || '''Description''' || '''Typing''' ||\r
+|| `Int` || Integer constant || `G |- Int : int` ||\r
+|| `String` || String constant || `G |- String : string` ||\r
+|| `[E1, ..., EN]` || List || If `G |- Ei : T` for each `Ei`, then `G |- [E1, ..., EN] : [T]`. ||\r
+|| `Symbol` || Variable || `G1, Symbol : T, G2 |- Symbol : T`. ||\r
+|| `E1 E2` || Application || If `G |- E1 : T1 -> T2` and `G |- E2 : T1`, then `G |- E1 E2 : T2`. ||\r
+|| `\ Symbol -> E` || Abstraction (inferred domain type) || If `G, Symbol : T1 |- E : T2`, then `G |- \ Symbol -> E : T1 -> T2`. ||\r
+|| `\ Symbol : (T1) -> E` || Abstraction (explicit domain type) || If `G, Symbol : T1 |- E : T2`, then `G |- \ Symbol : (T1) -> E : T1 -> T2`. ||\r
+|| `CSymbol = E` || Environment variable set || See subsection on actions ||\r
+|| `Symbol <- CSymbol; E` || Environment variable get || See subsection on actions ||\r
+|| `E1; E2` || Sequencing || See subsection on actions ||\r
+|| `E1 where E2 end` || Local bindings || See subsection on actions ||\r
+|| `let E1 in E2 end` || Local bindings || See subsection on actions ||\r
+|| `E1 with E2 end` || Nested action || See subsection on actions ||\r
+|| `E1 with end` || Empty nested action || See subsection on actions ||\r
+|| `E1 where E2 with E3 end` || Nested action with local bindings || See subsection on actions ||\r
+|| `E1 where E2 with end` || Empty nested action with local bindings || See subsection on actions ||\r
+|| `\\ Symbol : P -> E` || Nested action abstraction || See subsection on actions ||\r
+|| `(E)` || Grouping || Same as `E` ||\r
+\r
+== Actions ==\r
+\r
+The DomTool language is [http://en.wikipedia.org/wiki/Purely_functional purely functional]. Like [http://haskell.org/ Haskell], it uses a monad to inject effectful operations into its pure core. For DomTool, this is the '''action monad'''. This monad merges two potentially separate features that tend to occur together.\r
+\r
+First, actions are used to run code that will affect the outside world and lead to changes in the configuration of real daemons. '''Primitive actions''' like `domain` and `vhost` are the building-blocks here. They are defined by plugins. The other action forms in the table above are there just to allow the proper composition and sequencing of applications of primitive actions, which do the real work. See ["DomTool/Implementation"] for how the code to run for a particular primitive action is registered with the implementation.\r
+\r
+Second, the action monad provides the functionality of '''environment variables'''. These are similar to UNIX environment variables, but DomTool maintains its own environment where each variable has a static type. The rationale for including environment variables in the language is that, while many actions are highly configurable, you usually only want to tweak a few of their options at a time. DomTool allows an ambient environment of default variable settings, and it provides language constructs for modifying certain variables both globally and locally.\r
+\r
+=== Effects of the action expressions on the environment ===\r
+\r
+|| '''Syntax''' || '''Effect''' ||\r
+|| `CSymbol = E` || Environment variable `CSymbol` is set to the value of `E`, with `E`'s type. ||\r
+|| `Symbol <- CSymbol; E` || Environment variable `CSymbol` is read into normal variable `Symbol`, which inherits its type/value. ||\r
+|| `E1; E2` || The effect of `E1` followed by the effect of `E2` ||\r
+|| `E1 where E2 end` || The effect of `E2` followed by `E1`, afterward '''erasing''' any environment variable alterations by `E2` ||\r
+|| `let E1 in E2 end` || Same as `E2 where E1 end` ||\r
+|| `E1 with E2 end` || The effect of `E1` followed by `E2` ||\r
+|| `E1 with end` || Same as `E1` ||\r
+|| `E1 where E2 with E3 end` || The effect of `E2` followed by `E1` followed by `E3`, afterward '''erasing''' any environment variable alterations by `E2` ||\r
+|| `E1 where E2 with end` || The effect of `E2` followed by `E1`, afterward '''erasing''' any environment variable alterations by `E2` ||\r
+|| `\\ Symbol : P -> E` || No effect until called ||\r
+|| `E1 with E2 end`, when `E1` is a nested abstraction function || The effect of `E1` followed by `E2` followed by the effect of the action obtained by substituting the value of `E2` in the body of the abstraction to which `E1` evaluates. ||\r
+\r
+=== Nested action functions ===\r
+\r
+Sometimes it is convenient to be able to write new nested actions that call primitive nested actions as subroutines. For instance, the [http://deleuze.hcoop.net/domtool/easy_domain.html#V_dom dom] helper function uses [http://deleuze.hcoop.net/domtool/domain.html#V_domain domain] as a subroutine. Standard functions aren't good enough for these purposes, since they don't allow us to take into account the different environment effects that different nested action arguments might have. The nested function type `P => T` is the solution to this problem.\r
+\r
+You can define a nested action function with the `\\ Symbol : P -> E` form. Such a function has type `P => T` when assuming that `Symbol` has type `[P]` implies that `E` has type `T`. Any call to this function will be typed taking into account that we play the argument action's effect before playing the effect of the function's body.\r
+\r
+== Extern types ==\r
+\r
+Extern types (which are also used to implement "primitive types" like `int` and `string`) have something of the flavor of dependent types or refinement types. Registering appropriate handlers from a plugin can create an extern type whose values are controlled by an arbitrary predicate. Plugin implementers are supposed to maintain the invariant that the predicate controlling an extern type is never observably inconsistent in the course of a single type-checking session. That is, it never once declares a value to belong to type `T` and also declares it not to belong to `T` in the same type-checker invocation. A good example is the [http://deleuze.hcoop.net/domtool/domain.html#T_your_domain your_domain] type, which consists of those strings naming domains that the current user is allowed to configure. Within a single type-checking, the user remains constant, and so `your_domain`'s predicate returns consistent decisions. On the other hand, across different sessions by different users, the predicate will of course make different decisions. This approach allows extern types to be used for flexible type-level enforcement of security policies.\r
+\r
+It would be a pain for users to have to mark exactly which extern type a certain expression is meant to belong to. Instead, the DomTool language implementation uses slightly non-compositional type-checking to make use of rich extern types more convenient. By "non-compositional", I mean that the value of an expression, not just its type, may matter in type-checking a larger expression that it is found within. This non-compositionality is only used to infer when a value was given a base type like `string` when it really ought to have been given some rich extern type. For instance, when a function is called that expects an argument of type `your_domain`, the argument is first type-checked. If its inferred type is `your_domain`, then all is well. If not, then we try again, passing the actual argument expression to `your_domain`'s controlling predicate. Only if that predicate also rejects the expression do we signal a type error.\r
+\r
+= Declarations =\r
+\r
+Declarations `D` add new symbols to the typing environment.\r
+\r
+|| '''Syntax''' || '''Description''' || '''Effect on typing environment''' ||\r
+|| `extern type Symbol` || Extern type || Register `Symbol` as a new extern type that is either defined in a plugin or treated purely syntactically. ||\r
+|| `extern val Symbol : T` || Extern value || Register `Symbol` as a new variable that is either defined in a plugin or treated purely syntactically. ||\r
+|| `val Symbol = E` || Expression synonym || Define `Symbol` as an abbreviation for `E`; a specific type for the binding is inferred and used at future occurrences. ||\r
+|| `val Symbol : T = E` || Expression synonym || Define `Symbol` as an abbreviation for `E` of type `T`. ||\r
+|| `context CSymbol` || Context ID || Declare a new context ID `CSymbol`. ||\r
+\r
+= Source files =\r
+\r
+A source file is an optional documentation string, followed by a sequence of semicolon-terminated declarations with optional trailing documentation strings, followed by an optional expression. A documentation string is any text between `{{` and `}}` delimiters and may contain HTML.\r
+\r
+Documentation strings are used in automatic HTML documentation generation. A documentation string that starts a file is used to describe that file in the module index, and it's also included at the start of that file's page. A documentation string after a declaration is used to describe it in the detail section of its file's page. [http://deleuze.hcoop.net/domtool/ The standard library documentation] shows an example output.\r
diff --git a/DomTool/Plugins.mdwn b/DomTool/Plugins.mdwn
new file mode 100755 (executable)
index 0000000..688f204
--- /dev/null
@@ -0,0 +1,52 @@
+This page is aimed at admins; that is, people with root privileges on our servers. Most members should probably consult DomTool/UserGuide instead.\r
+\r
+This page documents the different DomTool '''plugins''', which provide the primitive actions that can be used to configure particular "real" daemons.\r
+\r
+[[TableOfContents()]]\r
+\r
+= Apache =\r
+\r
+'''Modules:''' [http://deleuze.hcoop.net/domtool/apache.html Apache], [http://deleuze.hcoop.net/domtool/apache_auth.html Apache_auth], [http://deleuze.hcoop.net/domtool/apache_options.html Apache_options], [http://deleuze.hcoop.net/domtool/mod_autoindex.html Mod_autoindex], [http://deleuze.hcoop.net/domtool/mod_dav.html Mod_dav], [http://deleuze.hcoop.net/domtool/mod_env.html Mod_env], [http://deleuze.hcoop.net/domtool/mod_rewrite.html Mod_rewrite], [http://deleuze.hcoop.net/domtool/proxy.html Proxy], [http://deleuze.hcoop.net/domtool/urls.html Urls]\r
+\r
+Each `vhost "$HOST"` directive creates a `$HOST.vhost` file in `$DOMTOOL/nodes`. A change handler for `.vhost` files copies them to `/var/domtool/vhosts`. A post-handler runs `domtool-publish apache`, which rsyncs `/var/domtool/vhosts` to `/etc/apache2/vhosts` after any vhost has changed and runs `/etc/init.d/apache2 reload` to reload configuration.\r
+\r
+The Apache plugin also manages creation and deletion of log directories. Each member should have an `apache/log` subdirectory of his AFS volume root, owned by domtool with read permissions for the member. The plugin creates a directory `/afs/hcoop/usr/$USER/apache/log/$NODE/$HOST` for each virtual host running on `$NODE` as `$USER` with full hostname `$HOST`. When a vhost is deleted, the plugin deletes its log directory. Since this can't be done while Apache is running, because the daemon maintains open file handles to logs, the plugin has to take Apache down until configuration is finished, reloading it afterward. Hopefully domains aren't deleted very often, so this shouldn't be much of a problem.\r
+\r
+Apache also provides hooks that other plugins can use to request callbacks just before and/or after a vhost is configured.\r
+\r
+= BIND =\r
+\r
+'''Modules:''' [http://deleuze.hcoop.net/domtool/bind.html Bind]\r
+\r
+BIND configuration directives are written to `dns` files in the `$DOMTOOL/nodes` directories of the appropriate nodes/domains. These `dns` files contain all of the contents of a BIND zonefile, with the exception of the SOA record. This is handled by main DomTool code and written in a stylized form to `soa` files. The BIND plugin registers a change handler looking for modifications to either `dns` or `soa` files. When any are found, `/var/domtool/zones/$DOMAIN.zone` is regenerated from them.\r
+\r
+The BIND plugin also produces a `named.conf` file for each domain. A change handler notes when some `named.conf` has changed, and a post-handler concatenates all `named.conf` files in `$DOMTOOL/nodes/$NODE` into `/var/domtool/named.conf.local` and runs `domtool-publish bind`, which rsyncs `/var/domtool/zones` to `/etc/bind/zones`, copies `/var/domtool/named.conf.local` to `/etc/bind/`, and runs `/etc/init.d/bind9 reload`.\r
+\r
+= Exim =\r
+\r
+'''Modules:''' [http://deleuze.hcoop.net/domtool/alias.html Alias], [http://deleuze.hcoop.net/domtool/exim.html Exim]\r
+\r
+The Exim plugin maintains three kinds of files in domain configuration directories:\r
+ * `aliases`, e-mail aliases to be concatenated into `/etc/aliases.hosted`\r
+ * `mail` files that, if non-empty, should contain the current domain's name, indicating that the current node should accept mail for that domain for local delivery\r
+ * `mail.relay` files that, if non-empty, should contain the current domain's name, indicating that the current node should provide relaying for any mail addressed to that domain\r
+\r
+A post-handler performs the concatenation over all domains into `/var/domtool/aliases`, `/var/domtool/local_domains.cfg`, and `/var/domtool/relay_domains.cfg`, respectively; and then runs `domtool-publish exim`, which copies the first file to `/etc/aliases.hosted` and concatenates the rest to `/etc/exim4/conf.d/main/10_domtool-domains`, and then runs `/etc/init.d/exim4 reload`.\r
+\r
+= HCoop =\r
+\r
+'''Modules:''' [http://deleuze.hcoop.net/domtool/hcoop.html Hcoop]\r
+\r
+This plug-in currently only provides useful HCoop-specific `extern` functions.\r
+\r
+= Mailman =\r
+\r
+'''Modules:''' [http://deleuze.hcoop.net/domtool/mailman.html Mailman]\r
+\r
+The `mailmanWebHost` action writes a domain file `mailman`, recording the default Mailman vhost for that domain. A post-handler concatenates all of these into `/var/domtool/mailman.map` in a format suitable for a Python association list in Mailman configuration, and runs `domtool-publish mailman`, which copies that file to `/etc/mailman`.  A file `/var/domtool/mailman_domains.cfg` is also created to list which domains should be considered for Mailman list delivery, and this list is added to `/etc/exim4/conf.d/main/10_domtool-domains` upon publishing.\r
+\r
+= Webalizer =\r
+\r
+'''Modules:''' none\r
+\r
+This plugin works entirely through the before/after vhost hooks provided by the Apache plugin. For each vhost `$VHOST` on node `$NODE`, it writes to `$DOMTOOL/webalizer/config/$NODE/$VHOST.conf` Webalizer configuration that will generate statistics for that vhost. The output HTML and images are directed to `$DOMTOOL/webalizer/output/$NODE/$VHOST/`, which the plugin ensures exists.\r
diff --git a/DomTool/SslProcedures.mdwn b/DomTool/SslProcedures.mdwn
new file mode 100755 (executable)
index 0000000..9f432ba
--- /dev/null
@@ -0,0 +1,50 @@
+'''Note''': You can generally avoid worrying about these details by using the scripts described in DomTool/AdminProcedures. The instructions here are mostly of interest to people implementing those scripts.\r
+\r
+These instructions assume you are running as a user in group `wheel` on `deleuze.hcoop.net`.\r
+\r
+= Creating a certificate authority =\r
+\r
+I followed the instructions on this page:\r
+  http://sial.org/howto/openssl/ca/\r
+\r
+This blog post revealed the source of a puzzling error:\r
+  http://ilovett.com/blog/projects/debian-apache-ssl\r
+It turns out leaving some fields (like the city name for your new certificate) blank leads to baffling messages!\r
+\r
+Extracting the relevant commands from the Makefile available at the former page, we run these commands to create our CA:\r
+{{{mkdir crl newcerts private\r
+chmod go-rwx private\r
+echo '01' > serial\r
+touch index\r
+# NOTE use "-newkey rsa:2048" if running OpenSSL 0.9.8a or higher\r
+openssl req -nodes -config openssl.cnf -days 1825 -x509 -newkey rsa -out ca-cert.pem -outform PEM}}}\r
+\r
+Now the directory structure of our CA exists, and we have the certificate we will use to sign certificates.\r
+\r
+= Creating a certificate for a node or user =\r
+\r
+I followed the instructions on these pages:\r
+  http://marc.theaimsgroup.com/?l=openssl-users&m=97049654211960&w=2\r
+\r
+  http://www.postgresql.org/docs/8.1/interactive/ssl-tcp.html\r
+\r
+The commands to run are:\r
+{{{openssl genrsa -out serverkey.pem\r
+openssl req -new -key serverkey.pem -out newreq.pem -days 365\r
+cat newreq.pem serverkey.pem > new.pem\r
+openssl ca -config /etc/domtool/openssl.cnf -policy policy_anything -out servercert.pem -infiles new.pem}}}\r
+replacing `serverkey.pem` and `servercert.pem` with appropriate names for your new key and certificate, respectively.  The change I made from [http://marc.theaimsgroup.com/?l=openssl-users&m=97049654211960&w=2 the cited source] is to include the `-config` flag to reference the modified config file obtained from [http://sial.org/howto/openssl/ca/ the page about creating a CA].\r
+\r
+Once I figure out the final directory layout, there will be instructions here on where to put these files once they're created.\r
+\r
+= Baffling things that can happen =\r
+\r
+If `openssl ca` tells you this:\r
+{{{failed to update database\r
+TXT_DB error number 2}}}\r
+\r
+it means that you have it configured not to sign a certificate for the same user multiple times, but you've gone ahead and asked it to do so anyway.  Add this line to the section for your default CA in `openssl.cnf`:\r
+{{{\r
+unique_subject = no}}}\r
+\r
+If you've already been signing some keys and you want to keep what you've done so far, you may also need to make similar changes in `index.attr` and possibly `index.attr.old`.\r
diff --git a/DomTool/UserGuide.mdwn b/DomTool/UserGuide.mdwn
new file mode 100755 (executable)
index 0000000..d686323
--- /dev/null
@@ -0,0 +1,182 @@
+#pragma section-numbers off\r
+\r
+This is the DomTool User Guide.  The properties of DomTool are described, as well as its use and its configuration file format.\r
+\r
+[[TableOfContents()]]\r
+\r
+= Overview =\r
+\r
+HCoop is almost unique in the history of the Internet. We are trying to provide highly configurable Internet hosting to the general public while maintaining a high level of security, so that your services keep running and your data stays safe and private. You can probably see that these goals conflict in a number of ways! Since our organization's birth in 2002, we've been evolving tools to help us reconcile these different goals. This document introduces the primary element of our current solution.\r
+\r
+This solution is called DomTool, and here's the one-line summary of what it's all about:\r
+ DomTool enables HCoop members to use a '''domain-specific programming language''' to describe how to configure daemons spread across our servers.\r
+\r
+Some other cogent properties of DomTool:\r
+ * The language is a '''[http://en.wikipedia.org/wiki/Statically_typed statically-typed], [http://en.wikipedia.org/wiki/Purely_functional purely functional] programming language'''. Other functional programming languages that you might have heard of include Lisp, Scheme, ML, and Haskell. Haskell and ML are statically-typed, and Haskell is purely functional.\r
+ * The language has a rich and extensible type system that can '''enforce complicated security policies through type-checking'''.\r
+ * Configuration works via a '''distributed client/server architecture''', so, with the right software installed, you can configure your domains from anywhere.\r
+\r
+Some readers may be scared off by this level of technical jargon. We apologize, but we just couldn't help showing it off. ;-) The rest of this document will be aimed at the average member, assuming only a solid understanding of the basics of Linux and the Internet. In particular, we assume no experience with particular kinds of programming.\r
+\r
+= Configuration files =\r
+\r
+In this example, we'll assume that you've requested and been granted privileges to some Internet domain name (like `you.com`) via our [https://members2.hcoop.net/portal/domain domain permission request form]. If you ''don't'' want to configure a domain that you own, then you don't need to be using DomTool!\r
+\r
+You will edit a text file with the configuration directives you want applied your domain. Where `$USER` is your HCoop username and `$DOMAIN` is your domain name, you should write configuration into a file `~$USER/.domtool/$DOMAIN`. If you're logged into one of our servers, `cd ~/.domtool` should get you to the proper directory. Otherwise, it can be useful to know that your home directory is something like `/afs/hcoop.net/user/u/us/username`, where you should replace `username` with your HCoop username and `u` and `us` with the one- and two-character prefixes of that username.  Be sure that your `.domtool` directory has an AFS ACL set that allows the user `domtool` to read it, or your domains may go down when we need to reload everyone's configuration.  If you end up with the wrong permissions, see MemberManual/GettingStarted/AfsExamples for the right command to run.\r
+\r
+We leave it up to you to choose how to edit the source file. You might run something like `emacs $DOMAIN` over SSH, or you might open it locally if you have our AFS cell mounted in your local filesystem. In the latter case, those of you lucky enough to be using UNIX-based home systems will probably want to create softlinks from your local home directories to your HCoop home directories in AFS, to save some typing each time you want to open Domtool files.\r
+\r
+In this file `$DOMAIN`, you can write:\r
+{{{dom "$DOMAIN" with\r
+end;}}}\r
+\r
+You should replace `$DOMAIN` with the actual domain name. This example introduces the simplest useful configuration, based on the `dom` directive. What does this source file accomplish?  It:\r
+ * Declares our nameservers as authoritative for your domain.\r
+ * Declares that Exim should handle e-mail for your domain.\r
+ * Directs Exim to send all mail to your domain to your mailbox.\r
+ * Adds a DNS mapping from `www.yourdomain.com` to our web server's IP address.\r
+ * Creates an Apache virtual host at that hostname serving `~$USER/public_html/`.\r
+\r
+There are more primitive configuration directives to set up each of these features individually. `dom` packages all of the functionality together in an easy-to-use package. One of the main principles behind DomTool and our use of it is to '''avoid configuration repetition wherever possible'''. The DomTool language contains several abstraction features familiar from high-level programming languages, as well as some new ones, all in support of abstracting common code patterns into programming language entities that can be called multiple times. In general, if you find yourself writing the same code over and over again, let us know, and we'll try to add a new abstraction to our standard library! You could even write such an abstraction yourself, but that's beyond the scope of this intro document.\r
+\r
+Now, enough talk; let's execute our source file!  Assuming that you're in your `.domtool` directory, run{{{\r
+domtool $DOMAIN}}}\r
+\r
+This contacts our central dispatcher server over an SSL connection. Once the server verifies that you are who you say you are, it will publish your configuration to the affected daemons, and you should be able to start using your domain.\r
+\r
+You could also simply run{{{\r
+domtool}}}\r
+which calls the dispatcher with '''all''' configuration files in your `.domtool` directory, regardless of what your current working directory is. This can be a helpful shortcut sometimes, though it can be noticeably less efficient than calling `domtool` with the single domain that you know you've changed.\r
+\r
+In fact, the names of the source files in your `.domtool` directory don't matter. We recommend storing the configuration for each of your domains in a separate file named after that domain, but you might want to make different choices. For instance, you might want to use an abstraction that configures multiple domains at once. However, it '''is''' important that you keep all your permanent configuration files in your `.domtool` directory. Sometimes we need to reprocess all configuration from scratch, and in such cases our dispatcher will only look for source files in your `.domtool` directory. For temporary experimentation, though, you can feel free to store source files elsewhere and run them explicitly with `domtool $FILENAME`.\r
+\r
+= Debugging configuration files =\r
+\r
+To check a configuration file without actually publishing its results, run:{{{\r
+domtool -tc $FILENAME}}}\r
+\r
+Here, `-tc` stands for "type-check."  The Domtool language is designed to capture all rules of which configuration is valid and which isn't in its parsing and typing rules, so using the `-tc` option ''should'' enable you to find any bugs in your configuration.  We might have bugs in our implementations of the configuration directives from time to time, but `-tc` should be sufficient to help you find your own bugs.\r
+\r
+Note that using your `~/.domtool` directory as a scratch space with lots of stray files is a bad idea, especially if you have multiple files representing different alternatives for configuring the same domain.  Sometimes we make a change to Domtool that requires reprocessing all user configuration.  In such cases, we run every file found in any user's `~/.domtool` directory.  In that case, your `~/.domtool` files will be run in an arbitrary order, including any files that you have been thinking of as "test cases."  It just might happen that the "test cases" end up overriding the "real" files.  Also, if ''any'' file in your `~/.domtool` fails to type-check, we will unpublish ''all'' of your domains automatically.  In summary, use another directory for storing tests, and run them by specifying explicit filename arguments to `domtool`, possibly with the `-tc` option.\r
+\r
+= Permissions =\r
+\r
+Now let's put on our Evil Hacker from the Seventh Circle of Hell hats. If you write this to a file `hcoop.net`:\r
+{{{dom "hcoop.net" with\r
+end;}}}\r
+and run:{{{\r
+domtool hcoop.net}}}\r
+you should see an error message like:\r
+{{{hcoop.net:0.0-1.14:error: Function argument has wrong type.\r
+ Expression: "hcoop.net"\r
+Actual type: string\r
+Needed type: your_domain}}}\r
+\r
+What this is saying is that you are only allowed to use `dom` with domains that '''you''' are allowed to configure. You tried to configure `hcoop.net`, which is not one of those domains, and so is treated like an arbitrary string (sequence of characters). The type checker has saved the day, and the Evil Hacker is prevented from mucking with `hcoop.net` configuration.\r
+\r
+How exactly does DomTool determine which domains you're allowed to configure? It uses a general permissions system based on access control lists. You can list all of your permissions by running:{{{\r
+domtool-admin perms}}}\r
+You should see output like this:\r
+{{{Permissions for you:\r
+domain: you.com you.net you.org\r
+path: /afs/hcoop.net/user/y/yo/you\r
+user: you}}}\r
+where `you` stands for your username. The `domain` list gives the Internet domains to which you've been granted configuration rights. `user` lists the UNIX users as whom you may run programs, and `path` gives the filesystem paths that you're allowed to reference in your configurations. You have rights to all subdirectories of `path` entries, too.\r
+\r
+You might like to perform some other queries on the permissions database, too. For instance, you might like to know which member owns `someone.com`. You could run:{{{\r
+domtool-admin whohas domain someone.com}}}\r
+and hopefully get back a reply like:{{{\r
+whohas domain / someone.com: someone}}}\r
+\r
+In general, `domtool-admin whohas $CLASS $VALUE` will list every user who has `$VALUE` in the `$CLASS` row of his permissions table.\r
+\r
+= Nested configuration directives =\r
+\r
+Let's look under the hood at what `dom` is doing by writing an equivalent configuration file that doesn't use it.\r
+{{{domain "$DOMAIN" with\r
+  dns (dnsNS "ns1.hcoop.net");\r
+  dns (dnsNS "ns3.hcoop.net");\r
+\r
+  dns (dnsA "www" web_ip);\r
+\r
+  handleMail;\r
+  catchAllAlias "$USER";\r
+\r
+  vhost "www" with\r
+  end;\r
+end;}}}\r
+\r
+Now we see what that `with..end` syntax was about: it relates to '''nested configuration directives'''. Both `dom` and the more primitive `domain` directive take additional configuration specific to the named domain. Everything we include here inside `domain` could also have been included inside a `dom` use, though it would be redundant.\r
+\r
+The contents of the `domain` block are a series of DomTool language expressions that evaluate to '''actions'''. Each action is given using consistent programming language syntax, rather than the ad-hoc configuration syntaxes used by daemons like Apache and Exim. This means that the directives are sometimes slightly more verbose, but they are much easier for humans and machines to parse, since no directive-specific ad-hoc syntax information is required.\r
+\r
+Let's step through the nested directives one by one to explain their meanings.\r
+\r
+The `dns` lines register DNS mappings to be included in `$DOMAIN`'s zone. `dnsNS` records list the authoritative nameservers in order. `dnsA` records provide mappings from hostnames to IP addresses. `web_ip` is a variable containing the IP address of our default web server for member use, defined in the standard library.\r
+\r
+`handleMail` asks Exim to provide relaying for any e-mail message addressed to any address at `$DOMAIN`.\r
+\r
+`catchAllAlias "$USER"` directs Exim to deposit any mail addressed to any user at `$DOMAIN` in `$USER`'s mailbox.\r
+\r
+The `vhost` directive demonstrates several layers of nested configuration. It declares an Apache virtual host named `www.$DOMAIN`. We could have included further Apache-specific configuration inside the `vhost` directive.\r
+\r
+= Configuration contexts =\r
+\r
+Not all configuration directives make sense in all contexts. For instance, it doesn't make sense to specify a URL rewrite rule outside of a `vhost` directive. The DomTool language uses a concept of '''contexts''' or '''predicates''' to enforce correct usage of directives.\r
+\r
+To illustrate, let's try breaking the rule we just gave in our example:\r
+{{{dom "hcoop.net" with\r
+  alias "/doc" "/usr/local/doc"\r
+end;}}}\r
+\r
+We ask for the URI prefix `doc/` to be mapped to file path `/usr/local/doc`. The `alias` directive is only allowed inside `vhost`s, so we get an error like this:\r
+{{{hcoop.net:0.0-3.4:error: Context incompatibility for nested action.\r
+Have: Domain\r
+Need: Vhost}}}\r
+\r
+This one's simple enough. We're in a `Domain`, but we need to be in a `Vhost` to use that directive. In full generality, DomTool's context specification language is a small logic that can be used to express much more complicated conditions, while maintaining the ability for the interpreter to check proper usage automatically. See the DomTool/LanguageReference for a full specification.\r
+\r
+= Environment variables =\r
+\r
+DomTool has its own concept of typed '''environment variables''' that are used to tweak parameters of configuration directives. Here's an example to demonstrate how they're used and why they're useful.\r
+\r
+Running this configuration:\r
+{{{vhost "www" with\r
+end;}}}\r
+gives you an Apache virtual host that serves documents out of `~/public_html`. If you wanted to serve documents out of `$DIR` instead, you could run:\r
+{{{vhost "www" where\r
+  DocumentRoot = "$DIR"\r
+with\r
+end;}}}\r
+Maybe you want to use the same document root for two different virtual hosts. In that case, you could use:\r
+{{{let\r
+  DocumentRoot = "$DIR"\r
+in\r
+  vhost "www" with\r
+  end;\r
+\r
+  vhost "www2" with\r
+  end;\r
+end;}}}\r
+Both of these alternatives involve assigning a new value to the '''environment variable''' `DocumentRoot` of type `your_path`, the type of filesystem paths that you may reference in configuration. Both `where` and `let` only introduce ''local values'' for environment variables. That is, once the `let` or the expression with the `where` clause has finished, it undoes changes to the environment made in the `where` clause or the first part of the `let`. This helps you maintain neat code that doesn't rely too much on global state.\r
+\r
+As this example hopefully shows, environment variables are useful because they make it more pleasant to use highly-customizable configuration directives. The less-commonly-configured aspects of a directive can be taken in as environment variables rather than normal arguments. That way, you don't need to write any code to deal with them when you are happy with their default values. When you ''do'' want to set a non-standard value, you can use a construct like `let` to apply it to multiple directives at once.\r
+\r
+= Removing a domain =\r
+\r
+When you no longer want to host a domain `$DOMAIN` with HCoop, do the following:\r
+\r
+ * Remove all mentions of `$DOMAIN` from the files in your `~/.domtool`.\r
+ * Run: {{{\r
+domtool-admin rmdom $DOMAIN\r
+}}}\r
+\r
+The second step should fail if you haven't been granted permission to configure `$DOMAIN`. If you finish both steps successfully, then none of the shared HCoop daemons should serve anything related to `$DOMAIN` anymore.\r
+\r
+= Further reading =\r
+\r
+We're purposely cutting off this user guide at this shallow level of detail. The best thing to read next is the ["DomTool/Examples"], which should introduce by example all of the language features and configuration directives that you're likely to use. If you want to understand the type error messages that the interpreter generates as more than just "there is a problem somewhere," then you'll probably want to learn a bit more about the language.\r
+\r
+For a more in-depth understanding of DomTool, including how to build and use your own directives, see the DomTool/LanguageReference. The [http://deleuze.hcoop.net/domtool/ standard library reference] presents all of the standard directives with full DomTool type information. We've glossed over details of the type system in this guide, but members comfortable with ML or Haskell programming will probably find this formal documentation the easiest to use, since types express very succinctly how directives may be used.\r
+\r
+The main DomTool page links to all of these resources and several more.\r
diff --git a/DomainRegistration.mdwn b/DomainRegistration.mdwn
new file mode 100755 (executable)
index 0000000..aea3671
--- /dev/null
@@ -0,0 +1,25 @@
+If you want to host a domain name with us, you'll need to pick a registrar and sign up with them. For those who don't know, the domain registrar business was demonopolized years ago, so you have a choice between hundreds of registrars who compete for your business. [http://www.godaddy.com/ GoDaddy] is the current leader in new domain registrations, and AdamChlipala and a number of other hcoop members use and recommend it.  [http://www.gandi.net/ GANDI] is a French registrar who has a nice English-language site and is highly recommended by FrankBynum, since they are the only registrar that declares in the agreement that you actually own the domain name. \r
+\r
+The only technically important thing about a domain name registration is providing the addresses of name servers to provide authoritative information on the domain's hosts. If you want to use our standard hosting setup, the name servers you give should be:\r
+{{{\r
+ns.hcoop.net\r
+ns2.hcoop.net\r
+}}}\r
+\r
+It takes a while for DNS records to propagate to all ISP's once you register a domain. Once your local DNS server knows about the new domain, you can start setting it up. Visit [https://members.hcoop.net/portal/domain the portal] to request access to administer your domain with DomainTool.\r
+\r
+== If this doesn't work ==\r
+\r
+=== "SOA serial mismatch" ===\r
+\r
+At least one domain name registry (NIC-SE, which handles the .se domain) has been known to have problems with djbdns, the DNS software HCoop is using.\r
+\r
+This error is reported as "SOA serial mismatch".\r
+\r
+In the case of .se, it works to just specify one authoritative DNS server:\r
+\r
+{{{\r
+ns.hcoop.net\r
+}}}\r
+\r
+Hopefully this will work for any registries with this problem.\r
diff --git a/DomainTool.mdwn b/DomainTool.mdwn
new file mode 100755 (executable)
index 0000000..b6cdd7a
--- /dev/null
@@ -0,0 +1,29 @@
+This page documents the procedures for administering the sites you have hosted with HCoop. All the configuration files described support line comments, indicated by beginning a line with {{{#}}}.\r
+\r
+This page describes in detail how to use domtool. It may be easiest for you to simply look at the setup of an existing domain and copy most of the directives. See, for example, {{{/etc/domains/net/schizomaniac}}}, AdamChlipala's personal domain.\r
+\r
+You won't be able to find help about domtool elsewhere on the web.  We've developed it ourselves specifically for hcoop (see [http://hcoop.sf.net/ the SourceForge project]).  Also, you will no doubt be wasting your time looking elsewhere for information on configuring Apache, your individual web sites, DNS, e-mail aliases, or any other shared service, since we don't allow users to modify these settings directly.  You have to go through domtool, and this page should tell you everything you need to know about doing that.\r
+\r
+= Directory structure =\r
+The configuration files for the sites hosted here are rooted in {{{/etc/domains}}}. This directory tree corresponds to the structure of Internet domain names. For instance, tpu.org configuration is rooted in {{{/etc/domains/org/tpu}}}. We use standard UNIX file permissions to control who may modify which domains. There are appropriate files to edit in a domain's directory to control its DNS, e-mail aliases, Apache virtual hosts, and Webalizer statistics. Upon making changes, you run the {{{domtool}}} command line program (with no parameters) to publish them. It will let you know if it finds any errors in your changes. ''Remember'', none of the files in {{{/etc/domains}}} have any direct effect on our services by themselves. You must always run {{{domtool}}} to publish your changes.\r
+\r
+To begin configuring a new domain, [https://members.hcoop.net/portal/domain request access to it through our portal].  This will create a directory for your domain and populate it with the skeleton files .dns, .groups, .paths and .users.  You will need to add any additional files and review these initial files to see if they are appropriate for your domain.  Do not attempt to change the .groups, .paths or .users files yourself.  This must be changed by an administrator.  If you do edit them {{{domtool}}} will reject them.  After making changes remember to execute {{{domtool}}} from the directory.\r
+\r
+= Variables =\r
+Domain directories, including the root {{{/etc/domains}}}, may contain {{{.vars}}} files. These define simple mappings from strings to strings, in the form of whitespace-separated name/value pairs on separate lines. Currently, they are used only in naming IP addresses that will be used in many domains. For example, the IP address of the web server configured by this tool is called {{{www}}}. Subdomains inherit the variables set in their parents, and they may also define new variables.\r
+\r
+= Paths =\r
+To control access to the filesystem, each domain has an associated list of directories it is allowed to access. Any of these directories or their subdirectories is allowed to be used any place a directory must be specified. {{{.paths}}} files in domain directories give lists of allowable paths. They are inherited in the same manner as {{{.vars}}} files. {{{.paths}}} files must be configured by someone with root access or they will not be read.  Do '''not''' attempt to edit your {{{.paths}}} file, as doing so will change its ownership and make {{{domtool}}} reject your changes.\r
+\r
+When a {{{.paths}}} file begins with a line that says {{{CLEAR}}}, it causes its domain not to inherit parents' path privileges. This can be used to delegate subdomains to others without giving them access to resources associated with the main domain.\r
+\r
+= Users and groups =\r
+The set of users and groups as whom you may run CGI programs is controlled in a manner analogous to paths. {{{.users}}} and {{{.groups}}} files in any position in the domain hierarchy add permissible users for those domain subtrees. {{{CLEAR}}} is supported for these, as well.  As with {{{.paths}}}, do '''not''' edit your own {{{.users}}} or {{{.groups}}} file. Only administrators may do this, and changing its ownership will result in {{{domtool}}} rejecting your changes.\r
+\r
+= Configuring daemons =\r
+domtool lets you configure a number of different daemons.  We've documented each one on a separate page.  See:\r
+\r
+ * DnsConfiguration: Mapping Internet hostnames to IP addresses\r
+ * EmailConfiguration: Controlling how e-mail to your domain is delivered or otherwise handled\r
+ * VirtualHostConfiguration: Managing web sites at different hostnames of your domain\r
+ * MailingListConfiguration: Setting which web site provides the Mailman web interface for any mailing lists you host with us\r
diff --git a/DomtoolTwo.mdwn b/DomtoolTwo.mdwn
new file mode 100755 (executable)
index 0000000..ef262aa
--- /dev/null
@@ -0,0 +1,162 @@
+'''This page is out of date and was only meant as a preview.  See DomTool instead.'''\r
+\r
+Herein lies an overview of the new configuration management tool that AdamChlipala is developing.  Many things that could be included aren't here yet, and they'll be added as they seem to be important.\r
+\r
+New members coming to this page: This system isn't yet rolled out.  You probably want DomainTool instead.\r
+\r
+[[TableOfContents()]]\r
+\r
+= Why something new? =\r
+\r
+The vast majority of configuration changes made at HCoop today go through the (already second-generation) DomainTool developed by AdamChlipala.  We would have collapsed under the weight of the collective needs of our growing member base if we hadn't had ''something'' like Domtool to allow members to configure their own domains in a secure way.  However, today's Domtool has some serious weaknesses.  Here are a few in rough increasing order of seriousness.\r
+\r
+ * '''Extending Domtool is painful.'''  The source code has ''some'' nice organizing principles, but still not very many.  Adding a new feature tends to involve a hearty helping of boilerplate code.  This doesn't have a big effect on anyone but Adam, but there's always the issue that more complicated coding increases the risk of bugs.\r
+ * '''It doesn't support configuration of multiple machines.'''  Since we will be switching to running multiple machines (see ColocationPlans), this is a problem!  The current Domtool could probably be patched to support this, but the other complaints make it not worth doing.\r
+ * '''The syntax and semantics of each configuration directive are ad-hoc.'''  New directives are added by writing custom code to parse lines of input, check that they satsify any constraints necessary for security, etc..  Just like in programming, it's nice to have a common abstraction for the basic building blocks of, in this case, configuration files.\r
+ * '''There is no support for user-programmed abstractions.'''  Nearly every subdirectory of `/etc/domains` has a `.dns` file with a shared prefix, declaring common elements like name servers.  These should instead be calling a library function or otherwise using a reified object.  All sorts of other patterns reappear frequently in Domtool configuration files and ought to be replaced with function calls.\r
+\r
+= Overview of Domtool 2 =\r
+\r
+There are two main pieces to the Domtool 2 system: a programming language and a system for distributed configuration implemented around it.\r
+\r
+== The Language ==\r
+\r
+The Domtool language is a [http://en.wikipedia.org/wiki/Functional_programming statically-typed, pure functional programming language] influenced by Haskell and ML.  It uses the function as the basic unit of abstraction, both for describing primitive configuration directives and higher-level subroutines built from them.\r
+\r
+Configuration itself as modeled as a stateful process of making a series of changes to the world, and this process is modeled inside the Domtool language with a configuration monad.  The monad also includes the notion of typed environment variables that are a principled alternative to default function parameters, where it's possible to change defaults locally via lexical scoping.\r
+\r
+Not all configuration directives are valid in all contexts.  For instance, it only makes sense to specify that a file is a CGI script if you're working in the context of an Apache virtual host.  Further, some Apache directives are only valid in the context of a particular directory.  Values in the configuration monad are labeled with predicates in a tiny logic describing valid contexts for their use, and the type checker won't let you use a directive elsewhere.\r
+\r
+The language interpreter also allows the addition of new base types by providing membership predicates implemented in SML.  For instance, the standard library has a type for the name of a domain that the current user is allowed to configure.  Rich types like this make it possible to use types of library functions as machine-checked documentation that often doesn't need to be supplemented with English.\r
+\r
+== Distributed Configuration ==\r
+\r
+As the language allows primitive functions to be implemented externally in SML code, it's possible to build all sorts of systems on top of it.  The one that we're interested in here is a system for changing configuration of network daemons running on multiple machines.\r
+\r
+The basic system has three tiers.\r
+\r
+The first tier is the members, merrily configuring away, laughing, crying, enjoying life's ups and downs, and sometimes attempting to configure things that they ought not to, through honest mistakes or (God forbid) malice.  They write their configuration files as programs in the Domtool language and type check them locally to make sure that they will be accepted.  If type checking succeeds, the scripts are sent over our LAN to a daemon process living on our main server.\r
+\r
+This daemon type-checks the files again (since we don't want to have to trust users to do it right!) and, assuming they check out, executes them to modify a directory tree on our shared AFS filesystem.  This tree looks a lot like `/etc/domains` does now, except that it's populated with summaries outputted by the daemon on how other daemons should behave.\r
+\r
+At this point, we reach the final tier.  A given set of changes may affect any subset of the configurable servers.  The main configuration daemon sends each affected server a note listing the files that have changed, and each of these servers then retrieves the changes from AFS and uses them to rewrite its local configuration in a service-specific way, restarting any local daemons that need restarting.\r
+\r
+= Documentation =\r
+\r
+You can grab the source code from [http://sourceforge.net/cvs/?group_id=99567 HCoop CVS on SourceForge], or [http://hcoop.cvs.sourceforge.net/hcoop/domtool2/ browse it on the web].  Be forewarned that it's implemented in [http://www.hprog.org/fhp/MlLanguage Standard ML] and doesn't have much documentation on building and using it.\r
+\r
+The Domtool 2 language toolset generates documentation automatically, in a way that you may be familiar with from tools like Java``Doc and Doxygen.  You can read [http://www.schizomaniac.net/domtool2/ the documentation for the standard library so far].\r
+\r
+= Configuration Examples =\r
+\r
+== The Model T of Domain Configuration ==\r
+\r
+A lot of folks at least start out with very simple configuration with their domains.  In fact, a lot of the domains hosted with HCoop have the exact same configuration, modulo usernames and other blanks to fill in.  A standard recipe is:\r
+\r
+ * Declare our nameservers as authoritative for your domain.\r
+ * Declare that Exim should handle e-mail for your domain.\r
+ * Direct Exim to send all mail to your domain to your mailbox.\r
+ * Add a DNS mapping from `www.yourdomain.com` to our web server's IP address.\r
+ * Create an Apache virtual host at that hostname serving `~/public_html/`.\r
+\r
+With the old Domtool, this configuration is scattered throughout a number of files.  With Domtool 2, this source code accomplishes it:\r
+\r
+{{{\r
+dom "yourdomain.com" with\r
+end;\r
+}}}\r
+\r
+Simple, eh?  `dom` is a library function defined elsewhere.  For comparison, an equivalent configuration that doesn't use it is:\r
+\r
+{{{\r
+domain "yourdomain.com" with\r
+       dns (dnsNS "ns.hcoop.net");\r
+       dns (dnsNS "ns2.hcoop.net");\r
+\r
+       dns (dnsA "www" web_ip);\r
+\r
+       handleMail;\r
+       mailbox <- Mailbox;\r
+       catchAllAlias mailbox;\r
+\r
+       vhost "www" with\r
+       end;\r
+end;\r
+}}}\r
+\r
+Still quite a bit better than what the old Domtool allows!\r
+\r
+== A Very Busy Example ==\r
+\r
+I'm not even going to bother setting out to explain this.  Here is a load of configuration sitting in a bucket.\r
+\r
+{{{\r
+domain "hcoop.net" with\r
+       dns (dnsNS "ns.hcoop.net");\r
+\r
+       dns (dnsA "a" "1.2.3.4");\r
+       dns (dnsCNAME "b" "a.hcoop.net");\r
+       dns (dnsMX 1 "mail.nowhere.eu");\r
+\r
+       handleMail;\r
+\r
+       emailAlias "someone" "someoneElse";\r
+       aliasMulti "me" ["nowhere","smelly@yikes.com"];\r
+\r
+       catchAllAlias "me@gmail.com";\r
+\r
+       mailmanWebHost "lists.hcoop.net";\r
+\r
+       dns (dnsA "www" web_ip);\r
+       vhost "www" where\r
+               DocumentRoot = "/home/adamc/html";\r
+               ServerAdmin = "my@other.address"\r
+       with\r
+               serverAlias "hcoop.net";\r
+               addDefaultCharset "mumbo-jumbo/incomprehensible";\r
+\r
+               location "/theMorgue" with\r
+                       rewriteRule "A" "B" [];\r
+               end;\r
+       end;\r
+end;\r
+\r
+domain "schizomaniac.net" where\r
+       TTL = 1234\r
+with\r
+       vhost "www" with\r
+               directory "/home/adamc/thisPlace" with\r
+                       unset_options [includesNOEXEC];\r
+                       indexOptions [iconsAreLinks, scanHtmlTitles, iconWidth 45];\r
+               end\r
+       end;\r
+\r
+       vhost "proxy" with\r
+               proxyPass "/proxyLand" "http://localhost:1234/otherProxyLand";\r
+               proxyPassReverse "/proxyLand" "http://localhost:1234/otherProxyLand";\r
+       end;\r
+end;\r
+}}}\r
+\r
+= Summary of Security-Related Architecture =\r
+\r
+The system for distributed configuration, as implemented now, works something like this:\r
+\r
+We create our own Open``SSL Certificate Authority for signing certificates related to the operation of Domtool 2.  Every check mentioned below will only accept certificates signed by this authority.\r
+\r
+When a user wants to push out some new configuration, he opens an SSL connection to the dispatcher daemon.  The user looks in the shared AFS filesystem for his personal, automatically-generated certificate and private key.  The certificate is world readable, while the permissions on the key are such that only that user can read it.  (This means that we are depending on the security of AFS/Kerberos/whatever else we use.)  The server verifies that the certificate is made out to the user's UNIX username and then performs the usual SSL handshake to make sure the party on the other end of the connection really has read access to the private key.\r
+\r
+If everything has gone properly, at this point the dispatcher is convinced that it's talking to a particular UNIX user.  The dispatcher consults a special Domtool access control list, telling which filesystem paths, domains, etc., that user is authorized to use.  These settings are used to determine the meanings of some custom base types in the Domtool language.  The dispatcher type-checks the user's configuration source in that context, aborting if type-checking fails.\r
+\r
+The dispatcher now executes the configuration to update the directory tree (on AFS) representing network-wide configuration.  The dispatcher opens an SSL connection to each server affected by the changes in turn.  The other server verifies that the connecting party's certificate is signed by our CA and that it is made out to the dispatcher's hostname.  If it is, the other server can accept the list of configuration files that have changed.  We again trust AFS security, as the other server reads the updated files from AFS and makes the appropriate local changes.\r
+\r
+= Open Design Decisions =\r
+\r
+ * '''Where should configuration source files be stored?''' Domtool 2 does away with the association between filenames/paths and configuration semantics.  However, enforcing a standard filesystem layout for configuration is nice, because it makes it easy to recompile everyone's configuration in the event that something changes in the tools.  How should we handle this issue with Domtool 2 while letting members keep the flexibility of this programming language?\r
+ * '''How does that SSL stuff sound?''' A lot of it was designed to make this easiest to implement, not because it leads to the conceptually cleanest mechanism.  By the way, the Open``SSL library is a bear to learn!\r
+\r
+= Epilogue =\r
+\r
+After we've migrated to the new architecture and everything seems stable for a few months, I want to try creating a "web control panel"-style interface to Domtool 2.  I believe I've designed the language such that this should be trivial.  Specifically, I ''think'' the Domtool language's type system gives all of the information needed to generate a nice control panel interface automatically.  We'd want to add some extra metadata, like cute icons for particular configuration functions, but I think it should be straightforward to implement a generic control panel that (aside from icons and extra descriptive text) builds its interface automatically from the source code of our standard library.\r
+\r
+The gist of the interface would be a tree-editor GUI for the abstract syntax trees of the Domtool language.  I think we can present it in a way such that even people who aren't comfortable with programming view it as a natural way of doing things, and the abstraction enabled by the language behind the scenes should let us blow away the competition with how quickly we can add new configuration functionality.\r
diff --git a/DrewRaines.mdwn b/DrewRaines.mdwn
new file mode 100755 (executable)
index 0000000..28c1435
--- /dev/null
@@ -0,0 +1,3 @@
+Everybody's favorite member (really).\r
+\r
+Do not go to http://raines.ws.\r
diff --git a/DynamicWebSites.mdwn b/DynamicWebSites.mdwn
new file mode 100755 (executable)
index 0000000..62e9625
--- /dev/null
@@ -0,0 +1,35 @@
+The short answer to the usual question is, yes, we do have PHP in Apache, and we do have SQL database servers running (PostgreSQL and MySQL) (see UsingDatabases).\r
+\r
+If you want to use our main Apache server for your dynamic web sites, you must use CGI or another execution method which requires forking a new script process for every dynamic request. There are a number of more efficient ways of doing dynamic page generation (including `mod_some_language`), but they don't work well with running scripts as their owners from a single main Apache instance, which is crucial from a security perspective in a multi-user environment like ours. However, you are free to run whatever web server you want by [https://members.hcoop.net/portal/sec requesting a port for it] and having Apache proxy to it with the `LocalProxy` directive for VirtualHostConfiguration. In the remainder of this page, we'll assume that you don't want to do this.\r
+\r
+= Security =\r
+\r
+We have some basic security measures in place to keep your dynamic page generation programs from using enough server resources to produce service outages for other users.\r
+\r
+ * Your CGI/PHP programs can't use more than 100MB of RAM.  If they could use arbitrary amounts, they could cause important daemons to crash because of out-of-memory errors.\r
+ * No more than 100 processes total with a single owning user can be running.  Without this, the above limitation would be ineffective, since that limit only applies on a per-process basis.\r
+ * Your CGI/PHP programs can't run for more than 10 seconds.  While an infinite-looping script may sound like it's far from a security threat, it actually is.  Apache has a fixed number of child processes that it uses to service requests, and each script monopolizes one of those processes while it's running.  If enough scripts run for long enough, then there will be no child processes left, and no other web pages will be served until some children free up.  A single infinite-looping script on a popular site could reach this situation very quickly.\r
+\r
+The specific numbers here, and even more qualitative aspects of the policy, are open to debate.  If you find that these constraints prevent you from doing something reasonable, and if you can suggest alternate enforcement mechanisms that still prevent users from stepping on each other, then suggest it on the `hcoop-discuss` mailing list.\r
+\r
+An alternative is for you to run your own web server to which Apache proxies requests, as suggested near the beginning of this page.  In that case, you have much more freedom, but you will still be under the usual resource limits for regular user processes.  (See UsingResourceLimits.)  Also, Apache enforces a time-out for proxying, as well, for the same reasons as detailed above, so you will really need to run your own web server on a non-standard port if you want long-running dynamic page generation programs.\r
+\r
+= PHP =\r
+\r
+We support PHP via Apache's `mod_suphp`. This module forks a new process for each script execution, like with CGI. It runs scripts as their owners, which is the reason we need to use it instead of `mod_php`.\r
+\r
+The combined upside/downside compared to suexec CGI is that `mod_suphp` requires that every script be in the `DocumentRoot` of the vhost it's running in. To allow `http://hcoop.net/~you/...` PHP scripts, we've set `hcoop.net`'s `DocumentRoot` to `/home`. This should be safe as long as everything in `/home` has appropriate permissions, but we may decide to revise it later for security reasons.\r
+\r
+You must use the `User` and `Group` VirtualHostConfiguration directives to make virtual hosts serving dynamic content run as particular users. You'll usually choose either your own user or a special user created to be run for your dynamic web stuff. (You are required to do one or the other to get PHP/CGI working for your own vhosts.) [https://members.hcoop.net/portal/support Create a support ticket] if you want such a user.\r
+\r
+= CGI =\r
+\r
+CGI scripts and programs accessed via `http://some.domain/~you/...` run as `you`. When you want to run CGI scripts for your own virtual host, you can use a `ScriptAlias` or `CGI` directive for VirtualHostConfiguration. Like for PHP, you must use `User` and `Group` to set the user/group scripts should run as on your vhost.\r
+\r
+= Debugging =\r
+\r
+If your scripts give you "Error 500" pages or similar, you should check the error log for the virtual host you are using. If you're accessing your site via `http://some.domain/~you/` where `some.domain` has the same front page as `hcoop.net`, the error log is `/var/log/apache2/home/error.log`, and it is readable by everyone. If your script is running on a separate vhost, then see the `Group` directive for VirtualHostConfiguration for how to get read access to the logs for all users in a specified group.\r
+\r
+= Notes =\r
+\r
+See also MailingListConfiguration for information on adding a Mailman web interface to your virtual host.\r
diff --git a/Election2005.mdwn b/Election2005.mdwn
new file mode 100755 (executable)
index 0000000..520951b
--- /dev/null
@@ -0,0 +1,124 @@
+''(The following content was moved from the old Abulafia wiki node BoardOfDirectorsElection for reference purposes).''\r
+\r
+'''VOTING IS NOW CLOSED.  DO NOT EDIT THIS PAGE.'''  The first board of directors of HCOOP, INC. consists of Adam Chlipala (27 votes), Nathan Kennedy (23 votes), and Davor Ocelic (14 votes).\r
+\r
+This page is for the election of the first Board of Directors of HCOOP, Inc.\r
+\r
+Nomination of candidates and candidate statements shall occur simultaneously with voting on the ["Bylaws"] at BylawsVote.\r
+\r
+Please list candidates to nominate below.  You may nominate yourself.  Please list candidate names alphabetically by last name.\r
+\r
+Nominations may continue until April 3, 2005, 11:59 PM UTC.\r
+\r
+= Nominations =\r
+ 1. LukeChao. Nominated by LukeChao.\r
+ 2. AdamChlipala. Nominated by NathanKennedy.\r
+ 3. ClintonEbadi.  Nominated by DavidBettis.\r
+ 4. RobGubler.  Nominated by RobGubler.\r
+ 5. BrianHolmes. Nominated by BrianHolmes\r
+ 6. NathanKennedy. Nominated by AdamChlipala.\r
+ 7. DavorOcelic. Nominated by NathanKennedy.\r
+ 8. JasonSmathers. Nominated by JasonSmathers.\r
+\r
+= Candidate Statements =\r
+Nominees who accept their nominations may place a candidate statement here, and/or a link to such a statement elsewhere.\r
+\r
+ 1. LukeChao. Among Hcoop members, I'm not at all special for being a Linux geek, or even for being one of the people who helped to make Abulafia happen in the first place. So, I'll state that if you vote for me, I will press to require new applicants to write an analytical essay on Garrett Hardin's paper "The Tragedy of the Commons." Without checks, rapid expansion could cause catastrophe. That's my platform. LukeChao for 2005!\r
+ 2. AdamChlipala. Hello. I put together most of what you see here and do most of the day-to-day management. I reckon I can keep doing that pretty well.\r
+ 3. RobGubler. Level headed; will make unbiased decisions.  More people should be running for the board...\r
+ 4. BrianHolmes.  I have an interest in seeing this group grow and develop into a well respected organization.  I will always be sure that the decisions I make are well informed and fulfill the needs of HCoop's members.  Please view my full statement on my page at BrianHolmes.\r
+ 5. NathanKennedy. Since joining in January, I have been active in discussion and support on the list and in #hcoop.  I have moved forward the incorporation proceedings, wrote most of the ArticlesOfIncorporation, successfully handled the paperwork for incorporating in Pennsylvania, and have been helping to craft bylaws.  If elected I would continue to get tough tasks done and maintain a strong leadership to grow the membership and move the cooperative forward.\r
+ 6. DavorOcelic. Please see my statement on my DavorOcelic user page. Thank you.\r
+ 7. JasonSmathers. I have included a detailed statement on my JasonSmathers page.  You will see my experience with non profit corporations, corporate procedures, and interaction with the IRS on behalf of non profit corporations.  Additionally I have the technical knowledge to help Hcoop, Inc. grow in a smart way.\r
+\r
+= Votes =\r
+Nominees who accept their nominations should place their names on this list.  When voting begins, every member may place their vote under up to three candidates.  Nominees may vote for themselves.  Voting will be open for a week after bylaws are approved.\r
+\r
+Voting begins on April 4, 2005, 00:00 (midnight) UTC, and closes one week later on April 10, 11:59 PM UTC.  During this time, you may list your name underneath up to three candidates.\r
+\r
+ * LukeChao\r
+  1. DavidBettis\r
+  1. ClintonEbadi\r
+  1. FrancoisDenisGonthier\r
+  1. AadityaSood\r
+  1. GianPerrone\r
+  8. Jeffrey Drake\r
+ * AdamChlipala\r
+  1. LukeChao\r
+  1. DavorOcelic\r
+  1. NathanKennedy\r
+  1. AdamChlipala\r
+  1. DavidBettis\r
+  1. RobGubler\r
+  1. MichaelOlson\r
+  1. MikeLeonhard\r
+  1. ClintonEbadi\r
+  1. MatthieuSozeau\r
+  1. DrewRaines\r
+  1. JeffreyDrake\r
+  1. JohnSettino\r
+  1. RickHull\r
+  1. NoufalIbrahim\r
+  1. JeremyPenner\r
+  1. DavidSnider\r
+  1. Matt Currington\r
+  1. FrancoisDenisGonthier\r
+  1. AadityaSood\r
+  1. GianPerrone\r
+  1. BrianHolmes\r
+  1. FrankBynum\r
+  1. TanveerSingh\r
+  1. SriharshaSetty\r
+  1. VisnjaBolf\r
+  1. AndreKuehne\r
+ * RobGubler\r
+ * BrianHolmes\r
+  1. JeremyPenner\r
+ * NathanKennedy\r
+  1. NathanKennedy\r
+  1. LukeChao\r
+  1. DavorOcelic\r
+  1. AdamChlipala\r
+  1. DavidBettis\r
+  1. MichaelOlson\r
+  1. MikeLeonhard\r
+  1. ClintonEbadi\r
+  1. MatthieuSozeau\r
+  1. DrewRaines\r
+  1. Jeffrey Drake\r
+  1. JohnSettino\r
+  1. RickHull\r
+  1. NoufalIbrahim\r
+  1. JeremyPenner\r
+  1. Matt Currington\r
+  1. AadityaSood\r
+  1. GianPerrone\r
+  1. FrankBynum\r
+  1. TanveerSingh\r
+  1. SriharshaSetty \r
+  1. VisnjaBolf\r
+  1. AndreKuehne\r
+ * DavorOcelic\r
+  1. LukeChao\r
+  1. NathanKennedy\r
+  1. RobGubler\r
+  1. MikeLeonhard\r
+  1. DavorOcelic\r
+  1. TerrenceBrannon\r
+  1. RickHull\r
+  1. NoufalIbrahim\r
+  1. Matt Currington\r
+  1. FrancoisDenisGonthier\r
+  1. FrankBynum\r
+  1. TanveerSingh\r
+  1. VisnjaBolf\r
+  1. AndreKuehne\r
+ * JasonSmathers\r
+  1. AdamChlipala\r
+  1. RobGubler\r
+  1. MichaelOlson\r
+  1. MatthieuSozeau\r
+  1. TerrenceBrannon\r
+  1. DrewRaines\r
+  1. JohnSettino\r
+  1. BrianHolmes\r
diff --git a/Election2006.mdwn b/Election2006.mdwn
new file mode 100755 (executable)
index 0000000..aacf406
--- /dev/null
@@ -0,0 +1,35 @@
+This page is for the election of the second Board of Directors of HCOOP, Inc.  Nominations shall be done in our usual wiki style.  Voting shall be done through the HCOOP portal.  You may see last year's election results at ["Election2005"] or summarized on the BoardOfDirectors [http://hcoop.net/board/ website].\r
+\r
+This election is governed by articles 3 and 4 of our HcoopBylaws.  All current members in good standing may vote for three candidates to replace the outgoing board, whose term expires on April 4, 2006.\r
+\r
+Please list candidates to nominate below.  You may nominate any current HCOOP members, including yourself.  Please list candidate names alphabetically by last name, and list your own name as the nominator. \r
+\r
+Nominations may continue until March 31, 2006, 11:59 PM UTC.  Voting on all candidates who have accepted their nominations shall begin on April 4, 2006 at midnight UTC and continue for one week through April 11, 2006 at midnight UTC.\r
+\r
+Please note that this is a minor procedural change from last year.  The voting period is the same, beginning and ending exactly one year later, but unless anyone has reasonable objections, nominations will be closed at the end of March, in order to prevent last-minute nominees from being left off of the ballot.\r
+\r
+= Nominations =\r
+ 1. AdamChlipala. Nominated by NathanKennedy.\r
+ 1. NathanKennedy. Nominated by NathanKennedy.\r
+ 1. DavorOcelic. Nominated by NathanKennedy.\r
+\r
+= Candidate Acceptances =\r
+Nominees who accept their nominations must place their name here, along with any statement or links that they wish to make.\r
+\r
+== Adam Chlipala ==\r
+\r
+I'm the founder, current president and treasurer, and author of most of our portal and custom administration software.  I'd be glad to continue help keep this ship on course. :-)\r
+\r
+== Nathan Kennedy ==\r
+\r
+I have served as secretary of the board for the past year.  I am pleased that the past year has seen the membership of the co-op almost double through word-of-mouth alone.  I have put a good deal of work into legal and administrative issues, such as incorporating, drafting bylaws, registering with the IRS in order to get a corporate bank account, and filing for tax-exempt status.  This last application is still ongoing, and since it will probably be a while before the IRS finishes processing our application, the more pressing issue to resolve before April 15 is what our tax obligations for the present year are, including filing a tax return if need be.\r
+\r
+Beyond this dull but necessary work, I have a few goals for HCOOP:\r
+ *Keep entry-level base dues for members at or below US$5/month or less.  As we expand our infrastructure, maintaining this benchmark will require pricing changes, and I will continue to seek feedback from all our members in order to figure out the fairest policy for everyone.\r
+ *Create a service which is accessible and useful for non-techy users.  I believe we can not only do this without compromising the great value that HCOOP has to technical users, but that providing a service which more casual users seeking a low-cost webhost can use will enable all of HCOOP's users to benefit from greater economy of scale.\r
+\r
+I hope you will re-elect the three current members of the board.  Adam, Davor, and myself are a good balance of skills, geographic locations, and personalities.  I believe that together we can continue to bring the membership together to create a service that gets better all the time.\r
+\r
+== Davor Ocelic ==\r
+\r
+As usual, please visit my DavorOcelic user page. Thank you.\r
diff --git a/Election2007.mdwn b/Election2007.mdwn
new file mode 100755 (executable)
index 0000000..a9a1fe2
--- /dev/null
@@ -0,0 +1,30 @@
+Nominations are now CLOSED.  Please do not edit this page unless you are already a candidate listed below.  You may now vote in the election at [https://members.hcoop.net/portal/poll?vote=9].\r
+\r
+----\r
+\r
+This page is for the election of the second Board of Directors of HCoop, Inc. Nominations shall be done in our usual wiki style. Voting shall be done through the HCoop portal. You may see last year's election results at ["Election2006"] or summarized on the BoardOfDirectors website.\r
+\r
+This election is governed by articles 3 and 4 of our HcoopBylaws. All current members in good standing may vote for three candidates to replace the outgoing board, whose term expires on April 11, 2007.\r
+\r
+Please list candidates to nominate below. You may nominate any current HCoop members, including yourself. Please list candidate names alphabetically by last name, and list your own name as the nominator.\r
+\r
+Nominations may continue until March 31, 2007, 11:59 PM UTC. Voting on all candidates who have accepted their nominations shall begin on April 4, 2007 at midnight UTC and continue for one week through April 11, 2007 at midnight UTC.\r
+\r
+= Nominations =\r
+ 1. AdamChlipala. Nominated by NathanKennedy.\r
+ 1. DavorOcelic. Nominated by NathanKennedy.\r
+ 1. NathanKennedy. Nominated by AdamChlipala.\r
+ 1. JustinLeitgeb. Nominated by DmitriyMorozov.\r
+\r
+= Candidate Acceptances =\r
+Nominees who accept their nominations must place their name here, along with any statement or links that they wish to make.\r
+\r
+ 1. AdamChlipala. I started HCoop, and I'm the current president and treasurer.  I develop the custom software that keeps HCoop running, including DomTool and [https://members.hcoop.net/ the portal].  I also get to be the one all the volunteers hate, because I have to poke them when they go radio silent and we're not sure if they're still handling their jobs!  My platform is simple: set up technical and social infrastructure to make HCoop sustainable.  It's easy for members looking in from the outside to imagine that it's important for a candidate to have a laundry list of "great ideas," assuming that HCoop is ready to expand from its current stable base.   In actuality, HCoop runs now because I take on almost all of the work, including things that '''no one''' finds fun and wants to do.  Because I'll soon be leaving behind the world of studenthood, it's no longer feasible to assume that I'll be doing all of the heavy lifting.  Finding sustainable ways of spreading the work evenly is the most important activity for the co-op, or it won't be surviving much longer.  "Environmental policy" is hardly relevant in comparison.  I'm sure that almost any single member could make small changes in his daily life and have a bigger positive environmental impact than the whole co-op could ever have while still providing the level of service that our members expect.[[BR]][[BR]]\r
+\r
+ Put another way: '''HCoop is not stable today!'''  It looks like everything is holding up fine because I have sacrificed and continue to sacrifice so much of my time and money to keep things running.  Solving this problem is much more critical than anything related to social movements or the environment, because a dead HCoop can do nothing to further those causes a year from now.  I'm working on directing various solutions to these problems now.  As far as I know, no one else has ever initiated any efforts to solve any of the problems I'm describing, despite what I hope is an open environment where everyone is encouraged to chip in on our mailing lists.  In contrast, I've initiated every hardware and software architecture upgrade that HCoop has gone through so far and drafted every set of guidelines for distribution of responsibilities, along with writing all of the software to make these distributions possible.  If this isn't the right kind of "vision" to be thinking about in this election, then I don't know what is.\r
+\r
+ 2. DavorOcelic. I am a current Board of Directors member. For my platform and an overview of my plans for HCoop in the following year, see my Wiki page DavorOcelic.\r
+\r
+ 3. JustinLeitgeb. I have been an HCoop member since 2005 and I helped out with the process of deciding on a new colocation site for our servers (i.e., the current project at Peer 1).  For the platform that I am running on, see the wiki page JustinLeitgeb.\r
+\r
+ 4. NathanKennedy.  I am currently a board member and secretary of HCoop.  I've taken care of most of the legal side of HCoop, incorporating it as a nonprofit as well as successfully obtaining recognition from the IRS for HCoop as a tax-exempt cooperative.  I have also dealt with Peer1 and handled the physical installation at the Peer1 site.  My goals for 2007 include ensuring a smooth transition to our Peer1 site, planning for future growth, and ensuring that the future of HCoop is secure as a cooperative organization.  Beyond the transition to our new architecture at Peer1, this includes developing a robust backup and disaster recovery protocol, developing an environmental policy, expanding the board from three to five seats over the next year, and at some point setting a target for hiring staff.\r
diff --git a/EmailConfiguration.mdwn b/EmailConfiguration.mdwn
new file mode 100755 (executable)
index 0000000..93cd718
--- /dev/null
@@ -0,0 +1,66 @@
+Before continuing with this page, you probably want to read DomainTool to learn the basics of how we handle shared daemon configuration.\r
+\r
+There are two ways to control how exim handles mail sent to your domains.\r
+\r
+The first, simpler, and preferable way is to ask exim to redirect messages from particular input addresses to particular output addresses. These redirections are called aliases. This method avoids creating any new mailboxes, and it even supports redirecting to e-mail accounts on other servers.\r
+\r
+If you really need distinct mailboxes for different addresses at your domain, then you can use virtual mailboxes. While aliases work similarly to other DomainTool features, virtual mailboxes are managed with a special command-line tool {{{vmail}}}.\r
+\r
+= E-mail aliases =\r
+A {{{.aliases}}} file in a domain's directory controls its e-mail aliases. A {{{target}}} below may one of three things:\r
+\r
+ * a local username, to deliver mail to that user\r
+ * an e-mail address, to forward mail to it\r
+ * {{{!}}}, to drop mail to this address\r
+The file then consists of a sequence of lines of the following types. In each case, {{{targets}}} means a comma-separated list of one or more targets.  \r
+\r
+ * {{{user targets}}}: Send all mail to {{{user@domain}}} to {{{targets}}}.\r
+ * {{{* targets}}}: Send all mail to {{{domain}}} not matching any other rule to {{{targets}}}. However, if mail is sent to an existing UNIX username, the message will go to that account.\r
+ * {{{** targets}}}: Send all mail that does not match another rule to {{{domain}}} to {{{targets}}}, even mail addressed to real UNIX usernames.\r
+\r
+After you modify the {{{.aliases}}} file, run the command {{{domtool}}} followed by the command {{{reloadusers}}} for the changes to take effect.\r
+\r
+== Example: Using aliases to send e-mail to multiple accounts ==\r
+\r
+The email aliasing feature can be used to set up a mailing list where email to one address is sent to multiple addresses.  In order to do this, include a line similar to the following in your .aliases file (no caps, no spaces):\r
+\r
+{{{admins    beth@test.org,bob@test.org}}}\r
+\r
+In this example, {{{admins@yourdomain.org}}} would be the destination address that would send an email to both {{{beth@test.org}}} and {{{bob@test.org}}}.\r
+\r
+After you modify the {{{.aliases}}} file, run the command {{{domtool}}} followed by the command {{{reloadusers}}} for the changes to take effect.\r
+\r
+= Virtual e-mail addresses =\r
+You may create virtual e-mail boxes for any domains for which you have write permission in DomainTool. I think a few examples will explain the process well enough.\r
+\r
+Before continuing, however, please note that DomainTool allows you to create aliases that forward mail from one address to another. Aliases are much preferable to extra mailboxes, both in terms of conserving server resources and convenience for you, as you can continue checking one mail account even if multiple aliases point to it. The basic rule is: If you are creating a virtual mailbox that only you will read, or if you are creating multiple virtual mailboxes to be read by the same other person, then you should be using aliases instead.\r
+\r
+{{{\r
+% vmail your.domain add new.user\r
+Password: password\r
+Reenter password: password\r
+Mailbox created.\r
+% vmail your.domain list\r
+new.user\r
+% vmail your.domain passwd new.user\r
+Password: password'\r
+Reenter password: password'\r
+Password set.\r
+% reloadusers\r
+% vmail your.domain rm new.user\r
+Are you sure you want to remove new.user@your.domain? (yes/no) yes\r
+Removed.\r
+}}}\r
+Running {{{reloadusers}}} is necessary to update Courier's database with your new user information. You only need to run it at the end of a batch of modifications, including just a single modification. After doing this in the example, your new user can access his e-mail with username {{{new.user@your.domain}}} via SSL IMAP or POP3 at {{{mail.hcoop.net}}}. He could also use [http://mail.hcoop.net/ SquirrelMail].\r
+\r
+In the example above, the created mailbox lives at {{{/home/vmail/your.domain/new.user}}}. The files are owned by the creating user, so they will count towards your disk quota. This also means you can muck around with your virtual mailboxes directly, but I wouldn't advise it. However, you should only be able to screw yourself over by doing so. The one time when it's helpful to access them directly is when transferring mailboxes across machines.\r
+\r
+For your virtual mailboxes that are intended to be used by other people (which should be all of them!), we have [https://members.hcoop.net/passwd a web page] where your users can change their own passwords.\r
+\r
+= Backup MX services =\r
+See the {{{BackupMail}}} directive in DnsConfiguration.\r
+\r
+= Debugging mail problems =\r
+If you are having problems with e-mail accounts associated with a domain that you don't own, post a support request on [https://members.hcoop.net/portal/ the portal].\r
+\r
+For domains that you ''do'' own, you can run the {{{rlog domain.name}}} command to see those lines from the current mail log that contain your domain name. This won't always be all the information that you'd like to see, since log entries can be grouped without containing the domain name on each line, but it can be helpful all the same. A better solution might be put into place if someone develops one.\r
diff --git a/EnvironmentalPolicy.mdwn b/EnvironmentalPolicy.mdwn
new file mode 100755 (executable)
index 0000000..6176b67
--- /dev/null
@@ -0,0 +1,54 @@
+This page contains a draft of a proposed HCoop Environmental Policy. As always, add comments or proposed revisions here.\r
+\r
+== Background ==\r
+One of the defining SevenPrinciples of cooperatives is "Concern for Community," or more succinctly, Social Responsibility. A cooperative that ignores its social responsibility has ceased to be cooperative at all and has become a mutant, renegade firm. Environmental responsibility, then, is an extension of a cooperative's greater social responsibility.\r
+\r
+The greatest single resistance to a solid environmental policy is the attitude that it will increase costs with no tangible benefit. In fact, often environmental discipline yields a direct cost saving, and where additional costs are incurred they are usually small for this type of business. Additionally, the ability to certify our business as green and powered by renewable energy gives us bragging rights that few other services in a crowded field can offer, and can draw in more business from environmentally conscious consumers. This is the best kind of advertising money can buy.\r
+\r
+Moreover, the sooner we adopt a comprehensive policy, the easier it will be to stick to it, rather than doing it halfway and making excuses once we are large that we've never done it in the past.\r
+\r
+On to the substance:\r
+\r
+== Power ==\r
+Baseline: Zero carbon emissions, ideally from clean energy offsets.\r
+\r
+How: Purchasing renewable energy credits or carbon offsets equal to the number of KW-hours consumed by HCoop servers. NativeEnergy defines "renewable energy credits" this way:\r
+\r
+ . RECs are a commodity that consist of the rights to claim the emissions reductions and other environmental benefits of green power. RECs became a commodity because people who want to buy green power often don't have it available to them. No matter where you live, you can achieve the same environmental benefits of buying green power by buying RECs to “green-up” the generic electricity you get from your utility. Utilities often buy RECs on your behalf to provide you green power. RECs are also referred to as “green tags” and tradable renewable certificates.\r
+Where: Two of the better options I have found:\r
+\r
+ * [http://www.nativeenergy.com/ NativeEnergy] ''Wind''Builders.\r
+ * [http://www.carbonfund.org/ Carbonfund] Carbonfund offsets.\r
+Immediate cost: between $0.05 and $0.15 per member monthly. Future cost: the same or lower, as hardware utilization rates increase, and more efficient hardware is acquired.\r
+\r
+AdamChlipala says:\r
+\r
+ . I know we discussed this when you first joined, but would you mind rehashing here how buying energy credits allows us to be certified as powered by renewable energy, or how in general it can be seen as anything but a charitable donation unconnected to our real operations?\r
+  . NativeEnergy's CoolWatts certificates are certified by [http://www.green-e.org/ Green-e] as putting the number of KW-hours of wind energy on the face of the certificate into the electrical grid. Our servers directly consume electricity from coal, gas, and other non-renewable, polluting and greenhouse gas-emitting sources. We can calculate the exact amount of KW-hours of dirty power consumed by our servers and purchase certificates for that exact amount. If we average 10A of current, then we use 110V*10A*365.25*24/1000 = 9642 KW-hr per year. Buying 10,000 KW-hr of wind certificates would then be equivalent to powering our servers with wind turbines and displacing the dirty power that our servers otherwise use (which costs $8/mo from NativeEnergy. Once we migrate we will probably be using around 5A or less to begin, so the cost would be proportionately less). This is not a charitable donation, it is internalizing the direct environmental cost of our servers. If we bought more energy credits than the power that we actually consume, that would be a "charitable donation." Carbon credits are similar, except they use a more general market-based approach to dealing with greenhouse gases only through a variety of programs. --NathanKennedy\r
+== Hardware ==\r
+Baseline: Ensure that no HCoop electronics end up in landfill.\r
+\r
+How: At a minimum, send all hardware not sold or donated to a reputable recycling facility.\r
+\r
+Where: Suggestions?\r
+\r
+Immediate cost: none\r
+\r
+Future cost: Selling hardware could ''save'' money. Recycling could cost some money as hardware is retired. Some manufacturers will recycle their hardware for free.\r
+\r
+Links to computer recycling programs:\r
+\r
+ * [http://www.dell.com/recycle Dell Recycling]\r
+== Paper ==\r
+Baseline: Minimize use of paper. Use only post-consumer recycled/tree free paper.\r
+\r
+Where:\r
+\r
+ * [http://www.livingtreepaper.com/ Living Tree Paper] - post-consumer / hemp / flax paper\r
+DavidBettis says:\r
+\r
+ . I don't think creating policies that deal with products that are of such limited use to the coop need to be encoded in documents such as this. Alternatively, we could have a section that states that we should prefer recycled products, when economically feasible.\r
+Immediate cost: none, HCoop's use of paper is currently limited to occasional mailings and corporate records. Future cost: cost savings through conservation. Paper is such a tiny portion of cost that nominal premium for recycled or tree-free paper is nothing.\r
+\r
+== External Resources ==\r
+ * [http://www.phone.coop/about/envir_policy.html phone.coop's environmental policy]\r
diff --git a/FeedingSpamAssassin.mdwn b/FeedingSpamAssassin.mdwn
new file mode 100755 (executable)
index 0000000..98aa92c
--- /dev/null
@@ -0,0 +1,59 @@
+\r
+This page contains example scripts for automating the process of\r
+giving SpamAssassin feedback.\r
+\r
+= Warning =\r
+\r
+Your mileage may vary.  Feel free to fix bugs.  Test these scripts\r
+before making use of them.  Make sure you know what you're doing.\r
+\r
+= Scripts =\r
+\r
+'''feed-site-spam''': Feed uncaught spam messages to SpamAssassin.\r
+\r
+'''NOTE''': It is assumed that you empty your Spam folder after\r
+running this script.  Otherwise you'll feed some of the same messages\r
+to SpamAssassin every time you run the script.\r
+\r
+{{{\r
+#!/bin/bash\r
+\r
+# Location of your spam directory\r
+SPAMDIR=~/Maildir/.Spam.Definitely/cur\r
+\r
+# Destination directory for spam messages\r
+SHAREDDIR=/etc/spamassassin/Maildir/.SiteSpam/cur\r
+\r
+# Copy files were not marked as spam to the site folder\r
+for i in $(find $SPAMDIR -type f -print0 | xargs -0 grep -l "^X-Spam-Status: N");\r
+do\r
+    cp $i $SHAREDDIR\r
+done\r
+}}}\r
+\r
+\r
+'''feed-site-ham'''\r
+\r
+{{{\r
+#!/bin/bash\r
+\r
+# Prefix for folder locations\r
+MAILPRE=~/Maildir/.\r
+\r
+# IMAP directories that contain definite non-spam (ham)\r
+HAMDIRS="Bugs Family Friends Fun Gnu Info Lists Plug School Work"\r
+\r
+# Destination directory for ham messages\r
+SHAREDDIR=/etc/spamassassin/Maildir/.SiteHam/cur\r
+\r
+# Copy files that were erroneously marked as spam to the site folder.\r
+# Note: This includes email with a spam level of 3 or higher,\r
+#       30 days old or less.\r
+for i in $HAMDIRS; do\r
+    echo Learning ham in $i:\r
+    for i in $(find $MAILPRE$i/cur -type f -ctime 30 -print0 | xargs -0 grep -l "^X-Spam-Level:.*\*\*\*");\r
+    do\r
+        cp $i $SHAREDDIR\r
+    done\r
+done\r
+}}}\r
diff --git a/FileTransfer.mdwn b/FileTransfer.mdwn
new file mode 100755 (executable)
index 0000000..f4eab5e
--- /dev/null
@@ -0,0 +1,38 @@
+The recommended way (and possibly only reasonable way at the moment) to upload content from your computer to our servers (or the other way around if you want to make backups) is to use ''scp''. It is a secure and easy way to copy single files or whole directory trees.\r
+\r
+If all you want is to keep a directory at hcoop in sync with your local changes, you should consider using ''rsync''. It can significantly reduce bandwidth usage by only transmitting the differences between the two trees. Since version 2.6 ''rsync'' uses ''scp'' for file transfer by default. For older versions you have to use the ''-e'' (''--rsh'') option. For example:\r
+\r
+{{{\r
+rsync -avz -e ssh ~/html/hcoop/* username@hcoop.net:public_html\r
+}}}\r
+You can also use plain ''scp'', but it overwrites destination files and is usually only applicable when you are uploading new files to hcoop:\r
+\r
+{{{\r
+scp -r ~/html/hcoop/* username@hcoop.net:public_html\r
+}}}\r
+You can run command-line sftp (Secure FTP) tool:\r
+\r
+{{{\r
+sftp hcoop.net\r
+Connecting to hcoop.net...\r
+Password:\r
+sftp> help\r
+}}}\r
+With GUI FTP clients, SFTP connection is possible if the clients support "Secure FTP" or similar as the connection method. In Unix/Gnome, you could use for example ''gftp''; for Microsoft Windows, example clients are the free [http://WinSCP.sourceforge.net WinSCP], or proprietary FTP Voyager.\r
+\r
+We also started supporting the usual FTP protocol, but you need to request the ability to use it (see [https://members.hcoop.net Member Portal]), and we only allow "SSL Auth" method (see FtpConfiguration). Here's an example:\r
+\r
+{{{\r
+ftp hcoop.net\r
+Connected to hcoop.net.\r
+220 fyodor.hcoop.net FTP server ready.\r
+Name (hcoop.net:user):\r
+234 AUTH SSL OK.\r
+[SSL Cipher AES256-SHA]\r
+331 Password required for user.\r
+Password:\r
+User logged in.\r
+Remote system type is UNIX.\r
+Using binary mode to transfer files.\r
+ftp> help\r
+}}}\r
diff --git a/FinancingIssues.mdwn b/FinancingIssues.mdwn
new file mode 100755 (executable)
index 0000000..de6bcb8
--- /dev/null
@@ -0,0 +1,39 @@
+'''This page is out of date.  See [http://members.hcoop.net/portal/pledge the pledge page] for the current situation.  The default amount in the "calculate your share" box is what we expect to pay per month.'''\r
+\r
+Various quandries in how we pay for all this cool stuff\r
+\r
+= One-time costs =\r
+If you are willing to chip in towards the $3102 in one-time costs that we are pondering now for our new hosting set-up, either through a donation, a loan/bond, or some other scheme of your own devising, then please record here your name and the details of your offer.\r
+\r
+ * AdamChlipala is willing to make a donation towards this if a few other people agree to split the costs evenly. He'd also probably waive his right to interest payments if a bond-based scheme ends up being the clear winner.\r
+ * FrankBynum is willing to make a donation as well, though would prefer to defer his payment until the end of August when his student loans come through. He could pay now if necessary, though. He would similarly waive interest payments, and is intrigued by the bond setup if there is enough support for it.\r
+ * ShaunEmpie is a fan of the bond scheme, but will also go with a no interest loan if the bond idea does not fly. The amount of the loan is TBD.\r
+ * TerrenceBrannon is willing to make a donation fo USD $50.00\r
+ * AndreKuehne is willing to make a donation of $50.\r
+ * NathanKennedy is willing to indefinitely keep his ~$450 balance already on deposit with the co-op, and make an additional $240 interest-free loan, to be paid back into his account in 24 monthly installments of $10. Additionally, he is willing to donate the first year of renewable energy credits, suggesting ''Cool''Watts from ''Native''Energy—i.e. the co-op would sign up to have the funds debited from its checking account, and for the first year for this to be debited in turn from ntk's balance.\r
+ * TanveerSingh is willing to put in 200$ as an interest free loan, paid back over 20 months. This loan may be adjusted in his monthly payments to the coop if so desired\r
+ * JeffreyDrake is additionally concerned about the idea of the cooperative getting into this much debt. The current funds are dictated by what the members put in. The members put in based on service costs. I can see this being a problem for payback later on, possibly even if it is by&nbs