Tips en Trucs 2011

Virtuele Webserver voor het onderwijs (SNT) users.webserver.snt Webserver afsluiten

Nieuw in deze versie

Licentie en gebruiksvoorwaarden

De Stedelijke Nijverheids- en Taalleergangen Brugge (hierna ook "SNT" genoemd) geeft u als gebruiker voor de door ons ontwikkelde software het recht deze software op meerdere computers te gebruiken. Bovenstaande licentieregeling geldt uiteraard niet voor alle overige software zoals de GPL-software. Voor de licentievoorwaarden van de software van derden verwijzen wij naar de desbetreffende softwarefabrikanten. Dit pakket bevat een verzameling van verschillende programma's. Vele daarvan kunnen alleen onder specifieke omstandigheden worden gebruikt. Wij waarschuwen uitdrukkelijk tegen het gebruik van de programma's zonder grondige kennis van hun eigenschappen. De SNT geeft geen enkele garantie betreffende het correct functioneren in willekeurig wat voor omgeving en aanvaardt ook geen enkele aansprakelijkheid voor schade ontstaan door het uitvallen van computers, gegevensverlies, beschadigingen of andere oorzaken, noch voor een uit een schadegeval voortvloeiende verdere schade van wat voor aard dan ook. Het gebruik van de programma's gebeurt dus uitsluitend op eigen risico. Copyright van de programma's berust bij de auteurs. Alle overige programma's: copyright (c) 2011 Stedelijke Nijverheids- en Taalleergangen, Arsenaalstraat 4, 8000 Brugge (België). Alle rechten voorbehouden.
Deze webserver gebruikt openSUSE 11.4 en VMware Player.

Copyright (C) 2011 Dany Pinoy voor SNT Brugge.

Algemene kenmerken

Beveiliging
Deze webserver heeft als doel om in een klasomgeving gebruikt te worden als oefenserver. De beveiliging van deze webserver is ontoereikend om op het internet gebruikt te worden.
Wachtwoorden
Alle gebruikte wachtwoorden zijn identiek, nml.: snt+456 (zie Beveiliging hierboven).
Standaard gebruikers
De webserver kan 20 gebruikers gelijktijdig bedienen. De namen van de gebruikers begint steeds met pc gevolgd door een tweecijferig nummer. Enkele voorbeelden: de eerste gebruiker heeft als naam pc01, de tiende gebruiker pc10, enz.
Ideaal voor scholen
Door de eenvoudige installatie en automatische configuratie kan iedereen die een programma kan opstarten deze distributie installeren. De geïnstalleerde servers werken onafhankelijk van het besturingssysteem en kunnen dus zowel in een netwerk (op school) of op een standalone computer (thuis bij de leerkracht) hun diensten aanbieden. De servers maken geen gebruik van besturingssysteem afhankelijke functies zoals het register of gebruikers. Alle instellingen worden opgeslagen in bestanden op de harde schijf. Deze methode zorgt ervoor dat na het verwijderen van de distributie van de computer er geen sporen achterblijven op de harde schijf of in het besturingssysteem. Het verwijderen van de distributie en het vervolgens opnieuw installeren zorgt er dus voor dat de servers (waarbij de eventueel gemaakte oefeningen verdwijnen) met een schone lei kunnen beginnen. Ideaal voor schoolse omgevingen.

De webserver op de computer installeren

De webserver kun je installeren op zowel Linux als op Windows. Voor Windows is er een installatieprogramma (enkel getest op Windows 7 64 bits). Het Windows installatie programma kun je hier downloaden. Naast het installatie programma heb je zowel voor Linux als Windows het Webserver Archief nodig. Het Webserver Archief kun je hier downloaden (ca. 407 MB). De webserver heeft het programma VMware Player nodig. De versies voor Linux en Windows kun je na registratie hier gratis downloaden en gebruiken. Linux gebruikers kunnen de cursus Linux raadplegen om de VMware Player en de webserver uit te pakken en te installeren. De Windows gebruikers kunnen het uitpakken van het Webserver Archief (7-Zip) en het installeren van de VMware Player manueel uitvoeren of gebruik maken van het installatieprogramma.

Download alle onderdelen naar de map Downloads van Windows 7. Start het installatieprogramma "WebserverSetup". Klik op de knop Ja om in het dialoogvenster Gebruikersaccountbeheer het installatieprogramma WebserverSetup.exe toestemming te geven om wijzigingen aan uw computer aan te brengen. Open in het volgende dialoogvenster de gedownloade VMware Player Installer (deze stap is enkel nodig indien de VMware Player nog niet op de computer geïnstalleerd is). Open in het volgende dialoogvenster het gedownloade Webserver Archief webserver.tar.bz2. Daarna verschijnt het venster waarin webserver.tar wordt uitgepakt. Daarna verschijnt het venster om de webserver onderdelen uit te pakken. Nadat het installatieprogramma aangeeft dat de installatie voltooid is, wordt de VMware Player Setup automatisch opgestart (enkel indien de VMware Player nog niet op de computer geïnstalleerd is). Werk de VMware Player Setup af door alle vensters te bevestigen. De computer moet op het einde van de installatie herstart worden.

VMware Player en de webserver afzonderlijk installeren

Naast het gebruik van het installatieprogramma kun je zowel de VMware Player en de webserver afzonderlijk installeren. Dit is vooral handig voor mensen die niet werken met Windows 7 64 bits of mensen die zelf willen bepalen waar de bestanden van de virtuele computer op hun computer terecht komen.

Installeer de VMware Player door het installatieprogramma te starten. De dialoogvensters van het installatieprogramma kun je allemaal bevestigen met de standaard voorgestelde instellingen. Na de installatie moet je Windows laten herstarten om de installatie te voltooien.

De webserver bestaat uit een ingepakte map in het bestand webserver.tar.bz2. Je moet dus een programma bezitten om tar.bz2 bestanden uit te pakken. Dit kan met 7-Zip of PeaZip. Dit verloopt in twee stappen: eerst wordt het bz2 uitgepakt naar een tar bestand, daarna wordt het tar bestand uitgepakt naar de verschillende bestanden die samen de virtuele webserver bevatten. Deze bestanden zitten in het tar bestand in de map vmware/Webserver.

Het uitpakken van dit bestand kan naargelang de snelheid van uw computer veel tijd in beslag nemen.

De webserver starten met VirtualBox

Mensen die liever VirtualBox dan VMware gebruiken kunnen de webserver in OVF formaat downloaden. VirtualBox is voor Mac OS X gebruikers de enige manier om gratis virtuele computers te starten.

De webserver van de computer verwijderen

Start in het Startmenu de toepassing Alle programma's > Pinda > Webserver verwijderen en volg de instructies van de assistent. Na het verwijderen van de webserver van de computer blijft het programma VMware Player op de computer staan. Dit programma kun je via het Configuratiescherm > Een Programma verwijderen van de computer verwijderen.

De webserver starten

Start in het Startmenu de toepassing Alle programma's > Pinda > Webserver. Je kunt de webserver ook starten door dubbel te klikken op het bestand Webserver.vmx (heeft een pictogram met 3 vierkanten) in de uitgepakte vmware/Webserver map. Bij de eerste start van de VMware Player moet je de Licence Agreement accepteren. Bij elke start verschijnt het venster Software Updates waarmee je de VMware Tools for Linux kunt downloaden. Deze software heb je voor de webserver niet nodig en mag je negeren door op de knop Remind Me Later te klikken. Indien er verwisselbare apparaten op uw computer aangesloten zijn, verschijnt het dialoogvenster Removable Devices. Ook deze verwisselbare apparaten worden door de webserver niet gebruikt. Om dit dialoogvenster bij de volgende start van de webserver niet meer te krijgen, plaats je een vinkje bij de optie Never show this hint when starting a VM en klik je op de knop OK. Na het starten verschijnt een venster zoals in de afbeelding hieronder. Let daarbij op de regel Voor meer informatie surf je naar http:// gevolgd door het IP adres van de webserver. Dit venster mag je minimaliseren, de webserver blijft werken in geminimaliseerde weergave. Mocht je toevallig op het zwarte vlak geklikt hebben, werkt het toetsenbord en de muis enkel nog in de virtuele webserver. Om de muis en het toetsenbord terug in Windows te kunnen gebruiken, druk je de toetscombinatie Ctrl+Alt.

De webserver afsluiten

Klik op de knop Webserver afsluiten bovenaan rechts op deze webpagina om de webserver af te sluiten. Daarbij kan de browser een foutmelding tonen waarmee de browser duidelijk maakt dat de pas afgesloten webserver niet meer bereikbaar is.

Je kan de Webserver ook afsluiten door op het zwarte scherm van de virtuele computer het VMware venster te klikken. Daarna typ je de login root gevolgd door Enter in. Als wachtwoord gebruik je snt+456 gevolgd door Enter. Typ daarna de opdracht halt gevolgd door Enter. Daarna wacht je tot de virtuele computer afgesloten wordt en het VMware venster zich automatisch sluit.

Opgelet: Sluit de Webserver niet af via de sluitknop in de titelbalk van het VMware venster. Daardoor wordt de Webserver niet afgesloten, maar gaat deze in een slaaptoestand. Bij de volgende start van de Webserver ontwaakt de Webserver terug uit zijn slaaptoestand. Een uit zijn slaap ontwakende computer krijgt geen nieuw IP-adres en zal dus niet correct werken (bereikbaar zijn). Daarvoor sluit je de ontwaakte virtuele computer correct af (tweede methode) en herstart je de Webserver.

Werken met een domeinnaam

De webserver kun je altijd bereiken door te surfen naar http://IPadres waarbij je IPadres vervangt door het IP adres van de webserver. Het IP adres van de webserver kun je aflezen op het zwarte scherm van de webserver in de regel

Voor meer informatie surf je naar http://10.0.0.138.
In het voorbeeld hierboven is het IP adres van de webserver 10.0.0.138.

In de praktijk gebruikt men geen IP adressen maar domeinnamen. Je kan het gebruik van de domeinnaam users.webserver.snt (naar analogie met users.telenet.be en users.skynet.be) simuleren door de volgende werkwijze op alle computers die de domeinnaam willen gebruiken uit te voeren:

Internet Explorer 9
Om deze webserver via de domeinnaam users.webserver.snt te bereiken, klik je met de rechter muisknop op de knop users.webserver.snt op deze webpagina.
Firefox
Klik op de knop users.webserver.snt op deze webpagina om het script in het browservenster te laden.
Waarschuwing
Deze bewerking past instellingen in het bestand drivers\etc\hosts in de systeemmap van uw computer aan. Deze kunnen enkel manueel verwijderd worden. Het enige gevolg van deze aanpassing is dat de website http://users.webserver.snt niet meer op het internet bereikt kan worden. Bij mijn weten bestaat deze site niet eens.

De FTP server

De FTP server kun je gebruiken om bestanden te publiceren. De FTP server heeft standaard 20 gebruikers (van pc01 tot en met pc20) die enkel toegang krijgen via het wachtwoord snt+456 (hetzelfde wachtwoord voor alle gebruikers, eenvoudig voor de les). Elke gebruiker heeft in de gedeelde map htdocs zijn eigen map (zie Bestandsbeheer). De FTP server is bereikbaar via ftp://IPadres of ftp://users.webserver.snt (zie Werken met een domeinnaam) of in Dreamweaver via het dialoogvenster Sitedefinitie in de Categorie Externe informatie (zie afbeelding). Let op het vinkje bij Passieve FTP gebruiken.

De FTP server start automatisch bij het opstarten van de webserver.

De Mailserver

De mailserver bestaat uit een SMTP Server (om mails te verzenden) en een POP3/IMAP Server (om mails te verzamelen en ter beschikking van een mail-client te stellen, dus om mails te ontvangen). De mailserver kent standaard 20 gebruikers (van pc01@webserver.snt tot en met pc20@webserver.snt). Al deze gebruikers hebben hetzelfde wachtwoord (namelijk: snt+456). De mailserver start automatisch op bij het opstarten van de webserver. Elke gebruiker heeft in de gedeelde map htdocs zijn eigen map met daarin de map Mail met daarin de ontvangen, verstuurde en verwijderde mails (zie Bestandsbeheer). De map Mail wordt automatisch aangemaakt bij het eerste gebruik van de mailserver (verzenden of ontvangen van de eerste mail). Deze map wordt beheerd door de mailserver en kan dus niet door een FTP gebruiker verwijderd worden (kan dus ook niet verwijderd worden vanuit het publiceren venster van Dreamweaver).

Webmail

Om tijdens de lessen webdesign op een eenvoudige manier de resultaten van een verzonden formulier te controleren, kun je de mailboxen ook raadplegen door te surfen naar de submap webmail (vb: http://IPadres/webmail of http://users.webserver.snt/webmail - zie Werken met een domeinnaam).
Vul de volgende zaken in:

Gebruikersnaam: pc01 (welke mailbox wil je raadplegen)
Wachtwoord: 	snt+456
En klik op de knop Aanmelden om mails te lezen.

Formulieren verwerken (nieuwe methode)

Als cgi-script om formulieren te verwerken werd gekozen voor het script FormMail 8.28 van Tectite.com.
Er kunnen enkel mails gestuurd worden naar mailadressen die eindigen op @webserver.snt (zoals pc01@webserver.snt).

Het formulier moet bij het verzenden het script /cgi-bin/formmail.php oproepen (Actie) en gebruikt de POST methode. Het script om het formulier om te zetten naar een e-mail werkt enkel indien het formulier op de webserver staat. M.a.w. publiceer het formulier op de webserver alvorens het te testen.

De volgende velden (al dan niet verborgen) zijn noodzakelijk om het ingevulde formulier naar een @webserver.snt postbus te sturen:

Het volgende veld is optioneel voor het script, maar is in de praktijk wel nuttig:

De volgende velden zijn optioneel:

Voor een volledige handleiding bezoek je de site van FormMail.

Voorbeeld formulier
Verplichte velden Vul hier een waarde in Verplichte velden Vul hier een waarde in
recipients email
realname subject
Niet verplichte velden Vul hier een waarde in Niet verplichte velden Vul hier een waarde in
cc bcc
good_url bad_url
Onderstaande veld heeft geen invloed op de werking van FormMail
Vrij bericht

(dit formulier werkt alleen als het op de virtuele webserver staat)

Het verzonden formulier kon niet verwerkt worden, gelieve op een andere manier contact met ons op te nemen.

Formulieren verwerken (oude methode)

Deze methode zal in de volgende versie van de webserver niet verder ondersteund worden.

Als cgi-script om formulieren te verwerken werd gekozen voor het script FormMail 1.93 van Matthew M. Wright. Dit script wordt onder andere gebruikt door de providers Scarlet en One.com.
Er kunnen enkel mails gestuurd worden naar mailadressen die eindigen op @webserver.snt (zoals pc01@webserver.snt).

Het formulier moet bij het verzenden het script /cgi-bin/formmail oproepen (Actie) en gebruikt de POST methode. Het script om het formulier om te zetten naar een e-mail werkt enkel indien het formulier op de webserver staat. M.a.w publiceer het formulier op de webserver alvorens het te testen.

Het volgende veld (al dan niet verborgen) is noodzakelijk om het ingevulde formulier naar een @webserver.snt postbus te sturen:

  1. recipient: bevat het e-mailadres van de ontvanger

De volgende velden zijn optioneel voor het script, maar zijn noodzakelijk om niet door spamfilters en/of webservers weerhouden te worden:

  1. email: bevat het e-mailadres van degene die het formulier opstuurt (dit veld is verplicht omdat de mailserver anders weigert de email door te sturen, veel mailservers eisen dit tegenwoordig om te voorkomen dat hun server misbruikt wordt).
  2. subject: Onderwerp van de e-mail.
    <input type=hidden name="subject" value="Resultaten van webformulier">

De volgende velden zijn optioneel:

  1. redirect: URL van een pagina die getoond moet worden na verzending
    <input type=hidden name="redirect"
                        value="http://www.snt.be/verzonden.html">
  2. realname: Naam van de afzender
    <input type=text name="realname">
  3. required: zorgt ervoor dat de veldnamen (gescheiden door komma's) die voorkomen in de waarde van dit veld ingevuld zijn bij het verzenden, indien dit niet het geval is, krijgt de gebruiker een foutmelding.
    <input type=hidden name="required" value="email,phone">
  4. env_report: verzamelt gegevens van de afzender zoals: REMOTE_HOST (computernaam), REMOTE_ADDR (ip-adres van de computer), REMOTE_USER (gebruikersnaam na autentificatie), HTTP_USER_AGENT (browser). Deze omgevingsvariabelen moeten in de waarde van het veld opgenomen worden, gescheiden door komma's.
    <input type=hidden name="env_report" value="REMOTE_HOST,
                                               HTTP_USER_AGENT">
  5. sort: sorteert de velden naar wens alfabetisch of naar een eigen opgegeven volgorde.
    <input type=hidden name="sort" value="alphabetic">
    <input type=hidden name="sort" value="order:name1,name2,
                                          name3,etc...">
  6. print_config: de waarde bepaalt welke velden opgenomen worden in de email.
    <input type=hidden name="print_config" value="email,subject">
  7. print_blank_fields: indien de waarde 1 is, worden alle velden - ook de lege, niet ingevulde velden - in de mail opgenomen. Standaard worden alleen de ingevulde velden opgenomen.
    <input type=hidden name="print_blank_fields" value="1">
  8. title: de titel van de resultaat-pagina indien geen redirect pagina werd opgegeven.
    <input type=hidden name="title" value="Verzonden formulier">
  9. return_link_url: plaats een link op de resultaat-pagina indien geen redirect pagina werd opgegeven.
    <input type=hidden name="return_link_url" value="http://www.snt.be/index.htm">
  10. return_link_title: de tekst van de hyperlink op de resultaat-pagina.
    <input type=hidden name="return_link_title" value="Terug naar de hoofdpagina">
  11. missing_fields_redirect: link naar een eigen fout-pagina, indien verplichte velden ontbreken. Deze vervangt dan de standaard fout-pagina.
    <input type=hidden name="missing_fields_redirect" value="http://www.snt.be/verplicht.html">
  12. background: stelt een achtergrondfiguur voor de resultaat-pagina in.
    <input type=hidden name="background" value="http://www.snt.be/images/achtergrond.gif">
  13. bgcolor: stelt een achtergrondkleur voor de resultaat-pagina in.
    <input type=hidden name="bgcolor" value="#FFFFFF">
  14. text_color: stelt de tekstkleur op de resultaatpagina in.
    <input type=hidden name="text_color" value="#000000">
  15. link_color: stelt de linkkleur op de resultaat-pagina in.
    <input type=hidden name="link_color" value="FF0000">
  16. vlink_color: stelt de kleur van een bezochte link op de resultaat-pagina in.
    <input type=hidden name="vlink_color" value="#0000FF">
  17. alink_color: stelt de kleur van een actieve link op de resultaat-pagina in.
    <input type=hidden name="alink_color" value="#00FF00">
Voorbeeld formulier
Verplichte velden Vul hier een waarde in Verplichte velden Vul hier een waarde in
recipient email
Niet verplichte velden Vul hier een waarde in Niet verplichte velden Vul hier een waarde in
subject redirect
realname required
env_report sort
print_config print_blank_fields
title return_link_url
return_link_title missing_fields_redirect
background bgcolor
text_color link_color
vlink_color alink_color
Onderstaande veld heeft geen invloed op de werking van FormMail
Vrij bericht

(dit formulier werkt alleen als het op de virtuele webserver staat)

MySQL Databaseserver

Elke gebruiker (pc01 tot en met pc20 gebruiken als wachtwoord snt+456) heeft zijn eigen database (database01 tot en met database20). De gebruikers kunnen hun eigen database naar believen manipuleren. De root gebruiker (wachtwoord snt+456) kan alle databases manipuleren en beheren. De eenvoudigste manier om de databases te beheren is via phpMyAdmin, bereikbaar via de webinterface http://IPadres/phpmyadmin of http://users.webserver.snt/phpmyadmin (zie Werken met een domeinnaam).

De webserver beheren

Bestandsbeheer
De bestanden op de webserver kun je beheren via een CIFS verbinding. M.a.w. een Gedeelde map op de webserver. Deze kun je bereiken door in de adresbalk van de bestandsbeheerder \\IPadres te typen, waarbij je IPadres vervangt door het IP adres van de webserver. De CIFS verbinding gebruikt geen wachtwoord en heeft alle rechten (wees dus voorzichtig).
Systeembeheer
Het systeem van de webserver is bereikbaar via een SSH verbinding of rechtstreeks via het venster van de VMware Player.

Problemen oplossen

Pagina wordt niet weergegeven in Internet Explorer
Dit is te wijten aan de Beveiligde modus van Internet Explorer. Klik dubbel op de tekst Beveiligde modus in de statusbalk onderaan het browservenster. Schakel het vinkje bij Beveiligde modus inschakelen uit en terug in (of omgekeerd). Bevestig het dialoogvenster met de knop OK. Druk op de toets F5 om de pagina te vernieuwen.
Geen verbinding met webserver
Dit is meestal te wijten aan het gebruik van een proxy-server. Zorg in de instellingen van de gebruikte browser dat er voor het IP adres van de webserver (of/en users.webserver.snt) geen proxy gebruikt wordt.
Geen IP adres gekregen
De webserver krijgt een IP adres van een DHCP server. Thuis is dat meestal uw router (apparaat tussen de computer en het internet).
Daarvoor moet je een werkende virtuele netwerkkaart hebben. De werking van de virtuele netwerkkaart kan gestoord worden door de aanwezigheid van andere virtuele netwerkkaarten. Bijvoorbeeld van VirtualBox. Deze virtuele netwerkkaarten blijven zelf na het verwijderen van VirtualBox actief. M.a.w. verwijder aanwezige virtuele netwerkverbindingen manueel.
Geen FTP verbinding
De FTP server van deze webserver gebruikt veilige Passieve FTP verbindingen. In Dreamweaver moet je dus de optie Passieve FTP gebruiken aanvinken.

Beschrijving van hoe deze webserver tot stand kwam

Virtuele VMware computer

Bij het aanmaken van de virtuele computer let je op de volgende zaken: Na het aanmaken van de virtuele computer, pas je de virtuele hardware als volgt aan (Edit virtual machine settings): De instellingen op het tabblad Options pas je als volgt aan:

Om de virtuele computer op andere systemen nieuwe netwerkverbindingen te laten aanmaken (meerdere virtuele webservers op één netwerk zijn daardoor mogelijk), moet bij de eerste start de virtuele computer als gekopieerd beschouwd worden. Sluit daarvoor de VMware Player af. Dit kun je als standaard instellen door de regel
uuid.action = "create" toe te voegen aan het configuratiebestand vmware/Webserver/Webserver.vmx van de virtuele computer (linux opdracht: echo "uuid.action = \"create\"" >> vmware/Webserver/Webserver.vmx) (bron: sanbarrow.com).

Bij de eerste start van de virtuele computer klik je op het zwarte scherm van de virtuele computer om het toetsenbord en de muis aan de virtuele computer over te dragen. Daarna druk je bij het verschijnen van het VMware logo op de Esc toets om het opstartmenu te activeren. In het opstartmenu van de virtuele computer selecteer je met de pijl toetsen <Enter Setup>. Druk Return om de bios van de virtuele computer aan te passen. Bij de Keyboard Features kun je de NumLock optie met de spatiebalk instellen op On. Dit zorgt ervoor dat bij het opstarten van de virtuele computer de numerieke cijfertoetsen geactiveerd worden. Druk F10 om de instelling op te slaan en openSUSE 11.4 te installeren.

Installatie openSUSE 11.4

Installatie en configuratie van de webserver

Nu we geen installatiemedia meer nodig hebben, pas je de virtuele hardware van de virtuele computer via Edit virtual machine settings in de VMware Player als volgt aan: De webserver kan geïnstalleerd worden door rechtstreeks in het VMware Player venster te werken of via een SSH verbinding.

De gebruikte scripts

Het opstartscript pinda

#!/bin/sh
#
#     Template SUSE system startup script for oefenwebserver voor lokaal gebruik
#     Copyright (C) 2011  Dany Pinoy for openSUSE
#
#     This library is free software; you can redistribute it and/or modify it
#     under the terms of the GNU Lesser General Public License as published by
#     the Free Software Foundation; either version 2.1 of the License, or (at
#     your option) any later version.
#
#     This library is distributed in the hope that it will be useful, but
#     WITHOUT ANY WARRANTY; without even the implied warranty of
#     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
#     Lesser General Public License for more details.
#
#     You should have received a copy of the GNU Lesser General Public
#     License along with this library; if not, write to the Free Software
#     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307,
#     USA.
#
# /etc/init.d/pinda
#
### BEGIN INIT INFO
# Provides:          pinda
# Required-Start:    $syslog $remote_fs
# Should-Start: 
# Required-Stop:     $syslog $remote_fs
# Should-Stop: 
# Default-Start:     3 5
# Default-Stop:      0 1 2 6
# Short-Description: webserver
# Description:       Start de oefenwebserver voor een lokaal netwerk
### END INIT INFO

. /etc/rc.status

# Reset status of this service
rc_reset

case "$1" in
    start)
	echo -n "Starting Pinda "
	/usr/bin/setterm -blank 0 # Schakel de schermbeveiliging uit
	# aanpassen welkomsbericht na het opstarten van het systeem
	if [ ! -e /etc/issue.ori ]; then
	    cp /etc/issue /etc/issue.ori
	fi
	ipadres="`/sbin/ifconfig eth0 | grep 'inet ' | cut -d : -f2 | cut -d ' ' -f1`"
	if [ ! $ipadres ]; then
	    ipadres="`/sbin/ifconfig eth1 | grep 'inet ' | cut -d : -f2 | cut -d ' ' -f1`"
	fi
	echo "Welkom op de oefenwebserver - Kernel \r" > /etc/issue
	echo "Voor meer informatie surf je naar http://$ipadres." >> /etc/issue
	echo "Copyright (C) 2011 Dany Pinoy voor SNT Brugge" >> /etc/issue
	echo >> /etc/issue

	/usr/bin/sed "s/webserveripadres/$ipadres/" /srv/www/htdocs/webserverhosts.vbs.skel > /srv/www/htdocs/webserverhosts.vbs

	# Remember status and be verbose
	rc_status -v
	;;
    stop)
	echo -n "Shutting down Pinda "
	# Remember status and be verbose
	rc_status -v
	;;
    *)
	echo "Usage: $0 {start|stop}"
	exit 1
	;;
esac
rc_exit

Het bestand pinda.sql met de SQL opdrachten om gebruikers en hun database aan te maken

CREATE USER 'pc01'@'localhost' IDENTIFIED BY 'snt+456';
GRANT USAGE ON * . * TO 'pc01'@'localhost' IDENTIFIED BY 'snt+456' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;
CREATE DATABASE IF NOT EXISTS `database01` ;
GRANT ALL PRIVILEGES ON `database01` . * TO 'pc01'@'localhost';

CREATE USER 'pc02'@'localhost' IDENTIFIED BY 'snt+456';
GRANT USAGE ON * . * TO 'pc02'@'localhost' IDENTIFIED BY 'snt+456' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;
CREATE DATABASE IF NOT EXISTS `database02` ;
GRANT ALL PRIVILEGES ON `database02` . * TO 'pc02'@'localhost';

CREATE USER 'pc03'@'localhost' IDENTIFIED BY 'snt+456';
GRANT USAGE ON * . * TO 'pc03'@'localhost' IDENTIFIED BY 'snt+456' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;
CREATE DATABASE IF NOT EXISTS `database03` ;
GRANT ALL PRIVILEGES ON `database03` . * TO 'pc03'@'localhost';

CREATE USER 'pc04'@'localhost' IDENTIFIED BY 'snt+456';
GRANT USAGE ON * . * TO 'pc04'@'localhost' IDENTIFIED BY 'snt+456' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;
CREATE DATABASE IF NOT EXISTS `database04` ;
GRANT ALL PRIVILEGES ON `database04` . * TO 'pc04'@'localhost';

CREATE USER 'pc05'@'localhost' IDENTIFIED BY 'snt+456';
GRANT USAGE ON * . * TO 'pc05'@'localhost' IDENTIFIED BY 'snt+456' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;
CREATE DATABASE IF NOT EXISTS `database05` ;
GRANT ALL PRIVILEGES ON `database05` . * TO 'pc05'@'localhost';

CREATE USER 'pc06'@'localhost' IDENTIFIED BY 'snt+456';
GRANT USAGE ON * . * TO 'pc06'@'localhost' IDENTIFIED BY 'snt+456' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;
CREATE DATABASE IF NOT EXISTS `database06` ;
GRANT ALL PRIVILEGES ON `database06` . * TO 'pc06'@'localhost';

CREATE USER 'pc07'@'localhost' IDENTIFIED BY 'snt+456';
GRANT USAGE ON * . * TO 'pc07'@'localhost' IDENTIFIED BY 'snt+456' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;
CREATE DATABASE IF NOT EXISTS `database07` ;
GRANT ALL PRIVILEGES ON `database07` . * TO 'pc07'@'localhost';

CREATE USER 'pc08'@'localhost' IDENTIFIED BY 'snt+456';
GRANT USAGE ON * . * TO 'pc08'@'localhost' IDENTIFIED BY 'snt+456' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;
CREATE DATABASE IF NOT EXISTS `database08` ;
GRANT ALL PRIVILEGES ON `database08` . * TO 'pc08'@'localhost';

CREATE USER 'pc09'@'localhost' IDENTIFIED BY 'snt+456';
GRANT USAGE ON * . * TO 'pc09'@'localhost' IDENTIFIED BY 'snt+456' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;
CREATE DATABASE IF NOT EXISTS `database09` ;
GRANT ALL PRIVILEGES ON `database09` . * TO 'pc09'@'localhost';

CREATE USER 'pc10'@'localhost' IDENTIFIED BY 'snt+456';
GRANT USAGE ON * . * TO 'pc10'@'localhost' IDENTIFIED BY 'snt+456' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;
CREATE DATABASE IF NOT EXISTS `database10` ;
GRANT ALL PRIVILEGES ON `database10` . * TO 'pc10'@'localhost';

CREATE USER 'pc11'@'localhost' IDENTIFIED BY 'snt+456';
GRANT USAGE ON * . * TO 'pc11'@'localhost' IDENTIFIED BY 'snt+456' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;
CREATE DATABASE IF NOT EXISTS `database11` ;
GRANT ALL PRIVILEGES ON `database11` . * TO 'pc11'@'localhost';

CREATE USER 'pc12'@'localhost' IDENTIFIED BY 'snt+456';
GRANT USAGE ON * . * TO 'pc12'@'localhost' IDENTIFIED BY 'snt+456' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;
CREATE DATABASE IF NOT EXISTS `database12` ;
GRANT ALL PRIVILEGES ON `database12` . * TO 'pc12'@'localhost';

CREATE USER 'pc13'@'localhost' IDENTIFIED BY 'snt+456';
GRANT USAGE ON * . * TO 'pc13'@'localhost' IDENTIFIED BY 'snt+456' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;
CREATE DATABASE IF NOT EXISTS `database13` ;
GRANT ALL PRIVILEGES ON `database13` . * TO 'pc13'@'localhost';

CREATE USER 'pc14'@'localhost' IDENTIFIED BY 'snt+456';
GRANT USAGE ON * . * TO 'pc14'@'localhost' IDENTIFIED BY 'snt+456' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;
CREATE DATABASE IF NOT EXISTS `database14` ;
GRANT ALL PRIVILEGES ON `database14` . * TO 'pc14'@'localhost';

CREATE USER 'pc15'@'localhost' IDENTIFIED BY 'snt+456';
GRANT USAGE ON * . * TO 'pc15'@'localhost' IDENTIFIED BY 'snt+456' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;
CREATE DATABASE IF NOT EXISTS `database15` ;
GRANT ALL PRIVILEGES ON `database15` . * TO 'pc15'@'localhost';

CREATE USER 'pc16'@'localhost' IDENTIFIED BY 'snt+456';
GRANT USAGE ON * . * TO 'pc16'@'localhost' IDENTIFIED BY 'snt+456' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;
CREATE DATABASE IF NOT EXISTS `database16` ;
GRANT ALL PRIVILEGES ON `database16` . * TO 'pc16'@'localhost';

CREATE USER 'pc17'@'localhost' IDENTIFIED BY 'snt+456';
GRANT USAGE ON * . * TO 'pc17'@'localhost' IDENTIFIED BY 'snt+456' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;
CREATE DATABASE IF NOT EXISTS `database17` ;
GRANT ALL PRIVILEGES ON `database17` . * TO 'pc17'@'localhost';

CREATE USER 'pc18'@'localhost' IDENTIFIED BY 'snt+456';
GRANT USAGE ON * . * TO 'pc18'@'localhost' IDENTIFIED BY 'snt+456' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;
CREATE DATABASE IF NOT EXISTS `database18` ;
GRANT ALL PRIVILEGES ON `database18` . * TO 'pc18'@'localhost';

CREATE USER 'pc19'@'localhost' IDENTIFIED BY 'snt+456';
GRANT USAGE ON * . * TO 'pc19'@'localhost' IDENTIFIED BY 'snt+456' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;
CREATE DATABASE IF NOT EXISTS `database19` ;
GRANT ALL PRIVILEGES ON `database19` . * TO 'pc19'@'localhost';

CREATE USER 'pc20'@'localhost' IDENTIFIED BY 'snt+456';
GRANT USAGE ON * . * TO 'pc20'@'localhost' IDENTIFIED BY 'snt+456' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;
CREATE DATABASE IF NOT EXISTS `database20` ;
GRANT ALL PRIVILEGES ON `database20` . * TO 'pc20'@'localhost';

Sjabloon domeinscript webserverhosts.vbs.skel

' DNS oplossing voor webserver
' Bron: http://www.ericphelps.com/scripting/samples/Hosts/
' Copyright (C) Dany Pinoy voor SNT Brugge 2011

'Define globals
Const WindowsFolder = 0
Const SystemFolder = 1
Const ForWriting = 2
Const ForAppending = 8
Dim gstrHostsFile 'The location of the computer's "hosts" file
Dim fs 'File System Object
Dim WshShell
Dim WshSysEnv
Dim profilesIni
Dim profilePath

'Make sure the system has the basics
If Not HasScripting() Then WScript.Quit

' http://www.computerperformance.co.uk/Logon/code/code_800A000D.htm
' Enkel op school 
On Error Resume Next

'Prompt for admin rights if needed
If NeedsUAC() Then 
	If MsgBox("Dit script heeft administratieve rechten nodig " _
	& "om uw ""hosts"" bestand aan te passen. " _
	& "Als uw computer voor deze actie vraagt om wijzigingen aan de computer aan te brengen, moet je deze toestaan." _
	& "", vbOkCancel , "Administratieve Rechten") <> vbOk Then
		WScript.Quit
	End If
	UAC
End If

Set fs = CreateObject("Scripting.FileSystemObject")

'Find the location of the computer's hosts file
If fs.FolderExists(fs.BuildPath(fs.GetSpecialFolder(SystemFolder), "drivers\etc")) Then
	gstrHostsFile = fs.BuildPath(fs.GetSpecialFolder(SystemFolder), "drivers\etc\hosts")'WinNT, Win2000, WinXP, Vista
Else	
	gstrHostsFile = fs.BuildPath(fs.GetSpecialFolder(WindowsFolder), "hosts")'Win98
End If

'Back up the existing hosts file
If Not fs.FileExists(gstrHostsFile & ".pinda.bak") Then
	If fs.FileExists(gstrHostsFile) Then
		fs.CopyFile gstrHostsFile, gstrHostsFile & ".pinda.bak", True
	End If
End If
fs.CopyFile gstrHostsFile & ".pinda.bak", gstrHostsFile, True
fs.OpenTextFile(gstrHostsFile, ForAppending, True).WriteLine ""
fs.OpenTextFile(gstrHostsFile, ForAppending, True).WriteLine "# Webserver voor Dreamweaver, Dany Pinoy, SNT Brugge"
fs.OpenTextFile(gstrHostsFile, ForAppending, True).WriteLine "webserveripadres users.webserver.snt"

Wscript.Echo "De webserver is nu bereikbaar via http://users.webserver.snt."

'*********************************************************
'**** UAC (User Access Control) code below this point ****
'*********************************************************

Function NeedsUAC()
'Returns False if UAC not needed (Win9x or Win2K/XP with logged on admin)
'Returns True if UAC needed (Win2K/XP with no admin or every instance of Vista)
	If IsAdmin(UserName()) Then
		If OsVersion() < 6 Then
			NeedsUAC = False
		Else
			NeedsUAC = True
		End If
	Else
		NeedsUAC = True
	End If
End Function

Sub UAC()
'Run this subroutine FIRST THING on any script that may require admin
'priveleges. It will generate a "User Access Control" prompt on Vista
'or generate a "Run As" prompt for admin priveleges on 2K/XP (if the 
'2K/XP user isn't an admin). It will do nothing on Win9x systems or 
'on Win2K/XP systems with a logged-in admin.
Const FOR_WRITING = 2
Const TEMP_FOLDER = 2
Dim ws, fs, ts, wmi, col, obj
Dim strData, strUacFile, strArg, strArgs, strOsVersion, strUserName, strGroup, strMember
Dim lngArg, lngOsVersion
Dim blnIsAdmin, blnHasAdmins
	'See if we can create needed objects
	On Error Resume Next
	Err.Clear
	Set fs = CreateObject("Scripting.FileSystemObject")
	Set ws = CreateObject("WScript.Shell")
	Set wmi = GetObject("winmgmts:\\.\root\CIMV2")
	If Err.Number <> 0 Then Exit Sub 'Reasonable assumption it's Win9x?
	On Error Goto 0
	'Define the name of the special script that will re-launch this one for UAC if needed.
	'Can't use %TEMP% or other per-user folder, can't use script folder because it might be
	'in protected area. 
	strUacFile = ""
	If strUacFile = "" Then
		'First try to use "shared docs" because everyone can get to it.
		strUacFile = ws.RegRead("HKLM\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\Common Documents")
		If strUacFile <> "" Then
			If fs.FolderExists(strUacFile) Then 
				strUacFile = fs.BuildPath(strUacFile, "~" & fs.GetBaseName(WScript.ScriptName) & ".vbs")
			Else
				strUacFile = ""
			End If
		End If
	End If
	If strUacFile = "" Then
		'Next choice is all users desktop.
		strUacFile = ws.SpecialFolders("AllUsersDesktop")
		If strUacFile <> "" Then
			If fs.FolderExists(strUacFile) Then 
				strUacFile = fs.BuildPath(strUacFile, "~" & fs.GetBaseName(WScript.ScriptName) & ".vbs")
			Else
				strUacFile = ""
			End If
		End If
	End If
	If strUacFile = "" Then
		'Last choice is the drive root. At least we know it exists!
		strUacFile = fs.BuildPath(fs.GetDriveName(WScript.Path) & "\", "~" & WScript.ScriptName)
	End If
	'If the UAC script exists, we can assume it launched this one! It should be deleted.
	If fs.FileExists(strUacFile) Then
		fs.DeleteFile strUacFile
		Exit Sub
	End If	
	'Find the Operating System major version
	Set col = wmi.ExecQuery("SELECT * FROM Win32_OperatingSystem", "WQL", 48)
	strOsVersion = "0.0"
	For Each obj In col : strOsVersion = obj.Version : Next
	If Instr(strOsVersion, ".") Then strOsVersion = Left(strOsVersion, Instr(strOsVersion, ".") - 1)
	lngOsVersion = CLng(strOsVersion)
	'If the OS is less than W2K, everybody is an admin and no UAC prompt is needed
	If lngOsVersion < 5 Then Exit Sub
	'Find the user name (needed to see if the user is an admin)
	Set col = wmi.ExecQuery("SELECT * FROM Win32_ComputerSystem", "WQL", 48)
	strUserName = ""
	For Each obj In col : strUserName = obj.UserName : Next
	If Instr(strUserName, "\") Then	strUserName = Mid(strUserName, Instr(strUserName, "\") + 1)
	'See if the user is an admin
	blnIsAdmin = False
	blnHasAdmins = False
	Set col = wmi.ExecQuery("SELECT * FROM Win32_GroupUser", "WQL", 48)
	For Each obj In col
		strGroup = obj.GroupComponent
		strGroup = Split(strGroup, "=")
		If strGroup(UBound(strGroup)) = """Administrators""" Then
			blnHasAdmins = True
			strMember = obj.PartComponent
			strMember = Split(strMember, "=")
			If strMember(UBound(strMember)) = """" & strUserName & """" Then
				blnIsAdmin = True
			End If
		End If
	Next
	If blnHasAdmins = False Then blnIsAdmin = True 'If no admin group then everybody is an admin?
	'Final test. No UAC prompt is needed if user is admin on something less than Vista
	If ((lngOsVersion < 6) And (blnIsAdmin)) Then Exit Sub
	'This is definitely a directly-run script. We need to re-launch it to get a UAC.
	'First collect any arguments the script has so we can re-launch it exactly the same.
	For lngArg = 0 To WScript.Arguments.Count - 1
		If strArgs <> "" Then strArgs = strArgs & " "
		strArg = WScript.Arguments(lngArg)
		If ((InStr(strArg, " ") <> 0) Or (InStr(strArg, vbTab) <> 0)) Then 
			strArg = """" & """" & strArg & """" & """"
		End If
		strArgs = strArgs & strArg
	Next
	'Now build the actual command that will re-launch the script with a UAC prompt
	strData = "CreateObject(""Shell.Application"").ShellExecute "
	strData = strData & """" & """" & """" & Wscript.FullName & """" & """" & """"
	strData = strData & ", "
	strData = strData & """" & """" & """" & WScript.ScriptFullName & """" & """"
	If strArgs = "" Then
		strData = strData & """, "
	Else
		strData = strData & " " & strArgs & """, "
	End If
	strData = strData & """" & """" & """" & fs.GetParentFolderName(WScript.ScriptFullName) & """" & """" & """"
	strData = strData & ", "
	strData = strData & """runas"""
	strData = strData & ", 1"
	'Save the UAC command in a separate script
	Set ts = fs.OpenTextFile(strUacFile, FOR_WRITING, True)
	ts.Write strData
	ts.Close
	'Show a message
'	Wscript.Echo "Dit script heeft administratieve rechten nodig."
	'Launch the UAC script
	ws.Run "wscript.exe" & " """ & strUacFile & """", 1, False
	'We MUST exit at this point and let the UAC script re-launch us.
	WScript.Quit
End Sub

Function HasScripting()
'Returns True if able to create common scripting objects (some WinXP can fail!)
Dim fs, ws, sa, lngErrNum
	Err.Clear
	lngErrNum = 0
	Set ws = CreateObject("WScript.Shell")
	lngErrNum = lngErrNum + Err.Number
	Set fs = CreateObject("Scripting.FileSystemObject")
	lngErrNum = lngErrNum + Err.Number
	Set sa = CreateObject("Shell.Application")
	lngErrNum = lngErrNum + Err.Number
	If lngErrNum <> 0 Then
		If MsgBox ("You seem to have a bad (or old) installation of Microsoft Windows Scripting. I'd like to take you to a Microsoft web page where you can download Scripting Version 5.6. May I launch your default browser to show you the download page?", vbYesNo, "Update Needed") = vbYes Then
			ws.Run "http://www.microsoft.com/downloads/details.aspx?FamilyId=C717D943-7E4B-4622-86EB-95A22B832CAA&displaylang=en", 1, False
		End If
		HasScripting = False
	Else
		HasScripting = True
	End If
End Function

Function OsVersion()
'Returns the base + minor version for the OS. Returns 0 on error.
'3.5=NT, 4.0=95, 4.1=98, 4.9=ME, 5.0=2K, 5.1=XP, 5.2=2003, 6.0=Vista
Dim strVersion, objWMI, colSystems, objOS
Dim ver, strVer, strVerMajor, strVerMinor, strMajor
	strVersion = "0" 'Set a default of zero in case of error
	On Error Resume Next
	Set objWMI = GetObject("winmgmts:\\.\root\CIMV2")
	Set colSystems = objWMI.ExecQuery("SELECT * FROM Win32_OperatingSystem", "WQL", 48)
	For Each objOS In colSystems
		strVersion = objOS.Version
	Next
	Set objWMI = Nothing
	If InStr(strVersion, ".") > 0 Then
		strVersion = Left(strVersion, InStr(strVersion, ".") + 1)
	End If
	'If WMI fails, try parsing output from the old "ver" command
	If strVersion = "0" Then
		Set ws = CreateObject("Wscript.Shell")
		Set ver = ws.Exec("%comspec% /c ver")
		Do While ver.Status = 0
			WScript.Sleep 100
		Loop
		strVer = ver.StdOut.ReadAll
		strVer = Split(strVer, ".")
		'Get major version
		strMajor = strVer(0)
		strMajor = Split(strMajor, " ")
		strVerMajor = strMajor(UBound(strMajor))
		'Get minor version
		strVerMinor = strVer(1)
		strVerMinor = Left(strVerMinor, 1)
		'Check results
		If IsNumeric(strVerMajor) And IsNumeric(strVerMinor) Then
			strVersion = strVerMajor & "." & strVerMinor
		End If
	End If
	OsVersion = strVersion
End Function

Function UserName()
	Dim objWMI, colComputers, objComputer, strUser, ws, env
	On Error Resume Next
	strUser = ""
	Err.Clear
	Set objWMI = GetObject("winmgmts:\\.\root\CIMV2")
	Set colComputers = objWMI.ExecQuery("SELECT * FROM Win32_ComputerSystem", "WQL", 48)
	If Err.Number <> 0 Then
		'WMI Failure. Try environment
		Set ws = CreateObject("Wscript.Shell")
		Set env = ws.Environment("Process")
		strUser = env.Item("USERNAME")
	Else
		For Each objComputer In colComputers
			strUser = objComputer.UserName
		Next
		If Instr(strUser, "\") Then
			strUser = Mid(strUser, Instr(strUser, "\") + 1)
		End If
	End If
	Set objWMI = Nothing
	UserName = strUser
End Function

Function IsAdmin(strUserName)
	Dim objWMI, colUsers, objUser, strGroup, strUser, blnIsAdmin, blnHasAdmins
	On Error Resume Next
	Err.Clear
	Set objWMI = GetObject("winmgmts:\\.\root\CIMV2")
	Set colUsers = objWMI.ExecQuery("SELECT * FROM Win32_GroupUser", "WQL", 48)
	If Err.Number <> 0 Then
		'Assume WMI failure means Win9X, implying user is an Administrator
		IsAdmin = True
	Else
		blnIsAdmin = False
		blnHasAdmins = False
		For Each objUser In colUsers
			strGroup = objUser.GroupComponent
			strGroup = Split(strGroup, "=")
			If strGroup(UBound(strGroup)) = """Administrators""" Then
				blnHasAdmins = True
				strUser = objUser.PartComponent
				strUser = Split(strUser, "=")
				If strUser(UBound(strUser)) = """" & strUserName & """" Then
					blnIsAdmin = True
				End If
			End If
		Next
	End If
	If blnHasAdmins = False Then
		'If there are no members of the Administrators group, assume everybody is an admin
		IsAdmin = True
	Else
		IsAdmin = blnIsAdmin 
	End If
End Function

De Nederlandstalige vertaling voor formmail.php

<?php
/*
 * This is a language file for Tectite FormMail from www.tectite.com.
 * Simply put this file in the same directory on your server as formmail.php
 * and FormMail will automatically use messages from this file.
 * The file must be called "language.inc".
 *
 * Therefore, to get French messages, upload "language_fr.inc"
 * and rename it to "language.inc".
 *
 * Filename:        language_nl.inc
 * Language:        Dutch
 * Translated by:   Dany Pinoy
 *                  You can contact Dany at www.pindanet.be or by email
 *                  to translations AT tectite DOT com.
 * Version:         1.2 24-Apr-07
 *
 * Comments:
 *  This is a sample language file containing the builtin messages.
 *
 * Change History
 * ~~~~~~~~~~~~~~
 * Version 1.2: 15-Jun-11 Dany Pinoy
 *      Translation to dutch
 * Version 1.2: 24-Apr-07 Russell Robinson
 *      Added new messages up to version 8.00 of FormMail.
 *
 * Version 1.1: 04-May-05 Russell Robinson
 *      Added new messages up to version 7.00 of FormMail.
 *
 * Version 1.0: 15-Dec-04 Russell Robinson
 *      Created.
 *
 *
 * Instructions for Translators
 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 *  Here are the steps:
 *      1. Fill in your details above including contact details,
 *         and version and date.  Below, place your language's title
 *         in the $sLangID variable.
 *      2. For each message, read the description above it and make note of
 *         the parameters require for each message.  Translate
 *         the message and use single quotes (').  If you need to wrap
 *         lines, use the dot operator to concatenate strings.  Use
 *         \n to indicate a newline.  Place parameters in the appropriate
 *         place for the target language.
 *         For example,
 *              This alert has been filtered through "$FILTER" for security
 *              purposes.
 *         might be this in German:
 *              Diese Alarmbereitschaft ist "$FILTER" für Sicherheits Zwecke
 *              durchgesicket worden.
 *
 *         Note that some messages include the $MNUM parameter.  They do this
 *         to locate the message number (which looks like this: [M42]) in a
 *         logical place when the message consists of multiple lines or is
 *         concatenated with other information from FormMail.
 *
 *         NOTE: if there are newlines (\n) at the end of a message, please
 *         ensure you keep them - these will be there for important formatting
 *         requirements.
 *      3. You can leave untranslated messages in English simply by leaving
 *         them out of the file (or commenting the lines by placing //
 *         at the beginning of each line).  The built-in English version is
 *         loaded by FormMail first, then the language.inc file
 *         overrides those messages.
 *      4. You can compare your translation with the builtin version with
 *         these steps:
 *              a. upload your draft file to your server in the same
 *                 directory as formmail.php
 *              b. open formmail in your browser like this:
 *                      http://www.yoursite.com/formmail.php?testlang=1
 *      5. Email to translations AT tectite DOT com for publishing.
 */

    //
    // the name of the language this file contains
    //
$sLangID = "Nederlands";

	// MSG_SCRIPT_VERSION is shown if the PHP version is too old to run
	// FormMail
	// Parameters:
	// 	$PHPREQ		is the minimum required PHP version
	//	$PHPVERS	is	the version the server currently has installed.
$aMessages[MSG_SCRIPT_VERSION] = 'Dit script vereist minstens PHP versie '.
								    '$PHPREQ.  U gebruikt PHP versie $PHPVERS.';

	// MSG_END_VERS_CHK is sent at the end of an Alert message when
	// FormMail detects that there's a newer version available
	// Parameters: none
$aMessages[MSG_END_VERS_CHK] =	'***************************************************\n'.
								'Als je tevreden bent met de huidige versie en je wenst\n'.
								'deze herinneringen stoppen, pas formmail.php aan en\n'.
								'zet CHECK_FOR_NEW_VERSION op false.\n'.
								'***************************************************\n';

	// MSG_VERS_CHK is sent in an Alert message when
	// FormMail detects that there's a newer version available
	// Parameters:
	//	$TECTITE	the website to go to
	//	$FM_VERS	the current FormMail version
	//	$NEWVERS	the new FormMail version that's available
$aMessages[MSG_VERS_CHK] =	'Een recentere versie van FormMail is beschikbaar bij $TECTITE.\n'.
							'Je gebruikt momenteel versie $FM_VERS.\n'.
							'De nieuwe beschikbare versie is $NEWVERS.\n';

	// MSG_CHK_FILE_ERROR is sent in an Alert message when
	// FormMail cannot create a file to record the time of version check.
	// Parameters:
	//	$FILE   the file name that could not be created
    //  $ERROR  the actual error message
$aMessages[MSG_CHK_FILE_ERROR] = 'Fout bij het aanmaken van het controlebestand "$FILE": $ERROR';

	// MSG_UNK_VALUE_SPEC is sent in an Alert message when
	// a form uses an unknown value specification in derive_fields.
	// Parameters:
	//	$SPEC	the unknown value specification
    //  $MSG    additional message
$aMessages[MSG_UNK_VALUE_SPEC] = 'derive_fields: onbekende waarde opgegeven '.
                                 '"$SPEC"$MSG';

	// MSG_INV_VALUE_SPEC is sent in an Alert message when
	// a form uses a value specification in derive_fields that's
	// formatted incorrectly (missing terminating '%')
	// Parameters:
	//	$SPEC	the invalid value specification
$aMessages[MSG_INV_VALUE_SPEC] = 'derive_fields: ongeldige waarde opgegeven '.
								    '"$SPEC" (waarschijnlijk een "%" vergeten)';

	// MSG_DERIVED_INVALID is sent in an Alert message when
	// a form's derive_fields setting has errors
	// Parameters: none
	// A list of errors is appended on separate lines
$aMessages[MSG_DERIVED_INVALID] = 'Sommige derive_fields specificaties zijn ongeldig $MNUM:\n';

	// MSG_INT_FORM_ERROR is sent in an Alert message and displayed
	// to the form user
	// Parameters: none
$aMessages[MSG_INT_FORM_ERROR] = 'Interne formulierfout';

	// MSG_OPTIONS_INVALID is sent in an Alert message when
	// a form's options settings are invalid.  This applies to
	// mail_options, filter_options, crm_options, and autorespond
	// Parameters:
	//	$OPT	the name of the options field
	// A list of errors is appended on separate lines
$aMessages[MSG_OPTIONS_INVALID] = 'Sommige $OPT instellingen zijn niet gedefinieerd $MNUM:\n';

	// MSG_PLSWAIT_REDIR is shown to the user for a redirect
	// with JavaScript
	// Parameters: none
$aMessages[MSG_PLSWAIT_REDIR] = 'Even geduld, u wordt doorverbonden...';

	// MSG_IFNOT_REDIR is shown to the user for a redirect
	// with JavaScript
	// Parameters:
	//	$URL	the URL to redirect to
$aMessages[MSG_IFNOT_REDIR] = 'Als je niet automatisch wordt doorverbonden, '.
							    'gelieve dan <a href="$URL">hier te klikken</a>.';

	// MSG_PEAR_OBJ is shown to the user if the PEAR Mail object
	// cannot be created
	// Parameters: none
$aMessages[MSG_PEAR_OBJ] = 'Fout bij het aanmaken van PEAR Mail object';

	// MSG_PEAR_ERROR is sent in an Alert message if the PEAR Mail processing
	// reports an error
	// Parameters:
	//	$MSG	the error message from PEAR
$aMessages[MSG_PEAR_ERROR] = 'PEAR Mail fout: $MSG';

	// MSG_NO_FOPT_ADDR is sent in an Alert message SendMailFOption is
	// specified in the form and no email address has been provided
	// Parameters: none
$aMessages[MSG_NO_FOPT_ADDR] = 'U heeft "SendMailFOption" in uw formulier gebruikt, '.
							    'maar er is geen e-mail adres om te gebruiken';

	// MSG_MORE_INFO is sent in an Alert message on a line by itself, just
	// before extra information about the FormMail processing that may have
	// led to the alert message
	// Parameters: none
$aMessages[MSG_MORE_INFO] = 'Meer informatie:';

	// MSG_INFO_STOPPED is sent in an Alert message to say that extra
	// alert information has been suppressed because of potential security
	// problems with showing it.
	// Parameters: none
$aMessages[MSG_INFO_STOPPED] = '(Extra alarm informatie onderdrukt wegens '.
							    'veiligheidsredenen. $MNUM)';

	// MSG_FM_ALERT is sent as the subject line of an Alert message
	// Parameters: none
$aMessages[MSG_FM_ALERT] = 'FormMail alarm';

	// MSG_FM_ERROR is sent as the subject line of an Alert message
	// Parameters: none
$aMessages[MSG_FM_ERROR] = 'FormMail script fout';

	// MSG_FM_ERROR_LINE is sent in an Alert message on a
	// separate line to introduce the actual error message
	// Parameters: none
$aMessages[MSG_FM_ERROR_LINE] = 'De volgende fout is in FormMail opgetreden $MNUM:';

	// MSG_USERDATA_STOPPED is sent in an Alert message to say that the
	// user's data has been suppressed because of potential security
	// problems with showing it.
	// Parameters: none
$aMessages[MSG_USERDATA_STOPPED] = '(Gebruikers data onderdrukt wegens veiligheids'.
								    'redenen. $MNUM)';

	// MSG_FILTERED is sent in an Alert message to show what filter
	// has been used on the message
	// Parameters:
	//	$FILTER		the name of the filter
$aMessages[MSG_FILTERED] = 'Dit alarm werd wegens veiligheidsredenen door de filter "$FILTER" '.
						    'onderzocht.';

	// MSG_TEMPLATES is sent in an Alert message when a form tries
	// to use a template, but templates have not been configured in
	// formmail.php
	// Parameters: none
$aMessages[MSG_TEMPLATES] = 'Je moet TEMPLATEDIR of TEMPLATEURL '.
							'in formmail.php instellen voor je '.
							'templates in formulieren kunt gebruiken.';

	// MSG_OPEN_TEMPLATE is sent in an Alert message when FormMail cannot
	// open a template file
	// Parameters:
	//	$NAME	the name of the template file
	//	$ERROR	information about the error
$aMessages[MSG_OPEN_TEMPLATE] = 'Het openen van het template "$NAME" is mislukt $MNUM: $ERROR';

	// MSG_ERROR_PROC is shown to the user as part of an error
	// page.  This message introduces the error.
	// Parameters: none
$aMessages[MSG_ERROR_PROC] = 'Een fout is opgetreden bij het verwerken van het '.
							    'formulier $MNUM.\n\n';

	// MSG_ALERT_DONE is shown to the user as part of an error
	// page if an Alert message has been sent to the website owner.
	// Parameters: none
$aMessages[MSG_ALERT_DONE] = 'De beheerder van de webserver is op de hoogte gebracht van de fout met het nummer $MNUM.\n';

	// MSG_PLS_CONTACT is shown to the user as part of an error
	// page if an Alert message could *not* be sent to the website owner.
	// Parameters: none
$aMessages[MSG_PLS_CONTACT] = 'Gelieve ons rechtstreeks te contacteren, want dit formulier '.
							    'werkt niet $MNUM.\n';

	// MSG_APOLOGY is shown to the user as part of an error
	// page as an apology for a problem with the form.
	// Parameters: none
$aMessages[MSG_APOLOGY] = 'Wij verontschuldigen ons voor de ongemakken die deze fout '.
						    'veroorzaken.';

	// MSG_ABOUT_FORMMAIL is shown to the user at the foot of pages
	// generated by FormMail (e.g. the default "Thanks" page and default
	// error page).
	// Parameters:
	//	$FM_VERS	the FormMail version number
	//	$TECTITE	www.tectite.com
$aMessages[MSG_ABOUT_FORMMAIL] = 'Uw formulier is verwerkt door '.
							  	    '($FM_VERS), beschikbaar bij '.
								    '<a href="http://$TECTITE/">$TECTITE</a>.';

	// MSG_PREG_FAILED is sent in an Alert message if the TectiteCRM
	// system failed to return the expected result.
	// Parameters: none
$aMessages[MSG_PREG_FAILED] = 'preg_match_all mislukt in FindCRMFields';

	// MSG_URL_INVALID is sent in an Alert message if the specified
	// URL for TectiteCRM is not valid according to the TARGET_URLS
	// configuration setting
	// Parameters:
	//	$URL		the invalid URL
$aMessages[MSG_URL_INVALID] = 'De URL "$URL" om het Customer '.
							    'Relationship Management System (CRM) te bereiken is ongeldig '.
							    '(zie TARGET_URLS in formmail.php)';

	// MSG_URL_OPEN is sent in an Alert message if the specified
	// URL for TectiteCRM cannot be opened
	// Parameters:
	//	$URL	the invalid URL
	//	$ERROR	information about the error
$aMessages[MSG_URL_OPEN] = 'Het openen van het Customer Relationship '.
						    'Management System is mislukt, met de URL "$URL" $MNUM: $ERROR';

	// MSG_CRM_FAILED is sent in an Alert message if the TectiteCRM
	// system doesn't return an OK message
	// Parameters:
	//	$URL	the invalid URL
	//	$MSG	more information
$aMessages[MSG_CRM_FAILED] = 'Storings rapport van het Customer Relationship '.
							    'Management System (url="$URL") $MNUM: $MSG';

	// MSG_CRM_FORM_ERROR is shown to the user if the information
	// passed to TectiteCRM was not accepted
	// Parameters: none
$aMessages[MSG_CRM_FORM_ERROR] = 'Uw formulier verwerking is niet aanvaard';

	// MSG_AND is shown to the user; it shows two items separated
	// by "and"
	// Parameters:
	//	$ITEM1		the first item
	//	$ITEM2		the second item
$aMessages[MSG_AND] = '"$ITEM1" en "$ITEM2"';

	// MSG_OR is shown to the user; it shows two items separated
	// by "or"
	// Parameters:
	//	$ITEM1		the first item
	//	$ITEM2		the second item
$aMessages[MSG_OR] = '"$ITEM1" of "$ITEM2"';

	// MSG_NOT_BOTH is shown to the user; it shows two items that must
	// be specified together
	// Parameters:
	//	$ITEM1		the first item
	//	$ITEM2		the second item
$aMessages[MSG_NOT_BOTH] = 'niet beide "$ITEM1" en "$ITEM2"';

	// MSG_XOR is shown to the user; it shows two items that must
	// not be specified together
	// Parameters:
	//	$ITEM1		the first item
	//	$ITEM2		the second item
$aMessages[MSG_XOR] = '"$ITEM1" of "$ITEM2" (maar niet beiden)';

	// MSG_IS_SAME_AS is shown to the user; it shows two items that must
	// not be the same value
	// Parameters:
	//	$ITEM1		the first item
	//	$ITEM2		the second item
$aMessages[MSG_IS_SAME_AS] = '"$ITEM1" is hetzelfde als "$ITEM2"';

	// MSG_IS_NOT_SAME_AS is shown to the user; it shows two items that must
	// be the same value
	// Parameters:
	//	$ITEM1		the first item
	//	$ITEM2		the second item
$aMessages[MSG_IS_NOT_SAME_AS] = '"$ITEM1" is niet hetzelfde als "$ITEM2"';

	// MSG_REQD_OPER is sent in an Alert message when an unknown
	// operator has been used in a "required" specification
	// Parameters:
	//	$OPER		the unknown operator
$aMessages[MSG_REQD_OPER] = 'Operator "$OPER" is niet geldig voor "required"';

	// MSG_PAT_FAILED is sent in an Alert message when a "conditions" pattern
	// match has not matched anything (this isn't necessarily an error)
	// Parameters:
	//	$OPER		the "conditions" operator
	//	$PAT		the "conditions" pattern
	//	$VALUE		the value that was searched
$aMessages[MSG_PAT_FAILED] = 'Patroon operator "$OPER" mislukt: patroon '.
							    '"$PAT", opgezochte waarde was "$VALUE".';

	// MSG_COND_OPER is sent in an Alert message when a "conditions"
	// operator is not value
	// Parameters:
	//	$OPER		the "conditions" operator
$aMessages[MSG_COND_OPER] = 'Operator "$OPER" is ongeldig voor "conditions"';

	// MSG_INV_COND is sent in an Alert message when a "conditions"
	// field is not valid
	// Parameters:
	//	FLD		the field name
$aMessages[MSG_INV_COND] = 'Ongeldig "conditions" veld "$FLD" - geen tekenreeks of reeks.';

	// MSG_COND_CHARS is sent in an Alert message when a "conditions"
	// field is missing the mandatory first 2 characters (the separators)
	// Parameters:
	//	FLD		the field name
	//	COND	the conditions field value
$aMessages[MSG_COND_CHARS] = 'Het voorwaarden veld "$FLD" is ongeldig. '.
							    'Zorg voor de twee scheidingstekens '.
							    'in het begin. Je gebruikte "$COND".';

	// MSG_COND_INVALID is sent in an Alert message when a "conditions"
	// field has the wrong format
	// Parameters:
	//	FLD		the field name
	//	COND	the conditions field value
	//	SEP		the internal separator character for the field.
$aMessages[MSG_COND_INVALID] = 'Het voorwaarden veld "$FLD" is ongeldig. '.
							    'Er moeten minstens 5 onderdelen, '.
							    'gescheiden door "$SEP". Je gebruikte "$COND".';

	// MSG_COND_TEST_LONG is sent in an Alert message when a "conditions"
	// TEST value has too many components
	// Parameters:
	//	FLD		the field name
	//	COND	the conditions field value
	//	SEP		the list separator character for the field.
$aMessages[MSG_COND_TEST_LONG] = 'Veld "$FLD" bevat te veel onderdelen voor '.
								    'een "TEST" opdracht: "$COND".\nEr ontbreekt '.
								    'een "$SEP"?';

	// MSG_COND_IF_SHORT is sent in an Alert message when a "conditions"
	// IF value has too few components
	// Parameters:
	//	FLD		the field name
	//	COND	the conditions field value
	//	SEP		the internal separator character for the field.
$aMessages[MSG_COND_IF_SHORT] = 'Veld "$FLD" bevat te weinig onderdelen voor '.
								'een "IF" opdracht: "$COND".\nEr moeten '.
								'ten minste 6 onderdelen zijn, gescheiden door "$SEP"';

	// MSG_COND_IF_LONG is sent in an Alert message when a "conditions"
	// IF value has too many components
	// Parameters:
	//	FLD		the field name
	//	COND	the conditions field value
	//	SEP		the list separator character for the field.
$aMessages[MSG_COND_IF_LONG] = 'Veld "$FLD" bevat te veel onderdelen voor '.
							   'een "IF" opdracht: "$COND".\nEr ontbreekt '.
							    'een "$SEP"?';

	// MSG_COND_UNK is sent in an Alert message when a "conditions"
	// value has an unknown command
	// Parameters:
	//	FLD		the field name
	//	COND	the conditions field value
	//	CMD		the unknown command
$aMessages[MSG_COND_UNK] = 'Veld "$FLD" bevat een onbekende opdracht '.
						    '"$CMD": "$COND".';

	// MSG_MISSING is sent in an Alert message when
	// a socket filter is incorrectly defined
	// Parameters:
	//	ITEM	the missing item
$aMessages[MSG_MISSING] = '"$ITEM" ontbreekt';

	// MSG_NEED_ARRAY is sent in an Alert message when
	// a socket filter is incorrectly defined
	// Parameters:
	//	ITEM	the item that should be an array
$aMessages[MSG_NEED_ARRAY] = '"$ITEM" moet een reeks zijn';

	// MSG_SUBM_FAILED is shown to the user when an internal error
	// as occurred and that error is not to be shown
	// Parameters: none
$aMessages[MSG_SUBM_FAILED] = 'De formulier verwerking is mislukt door '.
							    'een fout op onze server.';

	// MSG_FILTER_WRONG is sent in an Alert message when
	// a socket filter is incorrectly defined
	// Parameters:
	//	FILTER	the filter name
	//	ERRORS	a string containing a list of errors
$aMessages[MSG_FILTER_WRONG] = 'De filter "$FILTER" is niet goed gedefineerd: '.
							    '$ERRORS';

	// MSG_FILTER_CONNECT is sent in an Alert message when FormMail
	// cannot connect to a socket filter
	// Parameters:
	//	FILTER	the filter name
	//	SITE	the site
	//	ERRNUM	socket error number
	//	ERRSTR	socket error message
$aMessages[MSG_FILTER_CONNECT] = 'Geen verbinding met de site "$SITE" '.
								 'voor de filter "$FILTER" ($ERRNUM): $ERRSTR';

	// MSG_FILTER_PARAM is sent in an Alert message when a socket
	// filter has an invalid parameter specification
	// Parameters:
	//	FILTER	the filter name
	//	NUM		parameter number
	//	NAME	parameter name
$aMessages[MSG_FILTER_PARAM] = 'Filter "$FILTER" bevat een ongeldige parameter '.
							    '#$NUM: no "$NAME"';

	// MSG_FILTER_OPEN_FILE is sent in an Alert message when a socket
	// filter cannot open the required file
	// Parameters:
	//	FILTER	the filter name
	//	FILE	the file that could not be opened
	//	ERROR	the error message
$aMessages[MSG_FILTER_OPEN_FILE] = 'De filter "$FILTER" kan een bestand niet openen '.
								   '"$FILE": $ERROR';

	// MSG_FILTER_FILE_ERROR is sent in an Alert message when a socket
	// filter gets an error message during reading a file
	// Parameters:
	//	FILTER	the filter name
	//	FILE	the file that could not be opened
	//	ERROR	the error message
	//	NLINES	the number of lines that were read successfully
$aMessages[MSG_FILTER_FILE_ERROR] = 'Filter "$FILTER": leesfout in bestand '.
 								   	'"$FILE" na $NLINES regels: $ERROR';

	// MSG_FILTER_READ_ERROR is sent in an Alert message when a socket
	// filter gets an error during reading from the socket
	// Parameters:
	//	FILTER	the filter name
	//	ERROR	the error message
$aMessages[MSG_FILTER_READ_ERROR] = 'Filter "$FILTER" mislukt: leesfout: '.
 								   	'$ERROR';

	// MSG_FILTER_NOT_OK is sent in an Alert message when a socket
	// filter fails to return the agreed __OK__ indicator
	// Parameters:
	//	FILTER	the filter name
	//	DATA	the data returned from the filter
$aMessages[MSG_FILTER_NOT_OK] = 'Filter "$FILTER" mislukt (ontbrekende '.
 								'__OK__ regel): $DATA';

	// MSG_FILTER_UNK is sent in an Alert message
	// when an unknown filter is specified by a form
	// Parameters:
	//	FILTER	the filter name
$aMessages[MSG_FILTER_UNK] = 'Onbekende filter "$FILTER"';

	// MSG_FILTER_CHDIR is sent in an Alert message
	// when FormMail cannot change to the filter's directory
	// Parameters:
	//	FILTER	the filter name
	//	DIR		the directory name
	//	ERROR	an error message from the system
$aMessages[MSG_FILTER_CHDIR] = 'Kan de map "$DIR" niet openen om de filter uit te voeren '.
							    '"$FILTER": $ERROR';

	// MSG_FILTER_NOTFOUND is sent in an Alert message
	// when FormMail cannot execute the filter
	// Parameters:
	//	FILTER	the filter name
	//	CMD		the command line being executed
	//	ERROR	an error message from the system
$aMessages[MSG_FILTER_NOTFOUND] = 'Kan de filter "$FILTER" niet uitvoeren met '.
								    'de opdracht "$CMD": $ERROR';

	// MSG_FILTER_ERROR is sent in an Alert message
	// when a filter returns a non-zero status
	// Parameters:
	//	FILTER	the filter name
	//	ERROR	an error message from the system
	//	STATUS	the status return from the command
$aMessages[MSG_FILTER_ERROR] = 'Filter "$FILTER" mislukt (status $STATUS): '.
							    '$ERROR';

	// MSG_FLD_NOTFOUND is sent as part of an Alert message
	// when a template refers to a non-existent form field
	// Parameters:
	//	FIELD	the field name
$aMessages[MSG_FLD_NOTFOUND] = '"$FIELD" is geen veld in het formulier';

	// MSG_TEMPLATE_ERRORS is sent as part of an Alert message
	// when a template has generated some errors.  The message
	// should end with a new line and the actual errors are
	// output after it.
	// Parameters:
	//	NAME	the template name
$aMessages[MSG_TEMPLATE_ERRORS] = 'Sjabloon "$NAME" veroorzaakte '.
								    'de volgende fouten $MNUM:\n';

	// MSG_TEMPLATE_FAILED is sent in an Alert message
	// when processing a template has failed.
	// Parameters:
	//	NAME	the template name
$aMessages[MSG_TEMPLATE_FAILED] = 'Mislukte verwerking van het sjabloon "$NAME"';

	// MSG_MIME_PREAMBLE is sent in the preamble of MIME emails
	// Parameters: none
$aMessages[MSG_MIME_PREAMBLE] = '(Uw mail programma moet nu deze tekt tonen'.
								'.\nZoniet, zorg dan voor modernere '.
								'software.)';

	// MSG_MIME_HTML is sent in the preamble of HTML emails
	// Parameters:
	//	NAME	the template name
$aMessages[MSG_MIME_HTML] = 'Dit bericht werd aangemaakt door FormMail '.
							'door gebruik te maken van een HTML sjabloon\nmet de naam "$NAME". De '.
							'tekst uit het formulier\nwerd '.
							'hieronder opgenomen, uw mail programma toont enkel '.
							'de HTML\nversie (tenzij het mail programma '.
							'daar niet tot in staat is).';

	// MSG_FILE_OPEN_ERROR is sent in an Alert message when FormMail
	// cannot open a file
	// Parameters:
	//	NAME	the file name
	//	TYPE	the type of file
	//	ERROR	the system error message
$aMessages[MSG_FILE_OPEN_ERROR] = 'Mislukt openen van het $TYPE bestand "$NAME": $ERROR';

	// MSG_ATTACH_DATA is sent in an Alert message when the file
	// attachment through 'data' has gone wrong.
	// Parameters: none
$aMessages[MSG_ATTACH_DATA] = 'Interne fout: AttachFile heeft '.
							    '"tmp_name" of "data" nodig';

	// MSG_PHP_HTML_TEMPLATES is sent in an Alert message when an
	// HTML template is used but the PHP version is too old.
	// Parameters:
	//	$PHPVERS	the current PHP version
$aMessages[MSG_PHP_HTML_TEMPLATES] = 'HTMLTemplate optie wordt enkel ondersteund '.
								    'met PHP versie 4.0.5 of hoger.  De '.
								    'server gebruikt versie $PHPVERS.';

	// MSG_PHP_FILE_UPLOADS is sent in an Alert message when
	// file upload is used but the PHP version is too old.
	// Parameters:
	//	$PHPVERS	the current PHP version
$aMessages[MSG_PHP_FILE_UPLOADS] = 'Wegens veiligheidredenen, bestand verzenden is enkel '.
							    'toegelaten met PHP versie 4.0.3 of hoger. '.
							    'De server gebruikt versie $PHPVERS.';

	// MSG_FILE_UPLOAD is sent in an Alert message when
	// file upload is attempted but FormMail is not configured to allow
	// it
	// Parameters: none
$aMessages[MSG_FILE_UPLOAD] = 'Poging om bestand te verzenden genegeerd';

	// MSG_FILE_UPLOAD_ATTACK is sent in an Alert message when
	// possible file upload attack is detected
	// Parameters:
	//	NAME	file name
	//	TEMP	temporary file name
    //  FLD     name of the file upload field
$aMessages[MSG_FILE_UPLOAD_ATTACK] = 'Mogelijke bestand verzenden aanval '.
									    'gedetecteerd: veld="$FLD", naam="$NAME" '.
                                     'voorlopige naam="$TEMP"';

	// MSG_PHP_PLAIN_TEMPLATES is sent in an Alert message when a
	// Plain template is used but the PHP version is too old.
	// Parameters:
	//	$PHPVERS	the current PHP version
$aMessages[MSG_PHP_PLAIN_TEMPLATES] = 'PlainTemplate optie wordt enkel ondersteund '.
								    'vanaf PHP versie 4.0.5.  De '.
								    'server gebruikt versie $PHPVERS.';

	// MSG_ATTACH_NAME is sent in an Alert message when a
	// the form uses the Attach feature without specifying a file name
	// Parameters: none
$aMessages[MSG_ATTACH_NAME] = 'filter_options: Attach moet een naam bevatten '.
							    '(vb. Attach=data.txt)';

	// MSG_PHP_BCC is sent in an Alert message when a
	// the form uses the BCC feature and the PHP version may not support it
	// Parameters:
	//	$PHPVERS	the current PHP version
$aMessages[MSG_PHP_BCC] = 'Waarschuwing: BCC wordt waarschijnlijk niet door uw '.
						    'PHP versie ($PHPVERS) ondersteund';

	// MSG_CSVCOLUMNS is sent in an Alert message when a csvcolumns field
	// is not correct
	// Parameters:
	//	$VALUE	the csvcolumns field value
$aMessages[MSG_CSVCOLUMNS] = 'De "csvcolumns" instelling is '.
							    'ongeldig: "$VALUE"';

	// MSG_CSVFILE is sent in an Alert message when a csvfile field
	// is not correct
	// Parameters:
	//	$VALUE	the csvfile field value
$aMessages[MSG_CSVFILE] = 'De "csvfile" instelling is ongeldig: "$VALUE"';

	// MSG_TARG_EMAIL_PAT_START is sent in an Alert message when a
	// $TARGET_EMAIL pattern is insecure because of a missing '^'
	// at the beginning
	// Parameters:
	//	$PAT	the pattern
$aMessages[MSG_TARG_EMAIL_PAT_START] = 'Waarschuwing: Het TARGET_EMAIL patroon '.
									    '"$PAT" heeft aan het begin een ^ '.
									    'tekort.';

	// MSG_TARG_EMAIL_PAT_END is sent in an Alert message when a
	// $TARGET_EMAIL pattern is insecure because of a missing '$'
	// at the end
	// Parameters:
	//	$PAT	the pattern
$aMessages[MSG_TARG_EMAIL_PAT_END] = 'Waarschuwing: Het TARGET_EMAIL patroon '.
									    '"$PAT" heeft op het einde een $ tekort.';

	// MSG_CONFIG_WARN is sent in an Alert message when the FormMail
	// configuration may have some problems.  The messages are
	// passed on separate lines, so the line terminations below
	// are important.
	// Parameters:
	//	$MESGS	lines of messages
$aMessages[MSG_CONFIG_WARN] = 'In uw configuratie zijn de volgende potentiele problemen gevonden'.
							    ':\n$MESGS\n\n'.
							    'Dit zijn niet noodzakelijk fouten, maar raadpleeg '.
							    'toch maar eens de documentatie\n'.
							    'in formmail.php.  Indien je zeker bent dat de '.
							    'configuratie in orde is,\n'.
							    'kun je de bovenstaande berichten uitschakelen door '.
							    'de instelling CONFIG_CHECK aan te passen.';

	// MSG_PHP_AUTORESP is sent in an Alert message when the PHP version
	// does not support autoresponding
	// Parameters:
	//	$PHPVERS	current PHP version
$aMessages[MSG_PHP_AUTORESP] = 'Autorespond wordt enkel ondersteeund vanaf PHP '.
							    'versie 4.0.5.  De server '.
							    'gebruikt versie $PHPVERS.';

	// MSG_ALERT is the test alert message (formmail.php?testalert=1)
	// Parameters:
	//	$LANG				the language ID
	//	$PHPVERS			PHP version
	//	$FM_VERS			FormMail version
	//	$SERVER				server type
	//	$DOCUMENT_ROOT		PHP's DOCUMENT_ROOT value
	//	$SCRIPT_FILENAME	PHP's SCRIPT_FILENAME value
	//	$PATH_TRANSLATED	PHP's PATH_TRANSLATED value
	//	$REAL_DOCUMENT_ROOT	the REAL_DOCUMENT_ROOT value
$aMessages[MSG_ALERT] =	'Dit is een test alarm bericht $MNUM\n'.
						'Gebruikte taal: $LANG\n'.
						'PHP versie: $PHPVERS\n'.
						'FormMail versie: $FM_VERS\n'.
						'Server type: $SERVER\n'.
						'\n'.
						'DOCUMENT_ROOT: $DOCUMENT_ROOT\n'.
						'SCRIPT_FILENAME: $SCRIPT_FILENAME\n'.
						'PATH_TRANSLATED: $PATH_TRANSLATED\n'.
						'REAL_DOCUMENT_ROOT: $REAL_DOCUMENT_ROOT';

	// MSG_NO_DEF_ALERT is displayed if you use the testalert feature
	// and no DEF_ALERT setting has been provided.
	// Parameters: none
$aMessages[MSG_NO_DEF_ALERT] = 'De DEF_ALERT waarde werd niet ingesteld.';

	// MSG_TEST_SENT is displayed if when use the testalert feature
	// Parameters: none
$aMessages[MSG_TEST_SENT] = 'Test bericht verzonden. Controleer uw e-mail.';

	// MSG_TEST_FAILED is displayed if when use the testalert feature
	// and the mail sending fails.
	// Parameters: none
$aMessages[MSG_TEST_FAILED] = 'Het verzenden van een alarm bericht is MISLUKT.  Controleer uw '.
							    'server error logs.';

	// MSG_NO_DATA_PAGE is the page that's displayed if the user
	// just opens the URL to FormMail directly.
	// Parameters: none
$aMessages[MSG_NO_DATA_PAGE] =	'Deze URL is een formulier verwerkings programma.\n'.
								'Het formulier lijkt niet correct te werken '.
								'want er is geen data gevonden.\n'.
								'Surf niet naar deze '.
								'URL; gebruik het alleen in een formulier.';

	// MSG_REQD_ERROR is displayed to the user as a default error
	// message when they haven't supplied some required fields
	// Parameters: none
$aMessages[MSG_REQD_ERROR] = 'Het formulier bevat niet alle noodzakelijke waarden.';

	// MSG_COND_ERROR is displayed to the user as a default error
	// message when some form conditions have failed
	// Parameters: none
$aMessages[MSG_COND_ERROR] = 'Sommige opgegeven waarden zijn ongeldig.';

	// MSG_CRM_FAILURE is displayed to the user when submission
	// to the CRM has failed.
	// Parameters: none
$aMessages[MSG_CRM_FAILURE] = 'De formulierverwerking is mislukt door '.
							    'een CRM storing.';

	// MSG_FOPTION_WARN is sent in an Alert message when the form
	// uses the superseded SendMailFOption feature
	// Parameters:
	//	$LINE	line number for SENDMAIL_F_OPTION
$aMessages[MSG_FOPTION_WARN] = 'Waarschuwing: Je gebruikt een SendMailFOption in '.
							    '"mail_options" in uw formulier. Dit werd '.
							    'teniet gedaan door een instelling in de configuratie '.
							    'in formmail.php.  Pas de '.
							    'formmail.php configuratie aan (zoek naar '.
							    'SENDMAIL_F_OPTION op regel $LINE) en pas '.
							    'het aan naar "true", verwijder daarna de SendMailFOption '.
							    'in uw formulieren.';

	// MSG_NO_ACTIONS is sent in an Alert message when there is no
	// action to perform or email address to send to
	// Parameters: none
$aMessages[MSG_NO_ACTIONS] = 'Het formulier bevat een interne fout - geen acties '.
							    'of recipients opgegeven.';

	// MSG_NO_RECIP is sent in an Alert message when there are no
	// valid recipients to send to
	// Parameters: none
$aMessages[MSG_NO_RECIP] = 'Het formulier bevat een interne fout - ongeldige '.
						    'recipients opgegeven.';

	// MSG_INV_EMAIL is sent in an Alert message when there are errors
	// in the email addresses specified in the form
	// Parameters:
	//	$ERRORS		list of errors
$aMessages[MSG_INV_EMAIL] = 'Het formulier bevat ongeldige e-mail adressen '.
							'$MNUM:\n$ERRORS';

    // MSG_FAILED_SEND is sent in an Alert message when the mail sending fails.
	// Parameters: none
$aMessages[MSG_FAILED_SEND] = 'E-mail verzenden is mislukt';

    // MSG_ARESP_EMAIL is sent in an Alert message when
	// no email address has been specified for an autoreponse
	// Parameters: none
$aMessages[MSG_ARESP_EMAIL] = 'Geen "email" veld gevonden. Beantwoorden '.
							    'vereist een afzender e-mail adres.';

    // MSG_ARESP_SUBJ is the default subject for the auto response email
	// Parameters: none
$aMessages[MSG_ARESP_SUBJ] = 'Uw formulierverwerking';

    // MSG_LOG_NO_VERIMG is written to the auto respond log file
	// if no VerifyImgString session variable was found
	// Parameters: none
$aMessages[MSG_LOG_NO_VERIMG] = 'Geen VerifyImgString in sessie';

    // MSG_ARESP_NO_AUTH is shown to the user
	// if no VerifyImgString session variable was found
	// Parameters: none
$aMessages[MSG_ARESP_NO_AUTH] = 'Geen machtiging gekregen om e-mail de verzenden. '.
                                'Dit is meestal een fout op de server.';

    // MSG_LOG_NO_MATCH is written to the auto respond log file
	// if the user's entry did not match the image verification
	// Parameters: none
$aMessages[MSG_LOG_NO_MATCH] = 'De invoer van de gebruiker kwam niet overeen met de afbeelding';

    // MSG_ARESP_NO_MATCH is shown to the user
	// if the user's entry did not match the image verification
	// Parameters: none
$aMessages[MSG_ARESP_NO_MATCH] = 'Uw invoer kwam niet overeen met de afbeelding';

    // MSG_LOG_FAILED is written to the auto respond log file
	// if the autoresponding failed
	// Parameters: none
$aMessages[MSG_LOG_FAILED] = 'Mislukt';

    // MSG_ARESP_FAILED is sent in an Alert message
	// if the autoresponding failed
	// Parameters: none
$aMessages[MSG_ARESP_FAILED] = 'Autoresponder mislukt';

    // MSG_LOG_OK is written to the auto respond log file
	// if the autoresponding succeeded
	// Parameters: none
$aMessages[MSG_LOG_OK] = 'OK';

	// MSG_THANKS_PAGE is the default page that's displayed if the
	// submission is successful
	// Parameters: none
$aMessages[MSG_THANKS_PAGE] = 'Bedankt!  Wij ontvingen uw informatie '.
							    'en, indien gewenst, nemen we '.
							    'binnenkort contact met U op.';

	// MSG_LOAD_MODULE is sent in an alert message if a module
    // could not be loaded.
	// Parameters:
    //  $FILE    the file name
    //  $ERROR   the error message
$aMessages[MSG_LOAD_MODULE] = 'Kan de module niet laden uit het bestand \'$FILE\': $ERROR';

	// MSG_LOAD_FMCOMPUTE is sent in an alert message if the form
    // specifies at least one "fmcompute" field and the FMCompute
    // module cannot be loaded.
	// Parameters:
    //  $FILE    the file name
    //  $ERROR   the error message
$aMessages[MSG_LOAD_FMCOMPUTE] = 'Kan de module FMCompute niet laden uit het bestand '.
                                    '\'$FILE\': $ERROR';

	// MSG_REGISTER_MODULE is sent in an alert message if a module
    // could not register with FMCompute
	// Parameters:
    //  $NAME    the name of the module
    //  $ERROR   the error message
$aMessages[MSG_REGISTER_MODULE] = 'Ka de module $NAME niet registreren met '.
                                    'FMCompute: $ERROR';


	// MSG_COMP_PARSE is sent in an alert message if a parse error
    // occurs in an fmcompute field
	// Parameters:
    //  $CODE    the code with an error
    //  $ERRORS  the error messages
$aMessages[MSG_COMP_PARSE] = 'Deze vertaal fouten kwamen voor in de volgende '.
                                'code:\n$ERRORS\n$CODE';

	// MSG_COMP_REG_DATA is sent in an alert message if FormMail cannot
    // register a data field with the FMCompute module
	// Parameters:
    //  $NAME    the field name
    //  $ERROR  the error message
$aMessages[MSG_COMP_REG_DATA] = 'Mislukt registreren van het data veld \'$NAME\': '.
                                '$ERROR';

	// MSG_COMP_ALERT is sent in an alert message if the FMCompute
    // module has generated some alert messages.
	// Parameters:
    //  $ALERTS  the alerts
$aMessages[MSG_COMP_ALERT] = 'De volgende alarm berichten werden gerapporteerd '.
                            'door de FMCompute module: $ALERTS';

	// MSG_COMP_DEBUG is sent in an alert message if the FMCompute
    // module has generated some debug messages.
	// Parameters:
    //  $DEBUG  the alerts
$aMessages[MSG_COMP_DEBUG] = 'De volgende debug berichten werden gerapporteerd '.
                            'door de FMCompute module: $DEBUG';

	// MSG_COMP_EXEC is sent in an alert message if the FMCompute
    // module has generated some error messages during execution
	// Parameters:
    //  $ERRORS  the errors
$aMessages[MSG_COMP_EXEC] = 'De volgende fout berichten werden gerapporteerd '.
                            'door de FMCompute module: $ERRORS';

	// MSG_TEMPL_ALERT is sent in an alert message if Advanced Template
    // Processing has generated some alert messages.
	// Parameters:
    //  $ALERTS  the alerts
$aMessages[MSG_TEMPL_ALERT] = 'De volgende alarm berichten werden gerapporteerd '.
                            'door de Advanced Template Processor: $ALERTS';

	// MSG_TEMPL_DEBUG is sent in an alert message if Advanced Template
    // Processing has generated some debug messages.
	// Parameters:
    //  $DEBUG  the alerts
$aMessages[MSG_TEMPL_DEBUG] = 'De volgende debug berichten werden gerapporteerd '.
                            'door de Advanced Template Processor: $DEBUG';

	// MSG_TEMPL_PROC is sent in an alert message if Advanced Template Processing
    // has generated some error messages during processing
	// Parameters:
    //  $ERRORS  the errors
$aMessages[MSG_TEMPL_PROC] = 'De volgende fout berichten werden gerapporteerd '.
                            'door de Advanced Template Processor: $ERRORS';

	// MSG_REG_FMCOMPUTE is sent in an Alert message when FormMail
    // cannot register an external function with FMCompute.
	// Parameters:
	//	FUNC    the function that could not be registered
    //  ERROR   the error message
$aMessages[MSG_REG_FMCOMPUTE] = 'Kan de functie "$FUNC" niet registreren bij '.
                                'FMCompute: $ERROR';


	// MSG_USER_ERRORS is shown as part of a user error when an FMCompute
    // has called the "UserError" function one or more times.
	// Parameters:
	//	NONE
$aMessages[MSG_USER_ERRORS] = 'Eén of meer fouten opgetreden bij de verwerking van uw formulier';


	// MSG_CALL_PARAM_COUNT is sent in an alert when a call to a FormMail
    // function from FMCompute has the wrong number of parameters
	// Parameters:
	//	FUNC    the function name
    //  COUNT   the actual number of parameters passed
$aMessages[MSG_CALL_PARAM_COUNT] = 'FMCompute gebruikt de FormMail functie '.
                                   '\'$FUNC\' met een foutief aantal '.
                                   'parameters: $COUNT';

	// MSG_CALL_UNK_FUNC is sent in an alert when FMCompute calls an
    // unknown FormMail function
	// Parameters:
	//	FUNC    the function name
$aMessages[MSG_CALL_UNK_FUNC] = 'FMCompute gebruikt een onbekende FormMail functie '.
                                   '\'$FUNC\'';

	// MSG_SAVE_FILE is sent in an alert when saving a file to
    // the server has failed
	// Parameters:
	//	FILE    the source file name (usually a temporary file name)
    //  DEST    the destination file name
    //  ERR     the error message
$aMessages[MSG_SAVE_FILE] = 'Mislukt opslaan van het bestand \'$FILE\' naar \'$DEST\': $ERR';

	// MSG_SAVE_FILE_EXISTS is sent as part of an alert when saving a file to
    // the repository ($FILE_REPOSITORY) has failed because the file
    // already exists and FILE_OVERWRITE is set to false.
	// Parameters:
	//	FILE    the destination file name
$aMessages[MSG_SAVE_FILE_EXISTS] = 'Kan het bestand niet opslaan omdat dit het '.
                                    '\'$FILE\' zou overschrijven en u heeft '.
                                    'FILE_OVERWRITE ingesteld op false.';

	// MSG_EMPTY_ADDRESSES is sent as part of an alert when a number of empty
    // email addresses have been specified in recipients, cc, or bcc
    // *and* there are no valid addresses provided
    // in the list
	// Parameters:
	//	COUNT    the number of empty addresses
$aMessages[MSG_EMPTY_ADDRESSES] = '$COUNT lege adressen';

	// MSG_CHMOD is sent in an alert when changing the protection
    // mode of a file to has failed
	// Parameters:
	//	FILE    the file name
    //  MODE    the mode
    //  ERR     the error message
$aMessages[MSG_CHMOD] = 'Mislukt aanpassen van de rechten van het bestand \'$FILE\' '.
                        'naar $MODE: $ERR';

    // MSG_VERIFY_MISSING is shown to the user image verification string
    // was not found
	// Parameters: none
$aMessages[MSG_VERIFY_MISSING] = 'Afbeeldings verificatie tekenreeks ontbreekt. Dit'.
                                 ' is waarschijnlijk te wijten aan een fout op de server.';

    // MSG_VERIFY_MATCH is shown to the user
	// if the user's entry did not match the image verification for the
    // imgverify option
	// Parameters: none
$aMessages[MSG_VERIFY_MATCH] = 'Uw invoer kwam niet overeen met de afbeelding';

	// MSG_FILE_NAMES_INVALID is sent in an Alert message when
	// a form's file_names setting has errors
	// Parameters: none
	// A list of errors is appended on separate lines
$aMessages[MSG_FILE_NAMES_INVALID] = 'Sommige file_names specificaties zijn ongeldig $MNUM:\n';

	// MSG_FILE_NAMES_NOT_FILE is sent in an Alert message when
	// a form's file_names setting refers to a file field that doesn't
    // exist
	// Parameters:
    //      NAME    the name of the file field that doesn't exist
$aMessages[MSG_FILE_NAMES_NOT_FILE] = 'Uw file_names specificaties bevatten '.
                                      'een fout. \'$NAME\' is geen naam '.
                                      'van een veld om een bestand te versturen\n';

	// MSG_NEXT_PLUS_GOOD is sent in an alert message if the form is
    // ambiguous and specifies both "next_form" and "good_url" or
    // "good_template"
	// Parameters:
    //  $WHICH  the "good_" field that was specified
$aMessages[MSG_NEXT_PLUS_GOOD] = 'Het formulier bevat zowel "next_form" '.
                                'en "$WHICH" velden - de uit te voeren actie '.
                                'is daardoor dubbelzinnig';

	// MSG_MULTIFORM is sent in an Alert message when a form tries
	// to use a multi-form template, but templates have not been configured in
	// formmail.php
	// Parameters: none
$aMessages[MSG_MULTIFORM] = 'Gebruik MULTIFORMDIR of MULTIFORMURL '.
							'in formmail.php voor je gebruik kunt maken van '.
							'formulieren met meerdere pagina\'s.';

	// MSG_MULTIFORM_FAILED is sent in an Alert message
	// when processing a multi-page form template has failed.
	// Parameters:
	//	NAME	the template name
$aMessages[MSG_MULTIFORM_FAILED] = 'Mislukte verwerking van een formulier sjabloon met meerdere pagina\'s "$NAME"';

	// MSG_NEED_THIS_FORM is sent in an Alert message
	// when a multi-page form does not specify the "this_form" field.
	// Parameters:
	//	none
$aMessages[MSG_NEED_THIS_FORM] = 'Formulieren met meerdere pagina\'s vereisen het "this_form" veld';

	// MSG_NO_PHP_SELF is sent in an Alert message
	// when FormMail requires the "PHP_SELF" server variable and PHP is not
    // providing it.
	// Parameters:
	//	none
$aMessages[MSG_NO_PHP_SELF] = 'PHP op de server ondersteunt geen "PHP_SELF"';

	// MSG_RETURN_URL_INVALID is sent in an Alert message
	// when "this_form" is not a valid return URL.  This occurs for
    // multi-page forms.
	// Parameters:
	//	URL     the invalid URL
$aMessages[MSG_RETURN_URL_INVALID] = 'Terug (Return) URL "$URL" is ongeldig';

	// MSG_GO_BACK is sent in an Alert message
	// when "multi_go_back" has been submitted but this isn't part of a
    // multi-page form.
	// Parameters:
	//	none
$aMessages[MSG_GO_BACK] = 'Kan niet "Terug gaan" als je in een formulier met meerdere pagina\'s '.
                          'werkt of op de eerste pagina van een formulier '.
                          'met meerdere pagina\'s';

	// MSG_OPEN_URL is sent in an Alert message when a URL cannot
    // be opened.
	// Parameters:
	//	URL     the invalid URL
    //  ERROR   error message
$aMessages[MSG_OPEN_URL] = 'Mislukt openen van de URL "$URL": $ERROR';

	// MSG_CANNOT_RETURN is sent in an Alert message when an invalid return
    // request is made in a multi-page form sequence.
	// Parameters:
	//	TO          the requested page index
    //  TOPINDEX    the top page index
$aMessages[MSG_CANNOT_RETURN] = 'Kan niet terugkeren naar de pagina $TO.  De bovenste pagina '.
                                'index is $TOPINDEX';

	// MSG_ATTACK_DETECTED is sent in an Alert message when an attack on
    // the server has been detected
	// Parameters:
	//	ATTACK      name or description of the attack
    //  INFO        more information about the attack
$aMessages[MSG_ATTACK_DETECTED] = 'Server aanval "$ATTACK" opgemerkt. '.
                                  'Uw server is veilig omdat FormMail '.
                                  'onkwetsbaar is voor deze aanval.  Je kunt '.
                                  'dit bericht uitschakelen door de instelling '.
                                  'ALERT_ON_ATTACK_DETECTION aan te passen naar false '.
                                  'in FormMail\'s configuratie.'.
                                  '\nMeer informatie:\n$INFO';

	// MSG_ATTACK_PAGE is the contents of the browser page displayed to the
    // user when an attack is detected
	// Parameters:
	//	none
$aMessages[MSG_ATTACK_PAGE] = 'De formulier verwerking is verworpen '.
                              'omdat dit lijkt op een poging om de server te misbruiken. '.
                              'Voor meer informatie over deze fout, bezoek '.
                              '<a href="http://www.tectite.com/serverabuse.php" '.
                              ' target="_blank">'.
                              'www.tectite.com/serverabuse.php</a>.';

	// MSG_ATTACK_MIME_INFO is the contents of the INFO parameter
    // to the MSG_ATTACK_DETECTED message for the MIME attack
	// Parameters:
	//	FLD     name of the field
    //  CONTENT the invalid content found in the field
$aMessages[MSG_ATTACK_MIME_INFO] = 'Het veld "$FLD" bevat ongeldige '.
                                   'inhoud "$CONTENT"';

	// MSG_ATTACK_DUP_INFO is the contents of the INFO parameter
    // to the MSG_ATTACK_DETECTED message for the Duplicate Data attack
	// Parameters:
	//	FLD1     name of the first field
	//	FLD2     name of the second field
$aMessages[MSG_ATTACK_DUP_INFO] = 'De velden "$FLD1" en "$FLD2" bevatten '.
                                  'dezelfde data';

	// MSG_ATTACK_SPEC_INFO is the contents of the INFO parameter
    // to the MSG_ATTACK_DETECTED message for the Special Field attack
	// Parameters:
	//	FLD     name of the special field
$aMessages[MSG_ATTACK_SPEC_INFO] = 'Het speciale veld "$FLD" bevat een e-mail adres';

	// MSG_ATTACK_MANYURL_INFO is the contents of the INFO parameter
    // to the MSG_ATTACK_DETECTED message for the Many URLs attack
	// Parameters:
	//	FLD     name of the field
    //  NUM     number of URLs detected
$aMessages[MSG_ATTACK_MANYURL_INFO] = 'Veld "$FLD" bevat $NUM URLs';

	// MSG_ATTACK_MANYFIELDS_INFO is the contents of the INFO parameter
    // to the MSG_ATTACK_DETECTED message for the Many Fields with URLs
    // attack
	// Parameters:
    //  NUM     number of fields detected with URLs
    //  FLDS    list of fields with URLs in them
$aMessages[MSG_ATTACK_MANYFIELDS_INFO] = '$NUM velden bevatten URL\'s: $FLDS';


	// MSG_NEED_SCRATCH_PAD is an alert message when processing requires
    // SCRATCH_PAD configuration for file upload processing.  This occurs
    // when you upload files in pages of a multi page form sequence.
	// Parameters:
	//	none
$aMessages[MSG_NEED_SCRATCH_PAD] = 'Je moet SCRATCH_PAD instellen in de '.
                                    'configuratie om '.
                                    'bestanden te verzenden.';

	// MSG_OPEN_SCRATCH_PAD is an alert message when the SCRATCH_PAD
    // directory cannot be opened for cleanup.
	// Parameters:
	//	DIR     name of the directory
    //  ERR     more error information
$aMessages[MSG_OPEN_SCRATCH_PAD] = 'Kan de SCRATCH_PAD map '.
                                    '"$DIR" niet openen.  Openen mislukt: $ERR';

	// MSG_NO_NEXT_NUM_FILE is an alert message when a form tries to
    // use the %nextnum% derivation feature but you haven't
    // setup FormMail's configuration correctly.
	// Parameters:
    //  none
$aMessages[MSG_NO_NEXT_NUM_FILE] = 'Je kunt de functie %nextnum% niet gebruiken: '.
                                    'NEXT_NUM_FILE is niet ingesteld';

	// MSG_NEXT_NUM_FILE is an alert message when a form tries to
    // use the %nextnum% derivation feature but the next number file cannot
    // be processed.
	// Parameters:
    //  FILE    name of the file
    //  ACT     action
    //  ERR     more error information
$aMessages[MSG_NEXT_NUM_FILE] = 'Kan het volgende bestand niet $ACT '.
                                        '\'$FILE\': $ERR';

	// MSG_MULTI_UPLOAD is an alert message when processing of uploaded
    // fails during a multi-page form sequence
	// Parameters:
	//	none
$aMessages[MSG_MULTI_UPLOAD] = 'Bestand verzenden tijdens het verwerken van '.
                                'een formulier met meerdere pagina\'s mislukt.';

	// MSG_URL_PARSE is an error message when a URL to be opened
    // cannot be parsed
	// Parameters:
	//	none
$aMessages[MSG_URL_PARSE] = 'Ontleden van de URL is mislukt';

	// MSG_URL_SCHEME is an error message when a URL to be opened
    // has an unsupported "scheme" value
	// Parameters:
	//	SCHEME     the scheme that was seen
$aMessages[MSG_URL_SCHEME] = 'Het URL schema "$SCHEME" wordt niet ondersteund';

	// MSG_SOCKET is an error message when opening a socket for a URL
    // fails
	// Parameters:
	//	ERRNO     the error code
    //  ERRSTR    the error string
    //  PHPERR    the value of $php_errormsg
$aMessages[MSG_SOCKET] = 'Socket fout $ERRNO: $ERRSTR: $PHPERR';

	// MSG_GETURL_OPEN is an error message when the web server reports
    // a failure on opening a URL
	// Parameters:
	//	STATUS     the HTTP status value (number + string)
$aMessages[MSG_GETURL_OPEN] = 'Openen van URL is mislukt: $STATUS';

	// MSG_FILE_UPLOAD_ERRn are the error messages corresponding to the
    // PHP file upload error code n.
	// Parameters:
	//	none
$aMessages[MSG_FILE_UPLOAD_ERR1] = 'Het verzonden bestand is groter dan de upload_max_filesize richtlijn in php.ini toelaat.';
$aMessages[MSG_FILE_UPLOAD_ERR2] = 'Het verzonden bestand is groter dan de MAX_FILE_SIZE richtlijn in html formulier toelaat.';
$aMessages[MSG_FILE_UPLOAD_ERR3] = 'Het verzonden bestand is gedeeltelijk verzonden.';
$aMessages[MSG_FILE_UPLOAD_ERR4] = 'Er is geen bestand verzonden.';

	// MSG_FILE_UPLOAD_ERR_UNK is displayed when an unknown error code
    // is provided by PHP for a file upload
	// Parameters:
	//	ERRNO   the error code
$aMessages[MSG_FILE_UPLOAD_ERR_UNK] = 'Onbekende fout melding bij het verzenden van een bestand $ERRNO';

    // MSG_FILE_UPLOAD_SIZE is displayed when an uploaded file exceeds
    // the configured maximum size
	// Parameters:
	//	NAME   the uploaded file's name
    //  SIZE   the size of the uploaded file
    //  MAX    the maximum size that was exceeded
$aMessages[MSG_FILE_UPLOAD_SIZE] = 'Verzonden bestand "$NAME" is te groot ('.
                                    '$SIZE bytes). De maximale grootte '.
                                    'is $MAX kilobytes.';

	// MSG_DER_FUNC_ERROR is sent in an Alert message when
	// a form uses a derive_fields function that's
	// formatted incorrectly
	// Parameters:
	//	$SPEC	the invalid value specification
    //  $MSG    a message describing the error or providing an example
$aMessages[MSG_DER_FUNC_ERROR] = 'derive_fields: ongeldige functie specificatie '.
								    '"$SPEC": $MSG';

    // MSG_DER_FUNC_SIZE_FMT describes the right syntax for the "size" function
	// Parameters:
	//	none
$aMessages[MSG_DER_FUNC_SIZE_FMT] = 'De "size" functie gebruikt je als volgt: '.
                                'size(file_field)';

    // MSG_DER_FUNC_IF_FMT describes the right syntax for the "if" function
	// Parameters:
	//	none
$aMessages[MSG_DER_FUNC_IF_FMT] = 'De "if" functie gebruik je als volgt: '.
                                'if(field;spec;spec)';

    // MSG_DER_FUNC_NEXTNUM_FMT describes the right syntax for the "nextnum" function
	// Parameters:
	//	none
$aMessages[MSG_DER_FUNC_NEXTNUM_FMT] = 'De "nextnum" functie gebruik je als volgt: '.
                                'nextnum(pad) of nextnum(pad;base).  pad en base '.
                                'zijn getallen. base heeft een waarde van 2 tot en met 36';

    // MSG_DER_FUNC_EXT_FMT describes the right syntax for the "ext" function
	// Parameters:
	//	none
$aMessages[MSG_DER_FUNC_EXT_FMT] = 'De "ext" functie gebruik je als volgt: '.
                                'ext(file_field)';

    // MSG_DER_FUNC1_FMT describes the right syntax for a function
    // requiring one parameter
	// Parameters:
	//	FUNC    name of the function
$aMessages[MSG_DER_FUNC1_FMT] = 'De "$FUNC" functie gebruik je als volgt: '.
                                '$FUNC(fieldname)';
?>