[debian-edu-commits] debian-edu/ 02/02: tagging version 0.412

Alexander Alemayhu alexander at bitraf.no
Thu Aug 7 07:19:47 UTC 2014


This is an automated email from the git hooks/post-receive script.

ccscanf-guest pushed a commit to annotated tag 0.412
in repository debian-edu-config.

commit 1d3d7256c18bdc09be95798d860e8ca53bb22557
Author: Petter Reinholdtsen <pere at hungry.com>
Date:   Sat Jun 16 14:19:44 2007 +0000

    tagging version 0.412
---
 debian-edu-config/Makefile                         |  363 ++++
 debian-edu-config/README                           |  277 +++
 debian-edu-config/README.ldap                      |  168 ++
 .../bin/apt-get-update-files-download              |   17 +
 debian-edu-config/bin/cfengine-debian-edu          |   34 +
 debian-edu-config/bin/debian-edu-hd-warn           |   59 +
 debian-edu-config/bin/debian-edu-lessdisks         |  202 +++
 debian-edu-config/bin/debian-edu-ltsp              |  118 ++
 debian-edu-config/bin/debian-edu-pxelinux.cfg      |  125 ++
 debian-edu-config/bin/update-hostname-from-ip      |   56 +
 debian-edu-config/bin/update-ini-file              |   65 +
 debian-edu-config/cf/cf.apache2                    |   16 +
 debian-edu-config/cf/cf.apt                        |   17 +
 debian-edu-config/cf/cf.bind9                      |   12 +
 debian-edu-config/cf/cf.cfengine                   |   24 +
 debian-edu-config/cf/cf.cups                       |    5 +
 debian-edu-config/cf/cf.dhcpserver                 |   36 +
 debian-edu-config/cf/cf.exim                       |   30 +
 debian-edu-config/cf/cf.fstab                      |   20 +
 debian-edu-config/cf/cf.homes                      |   64 +
 debian-edu-config/cf/cf.imap                       |   38 +
 debian-edu-config/cf/cf.inetd                      |   20 +
 debian-edu-config/cf/cf.kdm                        |   62 +
 debian-edu-config/cf/cf.ldapclient                 |  160 ++
 debian-edu-config/cf/cf.ldapserver                 |   95 ++
 debian-edu-config/cf/cf.locale                     |   58 +
 debian-edu-config/cf/cf.ltsp                       |  234 +++
 debian-edu-config/cf/cf.mime-support               |   30 +
 debian-edu-config/cf/cf.mozilla                    |   88 +
 debian-edu-config/cf/cf.munin                      |    8 +
 debian-edu-config/cf/cf.nagios                     |   10 +
 debian-edu-config/cf/cf.nagios2                    |   12 +
 debian-edu-config/cf/cf.nat                        |    5 +
 debian-edu-config/cf/cf.ntp                        |   33 +
 debian-edu-config/cf/cf.opera                      |   13 +
 debian-edu-config/cf/cf.pcmcia                     |   11 +
 debian-edu-config/cf/cf.samba                      |    6 +
 debian-edu-config/cf/cf.slbackup                   |   25 +
 debian-edu-config/cf/cf.squid                      |  153 ++
 debian-edu-config/cf/cf.ssh                        |   13 +
 debian-edu-config/cf/cf.syslog                     |   47 +
 debian-edu-config/cf/cf.sysstat                    |   17 +
 debian-edu-config/cf/cfd                           |   29 +
 debian-edu-config/cf/cfd.conf                      |   20 +
 debian-edu-config/cf/cfengine.conf                 |  139 ++
 debian-edu-config/cf/cfrunhosts.pl                 |   43 +
 debian-edu-config/debian/README.debian             |    7 +
 debian-edu-config/debian/changelog                 | 1444 ++++++++++++++++
 debian-edu-config/debian/compat                    |    1 +
 debian-edu-config/debian/control                   |   18 +
 debian-edu-config/debian/copyright                 |   10 +
 debian-edu-config/debian/cron.d                    |    5 +
 .../debian/debian-edu-config.boot_xconf            |  105 ++
 debian-edu-config/debian/debian-edu-config.config  |    9 +
 .../debian/debian-edu-config.enable-nat            |   90 +
 .../debian/debian-edu-config.fetch-ldap-cert       |   49 +
 debian-edu-config/debian/debian-edu-config.links   |    2 +
 .../debian/debian-edu-config.manpages              |    2 +
 debian-edu-config/debian/debian-edu-config.modules |    8 +
 .../debian/debian-edu-config.open-backdoor         |  107 ++
 .../debian/debian-edu-config.postinst              |  108 ++
 debian-edu-config/debian/debian-edu-config.prerm   |   14 +
 .../debian/debian-edu-config.report-reboot         |   71 +
 .../debian/debian-edu-config.resize_lvm            |   70 +
 .../debian/debian-edu-config.start-wlan            |   66 +
 .../debian/debian-edu-config.templates             |   11 +
 .../debian/debian-edu-config.update-hostname       |   63 +
 debian-edu-config/debian/dirs                      |   39 +
 debian-edu-config/debian/po/POTFILES.in            |    1 +
 debian-edu-config/debian/po/ca.po                  |   42 +
 debian-edu-config/debian/po/cs.po                  |   38 +
 debian-edu-config/debian/po/de.po                  |   39 +
 debian-edu-config/debian/po/es.po                  |   64 +
 debian-edu-config/debian/po/fr.po                  |   40 +
 debian-edu-config/debian/po/nl.po                  |   36 +
 debian-edu-config/debian/po/pt.po                  |   38 +
 debian-edu-config/debian/po/templates.pot          |   37 +
 debian-edu-config/debian/rules                     |   70 +
 debian-edu-config/etc/X11/Xsession-debian-edu      |  102 ++
 .../X11/Xsession.d/10debian-edu-one-login-per-host |   46 +
 .../etc/X11/Xsession.d/10debian-edu-set-umask      |    8 +
 .../etc/apache2/conf.d/debian-edu-config-doc       |   16 +
 .../apache2/mods-available/debian-edu-userdir.conf |   10 +
 .../etc/apache2/sites-available/debian-edu-default |   43 +
 .../apache2/sites-available/debian-edu-ssl-default |   48 +
 .../etc/bind/debian-edu/bind9-default              |    9 +
 debian-edu-config/etc/bind/debian-edu/db.10        |   30 +
 debian-edu-config/etc/bind/debian-edu/db.192.168   |   17 +
 debian-edu-config/etc/bind/debian-edu/db.intern    |   65 +
 .../etc/bind/debian-edu/named-bind9.conf           |   82 +
 .../etc/bind/debian-edu/named.conf.options         |   42 +
 debian-edu-config/etc/cfengine/cfservd.conf        |   23 +
 debian-edu-config/etc/cfengine/inputs/cfagent.conf |   18 +
 debian-edu-config/etc/cfengine/update.conf         |   34 +
 .../etc/courier/authldaprc-debian-edu              |   30 +
 debian-edu-config/etc/courier/imapd-debian-edu.cnf |   22 +
 debian-edu-config/etc/cups/cupsd-debian-edu.conf   |  723 ++++++++
 debian-edu-config/etc/debian-edu/hd-warn.conf      |    6 +
 debian-edu-config/etc/debian-edu/lts.conf.dist     |    5 +
 debian-edu-config/etc/debian-edu/nightkill.conf    |    1 +
 debian-edu-config/etc/default/backdoor             |   18 +
 .../etc/desktop-profiles/debian-edu-config.listing |   22 +
 debian-edu-config/etc/dhclient-exit-hooks          |    4 +
 debian-edu-config/etc/dhcp3/dhcpd-debian-edu.conf  |  207 +++
 debian-edu-config/etc/exim/exim-ldap-client.conf   |  218 +++
 debian-edu-config/etc/exim/exim-ldap-server.conf   |  266 +++
 .../etc/exim4/exim-ldap-client-v4.conf             |  286 ++++
 .../etc/exim4/exim-ldap-server-v4.conf             |  353 ++++
 debian-edu-config/etc/filesystems                  |    3 +
 debian-edu-config/etc/ifplugd/ifplugd.action       |   44 +
 debian-edu-config/etc/krb5-winbind-debian-edu.conf |   25 +
 debian-edu-config/etc/ldap/slapd-debian-edu.conf   |  131 ++
 .../etc/ldap/slapd-etch_debian-edu.conf            |  153 ++
 debian-edu-config/etc/ldap/ssl/slapd-cert.cnf      |   21 +
 debian-edu-config/etc/lsb-release                  |    4 +
 debian-edu-config/etc/nagios/debian-edu/cgi.cfg    |   24 +
 .../etc/nagios/debian-edu/checkcommands.cfg        |   88 +
 .../etc/nagios/debian-edu/contactgroups.cfg        |    5 +
 .../etc/nagios/debian-edu/contacts.cfg             |   11 +
 .../etc/nagios/debian-edu/dependencies.cfg         |   48 +
 .../etc/nagios/debian-edu/hostgroups/gateways.cfg  |    6 +
 .../etc/nagios/debian-edu/hostgroups/servers.cfg   |    6 +
 .../etc/nagios/debian-edu/hostgrouptemplate.cfg    |    6 +
 .../etc/nagios/debian-edu/hosts/gateway.cfg        |   12 +
 .../etc/nagios/debian-edu/hosts/tjener.cfg         |  123 ++
 .../etc/nagios/debian-edu/hosttemplates.cfg        |   33 +
 .../etc/nagios/debian-edu/htpasswd.users           |    1 +
 debian-edu-config/etc/nagios/debian-edu/index.html |   27 +
 debian-edu-config/etc/nagios/debian-edu/main.html  |   95 ++
 .../etc/nagios/debian-edu/misccommands.cfg         |   30 +
 .../etc/nagios/debian-edu/resource.cfg             |    4 +
 .../etc/nagios/debian-edu/services.cfg             |  122 ++
 .../etc/nagios/debian-edu/servicetemplates.cfg     |   42 +
 debian-edu-config/etc/nagios/debian-edu/side.html  |  213 +++
 .../etc/nagios/debian-edu/skolelinux_logo.png      |  Bin 0 -> 32473 bytes
 .../etc/nagios/debian-edu/skolelinux_logo_140.png  |  Bin 0 -> 9381 bytes
 .../etc/nagios/debian-edu/timeperiods.cfg          |   35 +
 debian-edu-config/etc/nagios/nagios-debian-edu.cfg |   71 +
 debian-edu-config/etc/nagios2/debian-edu/cgi.cfg   |   27 +
 .../etc/nagios2/debian-edu/commands.cfg            |  582 +++++++
 .../etc/nagios2/debian-edu/contactgroups.cfg       |    8 +
 .../etc/nagios2/debian-edu/contacts.cfg            |   14 +
 .../etc/nagios2/debian-edu/dependencies.cfg        |    2 +
 .../etc/nagios2/debian-edu/escalations.cfg         |    2 +
 .../etc/nagios2/debian-edu/host_templates.cfg      |   20 +
 .../etc/nagios2/debian-edu/hostextinfo.cfg         |   10 +
 .../etc/nagios2/debian-edu/hostgroups.cfg          |   52 +
 debian-edu-config/etc/nagios2/debian-edu/hosts.cfg |   22 +
 .../etc/nagios2/debian-edu/htpasswd.users          |    1 +
 .../etc/nagios2/debian-edu/nagios.cfg              |   74 +
 .../etc/nagios2/debian-edu/resources.cfg           |    2 +
 .../etc/nagios2/debian-edu/service_templates.cfg   |   28 +
 .../etc/nagios2/debian-edu/serviceextinfo.cfg      |   77 +
 .../etc/nagios2/debian-edu/servicegroups.cfg       |    2 +
 .../etc/nagios2/debian-edu/services.cfg            |  106 ++
 .../etc/nagios2/debian-edu/timeperiods.cfg         |   41 +
 .../etc/pam.d/common-account-ldap-debian-edu       |   10 +
 .../etc/pam.d/common-account-winbind-debian-edu    |   10 +
 debian-edu-config/etc/pam.d/common-auth-debian-edu |   11 +
 .../etc/pam.d/common-auth-ldap-debian-edu          |   12 +
 .../etc/pam.d/common-auth-winbind-debian-edu       |   13 +
 .../etc/pam.d/common-password-ldap-debian-edu      |   28 +
 .../etc/pam.d/common-password-winbind-debian-edu   |    1 +
 .../etc/pam.d/common-session-debian-edu            |   11 +
 .../etc/pam.d/common-session-winbind-debian-edu    |   12 +
 .../etc/resolvconf/update.d/bind-debian-edu        |  102 ++
 debian-edu-config/etc/samba/netlogon/login.bat     |    8 +
 debian-edu-config/etc/samba/netlogon/shortcut.vbs  |    7 +
 .../etc/samba/smb-debian-edu-client.conf           |   98 ++
 debian-edu-config/etc/samba/smb-debian-edu.conf    |  133 ++
 .../etc/samba/smb-winbind-debian-edu.conf          |   24 +
 debian-edu-config/etc/samba/smbaddclient.pl        |  133 ++
 .../security/pam_mount-stateless-debian-edu.conf   |  203 +++
 .../etc/security/pam_mount-winbind-debian-edu.conf |  202 +++
 .../etc/usbmount/usbmount-debian-edu.conf          |   37 +
 debian-edu-config/ldap-bootstrap/autofs.ldif       |   59 +
 debian-edu-config/ldap-bootstrap/netgroup.ldif     |   30 +
 debian-edu-config/ldap-bootstrap/root.ldif         |  132 ++
 debian-edu-config/ldap-schemas/EduPerson.schema    |  139 ++
 .../ldap-schemas/automount-debian-edu.schema       |   23 +
 debian-edu-config/ldap-schemas/courier.schema      |   17 +
 debian-edu-config/ldap-schemas/krb5-kdc.schema     |  134 ++
 debian-edu-config/ldap-schemas/lis.schema          |  209 +++
 debian-edu-config/ldap-schemas/norEduPerson.schema |  122 ++
 debian-edu-config/ldap-schemas/samba-2.2.x.schema  |  140 ++
 debian-edu-config/ldap-schemas/samba.schema        |  376 ++++
 debian-edu-config/ldap-tools/barbarossa/README     |   36 +
 debian-edu-config/ldap-tools/barbarossa/group2ldif |  130 ++
 debian-edu-config/ldap-tools/barbarossa/makeldif   |   71 +
 debian-edu-config/ldap-tools/barbarossa/makesmbAcc |   41 +
 .../ldap-tools/barbarossa/passwd2ldif              |   29 +
 debian-edu-config/ldap-tools/csvparser             |  177 ++
 .../ldap-tools/ldap-debian-edu-install             |  141 ++
 debian-edu-config/ldap-tools/ldap-upgrade-db-fix   |   43 +
 debian-edu-config/ldap-tools/ldap2netgroup         |   44 +
 debian-edu-config/ldap-tools/ldappasswd2           |   40 +
 debian-edu-config/ldap-tools/mkslapdcert           |   44 +
 debian-edu-config/ldap-tools/novell-openldap       |  198 +++
 debian-edu-config/ldap-tools/passwd2ldif           |   75 +
 .../ldap-tools/samba-debian-edu-admin              |  129 ++
 .../lib/mime/packages/debian-edu-mailcap           |   32 +
 debian-edu-config/sbin/debian-edu-etc-svk          |   69 +
 debian-edu-config/sbin/debian-edu-fsautoresize     |  354 ++++
 debian-edu-config/sbin/debian-edu-fsautoresizetab  |   10 +
 debian-edu-config/sbin/debian-edu-reboot-when-idle |  122 ++
 debian-edu-config/sbin/debian-edu-restart-services |   73 +
 debian-edu-config/sbin/debian-edu-test-install     |   18 +
 debian-edu-config/sbin/ltsp-make-client            |  307 ++++
 .../share/debian-edu-config/tools/adduser          |   25 +
 .../share/debian-edu-config/tools/jrpasswd         |  239 +++
 .../tools/ldap-user-clean-attic.sh                 |   52 +
 .../share/debian-edu-config/tools/ldap-users.pl    | 1802 ++++++++++++++++++++
 .../share/debian-edu-config/tools/ldapdump.sh      |   57 +
 .../share/debian-edu-config/tools/logoutkill.sh    |   42 +
 .../share/debian-edu-config/tools/movehome         |   45 +
 .../share/debian-edu-config/tools/nbdquery         |   18 +
 .../share/debian-edu-config/tools/nbdswap-cleanup  |   71 +
 .../share/debian-edu-config/tools/nightkill.sh     |   33 +
 .../share/debian-edu-config/tools/passwd           |   85 +
 .../debian-edu/common/share/config/artsmessagerc   |    3 +
 .../debian-edu/common/share/config/kcookiejarrc    |    7 +
 .../debian-edu/common/share/config/kdeprintrc      |    2 +
 .../debian-edu/common/share/config/konquerorrc     |    2 +
 .../debian-edu/common/share/config/kpersonalizerrc |    2 +
 .../common/share/mimelnk/applnk/msword.desktop     |    7 +
 .../networked-kde3/share/config/kioslaverc         |   10 +
 .../share/apps/kdesktop/Desktop/tjener.desktop     |   11 +
 .../etc/xdg/menus/applications-kmenuedit.menu      |  160 ++
 .../students/share/applications/kalzium.desktop    |   14 +
 .../students/share/applications/kbruch.desktop     |   14 +
 .../students/share/applications/klatin.desktop     |   14 +
 .../students/share/applications/kmplot.desktop     |   14 +
 .../share/applications/kpercentage.desktop         |   14 +
 .../students/share/applications/kstars.desktop     |   14 +
 .../students/share/applications/kturtle.desktop    |   14 +
 .../students/share/applications/kvoctrain.desktop  |   14 +
 .../students/share/applications/kwordquiz.desktop  |   14 +
 .../students/share/applications/oocalc.desktop     |   14 +
 .../students/share/applications/ooimpress.desktop  |   14 +
 .../students/share/applications/oowriter.desktop   |   14 +
 .../share/apps/kdesktop/Desktop/.directory         |    0
 .../share/apps/kdesktop/Desktop/kalzium.desktop    |  100 ++
 .../share/apps/kdesktop/Desktop/kbruch.desktop     |  111 ++
 .../share/apps/kdesktop/Desktop/keduca.desktop     |  113 ++
 .../share/apps/kdesktop/Desktop/kig.desktop        |   96 ++
 .../share/apps/kdesktop/Desktop/klatin.desktop     |  108 ++
 .../share/apps/kdesktop/Desktop/kmplot.desktop     |  118 ++
 .../apps/kdesktop/Desktop/kpercentage.desktop      |   74 +
 .../share/apps/kdesktop/Desktop/kstars.desktop     |  133 ++
 .../share/apps/kdesktop/Desktop/kturtle.desktop    |  107 ++
 .../share/apps/kdesktop/Desktop/kverbos.desktop    |   66 +
 .../share/apps/kdesktop/Desktop/kvoctrain.desktop  |   78 +
 .../share/apps/kdesktop/Desktop/kwordquiz.desktop  |  117 ++
 .../apps/kdesktop/Desktop/ooo-impress.desktop      |   89 +
 .../share/apps/kdesktop/Desktop/ooo-writer.desktop |   89 +
 .../debian-edu/students/share/config/kdeglobals    |   17 +
 .../debian-edu/students/share/config/kdesktoprc    |    5 +
 .../students/share/config/konqiconviewrc           |    3 +
 .../students/share/config/menus/applications.menu  |  196 +++
 .../share/config/menus/kde-applications.menu       |  196 +++
 .../debian-edu/students/share/config/uiserverrc    |   12 +
 .../desktop-directories/computer science.directory |    5 +
 .../desktop-directories/creative work.directory    |    5 +
 .../share/desktop-directories/languages.directory  |    5 +
 .../desktop-directories/mathematics.directory      |    5 +
 .../share/desktop-directories/music.directory      |    5 +
 .../share/desktop-directories/science.directory    |    5 +
 .../share/desktop-directories/writing.directory    |    5 +
 .../students/share/services/update_ksycoca         |    0
 .../debian-edu/thin-client/share/config/kcmartsrc  |    3 +
 .../Debian-custom/000-arch-detection               |    9 +
 .../Debian-custom/025-bootprompt-opts              |    5 +
 .../share/man/man8/debian-edu-restart-services.8   |   24 +
 .../share/man/man8/debian-edu-test-install.8       |   21 +
 .../share/man/man8/skolelinux-restart-services.8   |    1 +
 .../share/man/man8/skolelinux-test-install.8       |    1 +
 debian-edu-config/testsuite/base-config            |   13 +
 debian-edu-config/testsuite/bind9-dns              |   83 +
 debian-edu-config/testsuite/cups                   |   29 +
 debian-edu-config/testsuite/dash                   |   11 +
 debian-edu-config/testsuite/dhcpd                  |   33 +
 debian-edu-config/testsuite/filesystems            |   18 +
 debian-edu-config/testsuite/hardware               |   51 +
 debian-edu-config/testsuite/kde                    |   29 +
 debian-edu-config/testsuite/kdm                    |   55 +
 debian-edu-config/testsuite/keyboard-console       |   90 +
 debian-edu-config/testsuite/ldap-client            |   84 +
 debian-edu-config/testsuite/ldap-server            |   59 +
 debian-edu-config/testsuite/locale                 |   21 +
 debian-edu-config/testsuite/ltsp                   |   18 +
 debian-edu-config/testsuite/network                |  130 ++
 debian-edu-config/testsuite/ntp                    |   49 +
 debian-edu-config/testsuite/partitioning           |   30 +
 debian-edu-config/testsuite/php                    |   51 +
 debian-edu-config/testsuite/postoffice             |   35 +
 debian-edu-config/testsuite/procs                  |   15 +
 debian-edu-config/testsuite/samba                  |   71 +
 debian-edu-config/testsuite/syslog                 |   63 +
 debian-edu-config/testsuite/taskpkgs               |   60 +
 debian-edu-config/testsuite/timezone               |   99 ++
 debian-edu-config/testsuite/webcache               |   64 +
 debian-edu-config/testsuite/webserver              |   49 +
 debian-edu-config/testsuite/xfree86                |   51 +
 debian-edu-config/testsuite/xfs                    |   52 +
 debian-edu-config/var/www/index.html.de            |  127 ++
 debian-edu-config/var/www/index.html.en            |  103 ++
 debian-edu-config/var/www/index.html.es            |  115 ++
 debian-edu-config/var/www/index.html.fr            |  105 ++
 debian-edu-config/var/www/index.html.nl            |  118 ++
 debian-edu-config/var/www/index.html.no            |  101 ++
 debian-edu-config/var/www/logo-trans.png           |  Bin 0 -> 13771 bytes
 debian-edu-config/var/www/skl-ren_css.css          |   69 +
 debian-edu-config/var/www/wpad.dat                 |    8 +
 313 files changed, 22534 insertions(+)

diff --git a/debian-edu-config/Makefile b/debian-edu-config/Makefile
new file mode 100644
index 0000000..6175de7
--- /dev/null
+++ b/debian-edu-config/Makefile
@@ -0,0 +1,363 @@
+PACKAGE = debian-edu-config
+
+PROGS = cfengine-debian-edu \
+        update-ini-file update-hostname-from-ip \
+	debian-edu-hd-warn debian-edu-lessdisks \
+	debian-edu-ltsp debian-edu-pxelinux.cfg
+
+SPROGS = debian-edu-restart-services \
+	debian-edu-test-install ltsp-make-client \
+        debian-edu-fsautoresize
+
+INSTALL     = install -D -p -m 755
+INSTALL_DATA= install -D -p -m 644
+
+prefix     = /usr/local
+sysconfdir = /etc
+cfdir      = $(sysconfdir)/cfengine/debian-edu
+bindir     = $(prefix)/bin
+sbindir    = $(prefix)/sbin
+docdir     = $(prefix)/share/doc/$(PACKAGE)
+mandir     = $(prefix)/share/man
+ldapdir    = $(sysconfdir)/ldap
+schemadir  = $(ldapdir)/schema
+dhcp3dir   = $(sysconfdir)/dhcp3
+libdir     = /usr/lib
+pkglibdir  = $(libdir)/debian-edu-config
+mailcapdir = $(libdir)/mime/packages
+vardir     = /var
+
+
+CFFILES = \
+	cf.apache2 \
+	cf.apt \
+	cf.bind9 \
+	cf.cfengine \
+	cf.cups \
+	cf.dhcpserver \
+	cf.exim \
+	cf.imap \
+	cf.homes \
+	cf.inetd \
+	cf.kdm \
+	cf.ldapserver \
+	cf.ldapclient \
+	cf.locale \
+	cf.ltsp \
+	cf.fstab \
+	cf.mime-support \
+	cf.mozilla \
+	cf.munin \
+	cf.nagios \
+	cf.nagios2 \
+	cf.nat \
+	cf.ntp \
+	cf.opera \
+	cf.pcmcia \
+	cf.samba \
+	cf.slbackup \
+	cf.squid \
+	cf.ssh \
+	cf.syslog \
+	cf.sysstat \
+	cfd.conf \
+	cfengine.conf
+
+CFBINFILES = \
+	cfd \
+	cfrunhosts.pl
+
+# Files to install in /etc/
+SYSCONFFILES = \
+	X11/Xsession.d/10debian-edu-one-login-per-host \
+	X11/Xsession.d/10debian-edu-set-umask \
+	desktop-profiles/debian-edu-config.listing \
+	bind/debian-edu/db.10 \
+	bind/debian-edu/db.192.168 \
+	bind/debian-edu/db.intern \
+	bind/debian-edu/named-bind9.conf \
+	bind/debian-edu/bind9-default \
+	bind/debian-edu/named.conf.options \
+	courier/authldaprc-debian-edu \
+	courier/imapd-debian-edu.cnf \
+	debian-edu/hd-warn.conf \
+	debian-edu/nightkill.conf \
+	debian-edu/lts.conf.dist \
+	default/backdoor \
+	cfengine/cfservd.conf \
+	cfengine/update.conf \
+	cfengine/inputs/cfagent.conf \
+	cups/cupsd-debian-edu.conf \
+	dhclient-exit-hooks \
+	dhcp3/dhcpd-debian-edu.conf \
+	exim/exim-ldap-client.conf \
+	exim/exim-ldap-server.conf \
+	exim4/exim-ldap-client-v4.conf \
+	exim4/exim-ldap-server-v4.conf \
+	filesystems \
+	ldap/slapd-etch_debian-edu.conf \
+	ldap/ssl/slapd-cert.cnf \
+	pam.d/common-auth-debian-edu \
+	pam.d/common-auth-ldap-debian-edu \
+	pam.d/common-account-ldap-debian-edu \
+	pam.d/common-password-ldap-debian-edu \
+	pam.d/common-session-winbind-debian-edu \
+	pam.d/common-account-winbind-debian-edu \
+	pam.d/common-auth-winbind-debian-edu \
+	pam.d/common-password-winbind-debian-edu \
+	pam.d/common-session-debian-edu \
+	usbmount/usbmount-debian-edu.conf \
+	samba/netlogon/login.bat \
+	samba/netlogon/shortcut.vbs \
+	samba/smb-debian-edu.conf \
+	samba/smb-winbind-debian-edu.conf \
+	security/pam_mount-winbind-debian-edu.conf \
+	security/pam_mount-stateless-debian-edu.conf \
+	krb5-winbind-debian-edu.conf \
+	lsb-release \
+	nagios/nagios-debian-edu.cfg \
+	nagios/debian-edu/checkcommands.cfg \
+	nagios/debian-edu/contactgroups.cfg \
+	nagios/debian-edu/contacts.cfg \
+	nagios/debian-edu/dependencies.cfg \
+	nagios/debian-edu/htpasswd.users \
+	nagios/debian-edu/index.html \
+	nagios/debian-edu/main.html \
+	nagios/debian-edu/side.html \
+	nagios/debian-edu/misccommands.cfg \
+	nagios/debian-edu/resource.cfg \
+	nagios/debian-edu/services.cfg \
+	nagios/debian-edu/timeperiods.cfg \
+	nagios/debian-edu/servicetemplates.cfg \
+	nagios/debian-edu/hosttemplates.cfg \
+	nagios/debian-edu/skolelinux_logo.png \
+	nagios/debian-edu/skolelinux_logo_140.png \
+	nagios/debian-edu/hosts/gateway.cfg \
+	nagios/debian-edu/hosts/tjener.cfg \
+	nagios/debian-edu/hostgroups/gateways.cfg \
+	nagios/debian-edu/hostgroups/servers.cfg \
+	apache2/mods-available/debian-edu-userdir.conf \
+	apache2/sites-available/debian-edu-default \
+	apache2/sites-available/debian-edu-ssl-default \
+	apache2/conf.d/debian-edu-config-doc \
+	nagios2/debian-edu/cgi.cfg \
+	nagios2/debian-edu/commands.cfg \
+	nagios2/debian-edu/contactgroups.cfg \
+	nagios2/debian-edu/contacts.cfg \
+	nagios2/debian-edu/dependencies.cfg \
+	nagios2/debian-edu/htpasswd.users \
+	nagios2/debian-edu/escalations.cfg \
+	nagios2/debian-edu/hostextinfo.cfg \
+	nagios2/debian-edu/hostgroups.cfg \
+	nagios2/debian-edu/hosts.cfg \
+	nagios2/debian-edu/host_templates.cfg \
+	nagios2/debian-edu/nagios.cfg \
+	nagios2/debian-edu/resources.cfg \
+	nagios2/debian-edu/serviceextinfo.cfg \
+	nagios2/debian-edu/servicegroups.cfg \
+	nagios2/debian-edu/services.cfg \
+	nagios2/debian-edu/service_templates.cfg \
+	nagios2/debian-edu/timeperiods.cfg
+
+
+LIBFILES = \
+	mime/packages/debian-edu-mailcap
+
+SYSCONFSCRIPTS = \
+	resolvconf/update.d/bind-debian-edu \
+	X11/Xsession-debian-edu \
+	samba/smbaddclient.pl
+
+SCHEMAS = \
+	samba.schema \
+	samba-2.2.x.schema \
+	courier.schema \
+	automount-debian-edu.schema \
+	norEduPerson.schema \
+	EduPerson.schema \
+	lis.schema
+
+LDIFS = \
+	root.ldif \
+	autofs.ldif \
+	netgroup.ldif
+
+LDAPPROGRAMS = \
+	ldappasswd2 \
+	ldap2netgroup \
+	ldap-debian-edu-install \
+	samba-debian-edu-admin \
+	mkslapdcert
+
+VARFILES = \
+	www/index.html.de \
+	www/index.html.en \
+	www/index.html.es \
+	www/index.html.fr \
+	www/index.html.no \
+	www/index.html.nl \
+	www/skl-ren_css.css \
+	www/logo-trans.png \
+	www/wpad.dat
+
+KIOSKFILES = \
+	share/debian-edu/students/etc/xdg/menus/applications-kmenuedit.menu \
+	share/debian-edu/students/share/apps/kdesktop/Desktop/kalzium.desktop \
+	share/debian-edu/students/share/apps/kdesktop/Desktop/kmplot.desktop \
+	share/debian-edu/students/share/apps/kdesktop/Desktop/kstars.desktop \
+	share/debian-edu/students/share/apps/kdesktop/Desktop/ooo-impress.desktop \
+	share/debian-edu/students/share/apps/kdesktop/Desktop/ooo-writer.desktop \
+	share/debian-edu/students/share/config/kdeglobals \
+	share/debian-edu/students/share/config/kdesktoprc \
+	share/debian-edu/students/share/config/konqiconviewrc \
+	share/debian-edu/students/share/config/uiserverrc \
+	share/debian-edu/students/share/services/update_ksycoca \
+	share/debian-edu/students/share/desktop-directories/computer\ science.directory \
+	share/debian-edu/students/share/desktop-directories/creative\ work.directory \
+	share/debian-edu/students/share/desktop-directories/languages.directory \
+	share/debian-edu/students/share/desktop-directories/music.directory \
+	share/debian-edu/students/share/desktop-directories/writing.directory \
+	share/debian-edu/students/share/desktop-directories/mathematics.directory \
+	share/debian-edu/students/share/desktop-directories/science.directory \
+	share/debian-edu/students/share/config/menus/applications.menu \
+	share/debian-edu/students/share/config/menus/kde-applications.menu \
+	share/debian-edu/students/share/applications/kalzium.desktop \
+	share/debian-edu/students/share/applications/kbruch.desktop \
+	share/debian-edu/students/share/applications/klatin.desktop \
+	share/debian-edu/students/share/applications/kmplot.desktop \
+	share/debian-edu/students/share/applications/kpercentage.desktop \
+	share/debian-edu/students/share/applications/kstars.desktop \
+	share/debian-edu/students/share/applications/kturtle.desktop \
+	share/debian-edu/students/share/applications/kvoctrain.desktop \
+	share/debian-edu/students/share/applications/kwordquiz.desktop \
+	share/debian-edu/students/share/applications/oocalc.desktop \
+	share/debian-edu/students/share/applications/ooimpress.desktop \
+	share/debian-edu/students/share/applications/oowriter.desktop  \
+	share/debian-edu/root/share/apps/kdesktop/Desktop/tjener.desktop
+
+all:
+
+install: install-testsuite
+	install -d $(DESTDIR)$(bindir)
+	install -d $(DESTDIR)$(sbindir)
+	install -d $(DESTDIR)$(sysconfdir) $(DESTDIR)$(sysconfdir)/cups
+	install -d $(DESTDIR)$(sysconfdir)/exim
+	install -d $(DESTDIR)$(sysconfdir)/courier
+	install -d $(DESTDIR)$(ldapdir)
+	install -d $(DESTDIR)$(dhcp3dir)
+	install -d $(DESTDIR)$(mailcapdir)
+
+# program's manpages are autodetected. 
+	set -e ; for prog in $(PROGS); do \
+		$(INSTALL) bin/$$prog $(DESTDIR)$(bindir) ; \
+		if [ -e "share/man/man1/$$prog.1" ]; \
+		then \
+		$(INSTALL_DATA) "share/man/man1/$$prog.1" $(DESTDIR)$(mandir)/man1/$$sprog.1 ; \
+		fi \
+	done
+# Using manpages autodetection : 
+	set -e ; for sprog in $(SPROGS); do \
+		$(INSTALL) sbin/$$sprog $(DESTDIR)$(sbindir) ; \
+		if [ -e "share/man/man8/$$sprog.8" ]; \
+		then \
+		$(INSTALL_DATA) "share/man/man8/$$sprog.8" $(DESTDIR)$(mandir)/man8/$$sprog.8 ; \
+		fi \
+	done
+	$(INSTALL_DATA) README $(DESTDIR)$(docdir)/README
+	set -e ; for cf in $(CFFILES); do \
+		$(INSTALL_DATA) cf/$$cf $(DESTDIR)$(cfdir)/$$cf; \
+	done
+	set -e ; for cf in $(CFBINFILES); do \
+		$(INSTALL) cf/$$cf $(DESTDIR)$(cfdir)/$$cf; \
+	done
+
+
+
+	set -e ; for file in $(SYSCONFFILES) ; do \
+		$(INSTALL_DATA) etc/$$file $(DESTDIR)$(sysconfdir)/$$file; \
+	done
+
+	mkdir -p $(DESTDIR)$(sysconfdir)/init.d
+	set -e ; for file in $(SYSCONFSCRIPTS) ; do \
+		$(INSTALL) etc/$$file $(DESTDIR)$(sysconfdir)/$$file; \
+	done
+
+	set -e ; for file in $(LIBFILES) ; do \
+		$(INSTALL_DATA) lib/$$file $(DESTDIR)$(libdir)/$$file; \
+	done
+
+	set -e ; for f in share/debian-edu-config/tools/passwd \
+		share/debian-edu-config/tools/adduser \
+		share/debian-edu-config/tools/movehome \
+		share/debian-edu-config/tools/nightkill.sh \
+		share/debian-edu-config/tools/logoutkill.sh \
+		share/debian-edu-config/tools/ldap-user-clean-attic.sh \
+		share/debian-edu-config/tools/ldapdump.sh \
+		share/debian-edu-config/tools/ldap-users.pl \
+		share/debian-edu-config/tools/nbdswap-cleanup \
+		share/debian-edu-config/tools/nbdquery \
+	; do \
+		$(INSTALL) $$f $(DESTDIR)/usr/$$f ; \
+	done
+
+	set -e ; for f in share/debian-edu/common/share/config/kcookiejarrc \
+		share/debian-edu/common/share/config/artsmessagerc \
+		share/debian-edu/common/share/config/kdeprintrc \
+		share/debian-edu/common/share/config/kpersonalizerrc \
+		share/debian-edu/common/share/config/konquerorrc \
+		share/debian-edu/common/share/mimelnk/applnk/msword.desktop \
+		share/debian-edu/networked-kde3/share/config/kioslaverc \
+		share/debian-edu/thin-client/share/config/kcmartsrc \
+	; do \
+		$(INSTALL_DATA) $$f $(DESTDIR)/usr/$$f ; \
+	done
+
+	set -e ; for f in $(KIOSKFILES) ; do \
+		$(INSTALL_DATA) "$$f" "$(DESTDIR)/usr/$$f" ; \
+	done
+
+	set -e ; for f in \
+ share/ltsp/plugins/ltsp-build-client/Debian-custom/000-arch-detection \
+ share/ltsp/plugins/ltsp-build-client/Debian-custom/025-bootprompt-opts \
+	; do \
+		$(INSTALL_DATA) $$f $(DESTDIR)/usr/$$f ; \
+	done
+
+	$(INSTALL_DATA) sbin/debian-edu-fsautoresizetab $(DESTDIR)/usr/share/debian-edu-config/fsautoresizetab
+
+# Using manpages autodetection : 
+	set -e ; for program in $(LDAPPROGRAMS) ; do \
+		$(INSTALL) ldap-tools/$$program $(DESTDIR)$(bindir)/$$program; \
+		if [ -e "share/man/man1/$$program.1" ]; \
+		then \
+		$(INSTALL_DATA) "share/man/man1/$$program.1" $(DESTDIR)$(mandir)/man1/$$sprog.1 ; \
+		fi \
+	done
+	set -e ; for schema in $(SCHEMAS) ; do \
+		$(INSTALL_DATA) ldap-schemas/$$schema $(DESTDIR)$(schemadir)/$$schema;\
+	done
+	set -e ; for ldif in $(LDIFS) ; do \
+		$(INSTALL_DATA) ldap-bootstrap/$$ldif $(DESTDIR)$(ldapdir)/$$ldif ; \
+	done
+
+	set -e ; for file in $(VARFILES) ; do \
+		$(INSTALL_DATA) var/$$file $(DESTDIR)/var/$$file ; \
+	done
+
+	chmod 700 $(DESTDIR)/var/lib/maildirs/
+
+
+install-testsuite:
+	install -d $(DESTDIR)$(pkglibdir)/testsuite
+	set -e ; for test in testsuite/* ; do \
+		$(INSTALL) $$test $(DESTDIR)$(pkglibdir)/$$test; \
+	done
+
+
+
+clean:
+	# Remove CVS cruft
+	-find . -name '.#*' | xargs rm
+
+dist:
+	debuild -us -uc
diff --git a/debian-edu-config/README b/debian-edu-config/README
new file mode 100644
index 0000000..2c593c0
--- /dev/null
+++ b/debian-edu-config/README
@@ -0,0 +1,277 @@
+Skolelinux autoconfig system
+============================
+
+Uses cfengine to automatically configure the hosts.
+
+This package is used for all configuration that is impossible to do
+using debconf answers during first time install.  Configuration
+changes, replacement config files and extra files to install in a
+Skolelinux installation belong to this package.
+
+All the configuration done in this package should in principle be
+possible to do using debconf answers.  We should strive to get patches
+into the Debian packages or upstream source, to reduce the need for
+Skolelinux specific configuration.
+
+Adding / replacing config files
+-------------------------------
+
+If we want to install (add) a file which is not included in another
+Debian package, the file should be installed as a normal file in the
+Debian package.  This is only useful if the file can be safely
+installed for all profiles.
+
+If the file already exist in another package, we should try to use
+cfengine edit commands to modify the existing file.  If the changes
+are massive, it will be more sensible to replace the existing file
+with out of our files, and only in this case should we use the
+masterfiles to copy an replacement file on top of the existing
+configuration file.
+
+Source overview
+---------------
+
+  cf/		  - the cfengine configuration files, installed into
+		    /etc/cfengine/debian-edu
+  cf/masterfiles/ - Replacement config files copied into place using
+		    cfengine.  Use this if the file already exist in
+		    another Debian package.
+  etc/...         - New files installed into /etc/...
+  bin/            - New files installed into /usr/bin/
+  share/...       - New files installed into /usr/share/...
+
+Contact Petter Reinholdtsen <pere at hungry.com> if you have questions.
+
+What is configured
+==================
+
+This is a high-level description on the configuration changes done by
+this package, including the files related to che configuration change.
+
+DNS server (bind9)
+------------------
+
+  Preconfigured DNS zone .intern with DNS names for services used by
+  debian-edu.  Also includes the DHCP distributed IP addressess used.
+  The address range is separated into groups.
+
+DHCP server (dhcp3)
+-------------------
+
+  Contains info on the IP range and DNS server used on the network,
+  and what to hand out to the clients.  Also contain LTSP
+  configuration options.
+
+syslog
+------
+
+  The main-server profile is configured as a syslog message collector,
+  and all clients (workstation and thin-client-server) is configured
+  to send all syslog messages to the host behind the DNS name syslog.
+
+NTP clients and server
+----------------------
+
+  The main-server profile is configured as a publicly available NTP
+  server, and the workstation and thin-client-server profiles are
+  configured as NTP clients using the host behind the DNS name ntp as
+  their NTP server.
+
+LDAP server (slapd)
+-------------------
+
+  Prepare it to work as NIS replacement for PAM, NSS and
+  automount (autofs).  Also prepare it work as backend storage for
+  Samba domain controller.
+
+NFS server (nfs-kernel-server)
+------------------------------
+
+HTTP proxy (squid)
+------------------
+
+SMB domain controller and file server (samba)
+---------------------------------------------
+
+  Samba server is configured as workgroup 'skolelinux' and ldap-based
+  authentication. Printing is configured with cups, and an automatic 
+  drive mapping is set for a connected user on its home at h:\ 
+  The samba server act as a domain controller and wins (windows name 
+  service) server.
+  Samba client workstations are using tjener as their auth server,wins
+  and domain controller. Their netbios name is automatically set.
+
+SMTP and IMAPS post office (exim and courier)
+---------------------------------------------
+
+  Courier imap server is configured with authldap module and ssl.
+  The imap server is disables, only imaps (ssl imap protocol listening
+  on port 993) is enabled so that password do not go unencrypted
+  over the network.
+
+  Exim is configured as a simple local mail relay on workstations and 
+  as a server for local users on servers. Local users are searched in
+  the ldap database using exim ldap module.
+
+X terminal server solution (LTSP)
+---------------------------------
+
+Printer system (CUPS)
+---------------------
+
+  Configure CUPS to work out of the box.  Disable non-encrypted access
+  for all hosts except localhost.
+
+    cf/cf.cups
+    etc/cups/cupsd-debian-edu.conf
+
+HTTP server (apache2)
+--------------------
+
+  For now, Apache configuration is only tuned to know user homepage
+  are on /skole/tjener/home*/*/public_html (see cf/cf.apache2)
+
+
+KDE client config
+-----------------
+  1. share/debian-edu/common 
+     -> settings common to all debian-edu profiles
+       - Disable kpersonalizer startup on initial login.  
+       - Disable warning dialog box presented when the sound card is missing. 
+       - Configure printsystem to use cups
+       - Enable javascript for konqueror
+       - Accept cookies by default
+       - Add mime-type for ms-word documents (*.doc;*.DOC;*.dot;*.DOT)
+  2. share/debian-edu/networked-kd3 
+     -> settings common to all networked profiles (everything but standalone)
+       - Set proxy settings and force them using kiosk (kde 3 > specific)
+  3. share/debian-edu/networked-kde2 
+       - Set proxy settings and force them using kiosk (kde 3 > specific)
+  4. share/debian-edu/thin-client
+  	- enable esd sound on thin clients
+  5. share/debian-edu/students
+    -> eye candy and restrictions for members of the students group
+    	- put some of the learning tools on the Desktop
+	- create a standard k-panel
+	- disable shell access, run-commands, new session starting, k-panel
+	  configuration and accessing root programs via kde
+
+SSH (openssh)
+-------------
+
+  Enable X11 forwarding by default.
+    cf/cf.ssh
+  A backdoor is also available if your ssh tcp port 22 cannot be joined
+  from the Internet. You'll have to edit /etc/default/backdoor to enable
+  this feature.
+
+inetd
+-----
+
+  Disable unused network services (discard, daytime, time) on all
+  hosts, and diable SMTP listening on all client machines.
+    cf/cf.inetd
+
+Design choices
+==============
+
+Local device access
+-------------------
+  Petter Reinholdtsen, 2006-10-17
+
+  The local user should have access to some of the local devices
+  (sound, cdrom, etc) after logging in on the console or via
+  kdm/gdm/xdm/etc, but not when logging in from remote via ssh.  There
+  are as far as I know two ways to make this happen.  One way is to
+  add the local user to the groups needed to access these devices, the
+  other is to change the permissions on these devices to give access
+  to the local user.  The former is done using pam_group, while the
+  latter is done using pam_devperm.  Both have advantages and
+  weaknesses.
+
+  pam_group
+  ---------
+
+  By updating /etc/pam.d/common-auth and /etc/security/group.conf it is
+  possible to add the logged in user to the grous needed (audio,
+  floppy, cdrom, plugdev, video).  In addition to getting access to
+  the devices present during login, it also make sure hotplugged
+  devices like USB sticks work (group membership in plugdev take care
+  of this).
+
+  The problem with this method is that every member of the groups in
+  question can create a setgid program to gain access to the devices
+  also when not logged into the machine.  This will make it possible
+  to record from the microphone, read and from the floppy, cdrom and
+  usb stick, as well as play unwanted sound on other users computers.
+  It is also possible to start long-running processes in the
+  background to keep the access privileges to the devices in question.
+
+  There are some problems with this apporach with kde 3.5, as it
+  switched from using pmount (which work) to using hal callouts which
+  do not.  More info on bug #377689.
+
+--- /etc/pam.d/common-auth.orig 2006-10-17 11:25:40.000000000 +0000
++++ /etc/pam.d/common-auth      2006-10-17 11:25:29.000000000 +0000
+@@ -7,4 +7,5 @@
+ # (e.g., /etc/shadow, LDAP, Kerberos, etc.).  The default is to use the
+ # traditional Unix authentication mechanisms.
+ #
++auth   optional        pam_group.so
+ auth   required        pam_unix.so nullok_secure
+--- /etc/security/group.conf.orig       2006-10-17 11:27:32.000000000 +0000
++++ /etc/security/group.conf    2006-10-17 11:31:43.000000000 +0000
+@@ -55,6 +55,8 @@
+ #xsh; tty* ;*;Al0900-1800;floppy
+
+
++*; tty*&!ttyp*; *; Al0000-2400; audio,cdrom,floppy,plugdev,video
++*; :0; *; Al0000-2400; audio,cdrom,floppy,plugdev,video
+
+ #
+ # End of group.conf file
+
+  pam_devperm
+  -----------
+
+  By installing libpam-devperm and updating /etc/pam.d/common-sessionn
+  (and /etc/logindevperm to fix bug #393661 and get access to
+  /dev/dsp), it is possible to modify the permissions of relevant
+  devices when a user log in, and reset the permissions when the user
+  log out.  The user of the device is changed to the logged in user,
+  and the mode is normally set to 0600 granting exclusive access.
+
+  The problem with this method is that hotplug devices do not work, as
+  they are not available when the user is logged in, and the device
+  ownership is only modified when the user log in.  Another problem is
+  that the user can keep the access privileges for the devices after
+  he log out by starting long-running processes in the background.
+
+--- /etc/pam.d/common-session.orig      2006-10-17 11:23:21.000000000 +0000
++++ /etc/pam.d/common-session   2006-10-17 10:42:08.000000000 +0000
+@@ -7,3 +7,4 @@
+ # non-interactive).  The default is pam_unix.
+ #
+ session        required        pam_unix.so
++session        required        pam_devperm.so
+--- /etc/logindevperm.orig   2006-10-17 10:51:58.000000000 +0000
++++ /etc/logindevperm   2006-10-17 10:53:08.000000000 +0000
+@@ -24,7 +24,7 @@
+ :0 0600 /dev/cdrecorder:/dev/cdrecorder1:/dev/cdrecorder2:/dev/cdrecorder3
+ :0 0600 /dev/dvd:/dev/dvd1:/dev/dvd2:/dev/dvd3
+ :0 0600 /dev/zip:/dev/zip1:/dev/zip2:/dev/zip3
+-:0 0600 /dev/dsp0:/dev/dsp1:/dev/dsp2:/dev/dsp3
++:0 0600 /dev/dsp:/dev/dsp0:/dev/dsp1:/dev/dsp2:/dev/dsp3
+ :0 0600 /dev/fd0:/dev/fd0u1440:/dev/fd0h1440:/dev/fd0u720:/dev/fd0h720
+ :0 0600 /dev/fd1:/dev/fd1u1440:/dev/fd1h1440:/dev/fd1u720:/dev/fd1h720
+ :0 0600 /dev/sequencer:/dev/sequencer2:/dev/music
+
+  Conclusion
+  ----------
+
+  I recommend using the pam_group mechanism to get a working hotplug
+  support, and recommend solving the setgid-issue by adding the nosuid
+  mount flag to the partitions where users can add files (/home/,
+  /tmp/, /dev/shm/, /var/lock/), and solving the problem with
+  long-running processes by running some kind of idle-job killer to
+  kill long-running processes.
diff --git a/debian-edu-config/README.ldap b/debian-edu-config/README.ldap
new file mode 100644
index 0000000..630692c
--- /dev/null
+++ b/debian-edu-config/README.ldap
@@ -0,0 +1,168 @@
+
+
+NB! DENNE FILEN ER UTDATERT, OG F�LGER IKKE N�V�RENDE KONVENSJONER
+
+
+GENERELT
+
+LDAP-basen skal innehalde opplysningar naudsynt for autentisering,
+tilgangsstyring for nettverksressursar (epost, diskusjonslister,
+internettilgang og filomr�de) og forholdet mellom klasse/elev/l�rar.
+Andre attributtar for dei ulike elementa i treet skal ogs� lagrast, s�
+som epostadresser, telefonnummer, foresatte og personnummer (viss
+Datatilsynet tillet det).
+
+NASJONAL STRUKTUR
+
+Eit effektivt driftsopplegg krever at kvar skule har sitt eige
+namnerom slik at ein ikkje f�r namnekollisjonar n�r ein g�r over til
+meir sentral drift.  Ved � bruke ein hierarkisk modell oppn�r vi dette
+ganske enkelt.  Ein hierarkisk modell gjer det ogs� mogleg � delegere
+ansvar for � halde ei undergrein oppdatert.
+
+Det er naturleg � bruke same organisering som det er i det offentlege
+allereie, med andre ord ei inndeling i fylke og kommunar.  � kutte ut
+fylkesdelen fungerer ikkje sidan fleire kommunenamn vert brukt i to
+fylke (Sande i Vestfold og M�re og Romsdal, B� i Telemark og Nordland,
+m.fl.).  I Oslo deler vi inn etter bydel sidan det fylket ikkje er
+delt inn i kommunar (Kommentar: Dette er kanskje ikkje praktisk, sidan
+alle skulane i Oslo vert styrt sentralt.)
+
+NAMNEKONVENSJONAR
+
+Toppen av treet er "o=skolelinux,c=no".  N�r/viss Staten kjem inn og
+vil ta over drifta av opplegget v�rt, kan det vere naturleg � bytte ut
+toppen av treet med noko anna.  V�r programvare b�r vere budd p� at
+noko slikt kan skje.
+
+Neste trinn er "l=fylke".  Vi brukar dei vanlege tobokstavs-
+stuttingane for fylkesnamn, "mr", "sf", "nt", "vf" osv.  Merk at Oslo
+er "oslo", ikkje "os".
+
+S� kjem "l=kommune".  Namnet vert skrive fullt ut.  Det g�r fint �
+bruke norske teikn og blanke i dette namnet.
+
+Til sist kjem "o=skule".  Namnet p� skulen m� vere unikt innanfor
+kommunen, og det er opptil kvar enkelt skule � velje namnet som vert
+brukt her.  Eg synest det vil vere naturleg � skrive namnet fullt ut,
+men droppe "overfl�dige" ord.  T.d. "Hole barne- og ungdomsskole" vert
+til berre "Hole", "Hole BU", eller kanskje "HBU" om det er den vanlege
+lokale stuttinga.
+
+AVBILDNING TIL EPOST-ADRESSER
+
+Overgangen fr� ein Distinguished Name[1] i LDAP til eit epostdomene er
+rett fram.  Norid tilr�r at ��� vert gjort om til aoa.  Tilsvarande
+vert gjort for bokstavar med aksent, c cedilla o.l.  Blanke vert gjort
+om til bindestrek, og punktum vert fjerna.
+
+[1] Distinguished Name (DN) er termen som vert brukt om unike
+    objekt-IDar.
+
+Nokon d�me:
+
+  Eining:  Ytre Her�y Ungdomsskule, Her�y kommune, M�re og Romsdal
+  LDAP DN: o=YHU,l=Her�y,l=mr,o=skolelinux,c=no
+  Domene:  yhu.heroy.mr.skolelinux.no
+
+  Eining:  Oslo Katedralskole, St. Hanshaugen-Ullev�l bydel, Oslo
+  LDAP DN: o=Oslo Katedralskole,l=St. Hanshaugen-Ullev�l,l=oslo,
+             o=skolelinux,c=no
+  Domene:  oslo-katedralskole.st-hanshaugen-ulleval.oslo.skolelinux.no
+
+Viss vi kuttar ut inndelinga i bydelar i Oslo, og leiinga p�
+Katedralskolen �nskte det, kunne vi i staden f�:
+
+  Eining:  Oslo Katedralskole, Oslo
+  LDAP DN: o=Katta,l=oslo,o=skolelinux,c=no
+  Domene:  katta.oslo.skolelinux.no
+
+Domenet kan uansett overstyrast eksplisitt med attributten
+"associatedDomain".
+
+
+
+TREET FOR KVAR SKULE
+
+
+Toppnoden for skulen best�r av
+  objectClass: organization
+  objectClass: lisSchool
+Dette omfattar verdiar som postadresse, gateadresse, telefonnummer,
+faksnummer osv.
+
+Under toppnoden finn vi fire greiner.
+
+GREIN 1: organizationalUnit: Elev
+
+I denne greina finn vi eitt objekt for kvar elev ved skulen.  Ein elev
+er sett saman av klassane
+
+  objectClass: inetOrgPerson
+    ... inneheld attributtar for namn, adresse, telefonnummer osv.
+
+  objectClass: posixAccount
+    ... inneheld all informasjon som skal til for � autentisere ein
+    brukar i eit POSIX-milj� (i praksis Unix).
+
+  objectClass: lisPerson
+    ... inneheld 
+    emailAlias:  gyldige epost-aliasar, "k.t.homme", "kjetil.t.homme", 
+                 osv.
+    owner:       referanse til l�raren som er klasseforstandar.
+		 vedkomande er autorisert til � endre verdiar i dette
+                 objektet.
+    dataOfBirth: f�dselsdato
+    uniqueIdentifier:
+                 personnummer eller annan identifikator gyldig ogs� 
+                 utanfor denne skulen.
+
+Kvar elev kan ha eitt eller fleire lisKinship-objekt under seg.
+Attributtane i lisKinship er "kinship" og "kin".  "kinship" er namnet
+p� forholdet ("mor", "far", "tante", "verge"), "kin" er ein referanse
+til ein annan person i LDAP-treet.  Sidan det er kinship som vert
+brukt for � lage eit unikt namn for dette objektet, kan ein elev kun
+ha �i tante registrert p� seg.
+
+
+GREIN 2: organizationalUnit: Tilsett
+
+I denne greina finn vi alle tilsette p� skulen.  Dei tilsette er sett
+saman av same objektklassene som elevane, med berre sm� forskjellar i
+semantikken.  dateOfBirth er valfritt for elevar ogs�, men det er
+mindre sannsynleg at dette vert lagt inn p� tilsette.  "owner" vert
+sannsynlegvis heller ikkje brukt, men kan brukast for � la ein
+avdelingsleiar manipulere sine unders�ttar.
+
+
+GREIN 3: organizationalUnit: Kontakt
+
+I denne greina finn vi personopplysningar om alle eksterne
+kontaktpersonar.  Greina finnest hovudsakleg for � ha opplysningar om
+elevane sine foresatte, men det er fritt fram � leggje inn andre
+(seljarar, sensorar osv.)  Praktisk som ei felles adressebok for
+skulen.  "objectClass: inetOrgPerson" vert brukt.
+
+  
+
+GREIN 4: organizationalUnit: Klasse
+
+Her ligg alle klassene/faga registrert.  I sm�skulen vil ein vanlegvis
+ha berre ei klasse ("2B"), kanskje to ("2B" og "2B gym").  Generelt
+har ein eigne "klasser" for kvar undervisningsaktivitet der anten
+elevar eller l�rar er forskjellige.
+
+Kvart klasseobjekt er av typen "objectClass: lisClass".  Attributtane
+er:
+
+  owner:        Ansvarleg l�rar (skrivetilgang til objektet)
+  teacher:      Peikar til l�rar som er med p� denne undervisnings-
+                aktiviteten
+  student:      Peikar til student som er med p� ...
+  timeAndPlace: Spesifikasjon av tid og stad for aktiviteten
+  seeAlso:      Peikar til klasseobjekt som elevlista skal kopierast
+                fr�.
+
+Alle desse attributtane er valfrie og kan ein eller fleire verdiar.
+Merk at ein l�rar m� leggjast inn som "teacher" sj�lv om han st�r
+oppf�rt som "owner".
diff --git a/debian-edu-config/bin/apt-get-update-files-download b/debian-edu-config/bin/apt-get-update-files-download
new file mode 100755
index 0000000..ab13181
--- /dev/null
+++ b/debian-edu-config/bin/apt-get-update-files-download
@@ -0,0 +1,17 @@
+#!/bin/bash
+
+apt-get update -qq
+INFO=$(apt-get dist-upgrade -qdyu |\
+  grep -vE "^Reading|^Building|^Need to get|^Download" |\
+  grep -v "0 packages upgraded, 0 newly installed, 0 to remove and 0  not upgraded.")
+apt-get autoclean -qq
+
+if [ -n "$INFO" ] ; then 
+  case $TERM in
+    linux|dumb)
+      echo -e "Subject: apt-get upgrade\n\n$INFO" | \
+        /usr/lib/sendmail root
+      ;;
+    *) echo -e "$INFO" ;;
+  esac
+fi 
diff --git a/debian-edu-config/bin/cfengine-debian-edu b/debian-edu-config/bin/cfengine-debian-edu
new file mode 100755
index 0000000..d8d68f1
--- /dev/null
+++ b/debian-edu-config/bin/cfengine-debian-edu
@@ -0,0 +1,34 @@
+#!/bin/sh
+#
+# Author: Petter Reinholdtsen <pere at hungry.com>
+# Date:   2001-11-25
+#
+# Run cfengine on config files in /etc/cfengine/debian-edu/.  Used by the
+# Debian Edu project.
+
+basedir=/etc/cfengine/debian-edu
+masterhost=cfengine
+if [ -x /usr/sbin/cfagent ] ; then 
+  binary=/usr/sbin/cfagent
+else
+  binary=/usr/bin/cfengine
+fi
+flagfile=/root/dbootstrap_settings
+
+if [ ! -f $flagfile ] ; then
+    touch $flagfile
+    flagfilecreated=yes
+fi
+
+cd $basedir || exit 1
+
+test -x $binary || exit 2
+
+CFINPUTS="$basedir"
+export CFINPUTS
+
+$binary -v -f cfengine.conf $@
+
+if [ "$flagfilecreated" = "yes" ] ; then
+    rm $flagfile
+fi
diff --git a/debian-edu-config/bin/debian-edu-hd-warn b/debian-edu-config/bin/debian-edu-hd-warn
new file mode 100755
index 0000000..4b97084
--- /dev/null
+++ b/debian-edu-config/bin/debian-edu-hd-warn
@@ -0,0 +1,59 @@
+#!/bin/bash
+
+# (c) m.herweg at gmx.de
+# License: GPL
+# Version 0.1   16.7.2003
+# Version 0.2   2003-11-04 faj at bzz.no
+# $Id: debian-edu-hd-warn,v 1.4 2004/11/07 18:45:46 klausade-guest Exp $
+
+
+# Old location for the configuration. [pere 2004-04-25]
+if [ -f /etc/skolelinux/hd-warn.conf ] ; then
+  mv /etc/skolelinux/hd-warn.conf /etc/debian-edu/hd-warn.conf
+fi
+
+if [ -f /etc/debian-edu/hd-warn.conf ] ; then 
+  . /etc/debian-edu/hd-warn.conf 
+fi
+
+MSG="$( df -h | grep % | tr -d "%" | cut -c40- | tail +2 | while read USE MOUNT ; do 
+  LIMIT=$(echo -e "$ALLOW" | grep " $MOUNT$" | awk '{ print $1 }' ) 
+  if [ -z "$LIMIT" ] ; then 
+    LIMIT=80
+  fi
+  if [ $USE -gt $LIMIT ] ; then 
+    echo "${USE}% ${MOUNT}"
+  fi
+done)"
+
+if [ -z "${MSG}" ] ; then 
+  exit 0
+fi
+
+echo -e "${MSG}"
+
+MESSAGE="You may not be able to login because some disk is near full!"
+
+# no LANG here :-(
+# xmessage LANG $LANG
+
+case ${LANG} in
+
+de_*)
+    MESSAGE="Es ist m�gliche, dass Sie sich nicht mehr anmelden k�nnen, da ein Laufwerk recht voll ist."
+     ;;
+
+no_*|nn_*|nb_*)
+    MESSAGE="Det kan hende at du ikke klarer � logge inn fordi noen disker nesten er fulle!"
+    ;;
+esac
+
+# If X is running, let a message pop up
+#  -- Maximilian Wilhelm <max at skolelinux.de>  Thu, 01 Jul 2004 22:10:00 +0200
+if [ "${DISPLAY}" ]; then
+    xmessage "${MESSAGE}
+    ${MSG}
+    "
+else
+    echo ${MESSAGE}
+fi
diff --git a/debian-edu-config/bin/debian-edu-lessdisks b/debian-edu-config/bin/debian-edu-lessdisks
new file mode 100755
index 0000000..02cdd2a
--- /dev/null
+++ b/debian-edu-config/bin/debian-edu-lessdisks
@@ -0,0 +1,202 @@
+#!/bin/bash 
+
+LD_VERSION=""
+unset LANG
+unset LC_ALL
+unset LANGUAGE
+UMASK=$(umask)
+umask 022
+
+if [ -e /etc/lessdisks-install.conf ] ; then 
+  . /etc/lessdisks-install.conf 
+fi
+
+set -e 
+
+while [ $# -gt 0 ] ; do 
+  case $1 in 
+    --do-format) DO_FORMAT=true ;;
+    *) echo "Dont know how to handle option(s) $*" ; exit 9 ;;
+  esac
+  shift
+done
+
+
+LD_DEV=$(sed -ne 's:\(.*\) */var/lib/lessdisks.*:\1:p' /etc/fstab)
+if [ -z "$LD_DEV" ] ; then 
+  mkdir /var/lib/lessdisks
+  lvcreate -L 512 -n lv_less vg_system
+  LD_DEV=/dev/mapper/vg_system-lv_less
+  echo "$LD_DEV /var/lib/lessdisks ext3 defaults 0 2" >> /etc/fstab
+  DO_FORMAT=true
+fi
+
+# if /var/lib/lessdisks is exported through /etc/exports
+if grep -q "^/var/lib/lessdisks" /etc/exports ; then 
+  /etc/init.d/nfs-kernel-server stop
+fi
+
+# Check if /var/lib/lessdisks is exported
+if exportfs -v | grep -q ^/var/lib/lessdisks ; then
+  exportfs -u *:/var/lib/lessdisks
+fi
+
+
+if [ "$DO_FORMAT" = "true" ] ; then 
+  # if /var/lib/lessdisks is mounted
+  if [ "$(sed -ne 's:.* \(/var/lib/lessdisks\) .*:\1:p' /proc/mounts)" ] ; then 
+  # Kill processes that are currently running on /var/lib/lessdisks
+    fuser -mvk /var/lib/lessdisks/ || /bin/true
+  
+    # unmount /var/lib/lessdisks
+    umount /var/lib/lessdisks/ || \
+      (lessdisks-chroot tac /proc/mounts | \
+        while read DEV MOUNT NULL ; do 
+          lessdisks-chroot umount $MOUNT 
+        done 
+      umount /var/lib/lessdisks/ )
+  fi
+
+  # Reformat /var/lib/lessdisks 
+  mke2fs -j $LD_DEV
+fi
+
+if ! mount | grep -q "/var/lib/lessdisks" ; then 
+  mount /var/lib/lessdisks/
+fi
+
+
+# Export lessdisks 
+if ! grep -q "^/var/lib/lessdisks" /etc/exports ; then 
+  echo "/var/lib/lessdisks 192.168.0.0/24(ro,async,no_root_squash)" >> /etc/exports 
+fi
+
+# Restart NFS to get lessdisks exported
+invoke-rc.d nfs-kernel-server restart 
+
+# We do want noninteractive install
+export lessdisks_noninteractive="true"
+
+# Mount the CDRom
+if [ "$defaultarchive" = "cdrom" ] ; then 
+  mount /cdrom
+fi
+
+# run the installscript for lessdisks chroot
+lessdisks-install --skip --dialog=noninteractive
+
+# Kill processes that are currently running on /var/lib/lessdisks
+fuser -mvk /var/lib/lessdisks/ || /bin/true
+
+# Set up some basic for the lessdisks-chroot
+cp /etc/console/boottime.kmap.gz /var/lib/lessdisks/etc/console/
+debconf-get-selections | grep "^locales" | \
+  lessdisks-chroot debconf-set-selections
+cat /usr/lib/debian-edu-install/defaults.lessdisks | \
+    lessdisks-chroot debconf-set-selections       
+
+LD_DEFAULTCONF=/var/lib/lessdisks/etc/lessdisks/terminals/default
+XKBLAYOUT=$(debconf-show xserver-xfree86 | sed -ne "s/.*keyboard.layout: //p")
+if [ ! -e $LD_DEFAULTCONF ] ; then 
+  echo "export XKBLAYOUT=$XKBLAYOUT" > $LD_DEFAULTCONF
+fi
+
+if [ -f /etc/locale.gen -a ! -f /var/lib/lessdisks/locale.gen ] ; then 
+  cp /etc/locale.gen /var/lib/lessdisks/etc/locale.gen 
+fi
+
+
+# install som more packages
+lessdisks-aptget install -qy lessdisks-xterminal locales libnss-ldap libpam-ldap debian-edu-config
+
+# lock the root account in the lessdisks chroot
+lessdisks-chroot passwd -l root
+
+# Make the ldap users availible in the chroot
+lessdisks-chroot cfengine-debian-edu -Dinstallation
+
+# Kill processes that are currently running on /var/lib/lessdisks
+fuser -mvk /var/lib/lessdisks/ || /bin/true
+
+# Create a new resolv.conf based on the one on the host
+rm -rf /var/lib/lessdisks/etc/resolv.conf
+sed 's:127.0.0.1:10.0.2.2:g' /etc/resolv.conf > /var/lib/lessdisks/etc/resolv.conf
+
+
+# Set up lessdisks pxeboot environment
+mkdir -p /tftpboot/lessdisks
+case "$newarch" in 
+  i386)
+    ln -sf /var/lib/lessdisks/boot/vmlinuz /tftpboot/lessdisks
+    ln -sf /var/lib/lessdisks/boot/initrd.img /tftpboot/lessdisks
+    ;;
+  powerpc)
+    ln -sf /var/lib/lessdisks/boot/vmlinuz-*-powerpc /tftpboot/lessdisks/
+    ;;
+esac
+
+# Set up pxelinux, but only if syslinux is installed (i386)
+if [ -e /usr/lib/syslinux/pxelinux.0 ] ; then 
+  mkdir -p /tftpboot/pxelinux.cfg 
+  if [ ! -e /tftpboot/pxelinux.0 ] ; then 
+    ln -s /usr/lib/syslinux/pxelinux.0 /tftpboot/
+  fi
+  if [ -e /tftpboot/pxelinux.cfg/default.pre_lessdisks_xterm_install ] ; then 
+    echo "seems like pxelinux has been set up once before, bailling out"
+  else
+    if [ -f /tftpboot/pxelinux.cfg/default ] ; then 
+      mv /tftpboot/pxelinux.cfg/default \
+         /tftpboot/pxelinux.cfg/default.pre_lessdisks_xterm_install
+    fi
+    if [ -e /tftpboot/lts/bzImage-2.4.26-ltsp-2 ] ; then 
+      cat << EOF > /tftpboot/pxelinux.cfg/menu
+

+
+
+
+     Please enter lessdisks or ltsp
+       lessdisks - Use Lessdisks as an ltsp replacement
+       ltsp - Normal boot of ltsp
+
+     Default is ltsp
+
+EOF
+      cat << EOF > /tftpboot/pxelinux.cfg/default
+DISPLAY pxelinux.cfg/menu
+PROMPT 1
+TIMEOUT 50
+default ltsp
+label ltsp
+  kernel lts/bzImage-2.4.26-ltsp-2
+  append init=/linuxrc rw root=/dev/ram0 initrd=lts/initrd-2.4.26-ltsp-2.gz
+EOF
+    else
+      cat << EOF > /tftpboot/pxelinux.cfg/default
+PROMPT 0
+TIMEOUT 50
+default lessdisks
+EOF
+    fi
+    cat << EOF >> /tftpboot/pxelinux.cfg/default
+label lessdisks
+  kernel lessdisks/vmlinuz
+  append initrd=lessdisks/initrd.img ip=dhcp root=/dev/nfs nfsroot=/var/lib/lessdisks 
+EOF
+    if [ ! -e /etc/dhcp3/dhcpd-lessdisks.conf ] ; then 
+      sed 's:/tftpboot/lts/pxelinux.0:/tftpboot/pxelinux.0:g' /etc/dhcp3/dhcpd-debian-edu.conf > /etc/dhcp3/dhcpd-lessdisks.conf
+      if [ -h /etc/dhcp3/dhcpd.conf ] ; then 
+        rm /etc/dhcp3/dhcpd.conf 
+      else
+        mv /etc/dhcp3/dhcpd.conf /etc/dhcp3/dhcpd-pre_lessdisks_xterm_install.conf
+      fi
+      ln -s dhcpd-lessdisks.conf /etc/dhcp3/dhcpd.conf
+      /etc/init.d/dhcp3-server restart 
+    fi
+  fi
+fi
+
+if mount | grep -q "/var/lib/lessdisks/cdrom" ; then 
+  umount /var/lib/lessdisks/cdrom
+fi
+
+umask $UMASK
diff --git a/debian-edu-config/bin/debian-edu-ltsp b/debian-edu-config/bin/debian-edu-ltsp
new file mode 100644
index 0000000..51abb48
--- /dev/null
+++ b/debian-edu-config/bin/debian-edu-ltsp
@@ -0,0 +1,118 @@
+#!/bin/sh
+#
+# Set up LTSP environment for Debian Edu
+#
+# Author: Petter Reinholdtsen
+# Date:   2005-10-08
+
+base=
+dist=
+
+while [ $# -gt 0 ] ; do 
+  case "$1" in 
+    --base) base="$2" ; shift ;;
+    --dist) dist="$2" ; shift ;;
+    --arch) arch="$2" ; shift ;;
+  esac
+  shift
+done
+
+if [ -z "$base" -a -z "$arch" ] ; then 
+  case $(uname -m) in
+    ppc) ARCH=powerpc ;;
+    i*86) ARCH=i386 ;;
+    x86_64) ARCH=amd64 ;;
+    *) echo "Unknown Architecture, please fix the script $0"
+       exit 9
+       ;;
+  esac
+elif [ -n "$arch" ] ; then
+  ARCH = $arch
+fi
+
+# Make the installation a bit more quiet when started from the command line
+# The locale is not setup in the thin client chroot (yet?)
+LC_ALL=C
+export LC_ALL
+
+test "$base" || base=/opt/ltsp
+test "$dist" || dist=etch
+
+if [ -d $base/$ARCH ] ; then
+    echo "error: $base/$ARCH already exist.  Remove it before running $0"
+    echo "       If you want to install in parallell with an old installation, "
+    echo "       please use --base <new location> as an option"
+    exit 1
+fi
+
+# Check if server uses install or cd to install
+if apt-cache policy ltsp-client | grep -q "cdrom://" ; then 
+  mirror=file:///cdrom
+  components="main local"
+  securitymirror=""
+  extramirror=""
+else
+  mirror=http://ftp.debian.org/debian
+  extramirror="http://ftp.skolelinux.no/skolelinux $dist local"
+  securitymirror="http://security.debian.org/ $dist/updates main contrib"
+  components="main contrib"
+fi
+
+# Mount the CD ROM if needed
+case $mirror in
+    file:///cdrom)
+        mount /cdrom
+	umounts="/cdrom"
+	;;
+    file:///media/cdrom)
+        mount /media/cdrom
+	umounts="/media/cdrom"
+	;;
+    *)
+        ;;
+esac
+
+if ltsp-build-client --help 2>&1 |grep -q -- --root ; then
+    # Old version
+    ltspopts="--root $base/$ARCH"
+else
+    # new version (at least >= 0.93debian1)
+    ltspopts="--accept-unsigned-packages --base /opt/ltsp --arch $ARCH"
+fi
+
+# Build LTSP chroot, fetch packages from default APT sources
+
+#workaround until new ltsp packages in etch
+export NOSECURITY=true
+
+ltsp-build-client \
+  $ltspopts \
+  --mirror $mirror \
+  --dist $dist \
+  --components "$components" \
+  --security-mirror "$securitymirror" \
+  --extra-mirror "$extramirror"
+
+
+# Copy X KBD settings from the server
+debconf-show xserver-xfree86 | \
+  sed -n 's#\* \(xserver.*/keyboard/.*\): #xserver-xfree86 \1 string #p' | \
+  chroot $base/$ARCH debconf-set-selections
+debconf-show xserver-xorg | \
+  sed -n 's#\* \(xserver.*/keyboard/.*\): #xserver-xorg \1 string #p' | \
+  chroot $base/$ARCH debconf-set-selections
+
+# Workaround for Skolelinux bug #1035
+test -f $base/$ARCH/usr/share/ldm/themes/Debian-Edu/logo-trans.png && \
+  test ! -r $base/$ARCH/usr/share/ldm/themes/Debian-Edu/background.png && \
+  ln -s logo-trans.png  \
+        $base/$ARCH/usr/share/ldm/themes/Debian-Edu/background.png || /bin/true
+
+for dir in $umounts ; do
+    umount $umounts
+done
+
+#populate /var/lib/tftpboot with kernel images and pxelinux configuration
+if [ -f /usr/sbin/ltsp-update-kernels ] ; then
+     ltsp-update-kernels
+fi
diff --git a/debian-edu-config/bin/debian-edu-pxelinux.cfg b/debian-edu-config/bin/debian-edu-pxelinux.cfg
new file mode 100755
index 0000000..57a4636
--- /dev/null
+++ b/debian-edu-config/bin/debian-edu-pxelinux.cfg
@@ -0,0 +1,125 @@
+#!/bin/sh
+#
+# Set up pxebooting for Debian Edu
+#
+# Author: Finn-Arne Johansen
+# Date:   2005-11-21
+
+
+SYSPXELINUX=/opt/ltsp/i386/usr/lib/syslinux/pxelinux.0
+
+# Find out where dhcpd.conf thinks pxelinux lives. 
+PXELOCATION=$(sed  -ne 's:^ *filename *"\(/.*pxelinux.0\)".*:\1:p' \
+              /etc/dhcp3/dhcpd.conf   | head -1)
+PXEDIR=$(dirname $PXELOCATION)
+
+# Make sure dhcpd.conf mentions a pxelinux.0
+if [ ! "$PXELOCATION" ] ; then 
+  echo "Cant find no sign of pxelinux.0 in /etc/dhcp3/dhcpd.conf" >&2
+  exit 9
+fi
+
+# Test that pxelinux.0 is readable, and at least points to a valid file
+if [ -e $PXELOCATION ] ; then 
+  REALPXE=$(readlink -f $PXELOCATION)
+fi
+
+if [ "$REALPXE" -a ! -r "$REALPXE" ] ; then 
+  echo "Unreadable symbolic link to $REALPXE" >&2
+  exit 9
+fi
+
+if [ -z "$REALPXE" ] ; then 
+  if [ ! -r $SYSPXELINUX ] ; then 
+    echo "Missing $SYSPXELINUX, unable to set up link" >&2
+    exit 9
+  fi
+  mkdir -p $PXEDIR
+  cp $SYSPXELINUX $PXEDIR
+fi
+
+# check if there already exists a pxelinux.cfg/default
+if [ -r $PXEDIR/pxelinux.cfg/default ] ; then 
+  echo "Looks like pxelinux is already set up, exiting"
+  exit 0
+fi
+
+install -d --mode 755 $PXEDIR/pxelinux.cfg
+
+DEFAULT=
+
+# Test for different PXEBOOTABLE chroots/setups
+# New Muekow-based pxe
+if [ -e /opt/ltsp/i386/etc/default/ltsp-client-setup ] ; then 
+  test "$DEFAULT" && SHOWMENU=true
+  test "$DEFAULT" || DEFAULT=ltsp
+  PXEMENU="$PXEMENU  ltsp - new muekow based LTSP
+"
+  test -d  $PXEDIR/ltsp || mkdir -p $PXEDIR/ltsp 
+  test -f $PXEDIR/ltsp/vmlinuz || \
+    cp /opt/ltsp/i386/boot/vmlinuz $PXEDIR/ltsp/
+  test -f $PXEDIR/ltsp/initrd.img || \
+    cp /opt/ltsp/i386/boot/initrd.img $PXEDIR/ltsp/
+  KERNELLIST="${KERNELLIST}label ltsp
+  kernel ltsp/vmlinuz
+  append initrd=ltsp/initrd.img root=/dev/nfs ip=dhcp
+"
+fi
+
+# Lessdisks thin/diskless clients
+if [ -d /var/lib/lessdisks/etc/lessdisks ] ; then 
+  test "$DEFAULT" && SHOWMENU=true
+  test "$DEFAULT" || DEFAULT=lessdisks
+  PXEMENU="$PXEMENU  lessdisks - thin/diskless clients based on lessdisks
+"
+  test -d  $PXEDIR/lessdisks || mkdir -p $PXEDIR/lessdisks 
+  test -f $PXEDIR/lessdisks/vmlinuz || \
+    cp /var/lib/lessdisks/boot/vmlinuz $PXEDIR/lessdisks/
+  test -f $PXEDIR/lessdisks/initrd.img || \
+    cp /var/lib/lessdisks/boot/initrd.img $PXEDIR/lessdisks/
+  KERNELLIST="${KERNELLIST}label lessdisks
+  kernel lessdisks/vmlinuz
+  append initrd=lessdisks/initrd.img root=/dev/nfs ip=dhcp nfsroot=/var/lib/lessdisks
+"
+fi
+
+# Old LTSP based  clients
+if [ -x /opt/ltsp/i386/etc/build_x3_cfg ] ; then 
+  test "$DEFAULT" && SHOWMENU=true
+  test "$DEFAULT" || DEFAULT=oldltsp
+  PXEMENU="$PXEMENU  oldltsp - Old ltsp3.x/4.x clients
+"
+  test -d  $PXEDIR/lts || mkdir -p $PXEDIR/lts
+  test -f $PXEDIR/lts/vmlinuz || \
+    cp /tftpboot/lts/bzImage-2.4.26-ltsp-2 $PXEDIR/lts/vmlinuz
+  test -f $PXEDIR/lts/initrd.img || \
+    cp /tftpboot/lts/initrd-2.4.26-ltsp-2.gz $PXEDIR/lts/initrd.gz
+  KERNELLIST="${KERNELLIST}label oldltsp
+  kernel lts/vmlinuz
+  append initrd=lts/initrd.gz init=/linuxrc rw root=/dev/ram0
+"
+fi
+
+
+if [ "$SHOWMENU" ] ; then 
+  cat << EOMENU > $PXEDIR/pxelinux.cfg/pxemenu
+

+
+$PXEMENU
+EOMENU
+  cat << EOCONFIG > $PXEDIR/pxelinux.cfg/default
+display pxelinux.cfg/pxemenu
+prompt 1
+timeout 50
+EOCONFIG
+else
+  echo "prompt 0" > $PXEDIR/pxelinux.cfg/default
+fi
+
+cat << EOCONFIG >> $PXEDIR/pxelinux.cfg/default
+default $DEFAULT
+$KERNELLIST
+EOCONFIG
+
+# make sure nobody (tftpboot) can read the file
+chmod 644 $PXEDIR/pxelinux.cfg/default
diff --git a/debian-edu-config/bin/update-hostname-from-ip b/debian-edu-config/bin/update-hostname-from-ip
new file mode 100755
index 0000000..07154f4
--- /dev/null
+++ b/debian-edu-config/bin/update-hostname-from-ip
@@ -0,0 +1,56 @@
+#!/bin/sh -e
+#
+# Author: Petter Reinholdtsen <pere at td.org.uit.no>
+# Date:   2002-08-06
+#
+# Set current hostname to match the IP address on eth0.  This is
+# useful when getting the IP address from DHCP.
+
+PATH="/sbin:$PATH"
+
+INTERFACE=eth0
+
+if [ "-q" = "$1" ] ; then
+    QUIET=true
+    shift
+else
+    QUIET=false
+fi
+
+LC_ALL=C
+export LC_ALL
+
+# Extract current IP
+IP=`ifconfig $INTERFACE 2>&1 |grep 'inet addr:'|tr a-zA-Z: " "|awk '{print $1}'`
+
+if [ "$IP" ] ; then
+
+   case  `dpkg -S /usr/bin/host |cut -d":" -f1` in
+      #bind9-host
+      bind9-host)
+          DNSNAME=`host $IP | grep pointer | awk '{ print $5 }'  | sed -e 's/\.$//g' `
+          ;;
+      #default to old way
+      host | *)
+          DNSNAME=`host $IP | grep Name: | awk '{ print $2 }'`
+          ;;
+   esac
+
+    if [ "$DNSNAME" ] ; then
+	if hostname $DNSNAME 2>/dev/null ; then
+	    [ true != "$QUIET" ] && echo "info: Setting hostname to DNS name $DNSNAME [$IP]."
+	    echo $DNSNAME > /etc/hostname
+	else
+	    [ true != "$QUIET" ] && echo "error: Unable to set hostname to $DNSNAME."
+	    exit 1
+	fi
+    else
+	[ true != "$QUIET" ] && echo "error: Unable to look up $IP using DNS."
+	exit 1
+    fi
+else
+    [ true != "$QUIET" ] && echo "error: Unable to determine current IP address."
+    exit 1
+fi
+
+exit 0
diff --git a/debian-edu-config/bin/update-ini-file b/debian-edu-config/bin/update-ini-file
new file mode 100755
index 0000000..410aa24
--- /dev/null
+++ b/debian-edu-config/bin/update-ini-file
@@ -0,0 +1,65 @@
+#!/usr/bin/perl
+#
+# Author: Petter Reinholdtsen <pere at hungry.com>
+# Date:   2002-08-11
+#
+# Command line tool to modify .ini style files.
+
+use strict;
+use warnings;
+use Config::IniFiles;
+
+usage() if (4 > @ARGV);
+
+my $filename = shift;
+my $section  = shift;
+my $key      = shift;
+my $value    = shift;
+
+# Make sure the file exist, as Config::IniFiles do not create empty
+# config files.
+if ( ! -f $filename ) {
+    open(FILE, "> $filename") || die "Unable to create $filename";
+    print FILE "[$section]\n";
+    close(FILE);
+} else {
+    # Make sure the file contain more then just comment lines, because
+    # the module fail to create an object if it does.  This problem
+    # was discovered with /etc/opera6rc.fixed
+    open(FILE, "< $filename");
+    my $count = 0;
+    while (<FILE>) {
+	chomp;
+	s/[;\#].+$//;
+	next if m/^\s*$/;
+	$count++;
+    }
+    close(FILE);
+    if (0 == $count) {
+	open(FILE, ">> $filename") || die "Unable to append to $filename";
+	print FILE "[$section]\n";
+	close(FILE);
+    }
+}
+
+my $ini = new Config::IniFiles( -file => $filename );
+
+if ($ini) {
+    $ini->AddSection($section);
+    my $oldpath = $ini->newval($section, $key, $value);
+    if ( ! $ini->RewriteConfig ) {
+        print STDERR "error: Unable to set value for ".
+            "section [$section], key='$key' in $filename!\n";
+        exit 1;
+    }
+} else {
+    print STDERR "error: Unable to load $filename!\n";
+    exit 1;
+}
+
+exit 0;
+
+sub usage {
+    print "update-ini-file <file> <section> <variable> <value>\n";
+    exit 0;
+}
diff --git a/debian-edu-config/cf/cf.apache2 b/debian-edu-config/cf/cf.apache2
new file mode 100644
index 0000000..6d0a17f
--- /dev/null
+++ b/debian-edu-config/cf/cf.apache2
@@ -0,0 +1,16 @@
+shellcommands:
+  debian.server.installation::
+      # Generate the snakeoil selfsigned certificate using the make-ssl-cert tool
+      "/usr/sbin/make-ssl-cert generate-default-snakeoil"
+      # Enabeling userdir, create a directory ~/public_html to make it awailable on web as http://tjener.intern/~username. 
+      "/usr/sbin/a2enmod userdir"
+      # Enableing ssl
+      "/usr/sbin/a2enmod ssl"
+      # Use our own default site configuration, and ssl site configuration. 
+      "/usr/sbin/a2ensite debian-edu-default"
+      "/usr/sbin/a2ensite debian-edu-ssl-default"
+      # Disable the stock debian sitefile
+      "/usr/sbin/a2dissite default"
+      # Reload apache2 for changes to take effect
+      "/usr/sbin/invoke-rc.d apache2 force-reload"
+
diff --git a/debian-edu-config/cf/cf.apt b/debian-edu-config/cf/cf.apt
new file mode 100644
index 0000000..9d541dc
--- /dev/null
+++ b/debian-edu-config/cf/cf.apt
@@ -0,0 +1,17 @@
+editfiles:
+
+  debian.!woody.!sarge::
+
+    { /etc/apt/sources.list
+      AppendIfNoSuchLine "#deb http://security.debian.org/ etch/updates main contrib non-free"
+      AppendIfNoSuchLine "### Use (by uncommenting) either http or ftp, NOT both"
+      AppendIfNoSuchLine "### http based apt source: ----------------"
+      AppendIfNoSuchLine "# deb http://ftp.debian.org/debian/ etch main contrib non-free"
+      AppendIfNoSuchLine "# deb http://ftp.skolelinux.org/skolelinux/ etch local"
+      AppendIfNoSuchLine "### ftp based apt source: -----------------"
+      AppendIfNoSuchLine "# deb ftp://ftp.debian.org/debian/ etch main contrib non-free"
+      AppendIfNoSuchLine "# deb ftp://ftp.skolelinux.org/skolelinux/ etch local"
+      AppendIfNoSuchLine "#"
+      AppendIfNoSuchLine "# Volatile Sources, read http://volatile.debian.net/ for details"
+      AppendIfNoSuchLine "# deb http://volatile.debian.net/debian-volatile etch/volatile main contrib non-free"
+    }
diff --git a/debian-edu-config/cf/cf.bind9 b/debian-edu-config/cf/cf.bind9
new file mode 100644
index 0000000..7ffe2d4
--- /dev/null
+++ b/debian-edu-config/cf/cf.bind9
@@ -0,0 +1,12 @@
+editfiles:
+
+  debian.server.installation::
+
+    { /etc/defaults/bind9
+
+    BeginGroupIfNoSuchLine 'OPTIONS="-u bind -c /etc/bind9/debian-edu/named-bind9.conf"'
+      HashCommentLinesStarting 'OPTIONS'
+      InsertLine 'OPTIONS="-u bind -c /etc/bind9/debian-edu/named-bind9.conf"'
+    EndGroup
+    }
+
diff --git a/debian-edu-config/cf/cf.cfengine b/debian-edu-config/cf/cf.cfengine
new file mode 100644
index 0000000..3915078
--- /dev/null
+++ b/debian-edu-config/cf/cf.cfengine
@@ -0,0 +1,24 @@
+groups:
+	cfclient		= ( "/bin/ping -c 1 cfservd" )
+
+editfiles:
+	cfclient::
+		# Activate cfservd if there is a cfengine server on the net
+		{ /etc/default/cfengine2
+
+		BeginGroupIfNoMatch "RUN_CFSERVD=1"
+			LocateLineMatching "RUN_CFSERVD=0"
+			ReplaceLineWith "RUN_CFSERVD=1"
+		EndGroup
+		}
+	
+		# Run cfengine on reboot
+		# (to make sure that clients that are offline a lot, get their "fix", too
+		{ /etc/cron.d/cfengine
+		AutoCreate
+		AppendIfNoSuchLine "@reboot    root   /usr/sbin/cfagent -f update.conf && /usr/sbin/cfagent -f cfagent.conf"
+		}
+
+shellcommands:
+	cfclient::
+		"/etc/init.d/cfengine restart"
diff --git a/debian-edu-config/cf/cf.cups b/debian-edu-config/cf/cf.cups
new file mode 100644
index 0000000..4dd1877
--- /dev/null
+++ b/debian-edu-config/cf/cf.cups
@@ -0,0 +1,5 @@
+links:
+
+  debian.installation::
+
+    /etc/cups/cupsd.conf ->! /etc/cups/cupsd-debian-edu.conf
diff --git a/debian-edu-config/cf/cf.dhcpserver b/debian-edu-config/cf/cf.dhcpserver
new file mode 100644
index 0000000..ee4c67f
--- /dev/null
+++ b/debian-edu-config/cf/cf.dhcpserver
@@ -0,0 +1,36 @@
+links:
+
+  debian.server::
+
+	/etc/dhcp3/dhcpd.conf ->! /etc/dhcp3/dhcpd-debian-edu.conf
+		nofile=force
+
+editfiles:
+
+  debian.server::
+
+        # The file /etc/default/dhcp3-server3-server3-server controls
+        # what interface the dhcp server will listen on.  We will have
+        # one monster dhcpd.conf file that contains definitions for both
+        # the eth0 and eth1 interfaces and control which is active by
+        # manipulating this /etc/default/dhcp3-server
+        #
+        # Make sure this is synced with cf.ltsp (LTSP server)
+
+
+	# Enable DHCP server on eth0
+        { /etc/default/dhcp3-server
+              BeginGroupIfNoMatch 'INTERFACES="eth0"'
+                  LocateLineMatching 'INTERFACES=""'
+                  ReplaceLineWith 'INTERFACES="eth0"'
+              EndGroup
+        }
+
+# At boot time, all clients (ie not the server) should update the
+# hostname based on the currently assigned IP address.
+
+  debian.!server::
+        { /etc/default/update-hostname
+	    AutoCreate
+	    AppendIfNoSuchLine "ENABLED=true"
+        }
diff --git a/debian-edu-config/cf/cf.exim b/debian-edu-config/cf/cf.exim
new file mode 100644
index 0000000..9cf4255
--- /dev/null
+++ b/debian-edu-config/cf/cf.exim
@@ -0,0 +1,30 @@
+directories:
+
+  debian.server::
+
+    # Make sure /var/lib/maildirs is owned by mail.mail and mode 0700
+    /var/lib/maildirs mode=700 owner=mail group=mail
+
+
+links:
+
+
+  # Serverinstallation
+  debian.server.installation::
+
+    /etc/exim4/exim4.conf ->! /etc/exim4/exim-ldap-server-v4.conf
+		nofile=force
+
+  # Non-Serverinstallation
+  debian.!server.installation::
+
+    /etc/exim4/exim4.conf ->! /etc/exim/exim-ldap-client-v4.conf 
+		nofile=force
+
+  
+shellcommands:
+
+
+  debian.installation::
+
+    "/usr/sbin/exim4 -qff"
diff --git a/debian-edu-config/cf/cf.fstab b/debian-edu-config/cf/cf.fstab
new file mode 100644
index 0000000..5db102d
--- /dev/null
+++ b/debian-edu-config/cf/cf.fstab
@@ -0,0 +1,20 @@
+editfiles:
+
+  debian.!woody.!sarge::
+
+    { /etc/fstab
+    BeginGroupIfNoLineMatching  ".* /tmp .*"
+      InsertLine "none    /tmp    tmpfs   defaults,nosuid        0 0"
+    EndGroup
+
+    #delete the temporary partition from fstab, deletefstab dont't work it seams
+    DeleteLinesContaining "/debianedufreespace" 
+    }
+
+shellcommands:
+  debian.!woody.!sarge.installation::
+     #remove the debianfreespace logical volume
+     "/bin/grep -q /debianedufreespace /etc/mtab && \
+     /bin/umount /debianedufreespace && \
+     /bin/rmdir /debianedufreespace && \
+     /sbin/lvremove -f /dev/vg_system/debianedufreespace"
diff --git a/debian-edu-config/cf/cf.homes b/debian-edu-config/cf/cf.homes
new file mode 100644
index 0000000..d81b556
--- /dev/null
+++ b/debian-edu-config/cf/cf.homes
@@ -0,0 +1,64 @@
+#
+# Handle the user home directory on the server
+#
+
+editfiles:
+
+    debian.server::
+      { /etc/exports
+        # We should use only netgroups, to reduce the securiy impact of
+        # using NFS. (#389 and #403) [pere 2004-03-30]
+        AppendIfNoSuchLine "/skole/tjener/home0 @ltsp-server-hosts(rw,async,no_subtree_check) @workstation-hosts(rw,async,no_subtree_check) @server-hosts(rw,async,no_subtree_check)"
+      }
+
+    debian.server::
+
+	{ /etc/adduser.conf
+		HashCommentLinesStarting "DHOME=/home"
+		AppendIfNoSuchLine "DHOME=/skole/tjener/home0"
+	}
+
+#
+# Enable autofs using LDAP unless running the server.  This is done by
+# enabling autofs, and removing /etc/auto.master to get
+# /etc/init.d/autofs to use LDAP instead.
+#
+editfiles:
+    debian.!server.!standalone::
+
+	{ /etc/default/autofs
+		HashCommentLinesStarting "AUTOFS_ENABLED=false"
+		AppendIfNoSuchLine "AUTOFS_ENABLED=true"
+	}
+
+    debian.!woody.!server.!standalone::
+
+	{ /etc/default/autofs
+		AppendIfNoSuchLine "LDAPURI=ldap://ldap"
+		AppendIfNoSuchLine "LDAPBASE=ou=auto.master,ou=Automount,dc=skole,dc=skolelinux,dc=no"
+	}
+
+	{ /etc/auto.master
+		AppendIfNoSuchLine "/skole   ldap:ou=automount,dc=skole,dc=skolelinux,dc=no"
+	}
+
+tidy:
+    debian.woody.!server.!standalone::
+        /etc pattern=auto.master  recurse=0 age=0
+
+#
+# Make sure users get 00X (X=2 at the moment) as their default umask,
+# because we are using private groups, and want sharing, not hiding,
+# to be the default.
+#
+editfiles:
+      { /etc/profile
+		HashCommentLinesStarting "umask 022"
+		AppendIfNoSuchLine "umask 002"
+      }
+
+# Uncomment it because the global setting is enough
+      { /etc/skel/.bash_profile
+		HashCommentLinesStarting "umask 022"
+#		AppendIfNoSuchLine "umask 002"
+      }
diff --git a/debian-edu-config/cf/cf.imap b/debian-edu-config/cf/cf.imap
new file mode 100644
index 0000000..405ccb8
--- /dev/null
+++ b/debian-edu-config/cf/cf.imap
@@ -0,0 +1,38 @@
+links:
+
+  debian.server.installation::
+
+    /etc/courier/authldaprc ->! /etc/courier/authldaprc-debian-edu
+
+editfiles:
+
+  debian.server.installation::
+
+    { /etc/courier/authdaemonrc
+
+    LocateLineMatching 'authmodulelist="authpam"'
+    BeginGroupIfNoSuchLine 'authmodulelist="authldap"'
+      HashCommentLinesStarting "authmodulelist"
+      InsertLine 'authmodulelist="authldap"'
+    EndGroup
+    }
+
+   { /etc/courier/authldaprc
+
+   BeginGroupIfNoSuchLine 'LDAP_SERVER          ldap'
+     HashCommentLinesStarting 'LDAP_SERVER'
+     InsertLine 'LDAP_SERVER            ldap'
+   EndGroup
+   LocateLineMatching 'LDAP_TLS.*0'
+   BeginGroupIfNoSuchLine 'LDAP_TLS          1'
+     HashCommentLinesStarting 'LDAP_TLS'
+     InsertLine 'LDAP_TLS            1'
+   EndGroup
+   }
+
+   # Do not start imap server, only imaps to prevent transferring of 
+   # passwords/emails unencrypted
+   { /etc/courier/imapd
+	  LocateLineMatching "IMAPDSTART=YES"
+ 	  ReplaceLineWith "IMAPDSTART=NO"
+   }
diff --git a/debian-edu-config/cf/cf.inetd b/debian-edu-config/cf/cf.inetd
new file mode 100644
index 0000000..60ea0ba
--- /dev/null
+++ b/debian-edu-config/cf/cf.inetd
@@ -0,0 +1,20 @@
+#
+# Remove the services we don't need from /etc/inetd.conf
+#
+
+editfiles:
+
+    debian::
+
+	{ /etc/inetd.conf
+		HashCommentLinesStarting "discard"
+		HashCommentLinesStarting "daytime"
+		HashCommentLinesStarting "time"
+	}
+
+    # Standalone hosts should not listen to incoming SMTP connections.
+    debian.standalone::
+	{ /etc/inetd.conf
+		HashCommentLinesStarting "smtp"
+	}
+
diff --git a/debian-edu-config/cf/cf.kdm b/debian-edu-config/cf/cf.kdm
new file mode 100644
index 0000000..8a90541
--- /dev/null
+++ b/debian-edu-config/cf/cf.kdm
@@ -0,0 +1,62 @@
+editfiles:
+
+  debian.!woody.installation::
+  # Set up locally logged in users to get access to local devices
+  # Require pam_group in common-auth
+  # http://www.die.net/doc/linux/man/man5/group.conf.5.html document
+  # the format
+    { /etc/security/group.conf
+      AppendIfNoSuchLine "*; tty*&!ttyp*; *; Al0000-2400; audio,cdrom,floppy,plugdev,video,scanner"
+      AppendIfNoSuchLine "*; :0; *; Al0000-2400; audio,cdrom,floppy,plugdev,video,scanner"
+    }
+
+shellcommands:
+
+  # Settings for both Workstation and Standalone:
+  debian.woody.workstation|debian.woody.standalone::
+
+    "/usr/bin/update-ini-file /etc/kde2/kdm/kdmrc 'X-*-Greeter' LogoArea Clock"
+    "/usr/bin/update-ini-file /etc/kde2/kdm/kdmrc 'X-*-Greeter' GreetString 'Skolelinux (%n)'"
+    
+
+  debian.!woody.!server.!ltspserver.installation::
+
+    "/usr/bin/update-ini-file /etc/kde3/kdm/kdmrc 'X-*-Greeter' LogoArea Clock"
+    
+  debian.!woody.!standalone.installation::
+
+    "/usr/bin/update-ini-file /etc/kde3/kdm/kdmrc 'General' FifoDir ''"
+    "/usr/bin/update-ini-file /etc/kde3/kdm/kdmrc 'X-*-Core' AllowShutdown None"
+    "/usr/bin/update-ini-file /etc/kde3/kdm/kdmrc 'X-:*-Core' AllowShutdown All"
+    "/usr/bin/update-ini-file /etc/kde3/kdm/kdmrc 'X-:*-Core' AllowRootLogin true"
+
+ # new more fancy background for kdm
+ debian.!woody.ltspserver.installation|debian.!woody.workstation.installation::
+    "/usr/bin/update-ini-file /etc/kde3/kdm/backgroundrc 'Desktop0' Wallpaper 'winter_theme_1.jpg'"
+
+ # Activate KDM theme
+ debian.installation::
+    "/usr/sbin/dpkg-reconfigure debian-edu-artwork"
+
+ # Setings for Workstation only:
+ debian.woody.workstation::
+
+    "/usr/bin/update-ini-file /etc/kde2/kdm/kdmrc 'X-*-Greeter' ShowUsers None"
+
+
+ debian.!woody.installation::
+
+    "/usr/bin/update-ini-file /etc/kde3/kdm/kdmrc 'X-*-Greeter' UserList False"
+
+
+  # Prevent root login on the standalone profile
+  debian.woody.standalone.installation::
+
+    "/usr/bin/update-ini-file /etc/kde2/kdm/kdmrc 'X-*-Core' AllowRootLogin false"
+    "/usr/bin/update-ini-file /etc/kde2/kdm/kdmrc 'X-:*-Core' AllowRootLogin false"
+
+links:
+
+  debian.woody.installation::
+  
+    /etc/X11/Xsession ->! /etc/X11/Xsession-debian-edu
diff --git a/debian-edu-config/cf/cf.ldapclient b/debian-edu-config/cf/cf.ldapclient
new file mode 100644
index 0000000..cd511e8
--- /dev/null
+++ b/debian-edu-config/cf/cf.ldapclient
@@ -0,0 +1,160 @@
+#
+# Configure NSS and PAM to use LDAP directory
+#
+
+links:
+
+    debian.!woody.installation.!standalone::
+
+	/etc/pam.d/common-auth         ->! /etc/pam.d/common-auth-ldap-debian-edu
+	/etc/pam.d/common-account      ->! /etc/pam.d/common-account-ldap-debian-edu
+	/etc/pam.d/common-password     ->! /etc/pam.d/common-password-ldap-debian-edu
+    
+    debian.!woody.installation::
+    
+	/etc/pam.d/common-session      ->! /etc/pam.d/common-session-debian-edu
+
+    debian.!woody.installation.standalone::
+
+	/etc/pam.d/common-auth         ->! /etc/pam.d/common-auth-debian-edu
+
+files:
+	
+   debian.!woody.!sarge.installation.!standalone::
+        # etch installer slows to a crawl when nsswitch.conf is edited. 
+	# workaround until #375077 is fixed properly.
+        /var/lib/libnss-ldap/bind_policy_soft action=create
+
+editfiles:
+	
+    debian.installation.!standalone::
+
+        { /etc/nsswitch.conf
+
+	  LocateLineMatching "# Example configuration of GNU Name Service Switch functionality."
+          IncrementPointer   "3"
+
+	  BeginGroupIfNoSuchLine "passwd:         files ldap"
+	    HashCommentLinesStarting "passwd:"
+            InsertLine "passwd:         files ldap"
+          EndGroup
+
+	  BeginGroupIfNoSuchLine "group:          files ldap"
+	    HashCommentLinesStarting "group:"
+            InsertLine "group:          files ldap"
+          EndGroup
+
+          # Is it really usefull to fetch shadow info from LDAP?  NSS
+          # and PAM do not seem to work without it. [pere 2004-10-23]
+          BeginGroupIfNoSuchLine "shadow:         files ldap"
+            HashCommentLinesStarting "shadow:"
+            InsertLine "shadow:         files ldap"
+          EndGroup
+
+	  BeginGroupIfNoSuchLine "netgroup:         files ldap"
+            HashCommentLinesStarting "netgroup:"
+            InsertLine "netgroup:         files ldap"
+          EndGroup
+
+	  BeginGroupIfNoSuchLine "automount:         files ldap"
+            HashCommentLinesStarting "automount:"
+            InsertLine "automount:         files ldap"
+          EndGroup
+        }
+
+    	{ /etc/libnss-ldap.conf
+    
+
+	  LocateLineMatching "# Your LDAP server. Must be resolvable without using LDAP."
+      	  IncrementPointer   "1"
+      	  BeginGroupIfNoSuchLine "host ldap"
+	     HashCommentLinesStarting "host "
+             InsertLine "host ldap"
+          EndGroup
+
+	  LocateLineMatching "# The distinguished name of the search base."
+      	  IncrementPointer   "1"
+          BeginGroupIfNoSuchLine "base dc=skole,dc=skolelinux,dc=no"
+	     HashCommentLinesStarting "base "
+             InsertLine "base dc=skole,dc=skolelinux,dc=no"
+          EndGroup
+          BeginGroupIfNoSuchLine "nss_base_passwd ou=People,"
+             HashCommentLinesStarting "nss_base_passwd "
+             InsertLine "nss_base_passwd ou=People,"
+          EndGroup
+      	  BeginGroupIfNoSuchLine "nss_base_group ou=Group,"
+	     HashCommentLinesStarting "nss_base_group "
+             InsertLine "nss_base_group ou=Group,"
+          EndGroup
+          BeginGroupIfNoSuchLine "nss_base_netgroup ou=Netgroup,"
+             HashCommentLinesStarting "nss_base_netgroup "
+             InsertLine "nss_base_netgroup ou=Netgroup,"
+          EndGroup
+
+	  # REMOVE THIS WHEN #375077  is resolved properly
+	  LocateLineMatching "#bind_policy hard"
+      	  BeginGroupIfNoSuchLine "bind_policy soft"
+	     HashCommentLinesStarting "bind_policy "
+             InsertLine "bind_policy soft"
+          EndGroup
+        }
+
+    	{ /etc/pam_ldap.conf
+    
+	  LocateLineMatching "# Your LDAP server. Must be resolvable without using LDAP."
+      	  IncrementPointer   "1"
+      	  BeginGroupIfNoSuchLine "host ldap"
+	     # The LDAP host name must match the name of the SSL sertificate
+	     HashCommentLinesStarting "host "
+             InsertLine "host ldap"
+          EndGroup
+
+	  LocateLineMatching "# The distinguished name of the search base."
+      	  IncrementPointer   "1"
+      	  BeginGroupIfNoSuchLine "base ou=People,dc=skole,dc=skolelinux,dc=no"
+	     HashCommentLinesStarting "base "
+             InsertLine "base ou=People,dc=skole,dc=skolelinux,dc=no"
+          EndGroup
+
+          HashCommentLinesStarting "rootbinddn"
+
+	  LocateLineMatching "# Filter to AND with uid=%s"
+      	  IncrementPointer   "1"
+      	  BeginGroupIfNoSuchLine "pam_filter objectclass=posixAccount"
+	     HashCommentLinesStarting "pam_filter "
+             InsertLine "pam_filter objectclass=posixAccount"
+          EndGroup
+
+	  BeginGroupIfNoSuchLine "pam_password exop"
+             SetCommentStart "#"
+             HashCommentLinesStarting "pam_password"
+             UnCommentLinesMatching "#pam_password exop"
+	  EndGroup
+
+          AppendIfNoSuchLine "ssl start_tls"
+        }
+
+	# Make sure the nscd cache has enough size to hold all the users
+	# and groups, and tell it to not cache hosts
+	# This is untested, and should remain hashed out until tested
+	# FAJ 2004-08-26
+        #{ /etc/nscd.conf
+	#  LocateLineMatching "\s*enable-cache\s*passwd.*"
+        #  BeginGroupIfNoSuchLine "\s*suggested-size\s*passwd\s*1011"
+	#       HashCommentLinesStarting "\s*suggested-size\s*passwd\s"
+	#       InsertLine "        suggested-size          passwd          1011"
+	#  EndGroup
+	#  
+	#  LocateLineMatching "\s*enable-cache\s*group.*"
+  	#  BeginGroupIfNoSuchLine "\s*suggested-size\s*group\s*1211"
+	#    HashCommentLinesStarting "\s*suggested-size\s*group\s"
+	#    InsertLine "        suggested-size          group          1211"
+	#  EndGroup
+	#  
+	#  LocateLineMatching "\s*enable-cache\s*hosts.*"
+	#	BeginGroupIfNoSuchLine "\s*enable-cache\s*hosts\s*no"
+	#    HashCommentLinesStarting "\s*enable-cache\s*hosts\s"
+	#    InsertLine "        enable-cache            hosts          no"
+	#  EndGroup
+	#}
+
diff --git a/debian-edu-config/cf/cf.ldapserver b/debian-edu-config/cf/cf.ldapserver
new file mode 100644
index 0000000..e187b02
--- /dev/null
+++ b/debian-edu-config/cf/cf.ldapserver
@@ -0,0 +1,95 @@
+#
+# Configure LDAP server and communication with the LDAP server
+#
+
+links:
+
+  debian.server.installation::
+    /etc/ldap/schema/automount.schema ->! /etc/ldap/schema/automount-debian-edu.schema
+
+  debian.woody.server.installation::
+    /etc/ldap/slapd.conf ->! /etc/ldap/slapd-debian-edu.conf
+
+  debian.!woody.server.installation::
+    /etc/ldap/slapd.conf ->! /etc/ldap/slapd-etch_debian-edu.conf
+
+editfiles:
+  debian.woody.server.installation::
+    { /etc/default/slapd
+	LocateLineMatching '^#URLS.*'
+	ReplaceLineWith 'URLS="ldap:/// ldaps:///"'
+    }
+
+  debian.!woody.server.installation::
+    { /etc/default/slapd
+	LocateLineMatching '.*SLAPD_SERVICES=.*'
+        BeginGroupIfNoSuchLine '^SLAPD_SERVICES="ldap:/// ldaps:///"'
+	      HashCommentLinesStarting "SLAPD_SERVICES"
+              AppendIfNoSuchLine 'SLAPD_SERVICES="ldap:/// ldaps:///"'
+        EndGroup
+	LocateLineMatching '.*SLAPD_OPTIONS=.*'
+        BeginGroupIfNoSuchLine '^SLAPD_OPTIONS="-4"'
+	      HashCommentLinesStarting "SLAPD_OPTIONS"
+              AppendIfNoSuchLine 'SLAPD_OPTIONS="-4"'
+        EndGroup
+    }
+
+  debian.installation.!standalone::
+    { /etc/ldap/ldap.conf
+      BeginGroupIfNoLineContaining "HOST"
+        AppendIfNoSuchLine "HOST ldap"
+      EndGroup
+
+      # Insert the base-dn, to simplify searching the LDAP and reduce
+      # typing :-) [barbarossa 2004-07-01]
+      BeginGroupIfNoSuchLine "BASE	dc=skole,dc=skolelinux,dc=no"
+        HashCommentLinesStarting "BASE"
+        InsertLine "BASE	dc=skole,dc=skolelinux,dc=no"
+      EndGroup
+
+      # I've tested this on an existing woody-installation, and it
+      # doesn't look like it breaks anything. Need to test in woody-test
+      # (or somewhere) [Finn-Arne]
+      BeginGroupIfNoLineContaining "TLS_REQCERT"
+        AppendIfNoSuchLine "TLS_REQCERT never"
+      EndGroup
+    }
+
+#  Disable since we dont have this file [Ronny Aasen 2007-05-29]
+#  debian.!woody.server.installation::
+#    { /etc/ldap/slapd-debian-edu.conf
+#      LocateLineMatching "^database.*"
+#      BeginGroupIfNoSuchLine "^database.*bdb"
+#	      HashCommentLinesStarting "database"
+#	      IncrementPointer "1"
+#	      LocateLineMatching ".modulepath.+ldap"
+#	      ReplaceLineWith "modulepath /usr/lib/ldap"
+#	      LocateLineMatching ".moduleload.+back_bdb"
+#	      ReplaceLineWith "moduleload back_bdb"
+#	      LocateLineMatching ".database.+bdb"
+#	      ReplaceLineWith "database bdb"
+#	    EndGroup
+#    }
+
+
+directories:
+  debian.etch.server::
+        /var/run/slapd mode=0755 owner=openldap group=openldap  
+
+files:
+  debian.etch.server::
+        /var/lib/ldap r=2 owner=openldap group=openldap action=fixall
+        /etc/ldap/ssl r=2 owner=openldap group=openldap action=fixall
+
+shellcommands:
+  debian.server.installation::
+    # Generating TLS certificates
+    "/usr/bin/mkslapdcert"
+    # Setting correct permisions to run ldap as the user openldap 
+    # need to run them here, since shellscripts is after files
+    "/bin/chown openldap:openldap /etc/ldap/ssl"
+    "/bin/chown openldap:openldap /etc/ldap/ssl/slapd.pem"
+    "/bin/chown openldap:openldap /etc/ldap/ssl/slapd-cert.cnf"
+    # Need load the initial LDAP database, using the new slapd.conf.
+    "/usr/bin/ldap-debian-edu-install"
+
diff --git a/debian-edu-config/cf/cf.locale b/debian-edu-config/cf/cf.locale
new file mode 100644
index 0000000..73ff04f
--- /dev/null
+++ b/debian-edu-config/cf/cf.locale
@@ -0,0 +1,58 @@
+editfiles:
+
+	debian::
+
+		# Make it possible to type ��� ��� on the bash prompt
+		{ /etc/inputrc
+			UnCommentLinesContaining "set convert-meta off"
+		}
+
+	# Disabled 2004-04-14 because we now use XFree86 4.2 [pere]
+	debian.woody.xfree86_4_1::
+		# Update to make Sami keyboards visible in kxkb
+		# Add the sami keyboard settings after the Norwegian keyboard
+		# These changes are included in XFree86 4.2 and later
+		{ /usr/X11R6/lib/X11/xkb/rules/xfree86.lst
+			LocateLineMatching ".+no.+Norwegian.*"
+			IncrementPointer "1"
+
+			BeginGroupIfNoMatch ".+se_FI.+"
+			  IncrementPointer "-1"
+			  InsertLine "  se_FI         Northern Sami (Finland)"
+			EndGroup
+
+			LocateLineMatching ".+se_FI.+"
+			IncrementPointer "1"
+			BeginGroupIfNoMatch ".+se_NO.+"
+			  IncrementPointer "-1"
+			  InsertLine "  se_NO         Northern Sami (Norway)"
+			EndGroup
+
+			LocateLineMatching ".+se_NO.+"
+			IncrementPointer "1"
+			BeginGroupIfNoMatch ".+se_SE.+"
+			  IncrementPointer "-1"
+			  InsertLine "  se_SE         Northern Sami (Sweden)"
+			EndGroup
+		}
+
+shellcommands:
+
+  debian.workstation|standalone::
+
+    "/usr/bin/update-ini-file /usr/share/locale/l10n/no/entry.desktop 'KCM Locale' 'Name[se]' Norga"
+    "/usr/bin/update-ini-file /usr/share/locale/l10n/no/entry.desktop 'KCM Locale' 'CurrencySymbol[se]' ru"
+    "/usr/bin/update-ini-file /usr/share/locale/l10n/no/entry.desktop 'KCM Locale' 'DateFormat[se]' '%A, %B %e. b. %Y'"
+    "/usr/bin/update-ini-file /usr/share/locale/l10n/no/entry.desktop 'KCM Locale' 'DateFormatShort[se]' '%Y-%m-%d'"
+    "/usr/bin/update-ini-file /usr/share/locale/l10n/no/entry.desktop 'KCM Locale' Languages no,no_NY,se"
+
+    "/usr/bin/update-ini-file /usr/share/locale/l10n/fi/entry.desktop 'KCM Locale' 'Name[se]' Soupma"
+    "/usr/bin/update-ini-file /usr/share/locale/l10n/fi/entry.desktop 'KCM Locale' 'DateFormat[se]' '%A, %B %e. b. %Y'"
+    "/usr/bin/update-ini-file /usr/share/locale/l10n/fi/entry.desktop 'KCM Locale' 'DateFormatShort[se]' '%Y-%m-%d'"
+    "/usr/bin/update-ini-file /usr/share/locale/l10n/fi/entry.desktop 'KCM Locale' Languages fi,sv,se"
+
+    "/usr/bin/update-ini-file /usr/share/locale/l10n/se/entry.desktop 'KCM Locale' 'Name[se]' Ruoŧŧa"
+    "/usr/bin/update-ini-file /usr/share/locale/l10n/se/entry.desktop 'KCM Locale' 'CurrencySymbol[se]' ru"
+    "/usr/bin/update-ini-file /usr/share/locale/l10n/se/entry.desktop 'KCM Locale' 'DateFormat[se]' '%A, %B %e. b. %Y'"
+    "/usr/bin/update-ini-file /usr/share/locale/l10n/se/entry.desktop 'KCM Locale' Languages sv,se"
+
diff --git a/debian-edu-config/cf/cf.ltsp b/debian-edu-config/cf/cf.ltsp
new file mode 100644
index 0000000..2fdda10
--- /dev/null
+++ b/debian-edu-config/cf/cf.ltsp
@@ -0,0 +1,234 @@
+links:
+
+  debian::
+
+    # The dhcpd.conf will be be installed in by the server profile scripts
+    # But what the heck, just to be sure we do it again
+
+    /etc/dhcp3/dhcpd.conf ->! /etc/dhcp3/dhcpd-debian-edu.conf
+		nofile=force
+ 
+    # the cleanup script for network swap 
+    /etc/cron.daily/nbdswap-cleanup ->! /usr/share/debian-edu-config/tools/nbdswap-cleanup
+
+directories:
+  debian.ltspserver::
+      #create the directctory for the config file for update-kernels
+      /opt/ltsp/$(ltsp_arch)/etc/ltsp/ mode=0755 owner=root group=root
+      #correct ownership for nbd-server.
+      /var/opt/ltsp/swapfiles  mode=700 owner=nobody group=nogroup
+
+files:
+  debian.ltspserver|workstation|standalone::
+    # ldm fail if Xsession is not executable
+    /etc/X11/Xsession mode=a+x  act=fixall
+
+  debian.ltspserver::
+    # create config file for update-kernels
+    /opt/ltsp/$(ltsp_arch)/etc/ltsp/update-kernels.conf mode=755 owner=root group=root act=create
+    #needed for nbd-server to startup
+    /opt/ltsp/$(ltsp_arch)/etc/nbd-server mode=a+r act=fixall
+    #Needed for nbdswapd  config file
+    /etc/ltsp/nbdswapd.conf owner=root group=root mode=a+r act=create
+
+
+editfiles:
+
+
+  debian.ltspserver::
+    #Set the correct swapfile area
+    { /etc/ltsp/nbdswapd.conf
+      AppendIfNoSuchLine 'SWAPDIR=/var/opt/ltsp/swapfiles'
+# timeout disabled as it does not work properly
+#      AppendIfNoSuchLine 'NBD_SERVER_OPTS="-a 3600"'
+    }
+    #run the nbdquery on port 9211 in the chroot
+    { /opt/ltsp/i386/etc/inetd.conf
+      AppendIfNoSuchLine '9211 stream tcp nowait root /usr/sbin/tcpd /usr/sbin/nbdquery'
+    }
+
+  debian.!standalone::
+
+    # The file /etc/default/dhcp3-server controls what interface the dhcp
+    # server will listen on. We will have one monster dhcpd.conf file
+    # that contains definitions for both the eth0 and eth1 interfaces
+    # and control which is active by manipulating this
+    # /etc/default/dhcp3-server
+
+    # If this host is the primary server, then cf.dhcpserver will
+    # Replace 'INTERFACES=""' with 'INTERFACES="eth0".  This rule will
+    # then append 'INTERFACES="$INTERFACE eth1"' to the shell script
+    # fragment to make sure both interfaces are used.
+    #
+    # Make sure this is synced with cf.dhcpserver
+
+    
+    { /etc/default/dhcp3-server
+      AppendIfNoSuchLine 'INTERFACES="$INTERFACES eth1"'
+    }
+
+
+    # We need to make sure that packets get forwarded between the two
+    # network interfaces
+    
+    { /etc/sysctl.conf
+      AppendIfNoSuchLine "net.ipv4.ip_forward = 1"
+    }
+    
+    # Make the tftp-daemon run change-rooted (-s switch) using the standard
+    # ltsp directory as root. Very messy otherwise.
+    
+    { /etc/inetd.conf
+       BeginGroupIfNoMatch "tftp           dgram   udp     wait    root  /usr/sbin/in.tftpd -s /tftpboot"
+         ReplaceAll "\/var\/ftpd" With "-s /tftpboot"
+       EndGroup
+    }
+
+    # Need to allow thin clients to make requests and get response
+    # from KDM
+    
+    { /etc/kde3/kdm/Xaccess
+      AppendIfNoSuchLine "*    #any host can get a login window"
+    }
+
+    
+    # Set American keyboard as default for thin clients.  It is
+    # overrided by locale-config-skolelinux later in the installation.
+    # Enable three button emulation for mice
+    # Ensure X font server is being used
+    # Set the correct domain search pattern
+    # Let the mice emulate 3 buttons
+    # Enable NFS Swap for all thin clients, size 32MB
+    
+    { /opt/ltsp/$(ltsp_arch)/etc/lts.conf
+       LocateLineMatching "\[Default\]"
+      # IncrementPointer 9
+       LocateLineMatching "        USE_XFS            = N"
+          ReplaceLineWith "        USE_XFS            = Y"
+       
+       BeginGroupIfNoSuchLine "        XkbLayout          = us"
+         InsertLine "        XkbLayout          = us"
+       EndGroup
+
+       BeginGroupIfNoSuchLine "        SEARCH_DOMAIN      = intern"
+         InsertLine "        SEARCH_DOMAIN      = intern"
+       EndGroup
+
+       BeginGroupIfNoSuchLine "        X_MOUSE_EMULATE3BTN = Y"
+         InsertLine "        X_MOUSE_EMULATE3BTN = Y"
+       EndGroup
+
+       BeginGroupIfNoSuchLine "        USE_NFS_SWAP       = Y"
+         InsertLine "        USE_NFS_SWAP       = Y"
+       EndGroup
+
+       BeginGroupIfNoSuchLine "        SWAPFILE_SIZE      = 32m"
+         InsertLine "        SWAPFILE_SIZE      = 32m"
+       EndGroup
+       
+       BeginGroupIfNoSuchLine '        X_MOUSE_PROTOCOL    = "Microsoft"'
+         InsertLine '# Example of serial mouse settings'
+         InsertLine '#        X_MOUSE_PROTOCOL    = "Microsoft"'
+	 InsertLine '#        X_MOUSE_DEVICE      = "/dev/ttyS0"'
+	 InsertLine '#        X_MOUSE_RESOLUTION  = 400'
+	 InsertLine '#        X_MOUSE_BUTTONS     = 2'
+	 InsertLine '#        X_MOUSE_EMULATE3BTN = Y'
+       EndGroup
+    }
+
+
+    # Set up NFS config file to allow thin clients to mount their 
+    # root file system and the swap files
+    
+    { /etc/exports
+      AppendIfNoSuchLine "/opt/ltsp/$(ltsp_arch)             192.168.0.0/255.255.255.0(ro,async,no_root_squash,subtree_check)"
+    }
+
+    # Need to fix up rc.local in the thin client tree to allow
+    # for the fact that dhcpd does not send across a hostname
+    # when the thin client is in the dynamic range. If the IP
+    # address is fixed to MAC address there is no problem, but
+    # need to have the same solution for all clients
+
+# This part give syntax error and block configuration using cfengine.
+# Disabled until the syntax error is fixed. [pere 2003-11-03]
+#    { /opt/ltsp/$(ltsp_arch)/etc/rc.local
+#
+#      LocateLineMatching 'echo "Current hostname: \$\{HOSTNAME\}"'
+#      AppendIfNoSuchLine "IPADDR=`ifconfig eth0 | sed -n '/addr:/p' | cut -f2 -d: | cut -f1 -d' '`"
+#      AppendIfNoSuchLine 'echo "Current IP: \$\{IPADDR\}"'
+#
+#      LocateLineMatching "SWAPFILE=/tmp/swapfiles/\$\{HOSTNAME\}.swap"
+#      ReplaceLineWith "    SWAPFILE=/tmp/swapfiles/\$\{IPADDR\}.swap"
+#    }
+
+    # Allow authentication by host to various services
+    # Don't forget NFS uses portmap and needs this
+    
+    { /etc/hosts.allow
+      AppendIfNoSuchLine "bootpd:   0.0.0.0"
+      AppendIfNoSuchLine "in.tftpd: 192.168.0."
+      AppendIfNoSuchLine "portmap:  192.168.0."
+     }
+     
+     { /etc/X11/fs/config
+      CommentLinesMatching "no-listen = tcp"
+     }
+
+
+     # populate config file for update-kernels.
+     { /opt/ltsp/$(ltsp_arch)/etc/ltsp/update-kernels.conf
+       AppendIfNoSuchLine "BOOTPROMPT_OPTS='quiet splash'"
+     }
+
+     # make a sane resolv.conf for the thin clients
+     { /opt/ltsp/$(ltsp_arch)/etc/resolv.conf
+       DeleteLinesContaining "search"
+       DeleteLinesContaining "nameserver"
+       AppendIfNoSuchLine "search intern"
+       AppendIfNoSuchLine "nameserver 10.0.2.2"
+     }
+
+     # Make sure LTSP servers by default allow access local devices on
+     # thin clients.  Require pam_group in common-auth.
+     # http://www.die.net/doc/linux/man/man5/group.conf.5.html
+     # document # the format.
+     { /etc/security/group.conf
+       AppendIfNoSuchLine "*; *; *; Al0000-2400; fuse"
+     }
+
+     # Make sure local device work out of the box (Bug #1184).  In Ubuntu,
+     # this kernel loading is done by the fuse-utils package.  It is not
+     # don in the 2.5.3-4.4 debian package.
+     { /etc/modules
+       AppendIfNoSuchLine "fuse"
+     }
+
+shellcommands:
+
+  debian.!woody::
+
+    # Do some nice intelligent things to the behaviour of KDM, like offering
+    # a login screen to the thin clients and remove the rights to
+    # reboot the server from the thin clients.
+
+    "/usr/bin/update-ini-file /etc/kde3/kdm/kdmrc Xdmcp Enable true"
+    "/usr/bin/update-ini-file /etc/kde3/kdm/kdmrc 'X-*-Core' AllowRootLogin false"
+
+    # Set up thin clients using lessdisks (no ltsp packages for powerpc)
+    #"/usr/bin/debian-edu-lessdisks "
+  
+  debian.ltspserver::
+
+    #set up initd to run nbd-server
+    "/usr/sbin/update-inetd --group LTSP --add \"9210 stream tcp nowait nobody /usr/sbin/tcpd /usr/sbin/nbdswapd\""
+    #copying lts.conf into the chroot. 
+    "/bin/cat /etc/debian-edu/lts.conf.dist > /opt/ltsp/$(ltsp_arch)/etc/lts.conf"
+    #activate nbdquery in the chroot
+    "/usr/sbin/chroot /opt/ltsp/i386/ /usr/sbin/update-rc.d -f openbsd-inetd remove"
+    "/usr/sbin/chroot /opt/ltsp/i386/ /usr/sbin/update-rc.d  openbsd-inetd defaults 20"
+    "/bin/cp /usr/share/debian-edu-config/tools/nbdquery  /opt/ltsp/$(ltsp_arch)/usr/sbin/"
+    
+    
+  
+
diff --git a/debian-edu-config/cf/cf.mime-support b/debian-edu-config/cf/cf.mime-support
new file mode 100644
index 0000000..29ebe26
--- /dev/null
+++ b/debian-edu-config/cf/cf.mime-support
@@ -0,0 +1,30 @@
+#-------------------------------------------------------------------
+# http://bugs.skolelinux.no/show_bug.cgi?id=481
+#-------------------------------------------------------------------
+# Apache on Skolelinux should have mime.types for the OpenOffice.org
+# document types.
+#
+# The below mime types were gleaned off Konqueror's mime types. Adding
+# them to /etc/mime.types should make Apache deliver the correct
+# "Content-Type" headers:
+#
+
+# This file adds the mime types for OpenOffice.org document type to
+#/etc/mime.types if this is a main server
+#perh at skolelinux.no
+
+editfiles:
+        { /etc/mime.types
+            BeginGroupIfNoLineContaining "application/vnd.sun.xml"
+	        # Writer types
+		AppendIfNoSuchLine "application/vnd.stardivision.math               sdf"
+		# Calc types
+		AppendIfNoSuchLine "application/vnd.stardivsion.calc                sdc"
+		AppendIfNoSuchLine "application/vnd.stardivsion.chart               sdc"
+		# Impress types
+		AppendIfNoSuchLine "application/vnd.stardivsion.impress		    sdi"
+		# Draw types
+		AppendIfNoSuchLine "application/vnd.stardivsion.draw                sdd"
+
+            EndGroup
+        }
diff --git a/debian-edu-config/cf/cf.mozilla b/debian-edu-config/cf/cf.mozilla
new file mode 100644
index 0000000..f95d2bd
--- /dev/null
+++ b/debian-edu-config/cf/cf.mozilla
@@ -0,0 +1,88 @@
+#
+# Configure Proxy and Printer settings
+#
+
+editfiles:
+	
+    debian.woody.installation.workstation::
+
+        { /etc/mozilla/prefs.js
+
+	  BeginGroupIfNoSuchLine "// Proxy Settings"
+            AppendIfNoSuchLine '// Proxy Settings'
+            AppendIfNoSuchLine 'pref("network.proxy.ftp", "webcache");'
+            AppendIfNoSuchLine 'pref("network.proxy.ftp_port", 3128);'
+            AppendIfNoSuchLine 'pref("network.proxy.http", "webcache");'
+            AppendIfNoSuchLine 'pref("network.proxy.http_port", 3128);'
+            AppendIfNoSuchLine 'pref("network.proxy.ssl", "webcache");'
+            AppendIfNoSuchLine 'pref("network.proxy.ssl_port", 3128);'
+            AppendIfNoSuchLine 'pref("network.proxy.no_proxies_on", "localhost, 127.0.0.1, .intern");'
+            AppendIfNoSuchLine 'pref("network.proxy.type", 1);'
+          EndGroup
+
+        }
+
+	debian.woody.workstation|debian.woody.standalone::
+	
+        { /etc/mozilla/prefs.js
+
+	  BeginGroupIfNoSuchLine "// Set cache size"
+            AppendIfNoSuchLine '// Set cache size'
+            AppendIfNoSuchLine 'pref("browser.cache.disk.capacity", 5120);'
+          EndGroup
+
+	  BeginGroupIfNoSuchLine "// Printer settings"
+            AppendIfNoSuchLine '// Printer Settings'
+            AppendIfNoSuchLine 'pref("print.printer_PostScript/default.print_command", "kprinter");'
+            AppendIfNoSuchLine 'pref("print.printer_PostScript/default.print_paper_height", " 11.65");'
+            AppendIfNoSuchLine 'pref("print.printer_PostScript/default.print_paper_name", "A4");'
+            AppendIfNoSuchLine 'pref("print.printer_PostScript/default.print_paper_size_type", 1);'
+            AppendIfNoSuchLine 'pref("print.printer_PostScript/default.print_paper_size_unit", 0);'
+            AppendIfNoSuchLine 'pref("print.printer_PostScript/default.print_paper_width", "  8.27");'
+          EndGroup
+
+
+        }
+
+    debian.!woody.installation.workstation::
+
+        { /etc/mozilla-firefox/pref/firefox.js
+
+	  BeginGroupIfNoSuchLine "// Proxy Settings"
+            AppendIfNoSuchLine '// Proxy Settings'
+            AppendIfNoSuchLine 'pref("network.proxy.ftp", "webcache");'
+            AppendIfNoSuchLine 'pref("network.proxy.ftp_port", 3128);'
+            AppendIfNoSuchLine 'pref("network.proxy.http", "webcache");'
+            AppendIfNoSuchLine 'pref("network.proxy.http_port", 3128);'
+            AppendIfNoSuchLine 'pref("network.proxy.ssl", "webcache");'
+            AppendIfNoSuchLine 'pref("network.proxy.ssl_port", 3128);'
+            AppendIfNoSuchLine 'pref("network.proxy.no_proxies_on", "localhost, 127.0.0.1, .intern");'
+            AppendIfNoSuchLine 'pref("network.proxy.type", 1);'
+          EndGroup
+
+        }
+
+	debian.!woody.workstation|debian.!woody.standalone::
+	
+        { /etc/mozilla-firefox/pref/firefox.js
+
+	  BeginGroupIfNoSuchLine "// Set cache size"
+            AppendIfNoSuchLine '// Set cache size'
+            AppendIfNoSuchLine 'pref("browser.cache.disk.capacity", 5120);'
+          EndGroup
+
+	  BeginGroupIfNoSuchLine "// Printer settings"
+            AppendIfNoSuchLine '// Printer Settings'
+            AppendIfNoSuchLine 'pref("print.postscript.print_size", "A4");'
+            AppendIfNoSuchLine 'pref("print.postscript.print_command", "kprinter");'
+            AppendIfNoSuchLine 'pref("print.print_command", "kprinter");'
+          EndGroup
+
+	  BeginGroupIfNoSuchLine "// Mailto settings"
+            AppendIfNoSuchLine '// Mailto settings'
+            AppendIfNoSuchLine 'pref("network.protocol-handler.app.mailto", "mozilla-thunderbird");'
+          EndGroup
+          
+
+        }
+
diff --git a/debian-edu-config/cf/cf.munin b/debian-edu-config/cf/cf.munin
new file mode 100644
index 0000000..2634d64
--- /dev/null
+++ b/debian-edu-config/cf/cf.munin
@@ -0,0 +1,8 @@
+editfiles:
+
+  debian.!standalone.installation::
+
+    { /etc/munin/munin-node.conf
+
+      AppendIfNoSuchLine 'allow ^10\.0\.2\.2$'
+    }
diff --git a/debian-edu-config/cf/cf.nagios b/debian-edu-config/cf/cf.nagios
new file mode 100644
index 0000000..3ac7d3f
--- /dev/null
+++ b/debian-edu-config/cf/cf.nagios
@@ -0,0 +1,10 @@
+links:
+    
+    /etc/nagios/cgi.cfg ->! /etc/nagios/debian-edu/cgi.cfg
+    /etc/nagios/nagios.cfg ->! /etc/nagios/nagios-debian-edu.cfg
+    /etc/nagios/htpasswd.users ->! /etc/nagios/debian-edu/htpasswd.users
+    /usr/share/nagios/htdocs/index.html ->! /etc/nagios/debian-edu/index.html
+    /usr/share/nagios/htdocs/main.html ->! /etc/nagios/debian-edu/main.html
+    /usr/share/nagios/htdocs/side.html ->! /etc/nagios/debian-edu/side.html
+    /usr/share/nagios/htdocs/images/skolelinux_logo.png ->! /etc/nagios/debian-edu/skolelinux_logo.png
+    /usr/share/nagios/htdocs/images/skolelinux_logo_140.png ->! /etc/nagios/debian-edu/skolelinux_logo_140.png
diff --git a/debian-edu-config/cf/cf.nagios2 b/debian-edu-config/cf/cf.nagios2
new file mode 100644
index 0000000..ca1f648
--- /dev/null
+++ b/debian-edu-config/cf/cf.nagios2
@@ -0,0 +1,12 @@
+links:
+    
+    /etc/nagios2/cgi.cfg ->! /etc/nagios2/debian-edu/cgi.cfg
+    /etc/nagios2/nagios.cfg ->! /etc/nagios2/debian-edu/nagios.cfg
+    /etc/nagios2/htpasswd.users ->! /etc/nagios2/debian-edu/htpasswd.users
+    /etc/nagios2/conf.d ->! /etc/nagios2/debian-edu
+
+shellcommands:
+
+  debian.server.installation::
+    # set a random password at installation. users should pick their own
+    "/usr/bin/htpasswd -b /etc/nagios2/debian-edu/htpasswd.users nagiosadmin `/usr/bin/head -c 45 /dev/urandom | tr -d [:cntrl:]`" 
diff --git a/debian-edu-config/cf/cf.nat b/debian-edu-config/cf/cf.nat
new file mode 100644
index 0000000..bdfab99
--- /dev/null
+++ b/debian-edu-config/cf/cf.nat
@@ -0,0 +1,5 @@
+shellcommands:
+
+  debian.ltspserver::
+#     "/usr/sbin/update-rc.d enable-nat defaults"
+     "/etc/init.d/enable-nat start"
diff --git a/debian-edu-config/cf/cf.ntp b/debian-edu-config/cf/cf.ntp
new file mode 100644
index 0000000..7e50d44
--- /dev/null
+++ b/debian-edu-config/cf/cf.ntp
@@ -0,0 +1,33 @@
+files:
+  debian.!woody.installation::
+                /etc/ntp.conf o=root g=root m=644 act=create
+
+editfiles:
+  debian.!woody.installation::
+    { /etc/ntp.conf
+        HashCommentLinesContaining "pool.ntp.org"
+        AppendIfNoSuchLine "# /etc/ntp.conf, configuration for xntpd"
+        AppendIfNoSuchLine "# ntpd will use syslog() if logfile is not defined"
+        AppendIfNoSuchLine "#logfile /var/log/ntpd"
+        AppendIfNoSuchLine "driftfile /var/lib/ntp/ntp.drift"
+        AppendIfNoSuchLine "statsdir /var/log/ntpstats/"
+        AppendIfNoSuchLine "statistics loopstats peerstats clockstats"
+        AppendIfNoSuchLine "filegen loopstats file loopstats type day enable"
+        AppendIfNoSuchLine "filegen peerstats file peerstats type day enable"
+        AppendIfNoSuchLine "filegen clockstats file clockstats type day enable"
+    }
+
+  debian.!woody.server.installation::
+    { /etc/ntp.conf
+        AppendIfNoSuchLine "server 127.127.1.0"
+    }
+
+  debian.!woody.sarge.!server.installation::
+    { /etc/ntp.conf
+        AppendIfNoSuchLine "server ntp"
+    }
+
+  debian.!woody.!sarge.!server.installation::
+    { /etc/ntp.conf
+        AppendIfNoSuchLine "server ntp iburst"
+    }
diff --git a/debian-edu-config/cf/cf.opera b/debian-edu-config/cf/cf.opera
new file mode 100644
index 0000000..989cd57
--- /dev/null
+++ b/debian-edu-config/cf/cf.opera
@@ -0,0 +1,13 @@
+# Configure Opera
+
+shellcommands:
+
+  debian.workstation|debian.woody.standalone::
+
+    # Turn off advertising, and turn the users to www.skolelinux.no by default.
+
+    "/usr/bin/update-ini-file /etc/opera6rc.fixed 'brand' 'Branded Banner URL' ''"
+
+    "/usr/bin/update-ini-file /etc/opera6rc.fixed 'brand' 'Banner Path' http://www.skolelinux.no/img/operabanner.png"
+
+    "/usr/bin/update-ini-file /etc/opera6rc.fixed 'brand' 'Banner HomePage' http://www.skolelinux.no/"
diff --git a/debian-edu-config/cf/cf.pcmcia b/debian-edu-config/cf/cf.pcmcia
new file mode 100644
index 0000000..11eba33
--- /dev/null
+++ b/debian-edu-config/cf/cf.pcmcia
@@ -0,0 +1,11 @@
+editfiles:
+
+	debian::
+
+	# Make pcmcia package use yenta_socket as default
+        { /etc/default/pcmcia
+              BeginGroupIfNoMatch 'PCIC=yenta_socket'
+                  LocateLineMatching 'PCIC=i82365'
+                  ReplaceLineWith 'PCIC=yenta_socket'
+              EndGroup
+        }
diff --git a/debian-edu-config/cf/cf.samba b/debian-edu-config/cf/cf.samba
new file mode 100644
index 0000000..298152e
--- /dev/null
+++ b/debian-edu-config/cf/cf.samba
@@ -0,0 +1,6 @@
+links:
+
+	debian.server.installation::
+
+	/etc/samba/smb.conf           ->! /etc/samba/smb-debian-edu.conf
+
diff --git a/debian-edu-config/cf/cf.slbackup b/debian-edu-config/cf/cf.slbackup
new file mode 100644
index 0000000..23e6f67
--- /dev/null
+++ b/debian-edu-config/cf/cf.slbackup
@@ -0,0 +1,25 @@
+#
+# This file adds the ltsp-etc-directory to the backup-list (slbackup)
+# if the server is a combined server
+#
+# 20040117 - werner at skolelinux.no
+#
+
+#links:
+    # setup automatically LDAP-database dump before backup is started
+#    debian.!woody.server::
+#	/etc/slbackup/pre.d/ldapdump.sh -> /usr/share/debian-edu-config/tools/ldapdump.sh  
+#	    nofile=force
+
+#editfiles:
+#    # This line shall be appended if the computer is a combined
+#    # Main-server and thin-client-server
+#    debian.server.ltspserver.installation::
+#
+#        { /etc/slbackup/slbackup.conf
+#            BeginGroupIfNoLineContaining "/opt/ltsp/$(ltsp_arch)/etc"            
+#                LocateLineMatching "^ *location.*"
+#                IncrementPointer "1"
+#                InsertLine "        location   /opt/ltsp/$(ltsp_arch)/etc"
+#            EndGroup
+#        }
diff --git a/debian-edu-config/cf/cf.squid b/debian-edu-config/cf/cf.squid
new file mode 100644
index 0000000..8943cd8
--- /dev/null
+++ b/debian-edu-config/cf/cf.squid
@@ -0,0 +1,153 @@
+# Configure squid.
+#  - Add new access control list schoolnet
+#  - Grant access to this list.
+#  - Increase the max object size to make squid more usefull as a deb
+#    package proxy
+
+editfiles:
+
+  debian.!standalone::
+    # Enable proxy by default, but drop it on standalone until squid is
+    # configured on standalone
+    { /etc/environment
+      AutoCreate
+      AppendIfNoSuchLine "http_proxy=http://webcache:3128"
+      AppendIfNoSuchLine "ftp_proxy=http://webcache:3128"
+    }
+
+   debian.woody.server::
+
+    { /etc/squid.conf
+
+      LocateLineMatching "# maximum_object_size 4096 KB"
+      IncrementPointer   "1"
+      BeginGroupIfNoMatch "maximum_object_size 20480 KB"
+	IncrementPointer "-1"
+	InsertLine "maximum_object_size 20480 KB"
+      EndGroup
+
+      LocateLineMatching "# refresh_pattern \^gopher:.*1440.*0%.*1440"
+      IncrementPointer   "1"
+      BeginGroupIfNoMatch "refresh_pattern \(Release\|Package\(\.gz)\*)\$ 0 20% 2880"
+        IncrementPointer "-1"
+        InsertLine "refresh_pattern (Release|Package(.gz)*)$ 0 20% 2880"
+      EndGroup
+
+      LocateLineMatching "#Recommended minimum configuration:"
+      IncrementPointer   "1"
+      BeginGroupIfNoMatch "acl schoolnet src 10.0.2.0/255.255.254.0"
+	IncrementPointer "-1"
+	InsertLine "acl schoolnet src 10.0.2.0/255.255.254.0"
+      EndGroup
+      IncrementPointer   "1"
+      BeginGroupIfNoMatch "acl ltspnet src 192.168.0.0/255.255.255.0"
+	IncrementPointer "-1"
+	InsertLine "acl ltspnet src 192.168.0.0/255.255.255.0"
+      EndGroup
+
+      LocateLineMatching "# INSERT YOUR OWN RULE\(S\) HERE TO ALLOW ACCESS FROM YOUR CLIENTS"
+      IncrementPointer   "2"
+      BeginGroupIfNoMatch "http_access allow schoolnet"
+	IncrementPointer "-1"
+	InsertLine "http_access allow schoolnet"
+      EndGroup
+      IncrementPointer   "1"
+      BeginGroupIfNoMatch "http_access allow ltspnet"
+	IncrementPointer "-1"
+	InsertLine "http_access allow ltspnet"
+      EndGroup
+
+    }
+
+   debian.!woody.server::
+
+    { /etc/squid/squid.conf
+
+      LocateLineMatching "# maximum_object_size 4096 KB"
+      IncrementPointer   "1"
+      BeginGroupIfNoMatch "maximum_object_size 20480 KB"
+	IncrementPointer "-1"
+	InsertLine "maximum_object_size 20480 KB"
+      EndGroup
+
+      LocateLineMatching "refresh_pattern \^gopher:.*1440.*0%.*1440"
+      IncrementPointer   "1"
+      BeginGroupIfNoMatch "refresh_pattern \(Release\|Package\(\.gz)\*)\$ 0 20% 2880"
+        IncrementPointer "-1"
+        InsertLine "refresh_pattern (Release|Package(.gz)*)$ 0 20% 2880"
+      EndGroup
+
+      LocateLineMatching "#Recommended minimum configuration:"
+      IncrementPointer   "1"
+      BeginGroupIfNoMatch "acl schoolnet src 10.0.2.0/255.255.254.0"
+	IncrementPointer "-1"
+	InsertLine "acl schoolnet src 10.0.2.0/255.255.254.0"
+      EndGroup
+      IncrementPointer   "1"
+      BeginGroupIfNoMatch "acl ltspnet src 192.168.0.0/255.255.255.0"
+	IncrementPointer "-1"
+	InsertLine "acl ltspnet src 192.168.0.0/255.255.255.0"
+      EndGroup
+
+      LocateLineMatching "# INSERT YOUR OWN RULE\(S\) HERE TO ALLOW ACCESS FROM YOUR CLIENTS"
+      IncrementPointer   "2"
+      BeginGroupIfNoMatch "http_access allow schoolnet"
+	IncrementPointer "-1"
+	InsertLine "http_access allow schoolnet"
+      EndGroup
+      IncrementPointer   "1"
+      BeginGroupIfNoMatch "http_access allow ltspnet"
+	IncrementPointer "-1"
+	InsertLine "http_access allow ltspnet"
+      EndGroup
+
+      BeginGroupIfLineContaining "acl SSL_ports port 563"
+      BeginGroupIfNoMatch "acl SSL_ports port 631"
+	InsertLine "acl SSL_ports port 631"
+	InsertLine "acl Safe_ports port 631"
+      EndGroup
+      EndGroup
+
+      BeginGroupIfLineContaining "acl SSL_ports port 873"
+      BeginGroupIfNoMatch "acl SSL_ports port 10000"
+	InsertLine "acl SSL_ports port 10000"
+	InsertLine "acl Safe_ports port 10000"
+      EndGroup
+      EndGroup
+
+      LocateLineMatching "# append_domain .yourdomain.com"
+      IncrementPointer   "1"
+      BeginGroupIfNoMatch "append_domain .intern"
+	IncrementPointer "-1"
+	InsertLine "append_domain .intern"
+      EndGroup
+    }
+
+shellcommands:
+
+  debian.woody.workstation.!standalone::
+
+    # Stupid Konqueror do not use http_proxy and ftp_proxy.  Enable in
+    # config file.
+    "/usr/bin/update-ini-file /etc/kde2/kioslaverc 'Proxy Settings' ProxyType 1"
+    "/usr/bin/update-ini-file /etc/kde2/kioslaverc 'Proxy Settings' ftpProxy http://webcache:3128"
+    "/usr/bin/update-ini-file /etc/kde2/kioslaverc 'Proxy Settings' httpProxy http://webcache:3128"
+    "/usr/bin/update-ini-file /etc/kde2/kioslaverc 'Proxy Settings' httpsProxy http://webcache:3128"
+
+  debian.!woody.workstation.!standalone::
+
+    # Stupid Konqueror do not use http_proxy and ftp_proxy.  Enable in
+    # config file.
+    "/usr/bin/update-ini-file /etc/kde3/kioslaverc 'Proxy Settings' ProxyType 1"
+    "/usr/bin/update-ini-file /etc/kde3/kioslaverc 'Proxy Settings' ftpProxy http://webcache:3128"
+    "/usr/bin/update-ini-file /etc/kde3/kioslaverc 'Proxy Settings' httpProxy http://webcache:3128"
+    "/usr/bin/update-ini-file /etc/kde3/kioslaverc 'Proxy Settings' httpsProxy http://webcache:3128"
+    "/usr/bin/update-ini-file /etc/kde3/kioslaverc 'Proxy Settings' NoProxyFor localhost,.intern,10.0.2.2"
+
+files:
+# Make sure every user can read the proxy config for KDE
+  debian.woody.workstation.!standalone::
+     /etc/kde2/kioslaverc mode=0644 action=touch
+
+  debian.!woody.workstation.!standalone::
+     /etc/kde3/kioslaverc mode=0644 action=touch
diff --git a/debian-edu-config/cf/cf.ssh b/debian-edu-config/cf/cf.ssh
new file mode 100644
index 0000000..fe0b096
--- /dev/null
+++ b/debian-edu-config/cf/cf.ssh
@@ -0,0 +1,13 @@
+editfiles:
+
+	debian::
+
+		# Turn on X11 Forwarding
+		{ /etc/ssh/sshd_config
+
+			LocateLineMatching "X11Forwarding.+"
+			BeginGroupIfNoMatch        "X11Forwarding yes"
+			  HashCommentLinesStarting "X11Forwarding no"
+			  InsertLine               "X11Forwarding yes"
+			EndGroup
+		}
diff --git a/debian-edu-config/cf/cf.syslog b/debian-edu-config/cf/cf.syslog
new file mode 100644
index 0000000..d35454c
--- /dev/null
+++ b/debian-edu-config/cf/cf.syslog
@@ -0,0 +1,47 @@
+#
+# Configure sysklogd and tcp-wrapper for it.  Most of this
+# can be removed when Debian bug #205239 is fixed.
+#
+
+editfiles:
+
+  # On server and ltsp-server
+  debian.server|debian.ltspserver::
+    # edit /etc/init.d/sysklogd to accept UDP for woody and sarge
+    { /etc/init.d/sysklogd
+      # Change 'SYSLOGD=""' to 'SYSLOGD="-r -h"'
+      LocateLineMatching 'SYSLOGD=""'
+      ReplaceLineWith 'SYSLOGD="-r -h"'
+    }
+    # the same, for etch and later
+    { /etc/default/syslogd
+      # Change 'SYSLOGD=""' to 'SYSLOGD="-r -h"'
+      LocateLineMatching 'SYSLOGD=""'
+      ReplaceLineWith 'SYSLOGD="-r -h"'
+    }
+
+  # On server
+  debian.server::
+
+    # edit /etc/hosts.{allow,deny} to allow syslog packages from 10.0.2.0/23
+    { /etc/hosts.allow
+      AppendIfNoSuchLine "syslog: 10.0.2."
+      AppendIfNoSuchLine "syslog: 10.0.3."
+    }
+
+  # On ltsp-server
+  debian.ltspserver::
+
+    # edit /etc/hosts.{allow,deny} to allow syslog packages from 192.168.0.0/24
+    { /etc/hosts.allow
+      AppendIfNoSuchLine "syslog: 192.168.0."
+    }
+
+  # On every host except the server and a standalone machine
+  debian.!server.!standalone::
+
+    # edit /etc/syslog.conf to forward all messages to the syslog host
+    { /etc/syslog.conf
+      AppendIfNoSuchLine "*.* @syslog"
+    }
+
diff --git a/debian-edu-config/cf/cf.sysstat b/debian-edu-config/cf/cf.sysstat
new file mode 100644
index 0000000..6c3a0c8
--- /dev/null
+++ b/debian-edu-config/cf/cf.sysstat
@@ -0,0 +1,17 @@
+editfiles:
+
+  debian.server::
+
+	# The contents of the file /etc/default/sysstat controls whether
+	# sar runs or not.
+	# Need to make sure that the line saying
+	# ENABLED="false" (the default on install)
+	# is changed to
+	# ENABLED="true"
+	# Probably only worthwhile to do this on servers:q
+
+
+	{ /etc/default/sysstat 
+	      LocateLineMatching 'ENABLED="false"'
+	      ReplaceLineWith 'ENABLED="true"'
+	}
diff --git a/debian-edu-config/cf/cfd b/debian-edu-config/cf/cfd
new file mode 100755
index 0000000..f3faba9
--- /dev/null
+++ b/debian-edu-config/cf/cfd
@@ -0,0 +1,29 @@
+#!/bin/bash
+#Cfengine daemon startup script
+test -x /usr/sbin/cfd || exit 0
+NAME=cfd
+PATH=/usr/bin:/bin:/usr/sbin:/sbin
+CFINPUTS=/etc/cfengine/debian-edu
+export CFINPUTS
+
+
+case $1 in
+
+ start) echo "Starting Cfengine daemon: cfd"
+        /usr/sbin/cfd
+        exit 0
+        ;;
+
+ stop)  echo "Trying to kill Cfengine daemon"
+          kill -9 `/bin/ps aux | /usr/bin/awk '/cfd/ {print $2}'`
+	  exit 0
+        ;;
+ *)	N=/etc/init.d/$NAME
+	echo "Usage: $N {start|stop}" >&2
+	exit 1
+	;;
+			 
+
+esac
+
+
diff --git a/debian-edu-config/cf/cfd.conf b/debian-edu-config/cf/cfd.conf
new file mode 100644
index 0000000..254934d
--- /dev/null
+++ b/debian-edu-config/cf/cfd.conf
@@ -0,0 +1,20 @@
+#########################################################
+#
+# This is the configure file for the Cfengine daemon cfd.
+# 
+	 
+control:
+	hosts		= ( @all-hosts )
+  	cfengine 	= ( /etc/cfengine/debian-edu )
+  	MaxConnections 	= ( 10 )
+	
+#########################################################
+
+admit:   # or grant:
+
+      any::	
+		$(cfengine) 		$(hosts)
+
+
+#########################################################
+
diff --git a/debian-edu-config/cf/cfengine.conf b/debian-edu-config/cf/cfengine.conf
new file mode 100644
index 0000000..24fdeac
--- /dev/null
+++ b/debian-edu-config/cf/cfengine.conf
@@ -0,0 +1,139 @@
+#
+# This is the main cfengine config file for the Debian Edu project.  All
+# other cfengine config files are included from this file.
+###############################################################################
+
+control:
+	
+	#
+	#  Decides what to be done and in which sequence
+	#
+	#  "copy" should come before "shellcommands" so that it is possible
+	#  to drop in a script and then run it from a cfengine
+	#  config file.
+	#
+	
+	actionsequence = (
+              			mountall
+              			mountinfo
+              			unmount
+              			addmounts
+              			directories
+				links
+              			mountall
+				tidy
+              			files
+              			editfiles
+                		copy
+              	 		shellcommands
+       			 )
+
+	
+	#
+	#  Adds a class where the tasks that should be executes only after the 
+	#  installation is done, should be contained.
+	#  We can then run
+	#  "cfengine -N installation"
+	#  and then these taske wount be executed.
+	#
+	
+	#addclasses 		= ( installation )
+	
+	#
+	#  Setting some variables
+	#
+
+        site                    = ( skole )     # Name on installation
+        mountpattern            = ( /$(site)/$(host) )
+        homepattern             = ( home? )
+
+        access                  = ( root ) 	# Who is allowed to run cfengine
+        sysadm                  = ( root ) 	# Name or mail alias to sysadm
+        editfilesize            = ( 150000 )    # Max size on textfiles that can be edited
+        ltsp_arch               = ( ExecResult(if [ amd64 = $(/usr/bin/dpkg --print-architecture) ] ; then echo i386 ; else /usr/bin/dpkg --print-architecture ; fi) )
+
+	
+	#
+	# Variables that defines some important cataloges
+	#
+	
+	adminfiles              = ( /etc/cfengine/debian-edu ) 	
+        repository              = ( /var/backups/cfengine ) 
+	masterfiles		= ( /etc/cfengine/debian-edu/masterfiles ) 
+	
+	#
+	# This command executes to retrice domainname.
+	# Remember! When you run cfengine -n (dry-run mode),
+	# the command is not run.
+	# cfengine is a DNS name
+	#
+	
+        domain 			= ( "exec /bin/dnsdomainname" )
+	cfserver                = ( cfengine ) 
+	
+###############################################################################
+
+groups:
+
+	woody  			= ( "/bin/grep -q '3.0' /etc/debian_version" )
+	sarge  			= ( "/bin/grep -q '3.1' /etc/debian_version" )
+	etch			= ( "/bin/grep -q '4.0' /etc/debian_version" )
+	kernel24                = ( "/bin/grep -q '^2.4.' /proc/sys/kernel/osrelease" )
+	server			= ( "/usr/bin/test -e /usr/sbin/named" )
+	installation		= ( "/usr/bin/test -e /etc/inittab.real" )
+	ltspserver		= ( "/usr/bin/test -x /usr/sbin/in.tftpd" )
+	workstation		= ( "/usr/bin/test -e /etc/kde2/kdm/kdmrc -o -e /etc/kde3/kdm/kdmrc -a -e /usr/bin/ntpq" )
+	standalone		= ( "/usr/bin/test ! -e /usr/bin/ntpq -a ! -e /etc/init.d/lessdisks-session" )
+	ltspclient		= ( "/usr/bin/test -e /usr/bin/getltscfg" )
+
+###############################################################################
+
+import:
+
+	debian.installation::
+			
+			cf.apt
+			cf.cups
+			cf.dhcpserver
+			cf.exim
+			cf.imap
+			cf.inetd
+			cf.kdm
+			cf.ldapserver
+			cf.locale
+                        cf.ntp
+			cf.opera
+			cf.squid
+			cf.ssh
+			cf.syslog
+			cf.pcmcia
+			cf.mime-support
+			cf.mozilla
+			cf.ldapclient
+			cf.fstab
+			cf.munin
+
+	debian.server.installation::
+			cf.apache2
+			# cf.bind9
+# Disabled until it doesn't block required services.
+			cf.squid
+			cf.samba
+			#the comments only cf.file stoped the cfengine run
+			#cf.slbackup
+			cf.nagios2
+			cf.sysstat
+
+	debian.ltspserver.installation::
+			cf.ltsp
+			#cf.nat
+#no webmin in etch prevents cfengine run on ltspserver profile			
+			cf.sysstat
+	
+	debian.workstation.installation::
+			cf.cfengine
+
+	debian.installation.!standalone::
+			cf.homes
+			
+###############################################################################
diff --git a/debian-edu-config/cf/cfrunhosts.pl b/debian-edu-config/cf/cfrunhosts.pl
new file mode 100755
index 0000000..7ae0afa
--- /dev/null
+++ b/debian-edu-config/cf/cfrunhosts.pl
@@ -0,0 +1,43 @@
+#!/usr/bin/perl -w
+#
+# Generates cfrun.hosts from dhcpd.conf
+
+$CFRUN = "/etc/cfengine/cfrun.hosts";
+$DHCPD = "/etc/dhcp3/dhcpd.conf";
+$range = "";
+
+# Test if cfrun.hosts already exists
+if(-e $CFRUN || !(-e $DHCPD) )
+{
+	exit(0);
+}
+else
+{
+	# Get the range from dhcpd.conf
+	open (FIL,$DHCPD) or die "Can't open $DHCPD !\n";
+	$line = <FIL>;          # <FIL> return a line from the file    
+	while ($line = <FIL>)   # <FIL> returning an empty string at file-end
+  	{
+  		if($line =~ /range (\d*\.\d*\.\d*\.\d*) (\d*\.\d*\.\d*\.\d*)/i)
+   	{
+   		$range .= "$1 $2\n"; 		
+   	}
+   }
+   close(FIL);
+   
+   
+    # Creating the file and writing domain and access variables ++
+    `touch $CFRUN`;
+    chomp($domainname=`/bin/dnsdomainname`); # ex: iu.hio.no
+    
+    open (OUT, ">$CFRUN") || die ("couldn't open $CFRUN");
+    
+    print OUT "# This file is generated by the script /etc/cfengine/cfrunhosts.pl\n";
+    print OUT "# cfrun.hosts states which hosts will run when the command ::cfrun:: is given\n";
+    print OUT "# This file makes it easy for systems using dhcp to utilize cfrun\n";
+    print OUT "domain=$domainname\n";
+    print OUT "access=root\n";
+    print OUT "$range\n";
+   
+   close (OUT);
+}
diff --git a/debian-edu-config/debian/README.debian b/debian-edu-config/debian/README.debian
new file mode 100644
index 0000000..9314304
--- /dev/null
+++ b/debian-edu-config/debian/README.debian
@@ -0,0 +1,7 @@
+debian-edu-config for Debian
+----------------------------
+
+This is part off the Debian Edu project.  This package is the
+framework for automatic configuration of all hosts.
+
+Petter Reinholdtsen <pere at hungry.com>, Sun, 25 Nov 2001 13:12:09 +0100
diff --git a/debian-edu-config/debian/changelog b/debian-edu-config/debian/changelog
new file mode 100644
index 0000000..456979f
--- /dev/null
+++ b/debian-edu-config/debian/changelog
@@ -0,0 +1,1444 @@
+debian-edu-config (0.412) unstable; urgency=low
+
+  [ Petter Reinholdtsen ]
+  * Remove init.d/loadcpufreq, as the functionality is moved
+    to the cpufrequtils package.
+  * Add new pam.d/common-auth-debian-edu activated on standalone
+    installations to make sure console users is given access to
+    local devices.
+  * Remove obsolete pam.d files not used since woody.
+  * Provide access to the scanner group for users on the console.
+    Based on patch to user-setup in Ubuntu.
+  * Make default /usr/share/debian-edu-config/fsautoresizetab and
+    include it in the package.
+  * Change quoting in the dhcpd.conf editing in sbin/ltsp-make-client
+    to try to get it working with bash (Related to Skolelinux bug #1060).
+  * Install localization-config in ltsp-make-client, and run it after
+    the packages are installed, trying to fix skolelinux bug #1127.
+  * Make sure all pxe booting clients use the same path to pxelinux.0
+    in dhcpd.conf.
+  * Remove support for etherboot/non-pxe boot in dhcpd.conf.  Those
+    with such network cards will have to add it manually.
+  * Make sure the munin server is treated as a munin client when
+    collecting information to get the new sitesummary integration
+    working out of the box.  Change how munin-client.conf is updated
+    to get the cfengine rule working.
+  * Drop the fuse group from the list of groups assiged to console users,
+    and make it a group assigned to all logged in users on thin clients,
+    to make it easier to enable local device access on thin clients.
+  * Make sure kderc is updated to enable the special desktop icons
+    for the root user and the members of the admins group.
+  * Make sure /var/www/index.html.?? files uses relative URLs when possible,
+    and use the symbolic www DNS name instead of tjener.
+  * Modified squid to access SSL on port 631, and change all links to Cups
+    to use https on this port.
+  * Change ldap-tools/mkslapdcert to secure the directory where the
+    certificate is created before creating the certificate, and make
+    the public key available in a separate file to make it easier to
+    copy it to the clients.
+  * Create init.d script fetch-ldap-cert to download after apache starts
+    the LDAP SSL certificate on clients when they boot, unless it already
+    is downloaded.
+  * Rename ESERVER to the correct ESPEAKER in the desktop-profile trigger
+    for thin client sound settings in KDE.  Fixes skolelinux bug #1183.
+  * Add fuse to /etc/modules on thin-client-servers, to make sure
+    local device access work out of the box when enabled.  Fixes
+    skolelinux bug #1184.
+  * Enable sound on LTSP thin clients by default, and let those who want
+    silent clients disable it by changing to SOUND=N in lts.conf, instead
+    of the other way around.
+  * Add 000-arch-detection plugin for ltsp-build-client, to install i386
+    LTSP chroot on amd64 machines.  Fixes skolelinux bug #1195.
+  * Remove obsolete/renamed scripts cfengine-skolelinux, skolelinux-hd-warn,
+    skolelinux-restart-services and skolelinux-test-install.  The rename
+    was done in 2004, so documentation should be updated by now.
+  * Enable local device access on LTSP thin clients by default.
+  * Rename cfengine variable de_arch to ltsp_arch, to make it more obvious
+    what the variable is used for.  Change its content to i386 on amd64.
+
+  [ Ronny Aasen ]
+  * Remove the timeout on nbd-server, it removed the swapfile from the
+    client while it's running.
+  * Cleanup the slapd config file. Rename from sarge to etch. And
+    update the cf script to match. And remove the old woody file from
+    the package.
+  * Added sambaNextRid to smbadmin's acl. needed in order to join
+    machines to the domain.
+  * Added ldap-users.pl with dependencies from webmin 1.180, used by
+    samba to create machine accounts in ldap.
+  * Edited smbaddclient.pl to use the provided ldap-users.pl, and not
+    webmin.
+  * Added configfile to support the links to debian-edu-doc made from
+    the local webpage.
+  * Added script to cleanup the ltsp network swapdir daily (Closes
+    Skolelinux Bug #1169)
+  * Added script nbdquery. shows ports in use by nbd-client on ltsp clients
+  * Changed nbdswapd-cleanup to use nbdquery on the ltsp clients, and edited
+    cf.ltsp to activate nbdquery on the ltsp clients
+  * Add dependency on lsof
+  * Added nbdquery to the makefile
+
+  [ Holger Levsen ]
+  * Relabeled descriptions to say "all $foo in the institution"
+    instead of "...school"
+
+  [ Klaus Ade Johnstad ]
+  * Small fix of comments in dhcpd.conf
+  * Removed Norwegian comments in dhcpd.conf
+  * Removed unneeded stanzas for ltsp-clients
+
+ -- Petter Reinholdtsen <pere at debian.org>  Sat, 16 Jun 2007 15:17:06 +0100
+
+debian-edu-config (0.411) unstable; urgency=low
+
+  [ Steffen Joeris ]
+  * Remove icons from the kiosk desktop for student users which relate
+    to uninstalled software (Closes Skolelinux Bug #1140)
+  * Remove obsolete kiosk-profile directory as it is now divided into
+    individual directories
+  * Allow students to run a shell and the kde command execution
+  * Include the kiosk mode for root
+   - Give root the tjener desktop icon to call the internal webpage
+   - Update Makefile and add the tjener.desktop file
+   - Update debian-edu-config.postinst to generate additional config
+     entry for the root kiosk mode
+
+  [ Petter Reinholdtsen ]
+  * Add the fuse group to the list of groups assigned during login, trying to get
+    LTSP local device access working out of the box.
+  * Avoid hardcoding the IP address on the default apache web page.
+  * Avoid hardcoding IP addresses in the nagios config.  This will
+    cause problem in case DNS is unavailable, but make it easier to
+    change IP subnet.
+  * Add pam-foreground as an optional pam session module, to get
+    /var/run/console/ populated with information needed by dbus
+    to give special privileges to users on the console.
+  * Edit /etc/security/group.conf to set up local device access
+    to local users for all profiles, not just standalone and
+    workstation.
+  * Remove unused directory /etc/kde2/kdm from package.
+  * Correct URL to popularity-contest in the default web page.
+  * Drop the popularity-context section in the default web page,
+    as it is part of the default install now.
+  * Add group description to the LDAP groups missing it
+    (Closes skolelinux bug #1132).
+  * Add new init.d script loadcpufreq based on scripts found in the
+    powernowd package in Ubuntu to load the required cpufreq kernel
+    modules, and edit /etc/default/cpufrequtils to enable ondemand
+    cpu scaling to save power.
+  * Change install rule to fail on errors copying files.
+  * Add LC_ALL=C in bin/update-hostname-from-ip to make sure the
+    output format is known.
+  * Use the service name in tjener.desktop, to make it easier
+    to use a different DNS domain.
+  * Modify cf.ltsp to not export /var/opt/ltsp/swapfiles.  Swap is
+    done using nbd and not nfs now.
+  * Removed obsolete cf/cf.sarge-installation-cleanup and cf/cf.devfsd.
+  * Avoid hardcoding DNS domain name on the web page.  Use relative
+    links where it is possible.
+  * New script sbin/debian-edu-fsautoresize making it easier to resize LVM
+    volumes.  Add depend on libfilesys-df-perl to get it working.
+  * Minor cleanup related to the init.d/nbd-poll script.
+
+  [ Bart Cornelis (cobaco) ]
+  * Added Dutch translation
+
+  [ Holger Levsen ]
+  * Added myself to uploaders.
+  * added catalan translation, thanks to René Mérou
+    <ochominutosdearco at gmail.com>
+  * converted /var/www/index.html.?? files to unicode (Closes: Skolelinuxbug
+    #1142)
+
+  [ Ronny Aasen ]
+  * Added configuration for network swap out of the default install.
+    (Closes Skolelinux bug #1087)
+  * Generate random nagios password at installation time (Closes skolelinux
+    bug #1119)
+  * Edit testsuite/bind9-dns to support bind9-host
+  * Edit ltsp-make-client to include preseeds for popularity-contest.
+  * Edit ltsp-make-client to prevent starting a second instance of all deamons
+    in the chroot.
+  * Make a working resolv.conf for the ltsp thin clients. (Closes Skolelinux
+    bug #1073)
+  * Provide debian's default DB_CONFIG before making the ldap DB's, shameless
+    rip from slapd.postinst. (Closes Skolelinux bug #1150)
+  * Renamed index.html.nb to index.html.no (Closes Skolelinux bug #1148)
+  * Changed links on nagios to https.
+  * Added a variable in cfengine, and replaced i386 in cf scripts.
+  * Added support for bind9-host to update-hostname-from-ip.
+  * Cleaning up cf.exim, mail should own /var/lib/maildirs
+  * New syntax in authldaprc (Closes Skolelinux bug #1163)
+  * Added slbackup-php in the webpage
+  * Added a /debian-edu-doc to the webpage
+  * Added subtree_check on exports made by ltsp-make-client (Closes Skolelinux
+    bug #1167)
+  * Forcing the use of encryption on cups administration pages.
+  * Dropped developer pages, we use the wiki. on the webpage.
+  * Updated the url for the mailinglists. On the webpage.
+  * Make nbd-server save in the correct swapfile dir. avoid creating large files in
+    /tmp (Closes Skolelinux bug #1169)
+
+  [ Finn-Arne Johansen ]
+  * Prepared for better integration with resolvconf
+
+ -- Petter Reinholdtsen <pere at debian.org>  Sun, 27 May 2007 08:47:19 +0200
+
+debian-edu-config (0.410) unstable; urgency=low
+
+  [ Patrick Winnertz ]
+  *Include wpad for autoconfiguring the proxy for clients.
+
+  [ Steffen Joeris ]
+  * Correct the path to the kiosk profile in /etc/kderc
+  * Remove unneeded .desktop files from the applications and Desktop sections
+    for kiosk profile as these are not on the CD
+  * Adding first version of the kpanel for the student kiosk profile
+    which includes some generic directories and the some of the current
+    applications
+  * Remove webmin check from testsuite scripts as we do not have webmin
+    anymore and this always reports an error after the installation
+  * Drop the ispell-dict-default script from the testsuite as we are no
+    longer distributing the education-desktop-other metapackage on the
+    first CD due to space limits and therefore no longer including the
+    various dictionaries and make sure that bogus error messaging after
+    the installation is avoided
+  * Do not perform the bind9-dns check after installation in case a
+    standalone profile will be installed
+  * Only perform network check for showmount if nfs-common is installed
+    and therefore exclude the Standalone profile from this check
+  * Disable all syslog checks on Standalone profile as it is not setup
+  * Add myelf to uploaders
+  * Add information about kiosk mode students to README
+  * Drop cf.apache script and make sure that cf.apache2 script is
+    installed
+  * Include Spanish debconf translation (Closes: #407474)
+    thanks to Javier Ruano
+  * Include initial Portuguese debconf translation (Closes: #414060)
+    thanks to Ricardo Silva
+
+  [ Petter Reinholdtsen ]
+  * Extend filesystem test to report ext3 file systems without the
+    resize_inode feature.
+
+  [ Ronny Aasen ]
+  * disable cf.apache since we are installing apache2 now.
+  * configure apache2 userdir with our homedir location
+  * provide a new apache2 default sitefile, showing our frontpage and correct
+    hostmaster email address.
+  * provide a new apache2 ssl default sitefile, using a selfsigned cert.
+  * modified debian/rules to use a debian-edu-config.links file
+  * using cf.apache2 to enable userdir and  ssl modules.
+  * using cf.apache2 to disable the debian stock default site, and enable our
+    own ssl and regular default site files
+  * Deleted webmin from our web frontpage
+  * Added link to sitesummary on our web frontpage
+  * fixed link to nagios on web frontpage
+  * Added experimental nagios2 configuration /etc/nagios2/debian-edu
+  * Added and enabeled cfengine script cf.nagios2
+  * mount nfs with the tcp argument in automounter ldap
+  * Add lwat to the local homepage
+  * Add append_domain to squid.conf, to fix broken resolv on non FQDN
+  * Make Nagios ignore space checks on special filesystems
+  * Trying to remove the spare freespace partition properly, in cf.fstab
+  * Update testsuite/timezone, /etc/localtime is not a symlink anymore.
+  * alter the way we configure bind9, to avoid breaking on bind
+    reconfiguration
+
+  [ Finn-Arne Johansen ]
+  * chown /var/lib/ldap to openldap after slapadd has been run as root
+
+ -- Steffen Joeris <white at debian.org>  Fri,  9 Mar 2007 19:22:09 +1100
+
+debian-edu-config (0.409) unstable; urgency=low
+
+  [ Luk Claes ]
+  * Added myself to uploaders.
+
+  [ Petter Reinholdtsen ]
+  * Adjust cfengine test for detecting etch, to look for '4.0' and not
+    'testing', to match the current version.
+  * Change testsuite/bind9-dns to not report missing Internet
+    connectivity as an error.
+  * Change testsuite/ispell-dict-default to handle locales with UTF-8 or
+    other non-ISO-8859-1 charmaps properly.
+
+ -- Luk Claes <luk at debian.org>  Wed, 22 Nov 2006 22:31:59 +0100
+
+debian-edu-config (0.408) unstable; urgency=low
+
+  [ Ronny Aasen ]
+  * Add authorative to dhcp configuration
+  * reordering cf.ldapclient fixes libnss-ldap
+  * Modify cf.ntp to support setting the clock on startup
+  * Add /etc/lsb-release with some initial values. This should remove the need
+    to preseed ltsp with --dist since lsb-release should function as expected
+  * remove cf.popcon from the makefile. since cf.popcon is removed
+  * added ltsp plugin in order to configure ltsp pxelinnux to use usplash
+  * added nosuid to /tmp in cf.fstab
+  * creates /opt/ltsp/i386/etc/ltsp/update-kernels.conf tru cf.ltsp
+    this enables usplash in ltsp booting clients
+
+  [ Steffen Joeris ]
+  * Include French translation for debconf questions (Closes: #392190)
+    Thanks to Guilhelm Panaget
+  * Delete apt settings for woody and sarge, to clean up a bit
+  * Delete old kdesktoprc for the kiosk profile
+  * Make sure that the kiosk profile is installed in a hierachic order
+  * Include new desktop icon framework for the debian_edu_pupils
+  * Update the package build to honor the new kiosk files
+  * Include German translation for debconf questions (Closes: #396383)
+    Thanks to Helge Kreutzmann
+  * Add special desktop restrictions to the debian_edu_pupils kiosk
+    mode
+  * Add the first customized kmenu for the debian_edu_pupils kiosk
+    profile which is divided into the disciplines
+
+  [ Petter Reinholdtsen]
+  * Enable esd sound in KDE for thin client users by adding a new desktop
+    profile thin-client for all users with LTSP_CLIENT and ESERVER set
+    in the environment.
+  * Modify default pam.d/common-auth to use pam_group, to make it easier
+    to provide local device access to the user logged into the console.
+    Rewrite pam_group config to include more groups and also work on
+    tty1-9 logins.  Activate it on thin-client-server installs, as well
+    as workstation and standalone installs.
+
+  [ Morten Werner Olsen ]
+  * Removing all traces of bind8.
+
+ -- Petter Reinholdtsen <pere at debian.org>  Sun, 19 Nov 2006 13:56:08 +0100
+
+debian-edu-config (0.407) unstable; urgency=low
+
+  [ Ronny Aasen ]
+  * Modify cf.ldapclient, Altering libnss-ldap default bind policy to soft
+  * Added commented volatile sources for etch to cf.apt
+  * modify cf.fstab, to delete the dummy freespace logical volume
+  * fix the regex matcing /tmp  in cf.fstab
+  * updated www.uio.no ip address in testsuite
+  * dont run debian-edu-ltsp, we use ltsp-client-builder
+
+  [ Petter Reinholdtsen ]
+  * Correct exit code and output handling in update-hostname-from-ip.
+  * Drop code to edit /etc/defaults/ntpdate.  It is no longer needed.
+  * Moved testing of network settings from debian-edu-install to
+    testsuite/network.
+  * Add DNS alias sitesummary.intern for the sitesummary collector.
+
+  [ Steffen Joeris ]
+  * Include Czech translation for debconf questions (Closes: #391475)
+    Thanks to Miroslav Kure
+
+ -- Petter Reinholdtsen <pere at debian.org>  Wed,  4 Oct 2006 13:50:48 +0200
+
+debian-edu-config (0.406) unstable; urgency=low
+
+  [ Petter Reinholdtsen ]
+  * Use 'tail -n +3' instead of 'tail +3' in ntp test, to avoid warning.
+  * Make dash test more robust.
+  * Update test to detect missing webmin and report that.
+  * Correct syslog UDP activation code to edit /etc/default/syslogd,
+    not /etc/default/sysklogd.
+  * Fix typo in webmin test script.
+  * Modify testsuite/kde to accept execute bit on /etc/kde3/kioslaverc.
+    No idea why the file is executable, but we only need to check if it is
+    readable for all.
+  * Correct testsuite/webcache to not test a non-proxying connection to
+    squid.  It does not, and should not, work.
+  * Add testsuite/ltsp to detect if the LTSP chroot is installed on
+    the thin client server.
+  * Modify ntp test to check if /etc/default/ntpdate have syntax errors.
+  * Change init.d/update-hostname to use the LSB log functions and to
+    not print anything when VERBOSE=no.  Add depends on lsb-base.
+  * Removed useless chkconfig line from init.d scripts.
+
+  [ Steffen Joeris ]
+  * Mark update-hostname debconf question as internal and fix
+    typo at enable-nat question (Closes: #388062)
+  * Fix typo in update-hostname debconf question to make sure lintian
+    is happy
+  * Change hash commenting for /etc/default/ntpdate file, because
+    current code breaks configuration for main-server(only), because
+    of if-clause
+  * Remove mime-types from cf.mime-support which are already merged into
+    the mime-support package and write bugreport against mime-support
+    for the rest to make sure we can remove cf.mime-support soon
+
+  [ Ronny Aasen ]
+  * Added cf.fstab, purpose is to add /tmp as tmpfs in fstab
+  * Modify dhcp configuration to look for pxelinux.0 in the correct location
+  * ldm fail if Xsession is not executable, edit cf.ltsp to make sure
+    /etx/X11/Xsession is +x
+
+ -- Petter Reinholdtsen <pere at debian.org>  Sun, 24 Sep 2006 17:26:20 +0200
+
+debian-edu-config (0.405) unstable; urgency=low
+
+  [ Patrick Winnertz ]
+  * Removed obsolete alternative dependency on cfengine, because it
+    is going to be removed from debian.
+
+  [ Petter Reinholdtsen ]
+  * Rewrite base-config test to no longer report the missing
+    dbootstrap_settings as an error.  It is not present on etch.
+  * Adjust syslog cfengine rule to enable UDP listening on etch.
+  * Adjust webserver test to accept as a success both either apache2
+    or apache running.
+  * Update debian-edu-ltsp to work with both old and new version of
+    ltsp-server.  Change default dist from sarge to etch, and add
+    new option --dist to make it easier to change it.
+  * New test 'dash' to check that /bin/sh points to dash, not bash.
+  * Remove cfengine rule to set GreetString in kdmrc.  Leave this to
+    debian-edu-artwork.  Use debian-edu-artwork script to enable KDM
+    theme.
+  * Updated LSB header for the init.d scripts.
+
+  [ Steffen Joeris ]
+  * Cleanup the cf scripts and remove cf.shell and cf.webmin entries
+    and adjust the Makefile
+  * Deactivate slbackup configuration part via cfengine for combo servers
+    as it is merged into the installer,
+  * Add dh_link to debian/rules and use it for linking the ldapdump
+    script into the needed slbackup directory and deactivate the
+    generation via cfengine
+    merge it into the installer
+  * Move the enable-nat part for the thin-client-server into the
+    postinst script and deactivate the cf.nat cfengine call
+  * Start the debian-edu-config.prerm script and make sure that the
+    enable-nat init script is called if nat is enabled
+  * Remove the cf.issue file as we don't use it anymore
+  * Change code for enable-nat script to make it compliant with policy
+    and use the code snipplet from dh_installinit
+  * Add debconf template to ask if enable-nat should be activated or not
+    (Closes: #365140)
+  * Start the debian-edu-config.config script for the debconf question
+  * Include code into debian-edu-config.postinst script to avoid starting
+    enable-nat script if debconf boolean is false
+  * Add po-debconf to Build-Depends-Indep as we need it for the debconf
+    templates
+  * Start the po files for the debconf templates
+  * Add code to debian-edu-config.postinst to start the kde kiosk
+    profiles for debian-edu which creates basic configuration for
+    the /etc/kderc and the /etc/kde-user-profile as a mapping file
+
+  [ Ronny Aasen ]
+  * Avoid touching the conffile named.conf of bind9, instead give it the
+    option -c filename in the non conffile /etc/default/bind9
+  * Edit cf.ldapserver and slapd-sarge_debian-edu.conf to try to run
+    slapd as the default openldap user.
+    (Closes Skolelinux Bug #1112)
+  * Fixed wrong dist variable in debian-edu-ltsp, blocked execution
+  * Workaround for a bug in ltsp-build-client.
+  * add --accept-unsigned-package, since our cd is not signed yet.
+  * add a workaround for bug #375077 to avoid the long lookuptimes
+    that occure after the cfengine run edits nsswitch.conf.
+  * PXElinux in etch have changed it needs next-server and
+    root-path options in dhcp now.
+  * incresed editfilesize in cfengine.conf, squid'c config was larger
+    then the previous value.
+  * make debian-edu-pxelinux.cfg use syslinux from the chroot
+  * pxelinux don't like symlinks. copied pxelinux and images instead
+    since hardlinks dont work across devices
+  * added the mandatory nfs export flag for subtree_check or not
+  * remove debian-edu-pxelinux.cfg from cf.ltsp 
+    instead call ltsp-server from debian-edu-ltsp
+
+ -- Petter Reinholdtsen <pere at debian.org>  Sun, 17 Sep 2006 17:13:00 +0200
+
+debian-edu-config (0.404) unstable; urgency=low
+
+  [ Petter Reinholdtsen ]
+  * Remove the cron job bin/filehandle_ctl.sh.  It is no longer needed
+    with linux 2.6 kernels.
+  * Comment out cf.shell, as the same setting can be activated
+    using preseeding now.
+  * Update standards-version from 3.6.2 to 3.7.2.  No change needed.
+  * Add depend on ${misc:Depends} to get a debconf dependency for the
+    hidden debconf question available for preseeding.
+
+  [ Steffen Joeris ]
+  * Change build-depends-indep to build-depends as debhelper is needed
+    during the clean target
+  * Increase debhelper level to 4
+  * Remove obsolete calls for conffiles in Makefile
+  * Cleanup debian/rules to remove the obsolete calls too
+  * Adding md5sum file for package
+  * Change DESTDIR to package name instead of tmp to adjust packaging
+    to current debhelper level
+
+ -- Petter Reinholdtsen <pere at debian.org>  Sun, 20 Aug 2006 23:27:54 +0200
+
+debian-edu-config (0.403) unstable; urgency=low
+
+  [ Steffen Joeris ]
+  * Update sources.list and adjust it for etch as non-US is gone
+  * Remove cf.webmin as webmin is gone
+  * Remove obsolete cf.shorewall
+  * Remove obsolete cf.kdm_hdwarn as kde is doing this check now
+  * Remove obsolete cf.udev as we are configuring the rights
+    for the sound device via pam (Closes: #370350)
+  * Remove obsolete cf.amanda as we are using other backup methods (Closes:
+    #370393)
+  * Fix configuration of squid.conf in cf.squid
+  * Adjust path for dhcpd.conf in cfrunhosts.pl
+  * Adjust Makefile because of removed files
+  * Fix configuration for authldaprc in cf.imap
+
+  [ Frode Jemtland ]
+  * Translated norwegian comment in cfengine.conf to english. Fixed
+    skolelinux bug #1088
+
+  [ Ronny Aasen ]
+  * Removed webmin from ltspserver profile cfengine run.
+
+  [ Bart Cornelis (cobaco) ]
+  * Use desktop-profiles instead of debian-edu specific script to set up the
+    kde-profiles (Fixes skolelinux bug #1005).
+
+  [ Petter Reinholdtsen ]
+  * Correct LSB dependency info in resize_lvm init.d script.
+
+ -- Petter Reinholdtsen <pere at debian.org>  Fri,  4 Aug 2006 19:36:49 +0200
+
+debian-edu-config (0.402) unstable; urgency=low
+
+  [ Petter Reinholdtsen ]
+  * Update the resize_lvm init.d script:
+    - use MiB instead of LVM PE as size unit.
+    - Make sure it is installed in rcS.d/
+    - Make sure it isn't started during install nor upgrade.
+    - Rename variable MOUNTPOINT to DEVNAME to reflect its content.
+    - Use lvextend instead of lvresize to be compatible with LVM 1.x.
+      Thanks to Finn-Arne for this idea.
+    - Do not include the resize_lvm default file in the package, to
+      avoid upgrade problems on installations where it is modified.
+  * Update standards-version from 3.6.1 to 3.6.2.
+
+  [ Finn-Arne Johansen ]
+  * Added resize_lvm init-script
+  * Treat sarge and etch as !woody to simplify scripting with cfengine
+  * Keep the slapd config from sarge (not renaming it to "*-!woody_*")
+  * Added etch templates for sources.list (maybe it's not needed)
+
+ -- Petter Reinholdtsen <pere at debian.org>  Wed, 19 Apr 2006 22:50:02 +0200
+
+debian-edu-config (0.401) unstable; urgency=low
+
+  [ Petter Reinholdtsen ]
+  * Fix syntax error in boot_xconf.  (Closes: #343457)
+  * Achnowledge old upload. (Closes: #301565)
+  * Modified the ltsp-make-client script used for building diskless
+    workstations:
+    - Modify code to rename rc#.d symlinks instead of removing them,
+      to avoid them to reappear after an upgrade.
+    - Reinsert init.d scripts ifupdown and networking when building
+      diskless workstation, to make sure the loopback network interface is
+      enabled.
+    - Make sure to only update /etc/exports once when executing
+      ltsp-make-client several times.
+    - Move network interface name into variable to make it easier to
+      change.
+    - Use the apt location of ltsp-server instead of ltsp-client to
+      detect the apt source to use, as the latter might not be
+      installed nor available on the server.
+    - Add /opt/ltsp instead of /opt/ltsp/i386 to /etc/exports, to be
+      compatible with the update done by the ltsp package itself.
+  * Add dependency on host to make sure init.d/update-hostname work.
+
+ -- Petter Reinholdtsen <pere at debian.org>  Thu, 23 Mar 2006 13:08:44 +0100
+
+debian-edu-config (0.400) unstable; urgency=low
+
+  [ Patrick Winnertz ]
+  * Changed symlink of /bin/sh from /bin/ash to /bin/dash
+  * Added shellcommands section in cf.shell in order to invoke dpkg-divert
+    --add /bin/sh (Closes Skolelinux Bug #1041)
+
+  [ Benjamin Sonntag ]
+  * Added manpages for some binaries in this package. Also added a mechanism
+    in Makefile so that /bin /sbin and ldapprograms manpages are autodetected
+    and installed too.
+  * Added file for backdoor in /etc/default (still disabled by default, but
+    useful to know how to fill it)
+  * Added documentation in README file for samba ssh and apache.
+  * Corrected lintian warning on xboot_conf not having restart and
+    reload cases.
+  * Added CFBINFILES to Makefile so that cfd and cfrunhosts.pl are now
+    executables.
+
+  [ Steffen Joeris ]
+    * Distribution umask only in /etc/profile
+        (Closes Skolelinux Bug #996)
+    * Disable connection settings in courier-imap
+      so that the cf.imap is running and the
+      courier-imap is not running by default
+      (Closes Skolelinux Bug #998)
+    * change ntp-configuration to not use pool.ntp.org
+      and let the clients search for ntp.intern
+      (Closes Skolelinux Bug #1024)
+    * Dropping kmail preconfiguration
+      (Closes Skolelinux Bug #550 and #1017)
+    * Also remove conffiles for kmail from
+      /usr/share/debian-edu/* and update Makefile
+    * still providing sound permission changes for devfs if someone
+      still uses kernel24
+    * update Makefile for cf.udev
+
+  [ Henning Sprang ]
+  * Now configuring NTP with cfengine (cf/cf.ntp).
+    (Closes Skolelinux bug #1024)
+
+  [ Bjorn Ove Grotan ]
+  * Fixed typo in tools/jrpasswd
+
+  [ Ragnar Wisloff ]
+  * Added example of settings for serial mouse to lts.conf. Fixes #584.
+
+  [ Finn-Arne Johansen ]
+  * Fixed typo in when creating pxelinux config for old ltsp
+  * Added permissions to set timestamps when passwords was changed
+  * Display menu for pxebooting devices if more than one netbooting
+    solution is installed
+  * Set PATH for ldapdump.sh to properly stop/start slapd.
+    (Closes Skolelinux bug #1000)
+  * Cleaned up the dependencies of debian-edu-config, only include the
+    necesarry packages for installing this package.
+  * added HOST variable for talking to the ldap-server
+  * Set the correct permission on samba passwords.
+    (Closes Skolelinux bug #1007)
+  * Added support for doing a netbased installation of ltsp in debian-edu
+  * Added support for installing ltsp in another location than /opt/ltsp/i386
+  * Extended/rewritten script for creating diskless/stateless workstations
+  * Split up the configuration of courier imap, should close
+    skolelinux bug #998
+  * Added dependency to ng-utils (should close Skolelinux bug #1033)
+  * Stopped imap from running on a unencrypted port
+  * Removed positive test for imap2 (unencrypted port)
+    (closes Skolelinux #1038)
+  * Added commented out cfengine code to set up access to local devices
+    when logged in via kdm on non-server
+    (alternativ fix for Skolelinux #974)
+  * Added sample definition for shared folder in samba
+  * Added sample config for usbmount
+  * Added sample config for pam_mount on stateless clients
+  * Added script for making stateless workstations to the package,
+    should be ready for testing
+  * Added workaround for missing background.png in ltsp-themes
+    (Skolelinux #1035)
+  * Set up mozilla-firefox to use kprinter and A4 as default. Thanks to
+    Klaus Ade Johnstad for finding the bug (and the solution)
+    (Closes Skolelinux #1042)
+  * use pam_group instead of manipulating the devices to get access to
+    local devices
+  * ldap-debian-edu-install needs to use bash for now
+  * Dont test for a running squid on a thin-client-server. Thanks to
+    Ole-Anders Andreassen for finding this bug (Closes Skoleliux #1054)
+  * Add support for detecting Arch in debian-edu-ltsp
+    (Closes Skolelinux #1055)
+  * Modified slapd-sarge-debian-edu.conf to allow jradmins to change
+    passwords, and admins to add user
+  * Dont use bash on diskless workstation, since it breaks
+    ltsp-client-setup (Closes Skolelinux #1059)
+  * Removed extra "-e" in ltsp-make-client breaking dhcpd.conf
+    (Closes Skolelinux #1060)
+  * No need to allow users to read their own encrypted samba password
+  * Need to allow samba root to update nextID, and to search the samba
+    Attributes (Closes Skolelinux #1061)
+  * Define wins server in dhcp, to allow windows clients to resolv the
+    samba domain (Closes Skolelinux #1067)
+
+  [ Patrice Neff ]
+  * Added support for using cfengine server
+  * Enabled configuration of the sysstat system
+  * Cleaned up the test for squid
+  * Cleaned up test for XFS
+  * Included libnet-ldap-perl required by some of the ldap-tools
+  * Added a Spanish translation of the index page at var/www/index.html.es
+  * Allow port 10000 in Squid configuration (so that Webmin is accessible)
+
+  [ Morten Werner Olsen ]
+  * Removing /etc/skel/.kde/share/config from debian/dirs.
+  * Removing all references to /etc/default/ntp-servers (isn't owned by
+    any packages).
+  * Cleaning up cf/cf.ntp and commenting out all references to
+    pool.ntp.org and using 127.127.1.0 as default for main-server (as
+    NTP will understand that is using the local clock as reference).
+  * Fix /etc/default/ntpdate for non-Main-server's (point to ntp).
+  * Fixing Finn-Arne's email-address in the 0.397 changelog entry
+    (prevents lintian-error).
+  * Disabling the xfree-test that assume that xfree86 is started.
+  * Disabling the kdm-tests that assumes that kdm is started.
+  * Now defaulting to not sending any Nagios-mails.
+  * Change my email-address in the Uploaders-field. :)
+
+  [ Andreas Schuldei ]
+  * making slapd use ipv4 only in cf.ldapserver (for uml testframework, where
+    long timeouts occure when probing for ipv6 stuff)
+
+  [ Frode Jemtland ]
+  * Found a updated version of debian-edu-config/bin/debian-edu-ltsp in one of
+    my test servers. This seemd to me to be a improvment to get disk less
+    workstations to work, with ltsp. Probably need more files from this
+    installation to get it to work
+  * Updated the index.html.en and index.html.de with a plea to install the
+    popcon package
+  * Added a German var/www/index.html.de by Ralf Gesellensetter
+  * Updated rest of the index files to have a link to the German translation
+  * Changed special norwegian characters to html codes
+
+  [ Bart Cornelis (cobaco) ]
+  * Added var/www/index.html.nl with a Dutch translation of the default page.
+  * Updated the other index.html pages to have a link to the Dutch version
+  * Added dutch index.html in the Makefile script
+
+ -- Morten Werner Olsen <werner at debian.org>  Sat,  4 Mar 2006 19:33:13 +0100
+ 
+
+debian-edu-config (0.399) unstable; urgency=low
+
+  [ Bjorn Ove Grotan ]
+  * Added administrative password-change utility (tools/jrpasswd)
+
+  [ Morten Werner Olsen ]
+  * Added LDAP-database dump script (tools/ldapdump.sh)
+  * Added etc/slbackup/pre.d to debian/dirs
+  * Added a cfengine-hook that symlinks the tools/ldapdump.sh into
+    /etc/slbackup/pre.d/ (fixes debian-edu bug #923)
+  * Fixed the permissions on the config-file (pxelinux.cfg/config) for
+    PXE-booting.
+  * Updated cf/cf.kdm to get a little bit more interesting background for
+    the login-screen.
+  * Added myself as uploader.
+  * Deliver mail to root as the mail-user (not root). This prevented mail
+    for root to be delivered.
+
+  [ Petter Reinholdtsen ]
+  * Fix typo in testsuite/webcache, using correct argument to find.
+  * Close stdin/stdout when restarting the wlan to avoid hanging on
+    first time installs.
+  * Add LSB init.d headers to document boot time dependencies.
+  * Use new script debian-edu-ltsp to build LTSP environment
+    using the new LTSP debian packages.
+  * Make sure missing sound card don't give a warning dialog box.
+  * Make sure testsuite/php is no longer used.  We do not
+    install PHP any more.
+  * Only run testsuite/{ldap-server,webmin,webserver} on Main-Server
+    installs.
+  * Only run testsuite/{ldap-client,ntp,webcache} on Main-Server,
+    Workstation and Thin-Client-Server installs.
+  * Only run testsuite/dhcpd on Main-Server and Thin-Client-Server
+    installs.
+  * Only report missing kdm and X server as information when running
+    the testsuite, as these are started after this point in the
+    installation sequence.
+  * Start on script ltsp-make-client to convert a LTSP thin client
+    chroot to a more complete client installation.
+
+  [ Maximilian Wilhelm ]
+  * Added exim4 LDAP configuration for server and client
+    (Closes: #276769)
+
+  [ Finn-Arne Johansen ]
+  * Added firefox proxy, cache and printer config
+  * Fixed detection of 2.4-kernel
+  * Included the munin cfengine script, and fixed the munin script
+  * Made cfengine-debian-edu work with both cfengine and cfengine2
+  * Better detection of group "installation"
+  * Replaced all occurences in chengine of "installasjon" with
+    "installation"
+  * Disabled FifoDir for kdm on non-standalone, to prevent shutdown from
+    a logged in session
+  * Disabled shutdown from non-local display for kdm (fixes debian-edu
+    bug #949)
+  * Updateded /etc/samba/slapaddclient.pl because tdbdump is relocated
+  * Set up automounting via ldap
+  * Disabled listing of hashed password to unauthenticated users
+    (fixes debian-edu bug #945)
+  * Gave smbadmin access to the Machine Subtree (fixes debian-edu bug #950)
+  * Installation script for lessdisks thin client is availible, but does
+    not run by default
+  * Set up ldap users on lessdisks clients
+  * Set a more suited certificate for the postoffice (Closes: #301288)
+  * Fixed Typo preventing hidden home dir mounting from Windows server
+    Thanks to Bernt Johnsen AFK for discovering
+  * Close debconf fd before init-script runs, prevents initscripts
+    from runing cleanly (Fixes debian-edu bug: #301565)
+  * Made nightkill a bit more quiet
+  * Made debian-edu-config Replace,Conflict and Provide ncs
+    (fixes debian-edu bug #975)
+  * Fixed missing translation from installasjon -> installation in cf.cups
+    (Fixes debian-edu bug: #967)
+  * Disabled ldap idletimeout, since kdm fails to set up a new connection
+  * tftpboot files are moved from /tftpboot into /var/lib/tftpboot,
+    rewritten dhcpd.conf, and added script debian-edu-pxelinux.cfg to
+    help maintain pxelinux.cfg/default (Partly closes: #905)
+  * Fixed typo in tools/ldapdump.sh to remove error-message
+  * Added support for using /usr/share/d-e-c/tools/passwd as non-root user
+  * Fixed permission on samba passwords for ldap
+
+  [ Ragnar Wisloff ]
+  * Corrected cfengine edit line for USE_XFS in cf.ltsp to make LTSP
+  * Changed permissions on /etc/skel/.kde/share/config/kmailrc to make
+    only user readable. (Fixes debian-edu bug #887)
+  * Added cf.sysstat which enables the sysstat system
+  * Added Nagios config files and amended cf.nagios to fit. (Fixes
+    debian-edu bug #953 and #954).
+  * Fixed missing logos from NAgios package.
+  * Added UserDir config to cf.apache. Fixes debian-edu bug #639.
+
+  [ Frode Jemtland ]
+  * Corrected errors about php4 in cf.apache
+  * Updated information about ServerAdmin in cf.apache
+  * Added language support for nb, no and nn in cf.apache
+  * Commented out mime type nb in cf.apache
+  * Fixes skolelinux bug: #938 and #864
+  * Added files to /var/www: index.html.nb, index.html.en,
+    logo-trans.png, skl-ren_css.css. Fixes debian-edu bug: #942.
+  * Fixed typos in html files.
+
+  [ Andreas Schuldei ]
+  * extending ldap-debian-edu-install to deal with cases where /etc/shadow
+    does not exist (for uml test installations)
+
+ -- Petter Reinholdtsen <pere at debian.org>  Sun, 11 Dec 2005 21:00:32 +0100
+
+debian-edu-config (0.398) unstable; urgency=low
+
+  * Finn-Arne Johansen
+    - Added common-auth|account|passwd-ldap-debian-edu for ldap
+      authentication, Tried to enable it for Sarge only
+      (Closes: #275031).
+    - Added detection of sarge in lessdisks-chroot.
+    - Added conf-files for winbind/ads authentication, with dummy variables
+    - Added pam_env to common session to support /etc/environment
+    - better detection of woody/sarge
+    - fixed kdm to not show userlist on sarge (Closes: #294048)
+    - fixed kdm to allow root logins on server console (Closes: #294047)
+    - moved dbootstrap_settings on sarge, to prevent cfengine from detect a
+      clean installation if run again
+    - Remove custom Xsession, to get kdm to honour
+      /etc/alternatives/x-session-manager
+    - Rewrite of debian-edu-restart-services
+    - Added test for samba to debian-edu-test-install
+    - Make sure ldap is stopped during ldap-debian-edu-install
+    - Added new imapd.pem for courier-imap-ssl certificate
+    - fixed some ACL stuff in ldap-schema/lis.schema to make it work
+    - Disabled devfsd for 2.6 kernels (use udev instead)
+    - changed slapd-debian-edu.conf -> slapd-sarge_debian-edu.conf to
+      support slapd 2.2
+    - Moved skript for setting up X in lessdisks ws at boot from d-e-install
+      (also updated)
+    - Replaced cfengine with cfengine2
+    - sett correct path to cfagent
+  * Bart Cornelis
+    - Set up proxy + kmail when inside a debian-edu network.
+  * Petter Reinholdtsen
+    - Get PCI reporting working in Sarge.
+  * Bjørn Ove Grøtan
+    - Updated norEduPerson.schema
+  * Andreas Schuldei
+    - add writeableBy for ACL usage to ldap-schema/lis.schema
+
+ -- Andreas Schuldei <andreas at debian.org>  Sat,  4 Jun 2005 21:36:07 +0200
+
+debian-edu-config (0.397) unstable; urgency=high
+
+  * Andreas Schuldei
+    - added afs entries to the named zone files
+  * Finn-Arne Johansen
+    - Changed samba into using tls instead of ldaps
+    - Changed test for services in inetd.conf, not lines containing the
+      name of service (Closes: #288912)
+  * Klaus Ade Johnstad
+    -Removed a space, to avoid errormessage "bad substitution"
+     when running /usr/bin/debian-edu-hd-warn
+
+ -- Finn-Arne Johansen <finnarne at bzz.no>  Thu,  6 Jan 2005 11:48:33 +0100
+
+debian-edu-config (0.396) unstable; urgency=low
+
+  * Correct code to make sure /etc/kde[23]/kioslaverc.  It need to
+    create the file if it missing, as the 'files' section is executed
+    before the 'shellcommands' section.
+  * Remove share/debian-edu/common/share/config/kioslaverc.  Not all
+    profiles uses a proxy (standalone does not), so KDE should not
+    always use a proxy.
+  * Move editing of /etc/ldap/ldap.conf from cf.ldapclient to
+    cf.ldapserver where it belongs, and where it can be part of the
+    cfengine rules already editing the file.
+  * Do the same editing of /etc/ldap/ldap.conf in woody and sarge, as
+    the rules were similar enough, and seem to differ only for
+    historical reasons.
+
+ -- Petter Reinholdtsen <pere at debian.org>  Sat, 23 Oct 2004 20:43:23 +0200
+
+debian-edu-config (0.395) unstable; urgency=low
+
+  * Finn-Arne Johansen
+    - Set Thin client nfs-access to be async
+    - Added, but deactivated code to set nscd cache size
+    - Updated ldap initialisation to set up group mapping from unix
+      group admins to samba group "Domain Admins" (fixes skolelinux
+      bug #812)
+    - Updated format for slapd.conf to specify both ldap and ldaps as
+      service
+    - Added pointer to certificate file on sarge server install
+    - Set ldap clients to never check certificate
+    - Updated samba.schema to support sambaPasswordHistory
+    - Added test for squid spool dir ownership
+    - Added host definition for ldap-clients
+  * Klaus Ade Johnstad
+    - Added some more host-templates in dhcpd-debian-edu.conf,
+      and some space between the lines, to avoid some gruff
+      in the comment fields in webmin-dhcp.
+  * Petter Reinholdtsen
+    - Add test to detect errors with /etc/kde[23]/kioslaverc.
+    - Make sure /etc/kde[23]/kioslaverc is readable by all.
+  * Maximilian Wilhelm
+    - Complete rewrite of /etc/group to LDAP migration script.
+
+ -- Joey Hess <joeyh at debian.org>  Tue,  5 Oct 2004 16:29:20 -0400
+
+debian-edu-config (0.394) unstable; urgency=low
+
+  * Finn-Arne Johansen
+    - Fixed bashism in detection of workstation profile in cfengine.conf
+    - Added slapdconfig for sarge (bdb backend, commented out for now)
+    - Changed ldap-bootstrap script to support exim4, and nonexisting samba
+    - Added support for sarge in cfengine.conf
+    - Fixed squid config for sarge
+    - Fixed slapd Database setup for sarge
+    - Changed detection of ltspserver profile
+  * Petter Reinholdtsen
+    - Correct xfree86 test.  It should no longer report errors on
+      Main-server installs.
+    - Enable postinst code to handle debconf preseeding for
+      init.d/update-hostname.  It is now working as it should.
+    - Document some problems with init.d/open-backdoor.
+    - Make sure open-backdoor print a message when it is enabled.
+  * Maximilian Wilhelm
+    - Added ldap base dn to client config
+    - Added CNAME kerberos for tjener to db.intern
+    - Localized debian-edu-hd-warn correctly and added chech if X is running
+
+ -- Petter Reinholdtsen <pere at debian.org>  Sun,  8 Aug 2004 13:28:30 +0200
+
+debian-edu-config (0.393) unstable; urgency=low
+
+  * Andreas Schuldei
+    - Remove unnecessary and wrong lines from the autofs.ldif. objectclasses
+      OU and automoutMap can not be in the same ldap entry, with stricter
+      checking as in openldap 2.1.X.
+  * Finn-Arne Johansen
+    - Remove path from temporary filename for ldap-user-clean-attic.sh.
+      (Fixes skolelinux bug #786)
+  * Petter Reinholdtsen
+    - Add debconf template install rule.
+    - Add quotes (") around the value stored in
+      /etc/default/update-hostname to make sure it is a valid sh-script
+      even if the value is junk.
+
+ -- Petter Reinholdtsen <pere at debian.org>  Thu, 17 Jun 2004 10:16:04 +0200
+
+debian-edu-config (0.392) woody; urgency=low
+
+  * Petter Reinholdtsen
+    - Change xfree86 test to only warn if X isn't running.  X is
+      started after the test is executed, so it isn't really an error.
+    - Make it possible to configure init.d/update-hostname at install
+      time using an hidden debconf value.
+    - Restart bind before ntpd, as ntpd need to look up 'ntp' in DNS.
+  * Finn-Arne Johansen
+    - Added ldap-user-clean-attic.sh to the command line ldap tools
+    - Changed number of imap clients allowd to connect from same host
+      (closes: #459)
+
+ -- Petter Reinholdtsen <pere at debian.org>  Mon, 14 Jun 2004 09:27:02 +0200
+
+debian-edu-config (0.391) woody; urgency=low
+
+  * Finn-Arne Johansen
+    - Improved a workaround for bug #286 in skolelinux, #156332 in debian
+      to ensure that the dhcp server is restartable after installation
+
+ -- Petter Reinholdtsen <pere at debian.org>  Sat, 12 Jun 2004 22:06:24 +0200
+
+debian-edu-config (0.390) woody; urgency=low
+
+  * Petter Reinholdtsen
+    - Only test XFree86, kdm and xfs if it is supposed to
+      be installed (!Main-Server).
+    - Insert code in debian-edu-restart-services to force dhcpd
+      restart as a workaround for skolelinux bug #286.  Not sure if it
+      works, but it is better to have this code here instead of in
+      debian-edu-install.
+    - Add test to check if host 'ldap', 'ntp', 'syslog' and 'webcache'
+      is reachable.
+    - Started in README on highlevel description of the configuration
+      changes done.
+
+ -- Petter Reinholdtsen <pere at debian.org>  Fri, 11 Jun 2004 00:04:30 +0200
+
+debian-edu-config (0.389) unstable; urgency=low
+
+  * Finn-Arne Johansen
+    - Fetch sambasid for PDC instead of domain.
+  * Petter Reinholdtsen
+    - Rewrote samba-debian-edu-admin script to make timeout length a
+      variable, and to fetch hostname short form only once.
+    - Remove trailing space from line ends and the
+      samba-debian-edu-admin file.
+
+ -- Petter Reinholdtsen <pere at debian.org>  Thu,  3 Jun 2004 18:07:44 -0300
+
+debian-edu-config (0.388) unstable; urgency=low
+
+  * Finn-Arne Johansen
+    - Set smaller cache size for mozilla
+    - Fixed type and missing entries in mozilla proxy settings
+
+ -- Petter Reinholdtsen <pere at debian.org>  Mon, 31 May 2004 01:53:18 -0300
+
+debian-edu-config (0.387) unstable; urgency=low
+
+  * Finn-Arne Johansen
+    - Fixed some missing samba objects to the ldap tree.
+    - Changed procedure to fetch sambaSID.
+    - Updated Makefile to include cf.mozilla.
+    - Tries to take up the network interface before fetching sambaSID.
+    - Changed samba-debian-edu-admin to ensure that sambaSID is
+      availible when needed.
+    - Disabled samba password change.
+    - Disabled samba root access to shared resources.
+    - Added sample entry for assigning static ip to workstations,
+      (fixes SL #750).
+
+ -- Petter Reinholdtsen <pere at debian.org>  Fri, 28 May 2004 14:36:35 -0300
+
+debian-edu-config (0.386) unstable; urgency=medium
+
+  * Finn-Arne Johansen
+      - Updated slapd.conf to limit the write access of smbadmin
+
+ -- Petter Reinholdtsen <pere at debian.org>  Fri, 21 May 2004 23:36:04 +0200
+
+debian-edu-config (0.385) unstable; urgency=medium
+
+  * Petter Reinholdtsen
+    - Change webmin test to check the config file before checking if
+      the server is listening to the correct port.  Also changed it to
+      not die on the first error, but to do all checks before setting
+      the return code.
+  * Finn-Arne Johansen
+    - Changed DHCP lease time.
+    - Moved samba clients to a subtree under ou=People.
+  * Andreas Schuldei
+    - Make the retrival of the machine group dynamic in
+      etc/samba/smbaddclient.pl.
+
+ -- Petter Reinholdtsen <pere at debian.org>  Thu, 20 May 2004 22:28:22 +0200
+
+debian-edu-config (0.384) unstable; urgency=low
+
+  * Finn-Arne Johansen
+    - Changed config of samba, and rewritten smbaddclient.pl script to
+      ease the adding of NT clients.
+    - Removed nss_base_passwd from libnss-ldap.conf to allow use of
+      ou=machines for samba clients.
+    - Added config for mozilla to use webcache, and kprinter.
+  * Petter Reinholdtsen
+    - Reinsert nss_base_passwd into libnss-ldap.conf, as it might have
+      unwanted side effects, like removed users and machines showing
+      up as existing users.
+    - Add test for webmin allow line in /etc/webmin/miniserv.conf.
+
+ -- Petter Reinholdtsen <pere at debian.org>  Sat, 15 May 2004 19:44:45 +0200
+
+debian-edu-config (0.383) unstable; urgency=low
+
+  * adding organisational unit Machines to root.ldif for samba.
+
+ -- Andreas Schuldei <andreas at debian.org>  Wed,  5 May 2004 21:38:39 +0200
+
+debian-edu-config (0.382) unstable; urgency=low
+
+  * Finn-Arne Johansen
+    - Added missing samba-debian-edu-install script
+  * Andreas Schuldei
+    - performance tuning for slapd: adding some indices and keeping the db in
+      RAM
+
+ -- Andreas Schuldei <andreas at debian.org>  Wed, 28 Apr 2004 19:12:41 +0200
+
+debian-edu-config (0.381) unstable; urgency=low
+
+  * Finn-Arne Johansen
+    - Added config for samba 3.0
+  * Petter Reinholdtsen
+    - Only create samba LDAP config on first time install.
+
+ -- Andreas Schuldei <andreas at debian.org>  Wed, 28 Apr 2004 17:27:13 +0200
+
+debian-edu-config (0.380) unstable; urgency=low
+
+  * Petter Reinholdtsen
+    - Fix typo in cf.webmin.  The file is called /etc/webmin/config,
+      not /etc/webmin/config.conf.
+    - Add cfengine rule in cf.webmin to rewrite
+      /etc/webmin/dhcpd/config to use dhcp version 3 instead of
+      version 2. (Fixes skolelinux bug #666)
+    - Renamed every file using 'skolelinux' prefix and postfix, to
+      using 'debian-edu' instead.  Added compatibility wrapper scripts
+      to avoid breaking installation while changing.  This will break
+      existing installations, but is needed to be done before we
+      stabilise for consistency.
+
+ -- Petter Reinholdtsen <pere at debian.org>  Mon, 26 Apr 2004 20:09:52 +0200
+
+debian-edu-config (0.379) unstable; urgency=low
+
+  * Remove cf.mkinitrd from the include list in cfengine.conf too.
+
+ -- Petter Reinholdtsen <pere at debian.org>  Fri, 23 Apr 2004 23:30:09 +0200
+
+debian-edu-config (0.378) unstable; urgency=low
+
+  * Klaus Ade Johnstad
+    - Changed the warning/explanation in 10skolelinux-one-login-per-host
+      from Norwegian into English.
+  * Petter Reinholdtsen
+    - Changed webmin configuration to use PAM for authentication,
+      removing the need to keep a separate user database in webmin.
+
+ -- Petter Reinholdtsen <pere at debian.org>  Fri, 23 Apr 2004 00:06:47 +0200
+
+debian-edu-config (0.377) unstable; urgency=low
+
+  * Petter Reinholdtsen
+    - Add test taskpkgs to check if the correct task packages are
+      installed.
+  * Klaus Ade Johnstad
+    - Added the special forwarders need for Skoleetaten i Oslo, in
+      named-bind9.conf
+    - Added the correct path to the dhcp3 script, in
+      dhcpd-skolelinux.conf
+
+ -- Petter Reinholdtsen <pere at debian.org>  Tue, 20 Apr 2004 00:07:37 +0200
+
+debian-edu-config (0.376) unstable; urgency=low
+
+  * Petter Reinholdtsen
+    - Do not edit /usr/X11R6/lib/X11/xkb/rules/xfree86.lst any more,
+      as we are using XFree86 4.2 now, and the changes are already there.
+    - Rewrite edit rule for xfree86.lst in cf.locales to insert the same
+      text as is used in XFree86 4.2.
+    - Remove cf.mkinitrd, as DELAY=0 is the default in debian-installer.
+    - Remove edit rule for /etc/network/interfaces from cf.ldap, as this
+      file is updated correctly by debian-edu-profile-udeb in d-i now.
+    - Modify update-ini-file to add a section if the ini-file only consist
+      of comments.  (Skolelinux bug #633)
+
+ -- Petter Reinholdtsen <pere at debian.org>  Thu, 15 Apr 2004 00:09:12 +0200
+
+debian-edu-config (0.375) unstable; urgency=low
+
+  * Andreas Schuldei
+    - Renamed the 'guest' group to 'none' and the 'jnadmin' group
+      to 'jradmin' in root.ldif.
+    - Adding an attic OU for deleted users, and added an attic
+      capability flag in root.ldif.
+  * Petter Reinholdtsen
+    - Add missing newline at the end of ldap-bootstrap/root.ldif.
+
+ -- Petter Reinholdtsen <pere at debian.org>  Wed, 14 Apr 2004 10:00:19 +0200
+
+debian-edu-config (0.374) unstable; urgency=low
+
+  * Petter Reinholdtsen
+    - Report output from rpcinfo -p when testing the network status.
+  * Andreas Schuldei
+    - Adding a default class to root.ldif, removing the generic age
+      group.
+  * Finn-Arne Johansen
+    - Modified password script to allow changing of admin password.
+      (fixes skolelinux #236)
+  * Ragnar Wisloff
+    - Added nagios to list of services to restart.
+
+ -- Petter Reinholdtsen <pere at debian.org>  Thu,  1 Apr 2004 22:34:09 +0200
+
+debian-edu-config (0.373) unstable; urgency=low
+
+  * Petter Reinholdtse
+    - Change /etc/exports rule for /skole/tjener/home0 to only
+      export to selected host netgroups by default.
+  * Bjørn Ove Grøtan
+    - Commented out indexing of eduPerson-related parts in slapd.conf
+      since we're not using EduPerson.schema yet.
+
+ -- Petter Reinholdtsen <pere at debian.org>  Tue, 30 Mar 2004 23:31:31 +0200
+
+debian-edu-config (0.372) unstable; urgency=low
+
+  * Petter Reinholdtsen
+    - Improve the mail content sent from init.d/report-reboot.
+    - Avoid restarting init.d/report-reboot on installs and
+      upgrades. (Closes: #240776)
+    - Do not use EduPerson.schema yet.
+    - Make sure debian-edu-mailcap is installed without execute bit.
+  * Ragnar Wisloff
+    - Fixed typos in cf.nagios
+
+ -- Petter Reinholdtsen <pere at debian.org>  Mon, 29 Mar 2004 21:35:47 +0200
+
+debian-edu-config (0.371) unstable; urgency=low
+
+  * Bjørn Ove Grøtan
+    - Add norEduPerson.schema to the package.
+  * Petter Reinholdtsen
+    - Make sure to install EduPerson.schema and norEduPerson.schema,
+      to get slapd to start. (Fixes Skolelinux bug #664)
+    - Make sure newly added scripts in /usr/share/ are installed
+      with execute bit.
+    - Make sure /etc/init.d/report-reboot is a conffile.
+
+ -- Petter Reinholdtsen <pere at debian.org>  Sun, 28 Mar 2004 22:50:44 +0200
+
+debian-edu-config (0.370) unstable; urgency=low
+
+  * Finn-Arne Johansen
+    - Adding script to change users password in ldap (also samba)
+    - Moved nice to have script from /usr/sbin/ into /usr/share...
+    - Added code to set umask when logging in with kdm
+    - Added the script located in share into the Makefile
+  * Petter Reinholdtsen
+    - Updated testsuite/dhcpd to check dhcpd version 3.
+
+ -- Petter Reinholdtsen <pere at debian.org>  Sat, 27 Mar 2004 16:57:14 +0100
+
+debian-edu-config (0.369) unstable; urgency=low
+
+  * Bjørn Ove Grøtan
+    - adding ACL for smbadmin and performance tuning
+  * Petter Reinholdtsen
+    - Add workaround for apache problem in skolelinux-restart-services.
+      This should make sure the missing apache parent process is
+      worked around.  (Skolelinux bug #636)
+  * Ragnar Wisloff
+    - Changed cf.nagios to use forced symlinks
+
+ -- Petter Reinholdtsen <pere at debian.org>  Sat, 27 Mar 2004 11:58:23 +0100
+
+debian-edu-config (0.368) unstable; urgency=low
+
+  * Petter Reinholdtsen
+    - Add new init.d script report-reboot, which can send
+      an email when a server boots.
+    - Implement 'status' argument to init.d/open-backdoor,
+      reporting if the SSH backdoor is running or not.
+    - Add Finn-Arne Johansen as uploader.
+    - Remove all '.#*' files in clean target, to make sure this
+      cruft do not make it into the source package.
+
+ -- Petter Reinholdtsen <pere at debian.org>  Mon, 15 Mar 2004 22:19:29 +0100
+
+debian-edu-config (0.367) unstable; urgency=low
+
+  * Replaced dhcp with dhcp3-server in skolelinux-restart-services, should fix
+    #286 and #421
+
+ -- Finn-Arne Johansen <faj at bzz.no>  Thu,  4 Mar 2004 20:50:19 +0100
+
+debian-edu-config (0.366) unstable; urgency=low
+
+  * Fixed config for dhcp3
+
+ -- Finn-Arne Johansen <faj at bzz.no>  Wed,  3 Mar 2004 22:27:21 +0100
+
+debian-edu-config (0.365) unstable; urgency=low
+
+  * changed distribution from UNRELEASED to unstable
+
+ -- Andreas Schuldei <andreas at debian.org>  Wed,  3 Mar 2004 17:15:44 +0100
+
+debian-edu-config (0.364) unstable; urgency=low
+
+  * Rune Nordbøe Skillingstad
+    - Package now conflicts debian-edu-install <= 0.616. (Closes: #235734)
+  * Petter Reinholdtsen
+    - Restart autofs at the end of the install, to make sure the new
+      configuration is used.
+
+ -- Rune Nordbøe Skillingstad <runesk at linpro.no>  Tue,  2 Mar 2004 09:20:24 +0100
+
+debian-edu-config (0.363) unstable; urgency=low
+
+  * Finn-Arne Johansen
+    - Added /etc/mailcap
+    - Added /etc/dhcp3/dhcp-skolelinux.conf
+  * Petter Reinholdtsen
+    - Make sure to include cf.nagios in the package.
+    - Removed cf.modules as it is unused now.
+    - Add missing quote character in cf.apache. (Closes: #235537)
+  * Rune Nordbøe Skillingstad
+    - Restart nscd
+    - Fixed bug: /etc/dhcp3 was not created in install in Makefile
+    - Moved /etc/mailcap to /lib/mime/packages/debian-edu-mailcap and using
+      update-mime in postinst script
+    - Package now depends on mime-support.
+
+ -- Petter Reinholdtsen <pere at debian.org>  Mon,  1 Mar 2004 17:28:06 +0100
+
+debian-edu-config (0.362) unstable; urgency=low
+
+  * Ragnar Wisløff
+    - Added cf.nagios and changes to cfengine.conf to include cf.nagios
+  * Rune Nordbøe Skillingstad
+    - Moved mime.types from cf.apache to cf.mime-support
+    - Added rewriting of apache to cf.apache
+
+ -- Petter Reinholdtsen <pere at debian.org>  Sun, 29 Feb 2004 17:06:43 +0100
+
+debian-edu-config (0.361) unstable; urgency=low
+
+  * Rune Nordbøe Skillingstad
+    - Fixed wrong loggin in bind9 configuration
+    - Moved restarting of services from cf-files to
+      skolelinux-restart-services
+    - Moved skolelinux-test-install and skolelinux-restart-services
+      here from debian-edu-install
+    - No more initializing of LDAP if data exists
+  * Ragnar Wisløff
+    - Changed default kernel for thin clients to PXE
+
+ -- Petter Reinholdtsen <pere at debian.org>  Sun, 29 Feb 2004 15:42:13 +0100
+
+debian-edu-config (0.360) unstable; urgency=low
+
+  * Alex Brasetvik
+    - New netgroups infrastructure.
+  * Petter Reinholdtsen
+    - Get rid of warning message if the user isn't allowed access to
+      the sound device (artsmessagerc) and dialog box on initial login
+      asking about default configuration (kpersonalizerrc).
+    - Avoid confusing users about the disabled ssh tunneling
+      script. (Closes: #233174)
+  * Rune Nordbøe Skillingstad
+    - Added ltsp network in acl for squid
+    - Changed to use bind9
+
+ -- Petter Reinholdtsen <pere at debian.org>  Sat, 28 Feb 2004 17:42:09 +0100
+
+debian-edu-config (0.359) unstable; urgency=low
+
+  * Make sure /etc/default/update-hostname is created when needed.
+  * Move named configuration from /etc/bind/ to /etc/bind/debian-edu/,
+    to reduce the chance of a name conflict with existing zone
+    files.  (Closes: #232805)
+
+ -- Petter Reinholdtsen <pere at debian.org>  Sun, 15 Feb 2004 15:43:26 +0100
+
+debian-edu-config (0.358) unstable; urgency=low
+
+  * Petter Reinholdtsen
+    - Convert init.d/start-wlan to POSIX sh notation.
+    - Make sure init.d/update-hostname is enabled for all profiles
+      except the main-server profile.
+  * Bart Cornelis
+    - Changed occurences of devel at skolelinux.no to debian-edu at l.d.o
+      everywhere.
+  * Finn-Arne Johansen
+    - Include sbin/logoutkill.sh and sbin/nightkill.sh in
+      the package.
+
+ -- Petter Reinholdtsen <pere at debian.org>  Sun, 15 Feb 2004 11:18:37 +0100
+
+debian-edu-config (0.357) unstable; urgency=low
+
+  * Make sure it is safe to run 'init.d/enable-nat start' several times.
+
+ -- Petter Reinholdtsen <pere at debian.org>  Sat,  7 Feb 2004 20:49:18 +0100
+
+debian-edu-config (0.356) unstable; urgency=low
+
+  * Petter Reinholdtsen
+    - Return 0 and not 5 from init.d scripts if the service is
+      unavailable to avoid errors in Debian.  The LSM specify 5 as the
+      return value, but this give warnings from invoke-rc.d in Debian
+      Woody.
+    - Fix typo in init.d/enable-nat.
+    - Make sure init.d/update-hostname is disabled by default.
+    - Avoid error message from mii-tool in init.d/start-wlan.
+
+ -- Petter Reinholdtsen <pere at debian.org>  Sat,  7 Feb 2004 20:27:39 +0100
+
+debian-edu-config (0.355) unstable; urgency=low
+
+  * Petter Reinholdtsen
+    - Improve init.d/ltspnet-nat, making sure it enables IPv4
+      forwarding if it isn't enabled already.
+    - Improve Linux Software Base complience for all init.d scripts.
+    - Include init.d/backdoor and init.d/wlan in package.
+    - Use dh_installinit to install and enable init.d scripts.  This
+      gets rid of some lintian warnings
+
+ -- Petter Reinholdtsen <pere at debian.org>  Sat,  7 Feb 2004 19:53:48 +0100
+
+debian-edu-config (0.354) unstable; urgency=low
+
+  * Petter Reinholdtsen
+    - Improve init.d/ltspnet-nat.  Add 'restart' and 'status'
+      arguments.  Make it possible to override the default
+      configuration using /etc/default/ltspnet-nat.
+    - Add depends on iptables as init.d/ltspnet-nat need it.
+
+ -- Petter Reinholdtsen <pere at debian.org>  Sat,  7 Feb 2004 10:07:46 +0100
+
+debian-edu-config (0.353) unstable; urgency=medium
+
+  * Petter Reinholdtsen
+    - Make sure bin/update-ini-file handle missing files by creating
+      them first, and then leave it to Config::IniFiles to update the
+      content.
+    - Change Build-Depends to Build-Depends-Indep as this package is
+      architecture 'all'.
+    - Add Andreas Schuldei as uploader.
+
+ -- Petter Reinholdtsen <pere at debian.org>  Sat, 31 Jan 2004 20:19:56 +0100
+
+debian-edu-config (0.352) unstable; urgency=medium
+
+  * Petter Reinholdtsen
+    - Jump to version number to 0.352 make sure it is higher than the
+      version used in Skolelinux / Woody (0.351.skolelinux.#).
+    - Fixed several syntax errors in ldap-bootstrap/root.ldif: All
+      lisAclGroups needed a 'member' attribute, the Variables object
+      was listed twice, and the cn and dn of object 'juadmins' was not
+      the same.
+    - Made sure all groups are object class posixGroup.
+    - Reordered objectClass specifiers to make sure all objects use
+      the same order; top, RFC-standardized groups, and site-specific
+      groups.
+    - Make sure ldap-skolelinux-install exit on first error, to try to
+      detect if it fail.
+    - Rewrite update-ini-file from using libconfig-ini-perl to using
+      libconfig-inifiles-perl, to get a dependency which exist both in
+      Woody and Sarge.
+  * Per Harald Westby
+    - cf.apache adds entries for OpenOffice.org document types
+      to /etc/mime.types
+  * Finn-Arne Johansen
+    - Added scripts to remove stray processes.  One for logout
+      (logoutkill.sh), and one for a nightly cron task (nightkill.sh).
+    - Added script apt-get-update-files-download that gives somewhat a
+      better message whenever there is new packages waiting to be
+      installed.
+
+ -- Petter Reinholdtsen <pere at debian.org>  Fri, 30 Jan 2004 22:46:09 +0100
+
+debian-edu-config (0.1) unstable; urgency=low
+
+  * Initial upload, based on the current Skolelinux version 0.350-7.
+
+ -- Petter Reinholdtsen <pere at debian.org>  Sat, 17 Jan 2004 16:00:09 +0100
diff --git a/debian-edu-config/debian/compat b/debian-edu-config/debian/compat
new file mode 100644
index 0000000..b8626c4
--- /dev/null
+++ b/debian-edu-config/debian/compat
@@ -0,0 +1 @@
+4
diff --git a/debian-edu-config/debian/control b/debian-edu-config/debian/control
new file mode 100644
index 0000000..cc51b11
--- /dev/null
+++ b/debian-edu-config/debian/control
@@ -0,0 +1,18 @@
+Source: debian-edu-config
+Section: misc
+Priority: optional
+Maintainer: Debian Edu Developers <debian-edu at lists.debian.org>
+Uploaders: Petter Reinholdtsen <pere at debian.org>, Andreas Schuldei <andreas at debian.org>, Finn-Arne Johansen <faj at bzz.no>, Morten Werner Olsen <werner at debian.org>, Luk Claes <luk at debian.org>, Steffen Joeris <white at debian.org>, Holger Levsen <holger at debian.org>, Klaus Ade Johnstad <klaus at skolelinux.no>
+Standards-Version: 3.7.2
+Build-Depends: debhelper
+Build-Depends-Indep: po-debconf
+
+Package: debian-edu-config
+Architecture: all
+Depends: ${misc:Depends}, cfengine2, libconfig-inifiles-perl, mime-support, libnet-ldap-perl, ng-utils, host, desktop-profiles, lsb-base, ssl-cert, libfilesys-df-perl, libtext-unaccent-perl, libhtml-fromtext-perl, libio-socket-ssl-perl, lsof
+Replaces: ldap-skolelinux, cfengine-skolelinux, ncs
+Provides: cfengine-skolelinux, ncs
+Conflicts: ldap-skolelinux (<= 0.1-83), cfengine-skolelinux (<= 0.338), debian-edu-install (<= 0.616), samba (<<3.0.0), ncs
+Description: Configuration files for Skolelinux systems
+ Installs cfengine config files to be used by the machines set up as part
+ of the Skolelinux project.
diff --git a/debian-edu-config/debian/copyright b/debian-edu-config/debian/copyright
new file mode 100644
index 0000000..af85f7b
--- /dev/null
+++ b/debian-edu-config/debian/copyright
@@ -0,0 +1,10 @@
+This package was debianized by the author Petter Reinholdtsen
+<pere at hungry.com> on Sun, 25 Nov 2001 13:12:09 +0100.
+
+These scripts are free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation; either version 2, or (at your option) any
+later version.
+
+On Debian GNU/Linux systems, the complete text of the GNU General
+Public License can be found in `/usr/share/common-licenses/GPL'.
diff --git a/debian-edu-config/debian/cron.d b/debian-edu-config/debian/cron.d
new file mode 100644
index 0000000..0ad2b8f
--- /dev/null
+++ b/debian-edu-config/debian/cron.d
@@ -0,0 +1,5 @@
+#
+# Only dry-run cron job until we know it is safe to run on an installed
+# system [pere 2003-08-30]
+# Disable until it no longer run in "installation" mode. [pere 2003-09-01]
+#9 4	* * *	root	if [ -x /usr/bin/cfengine-debian-edu ]; then /usr/bin/cfengine-debian-edu -n; fi
diff --git a/debian-edu-config/debian/debian-edu-config.boot_xconf b/debian-edu-config/debian/debian-edu-config.boot_xconf
new file mode 100755
index 0000000..1b81987
--- /dev/null
+++ b/debian-edu-config/debian/debian-edu-config.boot_xconf
@@ -0,0 +1,105 @@
+#!/bin/bash
+### BEGIN INIT INFO
+# Provides:          boot-xconf
+# Required-Start:    $remote_fs $syslog
+# Required-Stop:
+# Default-Start:     2 3 4 5
+# Default-Stop:
+# Short-Description: Creates a XF86Config during boot-time
+# Description:       Creates a XF86Config during boot-time for
+#                    lessdisks-clients.  It's possible to pressed using
+#                    MAC address and IP address
+### END INIT INFO
+
+XF86CONF=/var/state/lessdisks/etc/XF86Config
+DEBUG=
+IFACE=eth0
+CREATECONF=
+
+if [ -f /etc/default/boot_xconf ] ; then 
+  . /etc/default/boot_xconf 
+fi
+
+
+debug () {
+  [ "$DEBUG" ] && echo $1
+}
+
+iptohex () {
+    IP=$1
+
+    HEXIP=$(for ALL in $(echo "$IP" | tr "." " ") ; do 
+      if [ $ALL -lt 16 ] ; then 
+	echo -n "0$(echo -e "obase=16\n$ALL" | bc)"
+      else
+	echo -n "$(echo -e "obase=16\n$ALL" | bc)"
+      fi 
+    done  
+    echo )
+
+    LENGTH=8
+    while [ $LENGTH -gt 0 ] ; do  
+      echo $HEXIP
+      LENGTH=$(expr $LENGTH - 1)
+      HEXIP=$(echo $HEXIP | cut -c -$LENGTH)
+    done
+}
+
+while [ $# -gt 0 ] ; do 
+  case "$1" in 
+    -dorun) CREATECONF=true ;;
+    -debug) DEBUG=true ;;
+    -iface) IFACE=$2 ; shift ;;
+    *) COMMAND="$1" ;; 
+  esac
+  shift
+done 
+
+if [ "$CREATECONF" != "true" ] ; then 
+  debug "$0 not set to run, exiting"
+  exit 0
+fi
+
+IP=$(/sbin/ifconfig $IFACE | sed -ne 's/.*inet addr:\(.*\) Bcast.*/\1/p')
+MACADDR=$(/sbin/ifconfig $IFACE | sed -n 's/.*HWaddr //p')
+
+case "$COMMAND" in 
+  start)
+    for CONFSEARCH in $MACADDR $IP $(iptohex $IP) default ; do 
+      debug "Looking for /etc/lessdisks/terminals/XF86Config-4.$CONFSEARCH"
+      if [ -f /etc/lessdisks/terminals/XF86Config-4.$CONFSEARCH ] ; then 
+        ln -s /etc/lessdisks/terminals/XF86Config-4.$CONFSEARCH $XF86CONF
+        break 
+      fi 
+    done
+    if [ ! -f $XF86CONF ] ; then
+      debug "Running /usr/sbin/xdebconfigurator -di "
+      /usr/sbin/xdebconfigurator -di 
+
+      for CONFSEARCH in default $(iptohex $IP | tac) $IP $MACADDR ; do 
+        debug "looking for debconf-*.$CONFSEARCH in /etc/lessdisks/terminals/"
+        ALLDEBCONF=$(find /etc/lessdisks/terminals/ -type f -name "debconf-*.$CONFSEARCH")
+        for DEBCONF in $ALLDEBCONF ; do 
+          debug "Preseeding with $DEBCONF"
+          debconf-set-selections $DEBCONF
+        done
+      done
+      debug "creating $XF86CONF with dexconf"
+      /usr/bin/dexconf -o $XF86CONF
+    fi
+    ;;
+  stop)
+    ;;
+  restart)
+        echo "restart for boox_xconf is unsupported, please use start" >&2
+        exit 1
+    ;;
+  force-reload)
+        echo "force-reload for boox_xconf is unsupported, please use start" >&2
+        exit 1
+    ;;
+  *)
+    echo $"Usage: $0 {start|stop|restart|force-reload}"
+    exit 2
+    ;;
+esac
diff --git a/debian-edu-config/debian/debian-edu-config.config b/debian-edu-config/debian/debian-edu-config.config
new file mode 100644
index 0000000..6733566
--- /dev/null
+++ b/debian-edu-config/debian/debian-edu-config.config
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+set -e
+
+# if we do not have debconf, we just skip this
+. /usr/share/debconf/confmodule || exit 0
+
+db_input medium debian-edu-config/enable-nat || true
+db_go || true
diff --git a/debian-edu-config/debian/debian-edu-config.enable-nat b/debian-edu-config/debian/debian-edu-config.enable-nat
new file mode 100755
index 0000000..5a545a3
--- /dev/null
+++ b/debian-edu-config/debian/debian-edu-config.enable-nat
@@ -0,0 +1,90 @@
+#! /bin/sh
+### BEGIN INIT INFO
+# Provides:          enable-nat
+# Required-Start:    $remote_fs
+# Should-Start:      $network
+# Required-Stop:     $remote_fs
+# Should-Stop:       $network
+# Default-Start:     2 3 4 5
+# Default-Stop:      0 1 6
+# Short-Description: Enabling NAT for clients behind eth1
+# Description:       Enabling Network Address Translation for clients
+#                    sitting in the thin client network behind eth1
+### END INIT INFO
+
+IPTABLES=/sbin/iptables
+
+NETWORK_TO_NAT=
+OUTSIDE_IF=eth0
+
+# Only enable by default if LTSP or lessdisks is installed
+if [ -e /opt/ltsp -o -d /var/lib/lessdisks ] ; then
+    NETWORK_TO_NAT="192.168.0.0/24"
+fi
+
+if [ -f /etc/default/enable-nat ] ; then
+    . /etc/default/enable-nat
+fi
+
+# Bail out if no iptables binary or no configuration
+[ -x ${IPTABLES} -a "$NETWORK_TO_NAT" ] || exit 0
+
+do_status() {
+    $IPTABLES -L -t nat |grep -A3 POSTROUTING
+}
+
+is_enabled() {
+    if do_status | grep -q "$NETWORK_TO_NAT" ; then
+	true
+    else
+	false
+    fi
+}
+
+do_start() {
+    if is_enabled ; then
+	echo "NAT for clients on network $NETWORK_TO_NAT already enabled."
+    else
+	echo "Enabling NAT for clients on network $NETWORK_TO_NAT."
+	$IPTABLES -t nat -A POSTROUTING -s $NETWORK_TO_NAT -o $OUTSIDE_IF -j MASQUERADE
+    fi
+
+    # Enable IP-forwarding if it isn't enabled already.
+    if [ 0 = "`cat /proc/sys/net/ipv4/ip_forward`" ]; then
+	echo "Enabling IPv4 forwarding."
+	echo 1 > /proc/sys/net/ipv4/ip_forward
+    fi
+
+    do_status
+}
+
+do_stop() {
+    if is_enabled ; then
+	echo "Disabling NAT for clients on network $NETWORK_TO_NAT."
+	$IPTABLES -F -t nat
+    else
+	echo "NAT for clients on network $NETWORK_TO_NAT already disabled."
+    fi
+    do_status
+}
+
+case "$1" in
+    start)
+        do_start
+        ;;
+    stop)
+        do_stop
+        ;;
+    restart|force-reload)
+        do_stop
+        do_start
+        ;;
+    status)
+        do_status
+        ;;
+    *)
+        echo $"Usage: $0 {start|stop|restart|force-reload|status}"
+        exit 2
+        ;;
+esac
+exit 0
diff --git a/debian-edu-config/debian/debian-edu-config.fetch-ldap-cert b/debian-edu-config/debian/debian-edu-config.fetch-ldap-cert
new file mode 100644
index 0000000..42e2047
--- /dev/null
+++ b/debian-edu-config/debian/debian-edu-config.fetch-ldap-cert
@@ -0,0 +1,49 @@
+#!/bin/sh
+### BEGIN INIT INFO
+# Provides:          fetch-ldap-cert
+# Required-Start:    $local_fs $remote_fs
+# Required-Stop:     $local_fs $remote_fs
+# Should-Start:      $network apache apache2
+# Should-Stop:       $network apache apache2
+# Default-Start:     2 3 4 5
+# Default-Stop:
+# Short-Description: Fetch LDAP SSL public key from the server
+# Description:
+### END INIT INFO
+#
+# Author: Petter Reinholdtsen <pere at hungry.com>
+# Date:   2007-06-09
+
+set -e
+
+. /lib/lsb/init-functions
+
+CERTURL=http://www/ldap-server-pubkey.pem
+CERTFILE=/etc/ldap/ssl/ldap-server-pubkey.pem
+
+do_start() {
+    if [ ! -f $CERTFILE ] ; then
+	[ "$VERBOSE" != no ] && log_action_begin_msg "Fetching LDAP SSL certificate."
+	if wget -q -O $CERTFILE.new $CERTURL ; then
+	    mv $CERTFILE.new $CERTFILE
+	    [ "$VERBOSE" != no ] && log_action_end_msg 0
+	else
+	    rm $CERTFILE.new
+	    log_action_end_msg 1
+	fi
+    fi
+}
+
+case "$1" in
+    start)
+	do_start
+	;;
+    stop)
+	;;
+    restart|force-reload)
+	;;
+    *)
+	echo $"Usage: $0 {start|stop|restart|force-reload}"
+	exit 2
+esac
+exit 0
diff --git a/debian-edu-config/debian/debian-edu-config.links b/debian-edu-config/debian/debian-edu-config.links
new file mode 100644
index 0000000..3d6d482
--- /dev/null
+++ b/debian-edu-config/debian/debian-edu-config.links
@@ -0,0 +1,2 @@
+usr/share/debian-edu-config/tools/ldapdump.sh etc/slbackup/pre.d/ldapdump.sh
+etc/apache2/mods-available/userdir.load etc/apache2/mods-available/debian-edu-userdir.load
diff --git a/debian-edu-config/debian/debian-edu-config.manpages b/debian-edu-config/debian/debian-edu-config.manpages
new file mode 100644
index 0000000..55062e1
--- /dev/null
+++ b/debian-edu-config/debian/debian-edu-config.manpages
@@ -0,0 +1,2 @@
+share/man/man8/debian-edu-restart-services.8
+share/man/man8/debian-edu-test-install.8
diff --git a/debian-edu-config/debian/debian-edu-config.modules b/debian-edu-config/debian/debian-edu-config.modules
new file mode 100644
index 0000000..1b96ca2
--- /dev/null
+++ b/debian-edu-config/debian/debian-edu-config.modules
@@ -0,0 +1,8 @@
+# Modules changed names from 2.4.21 to 2.4.22
+
+define KERNEL_VER `uname -r`
+
+if KERNEL_VER >= 2.4.22
+  alias ide-mod           ide-core
+  alias ide-probe-mod     ide-detect
+endif
diff --git a/debian-edu-config/debian/debian-edu-config.open-backdoor b/debian-edu-config/debian/debian-edu-config.open-backdoor
new file mode 100755
index 0000000..249efad
--- /dev/null
+++ b/debian-edu-config/debian/debian-edu-config.open-backdoor
@@ -0,0 +1,107 @@
+#!/bin/sh 
+### BEGIN INIT INFO
+# Provides:          open-backdoor
+# Required-Start:    $remote_fs
+# Required-Stop:     $remote_fs
+# Should-Start:      $network
+# Should-Stop:       $network
+# Default-Start:     2 3 4 5
+# Default-Stop:      0 1 6
+# Short-Description: Open SSH backdoor to get around firewalls
+# Description:       Nice script that opens an ssh backdoor to get
+#                    around firewalls that blocks incoming ssh.
+#                    To configure, create /etc/default/open-backdoor
+#                    with the user, host and port settings.
+### END INIT INFO
+
+# Look at the launchtool and daemon packages to solve the file
+# descriptor problem.
+
+RPORT=
+RHOST=
+RUSER=
+PIDFILE=/var/run/backdoor.pid
+LASTFILE=/var/run/backdoor.last
+DEFAULTS=/etc/default/backdoor
+
+[ -f $DEFAULTS ] && . $DEFAULTS
+
+is_enabled() {
+    if [ -z "$RPORT" -o -z "$RHOST" -o -z "$RUSER" ] ; then 
+        #echo "open-backdoor: Not enabled, backdoor parameters not set."
+        false
+    else
+        true
+    fi
+}
+
+do_start() {
+    # Check if there is another backdoor running
+    OLDPID=`cat "$PIDFILE" 2> /dev/null`
+    if [ -n "$OLDPID" ] ; then 
+        ps "$OLDPID" | grep -q backdoor && exit
+    fi
+    # Save it for a rainny day
+
+    echo $$ > "$PIDFILE"
+    while true ; do 
+        if [ -f "$LASTFILE" -a \
+             `date -r "$LASTFILE" +%s` -ge `date -d -5min +%s` ] ; then 
+            sleep 300
+        else
+            touch "$LASTFILE"
+            ssh -l "$RUSER" "$RHOST" -R "$RPORT:localhost:22" sleep 3600
+        fi
+    done
+}
+
+do_stop() {
+    OLDPID=`cat $PIDFILE 2> /dev/null`
+    if [ -n "$OLDPID" ] ; then 
+        ps $OLDPID | grep -q backdoor && kill $OLDPID
+    fi
+}
+
+do_status() {
+    OLDPID=`cat $PIDFILE 2> /dev/null`
+    if [ "$OLDPID" ] && kill -0 "$OLDPID" ; then
+        echo "info: SSH backdoor is running with pid '$OLDPID'."
+    else
+        echo "info: SSH backdor is not running."
+    fi
+}
+
+case "$1" in 
+    start) #start running in the background
+        is_enabled || exit 0
+
+        echo "info: Opening SSH backdoor from $RHOST:$RPORT" 1>&2
+
+        # This need to be properly detached.  It will hang on upgrades
+        # because some file descriptor is still open, and the postinst
+        # shell script refuses to terminate because of this.  See
+        # skolelinux bug #783 for info on the problem.
+        do_start < /dev/null > /dev/null 2>&1 &
+        ;;
+    stop) #find a way to stop this
+        is_enabled || exit 0
+        do_stop
+        ;;
+    restart|force-reload)
+        is_enabled || exit 0
+        do_stop
+        do_start < /dev/null > /dev/null 2>&1 &
+        ;;
+    status)
+        if is_enabled ; then
+            do_status
+        else
+            echo "info: SSH backdoor isn't enabled.  Edit $DEFAULTS to enable."
+        fi
+        ;;
+    *)
+        echo $"Usage: $0 {start|stop|restart|force-reload|status}"
+        exit 2
+        ;;
+esac
+exit 0
diff --git a/debian-edu-config/debian/debian-edu-config.postinst b/debian-edu-config/debian/debian-edu-config.postinst
new file mode 100644
index 0000000..c3d6c2d
--- /dev/null
+++ b/debian-edu-config/debian/debian-edu-config.postinst
@@ -0,0 +1,108 @@
+#!/bin/sh
+
+set -e
+
+# Enable debconf
+. /usr/share/debconf/confmodule
+
+# Change the permissions in the tree leading to kmailrc
+# Related to #887
+if [ -f /etc/skel/.kde/share/config/kmailrc ]; then
+   chmod -R 0700 /etc/skel/.kde
+   chmod 0600 /etc/skel/.kde/share/config/kmailrc
+fi
+
+# Avoid erasing the LDAP database at install time.  Leave that to
+# base-config-skolelinux and cfengine.
+#if [ "$1" = "configure" -a ! "$2" ]; then
+#    # Create ldap-tree on the initial install
+#    /usr/bin/ldap-skolelinux-install
+#fi
+
+# unless there already exists a imapd.cnf, link in debian-edu.cnf to
+# make the certificate more sensible
+if [ ! -e /etc/courier/imapd.cnf ] ; then 
+  ln -s imapd-debian-edu.cnf /etc/courier/imapd.cnf
+fi
+
+# Avoid upgrade problems, make sure /etc/ldap/schema/automount.schema exist
+schemadir=/etc/ldap/schema
+if [ ! -e $schemadir/automount.schema ] ; then
+    ln -s $schemadir/automount-debian-edu.schema $schemadir/automount.schema
+fi
+
+/usr/sbin/update-mime
+
+# Update config for init.d/update-hostname based on debconf preseeding
+ENABLED_DEFAULT=false
+ENABLED=$ENABLED_DEFAULT
+DEFAULTFILE=/etc/default/update-hostname
+# Load current value if set in /etc/
+if [ -f $DEFAULTFILE ] ; then
+    . $DEFAULTFILE
+    if [ "$ENABLED" ] ; then
+	db_set debian-edu-config/update-hostname "$ENABLED"
+    fi
+fi
+db_get debian-edu-config/update-hostname
+# Only replace if the value changed
+if [ -f $DEFAULTFILE ] ; then
+    if [ "$RET" != "$ENABLED" ] ; then
+	sed "s/ENABLED=.+/ENABLED=\"$RET\"" < $DEFAULTFILE > $DEFAULTFILE.new &&
+	    mv $DEFAULTFILE.new $DEFAULTFILE	    
+    fi
+else
+    # Only create or update the file if the value isn't the default value
+    if [ "$ENABLED_DEFAULT" != "$RET" ] ; then
+	echo "ENABLED=\"$RET\"" >> $DEFAULTFILE
+    fi
+fi
+db_go
+db_get debian-edu-config/enable-nat
+FILE="/etc/default/enable-nat"
+# Check the value for enable-nat and set it according to the boolean
+if [ "$RET" = "false" ] ; then
+	if [ ! -e "$FILE" ] ; then
+		echo "NETWORK_TO_NAT=" > $FILE
+	fi
+fi
+db_go
+# Some init-scripts fail if to many fd is open ??
+# close debconf db_handle before they start
+db_stop
+
+
+# start the enable-nat init script if we have a ltspserver
+if grep -q Thin-Client-Server /etc/debian-edu/config ; then
+	if ! grep -q Main-Server /etc/debian-edu/config ; then
+		if [ -x "`which invoke-rc.d 2>/dev/null`" ] ; then
+			invoke-rc.d enable-nat start || exit $?
+		else
+			/etc/init.d/enable-nat start || exit $?
+		fi
+	fi
+fi
+
+# Install the file kde-user-profile if it does not exist to ensure
+# we can use our kiosk modes
+KIOSK_MAP_FILE="/etc/kde-user-profile"
+KIOSK_CONFIG_FILE="/etc/kderc"
+if [ ! -e "$KIOSK_MAP_FILE" ] ; then
+        update-ini-file $KIOSK_MAP_FILE 'General' 'groups' 'students,admins,root'
+        update-ini-file $KIOSK_MAP_FILE 'Groups' 'students' 'debian_edu_pupils'
+        update-ini-file $KIOSK_MAP_FILE 'Groups' 'admins' 'debian_edu_root'
+        update-ini-file $KIOSK_MAP_FILE 'Groups' 'root' 'debian_edu_root'
+fi
+
+if [ ! -e "$KIOSK_CONFIG_FILE" ] ; then
+        update-ini-file $KIOSK_CONFIG_FILE 'Directories' 'userProfileMapFile' '/etc/kde-user-profile'
+        update-ini-file $KIOSK_CONFIG_FILE 'Directories-debian_edu_pupils' 'ProfileDescription' 'Debian-Edu Profile for pupils'
+        update-ini-file $KIOSK_CONFIG_FILE 'Directories-debian_edu_pupils' 'prefixes' '/usr/share/debian-edu/students'
+        update-ini-file $KIOSK_CONFIG_FILE 'Directories-debian_edu_root' 'ProfileDescription' 'Debian-Edu Profile for root'
+        update-ini-file $KIOSK_CONFIG_FILE 'Directories-debian_edu_root' 'prefixes' '/usr/share/debian-edu/root'
+fi
+
+
+#DEBHELPER#
+
+exit 0
diff --git a/debian-edu-config/debian/debian-edu-config.prerm b/debian-edu-config/debian/debian-edu-config.prerm
new file mode 100644
index 0000000..6b35a37
--- /dev/null
+++ b/debian-edu-config/debian/debian-edu-config.prerm
@@ -0,0 +1,14 @@
+#!/bin/sh
+
+set -e
+
+# Calling the init script during removal
+if [ -x "/etc/init.d/enable-nat" ] ; then
+	if [ -x "`which invoke-rc.d 2>/dev/null`" ] ; then
+		invoke-rc.d enable-nat stop || exit $?
+	else
+		/etc/init.d/enable-nat stop || exit $?
+	fi
+fi
+
+#DEBHELPER#
diff --git a/debian-edu-config/debian/debian-edu-config.report-reboot b/debian-edu-config/debian/debian-edu-config.report-reboot
new file mode 100755
index 0000000..3dd8bd4
--- /dev/null
+++ b/debian-edu-config/debian/debian-edu-config.report-reboot
@@ -0,0 +1,71 @@
+#!/bin/sh
+### BEGIN INIT INFO
+# Provides:          report-reboot
+# Required-Start:    $remote_fs
+# Required-Stop:     $remote_fs
+# Should-Start:      $network
+# Should-Stop:       $network
+# Default-Start:     2 3 4 5
+# Default-Stop:
+# Short-Description: Send message when machine is rebooted.
+# Description:
+### END INIT INFO
+#
+# Author: Petter Reinholdtsen <pere at hungry.com>
+# Date:   1999-05-27
+
+# Where to send the email
+ADMIN=root
+
+# Should we send an email? (true or false) 
+ENABLED=false
+
+# Include the content of this file if it exist.
+BOOTREMINDER=/etc/bootreminder
+
+[ -f /etc/default/report-reboot ] && . /etc/default/report-reboot
+
+[ false = "$ENABLED" ] && exit 0
+
+do_start() {
+    # Name of host
+    HOST=`uname -n`
+    (
+        # Make sure uname, date, uptime, last and mail is available in the PATH
+        export PATH=/bin:/usr/bin:$PATH
+
+        echo "Host '$HOST' has been down."
+        echo
+
+        echo -n "Date:   "
+        date
+
+        echo -n "Uptime:"
+        uptime
+
+        echo
+        echo "The last users was:"
+        last -5
+        echo
+
+        if test -f $BOOTREMINDER; then
+            cat $BOOTREMINDER
+        fi
+        echo
+        echo "Report from $0."
+    ) | mail -s "Host $HOST rebooted" $ADMIN
+}
+
+case "$1" in
+    start)
+	do_start
+	;;
+    stop)
+	;;
+    restart|force-reload)
+	;;
+    *)
+	echo $"Usage: $0 {start|stop|restart|force-reload}"
+	exit 2
+esac
+exit 0
diff --git a/debian-edu-config/debian/debian-edu-config.resize_lvm b/debian-edu-config/debian/debian-edu-config.resize_lvm
new file mode 100755
index 0000000..bdb32f8
--- /dev/null
+++ b/debian-edu-config/debian/debian-edu-config.resize_lvm
@@ -0,0 +1,70 @@
+#!/bin/sh
+# 
+# Author:	Finn-Arne Johansen <faj at bzz.no>
+# License:      GPL-2, on debian, look in /usr/share/common-licenses/GPL-2
+#
+# Add to startup with command
+#  update-rc.d resize_lvm start S 32 .
+#
+### BEGIN INIT INFO
+# Provides:          resize_lvm
+# Required-Start:    lvm
+# Required-Stop:     
+# Default-Start:     S
+# Default-Stop:      
+# Short-Description: Init script to resize lvm volumes during bootup
+# Description:       Resizing(extending) lvm logical volumes during startup.
+#                    To use it, create/edit /etc/default/resize_lvm
+#                    and set the new size of volumes there.  The
+#                    format is lvm device path and new size in MiB
+#                    separated by colon and a trailing colon.  The
+#                    size need to be an integer.
+#                    Example:
+#                      /dev/vg_data/lv_backup:60:
+#                    This will change the size of lv_backup to 60 MiB.
+### END INIT INFO
+
+set -e 
+
+resize_lvm() {
+    cfg=/etc/default/resize_lvm
+    if [ -f $cfg ] ; then 
+	echo "info: Extending LVM volumes requested, $cfg present"
+	export LC_ALL=C
+	grep -vE "^#|^$" /etc/default/resize_lvm | while read LINES ; do 
+	    DEVNAME=$(echo "$LINES" | /bin/sed -ne "s#^\([/a-z0-9_-]*\):.*#\1#p")
+	    NEWSIZE=$(echo "$LINES" | \
+		/bin/sed -ne "s#^[/a-z0-9_-]*:\([0-9]*\):.*#\1#p")
+	    CURSIZE=$(/sbin/lvdisplay --units m $DEVNAME | \
+		/bin/sed -ne 's:.*LV Size *\([0-9]*\)\.[0-9]* MB$:\1:p')
+	    if [ "$NEWSIZE" -lt "$CURSIZE" ] ; then
+		echo "warning:   Unsupported request to shrink $DEVNAME."
+	    elif [ "$NEWSIZE" -gt "$CURSIZE" ] ; then
+		echo "info:   Extending $DEVNAME from $CURSIZE to $NEWSIZE MiB"
+                # lvextend exist for both lvm 1 and 2, while lvresize
+                # only exist for lvm 2.  Using lvextend because of
+                # this. [pere 2006-03-26]
+		(
+		    /sbin/e2fsck -fy "$DEVNAME" && \
+			/sbin/lvextend -L ${NEWSIZE}M "$DEVNAME" && \
+			/sbin/resize2fs "$DEVNAME" || /bin/true
+		) 2>&1 | sed 's/^/  /g'
+	    fi
+	done
+    fi
+}
+
+case $1 in 
+    start)
+	resize_lvm
+	;;
+    stop|reload|restart|force-reload)
+	exit 0 # Nothing to do
+	;;
+    *)
+	echo "error: Sorry, this script is only usable during startup" 
+	exit 1
+	;;
+esac
+
+exit 0
diff --git a/debian-edu-config/debian/debian-edu-config.start-wlan b/debian-edu-config/debian/debian-edu-config.start-wlan
new file mode 100755
index 0000000..3fd495b
--- /dev/null
+++ b/debian-edu-config/debian/debian-edu-config.start-wlan
@@ -0,0 +1,66 @@
+#!/bin/bash
+### BEGIN INIT INFO
+# Provides:          start-wlan
+# Required-Start:    $remote_fs $network
+# Required-Stop:     $remote_fs $network
+# Default-Start:     2 3 4 5
+# Default-Stop:      0 1 6
+# Short-Description:
+# Description:
+### END INIT INFO
+
+[ -x /sbin/iwconfig ] || exit 0
+
+# Ser LOADWLAN=yes in /etc/default/wlan to start wlan
+LOADWLAN=no
+
+[ -f /etc/default/wlan ] && . /etc/default/wlan
+
+find_wlan () {
+  INTERFACES=`cat /proc/net/dev | grep : | cut -f1 -d:`
+  for IF in $INTERFACES ; do
+    iwconfig "$IF" 2>/dev/null | grep -q "^$IF" && echo "$IF"
+  done
+}
+
+restart_wlan () {
+    WLAN="$1"
+    /sbin/ifdown "$WLAN"
+    # Make sure to close stdin/stdout to avoid hanging on dhclient
+    /sbin/ifup "$WLAN" < /dev/null > /dev/null 2>&1 &
+}
+
+WLAN=`find_wlan`
+
+case "$1" in 
+    start)
+        for IFACE in `cat /proc/net/dev | grep : | cut -f1 -d:` ; do 
+            if [ "$LOADWLAN" = "yes" ] ; then 
+	        # Some drivers support mii-tool, others support ethtool
+	        case "`mii-tool $IFACE 2> /dev/null`" in
+  	            "$IFACE*link ok")
+	            LOADWLAN=no
+	            ;;
+	        esac
+	    fi
+        done
+	[ -n "$ESSID" ] && /sbin/iwconfig $WLAN ${ESSID+essid $ESSID}
+	[ "$LOADWLAN" = "yes" ] && restart_wlan "$WLAN" 
+	;;
+    stop)
+	/sbin/ifdown "$WLAN"
+	;;
+    status|restart|force-reload)
+	;;
+    up)
+	[ "$2" = "$WLAN" ] || /sbin/ifdown "$WLAN"
+	;;
+    down)
+	[ "$2" = "$WLAN" ] || /sbin/ifup "$WLAN"
+	;;
+    *)
+	echo $"Usage: $0 {start|stop|restart|force-reload|status}"
+	exit 2
+	;;
+esac
+exit 0
diff --git a/debian-edu-config/debian/debian-edu-config.templates b/debian-edu-config/debian/debian-edu-config.templates
new file mode 100644
index 0000000..bd4139c
--- /dev/null
+++ b/debian-edu-config/debian/debian-edu-config.templates
@@ -0,0 +1,11 @@
+Template: debian-edu-config/update-hostname
+Type: boolean
+Default: false
+_Description: Should the init.d/update-hostname script run at boot time?
+
+Template: debian-edu-config/enable-nat
+Type: boolean
+Default: false
+_Description: Do you want to run enable-nat on your system?
+ The enable-nat script activates NAT for your Thin-Clients and overwrites
+ your iptables rules.
diff --git a/debian-edu-config/debian/debian-edu-config.update-hostname b/debian-edu-config/debian/debian-edu-config.update-hostname
new file mode 100755
index 0000000..7d81c4e
--- /dev/null
+++ b/debian-edu-config/debian/debian-edu-config.update-hostname
@@ -0,0 +1,63 @@
+#! /bin/sh
+### BEGIN INIT INFO
+# Provides:          update-hostname
+# Required-Start:    $remote_fs hostname
+# Required-Stop:
+# Should-Start:      $network
+# Default-Start:     2 3 4 5
+# Default-Stop:
+# Short-Description: Set hostname based on current IP address
+# Description:
+### END INIT INFO
+
+UPDATE=/usr/bin/update-hostname-from-ip
+
+ENABLED=false
+
+[ -f /etc/default/update-hostname ] && . /etc/default/update-hostname
+
+[ -x "$UPDATE" -a true = "$ENABLED" ] || exit 0
+
+. /lib/lsb/init-functions
+
+do_status() {
+    NAME=`uname -n`
+    log_action_msg "Hostname is '$NAME'."
+}
+
+do_start() {
+    FLAGS=""
+    [ "$VERBOSE" != no ] && log_action_begin_msg "Updating hostname from DNS"
+    "$UPDATE" -q
+    ES=$?
+    if [ "$VERBOSE" != no ] ; then
+	log_action_end_msg $ES
+	do_status
+    else
+	log_failure_msg "Unable to update hostname from DNS"
+    fi
+}
+
+do_stop() {
+    :
+}
+
+case "$1" in
+    start)
+	do_start
+	;;
+    stop)
+	do_stop
+	;;
+    restart|force-reload)
+	do_start
+	do_stop
+	;;
+    status)
+	do_status
+	;;
+    *)
+	echo $"Usage: $0 {start|stop|restart|force-reload|status}"
+	exit 2
+esac
+exit 0
diff --git a/debian-edu-config/debian/dirs b/debian-edu-config/debian/dirs
new file mode 100644
index 0000000..4f1689b
--- /dev/null
+++ b/debian-edu-config/debian/dirs
@@ -0,0 +1,39 @@
+etc
+etc/apache2
+etc/apache2/sites-available
+etc/apache2/mods-available
+etc/bind/debian-edu
+etc/cfengine/debian-edu
+etc/courier
+etc/cron.d
+etc/cups
+etc/debian-edu
+etc/default
+etc/exim
+etc/init.d
+etc/ldap/schema
+etc/ldap/ssl
+etc/pam.d
+etc/slbackup/pre.d
+etc/usbmount
+etc/samba
+etc/samba/netlogon
+etc/slbackup/pre.d
+etc/X11/Xsession.d
+etc/nagios/debian-edu/hosts
+etc/nagios/debian-edu/hostgroups
+usr/bin
+usr/share/debian-edu-config/tools
+usr/share/doc/debian-edu-config
+usr/share/debian-edu/common/share/config
+usr/share/debian-edu/common/share/mimelnk/applnk
+usr/share/debian-edu/kde-profile/debian_edu_pupils/share/apps/kdesktop/Desktop
+usr/share/debian-edu/kde-profile/debian_edu_pupils/share/config
+usr/share/debian-edu/kde-profile/debian_edu_pupils/share/services
+usr/share/debian-edu/kde-profile/debian_edu_pupils/etc/xdg/menus
+usr/share/man
+usr/share/man/man1
+usr/share/man/man8
+usr/share/lintian/overrides
+var/lib/maildirs
+var/www
diff --git a/debian-edu-config/debian/po/POTFILES.in b/debian-edu-config/debian/po/POTFILES.in
new file mode 100644
index 0000000..f91872d
--- /dev/null
+++ b/debian-edu-config/debian/po/POTFILES.in
@@ -0,0 +1 @@
+[type: gettext/rfc822deb] debian-edu-config.templates
diff --git a/debian-edu-config/debian/po/ca.po b/debian-edu-config/debian/po/ca.po
new file mode 100644
index 0000000..b65cf00
--- /dev/null
+++ b/debian-edu-config/debian/po/ca.po
@@ -0,0 +1,42 @@
+# Catalan translation of debian-edu-config debconf templates.
+# Copyright (C) 2006 Debian Edu Developers
+# This file is distributed under the same license as the package.
+#
+# René Mérou <ochominutosdearco at gmail.com>, 2007.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: debian-edu-config\n"
+"Report-Msgid-Bugs-To: debian-edu at lists.debian.org\n"
+"POT-Creation-Date: 2006-09-22 22:06+1000\n"
+"PO-Revision-Date: 2007-04-28 21:44+0300\n"
+"Last-Translator: René Mérou <ochominutosdearco at gmail.com>\n"
+"Language-Team: Catalan <debian-l10n-catalan at lists.debian.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. Type: boolean
+#. Description
+#: ../debian-edu-config.templates:1001
+msgid "Should the init.d/update-hostname script run at boot time?"
+msgstr ""
+"S'hauria d'executar l'script «init.d/update-hostname» en arrencar"
+"l'ordinador?"
+
+#. Type: boolean
+#. Description
+#: ../debian-edu-config.templates:2001
+msgid "Do you want to run enable-nat on your system?"
+msgstr "Voleu executar «enable-nat» al vostre sistema?"
+
+#. Type: boolean
+#. Description
+#: ../debian-edu-config.templates:2001
+msgid ""
+"The enable-nat script activates NAT for your Thin-Clients and overwrites "
+"your iptables rules."
+msgstr ""
+"L'script «enable-nat» activarà el NAT pels clients lleugers i "
+"sobreescriurà les regles de l'iptables."
+
diff --git a/debian-edu-config/debian/po/cs.po b/debian-edu-config/debian/po/cs.po
new file mode 100644
index 0000000..d8ab9cc
--- /dev/null
+++ b/debian-edu-config/debian/po/cs.po
@@ -0,0 +1,38 @@
+# Czech translation of debian-edu-config debconf messages.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the debian-edu-config package.
+# Miroslav Kure <kurem at debian.cz>, 2006.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: debian-edu-config\n"
+"Report-Msgid-Bugs-To: debian-edu at lists.debian.org\n"
+"POT-Creation-Date: 2006-09-22 22:06+1000\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: Miroslav Kure <kurem at debian.cz>\n"
+"Language-Team: Czech <debian-l10n-czech at lists.debian.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. Type: boolean
+#. Description
+#: ../debian-edu-config.templates:1001
+msgid "Should the init.d/update-hostname script run at boot time?"
+msgstr "Má se během zavádění systému spustit skript init.d/update-hostname?"
+
+#. Type: boolean
+#. Description
+#: ../debian-edu-config.templates:2001
+msgid "Do you want to run enable-nat on your system?"
+msgstr "Chcete na svém systému spouštět enable-nat?"
+
+#. Type: boolean
+#. Description
+#: ../debian-edu-config.templates:2001
+msgid ""
+"The enable-nat script activates NAT for your Thin-Clients and overwrites "
+"your iptables rules."
+msgstr ""
+"Skript enable-nat na tenkých klientech aktivuje NAT (překlad síťových adres) "
+"a přepíše vaše pravidla iptables."
diff --git a/debian-edu-config/debian/po/de.po b/debian-edu-config/debian/po/de.po
new file mode 100644
index 0000000..c7af0e4
--- /dev/null
+++ b/debian-edu-config/debian/po/de.po
@@ -0,0 +1,39 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the debian-edu-config package.
+# FIRST AUTHOR <EMAIL at ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: debian-edu at lists.debian.org\n"
+"POT-Creation-Date: 2006-09-22 22:06+1000\n"
+"PO-Revision-Date: 2006-10-31 18:47+0100\n"
+"Last-Translator: Helge Kreutzmann <debian at helgefjell.de>\n"
+"Language-Team: de <debian-l10n-german at lists.debian.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-15\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. Type: boolean
+#. Description
+#: ../debian-edu-config.templates:1001
+msgid "Should the init.d/update-hostname script run at boot time?"
+msgstr "Soll das init.d/update-hostname-Skript beim Systemstart laufen?"
+
+#. Type: boolean
+#. Description
+#: ../debian-edu-config.templates:2001
+msgid "Do you want to run enable-nat on your system?"
+msgstr "M�chten Sie enable-nat auf Ihrem System laufen lassen?"
+
+#. Type: boolean
+#. Description
+#: ../debian-edu-config.templates:2001
+msgid ""
+"The enable-nat script activates NAT for your Thin-Clients and overwrites "
+"your iptables rules."
+msgstr ""
+"Das enable-nat-Skript aktiviert NAT auf Ihren Thin-Clients und �berschreibt "
+"Ihre Iptables-Regeln."
diff --git a/debian-edu-config/debian/po/es.po b/debian-edu-config/debian/po/es.po
new file mode 100644
index 0000000..6c76eae
--- /dev/null
+++ b/debian-edu-config/debian/po/es.po
@@ -0,0 +1,64 @@
+# debian-edu-config translation to spanish
+# Copyright (C) 2006 Free Software Foundation, Inc.
+# This file is distributed under the same license as the package.
+#
+# Changes:
+# - Initial translation
+#     Javier Ruano Ruano , 2006
+#
+#
+#  Traductores, si no conoce el formato PO, merece la pena leer la
+#  documentación de gettext, especialmente las secciones dedicadas a este
+#  formato, por ejemplo ejecutando:
+#         info -n '(gettext)PO Files'
+#         info -n '(gettext)Header Entry'
+#
+# Equipo de traducción al español, por favor lean antes de traducir
+# los siguientes documentos:
+#
+# - El proyecto de traducción de Debian al español
+#   http://www.debian.org/intl/spanish/
+#   especialmente las notas y normas de traducción en
+#   http://www.debian.org/intl/spanish/notas
+#
+# - La guía de traducción de po's de debconf:
+#   /usr/share/doc/po-debconf/README-trans
+#   o http://www.debian.org/intl/l10n/po-debconf/README-trans
+#
+# Si tiene dudas o consultas sobre esta traducción consulte con el último
+# traductor (campo Last-Translator) y ponga en copia a la lista de
+# traducción de Debian al español (<debian-l10n-spanish at lists.debian.org>)
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: debian-edu-config\n"
+"Report-Msgid-Bugs-To: debian-edu at lists.debian.org\n"
+"POT-Creation-Date: 2006-09-22 22:06+1000\n"
+"PO-Revision-Date: 2007-01-17 02:19+0100\n"
+"Last-Translator: Javier Ruano Ruano <javier.ruano at estudiante.uam.es>\n"
+"Language-Team: Debian L10n Spanish <debian-l10n-spanish at lists.debian.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. Type: boolean
+#. Description
+#: ../debian-edu-config.templates:1001
+msgid "Should the init.d/update-hostname script run at boot time?"
+msgstr "¿Debería ejecutarse en el arranque el script «init.d/update-hostname»?"
+
+#. Type: boolean
+#. Description
+#: ../debian-edu-config.templates:2001
+msgid "Do you want to run enable-nat on your system?"
+msgstr "¿Desea ejecutar «enable-nat» en su sistema?"
+
+#. Type: boolean
+#. Description
+#: ../debian-edu-config.templates:2001
+msgid ""
+"The enable-nat script activates NAT for your Thin-Clients and overwrites "
+"your iptables rules."
+msgstr ""
+"El script «enable-nat» habilita NAT para sus clientes ligeros, y para ello, "
+" sobreescribirá las reglas de iptables."
\ No newline at end of file
diff --git a/debian-edu-config/debian/po/fr.po b/debian-edu-config/debian/po/fr.po
new file mode 100644
index 0000000..404af58
--- /dev/null
+++ b/debian-edu-config/debian/po/fr.po
@@ -0,0 +1,40 @@
+# translation of fr.po to French
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+#
+# Guilhelm Panaget <guilhelm.panaget at free.fr>, 2006.
+msgid ""
+msgstr ""
+"Project-Id-Version: fr\n"
+"Report-Msgid-Bugs-To: pkg-kde-extras at lists.alioth.debian.org\n"
+"POT-Creation-Date: 2006-09-22 22:06+1000\n"
+"PO-Revision-Date: 2006-10-05 00:40+0200\n"
+"Last-Translator: Guilhelm Panaget <guilhelm.panaget at free.fr>\n"
+"Language-Team: French <debian-l10n-french at lists.debian.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.2\n"
+
+#. Type: boolean
+#. Description
+#: ../debian-edu-config.templates:1001
+msgid "Should the init.d/update-hostname script run at boot time?"
+msgstr "Faut-il exécuter le script « init.d/update-hostname » au démarrage ?"
+
+#. Type: boolean
+#. Description
+#: ../debian-edu-config.templates:2001
+msgid "Do you want to run enable-nat on your system?"
+msgstr "Faut-il exécuter le script « enable-nat » sur le système ?"
+
+#. Type: boolean
+#. Description
+#: ../debian-edu-config.templates:2001
+msgid ""
+"The enable-nat script activates NAT for your Thin-Clients and overwrites "
+"your iptables rules."
+msgstr ""
+"Le script « enable-nat » active la traduction d'adresses (« NAT ») pour les "
+"clients légers et remplace les règles iptables."
+
diff --git a/debian-edu-config/debian/po/nl.po b/debian-edu-config/debian/po/nl.po
new file mode 100644
index 0000000..1320efb
--- /dev/null
+++ b/debian-edu-config/debian/po/nl.po
@@ -0,0 +1,36 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL at ADDRESS>, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: debian-edu-config\n"
+"Report-Msgid-Bugs-To: debian-edu at lists.debian.org\n"
+"POT-Creation-Date: 2006-09-22 22:06+1000\n"
+"PO-Revision-Date: 2007-04-29 12:39+0100\n"
+"Last-Translator: Bart Cornelis <cobaco at skolelinux.no>\n"
+"Language-Team: debian-l10n-dutch <debian-l10n-dutch at lists.debian.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Poedit-Language: Dutch\n"
+
+#. Type: boolean
+#. Description
+#: ../debian-edu-config.templates:1001
+msgid "Should the init.d/update-hostname script run at boot time?"
+msgstr "Wilt u dat het script init.d/update-hostname uitgevoerd wordt tijdens het opstarten van het system?"
+
+#. Type: boolean
+#. Description
+#: ../debian-edu-config.templates:2001
+msgid "Do you want to run enable-nat on your system?"
+msgstr "Wilt u enable-nat uitvoeren op uw systeem?"
+
+#. Type: boolean
+#. Description
+#: ../debian-edu-config.templates:2001
+msgid "The enable-nat script activates NAT for your Thin-Clients and overwrites your iptables rules."
+msgstr "Het Enable-nat script activeert NAT voor uw Thin-Clients en overschrijft uw iptables-regels."
+
diff --git a/debian-edu-config/debian/po/pt.po b/debian-edu-config/debian/po/pt.po
new file mode 100644
index 0000000..d503973
--- /dev/null
+++ b/debian-edu-config/debian/po/pt.po
@@ -0,0 +1,38 @@
+# Portuguese translation of debian-edu-config's debconf messages.
+# Copyright (C) 2007
+# This file is distributed under the same license as the debian-edu-config package.
+# Ricardo Silva <ardoric at gmail.com>, 2007.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: debian-edu-config 0.409\n"
+"Report-Msgid-Bugs-To: debian-edu at lists.debian.org\n"
+"POT-Creation-Date: 2006-09-22 22:06+1000\n"
+"PO-Revision-Date: 2007-03-08 23:00+0000\n"
+"Last-Translator: Ricardo Silva <ardoric at gmail.com>\n"
+"Language-Team: Portuguese <traduz at debianpt.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. Type: boolean
+#. Description
+#: ../debian-edu-config.templates:1001
+msgid "Should the init.d/update-hostname script run at boot time?"
+msgstr "Deve o script init.d/update-hostname correr aquando do arranque?"
+
+#. Type: boolean
+#. Description
+#: ../debian-edu-config.templates:2001
+msgid "Do you want to run enable-nat on your system?"
+msgstr "Deseja correr o script enable-nat no seu sistema?"
+
+#. Type: boolean
+#. Description
+#: ../debian-edu-config.templates:2001
+msgid ""
+"The enable-nat script activates NAT for your Thin-Clients and overwrites "
+"your iptables rules."
+msgstr ""
+"O script enable-nat activa NAT para os seus Clientes-Thin e sobrepõe-se "
+"às suas regras de iptables."
diff --git a/debian-edu-config/debian/po/templates.pot b/debian-edu-config/debian/po/templates.pot
new file mode 100644
index 0000000..1c130ed
--- /dev/null
+++ b/debian-edu-config/debian/po/templates.pot
@@ -0,0 +1,37 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL at ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: debian-edu at lists.debian.org\n"
+"POT-Creation-Date: 2006-09-22 22:06+1000\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Language-Team: LANGUAGE <LL at li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. Type: boolean
+#. Description
+#: ../debian-edu-config.templates:1001
+msgid "Should the init.d/update-hostname script run at boot time?"
+msgstr ""
+
+#. Type: boolean
+#. Description
+#: ../debian-edu-config.templates:2001
+msgid "Do you want to run enable-nat on your system?"
+msgstr ""
+
+#. Type: boolean
+#. Description
+#: ../debian-edu-config.templates:2001
+msgid ""
+"The enable-nat script activates NAT for your Thin-Clients and overwrites "
+"your iptables rules."
+msgstr ""
diff --git a/debian-edu-config/debian/rules b/debian-edu-config/debian/rules
new file mode 100755
index 0000000..67159f7
--- /dev/null
+++ b/debian-edu-config/debian/rules
@@ -0,0 +1,70 @@
+#!/usr/bin/make -f
+# Made with the aid of debmake, by Christoph Lameter,
+# based on the sample debian/rules file for GNU hello by Ian Jackson.
+
+package=debian-edu-config
+
+DESTDIR=`pwd`/debian/debian-edu-config
+
+build:
+	$(checkdir)
+
+	$(MAKE) CFLAGS="-O2 -g -Wall"
+	touch build
+
+clean:
+	$(checkdir)
+	-rm -f build
+	-$(MAKE) clean
+	dh_clean
+
+binary-indep: checkroot build
+	$(checkdir)
+# There are no architecture-independent files to be uploaded
+# generated by this package.  If there were any they would be
+# made here.
+
+binary-arch: checkroot build
+	$(checkdir)
+	dh_testdir
+	dh_testroot
+	install -d $(DESTDIR)
+	cd $(DESTDIR) && install -d `cat ../dirs`
+	$(MAKE) install prefix=/usr DESTDIR=$(DESTDIR)
+	dh_installdebconf
+	dh_installdocs
+	dh_installdirs
+	dh_installcron
+	dh_installmodules
+	dh_installinit --init-script resize_lvm -r --no-start -u"start 32 S ."
+	dh_installinit --init-script open-backdoor
+	# Start it after 91apache
+	dh_installinit --init-script fetch-ldap-cert -r --no-start -u"start 95 2 3 4 5 ."
+	dh_installinit --init-script boot_xconf
+	dh_installinit --init-script enable-nat --no-start
+	dh_installinit --init-script update-hostname
+	dh_installinit --init-script start-wlan
+	dh_installinit --init-script report-reboot -r --no-start
+	dh_installchangelogs
+	#dh_link /usr/share/debian-edu-config/tools/ldapdump.sh /etc/slbackup/pre.d/ldapdump.sh
+	#dh_link /etc/apache2/mods-available/userdir.load /etc/apache2/mods-available/debian-edu-userdir.load
+	dh_link
+	dh_gencontrol
+	dh_strip
+	dh_compress
+	dh_fixperms
+	dh_installdeb
+	dh_md5sums
+	dh_builddeb
+
+define checkdir
+	test -f debian/rules
+endef
+
+binary: binary-indep binary-arch
+
+checkroot:
+	$(checkdir)
+	test root = "`whoami`"
+
+.PHONY: binary binary-arch binary-indep clean checkroot
diff --git a/debian-edu-config/etc/X11/Xsession-debian-edu b/debian-edu-config/etc/X11/Xsession-debian-edu
new file mode 100755
index 0000000..bd7d77c
--- /dev/null
+++ b/debian-edu-config/etc/X11/Xsession-debian-edu
@@ -0,0 +1,102 @@
+#!/bin/sh
+#
+# /etc/X11/Xsession
+#
+# global Xsession file -- used by display managers and xinit (startx)
+
+set -e
+
+message () {
+  # pretty-print messages of arbitrary length
+  echo "$*" | fold -s -w ${COLUMNS:-80} >&2;
+  if [ ! -z "$DISPLAY" ] ; then
+    echo "$*" | fold -s -w ${COLUMNS:-80} | xmessage -file -
+  fi
+}
+
+message_nonl () {
+  # pretty-print messages of arbitrary length (no trailing newline)
+  echo -n "$*" | fold -s -w ${COLUMNS:-80} >&2;
+  if [ ! -z "$DISPLAY" ] ; then
+    echo -n "$*" | fold -s -w ${COLUMNS:-80} | xmessage -file -
+  fi
+}
+
+errormsg () {
+  # exit script with error
+  message "$*"
+  exit 1;
+}
+
+internal_errormsg () {
+  # exit script with error; essentially a "THIS SHOULD NEVER HAPPEN" message
+  message "$*\n"
+          "Please report the package name, version, and the text of the" \
+          "above error message(s) to <debian-x at lists.debian.org>.";
+  exit 1;
+}
+
+run_parts () {
+  # until run-parts --noexec is implemented
+  if [ -z "$1" ]; then
+    internal_errormsg "internal run_parts called without an argument"
+  fi
+  if [ ! -d "$1" ]; then
+    internal_errormsg "internal run_parts called, but $1 does not exist or is not a directory."
+  fi
+  for F in $(ls $1); do
+    if expr "$F" : '[[:alnum:]_-]\+$' > /dev/null 2>&1; then
+      if [ -f "$1/$F" ]; then
+        echo "$1/$F"
+      fi
+    fi
+  done;
+}
+
+# initialize variables for use by all session scripts
+
+OPTIONFILE=/etc/X11/Xsession.options
+
+SYSMODMAP=/etc/X11/Xmodmap
+USRMODMAP=$HOME/.Xmodmap
+SYSRESOURCES=/etc/X11/Xresources
+USRRESOURCES=$HOME/.Xresources
+
+SYSSESSIONDIR=/etc/X11/Xsession.d
+STARTUP=$HOME/.xsession
+ALTSTARTUP=$HOME/.Xsession
+ERRFILE=$HOME/.xsession-errors
+
+# attempt to create an error file; abort if we cannot
+if touch $ERRFILE 2> /dev/null && [ -w $ERRFILE ]; then
+  chmod 600 "$ERRFILE"
+elif ERRFILE=$(tempfile 2> /dev/null); then
+  if ! ln -sf "$ERRFILE" "${TMPDIR:=/tmp}/xsession-$USER"; then
+    message "Xsession: unable to symlink \"$TMPDIR/xsession-$USER\" to" \
+             "\"$ERRFILE\"."
+  fi
+else
+  errormsg "Xsession: unable to create X session log/error file.  Aborting."
+fi
+
+exec > "$ERRFILE" 2>&1
+
+# sanity check; is our session script directory present?
+if [ ! -d "$SYSSESSIONDIR" ]; then
+  errormsg "Xsession: no $SYSSESSIONDIR directory found.  Aborting." >&2
+fi
+
+# use run-parts to source every file in the session directory; we source
+# instead of executing so that the variables and functions defined above
+# are available to the scripts, and so that they can pass variables to each
+# other
+SESSIONFILES=$(run_parts $SYSSESSIONDIR)
+if [ -n "$SESSIONFILES" ]; then
+  for SESSIONFILE in $SESSIONFILES; do
+    . $SESSIONFILE
+  done
+fi
+
+exit 0
+
+# vim:ai:et:sts=2:sw=2:tw=80:
diff --git a/debian-edu-config/etc/X11/Xsession.d/10debian-edu-one-login-per-host b/debian-edu-config/etc/X11/Xsession.d/10debian-edu-one-login-per-host
new file mode 100644
index 0000000..5532457
--- /dev/null
+++ b/debian-edu-config/etc/X11/Xsession.d/10debian-edu-one-login-per-host
@@ -0,0 +1,46 @@
+#!/bin/sh
+# Make sure a given user do not log into the same computer twice.
+# When this is done on an LTSP server, the KDE configuration is likely
+# to be destroyed.
+#
+
+# debug=1
+log() {
+    if [ "$debug" ] ; then
+        echo "$@"
+    fi
+}
+
+limit_logins()
+{
+    num=1
+    numps=0
+    u=$LOGNAME
+    # Do not try to limit the root user
+    if [ "$u" != "root" ] ; then
+	num=`who | cut -d" " -f1 | grep "^$LOGNAME\$" | wc -l`
+    fi
+
+    log "Found $num connections for user $LOGNAME"
+
+    if [ "$num" -gt 1 ] ; then
+	numps=`ps -eu "$LOGNAME" | grep -v -e sleep -e COMMAND|wc -l`
+	num=`expr $numps + 1`
+
+    fi
+    if [ $num -gt 1 ] ; then
+	xmessage -buttons Understood:0 -timeout 30 -center \
+	    "You are not allowed to login at more than _one_ thinclient simultaneously."
+	exit 1
+    fi
+}
+
+# Only enable this if the flag file exists.  When the code is tested
+# and found to work fine, we can enable it for everyone. [pere 2003-02-21]
+# To enable this script you must create an empty file with the command
+# touch /etc/debian-edu/limit-logins
+# [klaus 2003-09-06]
+
+if [ -f /etc/debian-edu/limit-logins ] ; then
+    limit_logins
+fi
diff --git a/debian-edu-config/etc/X11/Xsession.d/10debian-edu-set-umask b/debian-edu-config/etc/X11/Xsession.d/10debian-edu-set-umask
new file mode 100644
index 0000000..967c25e
--- /dev/null
+++ b/debian-edu-config/etc/X11/Xsession.d/10debian-edu-set-umask
@@ -0,0 +1,8 @@
+#!/bin/sh
+
+set_umask ()
+{
+  umask 0002
+}
+
+set_umask
diff --git a/debian-edu-config/etc/apache2/conf.d/debian-edu-config-doc b/debian-edu-config/etc/apache2/conf.d/debian-edu-config-doc
new file mode 100644
index 0000000..451f7f6
--- /dev/null
+++ b/debian-edu-config/etc/apache2/conf.d/debian-edu-config-doc
@@ -0,0 +1,16 @@
+#
+# URL http://<host>/debian-edu-doc giving access to the the contents of the debian-edu-doc package
+# This is linked from the local webpage.
+#
+#
+Alias /debian-edu-doc /usr/share/doc/debian-edu-doc/
+
+<Directory /usr/share/doc/debian-edu-doc/>
+    AllowOverride None
+    Options Indexes FollowSymLinks MultiViews 
+
+    # everyone have access to the docs
+    Order deny,allow
+    Deny from none
+    Allow from all
+</Directory>
diff --git a/debian-edu-config/etc/apache2/mods-available/debian-edu-userdir.conf b/debian-edu-config/etc/apache2/mods-available/debian-edu-userdir.conf
new file mode 100644
index 0000000..21726d6
--- /dev/null
+++ b/debian-edu-config/etc/apache2/mods-available/debian-edu-userdir.conf
@@ -0,0 +1,10 @@
+<IfModule mod_userdir.c>
+        UserDir public_html
+        UserDir disabled root
+
+        <Directory /skole/tjener/home*/*/public_html>
+                AllowOverride FileInfo AuthConfig Limit
+                Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
+        </Directory>
+</IfModule>
+
diff --git a/debian-edu-config/etc/apache2/sites-available/debian-edu-default b/debian-edu-config/etc/apache2/sites-available/debian-edu-default
new file mode 100644
index 0000000..c6d2ebf
--- /dev/null
+++ b/debian-edu-config/etc/apache2/sites-available/debian-edu-default
@@ -0,0 +1,43 @@
+NameVirtualHost *:80
+<VirtualHost *:80>
+	ServerAdmin webmaster at postoffice.intern
+	
+	DocumentRoot /var/www/
+	<Directory />
+		Options FollowSymLinks
+		AllowOverride None
+	</Directory>
+	<Directory /var/www/>
+		Options Indexes FollowSymLinks MultiViews
+		AllowOverride None
+		Order allow,deny
+		allow from all
+	</Directory>
+
+	ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
+	<Directory "/usr/lib/cgi-bin">
+		AllowOverride None
+		Options ExecCGI -MultiViews +SymLinksIfOwnerMatch
+		Order allow,deny
+		Allow from all
+	</Directory>
+
+	ErrorLog /var/log/apache2/error.log
+
+	# Possible values include: debug, info, notice, warn, error, crit,
+	# alert, emerg.
+	LogLevel warn
+
+	CustomLog /var/log/apache2/access.log combined
+	ServerSignature On
+
+    Alias /doc/ "/usr/share/doc/"
+    <Directory "/usr/share/doc/">
+        Options Indexes MultiViews FollowSymLinks
+        AllowOverride None
+        Order deny,allow
+        Deny from all
+        Allow from 127.0.0.0/255.0.0.0 ::1/128
+    </Directory>
+
+</VirtualHost>
diff --git a/debian-edu-config/etc/apache2/sites-available/debian-edu-ssl-default b/debian-edu-config/etc/apache2/sites-available/debian-edu-ssl-default
new file mode 100644
index 0000000..cff9f66
--- /dev/null
+++ b/debian-edu-config/etc/apache2/sites-available/debian-edu-ssl-default
@@ -0,0 +1,48 @@
+Listen 443
+<VirtualHost *:443>
+
+	SSLEngine on
+        SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
+        SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
+
+	ServerAdmin webmaster at postoffice.intern
+	
+	DocumentRoot /var/www/
+	<Directory />
+		Options FollowSymLinks
+		AllowOverride None
+	</Directory>
+	<Directory /var/www/>
+		Options Indexes FollowSymLinks MultiViews
+		AllowOverride None
+		Order allow,deny
+		allow from all
+	</Directory>
+
+	ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
+	<Directory "/usr/lib/cgi-bin">
+		AllowOverride None
+		Options ExecCGI -MultiViews +SymLinksIfOwnerMatch
+		Order allow,deny
+		Allow from all
+	</Directory>
+
+	ErrorLog /var/log/apache2/error.log
+
+	# Possible values include: debug, info, notice, warn, error, crit,
+	# alert, emerg.
+	LogLevel warn
+
+	CustomLog /var/log/apache2/access.log combined
+	ServerSignature On
+
+    Alias /doc/ "/usr/share/doc/"
+    <Directory "/usr/share/doc/">
+        Options Indexes MultiViews FollowSymLinks
+        AllowOverride None
+        Order deny,allow
+        Deny from all
+        Allow from 127.0.0.0/255.0.0.0 ::1/128
+    </Directory>
+
+</VirtualHost>
diff --git a/debian-edu-config/etc/bind/debian-edu/bind9-default b/debian-edu-config/etc/bind/debian-edu/bind9-default
new file mode 100644
index 0000000..f12a127
--- /dev/null
+++ b/debian-edu-config/etc/bind/debian-edu/bind9-default
@@ -0,0 +1,9 @@
+#Defaults file for debian edu
+#symlink this to /etc/default/bind9
+
+#run as the bind user, and use the debian edu config file
+OPTIONS="-u bind -c /etc/bind/debian-edu/named-bind9.conf"
+
+# Set RESOLVCONF=no to not run resolvconf
+RESOLVCONF=yes
+
diff --git a/debian-edu-config/etc/bind/debian-edu/db.10 b/debian-edu-config/etc/bind/debian-edu/db.10
new file mode 100644
index 0000000..990ce2f
--- /dev/null
+++ b/debian-edu-config/etc/bind/debian-edu/db.10
@@ -0,0 +1,30 @@
+;; -*- zone -*-
+$TTL 1H
+@			IN	SOA	domain.intern. hostmaster.intern. (
+				2003080101	; serial
+				8H		; refresh for slaves
+				3H		; retry
+				4W		; expire time at slaves
+				1H		; negative TTL
+				)
+
+				IN	NS	domain.intern.
+
+1.2				IN	PTR	gateway.intern.
+2.2				IN	PTR	tjener.intern.
+
+; Addresses 10.0.2.10-29 is used to name thin client servers
+$GENERATE 0-19 ${10}.2			PTR	ltspserver${0,2}.intern.
+
+; Reserve 10.0.2.30-39 for printers 
+$GENERATE 0-19 ${30}.2  			PTR	printer${0,2}.intern.
+
+; Reserve some addresses for staticly assigned addresses
+$GENERATE 0-49 ${50}.2			PTR	static${0,2}.intern.
+
+; Use GENERATE to make dhcp names under 2.0.10.in-addr.arpa
+$GENERATE 0-155 ${100}.2		PTR	dhcp${0,3}.intern.
+
+; Use GENERATE to make dhcp names under 3.0.10.in-addr.arpa
+$GENERATE 0-243 $.3			PTR	dhcp${156,3}.intern.
+
diff --git a/debian-edu-config/etc/bind/debian-edu/db.192.168 b/debian-edu-config/etc/bind/debian-edu/db.192.168
new file mode 100644
index 0000000..5686bf0
--- /dev/null
+++ b/debian-edu-config/etc/bind/debian-edu/db.192.168
@@ -0,0 +1,17 @@
+;; -*- zone -*-
+$TTL 1H
+@			IN	SOA	domain.intern. hostmaster.intern. (
+				2003080101	; serial
+				8H		; refresh for slaves
+				3H		; retry
+				4W		; expire time at slaves
+				1H		; negative TTL
+				)
+
+				IN	NS	domain.intern.
+
+; Thin clients
+$GENERATE 1-253 $			PTR	ltsp${0,3}.intern.
+
+; The server
+254				IN	PTR	ltspserver.intern.
diff --git a/debian-edu-config/etc/bind/debian-edu/db.intern b/debian-edu-config/etc/bind/debian-edu/db.intern
new file mode 100644
index 0000000..59851bb
--- /dev/null
+++ b/debian-edu-config/etc/bind/debian-edu/db.intern
@@ -0,0 +1,65 @@
+;; -*- zone -*-
+$TTL 1H 
+@			IN	SOA	domain.intern. hostmaster.intern. (
+				2004070101	; serial
+				8H		; refresh for slaves
+				3H		; retry
+				4W		; expire time at slaves
+				1H		; negative TTL
+				)
+
+				IN	NS	domain.intern.
+				IN	MX	10 postoffice.intern.
+;;;;;;;;;;;;;;;;;;;;;;
+; Server with aliases
+;;;;;;;;;;;;;;;;;;;;;;
+tjener				IN	A	10.0.2.2
+				IN	AFSDB	1 tjener.intern.
+syslog				IN	CNAME	tjener
+bootps				IN	CNAME	tjener
+ntp				IN	CNAME	tjener
+homes				IN	CNAME	tjener
+www				IN	CNAME	tjener
+db				IN	CNAME	tjener
+backup				IN	CNAME	tjener
+webcache			IN	CNAME	tjener
+ipp				IN	CNAME	tjener
+ssh				IN	CNAME	tjener
+cfengine			IN	CNAME	tjener
+ltsp				IN	CNAME	tjener
+ldap				IN	CNAME	tjener
+kerberos			IN	CNAME	tjener
+sitesummary			IN	CNAME	tjener
+
+; Nameserver, afsdb and postiffice should be A records
+postoffice			IN	A	10.0.2.2
+domain				IN	A	10.0.2.2
+afsdb				IN	A	10.0.2.2
+				IN	AFSDB	1 afsdb.intern.
+
+; This will often be default gw/router
+gateway				IN	A	10.0.2.1
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+; Other hosts on the 10.0.0.0/8 net
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+; Thin client servers in 
+$GENERATE 0-19 ltspserver${0,2}		A	10.0.2.${10,2}
+
+; Printers in 10.0.2.0/24
+$GENERATE 0-19 printer${0,2}		A	10.0.2.${30}
+
+; Static addresses in 10.0.2/24
+$GENERATE 0-49 static${0,2}		A	10.0.2.${50}
+
+; dhcp names in 10.0.2.0/24 and 10.0.3.0/24
+$GENERATE 0-155 dhcp${0,3}		A	10.0.2.${100}
+$GENERATE 0-243 dhcp${156,3}		A	10.0.3.$
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+; Hosts on the LTSP private network ;
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+; The LTSP server
+ltspserver				A	192.168.0.254
+; The LTSP clients
+$GENERATE 1-253 ltsp${0,3}		A	192.168.0.$
diff --git a/debian-edu-config/etc/bind/debian-edu/named-bind9.conf b/debian-edu-config/etc/bind/debian-edu/named-bind9.conf
new file mode 100644
index 0000000..3c6d548
--- /dev/null
+++ b/debian-edu-config/etc/bind/debian-edu/named-bind9.conf
@@ -0,0 +1,82 @@
+// This is the primary configuration file for the BIND DNS server named.
+//
+// Please read /usr/share/doc/bind/README.Debian for information on the 
+// structure of BIND configuration files in Debian for BIND versions 8.2.1 
+// and later, *BEFORE* you customize this configuration file.
+//
+
+acl skolelinux {
+	// Adding the entire 10.0.0.0/8 even if only a small fraction of
+	// it is used
+	10.0.0.0/8;
+
+	// Ditto for 192.168.0.0/16
+	192.168.0.0/16;
+
+	// localhost
+	127.0.0.0/8;
+};
+
+include "/etc/bind/debian-edu/named.conf.options";
+#include "/var/run/bind/named-debian-edu.options";
+
+include "/etc/bind/rndc.key";
+
+// control where to allow rndc from
+controls {
+	inet 127.0.0.1 allow { 127.0.0.1; } keys { "rndc-key"; }; 
+}; 
+
+// reduce log verbosity on issues outside our control
+logging {
+        category lame-servers { null; };
+};
+
+// prime the server with knowledge of the root servers
+zone "." {
+        type hint;
+        file "/etc/bind/db.root";
+};
+
+// be authoritative for the localhost forward and reverse zones, and for
+// broadcast zones as per RFC 1912
+
+zone "localhost" {
+        type master;
+        file "/etc/bind/db.local";
+};
+
+zone "127.in-addr.arpa" {
+        type master;
+        file "/etc/bind/db.127";
+};
+
+zone "0.in-addr.arpa" {
+        type master;
+        file "/etc/bind/db.0";
+};
+
+zone "255.in-addr.arpa" {
+        type master;
+        file "/etc/bind/db.255";
+};
+
+// Skolelinux zones
+
+zone "0.10.in-addr.arpa" {
+	type master;
+	file "/etc/bind/debian-edu/db.10";
+};
+
+zone "0.168.192.in-addr.arpa" {
+	type master;
+	file "/etc/bind/debian-edu/db.192.168";
+};
+
+zone "intern" {
+	type master;
+	file "/etc/bind/debian-edu/db.intern";
+};
+
+// add entries for other zones below here
+
diff --git a/debian-edu-config/etc/bind/debian-edu/named.conf.options b/debian-edu-config/etc/bind/debian-edu/named.conf.options
new file mode 100644
index 0000000..11f7b3d
--- /dev/null
+++ b/debian-edu-config/etc/bind/debian-edu/named.conf.options
@@ -0,0 +1,42 @@
+options {
+        directory "/var/cache/bind";
+
+        // If there is a firewall between you and nameservers you want
+        // to talk to, you might need to uncomment the query-source
+        // directive below.  Previous versions of BIND always asked
+        // questions using port 53, but BIND 8.1 and later use an unprivileged
+        // port by default.
+
+        // query-source address * port 53;
+
+	// If your ISP provided one or more IP addresses for stable 
+	// nameservers, you probably want to use them as forwarders.  
+	// Uncomment the following block, and insert the addresses replacing 
+	// the all-0's placeholder.
+
+	// forwarders {
+	// By special request from the good people inside Skoleetaten i
+	// Oslo:
+	//      193.156.192.40;
+	//      193.156.192.50;
+	// Skoleetaten i Oslo end of block
+	//      0.0.0.0;
+	// };
+
+	// Limiting access to skolelinux hosts
+	allow-recursion {
+		skolelinux;
+	};
+	allow-transfer {
+		skolelinux;
+	};
+	allow-query {
+		skolelinux;
+	};
+	
+	version "BIND (Skolelinux)";
+
+	auth-nxdomain no; # conform to RFC1035
+	provide-ixfr yes;
+};
+
diff --git a/debian-edu-config/etc/cfengine/cfservd.conf b/debian-edu-config/etc/cfengine/cfservd.conf
new file mode 100644
index 0000000..bec49e8
--- /dev/null
+++ b/debian-edu-config/etc/cfengine/cfservd.conf
@@ -0,0 +1,23 @@
+control:
+	server = ( tjener.intern )
+	base = ( "/etc/cfengine" )
+
+	domain = ( intern )
+	cfrunCommand = ( "/usr/sbin/cfagent" )
+	MaxConnections = ( 15 )
+	MultipleConnections = ( true )
+	IfElapsed = ( 60 )
+	DenyBadClocks = ( false )
+	AllowUsers = ( root )
+	TrustKeysFrom = ( 10.0.2.0/23 )
+	AllowConnectionsFrom = ( 10.0.2.0/23 )
+
+grant:
+	# The cfrunCommand must be shared in order for the
+	# server to execute it.
+	$(cfrunCommand)		$(server)
+
+	# This directory should be shared on the server so that
+	# clients can download scripts. So if this is the server,
+	# uncomment the following line.
+	#$(base)/inputs		*.intern
diff --git a/debian-edu-config/etc/cfengine/inputs/cfagent.conf b/debian-edu-config/etc/cfengine/inputs/cfagent.conf
new file mode 100644
index 0000000..c9a55f1
--- /dev/null
+++ b/debian-edu-config/etc/cfengine/inputs/cfagent.conf
@@ -0,0 +1,18 @@
+#
+# The whole inputs/ directory gets copied to clients. This cfagent.conf
+# is then executed.
+#
+
+control:
+	access			= ( root )
+	sysadm			= ( root )
+	adminfiles		= ( /etc/cfengine )
+
+	actionsequence = (
+		links
+	)
+
+
+# Just a simple little check for a default setup
+links:
+	/dev/core	->	/proc/kcore
diff --git a/debian-edu-config/etc/cfengine/update.conf b/debian-edu-config/etc/cfengine/update.conf
new file mode 100644
index 0000000..48b32e1
--- /dev/null
+++ b/debian-edu-config/etc/cfengine/update.conf
@@ -0,0 +1,34 @@
+###############################################################################
+#
+# update.conf - ensure that the inputs and binaries in /etc/cfengine are
+# synced to those on the server.
+# 
+# This copies the cfagent.conf and inputs directory from the cfengine
+# server.
+#
+###############################################################################
+
+control:
+	actionsequence = ( copy links )
+	DefaultCopyType = ( checksum )
+
+	cfhost = ( cfservd.intern )
+	localdir = ( /etc/cfengine )
+	serverdir = ( /etc/cfengine )
+	mode = ( 700 )
+	fowner = ( root )
+	fgroup = ( root )
+
+copy:
+	$(serverdir)/inputs
+		dest=$(localdir)/inputs
+		recurse=inf
+		owner=$(fowner) group=$(fgroup)
+		mode=$(mode)
+		exclude=*~
+		exclude=#*
+		server=$(cfhost)
+		trustkey=true
+
+links:
+	$(localdir)/cfagent.conf ->! $(localdir)/inputs/cfagent.conf
diff --git a/debian-edu-config/etc/courier/authldaprc-debian-edu b/debian-edu-config/etc/courier/authldaprc-debian-edu
new file mode 100644
index 0000000..4160499
--- /dev/null
+++ b/debian-edu-config/etc/courier/authldaprc-debian-edu
@@ -0,0 +1,30 @@
+## authldaprc - skolelinux
+
+LDAP_URI ldap://ldap
+
+LDAP_BASEDN		ou=People,dc=skole,dc=skolelinux,dc=no
+
+LDAP_TIMEOUT		10
+LDAP_AUTHBIND		1
+
+LDAP_MAIL		uid
+# LDAP_DOMAIN		example.com
+
+LDAP_HOMEDIR		mailMessageStore
+LDAP_MAILDIR		mailMessageStore
+
+# LDAP_MAILDIRQUOTA	maildirQuota
+
+LDAP_FULLNAME		cn
+
+# If we deliver on the server
+LDAP_GLOB_UID         mail
+LDAP_GLOB_GID         mail
+
+## If we deliver to the user homedir
+#LDAP_UID		uidNumber
+#LDAP_GID		gidNumber
+
+LDAP_DEREF		never
+
+LDAP_TLS		1
diff --git a/debian-edu-config/etc/courier/imapd-debian-edu.cnf b/debian-edu-config/etc/courier/imapd-debian-edu.cnf
new file mode 100644
index 0000000..2979d5f
--- /dev/null
+++ b/debian-edu-config/etc/courier/imapd-debian-edu.cnf
@@ -0,0 +1,22 @@
+
+RANDFILE = /usr/lib/courier/imapd.rand
+
+[ req ]
+default_bits = 1024
+encrypt_key = yes
+distinguished_name = req_dn
+x509_extensions = cert_type
+prompt = no
+
+[ req_dn ]
+C=NO
+ST=NA
+L=Skolen
+O=Courier Mail Server
+OU=Automatically-generated IMAP SSL key
+CN=postoffice
+emailAddress=postmaster at intern
+
+
+[ cert_type ]
+nsCertType = server
diff --git a/debian-edu-config/etc/cups/cupsd-debian-edu.conf b/debian-edu-config/etc/cups/cupsd-debian-edu.conf
new file mode 100644
index 0000000..3d3a6f7
--- /dev/null
+++ b/debian-edu-config/etc/cups/cupsd-debian-edu.conf
@@ -0,0 +1,723 @@
+#
+# "$Id$"
+#
+#   Sample configuration file for the Common UNIX Printing System (CUPS)
+#   scheduler.
+#
+#   Copyright 1997-2002 by Easy Software Products, all rights reserved.
+#
+#   These coded instructions, statements, and computer programs are the
+#   property of Easy Software Products and are protected by Federal
+#   copyright law.  Distribution and use rights are outlined in the file
+#   "LICENSE.txt" which should have been included with this file.  If this
+#   file is missing or damaged please contact Easy Software Products
+#   at:
+#
+#       Attn: CUPS Licensing Information
+#       Easy Software Products
+#       44141 Airport View Drive, Suite 204
+#       Hollywood, Maryland 20636-3111 USA
+#
+#       Voice: (301) 373-9603
+#       EMail: cups-info at cups.org
+#         WWW: http://www.cups.org
+#
+
+########################################################################
+#                                                                      #
+# This is the CUPS configuration file.  If you are familiar with       #
+# Apache or any of the other popular web servers, we've followed the   #
+# same format.  Any configuration variable used here has the same      #
+# semantics as the corresponding variable in Apache.  If we need       #
+# different functionality then a different name is used to avoid       #
+# confusion...                                                         #
+#                                                                      #
+########################################################################
+
+
+########
+######## Server Identity
+########
+
+#
+# ServerName: the hostname of your server, as advertised to the world.
+# By default CUPS will use the hostname of the system.
+#
+# To set the default server used by clients, see the client.conf file.
+#
+
+#ServerName myhost.domain.com
+
+#
+# ServerAdmin: the email address to send all complaints/problems to.
+# By default CUPS will use "root at hostname".
+#
+
+#ServerAdmin root at your.domain.com
+
+
+########
+######## Server Options
+########
+
+#
+# AccessLog: the access log file; if this does not start with a leading /
+# then it is assumed to be relative to ServerRoot.  By default set to
+# "/var/log/cups/access_log"
+#
+# You can also use the special name "syslog" to send the output to the
+# syslog file or daemon.
+#
+
+#AccessLog /var/log/cups/access_log
+
+#
+# Classification: the classification level of the server.  If set, this
+# classification is displayed on all pages, and raw printing is disabled.
+# The default is the empty string.
+#
+
+#Classification classified
+#Classification confidential
+#Classification secret
+#Classification topsecret
+#Classification unclassified
+
+#
+# ClassifyOverride: whether to allow users to override the classification
+# on printouts. If enabled, users can limit banner pages to before or
+# after the job, and can change the classification of a job, but cannot
+# completely eliminate the classification or banners.
+#
+# The default is off.
+#
+
+#ClassifyOverride off
+
+#
+# DataDir: the root directory for the CUPS data files.
+# By default "/usr/share/cups".
+#
+
+#DataDir /usr/share/cups
+
+#
+# DefaultCharset: the default character set to use. If not specified,
+# defaults to "utf-8".  Note that this can also be overridden in
+# HTML documents...
+#
+
+#DefaultCharset utf-8
+
+#
+# DefaultLanguage: the default language if not specified by the browser.
+# If not specified, the current locale is used.
+#
+
+#DefaultLanguage en
+
+#
+# DocumentRoot: the root directory for HTTP documents that are served.
+# By default "/usr/share/cups/doc-root".
+#
+
+#DocumentRoot /usr/share/cups/doc-root
+
+#
+# ErrorLog: the error log file; if this does not start with a leading /
+# then it is assumed to be relative to ServerRoot.  By default set to
+# "/var/log/cups/error_log"
+#
+# You can also use the special name "syslog" to send the output to the
+# syslog file or daemon.
+#
+
+#ErrorLog /var/log/cups/error_log
+
+#
+# FontPath: the path to locate all font files (currently only for pstoraster)
+# By default "/usr/share/cups/fonts".
+#
+
+#FontPath /usr/share/cups/fonts
+
+#
+# LogLevel: controls the number of messages logged to the ErrorLog
+# file and can be one of the following:
+#
+#     debug2	Log everything.
+#     debug	Log almost everything.
+#     info      Log all requests and state changes.
+#     warn      Log errors and warnings.
+#     error     Log only errors.
+#     none      Log nothing.
+#
+
+LogLevel info
+
+#
+# MaxLogSize: controls the maximum size of each log file before they are
+# rotated.  Defaults to 1048576 (1MB).  Set to 0 to disable log rotating.
+#
+
+#MaxLogSize 0
+
+#
+# PageLog: the page log file; if this does not start with a leading /
+# then it is assumed to be relative to ServerRoot.  By default set to
+# "/var/log/cups/page_log"
+#
+# You can also use the special name "syslog" to send the output to the
+# syslog file or daemon.
+#
+
+#PageLog /var/log/cups/page_log
+
+#
+# PreserveJobHistory: whether or not to preserve the job history after a
+# job is completed, cancelled, or stopped.  Default is Yes.
+#
+
+#PreserveJobHistory Yes
+
+#
+# PreserveJobFiles: whether or not to preserve the job files after a
+# job is completed, cancelled, or stopped.  Default is No.
+#
+
+#PreserveJobFiles No
+
+#
+# AutoPurgeJobs: automatically purge jobs when not needed for quotas.
+# Default is No.
+#
+
+#AutoPurgeJobs No
+
+#
+# MaxJobs: maximum number of jobs to keep in memory (active and completed.)
+# Default is 500; the value 0 is used for no limit.
+#
+
+#MaxJobs 500
+
+#
+# Printcap: the name of the printcap file.  Default is /etc/printcap.
+# Leave blank to disable printcap file generation.
+#
+
+#Printcap /etc/printcap
+
+#
+# PrintcapFormat: the format of the printcap file, currently either
+# BSD or Solaris.  The default is "BSD".
+#
+
+#PrintcapFormat BSD
+#PrintcapFormat Solaris
+
+#
+# PrintcapGUI: the name of the GUI options panel program to associate
+# with print queues under IRIX.  The default is "/usr/bin/glpoptions"
+# from ESP Print Pro.
+#
+# This option is only used under IRIX; the options panel program
+# must accept the "-d printer" and "-o options" options and write
+# the selected printer options back to stdout on completion.
+#
+
+#PrintcapGUI /usr/bin/glpoptions
+
+#
+# RequestRoot: the directory where request files are stored.
+# By default "/var/spool/cups".
+#
+
+#RequestRoot /var/spool/cups
+
+#
+# RemoteRoot: the name of the user assigned to unauthenticated accesses
+# from remote systems.  By default "remroot".
+#
+
+#RemoteRoot remroot
+
+#
+# ServerBin: the root directory for the scheduler executables.
+# By default "/usr/lib/cups".
+#
+
+#ServerBin /usr/lib/cups
+
+#
+# ServerRoot: the root directory for the scheduler.
+# By default "/etc/cups".
+#
+
+#ServerRoot /etc/cups
+
+
+########
+######## Encryption Support
+########
+
+#
+# ServerCertificate: the file to read containing the server's certificate.
+# Defaults to "/etc/cups/ssl/server.crt".
+#
+
+#ServerCertificate /etc/cups/ssl/server.crt
+
+#
+# ServerKey: the file to read containing the server's key.
+# Defaults to "/etc/cups/ssl/server.key".
+#
+
+#ServerKey /etc/cups/ssl/server.key
+
+
+########
+######## Filter Options
+########
+
+#
+# User/Group: the user and group the server runs under.  Normally this
+# must be lp and sys, however you can configure things for another
+# user or group as needed.
+#
+# Note: the server must be run initially as root to support the
+# default IPP port of 631.  It changes users whenever an external
+# program is run, or if the RunAsUser directive is specified...
+#
+
+User lp
+Group sys
+
+#
+# RIPCache: the amount of memory that each RIP should use to cache
+# bitmaps.  The value can be any real number followed by "k" for
+# kilobytes, "m" for megabytes, "g" for gigabytes, or "t" for tiles
+# (1 tile = 256x256 pixels.)  Defaults to "8m" (8 megabytes).
+#
+
+#RIPCache 8m
+
+#
+# TempDir: the directory to put temporary files in.  This directory must be
+# writable by the user defined above!  Defaults to "/var/spool/cups/tmp" or
+# the value of the TMPDIR environment variable.
+#
+
+#TempDir /var/spool/cups/tmp
+
+#
+# FilterLimit: sets the maximum cost of all job filters that can be run
+# at the same time.  A limit of 0 means no limit.  A typical job may need
+# a filter limit of at least 200; limits less than the minimum required
+# by a job force a single job to be printed at any time.
+#
+# The default limit is 0 (unlimited).
+#
+
+#FilterLimit 0
+
+########
+######## Network Options
+########
+
+#
+# Ports/addresses that we listen to.  The default port 631 is reserved
+# for the Internet Printing Protocol (IPP) and is what we use here.
+#
+# You can have multiple Port/Listen lines to listen to more than one
+# port or address, or to restrict access:
+#
+#    Port 80
+#    Port 631
+#    Listen hostname
+#    Listen hostname:80
+#    Listen hostname:631
+#    Listen 1.2.3.4
+#    Listen 1.2.3.4:631
+# 
+# NOTE: Unfortunately, most web browsers don't support TLS or HTTP Upgrades
+# for encryption.  If you want to support web-based encryption you'll
+# probably need to listen on port 443 (the "https" port...)
+#
+
+#Port 80
+#Port 443
+Port 631
+
+#
+# HostNameLookups: whether or not to do lookups on IP addresses to get a
+# fully-qualified hostname.  This defaults to Off for performance reasons...
+#
+
+#HostNameLookups Off
+
+#
+# KeepAlive: whether or not to support the Keep-Alive connection
+# option.  Default is on.
+#
+
+#KeepAlive On
+
+#
+# KeepAliveTimeout: the timeout before Keep-Alive connections are
+# automatically closed.  Default is 60 seconds.
+#
+
+#KeepAliveTimeout 60
+
+#
+# MaxClients: controls the maximum number of simultaneous clients that
+# will be handled.  Defaults to 100.
+#
+
+#MaxClients 100
+
+#
+# MaxRequestSize: controls the maximum size of HTTP requests and print files.
+# Set to 0 to disable this feature (defaults to 0.)
+#
+
+#MaxRequestSize 0
+
+#
+# Timeout: the timeout before requests time out.  Default is 300 seconds.
+#
+
+#Timeout 300
+
+
+########
+######## Browsing Options
+########
+
+#
+# Browsing: whether or not to broadcast and/or listen for CUPS printer
+# information on the network.  Enabled by default.
+#
+
+#Browsing On
+
+#
+# BrowseProtocols: which protocols to use for browsing.  Can be
+# any of the following separated by whitespace and/or commas:
+#
+#     all  - Use all supported protocols.
+#     cups - Use the CUPS browse protocol.
+#     slp  - Use the SLPv2 protocol.
+#
+# The default is "cups".
+#
+# NOTE: If you choose to use SLPv2, it is *strongly* recommended that
+#       you have at least one SLP Directory Agent (DA) on your
+#       network.  Otherwise, browse updates can take several seconds,
+#       during which the scheduler will not response to client
+#       requests.
+#
+
+#BrowseProtocols cups
+
+#
+# BrowseAddress: specifies a broadcast address to be used.  By
+# default browsing information is not sent!
+#
+# Note: HP-UX does not properly handle broadcast unless you have a
+# Class A, B, C, or D netmask (i.e. no CIDR support).
+#
+# Note: Using the "global" broadcast address (255.255.255.255) will
+# activate a Linux demand-dial link with the default configuration.
+# If you have a LAN as well as the dial-up link, use the LAN's
+# broadcast address.
+#
+
+#BrowseAddress x.y.z.255
+#BrowseAddress x.y.255.255
+#BrowseAddress x.255.255.255
+BrowseAddress 255.255.255.255
+
+#
+# BrowseShortNames: whether or not to use "short" names for remote printers
+# when possible (e.g. "printer" instead of "printer at host".)  Enabled by
+# default.
+#
+
+#BrowseShortNames Yes
+
+#
+# BrowseAllow: specifies an address mask to allow for incoming browser
+# packets. The default is to allow packets from all addresses.
+#
+# BrowseDeny: specifies an address mask to deny for incoming browser
+# packets. The default is to deny packets from no addresses.
+#
+# Both "BrowseAllow" and "BrowseDeny" accept the following notations for
+# addresses:
+#
+#     All
+#     None
+#     *.domain.com
+#     .domain.com
+#     host.domain.com
+#     nnn.*
+#     nnn.nnn.*
+#     nnn.nnn.nnn.*
+#     nnn.nnn.nnn.nnn
+#     nnn.nnn.nnn.nnn/mm
+#     nnn.nnn.nnn.nnn/mmm.mmm.mmm.mmm
+#
+# The hostname/domainname restrictions only work if you have turned hostname
+# lookups on!
+#
+
+#BrowseAllow All
+#BrowseDeny address
+
+#
+# BrowseInterval: the time between browsing updates in seconds.  Default
+# is 30 seconds.
+#
+# Note that browsing information is sent whenever a printer's state changes
+# as well, so this represents the maximum time between updates.
+#
+# Set this to 0 to disable outgoing broadcasts so your local printers are
+# not advertised but you can still see printers on other hosts.
+#
+
+#BrowseInterval 30
+
+#
+# BrowseOrder: specifies the order of BrowseAllow/BrowseDeny comparisons.
+#
+
+#BrowseOrder allow,deny
+#BrowseOrder deny,allow
+
+#
+# BrowsePoll: poll the named server(s) for printers
+#
+
+#BrowsePoll address:port
+
+#
+# BrowsePort: the port used for UDP broadcasts.  By default this is
+# the IPP port; if you change this you need to do it on all servers.
+# Only one BrowsePort is recognized.
+#
+
+#BrowsePort 631
+
+#
+# BrowseRelay: relay browser packets from one address/network to another.
+#
+
+#BrowseRelay source-address destination-address
+
+#
+# BrowseTimeout: the timeout for network printers - if we don't
+# get an update within this time the printer will be removed
+# from the printer list.  This number definitely should not be
+# less the BrowseInterval value for obvious reasons.  Defaults
+# to 300 seconds.
+#
+
+#BrowseTimeout 300
+
+#
+# ImplicitClasses: whether or not to use implicit classes.
+#
+# Printer classes can be specified explicitly in the classes.conf
+# file, implicitly based upon the printers available on the LAN, or
+# both.
+#
+# When ImplicitClasses is On, printers on the LAN with the same name
+# (e.g. Acme-LaserPrint-1000) will be put into a class with the same
+# name. This allows you to setup multiple redundant queues on a LAN
+# without a lot of administrative difficulties.  If a user sends a
+# job to Acme-LaserPrint-1000, the job will go to the first available
+# queue.
+#
+# Enabled by default.
+#
+
+#ImplicitClasses On
+
+#
+# ImplicitAnyClasses: whether or not to create "AnyPrinter" implicit
+# classes.
+#
+# When ImplicitAnyClasses is On and a local queue of the same name
+# exists, e.g. "printer", "printer at server1", "printer at server1", then
+# an implicit class called "Anyprinter" is created instead.
+#
+# When ImplicitAnyClasses is Off, implicit classes are not created
+# when there is a local queue of the same name.
+#
+# Disabled by default.
+#
+
+#ImplicitAnyCLasses Off
+
+#
+# HideImplicitMembers: whether or not to show the members of an
+# implicit class.
+#
+# When HideImplicitMembers is On, any remote printers that are
+# part of an implicit class are hidden from the user, who will
+# then only see a single queue even though many queues will be
+# supporting the implicit class.
+#
+# Enabled by default.
+#
+
+#HideImplicitMembers On
+
+
+########
+######## Security Options
+########
+
+#
+# SystemGroup: the group name for "System" (printer administration)
+# access.  The default varies depending on the operating system, but
+# will be "sys", "system", or "root" (checked for in that order.)
+#
+
+SystemGroup lpadmin
+
+#
+# Access permissions for each directory served by the scheduler.
+# Locations are relative to DocumentRoot...
+#
+# AuthType: the authorization to use:
+#
+#    None   - Perform no authentication
+#    Basic  - Perform authentication using the HTTP Basic method.
+#    Digest - Perform authentication using the HTTP Digest method.
+#
+#    (Note: local certificate authentication can be substituted by
+#           the client for Basic or Digest when connecting to the
+#           localhost interface)
+#
+# AuthClass: the authorization class; currently only "Anonymous", "User",
+# "System" (valid user belonging to group SystemGroup), and "Group"
+# (valid user belonging to the specified group) are supported.
+#
+# AuthGroupName: the group name for "Group" authorization.
+#
+# Order: the order of Allow/Deny processing.
+#
+# Allow: allows access from the specified hostname, domain, IP address, or
+# network.
+#
+# Deny: denies access from the specified hostname, domain, IP address, or
+# network.
+#
+# Both "Allow" and "Deny" accept the following notations for addresses:
+#
+#     All
+#     None
+#     *.domain.com
+#     .domain.com
+#     host.domain.com
+#     nnn.*
+#     nnn.nnn.*
+#     nnn.nnn.nnn.*
+#     nnn.nnn.nnn.nnn
+#     nnn.nnn.nnn.nnn/mm
+#     nnn.nnn.nnn.nnn/mmm.mmm.mmm.mmm
+#
+# The host and domain address require that you enable hostname lookups
+# with "HostNameLookups On" above.
+#
+# Encryption: whether or not to use encryption; this depends on having
+# the OpenSSL library linked into the CUPS library and scheduler.
+#
+# Possible values:
+#
+#     Always       - Always use encryption (SSL)
+#     Never        - Never use encryption
+#     Required     - Use TLS encryption upgrade
+#     IfRequested  - Use encryption if the server requests it
+#
+# The default value is "IfRequested".
+#
+
+<Location />
+Order Deny,Allow
+Deny From All
+Allow From 127.0.0.1
+Allow From All
+</Location>
+
+#<Location /classes>
+#
+# You may wish to limit access to printers and classes, either with Allow
+# and Deny lines, or by requiring a username and password.
+#
+#</Location>
+
+#<Location /classes/name>
+#
+# You may wish to limit access to printers and classes, either with Allow
+# and Deny lines, or by requiring a username and password.
+#
+#</Location>
+
+#<Location /printers>
+#
+# You may wish to limit access to printers and classes, either with Allow
+# and Deny lines, or by requiring a username and password.
+#
+#</Location>
+
+#<Location /printers/name>
+#
+# You may wish to limit access to printers and classes, either with Allow
+# and Deny lines, or by requiring a username and password.
+#
+
+## Anonymous access (default)
+#AuthType None
+
+## Require a username and password (Basic authentication)
+#AuthType Basic
+#AuthClass User
+
+## Require a username and password (Digest/MD5 authentication)
+#AuthType Digest
+#AuthClass User
+
+## Restrict access to local domain
+#Order Deny,Allow
+#Deny From All
+#Allow From .mydomain.com
+#</Location>
+
+<Location /admin>
+#
+# You definitely will want to limit access to the administration functions.
+# The default configuration requires a local connection from a user who
+# is a member of the system group to do any admin tasks.  You can change
+# the group name using the SystemGroup directive.
+#
+
+AuthType Basic
+AuthClass System
+
+## Restrict access to local domain
+Order Deny,Allow
+Deny From All
+Allow From 127.0.0.1
+Allow From 10.0.2.2
+#comment this to allow access to cups admin from tjener only.
+Allow From 10.0.2.0/23
+Encryption Required
+</Location>
+
+#
+# End of "$Id$".
+#
diff --git a/debian-edu-config/etc/debian-edu/hd-warn.conf b/debian-edu-config/etc/debian-edu/hd-warn.conf
new file mode 100644
index 0000000..319cf52
--- /dev/null
+++ b/debian-edu-config/etc/debian-edu/hd-warn.conf
@@ -0,0 +1,6 @@
+# Config file for skolelinux-hd-warn
+# $Id: hd-warn.conf,v 1.1 2004/04/25 19:56:24 pere Exp $
+
+ALLOW="
+90 /usr
+"
diff --git a/debian-edu-config/etc/debian-edu/lts.conf.dist b/debian-edu-config/etc/debian-edu/lts.conf.dist
new file mode 100644
index 0000000..3614119
--- /dev/null
+++ b/debian-edu-config/etc/debian-edu/lts.conf.dist
@@ -0,0 +1,5 @@
+#check /opt/ltsp/i386/usr/sahre/doc/ltsp-client for a better example lts.conf file
+[Default]
+	NBD_SWAP=Y
+	SOUND=Y
+	LOCALDEV=Y
diff --git a/debian-edu-config/etc/debian-edu/nightkill.conf b/debian-edu-config/etc/debian-edu/nightkill.conf
new file mode 100644
index 0000000..1267129
--- /dev/null
+++ b/debian-edu-config/etc/debian-edu/nightkill.conf
@@ -0,0 +1 @@
+KEEPONES="root USER daemon"
diff --git a/debian-edu-config/etc/default/backdoor b/debian-edu-config/etc/default/backdoor
new file mode 100644
index 0000000..69686c0
--- /dev/null
+++ b/debian-edu-config/etc/default/backdoor
@@ -0,0 +1,18 @@
+# 
+# See /etc/init.d/open-backdoor for more information.
+# 
+# You must fill all 3 variables below to enable the open-backdoor 
+# init script.
+# RPORT is the remote port we will listen on at the remote host.
+#�RHOST is the remote host name or ip address. be sure to connect to
+#  this host at least once so that the ssh key of the remote server 
+#  get accepted.
+# RUSER is the unix username we will connect to on the remote host.
+# 
+# there is no sane default values, so this feature's 
+# factory setting is 'disabled' 
+
+#RPORT=222
+#RHOST=example.com
+#RUSER=joe
+
diff --git a/debian-edu-config/etc/desktop-profiles/debian-edu-config.listing b/debian-edu-config/etc/desktop-profiles/debian-edu-config.listing
new file mode 100644
index 0000000..1d1aa91
--- /dev/null
+++ b/debian-edu-config/etc/desktop-profiles/debian-edu-config.listing
@@ -0,0 +1,22 @@
+# Settings common to all debian-edu machines:
+# - Disable kpersonalizer startup on initial login.  
+# - Disable warning dialog box presented when the sound card is missing. 
+# - Configure printsystem to use cups
+# - Enable javascript for konqueror
+# - Accept cookies by default
+# - Add mime-type for ms-word documents (*.doc;*.DOC;*.dot;*.DOT)
+edu-common;KDE;/usr/share/debian-edu/common;0;;Settings common to all debian-edu profiles
+
+# Settings common to all debian-edu machines in a network (i.e. all profiles but 
+# education-standalone):
+# - have kde-apps use proxy provided by the school-network and enforcce through the kiosk framework
+#
+# First condition is meant to insure we're on a debian-edu network
+# (assumption: debian-edu-config on non-standalone = in debian-edu network)
+edu-net-kde3;KDE;/usr/share/debian-edu/networked-kde3;10;$(dpkg --get-selections education-standalone 2>&1 | grep -v " install$");For kde3-machines in debian-edu network
+
+# Settings for the thin clients, to enable esd sound
+edu-ltsp;KDE;/usr/share/debian-edu/thin-client;20;$([ "$LTSP_CLIENT" ] && [ "$ESPEAKER" ] && echo 1);Settings common to all debian-edu LTSP clients
+
+# eye candy and restrictions for the student desktops
+edu-students;KDE;/usr/share/debian-edu/students;30;students;Settings for the students
diff --git a/debian-edu-config/etc/dhclient-exit-hooks b/debian-edu-config/etc/dhclient-exit-hooks
new file mode 100644
index 0000000..b73a6d9
--- /dev/null
+++ b/debian-edu-config/etc/dhclient-exit-hooks
@@ -0,0 +1,4 @@
+# Set hostname when DHCP got a new IP address
+
+# Removed, as this file is executed before the IP address is received.
+#/usr/sbin/set-hostname-from-ip
diff --git a/debian-edu-config/etc/dhcp3/dhcpd-debian-edu.conf b/debian-edu-config/etc/dhcp3/dhcpd-debian-edu.conf
new file mode 100644
index 0000000..876c366
--- /dev/null
+++ b/debian-edu-config/etc/dhcp3/dhcpd-debian-edu.conf
@@ -0,0 +1,207 @@
+#
+# Debian Edu configuration masterfile
+#
+# Contents of this file should be in
+#
+#               /etc/dhcp3/dhcpd.conf
+#
+#
+# DHCP configuration for Debian Edu server 
+#
+# $Id$
+
+# New option necessary for dhcp3
+ddns-update-style         none;
+#WPAD autoconfiguration
+option wpad-url code 252 = text;
+authoritative;
+
+shared-network INTERNAL {
+
+  default-lease-time 1800; #30 m 
+  max-lease-time     3600; #1 h
+
+  option subnet-mask            255.255.254.0;
+  option broadcast-address      10.0.3.255;
+  option routers                gateway;
+  option domain-name-servers    tjener;
+  option domain-name            "intern";
+  option ntp-servers            ntp;
+  option wpad-url		"http://10.0.2.2/wpad.dat";
+
+  # Log to the main server
+  option log-servers            tjener;
+
+#  If you use window clients, comment out the following lines.
+#  Samba wins support has to be turned on (wins support = yes)
+#
+#  # WINS server
+  option netbios-name-servers	tjener;
+  option netbios-node-type		8;
+
+
+  #Automatic assigning addresses to workstations
+  #There is room for approxmatly 400 workstations.
+
+  subnet 10.0.2.0 netmask 255.255.254.0 {
+     range 10.0.2.100 10.0.3.242;
+  }
+    
+  # Group defines thinclientservers
+  # Add the hardware address to the thinclientserver here
+  # To add an other thinclientserver, use "host ltspserver00" as an example
+  # fixed address area for thin client servers is 10.0.2.10 to 10.0.2.29
+
+  group {
+    host ltspserver00 {
+       hardware ethernet 00:00:00:00:00:00;
+       fixed-address ltspserver00;
+    }
+    
+    host ltspserver01 {
+       hardware ethernet 00:00:00:00:00:00;
+       fixed-address ltspserver01;
+    }
+    # 20 printers are defined as printer00 to printer19 on 10.0.2.30-49 
+    # Provide a static address using dhcp by adding their MAC addresses here
+    
+    host printer00 {
+       hardware ethernet 00:00:00:00:00:00;
+       fixed-address printer00;
+    }
+
+    host printer01 {
+       hardware ethernet 00:00:00:00:00:00;
+       fixed-address printer01;
+    }
+
+    host printer02 {
+       hardware ethernet 00:00:00:00:00:00;
+       fixed-address printer02;
+    }
+
+    host printer03 {
+       hardware ethernet 00:00:00:00:00:00;
+       fixed-address printer03;
+    }
+    # 50 workstations are defined as static00 to static49 on 10.0.2.50-99 
+    # Provide a static address using dhcp by adding their MAC addresses here
+    
+    host static00 {
+       hardware ethernet 00:00:00:00:00:00;
+       fixed-address static00;
+    }
+    host static01 {
+       hardware ethernet 00:00:00:00:00:00;
+       fixed-address static01;
+    }
+    host static02 {
+       hardware ethernet 00:00:00:00:00:00;
+       fixed-address static02;
+    }
+    host static03 {
+       hardware ethernet 00:00:00:00:00:00;
+       fixed-address static03;
+    }
+  }
+}
+
+shared-network THINCLIENTS {
+  default-lease-time            432000;    # 5 d
+  max-lease-time                432000;    # 5 d
+
+  option subnet-mask            255.255.255.0;
+  option broadcast-address      192.168.0.255;
+  option routers                ltspserver;
+  option domain-name-servers    tjener;
+  option domain-name            "intern";
+  option root-path              "/opt/ltsp/i386";
+
+  option ntp-servers            ntp;
+
+  # Log to the LTSP server, and let it forward the messages.
+  option log-servers            ltspserver;
+
+  filename              "/var/lib/tftpboot/ltsp/i386/pxelinux.0";
+
+  subnet 192.168.0.0 netmask 255.255.255.0 {
+     # At least some thin clients will work out of the box, appearing as
+     # ltsp200 to ltsp253.
+     # We still recommend defining fixed mac adress to ip adress mappings,
+     # cf. examples and explanations below.
+     range 192.168.0.200 192.168.0.253 ;
+     # pxelinux in etch is very slow without this setting.
+     next-server 192.168.0.254;
+  }
+
+  group {
+    next-server 192.168.0.254;
+    use-host-decl-names       on;
+    option log-servers        ltspserver ;
+
+##################################################################################
+#
+# We recommend defining fixed mac adress (a.k.a. hardware ethernet adress) to
+# ip adress mappings.
+#
+# Entries for actual use (ltsp010 to ltsp019) below:
+#
+# NOTE: After editing entries below, dhcpd MUST BE RESTARTED by the below
+#       commands and THE THIN CLIENT IN QUESTION BE REBOOTED for changes
+#       to take effect:
+#
+# /etc/init.d/dhcp3-server stop; /etc/init.d/dhcp3-server start
+#
+#
+    host ltsp010 {
+        hardware ethernet     00:00:00:00:00:00;
+        fixed-address         ltsp010;
+        filename              "/var/lib/tftpboot/ltsp/i386/pxelinux.0";
+    }
+    host ltsp011 {
+        hardware ethernet     00:00:00:00:00:00;
+        fixed-address         ltsp011;
+        filename              "/var/lib/tftpboot/ltsp/i386/pxelinux.0";
+    }
+    host ltsp012 {
+        hardware ethernet     00:00:00:00:00:00;
+        fixed-address         ltsp012;
+        filename              "/var/lib/tftpboot/ltsp/i386/pxelinux.0";
+    }
+    host ltsp013 {
+        hardware ethernet     00:00:00:00:00:00;
+        fixed-address         ltsp013;
+        filename              "/var/lib/tftpboot/ltsp/i386/pxelinux.0";
+    }
+    host ltsp014 {
+        hardware ethernet     00:00:00:00:00:00;
+        fixed-address         ltsp014;
+        filename              "/var/lib/tftpboot/ltsp/i386/pxelinux.0";
+    }
+    host ltsp015 {
+        hardware ethernet     00:00:00:00:00:00;
+        fixed-address         ltsp015;
+        filename              "/var/lib/tftpboot/ltsp/i386/pxelinux.0";
+    }
+    host ltsp016 {
+        hardware ethernet     00:00:00:00:00:00;
+        fixed-address         ltsp016;
+        filename              "/var/lib/tftpboot/ltsp/i386/pxelinux.0";
+    }
+    host ltsp017 {
+        hardware ethernet     00:00:00:00:00:00;
+        fixed-address         ltsp017;
+        filename              "/var/lib/tftpboot/ltsp/i386/pxelinux.0";
+    }
+    host ltsp018 {
+        hardware ethernet     00:00:00:00:00:00;
+        fixed-address         ltsp018;
+        filename              "/var/lib/tftpboot/ltsp/i386/pxelinux.0";
+    }
+    host ltsp019 {
+        hardware ethernet     00:00:00:00:00:00;
+        fixed-address         ltsp019;
+        filename              "/var/lib/tftpboot/ltsp/i386/pxelinux.0";
+    }
+  }
+}
diff --git a/debian-edu-config/etc/exim/exim-ldap-client.conf b/debian-edu-config/etc/exim/exim-ldap-client.conf
new file mode 100644
index 0000000..bfbbc20
--- /dev/null
+++ b/debian-edu-config/etc/exim/exim-ldap-client.conf
@@ -0,0 +1,218 @@
+# $Id: exim-ldap-client.conf,v 1.1 2004/01/17 17:40:29 pere Exp $
+
+# This is the skolelinux-client version of exim.conf
+
+######################################################################
+#
+# General variables
+
+LOCALHOST = 127.0.0.1/8
+print_topbitchars = true
+
+# Specify the domain you want to be added to all unqualified addresses
+# here. Unqualified addresses are accepted only from local callers by
+# default. See the receiver_unqualified_{hosts,nets} options if you want
+# to permit unqualified addresses from remote sources. If this option is
+# not set, the primary_hostname value is used for qualification.
+
+qualify_domain = postoffice.intern
+
+# If you want unqualified recipient addresses to be qualified with a different
+# domain to unqualified sender addresses, specify the recipient domain here.
+# If this option is not set, the qualify_domain value is used.
+
+# qualify_recipient = 
+
+receiver_unqualified_hosts = "LOCALHOST"
+sender_unqualified_hosts = "LOCALHOST"
+
+# Specify your local domains as a colon-separated list here. If this option
+# is not set (i.e. not mentioned in the configuration file), the
+# qualify_recipient value is used as the only local domain. If you do not want
+# to do any local deliveries, uncomment the following line, but do not supply
+# any data for it. This sets local_domains to an empty string, which is not
+# the same as not mentioning it at all. An empty string specifies that there
+# are no local domains; not setting it at all causes the default value (the
+# setting of qualify_recipient) to be used.
+
+local_domains = 
+
+# Allow mail addressed to our hostname, or to our IP address.
+
+#local_domains_include_host = true
+#local_domains_include_host_literals = true
+
+# Domains we relay for; that is domains that aren't considered local but we 
+# accept mail for them.
+
+# relay_domains =
+
+# If this is uncommented, we accept and relay mail for all domains we are 
+# in the DNS as an MX for.
+
+#relay_domains_include_local_mx = true
+
+# No local deliveries will ever be run under the uids of these users (a colon-
+# separated list). An attempt to do so gets changed so that it runs under the
+# uid of "nobody" instead. This is a paranoic safety catch. Note the default
+# setting means you cannot deliver mail addressed to root as if it were a
+# normal user. This isn't usually a problem, as most sites have an alias for
+# root that redirects such mail to a human administrator.
+
+#never_users = root
+
+# The setting below causes Exim to do a reverse DNS lookup on all incoming
+# IP calls, in order to get the true host name. If you feel this is too
+# expensive, you can specify the networks for which a lookup is done, or
+# remove the setting entirely.
+
+host_lookup = *
+
+# The setting below allows your host to be used as a mail relay only by
+# localhost: it locks out the use of your host as a mail relay by any
+# other host. See the section of the manual entitled "Control of relaying" 
+# for more info.
+
+host_accept_relay = "LOCALHOST"
+# host_auth_accept_relay = *
+
+# If this option is set, then any process that is running as one of the
+# listed users may pass a message to Exim and specify the sender's
+# address using the "-f" command line option, without Exim's adding a
+# "Sender" header.
+
+trusted_users = mail
+
+# If this option is true, the SMTP command VRFY is supported on incoming
+# SMTP connections; otherwise it is not.
+
+smtp_verify = true
+smtp_expn_hosts = "LOCALHOST"
+
+# Some operating systems use the "gecos" field in the system password file
+# to hold other information in addition to users' real names. Exim looks up
+# this field when it is creating "sender" and "from" headers. If these options
+# are set, exim uses "gecos_pattern" to parse the gecos field, and then
+# expands "gecos_name" as the user's name. $1 etc refer to sub-fields matched
+# by the pattern.
+
+gecos_pattern = ^([^,:]*)
+gecos_name = $1
+
+# This sets the maximum number of messages that will be accepted in one
+# connection. The default is 10, which is probably enough for most purposes,
+# but is too low on dialup SMTP systems, which often have many more mails
+# queued for them when they connect.
+
+smtp_accept_queue_per_connection = 100
+
+# Send a mail to the postmaster when a message is frozen. There are many
+# reasons this could happen; one is if exim cannot deliver a mail with no
+# return address (normally a bounce) another that may be common on dialup
+# systems is if a DNS lookup of a smarthost fails. Read the documentation
+# for more details: you might like to look at the auto_thaw option
+
+freeze_tell_mailmaster = true
+
+headers_check_syntax = true
+
+# This cancel (remove) frozen messages that are older than a week.
+
+timeout_frozen_after = 7d
+
+# This string defines the contents of the \`Received' message header that
+# is added to each message, except for the timestamp, which is automatically
+# added on at the end, preceded by a semicolon. The string is expanded each
+# time it is used.
+
+received_header_text = "Received: \
+         ${if def:sender_rcvhost {from ${sender_rcvhost}\n\t}\
+         {${if def:sender_ident {from ${sender_ident} }}\
+         ${if def:sender_helo_name {(helo=${sender_helo_name})\n\t}}}}\
+         by ${primary_hostname} \
+         ${if def:received_protocol {with ${received_protocol}}} \
+         (Exim ${version_number} #${compile_number} (Debian))\n\t\
+         id ${message_id}\
+         ${if def:received_for {\n\tfor <$received_for>}}"
+end
+
+
+######################################################################
+#                      TRANSPORTS CONFIGURATION                      #
+######################################################################
+#                       ORDER DOES NOT MATTER                        #
+#     Only one appropriate transport is called for each delivery.    #
+######################################################################
+
+remote_smtp:
+  driver = smtp
+
+end
+
+
+######################################################################
+#                      DIRECTORS CONFIGURATION                       #
+#             Specifies how local addresses are handled              #
+######################################################################
+#                          ORDER DOES MATTER                         #
+#   A local address is passed to each in turn until it is accepted.  #
+######################################################################
+
+end
+
+
+######################################################################
+#                      ROUTERS CONFIGURATION                         #
+#            Specifies how remote addresses are handled              #
+######################################################################
+#                          ORDER DOES MATTER                         #
+#  A remote address is passed to each in turn until it is accepted.  #
+######################################################################
+
+# Remote addresses are those with a domain that does not match any item
+# in the "local_domains" setting above.
+
+# This router routes to remote hosts over SMTP using a DNS lookup with
+# default options.
+
+smarthost:
+  driver = domainlist
+  transport = remote_smtp
+  route_list = "* postoffice bydns_a"
+
+lookuphost:
+  driver = lookuphost
+  transport = remote_smtp
+
+end
+
+
+######################################################################
+#                      RETRY CONFIGURATION                           #
+######################################################################
+
+# This single retry rule applies to all domains and all errors. It specifies
+# retries every 15 minutes for 2 hours, then increasing retry intervals,
+# starting at 2 hours and increasing each time by a factor of 1.5, up to 16
+# hours, then retries every 8 hours until 4 days have passed since the first
+# failed delivery.
+
+# Domain               Error       Retries
+# ------               -----       -------
+
+*                      *           F,2h,15m; G,16h,2h,1.5; F,4d,8h
+
+end
+
+
+######################################################################
+#                      REWRITE CONFIGURATION                         #
+######################################################################
+
+end
+
+######################################################################
+#                   AUTHENTICATION CONFIGURATION                     #
+######################################################################
+
+# End of Exim configuration file
diff --git a/debian-edu-config/etc/exim/exim-ldap-server.conf b/debian-edu-config/etc/exim/exim-ldap-server.conf
new file mode 100644
index 0000000..9ccbb7a
--- /dev/null
+++ b/debian-edu-config/etc/exim/exim-ldap-server.conf
@@ -0,0 +1,266 @@
+# $Id: exim-ldap-server.conf,v 1.1 2004/01/17 17:40:29 pere Exp $
+
+# This is the skolelinux-server version of exim.conf
+
+######################################################################
+#
+# General variables
+
+LDAPBASE = dc=skole,dc=skolelinux,dc=no
+
+LOCALHOST = 127.0.0.1/8
+LDAPSERVER = localhost
+
+print_topbitchars = true
+
+# Specify the domain you want to be added to all unqualified addresses
+# here. Unqualified addresses are accepted only from local callers by
+# default. See the receiver_unqualified_{hosts,nets} options if you want
+# to permit unqualified addresses from remote sources. If this option is
+# not set, the primary_hostname value is used for qualification.
+
+qualify_domain = postoffice.intern
+
+# If you want unqualified recipient addresses to be qualified with a different
+# domain to unqualified sender addresses, specify the recipient domain here.
+# If this option is not set, the qualify_domain value is used.
+
+# qualify_recipient = 
+
+receiver_unqualified_hosts = "LOCALHOST"
+sender_unqualified_hosts = "LOCALHOST"
+
+# Specify your local domains as a colon-separated list here. If this option
+# is not set (i.e. not mentioned in the configuration file), the
+# qualify_recipient value is used as the only local domain. If you do not want
+# to do any local deliveries, uncomment the following line, but do not supply
+# any data for it. This sets local_domains to an empty string, which is not
+# the same as not mentioning it at all. An empty string specifies that there
+# are no local domains; not setting it at all causes the default value (the
+# setting of qualify_recipient) to be used.
+
+local_domains = postoffice.intern:intern.intern:tjener.intern:localhost
+
+# Allow mail addressed to our hostname, or to our IP address.
+
+#local_domains_include_host = true
+#local_domains_include_host_literals = true
+
+# Domains we relay for; that is domains that aren't considered local but we 
+# accept mail for them.
+
+# relay_domains =
+
+# If this is uncommented, we accept and relay mail for all domains we are 
+# in the DNS as an MX for.
+
+#relay_domains_include_local_mx = true
+
+# No local deliveries will ever be run under the uids of these users (a colon-
+# separated list). An attempt to do so gets changed so that it runs under the
+# uid of "nobody" instead. This is a paranoic safety catch. Note the default
+# setting means you cannot deliver mail addressed to root as if it were a
+# normal user. This isn't usually a problem, as most sites have an alias for
+# root that redirects such mail to a human administrator.
+
+#never_users = root
+
+# The setting below causes Exim to do a reverse DNS lookup on all incoming
+# IP calls, in order to get the true host name. If you feel this is too
+# expensive, you can specify the networks for which a lookup is done, or
+# remove the setting entirely.
+
+host_lookup = *
+
+# The setting below allows your host to be used as a mail relay only by
+# localhost: it locks out the use of your host as a mail relay by any
+# other host. See the section of the manual entitled "Control of relaying" 
+# for more info.
+
+host_accept_relay = "LOCALHOST:*.intern"
+# host_auth_accept_relay = *
+
+# If this option is set, then any process that is running as one of the
+# listed users may pass a message to Exim and specify the sender's
+# address using the "-f" command line option, without Exim's adding a
+# "Sender" header.
+
+trusted_users = mail
+
+# If this option is true, the SMTP command VRFY is supported on incoming
+# SMTP connections; otherwise it is not.
+
+smtp_verify = true
+smtp_expn_hosts = "LOCALHOST"
+
+# Some operating systems use the "gecos" field in the system password file
+# to hold other information in addition to users' real names. Exim looks up
+# this field when it is creating "sender" and "from" headers. If these options
+# are set, exim uses "gecos_pattern" to parse the gecos field, and then
+# expands "gecos_name" as the user's name. $1 etc refer to sub-fields matched
+# by the pattern.
+
+gecos_pattern = ^([^,:]*)
+gecos_name = $1
+
+# This sets the maximum number of messages that will be accepted in one
+# connection. The default is 10, which is probably enough for most purposes,
+# but is too low on dialup SMTP systems, which often have many more mails
+# queued for them when they connect.
+
+smtp_accept_queue_per_connection = 100
+
+# Send a mail to the postmaster when a message is frozen. There are many
+# reasons this could happen; one is if exim cannot deliver a mail with no
+# return address (normally a bounce) another that may be common on dialup
+# systems is if a DNS lookup of a smarthost fails. Read the documentation
+# for more details: you might like to look at the auto_thaw option
+
+freeze_tell_mailmaster = true
+
+headers_check_syntax = true
+
+# This cancel (remove) frozen messages that are older than a week.
+
+timeout_frozen_after = 7d
+
+
+# This string defines the contents of the \`Received' message header that
+# is added to each message, except for the timestamp, which is automatically
+# added on at the end, preceded by a semicolon. The string is expanded each
+# time it is used.
+
+received_header_text = "Received: \
+         ${if def:sender_rcvhost {from ${sender_rcvhost}\n\t}\
+         {${if def:sender_ident {from ${sender_ident} }}\
+         ${if def:sender_helo_name {(helo=${sender_helo_name})\n\t}}}}\
+         by ${primary_hostname} \
+         ${if def:received_protocol {with ${received_protocol}}} \
+         (Exim ${version_number} #${compile_number} (Debian))\n\t\
+         id ${message_id}\
+         ${if def:received_for {\n\tfor <$received_for>}}"
+end
+
+
+######################################################################
+#                      TRANSPORTS CONFIGURATION                      #
+######################################################################
+#                       ORDER DOES NOT MATTER                        #
+#     Only one appropriate transport is called for each delivery.    #
+######################################################################
+
+ldap_delivery:
+  driver = appendfile
+  maildir_format = true
+  create_directory = true
+  directory_mode = 0700
+  mode = 0660
+  mode_fail_narrower = false
+  
+  directory = ${lookup ldap {ldap://LDAPSERVER/ou=People,LDAPBASE?mailMessageStore?one?uid=${local_part}} {$value} fail}
+
+  user = mail
+  group = mail
+
+  check_string = ""
+  prefix = ""
+  suffix = ""
+
+  delivery_date_add
+  envelope_to_add
+  return_path_add
+
+remote_smtp:
+  driver = smtp
+
+rootmail:
+  driver = appendfile
+  maildir_format = false
+  mode = 0600
+  mode_fail_narrower = false
+  user = root
+  delivery_date_add
+  envelope_to_add
+  return_path_add
+  file = /var/mail/root
+
+end
+
+
+######################################################################
+#                      DIRECTORS CONFIGURATION                       #
+#             Specifies how local addresses are handled              #
+######################################################################
+#                          ORDER DOES MATTER                         #
+#   A local address is passed to each in turn until it is accepted.  #
+######################################################################
+
+aliasfile:
+  driver = aliasfile
+  file = /etc/aliases
+  search_type = lsearch
+
+root:
+  driver = localuser
+  local_parts = root
+  transport = rootmail
+
+ldapuser:
+  driver = aliasfile
+  search_type = ldap
+  query = "ldap://LDAPSERVER/ou=People,LDAPBASE?uid?one?uid=${local_part}"
+  transport = ldap_delivery
+
+end
+
+
+######################################################################
+#                      ROUTERS CONFIGURATION                         #
+#            Specifies how remote addresses are handled              #
+######################################################################
+#                          ORDER DOES MATTER                         #
+#  A remote address is passed to each in turn until it is accepted.  #
+######################################################################
+
+# Remote addresses are those with a domain that does not match any item
+# in the "local_domains" setting above.
+
+# This router routes to remote hosts over SMTP using a DNS lookup with
+# default options.
+
+lookuphost:
+  driver = lookuphost
+  transport = remote_smtp
+
+end
+
+
+######################################################################
+#                      RETRY CONFIGURATION                           #
+######################################################################
+
+# This single retry rule applies to all domains and all errors. It specifies
+# retries every 15 minutes for 2 hours, then increasing retry intervals,
+# starting at 2 hours and increasing each time by a factor of 1.5, up to 16
+# hours, then retries every 8 hours until 4 days have passed since the first
+# failed delivery.
+
+# Domain               Error       Retries
+# ------               -----       -------
+
+*                      *           F,2h,15m; G,16h,2h,1.5; F,4d,8h
+
+end
+
+
+######################################################################
+#                      REWRITE CONFIGURATION                         #
+######################################################################
+
+end
+
+######################################################################
+#                   AUTHENTICATION CONFIGURATION                     #
+######################################################################
+
+# End of Exim configuration file
diff --git a/debian-edu-config/etc/exim4/exim-ldap-client-v4.conf b/debian-edu-config/etc/exim4/exim-ldap-client-v4.conf
new file mode 100644
index 0000000..5011959
--- /dev/null
+++ b/debian-edu-config/etc/exim4/exim-ldap-client-v4.conf
@@ -0,0 +1,286 @@
+# $Id: exim-ldap-client.conf 63 2004-01-17 17:40:27Z pere $
+#
+# /etc/exim4/exim-ldap-client-v4.conf
+#
+# This is the Debian EDU client version of exim4.conf
+# 
+# Upgraded from v3 version by Maximilian Wilhelm <max at rfc2324.org>
+#  -- Sat, 11 Jun 2005 03:36:29 +0200
+#
+
+# All macro definitions have been gathered here to ensure
+# they precede any references to them.
+
+LOCALHOST = 127.0.0.1/8
+
+# These options specify the Access Control Lists (ACLs) that
+# are used for incoming SMTP messages - after the RCPT and DATA
+# commands, respectively.
+
+acl_smtp_rcpt = check_recipient
+acl_smtp_data = check_message
+
+# These options specify the Access Control Lists (ACLs) that
+# are used to control the ETRN, EXPN, and VRFY commands.
+# Where no ACL is defined, the command is locked out.
+
+acl_smtp_expn = check_expn
+acl_smtp_vrfy = check_vrfy
+
+hostlist relay_hosts = LOCALHOST
+
+print_topbitchars
+
+# Specify the domain you want to be added to all unqualified addresses
+# here. Unqualified addresses are accepted only from local callers by
+# default. See the receiver_unqualified_{hosts,nets} options if you want
+# to permit unqualified addresses from remote sources. If this option is
+# not set, the primary_hostname value is used for qualification.
+
+qualify_domain = postoffice.intern
+
+# If you want unqualified recipient addresses to be qualified with a different
+# domain to unqualified sender addresses, specify the recipient domain here.
+# If this option is not set, the qualify_domain value is used.
+
+# qualify_recipient = 
+
+# receiver_unqualified_hosts renamed recipient_unqualified_hosts
+recipient_unqualified_hosts = LOCALHOST
+sender_unqualified_hosts = LOCALHOST
+
+# Specify your local domains as a colon-separated list here. If this option
+# is not set (i.e. not mentioned in the configuration file), the
+# qualify_recipient value is used as the only local domain. If you do not want
+# to do any local deliveries, uncomment the following line, but do not supply
+# any data for it. This sets local_domains to an empty string, which is not
+# the same as not mentioning it at all. An empty string specifies that there
+# are no local domains; not setting it at all causes the default value (the
+# setting of qualify_recipient) to be used.
+
+
+# Allow mail addressed to our hostname, or to our IP address.
+
+#local_domains_include_host = true
+#local_domains_include_host_literals = true
+
+# Domains we relay for; that is domains that aren't considered local but we 
+# accept mail for them.
+
+# relay_domains =
+
+# If this is uncommented, we accept and relay mail for all domains we are 
+# in the DNS as an MX for.
+
+#relay_domains_include_local_mx = true
+
+# No local deliveries will ever be run under the uids of these users (a colon-
+# separated list). An attempt to do so gets changed so that it runs under the
+# uid of "nobody" instead. This is a paranoic safety catch. Note the default
+# setting means you cannot deliver mail addressed to root as if it were a
+# normal user. This isn't usually a problem, as most sites have an alias for
+# root that redirects such mail to a human administrator.
+
+#never_users = root
+
+# The setting below causes Exim to do a reverse DNS lookup on all incoming
+# IP calls, in order to get the true host name. If you feel this is too
+# expensive, you can specify the networks for which a lookup is done, or
+# remove the setting entirely.
+
+host_lookup = *
+
+# The setting below allows your host to be used as a mail relay only by
+# localhost: it locks out the use of your host as a mail relay by any
+# other host. See the section of the manual entitled "Control of relaying" 
+# for more info.
+
+# host_auth_accept_relay = *
+
+# If this option is set, then any process that is running as one of the
+# listed users may pass a message to Exim and specify the sender's
+# address using the "-f" command line option, without Exim's adding a
+# "Sender" header.
+
+trusted_users = mail
+
+# If this option is true, the SMTP command VRFY is supported on incoming
+# SMTP connections; otherwise it is not.
+
+
+# Some operating systems use the "gecos" field in the system password file
+# to hold other information in addition to users' real names. Exim looks up
+# this field when it is creating "sender" and "from" headers. If these options
+# are set, exim uses "gecos_pattern" to parse the gecos field, and then
+# expands "gecos_name" as the user's name. $1 etc refer to sub-fields matched
+# by the pattern.
+
+gecos_pattern = ^([^,:]*)
+gecos_name = $1
+
+# This sets the maximum number of messages that will be accepted in one
+# connection. The default is 10, which is probably enough for most purposes,
+# but is too low on dialup SMTP systems, which often have many more mails
+# queued for them when they connect.
+
+smtp_accept_queue_per_connection = 100
+
+# Send a mail to the postmaster when a message is frozen. There are many
+# reasons this could happen; one is if exim cannot deliver a mail with no
+# return address (normally a bounce) another that may be common on dialup
+# systems is if a DNS lookup of a smarthost fails. Read the documentation
+# for more details: you might like to look at the auto_thaw option
+
+# freeze_tell_mailmaster replaced by freeze_tell
+freeze_tell = postmaster
+
+
+# This cancel (remove) frozen messages that are older than a week.
+
+timeout_frozen_after = 7d
+
+# This string defines the contents of the \`Received' message header that
+# is added to each message, except for the timestamp, which is automatically
+# added on at the end, preceded by a semicolon. The string is expanded each
+# time it is used.
+
+received_header_text = "Received: \
+         ${if def:sender_rcvhost {from ${sender_rcvhost}\n\t}\
+         {${if def:sender_ident {from ${sender_ident} }}\
+         ${if def:sender_helo_name {(helo=${sender_helo_name})\n\t}}}}\
+         by ${primary_hostname} \
+         ${if def:received_protocol {with ${received_protocol}}} \
+         (Exim ${version_number} #${compile_number} (Debian))\n\t\
+         id ${message_id}\
+         ${if def:received_for {\n\tfor <$received_for>}}"
+
+#######################################################
+# This new section of the configuration contains ACLs #
+# (Access Control Lists) derived from the Exim 3      #
+# policy control options.                             #
+#######################################################
+
+# These ACLs are crudely constructed from Exim 3 options.
+# They are almost certainly not optimal. You should study
+# them and rewrite as necessary.
+
+begin acl
+
+# ACL that is used after the RCPT command
+check_recipient:
+  # Exim 3 had no checking on -bs messages, so for compatibility
+  # we accept if the source is local SMTP (i.e. not over TCP/IP).
+  # We do this by testing for an empty sending host field.
+  accept  hosts = :
+  accept  hosts = +relay_hosts
+  deny    message = relay not permitted
+
+# ACL that is used after the DATA command
+check_message:
+  require verify = header_syntax
+  accept
+
+# ACL that is used after the EXPN command
+check_expn:
+  accept  hosts = "LOCALHOST"
+
+# ACL that is used after the VRFY command
+check_vrfy:
+  accept
+
+
+######################################################################
+#                   AUTHENTICATION CONFIGURATION                     #
+######################################################################
+
+
+
+######################################################################
+#                      REWRITE CONFIGURATION                         #
+######################################################################
+
+
+#######################################################
+# Here follow routers created from the old routers,   #
+# for handling non-local domains.                     #
+#######################################################
+
+begin routers
+
+
+
+######################################################################
+#                      ROUTERS CONFIGURATION                         #
+#            Specifies how remote addresses are handled              #
+######################################################################
+#                          ORDER DOES MATTER                         #
+#  A remote address is passed to each in turn until it is accepted.  #
+######################################################################
+
+# Remote addresses are those with a domain that does not match any item
+# in the "local_domains" setting above.
+
+# This router routes to remote hosts over SMTP using a DNS lookup with
+# default options.
+
+smarthost:
+  driver = manualroute
+  route_list = * postoffice bydns
+  transport = remote_smtp
+
+lookuphost:
+  driver = dnslookup
+  transport = remote_smtp
+  no_more
+
+
+#######################################################
+# Here follow routers created from the old directors, #
+# for handling local domains.                         #
+#######################################################
+
+
+######################################################################
+#                      DIRECTORS CONFIGURATION                       #
+#             Specifies how local addresses are handled              #
+######################################################################
+#                          ORDER DOES MATTER                         #
+#   A local address is passed to each in turn until it is accepted.  #
+######################################################################
+
+
+
+######################################################################
+#                      TRANSPORTS CONFIGURATION                      #
+######################################################################
+#                       ORDER DOES NOT MATTER                        #
+#     Only one appropriate transport is called for each delivery.    #
+######################################################################
+
+begin transports
+
+remote_smtp:
+  driver = smtp
+
+
+
+######################################################################
+#                      RETRY CONFIGURATION                           #
+######################################################################
+
+# This single retry rule applies to all domains and all errors. It specifies
+# retries every 15 minutes for 2 hours, then increasing retry intervals,
+# starting at 2 hours and increasing each time by a factor of 1.5, up to 16
+# hours, then retries every 8 hours until 4 days have passed since the first
+# failed delivery.
+
+# Domain               Error       Retries
+# ------               -----       -------
+
+
+begin retry
+
+*                      *           F,2h,15m; G,16h,2h,1.5; F,4d,8h
+
+
+# End of Exim 4 configuration
diff --git a/debian-edu-config/etc/exim4/exim-ldap-server-v4.conf b/debian-edu-config/etc/exim4/exim-ldap-server-v4.conf
new file mode 100644
index 0000000..7aecb69
--- /dev/null
+++ b/debian-edu-config/etc/exim4/exim-ldap-server-v4.conf
@@ -0,0 +1,353 @@
+# $Id: exim-ldap-server.conf 63 2004-01-17 17:40:27Z pere $
+#
+# /etc/exim4/exim-ldap-server-v4.conf
+#
+# This is the Debian EDU version of exim4.conf
+#
+# Upgrade from v3 version by Maximilian Wilhelm <max at rfc2324.org>
+#  -- Sat, 11 Jun 2005 02:44:08 +0200
+#
+
+##
+# LDAP Server info
+LDAPBASE = dc=skole,dc=skolelinux,dc=no
+LDAPSERVER = ldap
+
+LOCALHOST = 127.0.0.1/8
+
+acl_smtp_rcpt = check_recipient
+acl_smtp_data = check_message
+
+# These options specify the Access Control Lists (ACLs) that
+# are used to control the ETRN, EXPN, and VRFY commands.
+# Where no ACL is defined, the command is locked out.
+
+acl_smtp_expn = check_expn
+acl_smtp_vrfy = check_vrfy
+
+# This setting defines a named domain list called
+# local_domains, created from the old options that
+# referred to local domains. It will be referenced
+# later on by the syntax "+local_domains".
+# Other domain and host lists may follow.
+
+domainlist local_domains = postoffice.intern : \
+    intern.intern : \
+    tjener.intern : \
+    intern :\
+    localhost
+
+hostlist relay_hosts = LOCALHOST : \
+    *.intern
+
+
+######################################################################
+#
+# General variables
+
+print_topbitchars
+
+# Specify the domain you want to be added to all unqualified addresses
+# here. Unqualified addresses are accepted only from local callers by
+# default. See the receiver_unqualified_{hosts,nets} options if you want
+# to permit unqualified addresses from remote sources. If this option is
+# not set, the primary_hostname value is used for qualification.
+
+qualify_domain = postoffice.intern
+
+# If you want unqualified recipient addresses to be qualified with a different
+# domain to unqualified sender addresses, specify the recipient domain here.
+# If this option is not set, the qualify_domain value is used.
+
+# qualify_recipient = 
+
+# receiver_unqualified_hosts renamed recipient_unqualified_hosts
+recipient_unqualified_hosts = LOCALHOST
+sender_unqualified_hosts = LOCALHOST
+
+# Specify your local domains as a colon-separated list here. If this option
+# is not set (i.e. not mentioned in the configuration file), the
+# qualify_recipient value is used as the only local domain. If you do not want
+# to do any local deliveries, uncomment the following line, but do not supply
+# any data for it. This sets local_domains to an empty string, which is not
+# the same as not mentioning it at all. An empty string specifies that there
+# are no local domains; not setting it at all causes the default value (the
+# setting of qualify_recipient) to be used.
+
+
+# Allow mail addressed to our hostname, or to our IP address.
+
+#local_domains_include_host = true
+#local_domains_include_host_literals = true
+
+# Domains we relay for; that is domains that aren't considered local but we 
+# accept mail for them.
+
+# relay_domains =
+
+# If this is uncommented, we accept and relay mail for all domains we are 
+# in the DNS as an MX for.
+
+#relay_domains_include_local_mx = true
+
+# No local deliveries will ever be run under the uids of these users (a colon-
+# separated list). An attempt to do so gets changed so that it runs under the
+# uid of "nobody" instead. This is a paranoic safety catch. Note the default
+# setting means you cannot deliver mail addressed to root as if it were a
+# normal user. This isn't usually a problem, as most sites have an alias for
+# root that redirects such mail to a human administrator.
+
+#never_users = root
+
+# The setting below causes Exim to do a reverse DNS lookup on all incoming
+# IP calls, in order to get the true host name. If you feel this is too
+# expensive, you can specify the networks for which a lookup is done, or
+# remove the setting entirely.
+
+host_lookup = *
+
+# The setting below allows your host to be used as a mail relay only by
+# localhost: it locks out the use of your host as a mail relay by any
+# other host. See the section of the manual entitled "Control of relaying" 
+# for more info.
+
+# host_auth_accept_relay = *
+
+# If this option is set, then any process that is running as one of the
+# listed users may pass a message to Exim and specify the sender's
+# address using the "-f" command line option, without Exim's adding a
+# "Sender" header.
+
+trusted_users = mail
+
+# If this option is true, the SMTP command VRFY is supported on incoming
+# SMTP connections; otherwise it is not.
+
+
+# Some operating systems use the "gecos" field in the system password file
+# to hold other information in addition to users' real names. Exim looks up
+# this field when it is creating "sender" and "from" headers. If these options
+# are set, exim uses "gecos_pattern" to parse the gecos field, and then
+# expands "gecos_name" as the user's name. $1 etc refer to sub-fields matched
+# by the pattern.
+
+gecos_pattern = ^([^,:]*)
+gecos_name = $1
+
+# This sets the maximum number of messages that will be accepted in one
+# connection. The default is 10, which is probably enough for most purposes,
+# but is too low on dialup SMTP systems, which often have many more mails
+# queued for them when they connect.
+
+smtp_accept_queue_per_connection = 100
+
+# Send a mail to the postmaster when a message is frozen. There are many
+# reasons this could happen; one is if exim cannot deliver a mail with no
+# return address (normally a bounce) another that may be common on dialup
+# systems is if a DNS lookup of a smarthost fails. Read the documentation
+# for more details: you might like to look at the auto_thaw option
+
+# freeze_tell_mailmaster replaced by freeze_tell
+freeze_tell = postmaster
+
+
+# This cancel (remove) frozen messages that are older than a week.
+
+timeout_frozen_after = 7d
+
+
+# This string defines the contents of the \`Received' message header that
+# is added to each message, except for the timestamp, which is automatically
+# added on at the end, preceded by a semicolon. The string is expanded each
+# time it is used.
+
+received_header_text = "Received: \
+         ${if def:sender_rcvhost {from ${sender_rcvhost}\n\t}\
+         {${if def:sender_ident {from ${sender_ident} }}\
+         ${if def:sender_helo_name {(helo=${sender_helo_name})\n\t}}}}\
+         by ${primary_hostname} \
+         ${if def:received_protocol {with ${received_protocol}}} \
+         (Exim ${version_number} #${compile_number} (Debian))\n\t\
+         id ${message_id}\
+         ${if def:received_for {\n\tfor <$received_for>}}"
+
+#######################################################
+# This new section of the configuration contains ACLs #
+# (Access Control Lists) derived from the Exim 3      #
+# policy control options.                             #
+#######################################################
+
+# These ACLs are crudely constructed from Exim 3 options.
+# They are almost certainly not optimal. You should study
+# them and rewrite as necessary.
+
+begin acl
+
+# ACL that is used after the RCPT command
+check_recipient:
+  # Exim 3 had no checking on -bs messages, so for compatibility
+  # we accept if the source is local SMTP (i.e. not over TCP/IP).
+  # We do this by testing for an empty sending host field.
+  accept  hosts = :
+  accept  domains = +local_domains
+  accept  hosts = +relay_hosts
+  deny    message = relay not permitted
+
+# ACL that is used after the DATA command
+check_message:
+  require verify = header_syntax
+  accept
+
+# ACL that is used after the EXPN command
+check_expn:
+  accept  hosts = "LOCALHOST"
+
+# ACL that is used after the VRFY command
+check_vrfy:
+  accept
+
+
+######################################################################
+#                   AUTHENTICATION CONFIGURATION                     #
+######################################################################
+
+
+
+######################################################################
+#                      REWRITE CONFIGURATION                         #
+######################################################################
+
+
+#######################################################
+# Here follow routers created from the old routers,   #
+# for handling non-local domains.                     #
+#######################################################
+
+begin routers
+
+
+
+######################################################################
+#                      ROUTERS CONFIGURATION                         #
+#            Specifies how remote addresses are handled              #
+######################################################################
+#                          ORDER DOES MATTER                         #
+#  A remote address is passed to each in turn until it is accepted.  #
+######################################################################
+
+# Remote addresses are those with a domain that does not match any item
+# in the "local_domains" setting above.
+
+# This router routes to remote hosts over SMTP using a DNS lookup with
+# default options.
+
+lookuphost:
+  driver = dnslookup
+  domains = ! +local_domains
+  transport = remote_smtp
+  no_more
+
+
+#######################################################
+# Here follow routers created from the old directors, #
+# for handling local domains.                         #
+#######################################################
+
+
+######################################################################
+#                      DIRECTORS CONFIGURATION                       #
+#             Specifies how local addresses are handled              #
+######################################################################
+#                          ORDER DOES MATTER                         #
+#   A local address is passed to each in turn until it is accepted.  #
+######################################################################
+
+aliasfile:
+  driver = redirect
+  allow_defer
+  allow_fail
+  data = ${lookup{$local_part}lsearch{/etc/aliases}}
+  retry_use_local_part
+
+root:
+  driver = accept
+  check_local_user
+  local_parts = root
+  transport = rootmail
+
+ldapuser:
+  driver = accept
+  condition = ${if eq {}{${lookup ldap {ldap://LDAPSERVER/ou=People,LDAPBASE?uid?one?uid=${local_part}}}}{no}{yes}}
+  retry_use_local_part
+  transport = ldap_delivery
+
+
+
+######################################################################
+#                      TRANSPORTS CONFIGURATION                      #
+######################################################################
+#                       ORDER DOES NOT MATTER                        #
+#     Only one appropriate transport is called for each delivery.    #
+######################################################################
+
+begin transports
+
+ldap_delivery:
+# prefix renamed message_prefix
+# suffix renamed message_suffix
+  driver = appendfile
+  check_string = ""
+  create_directory
+  delivery_date_add
+  directory = ${lookup ldap {ldap://LDAPSERVER/ou=People,LDAPBASE?mailMessageStore?one?uid=${local_part}} {$value} fail}
+  directory_mode = 0700
+  envelope_to_add
+  group = mail
+  maildir_format
+  message_prefix = ""
+  message_suffix = ""
+  mode = 0660
+  no_mode_fail_narrower
+  return_path_add
+  user = mail
+  
+
+
+
+
+remote_smtp:
+  driver = smtp
+
+rootmail:
+  driver = appendfile
+  delivery_date_add
+  envelope_to_add
+  file = /var/mail/root
+  no_maildir_format
+  mode = 0600
+  no_mode_fail_narrower
+  return_path_add
+  user = mail
+
+
+
+######################################################################
+#                      RETRY CONFIGURATION                           #
+######################################################################
+
+# This single retry rule applies to all domains and all errors. It specifies
+# retries every 15 minutes for 2 hours, then increasing retry intervals,
+# starting at 2 hours and increasing each time by a factor of 1.5, up to 16
+# hours, then retries every 8 hours until 4 days have passed since the first
+# failed delivery.
+
+# Domain               Error       Retries
+# ------               -----       -------
+
+
+begin retry
+
+*                      *           F,2h,15m; G,16h,2h,1.5; F,4d,8h
+
+
+# End of Exim 4 configuration
diff --git a/debian-edu-config/etc/filesystems b/debian-edu-config/etc/filesystems
new file mode 100644
index 0000000..611a127
--- /dev/null
+++ b/debian-edu-config/etc/filesystems
@@ -0,0 +1,3 @@
+	vfat
+	msdos
+	iso9660
diff --git a/debian-edu-config/etc/ifplugd/ifplugd.action b/debian-edu-config/etc/ifplugd/ifplugd.action
new file mode 100755
index 0000000..067a613
--- /dev/null
+++ b/debian-edu-config/etc/ifplugd/ifplugd.action
@@ -0,0 +1,44 @@
+#!/bin/bash
+# $Id: ifplugd.action,v 1.1 2004/01/17 17:40:29 pere Exp $
+
+# This file is part of ifplugd.
+#
+# ifplugd is free software; you can redistribute it and/or modify it under
+# the terms of the GNU General Public License as published by the Free
+# Software Foundation; either version 2 of the License, or (at your
+# option) any later version.
+#
+# ifplugd is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+# for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with ifplugd; if not, write to the Free Software Foundation,
+# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+
+set -e
+
+WHEREAMI=/usr/sbin/whereami
+
+if [ -z "$1" ] || [ -z "$2" ] ; then
+	echo "Usage: $0 <iface> (up|down)" 1>&2
+	exit 1
+fi
+
+if [ -x $WHEREAMI ]; then
+  $WHEREAMI --syslog --run_from ifplugd --hint $1,$2
+else
+  if [ "$2" = "up" ]; then
+    [ -x /etc/init.d/wlan ] && /etc/init.d/wlan up $1
+    /sbin/ifup $1
+    exit $?
+  elif [ "$2" = "down" ]; then
+    /sbin/ifdown $1
+    sleep 5
+    [ -x /etc/init.d/wlan ] && /etc/init.d/wlan down $1
+    exit $?
+  fi
+fi
+
+exit 0
diff --git a/debian-edu-config/etc/krb5-winbind-debian-edu.conf b/debian-edu-config/etc/krb5-winbind-debian-edu.conf
new file mode 100644
index 0000000..86bb069
--- /dev/null
+++ b/debian-edu-config/etc/krb5-winbind-debian-edu.conf
@@ -0,0 +1,25 @@
+[libdefaults]
+	default_realm = %%REALM%%
+        ticket_lifetime = 24000
+        default_tgs_enctypes = des-cbc-crc des-cbc-md5
+        default_tkt_enctypes = des-cbc-crc des-cbc-md5
+        forwardable = true
+        proxiable = true
+        dns_lookup_realm = true
+        dns_lookup_kdc = true
+[realms]
+        %%REALM%% = {
+              kdc = %%PWSERVER%%:88
+              admin_server = %%PWSERVER%%:88
+              default_domain = %%REALM%%
+              }
+[domain_realm]
+        .%%REALM%% = %%REALM%%
+        %%REALM%% = %%REALM%%
+[pam]
+        debug = true
+        ticket_lifetime = 36000
+        renew_lifetime = 36000
+        forwardable = true
+        krb4_convert = false
+	
diff --git a/debian-edu-config/etc/ldap/slapd-debian-edu.conf b/debian-edu-config/etc/ldap/slapd-debian-edu.conf
new file mode 100644
index 0000000..d2ff1f5
--- /dev/null
+++ b/debian-edu-config/etc/ldap/slapd-debian-edu.conf
@@ -0,0 +1,131 @@
+# The skolelinux slapd configuration file
+#
+# Id: slapd-debian-edu.conf 1023 2004-09-15 15:54:46Z finnarne-guest 
+
+# Schema and objectClass definitions
+include         /etc/ldap/schema/core.schema
+include         /etc/ldap/schema/cosine.schema
+include         /etc/ldap/schema/nis.schema
+include         /etc/ldap/schema/courier.schema
+include         /etc/ldap/schema/automount.schema
+include		/etc/ldap/schema/lis.schema
+# Include the LDAP-schemas needed by samba.
+include		/etc/ldap/schema/inetorgperson.schema
+include		/etc/ldap/schema/samba.schema
+# Don't include the LDAP-schemas used by eduPerson yet.
+#include		/etc/ldap/schema/EduPerson.schema
+#include		/etc/ldap/schema/norEduPerson.schema
+
+# Schema check allows for forcing entries to
+# match schemas for their objectClasses's
+schemacheck	on
+
+# Where the pid file is put. The init.d script
+# will not stop the server if you change this.
+pidfile		/var/run/slapd.pid
+
+# List of arguments that were passed to the server
+argsfile	/var/run/slapd.args
+
+# Read slapd.conf(5) for possible values
+loglevel	0
+
+# keep the db in ram for better performance
+sizelimit 2000
+
+cachesize 10000
+dbcachesize 10000000
+
+#######################################################################
+# Database backend for woody
+# ldbm database definitions
+#######################################################################
+# The backend type, ldbm, is the default standard
+database	ldbm
+
+#######################################################################
+# Database backend for sarge
+# bdb database definitions
+#######################################################################
+# The backend type, bdb, changed after woody
+#modulepath      /usr/lib/ldap
+#moduleload      back_bdb
+#database	bdb
+
+# The base of your directory
+suffix		"dc=skole,dc=skolelinux,dc=no"
+
+# Where the database file are physically stored
+directory	"/var/lib/ldap"
+
+index default pres,eq
+index objectclass		pres,eq
+index uid			pres,eq
+#index eduPersonPrincipalName	pres,eq
+index cn,mail,surname,givenname	pres,eq,sub
+index uidNumber,gidNumber	pres,eq
+index member			pres,eq
+index memberUid			pres,eq
+index userPassword		eq
+# Indexes used by Samba2
+#index lmPassword		eq
+#index ntPassword		eq
+# Indexes used by Samba3
+index sambaSID			eq
+index sambaNTPassword		eq
+index sambaLMPassword		eq
+# Indices special for WLUS
+index groupType			eq
+
+
+# Save the time that the entry gets modified
+lastmod on
+
+# Default access for passwords
+# PS: You have to use an encrypted channel(with either SSL or TLS) to 
+#     access userPassword: 'ssf=128'.
+# Webmin-ldap-skolelinux use TLS, and PAM authentication use SSL
+# The ssf=128 option is to be used when SL bug 213 and 404 are closed.
+#
+access to attrs=userPassword
+	by self ssf=128 write
+	by anonymous ssf=128 auth
+	by dn.exact="cn=admin,ou=People,dc=skole,dc=skolelinux,dc=no" ssf=128 write
+	by * none
+
+#
+# Ensure samba password hashes.
+#
+
+# Restricted access to some samba attributes
+# (allow access for admin to don't break old installations)
+access to attrs=sambaLMPassword,sambaNTPassword
+ 	by self ssf=128 write
+	by anonymous ssf=128 auth
+ 	by dn.exact="cn=smbadmin,ou=People,dc=skole,dc=skolelinux,dc=no" ssf=128 write
+ 	by dn.exact="cn=admin,ou=People,dc=skole,dc=skolelinux,dc=no" ssf=128 write
+ 	by * none
+
+# Access to samba attributs
+access to attrs=objectClass,cn,uid,uidNumber,gidNumber,homeDirectory,loginShell,sambaSID,sambaPrimaryGroupSID,displayName,sambaPwdCanChange,sambaPwdMustChange,sambaPwdLastSet,sambaAcctFlags,sambaGroupType,sambaPasswordHistory
+ 	by dn.exact="cn=admin,ou=People,dc=skole,dc=skolelinux,dc=no" ssf=128 write
+ 	by dn.exact="cn=smbadmin,ou=People,dc=skole,dc=skolelinux,dc=no" ssf=128 write
+	by * read
+
+# We store machine-accounts for samba in a private ou
+access to dn="ou=Machines,ou=People,dc=skole,dc=skolelinux,dc=no"
+    by dn.exact="cn=admin,ou=People,dc=skole,dc=skolelinux,dc=no" ssf=128 write
+    by dn.exact="cn=smbadmin,ou=People,dc=skole,dc=skolelinux,dc=no" ssf=128 write
+    by * read
+	
+# Defaultaccess
+access to * 
+	by dn.exact="cn=admin,ou=People,dc=skole,dc=skolelinux,dc=no" write
+	by * read
+
+# End of ldapd configuration file
+
+TLSCipherSuite		HIGH:MEDIUM:SSLv2
+TLSCertificateFile      /etc/ldap/ssl/slapd.pem
+TLSCertificateKeyFile   /etc/ldap/ssl/slapd.pem
+TLSCACertificateFile    /etc/ldap/ssl/slapd.pem
diff --git a/debian-edu-config/etc/ldap/slapd-etch_debian-edu.conf b/debian-edu-config/etc/ldap/slapd-etch_debian-edu.conf
new file mode 100644
index 0000000..0b9982d
--- /dev/null
+++ b/debian-edu-config/etc/ldap/slapd-etch_debian-edu.conf
@@ -0,0 +1,153 @@
+# Allow LDAPv2 binds
+allow bind_v2
+
+# The skolelinux slapd configuration file
+#
+# $Id: slapd-skolelinux.conf,v 1.7 2003/06/27 14:47:20 pere Exp $
+
+# Schema and objectClass definitions
+include         /etc/ldap/schema/core.schema
+include         /etc/ldap/schema/cosine.schema
+include         /etc/ldap/schema/nis.schema
+include         /etc/ldap/schema/courier.schema
+include         /etc/ldap/schema/automount.schema
+include		/etc/ldap/schema/inetorgperson.schema
+include		/etc/ldap/schema/samba.schema
+include		/etc/ldap/schema/lis.schema
+
+# Schema check allows for forcing entries to
+# match schemas for their objectClasses's
+schemacheck	on
+
+# Where the pid file is put. The init.d script
+# will not stop the server if you change this.
+pidfile		/var/run/slapd/slapd.pid
+
+# Read slapd.conf(5) for possible values
+#loglevel	65535
+loglevel	0
+
+# TLS/SSL
+TLSCipherSuite          HIGH:MEDIUM:SSLv2
+TLSCACertificateFile    /etc/ldap/ssl/slapd.pem
+TLSCertificateKeyFile   /etc/ldap/ssl/slapd.pem
+TLSCertificateFile      /etc/ldap/ssl/slapd.pem
+#TLSCACertificateFile    /var/lib/pyca/Root/cacert.pem
+#TLSCertificateKeyFile   /var/lib/pyca/ServerCerts/private/cakey.pem
+#TLSCertificateFile      /var/lib/pyca/ServerCerts/cacert.pem
+
+modulepath	/usr/lib/ldap
+moduleload	back_bdb
+moduleload	back_monitor
+
+defaultsearchbase "dc=skole,dc=skolelinux,dc=no"
+security update_ssf=128  simple_bind=128
+
+backend		bdb
+backend		monitor
+
+
+
+#######################################################################
+# ldbm database definitions
+#######################################################################
+
+# The backend type, ldbm, is the default standard
+
+database	bdb
+# Set the database in memory cache size.
+#
+cachesize   4000
+dbnosync
+sizelimit 4000
+
+# First database
+suffix		"dc=skole,dc=skolelinux,dc=no"
+rootdn		"cn=admin,ou=People,dc=skole,dc=skolelinux,dc=no"
+# Where the database file are physically stored
+directory	"/var/lib/ldap"
+
+# Indices to maintain
+index           objectClass     pres,eq
+index           cn,sn,ou        pres,eq,sub
+index           uid             pres,eq,sub
+index		groupType	eq
+index           uidNumber       eq
+index           gidNumber       eq
+index           memberUid       eq
+index           default         eq
+#for some clients, even if not used
+index		givenname	eq
+index		displayName	eq
+index		telephoneNumber	eq
+
+# Save the time that the entry gets modified
+lastmod on
+
+
+
+# Webmin-ldap-skolelinux use TLS, and PAM authentication use SSL
+# The ssf=128 option is to be used when SL bug 213 and 404 are closed.
+#
+
+access to dn.base="cn=admin,ou=People,dc=skole,dc=skolelinux,dc=no" 
+	by dn.exact="cn=admin,ou=People,dc=skole,dc=skolelinux,dc=no" ssf=128 =wx 
+	by * none break
+
+access to * 
+	by group/lisAclGroup/member="cn=admins,ou=Group,dc=skole,dc=skolelinux,dc=no" ssf=128 =w 
+	by dn.exact="cn=admin,ou=People,dc=skole,dc=skolelinux,dc=no" ssf=128 =w 
+	by * none break
+	
+access to dn.base="cn=nextID,ou=Variables,dc=skole,dc=skolelinux,dc=no" 
+	attrs=gidNumber
+	by dn.exact="cn=smbadmin,ou=People,dc=skole,dc=skolelinux,dc=no" ssf=128 write
+	by * read 
+
+access to attrs=userPassword
+	by self      ssf=128 =wx
+	by anonymous ssf=128 auth
+	by group/lisAclGroup/member="cn=jradmins,ou=Group,dc=skole,dc=skolelinux,dc=no" ssf=128 =w 
+	by * none 
+
+access to attrs=shadowLastChange
+	by self      ssf=128 =w
+	by group/lisAclGroup/member="cn=jradmins,ou=Group,dc=skole,dc=skolelinux,dc=no" ssf=128 =w 
+	by * none 
+
+#
+# Ensure samba password hashes.
+#
+# Restricted access to some samba attributes
+# (allow access for admin to don't break old installations)
+access to attrs=sambaLMPassword,sambaNTPassword
+	by self ssf=128 =w
+	by dn.exact="cn=smbadmin,ou=People,dc=skole,dc=skolelinux,dc=no" ssf=128 =wr
+	by group/lisAclGroup/member="cn=jradmins,ou=Group,dc=skole,dc=skolelinux,dc=no" ssf=128 =w
+	by * none
+
+access to attrs=sambaPwdLastSet,sambaPwdCanChange
+	by self ssf=128 =wr
+	by dn.exact="cn=smbadmin,ou=People,dc=skole,dc=skolelinux,dc=no" ssf=128 =wr
+	by group/lisAclGroup/member="cn=jradmins,ou=Group,dc=skole,dc=skolelinux,dc=no" ssf=128 =w
+	by * read
+
+# Access to samba attributs
+access to attrs=objectClass,sambaSID,sambaPrimaryGroupSID,displayName,sambaPwdMustChange,sambaAcctFlags,sambaGroupType,sambaPasswordHistory,sambaNextRid
+	by dn.exact="cn=smbadmin,ou=People,dc=skole,dc=skolelinux,dc=no" ssf=128 =wsr
+	by * read
+
+# We store machine-accounts for samba in a private ou
+access to  dn.sub="ou=Machines,ou=People,dc=skole,dc=skolelinux,dc=no"  
+	by dn.exact="cn=smbadmin,ou=People,dc=skole,dc=skolelinux,dc=no"  ssf=128 =wsr
+	by * read
+
+
+# Defaultaccess
+access to * 
+	by * read
+
+# Last database.. back-monitor is nice to have. Use 'cn=monitor' as base
+database monitor
+
+# End of ldapd configuration file
diff --git a/debian-edu-config/etc/ldap/ssl/slapd-cert.cnf b/debian-edu-config/etc/ldap/ssl/slapd-cert.cnf
new file mode 100644
index 0000000..7d10022
--- /dev/null
+++ b/debian-edu-config/etc/ldap/ssl/slapd-cert.cnf
@@ -0,0 +1,21 @@
+RANDOM=/dev/random
+
+[ req ]
+default_bits = 1024
+encrypt_key = yes
+distinguished_name = req_dn
+x509_extensions = cert_type
+prompt = no
+
+[ req_dn ]
+C=NO
+ST=NA
+L=Skolen
+O=Ldap server
+OU=Automatically-generated Ldap SSL key
+CN=ldap
+emailAddress=postmaster at ldap.intern
+
+
+[ cert_type ]
+nsCertType = server
diff --git a/debian-edu-config/etc/lsb-release b/debian-edu-config/etc/lsb-release
new file mode 100644
index 0000000..79adebe
--- /dev/null
+++ b/debian-edu-config/etc/lsb-release
@@ -0,0 +1,4 @@
+DISTRIB_DESCRIPTION="DebianEdu/Skolelinux (terra)"
+DISTRIB_RELEASE=3.2
+DISTRIB_CODENAME=etch
+
diff --git a/debian-edu-config/etc/nagios/debian-edu/cgi.cfg b/debian-edu-config/etc/nagios/debian-edu/cgi.cfg
new file mode 100644
index 0000000..0c41888
--- /dev/null
+++ b/debian-edu-config/etc/nagios/debian-edu/cgi.cfg
@@ -0,0 +1,24 @@
+main_config_file=/etc/nagios/debian-edu/nagios.cfg
+physical_html_path=/usr/share/nagios/htdocs
+url_html_path=/nagios
+show_context_help=0
+nagios_check_command=/usr/lib/nagios/plugins/check_nagios /var/log/nagios/status.log 5 'nagios'
+use_authentication=1
+#default_user_name=guest
+authorized_for_system_information=nagiosadmin
+authorized_for_configuration_information=nagiosadmin
+authorized_for_system_commands=nagiosadmin
+authorized_for_all_services=nagiosadmin
+authorized_for_all_hosts=nagiosadmin
+authorized_for_all_service_commands=nagiosadmin
+authorized_for_all_host_commands=nagiosadmin
+#statusmap_background_image=smbackground.gd2
+
+default_statusmap_layout=5
+default_statuswrl_layout=4
+#statuswrl_include=myworld.wrl
+
+ping_syntax=/bin/ping -n -U -c 5 $HOSTADDRESS$
+refresh_rate=90
+
+
diff --git a/debian-edu-config/etc/nagios/debian-edu/checkcommands.cfg b/debian-edu-config/etc/nagios/debian-edu/checkcommands.cfg
new file mode 100644
index 0000000..3e59357
--- /dev/null
+++ b/debian-edu-config/etc/nagios/debian-edu/checkcommands.cfg
@@ -0,0 +1,88 @@
+define command{
+	command_name	check_tcp
+	command_line	$USER1$/check_tcp -H $HOSTADDRESS$ -p $ARG1$
+	}
+define command{
+	command_name	check_udp
+	command_line	$USER1$/check_udp -H $HOSTADDRESS$ -p $ARG1$
+	}
+define command{
+	command_name	check_ftp
+	command_line	$USER1$/check_ftp -H $HOSTADDRESS$
+	}
+define command{
+	command_name	check_pop
+	command_line	$USER1$/check_pop -H $HOSTADDRESS$
+	}
+define command{
+	command_name	check_smtp
+	command_line	$USER1$/check_smtp -H $HOSTADDRESS$
+	}
+define command{
+	command_name	check_http
+	command_line	$USER1$/check_http -H $HOSTADDRESS$
+	}
+define command{
+	command_name	check_ping
+	command_line	$USER1$/check_ping -H $HOSTADDRESS$ -w $ARG1$ -c $ARG2$ -p 5
+	}
+define command{
+	command_name	check_dns
+	command_line	$USER1$/check_dns -H $HOSTADDRESS$
+	}
+define command{
+	command_name	check_hpjd
+	command_line	$USER1$/check_hpjd -H $HOSTADDRESS$ -C public
+	}
+define command{
+	command_name	check_disk
+	command_line	$USER1$/check_disk -w $ARG1$ -c $ARG2$ -p $ARG3$
+	}
+define command{
+	command_name	check_users
+	command_line	$USER1$/check_users -w $ARG1$ -c $ARG2$
+	}
+define command{
+	command_name	check_procs
+	command_line	$USER1$/check_procs -w $ARG1$ -c $ARG2$ -s $ARG3$
+	}
+define command{
+	command_name	check_load
+	command_line	$USER1$/check_load -w $ARG1$ -c $ARG2$
+	}
+define command{
+        command_name    check_imap
+        command_line    $USER1$/check_imap -H $HOSTNAME$
+        }
+define command{
+        command_name    check_simap
+        command_line    $USER1$/check_simap -H $HOSTNAME$
+        }
+define command{
+        command_name    check_ntp
+        command_line    $USER1$/check_ntp -H $HOSTNAME$
+        }
+define command{
+        command_name    check_ssh
+        command_line    $USER1$/check_ssh $HOSTNAME$
+        }
+define command{
+        command_name    check-host-alive
+        command_line    $USER1$/check_ping -H $HOSTADDRESS$ -w 3000.0,80% -c 5000.0,100% -p 1
+        }
+define command{
+	command_name	check_listen
+	command_line	$USER1$/check_listen
+	}
+define command{
+	command_name	check_logins
+	command_line	$USER1$/check_logins -w $ARG1$ -c $ARG2$
+	}
+define command{
+	command_name	check_nfs
+	command_line	$USER1$/check_rpc -H $HOSTNAME$ -C nfs -c 3
+	}
+define command{
+        command_name    check_ldap
+        command_line    $USER1$/check_ldap -H $HOSTNAME$ -b "dc=skole,dc=skolelinux,dc=no"
+        }
diff --git a/debian-edu-config/etc/nagios/debian-edu/contactgroups.cfg b/debian-edu-config/etc/nagios/debian-edu/contactgroups.cfg
new file mode 100644
index 0000000..8ff670e
--- /dev/null
+++ b/debian-edu-config/etc/nagios/debian-edu/contactgroups.cfg
@@ -0,0 +1,5 @@
+define contactgroup {
+        contactgroup_name       nagios-admins
+        alias                   Nagios Administrator
+        members                 nagiosadmin
+        }
diff --git a/debian-edu-config/etc/nagios/debian-edu/contacts.cfg b/debian-edu-config/etc/nagios/debian-edu/contacts.cfg
new file mode 100644
index 0000000..d398422
--- /dev/null
+++ b/debian-edu-config/etc/nagios/debian-edu/contacts.cfg
@@ -0,0 +1,11 @@
+define contact {
+        contact_name                    nagiosadmin
+        alias                           Nagios Administrator
+        host_notification_period        24x7
+        service_notification_period     24x7
+        host_notification_options       d,u,r
+        service_notification_options    w,u,c,r
+        service_notification_commands   notify-by-nothing
+        host_notification_commands      notify-by-nothing
+        email                           root
+}
diff --git a/debian-edu-config/etc/nagios/debian-edu/dependencies.cfg b/debian-edu-config/etc/nagios/debian-edu/dependencies.cfg
new file mode 100644
index 0000000..459b895
--- /dev/null
+++ b/debian-edu-config/etc/nagios/debian-edu/dependencies.cfg
@@ -0,0 +1,48 @@
+################################################################################
+# Sample object config file for Nagios 
+#
+# Read the documentation for more information on this configuration file.  I've
+# provided some comments here, but things may not be so clear without further
+# explanation, so make sure to read the HTML documentation!
+# 
+# Last Modified: 03-07-2002
+#
+################################################################################
+
+
+################################################################################
+# SERVICE DEPENDENCY DEFINITIONS
+#
+# SYNTAX:
+#
+################################################################################
+
+# Servicedependency definition
+#define servicedependency{
+#	host_name			nt1
+#	service_description		IIS Process
+#	dependent_host_name		nt1
+#	dependent_service_description	Website #1
+#	execution_failure_criteria	n	; These are the criteria for which check execution will be supressed
+#	notification_failure_criteria	w,u,c	; These are the criteria for which notifications will be supressed
+#	}
+
+
+# Servicedependency definition
+#define servicedependency{
+#	host_name			nt1
+#	service_description		IIS Process
+#	dependent_host_name		nt1
+#	dependent_service_description	Website #2
+#	execution_failure_criteria	w,u,c	; These are the criteria for which check execution will be supressed
+#	notification_failure_criteria	w,u,c	; These are the criteria for which notifications will be supressed
+#	}
+
+
+################################################################################
+# HOST DEPENDENCY DEFINITIONS
+#
+# SYNTAX:
+#
+################################################################################
+
diff --git a/debian-edu-config/etc/nagios/debian-edu/hostgroups/gateways.cfg b/debian-edu-config/etc/nagios/debian-edu/hostgroups/gateways.cfg
new file mode 100644
index 0000000..b3213f7
--- /dev/null
+++ b/debian-edu-config/etc/nagios/debian-edu/hostgroups/gateways.cfg
@@ -0,0 +1,6 @@
+define hostgroup {
+	hostgroup_name			gateways
+	alias				Gateway hosts
+	contact_groups			nagios-admins
+	members				gateway
+	}
diff --git a/debian-edu-config/etc/nagios/debian-edu/hostgroups/servers.cfg b/debian-edu-config/etc/nagios/debian-edu/hostgroups/servers.cfg
new file mode 100644
index 0000000..256d328
--- /dev/null
+++ b/debian-edu-config/etc/nagios/debian-edu/hostgroups/servers.cfg
@@ -0,0 +1,6 @@
+define hostgroup {
+	hostgroup_name			servers
+	alias				Server hosts
+	contact_groups			nagios-admins
+	members				tjener
+	}
diff --git a/debian-edu-config/etc/nagios/debian-edu/hostgrouptemplate.cfg b/debian-edu-config/etc/nagios/debian-edu/hostgrouptemplate.cfg
new file mode 100644
index 0000000..c57db9d
--- /dev/null
+++ b/debian-edu-config/etc/nagios/debian-edu/hostgrouptemplate.cfg
@@ -0,0 +1,6 @@
+define hostgroup {
+	hostgroup_name			?hostgroup?
+	alias				?hostgroup?
+	contact_groups			nagios-admins
+	members				
+	}
diff --git a/debian-edu-config/etc/nagios/debian-edu/hosts/gateway.cfg b/debian-edu-config/etc/nagios/debian-edu/hosts/gateway.cfg
new file mode 100644
index 0000000..4bc6dd2
--- /dev/null
+++ b/debian-edu-config/etc/nagios/debian-edu/hosts/gateway.cfg
@@ -0,0 +1,12 @@
+define host {
+	use				server-host
+	host_name                       gateway
+        alias                           Inside of gateway/firewall
+        address                         gateway
+        }
+define service {
+	use                             server-service
+	host_name                       gateway
+        service_description             PING
+	check_command                   check_ping!100.0,20%!500.0,60%
+	}
diff --git a/debian-edu-config/etc/nagios/debian-edu/hosts/tjener.cfg b/debian-edu-config/etc/nagios/debian-edu/hosts/tjener.cfg
new file mode 100644
index 0000000..1c9f06b
--- /dev/null
+++ b/debian-edu-config/etc/nagios/debian-edu/hosts/tjener.cfg
@@ -0,0 +1,123 @@
+define host {
+	use 				server-host
+	host_name                       tjener 
+        alias                           Main SLX server
+        address                         tjener
+	parents				gateway
+        }
+define service {
+	use				server-service
+	host_name                       tjener
+        service_description             PING
+	check_command                   check_ping!100.0,20%!500.0,60%
+        }
+define service {
+        use                             server-service
+        host_name                       tjener 
+        service_description             NFS
+        check_command                   check_nfs
+        }
+define service {
+        use                             server-service
+        host_name                       tjener
+        service_description             Disk /
+        check_command                   check_disk!10%!5%!/
+        }
+define service {
+        use                             server-service
+        host_name                       tjener
+        service_description             Disk /usr
+        check_command                   check_disk!10%!5%!/usr
+        }
+define service {
+        use                             server-service
+        host_name                       tjener
+        service_description             Disk /var
+        check_command                   check_disk!10%!5%!/var
+        }
+define service {
+        use                             server-service
+        host_name                       tjener
+        service_description             Disk home0
+        check_command                   check_disk!10%!5%!/skole/tjener/home0
+        }
+define service {
+        use                             server-service
+        host_name                       tjener
+        service_description             LDAPssl
+        check_command                   check_tcp!636
+        }
+define service {
+        use                             server-service
+        host_name                       tjener
+        service_description             LDAP
+        check_command                   check_ldap
+        }
+define service {
+        use                             server-service
+        host_name                       tjener
+        service_description             SSH
+        check_command                   check_ssh
+        }
+define service {
+        use                             server-service
+        host_name                       tjener
+        service_description             HTTP
+        check_command                   check_http
+        }
+define service {
+        use                             server-service
+        host_name                       tjener
+        service_description             DNS
+        check_command                   check_dns
+        }
+define service {
+        use                             server-service
+        host_name                       tjener
+        service_description             IMAPS
+        check_command                   check_simap
+        }
+# This check fails a lot
+# Uncomment if you wish
+#define service {
+#        use                             server-service
+#        host_name                       tjener
+#        service_description             Time server NTP
+#        check_command                   check_ntp
+#        }
+define service {
+        use                             server-service
+        host_name                       tjener
+        service_description             SMTP
+        check_command                   check_smtp
+        }
+define service {
+        use                             server-service
+        host_name                       tjener
+        service_description             Load as in top
+        check_command                   check_load!7,7,7!9,9,9
+        }
+define service {
+        use                             server-service
+        host_name                       tjener
+        service_description             CUPS
+        check_command                   check_tcp!631
+        }
+define service {
+        use                             server-service
+        host_name                       tjener
+        service_description             SAMBA
+        check_command                   check_tcp!139
+        }
+define service {
+        use                             server-service
+        host_name                       tjener
+        service_description             SQUID
+        check_command                   check_tcp!3128
+        }
+define service {
+        use                             server-service
+        host_name                       tjener
+        service_description             WEBMIN
+        check_command                   check_tcp!10000
+        }
diff --git a/debian-edu-config/etc/nagios/debian-edu/hosttemplates.cfg b/debian-edu-config/etc/nagios/debian-edu/hosttemplates.cfg
new file mode 100644
index 0000000..5d07e7e
--- /dev/null
+++ b/debian-edu-config/etc/nagios/debian-edu/hosttemplates.cfg
@@ -0,0 +1,33 @@
+# Generic host definition, gets inherited by defined hosts by reference
+define host{
+	name				generic-host	
+	notifications_enabled		1
+	event_handler_enabled		1
+	flap_detection_enabled		1
+	process_perf_data		1
+	retain_status_information	1
+	retain_nonstatus_information	1
+	register			0
+	}
+
+define host{
+	name				server-host
+	use				generic-host
+	check_command                   check-host-alive
+        max_check_attempts              3
+        notification_interval           30
+        notification_period             24x7
+        notification_options            d,u,r
+	register			0
+        }
+
+define host{
+	name				ws-host
+	use				generic-host
+	check_command                   check-host-alive
+        max_check_attempts              3
+        notification_interval           120
+        notification_period		workhours
+        notification_options            d,u,r
+	register			0
+        }
diff --git a/debian-edu-config/etc/nagios/debian-edu/htpasswd.users b/debian-edu-config/etc/nagios/debian-edu/htpasswd.users
new file mode 100644
index 0000000..216e07a
--- /dev/null
+++ b/debian-edu-config/etc/nagios/debian-edu/htpasswd.users
@@ -0,0 +1 @@
+nagiosadmin:$1$zzYXNMkf$KM0cGbMKb/TXJxbLWu7RX0
diff --git a/debian-edu-config/etc/nagios/debian-edu/index.html b/debian-edu-config/etc/nagios/debian-edu/index.html
new file mode 100644
index 0000000..b13ba0b
--- /dev/null
+++ b/debian-edu-config/etc/nagios/debian-edu/index.html
@@ -0,0 +1,27 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<HTML>
+<HEAD>
+<META NAME="ROBOTS" CONTENT="NOINDEX, NOFOLLOW">
+<TITLE>Nagios</TITLE>
+</HEAD>
+<FRAMESET BORDER="0" FRAMEBORDER="0" FRAMESPACING="0" COLS="180,*">
+<FRAME SRC="side.html" NAME="side" TARGET="main">
+<FRAME SRC="main.html" NAME="main">
+</FRAMESET>
+
+<NOFRAMES>
+<!-- This page requires a web browser which supports frames. --> 
+<p>
+<center>
+<h2>Nagios</h2>
+<a href="http://www.nagios.org" alt="Nagios Home">www.nagios.org</a><br>
+Copyright (c) 1999-2001 Ethan A. Galstad<br>
+</center>
+</p>
+<p>
+<i>Note: These pages require a browser which supports frames</i>
+</p>
+</NOFRAMES>
+
+</HTML>
diff --git a/debian-edu-config/etc/nagios/debian-edu/main.html b/debian-edu-config/etc/nagios/debian-edu/main.html
new file mode 100644
index 0000000..2f17813
--- /dev/null
+++ b/debian-edu-config/etc/nagios/debian-edu/main.html
@@ -0,0 +1,95 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<HTML>
+<HEAD>
+<META NAME="ROBOTS" CONTENT="NOINDEX, NOFOLLOW">
+<TITLE>NetSaint</TITLE>
+
+<STYLE type="text/css">
+
+<!--
+
+	.main { font-family: arial,serif; background-color : white; color: black; font-size: 12pt; }
+
+	.version { font-family: arial,serif; text-align: center; color: red; font-weight: bold; font-size: 18pt; }
+	.releaseDate { font-family: arial,serif; text-align: center; font-size: 12pt; }
+
+	.disclaimer { font-family: arial,serif; text-align: center; font-size: 8pt; }
+
+	.infoBox { font-family: arial,serif; font-size : 12pt; background-color : #A5A3A3; padding: 2; }
+
+-->
+	
+</STYLE>
+
+</HEAD>
+
+<BODY CLASS="main">
+
+<P>
+<div align="center">
+<a href="http://www.skolelinux.no/" target="_blank"><IMG SRC="images/skolelinux_logo.png" BORDER="0" ALT="Skolelinux"></a><br clear=all>
+</div>
+</P>
+
+<P>
+<div align=center>
+<div align=center CLASS="version">System monitoring for Skolelinux / Debian-Edu</div>
+<div align=center CLASS="releaseDate">Powered by Nagios&reg</div>
+</div>
+</P>
+
+<div align="center">
+<table border="1" width="75%"  CLASS="infoBox" CELLSPACING=0 CELLPADDING=0>
+<tr CLASS="infoBox">
+<td>
+<table border=0 CLASS="infoBox">
+
+<tr CLASS="infoBox">
+<td CLASS="infoBox">
+<b><u>New Installations:</u></b><br><br>
+<p>
+New installations of Skolelinux / Debian-Edu will have monitoring enabled for
+the main server and the standard gateway. Use the navigation bar on the left
+to view your details.</p>
+To enable monitoring of other hosts and network devices on your network, please
+read the Nagios <a href="docs/">documentation</a> and add the config for 
+the machines and other equipment required. 
+</p>
+</td>
+</tr>
+
+<tr CLASS="infoBox">
+<td CLASS="infoBox">
+<p>
+&nbsp
+</p>
+<p>
+Visit the Nagios homepage at <a href="http://www.nagios.org" target="_top">http://www.nagios.org</a> for information on bug fixes, upgrades, support, etc.
+</p>
+</td>
+</tr>
+
+</table>
+</td>
+</tr>
+</table>
+</div>
+
+<br clear=all>
+
+<div align="center">
+<a href="http://www.nagios.org" target="_top"><img src="images/weblogo1.png" border="0" alt="Monitored by Nagios"></a>
+</div>
+
+<br clear=all>
+
+<div align="center" CLASS="disclaimer">
+Nagios and the Nagios logo are registered trademarks of Ethan Galstad.<br>
+Nagios is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE WARRANTY OF DESIGN, MERCHANTABILITY, AND FITNESS FOR A PARTICULAR PURPOSE. 
+</div>
+
+
+</BODY>
+</HTML>
+
diff --git a/debian-edu-config/etc/nagios/debian-edu/misccommands.cfg b/debian-edu-config/etc/nagios/debian-edu/misccommands.cfg
new file mode 100644
index 0000000..36ee467
--- /dev/null
+++ b/debian-edu-config/etc/nagios/debian-edu/misccommands.cfg
@@ -0,0 +1,30 @@
+# notify command to not notify anyone
+define command {
+       command_name	notify-by-nothing
+       command_line	/bin/true
+}
+
+define command{
+	command_name	notify-by-email
+	command_line	/usr/bin/printf "%b" "***** Nagios  *****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost: $HOSTALIAS$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\n\nDate/Time: $DATETIME$\n\nAdditional Info:\n\n$OUTPUT$" | /usr/bin/mail -s "** $NOTIFICATIONTYPE$ alert - $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" $CONTACTEMAIL$
+	}
+define command{
+	command_name	notify-by-epager
+	command_line	/usr/bin/printf "%b" "Service: $SERVICEDESC$\nHost: $HOSTNAME$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\nInfo: $OUTPUT$\nDate: $DATETIME$" | /usr/bin/mail -s "$NOTIFICATIONTYPE$: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$" $CONTACTPAGER$
+	}
+define command{
+	command_name	host-notify-by-email
+	command_line	/usr/bin/printf "%b" "***** Nagios  *****\n\nNotification Type: $NOTIFICATIONTYPE$\nHost: $HOSTNAME$\nState: $HOSTSTATE$\nAddress: $HOSTADDRESS$\nInfo: $OUTPUT$\n\nDate/Time: $DATETIME$\n" | /usr/bin/mail -s "Host $HOSTSTATE$ alert for $HOSTNAME$!" $CONTACTEMAIL$
+	}
+define command{
+	command_name	host-notify-by-epager
+	command_line	/usr/bin/printf "%b" "Host '$HOSTALIAS$' is $HOSTSTATE$\nInfo: $OUTPUT$\nTime: $DATETIME$" | /usr/bin/mail -s "$NOTIFICATIONTYPE$ alert - Host $HOSTNAME$ is $HOSTSTATE$" $CONTACTPAGER$
+	}
+define command{
+	command_name	process-host-perfdata
+	command_line	/usr/bin/printf "%b" "$LASTCHECK$\t$HOSTNAME$\t$HOSTSTATE$\t$HOSTATTEMPT$\t$STATETYPE$\t$EXECUTIONTIME$\t$OUTPUT$\t$PERFDATA$" >> /var/log/nagios/host-perfdata.out
+	}
+define command{
+	command_name	process-service-perfdata
+	command_line	/usr/bin/printf "%b" "$LASTCHECK$\t$HOSTNAME$\t$SERVICEDESC$\t$SERVICESTATE$\t$SERVICEATTEMPT$\t$STATETYPE$\t$EXECUTIONTIME$\t$LATENCY$\t$OUTPUT$\t$PERFDATA$" >> /var/log/nagios/service-perfdata.out
+	}
diff --git a/debian-edu-config/etc/nagios/debian-edu/resource.cfg b/debian-edu-config/etc/nagios/debian-edu/resource.cfg
new file mode 100644
index 0000000..2711d37
--- /dev/null
+++ b/debian-edu-config/etc/nagios/debian-edu/resource.cfg
@@ -0,0 +1,4 @@
+$USER1$=/usr/lib/nagios/plugins
+#$USER2$=/usr/lib/nagios/plugins/eventhandlers
+#$USER3$=someuser
+#$USER4$=somepassword
diff --git a/debian-edu-config/etc/nagios/debian-edu/services.cfg b/debian-edu-config/etc/nagios/debian-edu/services.cfg
new file mode 100644
index 0000000..76d5866
--- /dev/null
+++ b/debian-edu-config/etc/nagios/debian-edu/services.cfg
@@ -0,0 +1,122 @@
+# Inherit service templates from servicetemplates.srv
+define service {
+        use                             server-service
+        host_name                       gateway
+        service_description             PING
+        check_command                   check_ping!100.0,20%!500.0,60%
+        }
+define service {
+	use				server-service
+        host_name                       tjener
+        service_description             NFS
+        check_command                   check_nfs
+	}
+define service {
+	use				server-service
+        host_name                       tjener
+        service_description             Disk /
+        check_command                   check_disk!20%!5%!/
+	}
+define service {
+	use				server-service
+        host_name                       tjener
+        service_description             Disk /usr
+        check_command                   check_disk!20%!5%!/usr
+	}
+define service {
+	use				server-service
+        host_name                       tjener
+        service_description             Disk /var
+        check_command                   check_disk!20%!5%!/var
+	}
+define service {
+	use				server-service
+        host_name                       tjener
+        service_description             Disk home0
+        check_command                   check_disk!15%!5%!/skole/tjener/home0
+	}
+define service {
+	use				server-service
+        host_name                       tjener
+        service_description             LDAPssl
+        check_command                   check_tcp!636
+	}
+define service {
+	use				server-service
+        host_name                       tjener
+        service_description             LDAP
+        check_command                   check_tcp!389
+	}
+define service {
+	use				server-service
+        host_name                       tjener
+        service_description             SSH
+        check_command                   check_ssh
+	}
+define service {
+	use				server-service
+        host_name                       tjener
+        service_description             HTTP
+        check_command                   check_http
+	}
+define service {
+        use                             server-service
+        host_name                       tjener
+        service_description             DNS
+        check_command                   check_dns
+        }
+define service {
+        use                             server-service
+        host_name                       tjener
+        service_description             IMAP
+        check_command                   check_imap
+        }
+define service {
+        use                             server-service
+        host_name                       tjener
+        service_description             IMAPS
+        check_command                   check_simap
+        }
+
+define service {
+        use                             server-service
+        host_name                       tjener
+        service_description             Time server NTP
+        check_command                   check_ntp
+        }
+define service {
+        use                             server-service
+        host_name                       tjener
+        service_description             SMTP
+        check_command                   check_smtp
+        }
+define service {
+        use                             server-service
+        host_name                       tjener
+        service_description             Load as in top
+        check_command                   check_load!75,75,75!90,90,90
+        }
+define service {
+        use                             server-service
+        host_name                       tjener
+        service_description             CUPS
+        check_command                   check_tcp!631
+        }
+define service {
+        use                             server-service
+        host_name                       tjener
+        service_description             SAMBA
+        check_command                   check_tcp!139
+        }
+define service {
+        use                             server-service
+        host_name                       tjener
+        service_description             SQUID
+        check_command                   check_tcp!3128
+        }
+define service {
+        use                             server-service
+        host_name                       tjener
+        service_description             WEBMIN
+        check_command                   check_tcp!10000
+        }
diff --git a/debian-edu-config/etc/nagios/debian-edu/servicetemplates.cfg b/debian-edu-config/etc/nagios/debian-edu/servicetemplates.cfg
new file mode 100644
index 0000000..a27ba72
--- /dev/null
+++ b/debian-edu-config/etc/nagios/debian-edu/servicetemplates.cfg
@@ -0,0 +1,42 @@
+# Generic service definition, gets inherited by reference by defined services
+define service{
+	name				generic-service	
+	active_checks_enabled		1
+	passive_checks_enabled		1
+	parallelize_check		1
+	obsess_over_service		1
+	check_freshness			0
+	notifications_enabled		1
+	event_handler_enabled		1
+	flap_detection_enabled		1
+	process_perf_data		1
+	retain_status_information	1
+	retain_nonstatus_information	1
+	register			0
+	}
+define service{
+	name				server-service
+	use				generic-service
+        max_check_attempts              3
+        normal_check_interval           5
+        retry_check_interval            5
+        contact_groups                  nagios-admins
+        check_period                    24x7
+        notification_interval           30
+        notification_period             24x7
+        notification_options            u,w,c,r
+	register			0
+	}
+define service{
+	name				ws-service
+	use				generic-service
+        max_check_attempts              2
+        normal_check_interval           30
+        retry_check_interval            15
+        contact_groups                  nagios-admins
+        check_period                    workhours
+        notification_interval           120
+        notification_period             workhours
+        notification_options            w,c
+	register			0
+	}
diff --git a/debian-edu-config/etc/nagios/debian-edu/side.html b/debian-edu-config/etc/nagios/debian-edu/side.html
new file mode 100644
index 0000000..9905e4f
--- /dev/null
+++ b/debian-edu-config/etc/nagios/debian-edu/side.html
@@ -0,0 +1,213 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<HTML>
+<HEAD>
+<META NAME="ROBOTS" CONTENT="NOINDEX, NOFOLLOW">
+<TITLE>Nagios</TITLE>
+
+<STYLE type="text/css">
+
+<!--
+
+	A.NavBarItem { font-family: arial,serif; background-color : white; color: black; font-size: i9pt; font-weight: normal; text-decoration: none; }
+	BODY.navbar { font-family: arial,serif; background-color : white; color: white; }
+
+-->
+	
+</STYLE>
+
+</HEAD>
+
+<BODY CLASS='navbar'>
+
+<SCRIPT LANGUAGE="JavaScript">
+<!--
+
+if(parseInt(navigator.appVersion.substring(0,1))>=3){
+  doton = new Image(13,14);
+  doton.src = "images/orangedot.gif";
+  dotoff = new Image(13,14);
+  dotoff.src = "images/greendot.gif";
+  }
+
+function switchdot(name,on){
+  if(parseInt(navigator.appVersion.substring(0,1))>=3){
+    image = eval("" + (on == 1 ? "doton.src" : "dotoff.src"));
+    document[name].src=image;
+    }
+  }
+
+//-->
+</SCRIPT>
+
+
+
+<table width="150" border="0">
+  <tr>
+    <td>
+      <div align="center"><a href="http://www.skolelinux.no" target="_blank"><img src="images/skolelinux_logo_140.png" border="0" alt="Skolelinux"></a></div>
+    </td>
+  </tr>
+</table>
+
+<table width="150" border="0">
+  <tr>
+    <td><img src="images/sbgeneral.png" width="147" height="21" alt="-- General --"></td>
+  </tr>
+</table>
+
+<table width=150 border="0" cellpadding=0 cellspacing=0>
+  <tr> 
+    <td width=13><img src="images/greendot.gif" width="13" height="14" name="home-dot"></td>
+    <td nowrap width=134><a href="main.html" target="main" onMouseOver="switchdot('home-dot',1)" onMouseOut="switchdot('home-dot',0)" class="NavBarItem">Home</a></td>
+  </tr>
+  <tr> 
+    <td width=13><img src="images/greendot.gif" width="13" height="14" name="docs-dot"></td>
+    <td nowrap><a href="docs/index.html" target="main" onMouseOver="switchdot('docs-dot',1)" onMouseOut="switchdot('docs-dot',0)" class="NavBarItem">Documentation</a></td>
+  </tr>
+  <tr>
+    <td colspan="2" height="10"></td>
+  </tr>
+</table>
+
+<table width="150" border="0">
+  <tr> 
+    <td><img src="images/sbmonitor.png" width="147" height="21" alt="-- Monitoring --"></td>
+  </tr>
+</table>
+
+<table width="150" border="0" cellpadding=0 cellspacing=0>
+  <tr> 
+    <td width=13><img src="images/greendot.gif" width="13" height="14" name="tac-dot"></td>
+    <td nowrap width=134><a href="/nagios/cgi-bin/tac.cgi" target="main" onMouseOver="switchdot('tac-dot',1)" onMouseOut="switchdot('tac-dot',0)" class="NavBarItem">Tactical Overview</a></td>
+  </tr>
+  <tr> 
+    <td width=13><img src="images/greendot.gif" width="13" height="14" name="status-dot"></td>
+    <td nowrap><a href="/nagios/cgi-bin/status.cgi?host=all" target="main" onMouseOver="switchdot('status-dot',1)" onMouseOut="switchdot('status-dot',0)" class="NavBarItem">Service Detail</a></td>
+  </tr>
+  <tr> 
+    <td width=13><img src="images/greendot.gif" width="13" height="14" name="hoststatus-dot"></td>
+    <td nowrap><a href="/nagios/cgi-bin/status.cgi?hostgroup=all&style=hostdetail" target="main" onMouseOver="switchdot('hoststatus-dot',1)" onMouseOut="switchdot('hoststatus-dot',0)" class="NavBarItem">Host Detail</a></td>
+  </tr>
+  <tr> 
+    <td width=13><img src="images/greendot.gif" width="13" height="14" name="hgstatus-dot"></td>
+    <td nowrap><a href="/nagios/cgi-bin/status.cgi?hostgroup=all" target="main" onMouseOver="switchdot('hgstatus-dot',1)" onMouseOut="switchdot('hgstatus-dot',0)" class="NavBarItem">Status Overview</a></td>
+  </tr>
+  <tr> 
+    <td width=13><img src="images/greendot.gif" width="13" height="14" name="hgstatus2-dot"></td>
+    <td nowrap><a href="/nagios/cgi-bin/status.cgi?hostgroup=all&style=summary" target="main" onMouseOver="switchdot('hgstatus2-dot',1)" onMouseOut="switchdot('hgstatus2-dot',0)" class="NavBarItem">Status Summary</a></td>
+  </tr>
+  <tr> 
+    <td width=13><img src="images/greendot.gif" width="13" height="14" name="hgstatus3-dot"></td>
+    <td nowrap><a href="/nagios/cgi-bin/status.cgi?hostgroup=all&style=grid" target="main" onMouseOver="switchdot('hgstatus3-dot',1)" onMouseOut="switchdot('hgstatus3-dot',0)" class="NavBarItem">Status Grid</a></td>
+  </tr>
+  <tr> 
+    <td width=13><img src="images/greendot.gif" width="13" height="14" name="statusmap-dot"></td>
+    <td nowrap><a href="/nagios/cgi-bin/statusmap.cgi?host=all" target="main" onMouseOver="switchdot('statusmap-dot',1)" onMouseOut="switchdot('statusmap-dot',0)" class="NavBarItem">Status Map</a></td>
+  </tr>
+  <tr> 
+    <td width=13><img src="images/greendot.gif" width="13" height="14" name="statuswrl-dot"></td>
+    <td nowrap><a href="/nagios/cgi-bin/statuswrl.cgi?host=all" target="main" onMouseOver="switchdot('statuswrl-dot',1)" onMouseOut="switchdot('statuswrl-dot',0)" class="NavBarItem">3-D Status Map</a></td>
+  </tr>
+  <tr> 
+    <td colspan="2" height="10"></td>
+  </tr>
+  <tr> 
+    <td width=13><img src="images/greendot.gif" width="13" height="14" name="svcproblems-dot"></td>
+    <td nowrap><a href="/nagios/cgi-bin/status.cgi?host=all&servicestatustypes=248" target="main" onMouseOver="switchdot('svcproblems-dot',1)" onMouseOut="switchdot('svcproblems-dot',0)" class="NavBarItem">Service Problems</a></td>
+  </tr>
+  <tr> 
+    <td width=13><img src="images/greendot.gif" width="13" height="14" name="hostproblems-dot"></td>
+    <td nowrap><a href="/nagios/cgi-bin/status.cgi?hostgroup=all&style=hostdetail&hoststatustypes=12" target="main" onMouseOver="switchdot('hostproblems-dot',1)" onMouseOut="switchdot('hostproblems-dot',0)" class="NavBarItem">Host Problems</a></td>
+  </tr>
+  <tr> 
+    <td width=13><img src="images/greendot.gif" width="13" height="14" name="outages-dot"></td>
+    <td nowrap><a href="/nagios/cgi-bin/outages.cgi" target="main" onMouseOver="switchdot('outages-dot',1)" onMouseOut="switchdot('outages-dot',0)" class="NavBarItem">Network Outages</a></td>
+  </tr>
+  <tr> 
+    <td colspan="2" height="10"></td>
+  </tr>
+  <tr> 
+    <td width=13><img src="images/greendot.gif" width="13" height="14" name="comment-dot"></td>
+    <td nowrap><a href="/nagios/cgi-bin/extinfo.cgi?&type=3" target="main" onMouseOver="switchdot('comment-dot',1)" onMouseOut="switchdot('comment-dot',0)" class="NavBarItem">Comments</a></td>
+  </tr>
+  <tr> 
+    <td width=13><img src="images/greendot.gif" width="13" height="14" name="downtime-dot"></td>
+    <td nowrap><a href="/nagios/cgi-bin/extinfo.cgi?&type=6" target="main" onMouseOver="switchdot('downtime-dot',1)" onMouseOut="switchdot('downtime-dot',0)" class="NavBarItem">Downtime</a></td>
+  </tr>
+  <tr> 
+    <td colspan="2" height="10"></td>
+  </tr>
+  <tr> 
+    <td width=13><img src="images/greendot.gif" width="13" height="14" name="processinfo-dot"></td>
+    <td nowrap><a href="/nagios/cgi-bin/extinfo.cgi?&type=0" target="main" onMouseOver="switchdot('processinfo-dot',1)" onMouseOut="switchdot('processinfo-dot',0)" class="NavBarItem">Process Info</a></td>
+  </tr>
+  <tr> 
+    <td width=13><img src="images/greendot.gif" width="13" height="14" name="performance-dot"></td>
+    <td nowrap><a href="/nagios/cgi-bin/extinfo.cgi?&type=4" target="main" onMouseOver="switchdot('performance-dot',1)" onMouseOut="switchdot('performance-dot',0)" class="NavBarItem">Performance Info</a></td>
+  </tr>
+  <tr> 
+    <td width=13><img src="images/greendot.gif" width="13" height="14" name="queue-dot"></td>
+    <td nowrap><a href="/nagios/cgi-bin/extinfo.cgi?&type=7" target="main" onMouseOver="switchdot('queue-dot',1)" onMouseOut="switchdot('queue-dot',0)" class="NavBarItem">Scheduling Queue</a></td>
+  </tr>
+  <tr>
+    <td colspan="2" height="10"></td>
+  </tr>
+</table>
+
+<table width="150" border="0">
+  <tr> 
+    <td><img src="images/sbreport.png" width="147" height="21" alt="-- Reporting --"></td>
+  </tr>
+</table>
+
+<table width="150" border="0" cellpadding=0 cellspacing=0>
+  <tr> 
+    <td width=13><img src="images/greendot.gif" width="13" height="14" name="trends-dot"></td>
+    <td nowrap width=134><a href="/nagios/cgi-bin/trends.cgi" target="main" onMouseOver="switchdot('trends-dot',1)" onMouseOut="switchdot('trends-dot',0)" class="NavBarItem">Trends</a></td>
+  </tr>
+  <tr> 
+    <td width=13><img src="images/greendot.gif" width="13" height="14" name="avail-dot"></td>
+    <td nowrap><a href="/nagios/cgi-bin/avail.cgi" target="main" onMouseOver="switchdot('avail-dot',1)" onMouseOut="switchdot('avail-dot',0)" class="NavBarItem">Availability</a></td>
+  </tr>
+  <tr> 
+    <td width=13><img src="images/greendot.gif" width="13" height="14" name="histogram-dot"></td>
+    <td nowrap><a href="/nagios/cgi-bin/histogram.cgi" target="main" onMouseOver="switchdot('histogram-dot',1)" onMouseOut="switchdot('histogram-dot',0)" class="NavBarItem">Alert Histogram</a></td>
+  </tr>
+  <tr> 
+    <td width=13><img src="images/greendot.gif" width="13" height="14" name="history-dot"></td>
+    <td nowrap><a href="/nagios/cgi-bin/history.cgi?host=all" target="main" onMouseOver="switchdot('history-dot',1)" onMouseOut="switchdot('history-dot',0)" class="NavBarItem">Alert History</a></td>
+  </tr>
+  <tr> 
+    <td width=13><img src="images/greendot.gif" width="13" height="14" name="summary-dot"></td>
+    <td nowrap><a href="/nagios/cgi-bin/summary.cgi" target="main" onMouseOver="switchdot('summary-dot',1)" onMouseOut="switchdot('summary-dot',0)" class="NavBarItem">Alert Summary</a></td>
+  </tr>
+  <tr> 
+    <td width=13><img src="images/greendot.gif" width="13" height="14" name="notifications-dot"></td>
+    <td nowrap><a href="/nagios/cgi-bin/notifications.cgi?contact=all" target="main" onMouseOver="switchdot('notifications-dot',1)" onMouseOut="switchdot('notifications-dot',0)" class="NavBarItem">Notifications</a></td>
+  </tr>
+  <tr> 
+    <td width=13><img src="images/greendot.gif" width="13" height="14" name="logfile-dot"></td>
+    <td nowrap><a href="/nagios/cgi-bin/showlog.cgi" target="main" onMouseOver="switchdot('logfile-dot',1)" onMouseOut="switchdot('logfile-dot',0)" class="NavBarItem">Event Log</a></td>
+  </tr>
+  <tr>
+    <td colspan="2" height="10"></td>
+  </tr>
+</table>
+
+
+<table width="150" border="0">
+  <tr> 
+    <td><img src="images/sbconfig.png" width="147" height="21" alt="-- Configuration --"></td>
+  </tr>
+</table>
+
+<table width="150" border="0" cellpadding=0 cellspacing=0>
+  <tr> 
+    <td width=13><img src="images/greendot.gif" width="13" height="14" name="config-dot"></td>
+    <td nowrap width=134><a href="/nagios/cgi-bin/config.cgi" target="main" onMouseOver="switchdot('config-dot',1)" onMouseOut="switchdot('config-dot',0)" class="NavBarItem">View Config</a></td>
+  </tr>
+</table>
+
+</BODY>
+</HTML>
diff --git a/debian-edu-config/etc/nagios/debian-edu/skolelinux_logo.png b/debian-edu-config/etc/nagios/debian-edu/skolelinux_logo.png
new file mode 100644
index 0000000..09d8750
Binary files /dev/null and b/debian-edu-config/etc/nagios/debian-edu/skolelinux_logo.png differ
diff --git a/debian-edu-config/etc/nagios/debian-edu/skolelinux_logo_140.png b/debian-edu-config/etc/nagios/debian-edu/skolelinux_logo_140.png
new file mode 100644
index 0000000..4d37eda
Binary files /dev/null and b/debian-edu-config/etc/nagios/debian-edu/skolelinux_logo_140.png differ
diff --git a/debian-edu-config/etc/nagios/debian-edu/timeperiods.cfg b/debian-edu-config/etc/nagios/debian-edu/timeperiods.cfg
new file mode 100644
index 0000000..5ec5b23
--- /dev/null
+++ b/debian-edu-config/etc/nagios/debian-edu/timeperiods.cfg
@@ -0,0 +1,35 @@
+define timeperiod{
+	timeperiod_name	24x7
+	alias		24 Hours A Day, 7 Days A Week
+	sunday		00:00-24:00
+	monday		00:00-24:00
+	tuesday		00:00-24:00
+	wednesday	00:00-24:00
+	thursday	00:00-24:00
+	friday		00:00-24:00
+	saturday	00:00-24:00
+	}
+define timeperiod{
+	timeperiod_name	workhours
+	alias		"Normal" Working Hours
+	monday		08:00-16:00
+	tuesday		08:00-16:00
+	wednesday	08:00-16:00
+	thursday	08:00-16:00
+	friday		08:00-16:00
+	}
+define timeperiod{
+	timeperiod_name	nonworkhours
+	alias		Non-Work Hours
+	sunday		00:00-24:00
+	monday		00:00-08:00,16:00-24:00
+	tuesday		00:00-08:00,16:00-24:00
+	wednesday	00:00-08:00,16:00-24:00
+	thursday	00:00-08:00,16:00-24:00
+	friday		00:00-08:00,16:00-24:00
+	saturday	00:00-24:00
+	}
+define timeperiod{
+	timeperiod_name	none
+	alias		No Time Is A Good Time
+	}
diff --git a/debian-edu-config/etc/nagios/nagios-debian-edu.cfg b/debian-edu-config/etc/nagios/nagios-debian-edu.cfg
new file mode 100644
index 0000000..4951a5a
--- /dev/null
+++ b/debian-edu-config/etc/nagios/nagios-debian-edu.cfg
@@ -0,0 +1,71 @@
+log_file=/var/log/nagios/nagios.log
+cfg_file=/etc/nagios/debian-edu/hosttemplates.cfg
+cfg_file=/etc/nagios/debian-edu/servicetemplates.cfg
+cfg_file=/etc/nagios/debian-edu/checkcommands.cfg
+cfg_file=/etc/nagios/debian-edu/misccommands.cfg
+cfg_file=/etc/nagios/debian-edu/contacts.cfg
+cfg_file=/etc/nagios/debian-edu/contactgroups.cfg
+#cfg_file=/etc/nagios/debian-edu/dependencies.cfg
+cfg_dir=/etc/nagios/debian-edu/hostgroups
+#cfg_file=/etc/nagios/debian-edu/services.cfg
+cfg_file=/etc/nagios/debian-edu/timeperiods.cfg
+cfg_dir=/etc/nagios/debian-edu/hosts
+resource_file=/etc/nagios/debian-edu/resource.cfg
+status_file=/var/log/nagios/status.log
+nagios_user=nagios
+nagios_group=nagios
+check_external_commands=1
+command_check_interval=-1
+command_file=/var/run/nagios/nagios.cmd
+comment_file=/var/log/nagios/comment.log
+downtime_file=/var/log/nagios/downtime.log
+lock_file=/var/log/nagios/nagios.lock
+temp_file=/var/log/nagios/nagios.tmp
+log_rotation_method=d
+log_archive_path=/var/log/nagios/archives
+use_syslog=1
+log_notifications=1
+log_service_retries=1
+log_host_retries=1
+log_event_handlers=1
+log_initial_states=0
+log_external_commands=1
+log_passive_service_checks=1
+inter_check_delay_method=s
+service_interleave_factor=s
+max_concurrent_checks=0
+service_reaper_frequency=10
+sleep_time=1
+service_check_timeout=60
+host_check_timeout=30
+event_handler_timeout=30
+notification_timeout=30
+ocsp_timeout=5
+perfdata_timeout=5
+retain_state_information=1
+state_retention_file=/var/log/nagios/status.sav
+retention_update_interval=60
+use_retained_program_state=1
+interval_length=60
+use_agressive_host_checking=0
+execute_service_checks=1
+accept_passive_service_checks=1
+enable_notifications=1
+enable_event_handlers=1
+process_performance_data=1
+obsess_over_services=0
+check_for_orphaned_services=0
+check_service_freshness=1
+freshness_check_interval=60
+aggregate_status_updates=1
+status_update_interval=15
+enable_flap_detection=0
+low_service_flap_threshold=5.0
+high_service_flap_threshold=20.0
+low_host_flap_threshold=5.0
+high_host_flap_threshold=20.0
+date_format=euro
+illegal_object_name_chars=`~!$%^&*|'"<>?,()=
+illegal_macro_output_chars=`~$&|'"<>
+admin_email=nagios
+admin_pager=pagenagios
diff --git a/debian-edu-config/etc/nagios2/debian-edu/cgi.cfg b/debian-edu-config/etc/nagios2/debian-edu/cgi.cfg
new file mode 100644
index 0000000..b123e35
--- /dev/null
+++ b/debian-edu-config/etc/nagios2/debian-edu/cgi.cfg
@@ -0,0 +1,27 @@
+# Written by  () at: January 10, 2007, 11:04 pm
+# Generated for 
+main_config_file=/etc/nagios2/debian-edu/nagios.cfg
+resource_file=/etc/nagios2/debian-edu/resources.cfg
+physical_html_path=/usr/share/nagios2/htdocs
+
+url_html_path=/nagios2
+
+nagios_check_command=/usr/lib/nagios/plugins/check_nagios /var/cache/nagios2/status.dat 5 '/usr/sbin/nagios2'
+
+authorized_for_system_information=nagiosadmin
+
+authorized_for_system_commands=nagiosadmin
+
+authorized_for_configuration_information=nagiosadmin
+
+authorized_for_all_hosts=nagiosadmin
+
+authorized_for_all_host_commands=nagiosadmin
+
+authorized_for_all_services=nagiosadmin
+
+authorized_for_all_service_commands=nagiosadmin
+
+refresh_rate=90
+ping_syntax=/bin/ping -n -U -c 5 $HOSTADDRESS$
+
diff --git a/debian-edu-config/etc/nagios2/debian-edu/commands.cfg b/debian-edu-config/etc/nagios2/debian-edu/commands.cfg
new file mode 100644
index 0000000..42c8c63
--- /dev/null
+++ b/debian-edu-config/etc/nagios2/debian-edu/commands.cfg
@@ -0,0 +1,582 @@
+# Written by  () at: January 10, 2007, 11:04 pm
+# Generated for 
+define command{
+command_name	check-fast-alive
+command_line	/usr/lib/nagios/plugins/check_fping -H $HOSTADDRESS$
+}
+
+define command{
+command_name	check-host-alive
+command_line	/usr/lib/nagios/plugins/check_ping -H $HOSTADDRESS$ -w 5000,100% -c 5000,100% -p 1
+}
+
+define command{
+command_name	check-nfs
+command_line	/usr/lib/nagios/plugins/check_rpc -H $HOSTADDRESS$ -C nfs -c2,3
+}
+
+define command{
+command_name	check-printer-alive
+command_line	/usr/lib/nagios/plugins/check_ping -H $HOSTADDRESS$ -w 5000,100% -c 5000,100% -p 1
+}
+
+define command{
+command_name	check-router-alive
+command_line	/usr/lib/nagios/plugins/check_ping -H $HOSTADDRESS$ -w 5000,100% -c 5000,100% -p 1
+}
+
+define command{
+command_name	check-rpc
+command_line	/usr/lib/nagios/plugins/check_rpc -H $HOSTADDRESS$ -C $ARG1$
+}
+
+define command{
+command_name	check-switch-alive
+command_line	/usr/lib/nagios/plugins/check_ping $HOSTADDRESS$ -w 5000,100% -c 5000,100% -p 1
+}
+
+define command{
+command_name	check_all_disks
+command_line	/usr/lib/nagios/plugins/check_disk -w $ARG1$ -c $ARG2$
+}
+
+define command{
+command_name	check_apt
+command_line	/usr/lib/nagios/plugins/check_apt
+}
+
+define command{
+command_name	check_apt_distupgrade
+command_line	/usr/lib/nagios/plugins/check_apt -d
+}
+
+define command{
+command_name	check_breeze
+command_line	/usr/lib/nagios/plugins/check_breeze -H $HOSTADDRESS$ -w $ARG1$ -c $ARG2$
+}
+
+define command{
+command_name	check_compaq_thermalCondition
+command_line	/usr/lib/nagios/plugins/check_snmp -H $HOSTADDRESS$ -C $ARG1$ -o .1.3.6.1.4.1.232.6.2.1.0,.1.3.6.1.4.1.232.6.2.2.0,.1.3.6.1.4.1.232.6.2.3.0,.1.3.6.1.4.1.232.6.2.4.0 -u 'ThermalCondition','ThermalTemp','ThermalSystem','ThermalCPUFan' -w 2:2,2:2,2:2,2:2 -c 1:2,1:2,1:2,1:2 -l "Thermal status "
+}
+
+define command{
+command_name	check_dhcp
+command_line	/usr/lib/nagios/plugins/check_dhcp -s $HOSTADDRESS$
+}
+
+define command{
+command_name	check_dhcp_interface
+command_line	/usr/lib/nagios/plugins/check_dhcp -s $HOSTADDRESS$ -i $ARG1$
+}
+
+define command{
+command_name	check_dig
+command_line	/usr/lib/nagios/plugins/check_dig -H $HOSTNAME$ -l $ARG1$
+}
+
+define command{
+command_name	check_disk
+command_line	/usr/lib/nagios/plugins/check_disk -w $ARG1$ -c $ARG2$ -p $ARG3$
+}
+
+define command{
+command_name	check_disk_smb
+command_line	/usr/lib/nagios/plugins/check_disk_smb -H "$ARG1$" -s $ARG2$
+}
+
+define command{
+command_name	check_disk_smb_host
+command_line	/usr/lib/nagios/plugins/check_disk_smb -a $HOSTADDRESS$ -H "$ARG1$" -s $ARG2$
+}
+
+define command{
+command_name	check_disk_smb_host_user
+command_line	/usr/lib/nagios/plugins/check_disk_smb -a $HOSTADDRESS$ -H "$ARG1$" -s $ARG2$ -u $ARG3$ -p $ARG4$
+}
+
+define command{
+command_name	check_disk_smb_user
+command_line	/usr/lib/nagios/plugins/check_disk_smb -H "$ARG1$" -s $ARG2$ -u $ARG3$ -p $ARG4$
+}
+
+define command{
+command_name	check_disk_smb_workgroup
+command_line	/usr/lib/nagios/plugins/check_disk_smb -H "$ARG1$" -s $ARG2$ -W $ARG3$
+}
+
+define command{
+command_name	check_disk_smb_workgroup_host
+command_line	/usr/lib/nagios/plugins/check_disk_smb -a $HOSTADDRESS$ -H "$ARG1$" -s $ARG2$ -W $ARG3$
+}
+
+define command{
+command_name	check_disk_smb_workgroup_host_user
+command_line	/usr/lib/nagios/plugins/check_disk_smb -a $HOSTADDRESS$ -H "$ARG1$" -s $ARG2$ -W $ARG3$ -u $ARG4$ -p $ARG5$
+}
+
+define command{
+command_name	check_disk_smb_workgroup_user
+command_line	/usr/lib/nagios/plugins/check_disk_smb -H "$ARG1$" -s $ARG2$ -W $ARG3$ -u $ARG4$ -p $ARG5$
+}
+
+define command{
+command_name	check_dns
+command_line	/usr/lib/nagios/plugins/check_dns -H www.google.com -s $HOSTADDRESS$
+}
+
+define command{
+command_name	check_flexlm
+command_line	/usr/lib/nagios/plugins/check_flexlm -F $ARG1$
+}
+
+define command{
+command_name	check_ftp
+command_line	/usr/lib/nagios/plugins/check_ftp -H $HOSTADDRESS$
+}
+
+define command{
+command_name	check_hpjd
+command_line	/usr/lib/nagios/plugins/check_hpjd -H $HOSTADDRESS$ -C public
+}
+
+define command{
+command_name	check_http
+command_line	/usr/lib/nagios/plugins/check_http -H $HOSTADDRESS$ -I $HOSTADDRESS$
+}
+
+define command{
+command_name	check_http2
+command_line	/usr/lib/nagios/plugins/check_http -H $ARG1$ -I $HOSTADDRESS$ -w $ARG2$ -c $ARG3$
+}
+
+define command{
+command_name	check_https
+command_line	/usr/lib/nagios/plugins/check_http --ssl -H $HOSTADDRESS$ -I $HOSTADDRESS$
+}
+
+define command{
+command_name	check_https_auth
+command_line	/usr/lib/nagios/plugins/check_http --ssl -H $HOSTADDRESS$ -I $HOSTADDRESS$ -a $ARG1$
+}
+
+define command{
+command_name	check_ifoperstatus_ifdescr
+command_line	/usr/lib/nagios/plugins/check_ifoperstatus -H $HOSTADDRESS$ -C public -d $ARG1$
+}
+
+define command{
+command_name	check_ifoperstatus_ifindex
+command_line	/usr/lib/nagios/plugins/check_ifoperstatus -H $HOSTADDRESS$ -C public -k $ARG1$
+}
+
+define command{
+command_name	check_ifstatus
+command_line	/usr/lib/nagios/plugins/check_ifstatus -H $HOSTADDRESS$ -C public
+}
+
+define command{
+command_name	check_imap
+command_line	/usr/lib/nagios/plugins/check_imap -H $HOSTADDRESS$
+}
+
+define command{
+command_name	check_ldap
+command_line	/usr/lib/nagios/plugins/check_ldap -H $HOSTADDRESS$ -b $ARG1$
+}
+
+define command{
+command_name	check_load
+command_line	/usr/lib/nagios/plugins/check_load --warning=$ARG1$,$ARG2$,$ARG3$ --critical=$ARG4$,$ARG5$,$ARG6$
+}
+
+define command{
+command_name	check_mailq_exim
+command_line	/usr/lib/nagios/plugins/check_mailq -w $ARG1$ -c $ARG2$ -M exim
+}
+
+define command{
+command_name	check_mailq_postfix
+command_line	/usr/lib/nagios/plugins/check_mailq -w $ARG1$ -c $ARG2$ -M postfix
+}
+
+define command{
+command_name	check_mailq_qmail
+command_line	/usr/lib/nagios/plugins/check_mailq -w $ARG1$ -c $ARG2$ -M qmail
+}
+
+define command{
+command_name	check_mailq_sendmail
+command_line	/usr/lib/nagios/plugins/check_mailq -w $ARG1$ -c $ARG2$ -M sendmail
+}
+
+define command{
+command_name	check_mrtg
+command_line	/usr/lib/nagios/plugins/check_mrtg $ARG1$ 10 AVG $ARG2$ $ARG3$ $ARG4$ $ARG5$ $ARG6$
+}
+
+define command{
+command_name	check_mysql
+command_line	/usr/lib/nagios/plugins/check_mysql -H $HOSTADDRESS$
+}
+
+define command{
+command_name	check_mysql_cmdlinecred
+command_line	/usr/lib/nagios/plugins/check_mysql -H $HOSTADDRESS$ -u $ARG1$ -p $ARG2$
+}
+
+define command{
+command_name	check_netapp_cpuload
+command_line	/usr/lib/nagios/plugins/check_snmp -H $HOSTADDRESS$ -C $ARG1$ -o .1.3.6.1.4.1.789.1.2.1.3.0 -w 90 -c 95 -u '%' -l "CPU LOAD "
+}
+
+define command{
+command_name	check_netapp_numdisks
+command_line	/usr/lib/nagios/plugins/check_snmp -H $HOSTADDRESS$ -C $ARG1$ -o .1.3.6.1.4.1.789.1.6.4.1.0,.1.3.6.1.4.1.789.1.6.4.2.0,.1.3.6.1.4.1.789.1.6.4.8.0,.1.3.6.1.4.1.789.1.6.4.7.0 -u 'Total Disks','Active','Spare','Failed' -l ""
+}
+
+define command{
+command_name	check_netapp_uptime
+command_line	/usr/lib/nagios/plugins/check_snmp -H $HOSTADDRESS$ -C $ARG1$ -o .1.3.6.1.2.1.1.3.0 --delimiter=')' -l "Uptime is"
+}
+
+define command{
+command_name	check_netware_15load
+command_line	/usr/lib/nagios/plugins/check_nwstat -H $HOSTADDRESS$ -v "LOAD15" -w 70 -c 90
+}
+
+define command{
+command_name	check_netware_1load
+command_line	/usr/lib/nagios/plugins/check_nwstat -H $HOSTADDRESS$ -v "LOAD1" -w 70 -c 90
+}
+
+define command{
+command_name	check_netware_5load
+command_line	/usr/lib/nagios/plugins/check_nwstat -H $HOSTADDRESS$ -v "LOAD5" -w 70 -c 90
+}
+
+define command{
+command_name	check_netware_abend
+command_line	/usr/lib/nagios/plugins/check_nwstat -H $HOSTADDRESS$ -v "ABENDS" -w 10 -c 30
+}
+
+define command{
+command_name	check_netware_logins
+command_line	/usr/lib/nagios/plugins/check_nwstat -H $HOSTADDRESS$ -v "LOGINS" -w $ARG1$ -c $ARG2$
+}
+
+define command{
+command_name	check_nntp
+command_line	/usr/lib/nagios/plugins/check_nntp -H $HOSTADDRESS$
+}
+
+define command{
+command_name	check_nt
+command_line	/usr/lib/nagios/plugins/check_nt -H $HOSTADDRESS$ -v $ARG1$
+}
+
+define command{
+command_name	check_ntp
+command_line	/usr/lib/nagios/plugins/check_ntp -H $HOSTADDRESS$
+}
+
+define command{
+command_name	check_ntp_ntpq
+command_line	/usr/lib/nagios/plugins/check_ntp -H $HOSTADDRESS$ -j 10 -k 15
+}
+
+define command{
+command_name	check_nwstat_conns
+command_line	/usr/lib/nagios/plugins/check_nwstat -H $HOSTADDRESS$ -v CONNS -w $ARG1$ -c $ARG2$
+}
+
+define command{
+command_name	check_nwstat_csprocs
+command_line	/usr/lib/nagios/plugins/check_nwstat -H $HOSTADDRESS$ -v CSPROCS -w $ARG1$ -c $ARG2$
+}
+
+define command{
+command_name	check_nwstat_dsdb
+command_line	/usr/lib/nagios/plugins/check_nwstat -H $HOSTADDRESS$ -v DSDB
+}
+
+define command{
+command_name	check_nwstat_ltch
+command_line	/usr/lib/nagios/plugins/check_nwstat -H $HOSTADDRESS$ -v LTCH -w $ARG1$ -c $ARG2$
+}
+
+define command{
+command_name	check_nwstat_puprb
+command_line	/usr/lib/nagios/plugins/check_nwstat -H $HOSTADDRESS$ -v PUPRB -w $ARG1$ -c $ARG2$
+}
+
+define command{
+command_name	check_nwstat_vol_k
+command_line	/usr/lib/nagios/plugins/check_nwstat -H $HOSTADDRESS$ -v VKF$ARG1$ -w $ARG2$ -c $ARG3$
+}
+
+define command{
+command_name	check_nwstat_vol_p
+command_line	/usr/lib/nagios/plugins/check_nwstat -H $HOSTADDRESS$ -v VPF$ARG1$ -w $ARG2$ -c $ARG3$
+}
+
+define command{
+command_name	check_pgsql
+command_line	/usr/lib/nagios/plugins/check_pgsql -H $HOSTADDRESS$
+}
+
+define command{
+command_name	check_ping
+command_line	/usr/lib/nagios/plugins/check_ping -H $HOSTADDRESS$ -w $ARG1$ -c $ARG2$
+}
+
+define command{
+command_name	check_pop
+command_line	/usr/lib/nagios/plugins/check_pop -H $HOSTADDRESS$
+}
+
+define command{
+command_name	check_procs
+command_line	/usr/lib/nagios/plugins/check_procs -w $ARG1$ -c $ARG2$
+}
+
+define command{
+command_name	check_procs_httpd
+command_line	/usr/lib/nagios/plugins/check_procs -w 5:$ARG1$ -c 1:$ARG2$ -C httpd
+}
+
+define command{
+command_name	check_procs_zombie
+command_line	/usr/lib/nagios/plugins/check_procs -w $ARG1$ -c $ARG2$ -s Z
+}
+
+define command{
+command_name	check_quake
+command_line	/usr/lib/nagios/plugins/check_game qs $HOSTADDRESS$
+}
+
+define command{
+command_name	check_radius
+command_line	/usr/lib/nagios/plugins/check_radius $ARG1$ $ARG2$ $HOSTADDRESS$ 1812 $ARG3$
+}
+
+define command{
+command_name	check_real
+command_line	/usr/lib/nagios/plugins/check_real $HOSTADDRESS$ -p $ARG1$ -wt $ARG2$ -ct $ARG3$ -to 5
+}
+
+define command{
+command_name	check_real_url
+command_line	/usr/lib/nagios/plugins/check_real $HOSTADDRESS$ -p $ARG1$ -wt $ARG2$ -ct $ARG3$ -to 5 -u $ARG4$
+}
+
+define command{
+command_name	check_simap
+command_line	/usr/lib/nagios/plugins/check_imap -p 993 -H $HOSTADDRESS$ -S
+}
+
+define command{
+command_name	check_smtp
+command_line	/usr/lib/nagios/plugins/check_smtp -H $HOSTADDRESS$
+}
+
+define command{
+command_name	check_snmp_bgpstate
+command_line	/usr/lib/nagios/plugins/check_bgpstate -H $HOSTADDRESS$ -C public
+}
+
+define command{
+command_name	check_spop
+command_line	/usr/lib/nagios/plugins/check_pop -p 995 -H $HOSTADDRESS$ -S
+}
+
+define command{
+command_name	check_squid
+command_line	/usr/lib/nagios/plugins/check_http -H $HOSTADDRESS$ -p $ARG1$  -u $ARG2$  -e 'HTTP/1.0 200 OK'
+}
+
+define command{
+command_name	check_ssh
+command_line	/usr/lib/nagios/plugins/check_ssh $HOSTADDRESS$
+}
+
+define command{
+command_name	check_ssmtp
+command_line	/usr/lib/nagios/plugins/check_ssmtp -H $HOSTADDRESS$
+}
+
+define command{
+command_name	check_tcp
+command_line	/usr/lib/nagios/plugins/check_tcp -H $HOSTADDRESS$ -p $ARG1$
+}
+
+define command{
+command_name	check_telnet
+command_line	/usr/lib/nagios/plugins/check_tcp -H $HOSTADDRESS$ -p 23
+}
+
+define command{
+command_name	check_time
+command_line	/usr/lib/nagios/plugins/check_time -H $HOSTADDRESS$
+}
+
+define command{
+command_name	check_udp
+command_line	/usr/lib/nagios/plugins/check_udp -H $HOSTADDRESS$ -p $ARG1$
+}
+
+define command{
+command_name	check_unreal
+command_line	/usr/lib/nagios/plugins/check_game uns $HOSTADDRESS$ -P $ARG1$ -p 8
+}
+
+define command{
+command_name	check_users
+command_line	/usr/lib/nagios/plugins/check_users -w $ARG1$ -c $ARG2$
+}
+
+define command{
+command_name	check_vsz
+command_line	/usr/lib/nagios/plugins/check_vsz -w 8096 -c 16182 -C httpd
+}
+
+define command{
+command_name	host-notify-by-email
+command_line	/usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\nHost: $HOSTALIAS$\nState: $HOSTSTATE$ for $HOSTDURATION$\nAddress: $HOSTADDRESS$\nInfo:\n\n$HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n\nACK by: $HOSTACKAUTHOR$\nComment: $HOSTACKCOMMENT$\n" | /usr/bin/mail -s "** $NOTIFICATIONTYPE$ alert $NOTIFICATIONNUMBER$ - $HOSTALIAS$ host is $HOSTSTATE$ **" $CONTACTEMAIL$
+}
+
+define command{
+command_name	host-notify-by-epager
+command_line	/usr/bin/printf "%b" "Host '$HOSTALIAS$' is $HOSTSTATE$\nInfo: $HOSTOUTPUT$\nTime: $LONGDATETIME$" | /usr/bin/mail -s "$NOTIFICATIONTYPE$ alert - Host $HOSTNAME$ is $HOSTSTATE$" $CONTACTPAGER$
+}
+
+define command{
+command_name	notify-by-email
+command_line	/usr/bin/printf "%b" "***** Nagios  *****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost: $HOSTALIAS$\nState: $SERVICESTATE$ for $SERVICEDURATION$\nAddress: $HOSTADDRESS$\n\nInfo:\n\n$SERVICEOUTPUT$\n\nDate/Time: $LONGDATETIME$\n\nACK by: $SERVICEACKAUTHOR$\nComment: $SERVICEACKCOMMENT$\n" | /usr/bin/mail -s "** $NOTIFICATIONTYPE$ alert $NOTIFICATIONNUMBER$ - $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" $CONTACTEMAIL$
+}
+
+define command{
+command_name	notify-by-epager
+command_line	/usr/bin/printf "%b" "Service: $SERVICEDESC$\nHost: $HOSTNAME$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\nInfo: $SERVICEOUTPUT$\nDate: $LONGDATETIME$" | /usr/bin/mail -s "$NOTIFICATIONTYPE$: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$" $CONTACTPAGER$
+}
+
+define command{
+command_name	process-host-perfdata
+command_line	/usr/bin/printf "%b" "$LASTHOSTCHECK$\t$HOSTNAME$\t$HOSTSTATE$\t$HOSTATTEMPT$\t$HOSTSTATETYPE$\t$HOSTEXECUTIONTIME$\t$HOSTOUTPUT$\t$HOSTPERFDATA$\n" >> /var/lib/nagios2/host-perfdata.out
+}
+
+define command{
+command_name	process-service-perfdata
+command_line	/usr/bin/printf "%b" "$LASTSERVICECHECK$\t$HOSTNAME$\t$SERVICEDESC$\t$SERVICESTATE$\t$SERVICEATTEMPT$\t$SERVICESTATETYPE$\t$SERVICEEXECUTIONTIME$\t$SERVICELATENCY$\t$SERVICEOUTPUT$\t$SERVICEPERFDATA$\n" >> /var/lib/nagios2/service-perfdata.out
+}
+
+define command{
+command_name	return-critical
+command_line	/usr/lib/nagios/plugins/check_dummy 2
+}
+
+define command{
+command_name	return-numeric
+command_line	/usr/lib/nagios/plugins/check_dummy $ARG1$
+}
+
+define command{
+command_name	return-ok
+command_line	/usr/lib/nagios/plugins/check_dummy 0
+}
+
+define command{
+command_name	return-unknown
+command_line	/usr/lib/nagios/plugins/check_dummy 3
+}
+
+define command{
+command_name	return-warning
+command_line	/usr/lib/nagios/plugins/check_dummy 1
+}
+
+define command{
+command_name	snmp_cpustats
+command_line	/usr/lib/nagios/plugins/check_snmp -H $HOSTADDRESS$ -C $ARG1$ -o .1.3.6.1.4.1.2021.11.9.0,.1.3.6.1.4.1.2021.11.10.0,.1.3.6.1.4.1.2021.11.11.0 -l 'CPU usage (user system idle)' -u '%'
+}
+
+define command{
+command_name	snmp_disk
+command_line	/usr/lib/nagios/plugins/check_snmp -H $HOSTADDRESS$ -C $ARG1$ -o .1.3.6.1.4.1.2021.9.1.7.$ARG2$,.1.3.6.1.4.1.2021.9.1.9.$ARG2$ -w $ARG3$:,:$ARG4$ -c $ARG5$:,:$ARG6$ -u 'kB free (','% used)' -l 'disk space'
+}
+
+define command{
+command_name	snmp_disk2
+command_line	/usr/lib/nagios/plugins/check_snmp -H $HOSTADDRESS$ -C $ARG1$ -o host.hrStorage.hrStorageTable.hrStorageEntry.hrStorageUsed.$ARG2$ -w $ARG3$ -c $ARG4$
+}
+
+define command{
+command_name	snmp_load
+command_line	/usr/lib/nagios/plugins/check_snmp -H $HOSTADDRESS$ -C $ARG1$ -o .1.3.6.1.4.1.2021.10.1.5.1,.1.3.6.1.4.1.2021.10.1.5.2,.1.3.6.1.4.1.2021.10.1.5.3 -w :$ARG2$,:$ARG3$,:$ARG4$ -c :$ARG5$,:$ARG6$,:$ARG7$ -l load
+}
+
+define command{
+command_name	snmp_mem
+command_line	/usr/lib/nagios/plugins/check_snmp -H $HOSTADDRESS$ -C $ARG1$ -o .1.3.6.1.4.1.2021.4.6.0,.1.3.6.1.4.1.2021.4.5.0 -w $ARG2$: -c $ARG3$:
+}
+
+define command{
+command_name	snmp_mem2
+command_line	/usr/lib/nagios/plugins/check_snmp -H $HOSTADDRESS$ -C $ARG1$ -o host.hrStorage.hrStorageTable.hrStorageEntry.hrStorageUsed.$ARG2$,host.hrStorage.hrStorageTable.hrStorageEntry.hrStorageSize.$ARG2$ -w $ARG3$ -c $ARG4$
+}
+
+define command{
+command_name	snmp_mem3
+command_line	/usr/lib/nagios/plugins/check_snmp -H $HOSTADDRESS$ -C $ARG1$ -o host.hrStorage.hrStorageTable.hrStorageEntry.hrStorageUsed.$ARG2$,host.hrStorage.hrStorageTable.hrStorageEntry.hrStorageSize.$ARG2$ -w $ARG3$ -c $ARG4$
+}
+
+define command{
+command_name	snmp_procname
+command_line	/usr/lib/nagios/plugins/check_snmp -H $HOSTADDRESS$ -C $ARG1$ -o .1.3.6.1.4.1.2021.2.1.5.$ARG2$ -w $ARG3$:$ARG4$ -c $ARG5$:$ARG6$
+}
+
+define command{
+command_name	snmp_procs
+command_line	/usr/lib/nagios/plugins/check_snmp -H $HOSTADDRESS$ -C $ARG1$ -o host.hrSystem.hrSystemProcesses -w :$ARG2$ -c :$ARG3$ -l processes
+}
+
+define command{
+command_name	snmp_swap
+command_line	/usr/lib/nagios/plugins/check_snmp -H $HOSTADDRESS$ -C $ARG1$ -o .1.3.6.1.4.1.2021.4.4.0,.1.3.6.1.4.1.2021.4.3.0 -w $ARG2$: -c $ARG3$:
+}
+
+define command{
+command_name	snmp_swap2
+command_line	/usr/lib/nagios/plugins/check_snmp -H $HOSTADDRESS$ -C $ARG1$ -o host.hrStorage.hrStorageTable.hrStorageEntry.hrStorageUsed.$ARG2$,host.hrStorage.hrStorageTable.hrStorageEntry.hrStorageSize.$ARG2$ -w $ARG3$ -c $ARG4$
+}
+
+define command{
+command_name	snmp_swap3
+command_line	/usr/lib/nagios/plugins/check_snmp -H $HOSTADDRESS$ -C $ARG1$ -o host.hrStorage.hrStorageTable.hrStorageEntry.hrStorageUsed.$ARG2$,host.hrStorage.hrStorageTable.hrStorageEntry.hrStorageSize.$ARG2$ -w $ARG3$ -c $ARG4$
+}
+
+define command{
+command_name	snmp_tcpopen
+command_line	/usr/lib/nagios/plugins/check_snmp -H $HOSTADDRESS$ -C $ARG1$ -o tcp.tcpCurrEstab.0 -w $ARG2$ -c $ARG3$
+}
+
+define command{
+command_name	snmp_tcpstats
+command_line	/usr/lib/nagios/plugins/check_snmp -H $HOSTADDRESS$ -C $ARG1$ -o tcp.tcpActiveOpens.0,tcp.tcpPassiveOpens.0,tcp.tcpInSegs.0,tcp.tcpOutSegs.0,tcp.tcpRetransSegs.0 -l 'TCP stats'
+}
+
+define command{
+command_name	snmp_users
+command_line	/usr/lib/nagios/plugins/check_snmp -H $HOSTADDRESS$ -C $ARG1$ -o host.hrSystem.hrSystemNumUsers -w :$ARG2$ -c :$ARG3$ -l users
+}
+
+define command{
+command_name	ssh_disk
+command_line	/usr/lib/nagios/plugins/check_by_ssh -H $HOSTADDRESS$ -C '/usr/lib/nagios/plugins/check_disk -w $ARG1$ -c $ARG2$ -p $ARG3$'
+}
+
+define command{
+command_name	traffic_average
+command_line	/usr/lib/nagios/plugins/check_mrtgtraf $ARG1$ 10 AVG $ARG2$ $ARG3$ $ARG4$ $ARG5$
+}
+
diff --git a/debian-edu-config/etc/nagios2/debian-edu/contactgroups.cfg b/debian-edu-config/etc/nagios2/debian-edu/contactgroups.cfg
new file mode 100644
index 0000000..052299a
--- /dev/null
+++ b/debian-edu-config/etc/nagios2/debian-edu/contactgroups.cfg
@@ -0,0 +1,8 @@
+# Written by  () at: January 10, 2007, 11:04 pm
+# Generated for 
+define contactgroup{
+	contactgroup_name	admins
+	alias	Nagios Administrators
+	members	root
+}
+
diff --git a/debian-edu-config/etc/nagios2/debian-edu/contacts.cfg b/debian-edu-config/etc/nagios2/debian-edu/contacts.cfg
new file mode 100644
index 0000000..db9c333
--- /dev/null
+++ b/debian-edu-config/etc/nagios2/debian-edu/contacts.cfg
@@ -0,0 +1,14 @@
+# Written by  () at: January 10, 2007, 11:04 pm
+# Generated for 
+define contact{
+	contact_name	root
+	alias	Root
+	host_notification_period	24x7
+	service_notification_period	24x7
+	host_notification_options	d,r
+	service_notification_options	w,u,c,r
+	host_notification_commands	host-notify-by-email
+	service_notification_commands notify-by-email
+	email	root at postoffice
+}
+
diff --git a/debian-edu-config/etc/nagios2/debian-edu/dependencies.cfg b/debian-edu-config/etc/nagios2/debian-edu/dependencies.cfg
new file mode 100644
index 0000000..5af3616
--- /dev/null
+++ b/debian-edu-config/etc/nagios2/debian-edu/dependencies.cfg
@@ -0,0 +1,2 @@
+# Written by  () at: January 10, 2007, 11:04 pm
+# Generated for 
diff --git a/debian-edu-config/etc/nagios2/debian-edu/escalations.cfg b/debian-edu-config/etc/nagios2/debian-edu/escalations.cfg
new file mode 100644
index 0000000..5af3616
--- /dev/null
+++ b/debian-edu-config/etc/nagios2/debian-edu/escalations.cfg
@@ -0,0 +1,2 @@
+# Written by  () at: January 10, 2007, 11:04 pm
+# Generated for 
diff --git a/debian-edu-config/etc/nagios2/debian-edu/host_templates.cfg b/debian-edu-config/etc/nagios2/debian-edu/host_templates.cfg
new file mode 100644
index 0000000..6fb94a1
--- /dev/null
+++ b/debian-edu-config/etc/nagios2/debian-edu/host_templates.cfg
@@ -0,0 +1,20 @@
+# Written by  () at: January 10, 2007, 11:04 pm
+# Generated for 
+define host {
+	name generic-host
+	check_command check-host-alive
+	max_check_attempts 10
+	event_handler_enabled 1
+	flap_detection_enabled 1
+	process_perf_data 1
+	retain_status_information 1
+	retain_nonstatus_information 1
+	notification_interval 0
+	notification_period 24x7
+	notifications_enabled 1
+	failure_prediction_enabled 1
+	register 0
+	notification_options d,u,r
+	contact_groups admins
+}
+
diff --git a/debian-edu-config/etc/nagios2/debian-edu/hostextinfo.cfg b/debian-edu-config/etc/nagios2/debian-edu/hostextinfo.cfg
new file mode 100644
index 0000000..ddc2135
--- /dev/null
+++ b/debian-edu-config/etc/nagios2/debian-edu/hostextinfo.cfg
@@ -0,0 +1,10 @@
+# Written by  () at: January 11, 2007, 12:28 am
+# Generated for 
+define hostextinfo{
+host_name	gateway
+}
+
+define hostextinfo{
+host_name	tjener
+}
+
diff --git a/debian-edu-config/etc/nagios2/debian-edu/hostgroups.cfg b/debian-edu-config/etc/nagios2/debian-edu/hostgroups.cfg
new file mode 100644
index 0000000..c5e12a5
--- /dev/null
+++ b/debian-edu-config/etc/nagios2/debian-edu/hostgroups.cfg
@@ -0,0 +1,52 @@
+# Written by  () at: January 10, 2007, 11:04 pm
+# Generated for 
+define hostgroup{
+	hostgroup_name	all
+	alias	All Servers
+}
+
+define hostgroup{
+	hostgroup_name	debian-servers
+	alias	Debian GNU/Linux Servers
+}
+
+define hostgroup{
+	hostgroup_name	dns-servers
+	alias	server running a recursive resolver
+}
+
+define hostgroup{
+	hostgroup_name	http-servers
+	alias	HTTP servers
+}
+
+define hostgroup{
+	hostgroup_name	imaps-servers
+	alias	server running a secure imap service
+}
+
+define hostgroup{
+	hostgroup_name	ldap-servers
+	alias	server with openldap server running
+}
+
+define hostgroup{
+	hostgroup_name	nfs-server
+	alias	servers exporting filesystems on nfs
+}
+
+define hostgroup{
+	hostgroup_name	ping-servers
+	alias	Pingable servers
+}
+
+define hostgroup{
+	hostgroup_name	squid-server
+	alias	a web proxy server
+}
+
+define hostgroup{
+	hostgroup_name	ssh-servers
+	alias	SSH servers
+}
+
diff --git a/debian-edu-config/etc/nagios2/debian-edu/hosts.cfg b/debian-edu-config/etc/nagios2/debian-edu/hosts.cfg
new file mode 100644
index 0000000..2d89001
--- /dev/null
+++ b/debian-edu-config/etc/nagios2/debian-edu/hosts.cfg
@@ -0,0 +1,22 @@
+# Written by  () at: January 11, 2007, 12:28 am
+# Generated for 
+define host {
+	use generic-host
+	host_name gateway
+	alias Default Gateway
+	address gateway
+	check_command check-host-alive
+	hostgroups ping-servers,ssh-servers
+	contact_groups admins
+}
+
+define host {
+	use generic-host
+	host_name tjener
+	alias Main debian-edu server 
+	address tjener
+	check_command check-host-alive
+	hostgroups debian-servers,http-servers,ssh-servers,all,ping-servers,ldap-servers,nfs-server,imaps-servers,dns-servers,squid-server
+	contact_groups admins
+}
+
diff --git a/debian-edu-config/etc/nagios2/debian-edu/htpasswd.users b/debian-edu-config/etc/nagios2/debian-edu/htpasswd.users
new file mode 100644
index 0000000..216e07a
--- /dev/null
+++ b/debian-edu-config/etc/nagios2/debian-edu/htpasswd.users
@@ -0,0 +1 @@
+nagiosadmin:$1$zzYXNMkf$KM0cGbMKb/TXJxbLWu7RX0
diff --git a/debian-edu-config/etc/nagios2/debian-edu/nagios.cfg b/debian-edu-config/etc/nagios2/debian-edu/nagios.cfg
new file mode 100644
index 0000000..15131af
--- /dev/null
+++ b/debian-edu-config/etc/nagios2/debian-edu/nagios.cfg
@@ -0,0 +1,74 @@
+# Written by  () at: January 10, 2007, 11:04 pm
+# Generated for 
+cfg_file=/etc/nagios2/debian-edu/host_templates.cfg
+cfg_file=/etc/nagios2/debian-edu/hosts.cfg
+cfg_file=/etc/nagios2/debian-edu/commands.cfg
+cfg_file=/etc/nagios2/debian-edu/timeperiods.cfg
+cfg_file=/etc/nagios2/debian-edu/contactgroups.cfg
+cfg_file=/etc/nagios2/debian-edu/contacts.cfg
+cfg_file=/etc/nagios2/debian-edu/hostgroups.cfg
+cfg_file=/etc/nagios2/debian-edu/service_templates.cfg
+cfg_file=/etc/nagios2/debian-edu/services.cfg
+cfg_file=/etc/nagios2/debian-edu/servicegroups.cfg
+resource_file=/etc/nagios2/debian-edu/resources.cfg
+cfg_file=/etc/nagios2/debian-edu/hostextinfo.cfg
+cfg_file=/etc/nagios2/debian-edu/serviceextinfo.cfg
+cfg_file=/etc/nagios2/debian-edu/dependencies.cfg
+cfg_file=/etc/nagios2/debian-edu/escalations.cfg
+log_file=/var/log/nagios2/nagios.log
+temp_file=/var/cache/nagios2/nagios.tmp
+status_file=/var/cache/nagios2/status.dat
+status_update_interval=15
+nagios_user=nagios
+
+nagios_group=nagios
+
+log_archive_path=/var/log/nagios2/archives
+command_check_interval=-1
+
+command_file=/var/lib/nagios2/rw/nagios.cmd
+downtime_file=/var/lib/nagios2/downtime.dat
+comment_file=/var/lib/nagios2/comments.dat
+lock_file=/var/run/nagios2/nagios2.pid
+p1_file=/usr/lib/nagios2/p1.pl
+state_retention_file=/var/lib/nagios2/retention.dat
+retention_update_interval=60
+sleep_time=0.25
+max_concurrent_checks=0
+service_reaper_frequency=10
+interval_length=60
+low_service_flap_threshold=5
+high_service_flap_threshold=20
+low_host_flap_threshold=5
+high_host_flap_threshold=20
+service_check_timeout=60
+host_check_timeout=30
+event_handler_timeout=30
+notification_timeout=30
+ocsp_timeout=5
+perfdata_timeout=5
+illegal_object_name_chars=`~!$%^&*|'"<>?,()=
+
+illegal_macro_output_chars=`~$&|'"<>
+
+admin_email=root
+
+admin_pager=pageroot
+
+object_cache_file=/var/cache/nagios2/objects.cache
+service_inter_check_delay_method=s
+
+max_service_check_spread=30
+host_inter_check_delay_method=s
+
+max_host_check_spread=30
+auto_rescheduling_interval=30
+auto_rescheduling_window=180
+host_freshness_check_interval=60
+service_freshness_check_interval=60
+event_broker_options=-1
+
+host_perfdata_file_mode=a
+service_perfdata_file_mode=a
+host_perfdata_file_processing_interval=0
+service_perfdata_file_processing_interval=0
diff --git a/debian-edu-config/etc/nagios2/debian-edu/resources.cfg b/debian-edu-config/etc/nagios2/debian-edu/resources.cfg
new file mode 100644
index 0000000..5af3616
--- /dev/null
+++ b/debian-edu-config/etc/nagios2/debian-edu/resources.cfg
@@ -0,0 +1,2 @@
+# Written by  () at: January 10, 2007, 11:04 pm
+# Generated for 
diff --git a/debian-edu-config/etc/nagios2/debian-edu/service_templates.cfg b/debian-edu-config/etc/nagios2/debian-edu/service_templates.cfg
new file mode 100644
index 0000000..7a2485f
--- /dev/null
+++ b/debian-edu-config/etc/nagios2/debian-edu/service_templates.cfg
@@ -0,0 +1,28 @@
+# Written by  () at: January 10, 2007, 11:04 pm
+# Generated for 
+define service {
+	name generic-service
+	is_volatile 0
+	max_check_attempts 4
+	normal_check_interval 5
+	retry_check_interval 1
+	active_checks_enabled 1
+	passive_checks_enabled 1
+	check_period 24x7
+	parallelize_check 1
+	obsess_over_service 1
+	check_freshness 0
+	event_handler_enabled 1
+	flap_detection_enabled 1
+	process_perf_data 1
+	retain_status_information 1
+	retain_nonstatus_information 1
+	notification_interval 0
+	notification_period 24x7
+	notifications_enabled 1
+	failure_prediction_enabled 1
+	register 0
+	notification_options w,u,c,r
+	contact_groups admins
+}
+
diff --git a/debian-edu-config/etc/nagios2/debian-edu/serviceextinfo.cfg b/debian-edu-config/etc/nagios2/debian-edu/serviceextinfo.cfg
new file mode 100644
index 0000000..5c7de21
--- /dev/null
+++ b/debian-edu-config/etc/nagios2/debian-edu/serviceextinfo.cfg
@@ -0,0 +1,77 @@
+# Written by  () at: January 11, 2007, 12:28 am
+# Generated for 
+define serviceextinfo{
+host_name tjener
+service_description	HTTP
+}
+
+define serviceextinfo{
+host_name tjener
+service_description	SSH
+}
+
+define serviceextinfo{
+host_name gateway
+service_description	SSH
+}
+
+define serviceextinfo{
+host_name gateway
+service_description	PING
+}
+
+define serviceextinfo{
+host_name tjener
+service_description	PING
+}
+
+define serviceextinfo{
+host_name tjener
+service_description	Disk Space
+}
+
+define serviceextinfo{
+host_name tjener
+service_description	Current Users
+}
+
+define serviceextinfo{
+host_name tjener
+service_description	Total Processes
+}
+
+define serviceextinfo{
+host_name tjener
+service_description	Current Load
+}
+
+define serviceextinfo{
+host_name tjener
+service_description	LDAP
+}
+
+define serviceextinfo{
+host_name tjener
+service_description	apt-updates
+}
+
+define serviceextinfo{
+host_name tjener
+service_description	NFS
+}
+
+define serviceextinfo{
+host_name tjener
+service_description	SQUID
+}
+
+define serviceextinfo{
+host_name tjener
+service_description	DNS
+}
+
+define serviceextinfo{
+host_name tjener
+service_description	IMAPS
+}
+
diff --git a/debian-edu-config/etc/nagios2/debian-edu/servicegroups.cfg b/debian-edu-config/etc/nagios2/debian-edu/servicegroups.cfg
new file mode 100644
index 0000000..5af3616
--- /dev/null
+++ b/debian-edu-config/etc/nagios2/debian-edu/servicegroups.cfg
@@ -0,0 +1,2 @@
+# Written by  () at: January 10, 2007, 11:04 pm
+# Generated for 
diff --git a/debian-edu-config/etc/nagios2/debian-edu/services.cfg b/debian-edu-config/etc/nagios2/debian-edu/services.cfg
new file mode 100644
index 0000000..b215dc6
--- /dev/null
+++ b/debian-edu-config/etc/nagios2/debian-edu/services.cfg
@@ -0,0 +1,106 @@
+# Written by  () at: January 11, 2007, 12:28 am
+# Generated for 
+define service {
+	use generic-service
+	service_description HTTP
+	check_command check_http
+	hostgroup_name http-servers
+	contact_groups admins
+}
+
+define service {
+	use generic-service
+	service_description SSH
+	check_command check_ssh
+	hostgroup_name ssh-servers
+	contact_groups admins
+}
+
+define service {
+	use generic-service
+	service_description PING
+	check_command check_ping!100.0,20%!500.0,60%
+	hostgroup_name ping-servers
+	contact_groups admins
+}
+
+define service {
+	use generic-service
+	service_description Disk Space
+	check_command check_all_disks!20%!10% -X tmpfs -X udev
+	host_name tjener
+	contact_groups admins
+}
+
+define service {
+	use generic-service
+	service_description Current Users
+	check_command check_users!20!50
+	host_name tjener
+	contact_groups admins
+}
+
+define service {
+	use generic-service
+	service_description Total Processes
+	check_command check_procs!250!400
+	host_name tjener
+	contact_groups admins
+}
+
+define service {
+	use generic-service
+	service_description Current Load
+	check_command check_load!5.0!4.0!3.0!10.0!6.0!4.0
+	host_name tjener
+	contact_groups admins
+}
+
+define service {
+	use generic-service
+	service_description LDAP
+	check_command check_ldap!dc=skole,dc=skolelinux,dc=no
+	host_name tjener
+	contact_groups admins
+}
+
+define service {
+	use generic-service
+	service_description apt-updates
+	check_command check_apt
+	hostgroup_name debian-servers
+	contact_groups admins
+}
+
+define service {
+	use generic-service
+	service_description NFS
+	check_command check-nfs
+	hostgroup_name nfs-server
+	contact_groups admins
+}
+
+define service {
+	use generic-service
+	service_description SQUID
+	check_command check_squid!3128!http://tjener
+	hostgroup_name squid-server
+	contact_groups admins
+}
+
+define service {
+	use generic-service
+	service_description DNS
+	check_command check_dns
+	hostgroup_name dns-servers
+	contact_groups admins
+}
+
+define service {
+	use generic-service
+	service_description IMAPS
+	check_command check_simap
+	hostgroup_name imaps-servers
+	contact_groups admins
+}
+
diff --git a/debian-edu-config/etc/nagios2/debian-edu/timeperiods.cfg b/debian-edu-config/etc/nagios2/debian-edu/timeperiods.cfg
new file mode 100644
index 0000000..ceb9045
--- /dev/null
+++ b/debian-edu-config/etc/nagios2/debian-edu/timeperiods.cfg
@@ -0,0 +1,41 @@
+# Written by  () at: January 10, 2007, 11:04 pm
+# Generated for 
+define timeperiod{
+	timeperiod_name	24x7
+	alias	24 Hours A Day, 7 Days A Week
+	sunday	00:00-24:00
+	monday	00:00-24:00
+	tuesday	00:00-24:00
+	wednesday	00:00-24:00
+	thursday	00:00-24:00
+	friday	00:00-24:00
+	saturday	00:00-24:00
+}
+
+define timeperiod{
+	timeperiod_name	never
+	alias	Never
+}
+
+define timeperiod{
+	timeperiod_name	nonworkhours
+	alias	Non-Work Hours
+	sunday	00:00-24:00
+	monday	00:00-09:00,17:00-24:00
+	tuesday	00:00-09:00,17:00-24:00
+	wednesday	00:00-09:00,17:00-24:00
+	thursday	00:00-09:00,17:00-24:00
+	friday	00:00-09:00,17:00-24:00
+	saturday	00:00-24:00
+}
+
+define timeperiod{
+	timeperiod_name	workhours
+	alias	Standard Work Hours
+	monday	09:00-17:00
+	tuesday	09:00-17:00
+	wednesday	09:00-17:00
+	thursday	09:00-17:00
+	friday	09:00-17:00
+}
+
diff --git a/debian-edu-config/etc/pam.d/common-account-ldap-debian-edu b/debian-edu-config/etc/pam.d/common-account-ldap-debian-edu
new file mode 100644
index 0000000..be5c6b3
--- /dev/null
+++ b/debian-edu-config/etc/pam.d/common-account-ldap-debian-edu
@@ -0,0 +1,10 @@
+#
+# /etc/pam.d/common-account - authorization settings common to all services
+#
+# This file is included from other service-specific PAM config files,
+# and should contain a list of the authorization modules that define
+# the central access policy for use on the system.  The default is to
+# only deny service to users whose accounts are expired in /etc/shadow.
+#
+account    sufficient   pam_ldap.so
+account	required	pam_unix.so
diff --git a/debian-edu-config/etc/pam.d/common-account-winbind-debian-edu b/debian-edu-config/etc/pam.d/common-account-winbind-debian-edu
new file mode 100644
index 0000000..da73086
--- /dev/null
+++ b/debian-edu-config/etc/pam.d/common-account-winbind-debian-edu
@@ -0,0 +1,10 @@
+#
+# /etc/pam.d/common-account - authorization settings common to all services
+#
+# This file is included from other service-specific PAM config files,
+# and should contain a list of the authorization modules that define
+# the central access policy for use on the system.  The default is to
+# only deny service to users whose accounts are expired in /etc/shadow.
+#
+account    sufficient   pam_winbind.so
+account	required	pam_unix.so
diff --git a/debian-edu-config/etc/pam.d/common-auth-debian-edu b/debian-edu-config/etc/pam.d/common-auth-debian-edu
new file mode 100644
index 0000000..7288cc6
--- /dev/null
+++ b/debian-edu-config/etc/pam.d/common-auth-debian-edu
@@ -0,0 +1,11 @@
+#
+# /etc/pam.d/common-auth - authentication settings common to all services
+#
+# This file is included from other service-specific PAM config files,
+# and should contain a list of the authentication modules that define
+# the central authentication scheme for use on the system
+# (e.g., /etc/shadow, LDAP, Kerberos, etc.).  The default is to use the
+# traditional Unix authentication mechanisms.
+#
+auth	optional	pam_group.so
+auth	required	pam_unix.so shadow nullok_secure
diff --git a/debian-edu-config/etc/pam.d/common-auth-ldap-debian-edu b/debian-edu-config/etc/pam.d/common-auth-ldap-debian-edu
new file mode 100644
index 0000000..0561b30
--- /dev/null
+++ b/debian-edu-config/etc/pam.d/common-auth-ldap-debian-edu
@@ -0,0 +1,12 @@
+#
+# /etc/pam.d/common-auth - authentication settings common to all services
+#
+# This file is included from other service-specific PAM config files,
+# and should contain a list of the authentication modules that define
+# the central authentication scheme for use on the system
+# (e.g., /etc/shadow, LDAP, Kerberos, etc.).  The default is to use the
+# traditional Unix authentication mechanisms.
+#
+auth	optional	pam_group.so
+auth	sufficient	pam_unix.so shadow nullok_secure
+auth	required	pam_ldap.so use_first_pass
diff --git a/debian-edu-config/etc/pam.d/common-auth-winbind-debian-edu b/debian-edu-config/etc/pam.d/common-auth-winbind-debian-edu
new file mode 100644
index 0000000..01587c1
--- /dev/null
+++ b/debian-edu-config/etc/pam.d/common-auth-winbind-debian-edu
@@ -0,0 +1,13 @@
+#
+# /etc/pam.d/common-auth - authentication settings common to all services
+#
+# This file is included from other service-specific PAM config files,
+# and should contain a list of the authentication modules that define
+# the central authentication scheme for use on the system
+# (e.g., /etc/shadow, LDAP, Kerberos, etc.).  The default is to use the
+# traditional Unix authentication mechanisms.
+#
+auth	optional	pam_group.so
+auth	required	pam_mount.so
+auth	sufficient	pam_unix.so shadow nullok_secure
+auth	required	pam_winbind.so use_first_pass
diff --git a/debian-edu-config/etc/pam.d/common-password-ldap-debian-edu b/debian-edu-config/etc/pam.d/common-password-ldap-debian-edu
new file mode 100644
index 0000000..91e3ad3
--- /dev/null
+++ b/debian-edu-config/etc/pam.d/common-password-ldap-debian-edu
@@ -0,0 +1,28 @@
+#
+# /etc/pam.d/common-password - password-related modules common to all services
+#
+# This file is included from other service-specific PAM config files,
+# and should contain a list of modules that define  the services to be
+#used to change user passwords.  The default is pam_unix
+
+# The "nullok" option allows users to change an empty password, else
+# empty passwords are treated as locked accounts.
+#
+# (Add `md5' after the module name to enable MD5 passwords)
+#
+# The "obscure" option replaces the old `OBSCURE_CHECKS_ENAB' option in
+# login.defs. Also the "min" and "max" options enforce the length of the
+# new password.
+
+password   sufficient pam_ldap.so
+password   required   pam_unix.so nullok obscure min=4 max=8 md5
+
+# Alternate strength checking for password. Note that this
+# requires the libpam-cracklib package to be installed.
+# You will need to comment out the password line above and
+# uncomment the next two in order to use this.
+# (Replaces the `OBSCURE_CHECKS_ENAB', `CRACKLIB_DICTPATH')
+#
+# password required	  pam_cracklib.so retry=3 minlen=6 difok=3
+# password required	  pam_unix.so use_authtok nullok md5
+
diff --git a/debian-edu-config/etc/pam.d/common-password-winbind-debian-edu b/debian-edu-config/etc/pam.d/common-password-winbind-debian-edu
new file mode 100644
index 0000000..42f81b6
--- /dev/null
+++ b/debian-edu-config/etc/pam.d/common-password-winbind-debian-edu
@@ -0,0 +1 @@
+password   required   pam_unix.so nullok obscure min=4 max=8 md5
diff --git a/debian-edu-config/etc/pam.d/common-session-debian-edu b/debian-edu-config/etc/pam.d/common-session-debian-edu
new file mode 100644
index 0000000..7594805
--- /dev/null
+++ b/debian-edu-config/etc/pam.d/common-session-debian-edu
@@ -0,0 +1,11 @@
+#
+# /etc/pam.d/common-session - session-related modules common to all services
+#
+# This file is included from other service-specific PAM config files,
+# and should contain a list of modules that define tasks to be performed
+# at the start and end of sessions of *any* kind (both interactive and
+# non-interactive).  The default is pam_unix.
+#
+session	required	pam_env.so
+session	optional	pam_foreground.so
+session	required	pam_unix.so
diff --git a/debian-edu-config/etc/pam.d/common-session-winbind-debian-edu b/debian-edu-config/etc/pam.d/common-session-winbind-debian-edu
new file mode 100644
index 0000000..9032360
--- /dev/null
+++ b/debian-edu-config/etc/pam.d/common-session-winbind-debian-edu
@@ -0,0 +1,12 @@
+#
+# /etc/pam.d/common-session - session-related modules common to all services
+#
+# This file is included from other service-specific PAM config files,
+# and should contain a list of modules that define tasks to be performed
+# at the start and end of sessions of *any* kind (both interactive and
+# non-interactive).  The default is pam_unix.
+#
+session    required     pam_env.so
+session    optional     pam_foreground.so
+session    required     pam_mkhomedir.so skel=/etc/skel umask=0022 silent
+session    optional     pam_mount.so
diff --git a/debian-edu-config/etc/resolvconf/update.d/bind-debian-edu b/debian-edu-config/etc/resolvconf/update.d/bind-debian-edu
new file mode 100755
index 0000000..b54bb99
--- /dev/null
+++ b/debian-edu-config/etc/resolvconf/update.d/bind-debian-edu
@@ -0,0 +1,102 @@
+#!/bin/bash
+# Need bash because we use ${foo//bar/baz}
+#
+# Script to update the named options file
+#
+# Resolvconf may run us even if named is not running.
+# If a bind package is installed then we go ahead and update
+# the named configuration in case named is started later.
+#
+# Assumption: On entry, PWD contains the resolv.conf-type files
+#
+# Licensed under the GNU GPL.  See /usr/share/doc/resolvconf/copyright.
+#
+# Written by Thomas Hood <jdthood at yahoo.co.uk>
+
+set -e
+PATH=/sbin:/bin
+
+[ -x /usr/sbin/named ] || exit 0
+[ -x /lib/resolvconf/list-records ] || exit 1
+[ -f /etc/bind/debian-edu/named.conf.options ] || exit 0
+
+OPTS_FILE=named-debian-edu.options
+RUN_DIR=/var/run/bind
+
+[ -d "$RUN_DIR" ] || mkdir --parents --mode=0755 "$RUN_DIR"
+
+# Stores arguments (minus duplicates) in RSLT, separated by spaces
+# Doesn't work properly if an argument itself contain whitespace
+uniquify()
+{
+	RSLT=""
+	while [ "$1" ] ; do
+		for E in $RSLT ; do
+			[ "$1" = "$E" ] && { shift ; continue 2 ; }
+		done
+		RSLT="${RSLT:+$RSLT }$1"
+		shift
+	done
+}
+
+# Get list of records, excluding all those for the loopback interface
+RSLVCNFFILES="$(/lib/resolvconf/list-records | sed -e '/^lo$/d' -e '/^lo[.]/d')"
+ 
+### Compile semicolon-separated list nameservers ###
+NMSRVRS=""
+if [ "$RSLVCNFFILES" ] ; then
+	uniquify $(sed -n -e 's/^[[:space:]]*nameserver[[:space:]]\+//p' $RSLVCNFFILES)
+	[ "$RSLT" ] && NMSRVRS="${RSLT// /; }; "
+fi
+
+# N.B.: After changing directory we no longer have access to the resolv.conf-type files
+cd "$RUN_DIR"
+
+TMP_FILE="${OPTS_FILE}_new.$$"
+clean_up() { rm -f "${RUN_DIR}/$TMP_FILE" ; }
+trap clean_up EXIT
+rm -f "$TMP_FILE"
+
+# We want to process named.conf.options such that the new forwarders 
+# statement gets inserted but nothing else is corrupted in the process.
+# We want to do this using only commands available in /bin and /sbin, i.e.,
+# with sh, sed and/or grep.   Sed can be made to work -- with difficulty.
+# Even so, the following script does not work properly if comment
+# delimiters of one style of commenting appear inside another kind of
+# comment.  (Named supports C, C++ and sh comment styles.)
+#
+# First, we do our best to delete all and only comments.
+# Then we delete any existing forwarders statement, taking into account
+# the fact that these can span several lines.  Then we add a new
+# forwarders statement at the beginning of the options statement.
+#
+echo "// named.conf fragment automatically generated by $0" > "$TMP_FILE"
+echo "// DO NOT EDIT THIS FILE.  Instead edit /etc/bind/debian-edu/named.conf.options ." >> "$TMP_FILE"
+cat /etc/bind/debian-edu/named.conf.options \
+	| sed -e 's%\*/%\*/\
+%g' \
+	| sed -e '\%/\*%{ :x ; s%\*/%\*/% ; t y ; N ; b x ; :y ; s%/\*.*\*/%% ; }' \
+	| sed -e 's%//.*%%' -e 's%#.*%%' \
+	| sed -e '/forwarders/{ :x ; s/}/}/ ; t y ; N ; b x ; :y ; s/}[[:space:]]*;/};/ ; t z ; N ; b y ; :z s/forwarders[[:space:]]*{[^}]*};// ; }' \
+	| sed -e 's/options[[:space:]]*{/options {\
+	forwarders { '"${NMSRVRS}"'};/' | sed -e '/^[[:space:]]*$/{ d ; }' \
+	>> "$TMP_FILE"
+
+# bind version 8 does not create a "bind" group
+chown root:bind "$TMP_FILE" > /dev/null 2>&1 || :
+
+if [ "$1" = "-i" ] ; then
+	mv -f "$TMP_FILE" "$OPTS_FILE"
+	exit 0
+fi
+
+# Reload named unless we know its options haven't changed
+if [ -x /usr/bin/diff ] && [ -f "$OPTS_FILE" ] && /usr/bin/diff -q "$OPTS_FILE" "$TMP_FILE" > /dev/null ; then
+	# No change
+	rm -f "$TMP_FILE"
+else
+	mv -f "$TMP_FILE" "$OPTS_FILE"
+	[ -x /etc/init.d/bind9 ] && /etc/init.d/bind9 reload > /dev/null 2>&1 || :
+	[ -x /etc/init.d/bind  ] && /etc/init.d/bind reload > /dev/null 2>&1 || :
+fi
+
diff --git a/debian-edu-config/etc/samba/netlogon/login.bat b/debian-edu-config/etc/samba/netlogon/login.bat
new file mode 100644
index 0000000..77fbd7c
--- /dev/null
+++ b/debian-edu-config/etc/samba/netlogon/login.bat
@@ -0,0 +1,8 @@
+echo off
+echo "Connecting to server..."
+echo "Mapping homedirectory to h:"
+net use h: /HOME /yes 
+echo "Synchronizing system clock"
+net time \\tjener /set /yes
+echo "Creating link to homedirectory"
+start \\tjener\netlogon\shortcut.vbs
diff --git a/debian-edu-config/etc/samba/netlogon/shortcut.vbs b/debian-edu-config/etc/samba/netlogon/shortcut.vbs
new file mode 100644
index 0000000..ca86ee1
--- /dev/null
+++ b/debian-edu-config/etc/samba/netlogon/shortcut.vbs
@@ -0,0 +1,7 @@
+' VBScript.
+Dim Shell, DesktopPath, URL
+Set Shell = CreateObject("WScript.Shell")
+DesktopPath = Shell.SpecialFolders("Desktop")
+Set URL = Shell.CreateShortcut(DesktopPath & "\My Home.LNK")
+URL.TargetPath = "H:\"
+URL.Save
diff --git a/debian-edu-config/etc/samba/smb-debian-edu-client.conf b/debian-edu-config/etc/samba/smb-debian-edu-client.conf
new file mode 100644
index 0000000..2951aa9
--- /dev/null
+++ b/debian-edu-config/etc/samba/smb-debian-edu-client.conf
@@ -0,0 +1,98 @@
+#
+# Skolelinux configuration file for the samba suite
+#
+# Please read the smb.conf(5) manual page 
+#
+# NOTE: Whenever you modify this file you should run the command
+# "testparm" to check that you have not many any basic syntactic 
+# errors. 
+#
+
+# $Id: smb-debian-edu-client.conf,v 1.1 2004/05/26 09:45:35 finnarne-guest Exp $
+
+#======================= Global Settings =======================
+
+[global]
+
+# Do something sensible when Samba crashes: mail the admin a backtrace
+;   panic action = /usr/share/samba/panic-action %d
+
+# server name
+;   netbios name = tjener
+
+# server string/NT Description field
+   server string = %h server (Samba %v)
+
+# Workgroup/NT-domain name
+
+   workgroup = skolelinux
+
+# OpenLDAP configuration 
+
+;   passdb backend = ldapsam:ldaps://ldap
+;   ldap suffix = dc=skole,dc=skolelinux,dc=no
+;   ldap user suffix = ou=People
+;   ldap machine suffix = ou=Machines,ou=People
+;   ldap admin dn = "cn=smbadmin,ou=People,dc=skole,dc=skolelinux,dc=no"
+
+# PAM setup   
+
+   obey pam restrictions = yes
+   
+# Printer settings
+
+   load printers = yes
+   printing = cups
+   printcap name = cups
+
+# Network logon
+
+   logon home = \\tjener\%U
+   logon drive = h:
+   logon script = login.bat
+
+;   invalid users = root
+
+# Logfiles
+
+   log file = /var/log/samba/log.%m
+   max log size = 1000
+   syslog = 0
+
+# Security options
+
+   security = domain
+   encrypt passwords = true
+   password server = tjener
+
+# Networking options
+
+   socket options = TCP_NODELAY
+
+# Browser Control Options
+
+  local master = yes
+  domain logons = no
+  domain master = no
+  preferred master = no
+
+  os level = 20
+
+# WINS Support
+
+   wins server = tjener
+
+# DNS proxy for NetBIOS
+
+   dns proxy = no
+
+# Add NT clients
+
+;   add machine script = /etc/samba/smbaddclient.pl %u
+
+# Disable changing of password using samba
+  unix password sync = yes
+  passwd program = /bin/false
+
+#======================= Share Definitions =======================
+
diff --git a/debian-edu-config/etc/samba/smb-debian-edu.conf b/debian-edu-config/etc/samba/smb-debian-edu.conf
new file mode 100644
index 0000000..b8b9f09
--- /dev/null
+++ b/debian-edu-config/etc/samba/smb-debian-edu.conf
@@ -0,0 +1,133 @@
+#
+# Skolelinux configuration file for the samba suite
+#
+# Please read the smb.conf(5) manual page 
+#
+# NOTE: Whenever you modify this file you should run the command
+# "testparm" to check that you have not many any basic syntactic 
+# errors. 
+#
+
+# Modified for use with skolelinux by Svein Magne Bang 2003/04/02
+
+#======================= Global Settings =======================
+
+[global]
+
+# Do something sensible when Samba crashes: mail the admin a backtrace
+;   panic action = /usr/share/samba/panic-action %d
+
+# server name
+   netbios name = tjener
+
+# server string/NT Description field
+   server string = %h server (Samba %v)
+
+# Workgroup/NT-domain name
+
+   workgroup = skolelinux
+
+# OpenLDAP configuration 
+
+   passdb backend = ldapsam:ldap://ldap
+   ldap suffix = dc=skole,dc=skolelinux,dc=no
+   ldap user suffix = ou=People
+   ldap machine suffix = ou=Machines,ou=People
+   ldap admin dn = "cn=smbadmin,ou=People,dc=skole,dc=skolelinux,dc=no"
+   ldap ssl = start_tls
+
+# PAM setup   
+
+   obey pam restrictions = yes
+   
+# Printer settings
+
+   load printers = yes
+   printing = cups
+   printcap name = cups
+
+# Network logon
+
+   logon home = \\tjener\%U
+   logon drive = h:
+   logon script = login.bat
+
+;   invalid users = root
+
+# Logfiles
+
+   log file = /var/log/samba/log.%m
+   max log size = 1000
+   syslog = 0
+
+# Security options
+
+   security = user
+   encrypt passwords = true
+
+# Networking options
+
+   socket options = TCP_NODELAY
+
+# Browser Control Options
+
+  local master = yes
+  domain logons = yes
+  domain master = yes
+  preferred master = yes
+
+  os level = 65
+
+# WINS Support
+
+   wins support = yes
+
+# DNS proxy for NetBIOS
+
+   dns proxy = no
+
+# Add NT clients
+
+   add machine script = /etc/samba/smbaddclient.pl %u
+
+# Disable changing of password using samba
+  unix password sync = yes
+  passwd program = /bin/false
+
+#======================= Share Definitions =======================
+
+[homes]
+   invalid users = root
+   comment = Home Directories
+   browseable = no
+   writable = yes
+   create mask = 0664
+   directory mask = 0775
+
+[netlogon]
+   invalid users = root
+   comment = Network Logon Service
+   path = /etc/samba/netlogon
+   guest ok = yes
+   writable = no
+   share modes = no
+
+[printers]
+   invalid users = root
+   comment = All Printers
+   browseable = no
+   path = /tmp
+   printable = yes
+   public = no
+   writable = no
+   create mode = 0700
+
+#[shared]
+#   invalid users = root
+#   comment = Shared Folders
+#   path = /skole/tjener/shared
+#   guest ok = no
+#   writable = yes
+#   create mask = 0664
+#   directory mask = 2775
+
diff --git a/debian-edu-config/etc/samba/smb-winbind-debian-edu.conf b/debian-edu-config/etc/samba/smb-winbind-debian-edu.conf
new file mode 100644
index 0000000..8e60e0c
--- /dev/null
+++ b/debian-edu-config/etc/samba/smb-winbind-debian-edu.conf
@@ -0,0 +1,24 @@
+[global]
+  workgroup = %%DOMAIN%%
+  netbios name = %%HOSTNAME%%
+  winbind separator = #
+  idmap uid = 10000-20000
+  idmap gid = 10000-20000
+  winbind enum users = yes
+  winbind enum groups = yes
+  winbind use default domain = yes
+  security = ads
+  encrypt passwords = true
+  realm = %%REALM%%
+  password server = %%PWSERVER%%
+  template shell = /bin/bash
+  client use spnego = yes
+  dos charset = 850
+
+[homes]
+  guest ok = no
+  read only = no
+  create mode = 0664
+  directory mode = 0775
+
+
diff --git a/debian-edu-config/etc/samba/smbaddclient.pl b/debian-edu-config/etc/samba/smbaddclient.pl
new file mode 100755
index 0000000..4d648dc
--- /dev/null
+++ b/debian-edu-config/etc/samba/smbaddclient.pl
@@ -0,0 +1,133 @@
+#!/usr/bin/env perl
+#
+# A script adding machines to LDAP for use by samba
+#
+# Authors: Odd Rune Dahle <oddrune at pvv.org> 
+#          Svein Magne Bang <sveinmb at stud.ntnu.no>
+#     
+# Date:   2003-04-15
+
+use warnings;
+
+use vars qw(%text %config);
+sub text{}
+sub read_file{}
+
+require '/usr/share/debian-edu-config/tools/ldap-users.pl';
+
+my $uid    = shift || die "usage: smbaddclient.pl <machine-name>\n"; 
+
+read_adduser_config();    # puts adduser config into %config
+
+my $DEBUG = 1;
+
+my $smbconf="/etc/samba/smb.conf";
+my $secretstdb="/var/lib/samba/secrets.tdb";
+my $tdbdumpbin="/usr/bin/tdbdump";
+
+################# end of user configuration ##################
+##############################################################
+
+
+##
+# First we need to read the ldap configuration from smb.conf
+##
+
+open(FILE,$smbconf) || die "Can't open $smbconf: $!";   # open smb.conf
+
+$ldapdata[0] = "passdb backend";
+$ldapdata[1] = "ldap suffix";
+$ldapdata[2] = "ldap admin dn";
+$ldapdata[3] = "ldap rootpw";
+
+while ($line = <FILE>) {     # parse file and extract ldap config
+  if ($line =~ /ldap/i) {
+   for($n=0;$n<3;$n++){
+    if ($line =~ /$ldapdata[$n]/i) {
+      $line =~ s/$ldapdata[$n]//i;
+      $line =~ s/=//;
+      $line =~ s/^\s+//;
+      $line =~ s/\"//g;
+      $ldapdata[$n]=$line;
+    }
+   }
+  }
+}
+
+my $n;
+for($n=0;$n<3;$n++){      # get rid of newlines
+  chomp($ldapdata[$n]);
+}
+
+$ldapdata[0] =~ s/ldapsam:ldap:\/\///i;  # remove service type from server
+$ldapdata[1] =~ s/ou=people,//i;  # remove ou=people from basedn
+
+close(FILE);   # close smb.conf
+
+
+
+## 
+# Now it's time to dump det secrets.tdb and retrive the ldap admin pw
+##
+
+
+$tdbret=`$tdbdumpbin $secretstdb`;  # execute tdbdump
+
+$foundkey = "no";  # boolean used for loop
+
+foreach $line (split ("\n", $tdbret)){  # parse tdbdump output
+  if ($foundkey eq "yes"){   # if key is found, then extract rootwd
+    $line =~ s/data = //i;
+    $line =~ s/\"//g;
+    $ldapdata[3] = $line;
+    last;
+  } else {                   # still not found, keep searching
+    if ($line =~ s/key = //i) {
+      $line =~ s/\"//g;
+      if($line eq "SECRETS/LDAP_BIND_PW/" . $ldapdata[2]){ # see if this is the right key 
+        $foundkey="yes";
+      }
+    }
+  }
+}  
+
+$ldapdata[3] =~ s/\\00$//i;  # remove trailing 0x00 from password
+
+# done reading configuration
+
+
+$server = $ldapdata[0];
+$basedn = $ldapdata[1];
+$rootdn = $ldapdata[2];
+$rootpw = $ldapdata[3];
+
+# detecting 
+my $machine_gid = getgrnam("machines");
+die "There is no machine-group. Please run upgrade-ldap-backend as root.\n" 
+    unless $machine_gid; 
+
+# Some Debug info
+# print "server: " . $server . "\n" ;
+# print "basedn: " . $basedn . "\n" ;
+# print "rootdn: " . $rootdn . "\n" ;
+# print "rootpw: " . $rootpw . "\n" ;
+# print "machineGroup: " . $machine_gid . "\n" ;
+
+ldap_connect(# Connect to the ldap server.
+	     $server, 
+	     $rootdn, 
+	     $basedn, 
+	     $config{'FIRST_UID'} || 10000,
+	     $config{'LAST_UID'} || 29999,
+	     );
+
+my $nextid = ldap_get_newid ($rootpw);
+
+my $cn  = "$uid MachineAccount";
+my $gidNumber = $machine_gid;
+my $uidNumber = $nextid;
+
+
+ldap_add_machine($cn, "$uid", $uidNumber, $gidNumber, $rootpw);
+print ldap_dbg_output();
+
diff --git a/debian-edu-config/etc/security/pam_mount-stateless-debian-edu.conf b/debian-edu-config/etc/security/pam_mount-stateless-debian-edu.conf
new file mode 100644
index 0000000..cb1ce92
--- /dev/null
+++ b/debian-edu-config/etc/security/pam_mount-stateless-debian-edu.conf
@@ -0,0 +1,203 @@
+# Turn on if you want to debug why some volume cannot be mounted etc.
+# This can be overriden by user's local configuration
+# 
+# Format: debug [ 1 | 0 ]
+# Local user configuration can override this.
+
+debug 1
+mkmountpoint 1
+# Loopback device to use to run fsck on loopback filesystems.
+fsckloop /dev/loop7
+
+# Users' local configuration file (if there is none, comment out this
+# parameter). Will be read as ~/<file>
+#
+# Note: you must include either options_allow or options_deny to use
+# this directive. I recommend also including options_require.
+#
+# Individual users may define additional volumes to mount if allowed
+# by pam_mount.conf (usually ~/.pam_mount.conf).  The volume keyword is
+# the only valid keyword in these per-user configuration files.  If the
+# luserconf parameter is set in pam_mount.conf, allowing user-defined
+# volume, then users may mount and unmount any volumes they specify.
+# The mount operation is executed under the user account, not with
+# root permissions.
+# IMPORTANT: right now only smb and ncp mounts work in ~/.pam_mount.conf
+# since they do not require root privileges! All other mount types
+# have to be in the global configuration file.
+# Please only file bugs about this if you can exactly show and prevent
+# the security implications of user-specified mount commands.
+#
+# Format: luserconf <file>
+# luserconf .pam_mount.conf
+
+# These directives determine which options may be specified in a user config
+# file (luserconf). You must include one of these directives if you have a
+# luserconf directive. You may not include both directives.
+#
+# If you have an options_allow directive, then the options listed in that
+# directive wil be allowed, and all others rejected. If you have an
+# options_deny directive, then the options listed will be denied, and all others
+# permitted.
+#
+# You may use the wildcard '*' to match all options.
+#
+options_allow	nosuid,nodev,loop,encryption
+# options_deny	suid,dev
+# options_allow	*
+# options_deny	*
+#
+# I recommend not permitting the suid and dev options.
+
+# The options listed in this directive are required for all volumes from a
+# user config file. That is, any volume specified in a user config file that
+# does not include these options will be ignored.
+#
+# Note: you must make sure that a required option is permitted (either by
+# including it in options_allow, or by not including it in options_deny).
+#
+# I recommend requiring at least nosuid and nodev.
+#
+# This is ignored completely if the volume is configured to get its options
+# and mount point from /etc/fstab.
+#
+options_require	nosuid,nodev
+
+# Commands to mount/unmount volumes. They can take parameters, as shown.
+#
+# If you change the -p0 argument for lclmount, you'll need to modify the
+# source in mount.c (it sends the password to the stdin file descriptor
+# of the child process -- look for STDIN_FILENO).
+
+lsof /usr/sbin/lsof %(MNTPT)
+fsck /sbin/fsck -p %(FSCKTARGET)
+losetup /sbin/losetup -p0 "%(before=\"-e\" CIPHER)" "%(before=\"-k\" KEYBITS)" %(FSCKLOOP) %(VOLUME)
+unlosetup /sbin/losetup -d %(FSCKLOOP)
+cifsmount /bin/mount -t cifs //%(SERVER)/%(VOLUME) %(MNTPT) -o "username=%(USER)%(before=\",\" OPTIONS)"
+#smbmount /usr/bin/smbmount   //%(SERVER)/%(VOLUME) %(MNTPT) -o "username=%(USER)%(before=\",\" OPTIONS)"
+smbmount /bin/mount -nt smb //%(SERVER)/%(VOLUME) %(MNTPT) -o "username=%(USER)%(before=\",\" OPTIONS)"
+ncpmount /usr/bin/ncpmount   %(SERVER)/%(USER) %(MNTPT) -o "pass-fd=0,volume=%(VOLUME)%(before=\",\" OPTIONS)"
+smbumount /usr/bin/smbumount %(MNTPT)
+ncpumount /usr/bin/ncpumount %(MNTPT)
+# Linux supports lazy unmounting (-l).  May be dangerous for encrypted volumes.
+# May also break loopback mounts because loopback devices are not freed.
+# Need to unmount mount point not volume to support SMB mounts, etc.
+umount   /bin/umount -l %(MNTPT)
+# On OpenBSD try "/usr/local/bin/mount_ehd" (included in pam_mount package).
+lclmount /bin/mount -p0 %(VOLUME) %(MNTPT) "%(before=\"-o\" OPTIONS)"
+cryptmount /bin/mount -t crypt "%(before=\"-o\" OPTIONS)" %(VOLUME) %(MNTPT)
+nfsmount /bin/mount -n %(SERVER):%(VOLUME) %(MNTPT) "%(before=\"-o\" OPTIONS)"
+# --bind may be a Linuxism.  FIXME: find BSD equivalent.
+mntagain /bin/mount --bind %(PREVMNTPT) %(MNTPT)
+#mntcheck /bin/mount # For BSD's (don't have /etc/mtab)
+pmvarrun /usr/sbin/pmvarrun -u %(USER) -d -o %(OPERATION)
+
+# Volumes that will be mounted when user triggers pam_mount module
+# (usually at login).
+#
+# Format:
+# volume <user> [smb|ncp|nfs|local] <server> <volume> <mount point> <mount options> <fs key cipher> <fs key path>
+#
+# Note that if the mount command has specified an option, eg %(KEYBITS)
+# and you don't specify a value, a warning is printed in the log. The
+# warning can usually be ignored, except when the option is mandatory.
+#
+# General examples:
+#
+# smb mounts require the "smbfs" Debian package
+# smb mounts work also in user-specified config file ~/.pam_mount.conf
+# volume user smb krueger public /home/user/krueger - - -
+#
+# ncp mounts require the "ncpfs" Debian package
+# ncp mounts work also in user-specified config file ~/.pam_mount.conf
+# volume user ncp krueger public /home/user/krueger user=user.context - -
+#
+# Linux encrypted home directory examples, using dm_crypt:
+#
+# crypt mounts require a kernel with CONFIG_BLK_DEV_DM and CONFIG_DM_CRYPT
+# enabled as well as all the used ciphers (eg. CONFIG_CRYPTO_AES_586,
+# CONFIG_CRYPTO_TWOFISH, etc.)
+# crypt mounts require the "cryptsetup" Debian package.
+# crypt mounts must be in the global config file /etc/security/pam_mount.conf
+# volume user crypt - /dev/sda2 /home/user cipher=aes aes-256-ecb /home/user.key
+#
+# Linux encrypted home directory examples, using cryptoloop:
+#
+# cryptoloop mounts require a kernel with CONFIG_BLK_DEV_CRYPTOLOOP enabled
+# cryptoloop mounts must be in the global config file
+#  /etc/security/pam_mount.conf
+# volume user local - /dev/hda123 /home/user loop,encryption=aes - -
+# volume user local - /home/user.img /home/user loop,user,exec,encryption=aes,keybits=256 - -
+# volume user local - /home/user.img - - - -
+# volume user local - /home/user.img - - aes-256-ecb /home/user4.key
+#
+# The last two examples need a line like the following in
+# /etc/fstab:
+#
+# /home/user4.img /home/user4 xfs user,loop,encryption=aes,keybits=256,noauto 0 0
+#
+# OpenBSD encrypted home directory example (see also lclmount above):
+# volume user local - /home/user.img /home/user svnd0 - -
+#
+# Volatile tmpfs mount with restricted size
+# (thanks to Mike Hommey for this example)
+#
+# volume test local - /tmpfs/test /home/test "size=10M,uid=test,gid=users,mode=0700 -t tmpfs" - -
+#
+# Details:
+# Local user configuration (~/.pam_mount.conf) can extend this.
+#
+# If there are no servers, mount options, fs key ciphers, etc. you must
+# supply a "-"
+#
+# See http://www.tldp.org/HOWTO/Loopback-Encrypted-Filesystem-HOWTO.html
+# to learn how to create a encrypted loopback filesystem.
+#
+# If the volume's password is different than the user's login password,
+# the following technique may be used (see also README):
+#
+# 1.  Create a file containing the volume's password (FS key).  If you are
+#     using pam_mount to mount an loopback encrypted volume, this password
+#     should may generated by /dev/urandom.  
+#
+#     Simple example: 
+#     echo <volume password> | openssl enc -aes-256-ecb > /home/user.key
+#     Encrypt this file using the user's login password as the key.
+#
+#     Verbose loopback encrypted volume example:
+#     a.  dd if=/dev/urandom of=/home/user.img bs=1M count=<image size in MB>
+#     b.  dd if=/dev/urandom bs=1c count=<keysize / 8> | openssl enc \
+#         -<fs key cipher> > /home/user.key
+#         Encrypt this file using the user's login password as the key.
+#     c.  openssl enc -d -<fs key cipher> -in /home/user.key | losetup -e aes \
+#         -k <keysize> -p0 /dev/loop0 /home/user.img
+#     d.  mkfs -t ext2 /dev/loop0
+#     e.  umount /dev/loop0
+#     f.  losetup -d /dev/loop0
+#
+# 3.  In pam_mount.conf:
+#	a.  Set the fs key cipher variable to the cipher used (ie: aes-256-ecb).
+#	b.  Set the fs key path variable to the key's path (ie: /home/user.key)
+# 4.  If a user changes his login password, regenerate the efsk that 
+#     was created in step 1b.  A script named passwdehd is provided to do this.
+#
+# If fs_key_cipher is -, then the user's login password is also the volume's 
+# password.
+
+# Template (or wildcard) volumes
+#
+# If user is "*", "&" will be replaced by name of the user logging on in the
+# volume, mount point, mount options and fs key path fields.  "~/*" will be
+# replaced with "<user's homedir>/*."
+#
+# volume * smb krueger &     /home/&         uid=&,gid=&,dmask=0750 - -
+# volume * smb krueger homes /home/&/remote  - - -
+# volume * local - /home/&.img - - aes-256-ecb /etc/ehd/&
+
+# Windows 2000, which requires a domain specified, example (thanks John Knox):
+# volume * smb viper & /home/& uid=&,gid=&,dmask=0750,workgroup=WINDOWS_DOMAIN - -
+
+# An NCP example:
+# volume user ncp SERVER /USERS/Department/user /home/user user=user.full.context,uid=user,gid=user,symlinks - -
+volume * nfs tjener /skole/tjener/home0 /skole/tjener/home0 nolock - - 
+# volume * smb tjener shared /skole/tjener/shared - - - 
diff --git a/debian-edu-config/etc/security/pam_mount-winbind-debian-edu.conf b/debian-edu-config/etc/security/pam_mount-winbind-debian-edu.conf
new file mode 100644
index 0000000..529f564
--- /dev/null
+++ b/debian-edu-config/etc/security/pam_mount-winbind-debian-edu.conf
@@ -0,0 +1,202 @@
+# Turn on if you want to debug why some volume cannot be mounted etc.
+# This can be overriden by user's local configuration
+# 
+# Format: debug [ 1 | 0 ]
+# Local user configuration can override this.
+
+debug 0
+mkmountpoint 1
+# Loopback device to use to run fsck on loopback filesystems.
+fsckloop /dev/loop7
+
+# Users' local configuration file (if there is none, comment out this
+# parameter). Will be read as ~/<file>
+#
+# Note: you must include either options_allow or options_deny to use
+# this directive. I recommend also including options_require.
+#
+# Individual users may define additional volumes to mount if allowed
+# by pam_mount.conf (usually ~/.pam_mount.conf).  The volume keyword is
+# the only valid keyword in these per-user configuration files.  If the
+# luserconf parameter is set in pam_mount.conf, allowing user-defined
+# volume, then users may mount and unmount any volumes they specify.
+# The mount operation is executed under the user account, not with
+# root permissions.
+# IMPORTANT: right now only smb and ncp mounts work in ~/.pam_mount.conf
+# since they do not require root privileges! All other mount types
+# have to be in the global configuration file.
+# Please only file bugs about this if you can exactly show and prevent
+# the security implications of user-specified mount commands.
+#
+# Format: luserconf <file>
+# luserconf .pam_mount.conf
+
+# These directives determine which options may be specified in a user config
+# file (luserconf). You must include one of these directives if you have a
+# luserconf directive. You may not include both directives.
+#
+# If you have an options_allow directive, then the options listed in that
+# directive wil be allowed, and all others rejected. If you have an
+# options_deny directive, then the options listed will be denied, and all others
+# permitted.
+#
+# You may use the wildcard '*' to match all options.
+#
+options_allow	nosuid,nodev,loop,encryption
+# options_deny	suid,dev
+# options_allow	*
+# options_deny	*
+#
+# I recommend not permitting the suid and dev options.
+
+# The options listed in this directive are required for all volumes from a
+# user config file. That is, any volume specified in a user config file that
+# does not include these options will be ignored.
+#
+# Note: you must make sure that a required option is permitted (either by
+# including it in options_allow, or by not including it in options_deny).
+#
+# I recommend requiring at least nosuid and nodev.
+#
+# This is ignored completely if the volume is configured to get its options
+# and mount point from /etc/fstab.
+#
+options_require	nosuid,nodev
+
+# Commands to mount/unmount volumes. They can take parameters, as shown.
+#
+# If you change the -p0 argument for lclmount, you'll need to modify the
+# source in mount.c (it sends the password to the stdin file descriptor
+# of the child process -- look for STDIN_FILENO).
+
+lsof /usr/sbin/lsof %(MNTPT)
+fsck /sbin/fsck -p %(FSCKTARGET)
+losetup /sbin/losetup -p0 "%(before=\"-e \" CIPHER)" "%(before=\"-k \" KEYBITS)" %(FSCKLOOP) %(VOLUME)
+unlosetup /sbin/losetup -d %(FSCKLOOP)
+cifsmount /bin/mount -t cifs //%(SERVER)/%(VOLUME) %(MNTPT) -o "username=%(USER)%(before=\",\" OPTIONS)"
+# smbmount /usr/bin/smbmount   //%(SERVER)/%(VOLUME) %(MNTPT) -o "username=%(USER)%(before=\",\" OPTIONS)"
+smbmount /sbin/mount.smbfs //%(SERVER)/%(VOLUME) %(MNTPT) -n -o "username=%(USER)%(before=\",\" OPTIONS)"
+ncpmount /usr/bin/ncpmount   %(SERVER)/%(USER) %(MNTPT) -o "pass-fd=0,volume=%(VOLUME)%(before=\",\" OPTIONS)"
+smbumount /usr/bin/smbumount %(MNTPT)
+ncpumount /usr/bin/ncpumount %(MNTPT)
+# Linux supports lazy unmounting (-l).  May be dangerous for encrypted volumes.
+# May also break loopback mounts because loopback devices are not freed.
+# Need to unmount mount point not volume to support SMB mounts, etc.
+umount   /bin/umount %(MNTPT)
+# On OpenBSD try "/usr/local/bin/mount_ehd" (included in pam_mount package).
+lclmount /bin/mount -p0 %(VOLUME) %(MNTPT) "%(before=\"-o \" OPTIONS)"
+cryptmount /bin/mount -t crypt "%(before=\"-o \" OPTIONS)" %(VOLUME) %(MNTPT)
+nfsmount /bin/mount %(SERVER):%(VOLUME) "%(MNTPT)%(before=\"-o \" OPTIONS)"
+# --bind may be a Linuxism.  FIXME: find BSD equivalent.
+mntagain /bin/mount --bind %(PREVMNTPT) %(MNTPT)
+#mntcheck /bin/mount # For BSD's (don't have /etc/mtab)
+pmvarrun /usr/sbin/pmvarrun -u %(USER) -d -o %(OPERATION)
+
+# Volumes that will be mounted when user triggers pam_mount module
+# (usually at login).
+#
+# Format:
+# volume <user> [smb|ncp|nfs|local] <server> <volume> <mount point> <mount options> <fs key cipher> <fs key path>
+#
+# Note that if the mount command has specified an option, eg %(KEYBITS)
+# and you don't specify a value, a warning is printed in the log. The
+# warning can usually be ignored, except when the option is mandatory.
+#
+# General examples:
+#
+# smb mounts require the "smbfs" Debian package
+# smb mounts work also in user-specified config file ~/.pam_mount.conf
+# volume user smb krueger public /home/user/krueger - - -
+#
+# ncp mounts require the "ncpfs" Debian package
+# ncp mounts work also in user-specified config file ~/.pam_mount.conf
+# volume user ncp krueger public /home/user/krueger user=user.context - -
+#
+# Linux encrypted home directory examples, using dm_crypt:
+#
+# crypt mounts require a kernel with CONFIG_BLK_DEV_DM and CONFIG_DM_CRYPT
+# enabled as well as all the used ciphers (eg. CONFIG_CRYPTO_AES_586,
+# CONFIG_CRYPTO_TWOFISH, etc.)
+# crypt mounts require the "cryptsetup" Debian package.
+# crypt mounts must be in the global config file /etc/security/pam_mount.conf
+# volume user crypt - /dev/sda2 /home/user cipher=aes aes-256-ecb /home/user.key
+#
+# Linux encrypted home directory examples, using cryptoloop:
+#
+# cryptoloop mounts require a kernel with CONFIG_BLK_DEV_CRYPTOLOOP enabled
+# cryptoloop mounts must be in the global config file
+#  /etc/security/pam_mount.conf
+# volume user local - /dev/hda123 /home/user loop,encryption=aes - -
+# volume user local - /home/user.img /home/user loop,user,exec,encryption=aes,keybits=256 - -
+# volume user local - /home/user.img - - - -
+# volume user local - /home/user.img - - aes-256-ecb /home/user4.key
+#
+# The last two examples need a line like the following in
+# /etc/fstab:
+#
+# /home/user4.img /home/user4 xfs user,loop,encryption=aes,keybits=256,noauto 0 0
+#
+# OpenBSD encrypted home directory example (see also lclmount above):
+# volume user local - /home/user.img /home/user svnd0 - -
+#
+# Volatile tmpfs mount with restricted size
+# (thanks to Mike Hommey for this example)
+#
+# volume test local - /tmpfs/test /home/test "size=10M,uid=test,gid=users,mode=0700 -t tmpfs" - -
+#
+# Details:
+# Local user configuration (~/.pam_mount.conf) can extend this.
+#
+# If there are no servers, mount options, fs key ciphers, etc. you must
+# supply a "-"
+#
+# See http://www.tldp.org/HOWTO/Loopback-Encrypted-Filesystem-HOWTO.html
+# to learn how to create a encrypted loopback filesystem.
+#
+# If the volume's password is different than the user's login password,
+# the following technique may be used (see also README):
+#
+# 1.  Create a file containing the volume's password (FS key).  If you are
+#     using pam_mount to mount an loopback encrypted volume, this password
+#     should may generated by /dev/urandom.  
+#
+#     Simple example: 
+#     echo <volume password> | openssl enc -aes-256-ecb > /home/user.key
+#     Encrypt this file using the user's login password as the key.
+#
+#     Verbose loopback encrypted volume example:
+#     a.  dd if=/dev/urandom of=/home/user.img bs=1M count=<image size in MB>
+#     b.  dd if=/dev/urandom bs=1c count=<keysize / 8> | openssl enc \
+#         -<fs key cipher> > /home/user.key
+#         Encrypt this file using the user's login password as the key.
+#     c.  openssl enc -d -<fs key cipher> -in /home/user.key | losetup -e aes \
+#         -k <keysize> -p0 /dev/loop0 /home/user.img
+#     d.  mkfs -t ext2 /dev/loop0
+#     e.  umount /dev/loop0
+#     f.  losetup -d /dev/loop0
+#
+# 3.  In pam_mount.conf:
+#	a.  Set the fs key cipher variable to the cipher used (ie: aes-256-ecb).
+#	b.  Set the fs key path variable to the key's path (ie: /home/user.key)
+# 4.  If a user changes his login password, regenerate the efsk that 
+#     was created in step 1b.  A script named passwdehd is provided to do this.
+#
+# If fs_key_cipher is -, then the user's login password is also the volume's 
+# password.
+
+# Template (or wildcard) volumes
+#
+# If user is "*", "&" will be replaced by name of the user logging on in the
+# volume, mount point, mount options and fs key path fields.  "~/*" will be
+# replaced with "<user's homedir>/*."
+#
+# volume * smb krueger &     /home/&         uid=&,gid=&,dmask=0750 - -
+# volume * smb krueger homes /home/&/remote  - - -
+# volume * local - /home/&.img - - aes-256-ecb /etc/ehd/&
+
+# Windows 2000, which requires a domain specified, example (thanks John Knox):
+# volume * smb viper & /home/& uid=&,gid=&,dmask=0750,workgroup=WINDOWS_DOMAIN - -
+
+# An NCP example:
+# volume user ncp SERVER /USERS/Department/user /home/user user=user.full.context,uid=user,gid=user,symlinks - -
+volume * smb %%HDSERVER%% &%%HIDDENHOME%%     /home/%%DOMAIN%%/&/Dokumenter         uid=&,dmask=0700%%CHARSET%%%%CODEPAGE%% - -
diff --git a/debian-edu-config/etc/usbmount/usbmount-debian-edu.conf b/debian-edu-config/etc/usbmount/usbmount-debian-edu.conf
new file mode 100644
index 0000000..7be65ba
--- /dev/null
+++ b/debian-edu-config/etc/usbmount/usbmount-debian-edu.conf
@@ -0,0 +1,37 @@
+# Configuration file for the usbmount package, which mounts USB mass
+# storage devices when they are plugged in and unmounts them when they
+# are removed.
+
+# Mountpoints: These directories are eligible as mointpoints for USB
+# mass storage devices.  A newly plugged in device is mounted on the
+# first directory in this list that exists and on which nothing is
+# mounted yet.
+MOUNTPOINTS="/media/usb0 /media/usb1 /media/usb2 /media/usb3
+             /media/usb4 /media/usb5 /media/usb6 /media/usb7"
+
+# Filesystem types: USB mass storage devices are only mounted if they
+# contain a filesystem type which is in this list.
+#############################################################################
+# WARNING!  The vfat filesystem does not yet fully implement sync-mounting. #
+# If you include "vfat" in the list of filesystem types, you *MUST* make    #
+# sure all data is written to the medium before you remove it (e.g. run the #
+# "sync" command in a terminal window).  Otherwise, you *WILL* lose data!   #
+#############################################################################
+FILESYSTEMS="ext2 ext3 vfat"
+
+# Mount options: Options passed to the mount command with the -o flag.
+# WARNING!  Removing "sync" from the options is a very bad idea and
+# might result in severe data loss.
+MOUNTOPTIONS="sync,noexec,nodev,noatime,umask=0"
+
+# Filesystem type specific mount options: This variable contains a space sepa-
+# rated list of strings, each of which has the form "-fstype=TYPE,OPTIONS".
+# If a filesystem with a type listed here is mounted, the corresponding
+# options are appended to those specificed in the MOUNTOPTIONS variable.
+# For example, "-fstype=vfat,gid=floppy,dmask=0007,fmask=0117" would add the
+# options "gid=floppy,dmask=0007,fmask=0117" when a vfat filesystem is mounted.
+FS_MOUNTOPTIONS="-fstype=vfat,gid=floppy,dmask=0007,fmask=0117"
+
+# If set to "yes", more information will be logged via the syslog
+# facility.
+VERBOSE="no"
diff --git a/debian-edu-config/ldap-bootstrap/autofs.ldif b/debian-edu-config/ldap-bootstrap/autofs.ldif
new file mode 100644
index 0000000..7144d20
--- /dev/null
+++ b/debian-edu-config/ldap-bootstrap/autofs.ldif
@@ -0,0 +1,59 @@
+# ldif automounter information for Skolelinux
+#
+# Author: Rune Nordb�e Skillingstad <runesk at linpro.no>
+# $Id$
+# 
+# Requires automount.schema
+# 
+# root node for autofs
+dn: ou=Automount,dc=skole,dc=skolelinux,dc=no
+objectClass: top
+objectClass: organizationalUnit
+ou: Automount
+description: Top node for automount information
+
+# auto.master huh?
+dn: ou=auto.master,ou=Automount,dc=skole,dc=skolelinux,dc=no
+objectClass: top
+objectClass: organizationalUnit
+ou: auto.master
+description: master information for autofs
+
+# the /skole mount
+dn: cn=/skole,ou=auto.master,ou=Automount,dc=skole,dc=skolelinux,dc=no
+objectClass: top
+objectClass: automount
+cn: /skole
+description: /skole mount point
+automountInformation: ldap:ou=skole,ou=Automount,dc=skole,dc=skolelinux,dc=no
+
+# holder for /skole mount
+dn: ou=skole,ou=Automount,dc=skole,dc=skolelinux,dc=no
+objectClass: top
+objectClass: organizationalUnit
+ou: skole
+description: holder for /skole mount point
+
+# the /skole/tjener submount
+dn: cn=tjener,ou=skole,ou=Automount,dc=skole,dc=skolelinux,dc=no
+objectClass: top
+objectClass: automount
+cn: tjener
+description: /skole/tjener submount point
+automountInformation: -fstype=autofs ldap:ou=tjener,ou=skole,ou=Automount,dc=skole,dc=skolelinux,dc=no
+
+# holder for /skole/tjener mounts
+dn: ou=tjener,ou=skole,ou=Automount,dc=skole,dc=skolelinux,dc=no
+objectClass: top
+objectClass: organizationalUnit
+ou: tjener
+description: holder for /skole/tjener mount point
+
+# the /skole/tjener/home0 mount point
+dn: cn=home0,ou=tjener,ou=skole,ou=Automount,dc=skole,dc=skolelinux,dc=no
+objectClass: top
+objectClass: automount
+cn: home0
+automountInformation: -rw,rsize=8192,wsize=8192,intr,tcp tjener:/skole/tjener/home0
+description: /skole/tjener/home0 mount point
+
diff --git a/debian-edu-config/ldap-bootstrap/netgroup.ldif b/debian-edu-config/ldap-bootstrap/netgroup.ldif
new file mode 100644
index 0000000..2fd4928
--- /dev/null
+++ b/debian-edu-config/ldap-bootstrap/netgroup.ldif
@@ -0,0 +1,30 @@
+dn: cn=printer-hosts,ou=Netgroup,dc=skole,dc=skolelinux,dc=no
+objectClass: top
+objectClass: nisNetgroup
+cn: printer-hosts
+
+dn: cn=workstation-hosts,ou=Netgroup,dc=skole,dc=skolelinux,dc=no
+objectClass: top
+objectClass: nisNetgroup
+cn: workstation-hosts
+
+dn: cn=ltsp-server-hosts,ou=Netgroup,dc=skole,dc=skolelinux,dc=no
+objectClass: top
+objectClass: nisNetgroup
+cn: ltsp-server-hosts
+
+dn: cn=server-hosts,ou=Netgroup,dc=skole,dc=skolelinux,dc=no
+objectClass: top
+objectClass: nisNetgroup
+cn: server-hosts
+nisNetgroupTriple: (tjener,-,-)
+
+dn: cn=all-hosts,ou=Netgroup,dc=skole,dc=skolelinux,dc=no
+objectClass: top
+objectClass: nisNetgroup
+cn: all-hosts
+memberNisNetgroup: ltsp-server-hosts
+memberNisNetgroup: printer-hosts
+memberNisNetgroup: server-hosts
+memberNisNetgroup: workstation-hosts
+
diff --git a/debian-edu-config/ldap-bootstrap/root.ldif b/debian-edu-config/ldap-bootstrap/root.ldif
new file mode 100644
index 0000000..9a4da15
--- /dev/null
+++ b/debian-edu-config/ldap-bootstrap/root.ldif
@@ -0,0 +1,132 @@
+dn: dc=skole,dc=skolelinux,dc=no
+objectClass: top
+objectClass: dcObject
+dc: skole
+objectClass: organization
+o: skole.skolelinux.no
+
+dn: ou=Attic,dc=skole,dc=skolelinux,dc=no
+objectClass: top
+objectClass: organizationalUnit
+ou: Attic
+
+dn: ou=Machines,ou=People,dc=skole,dc=skolelinux,dc=no
+objectClass: top
+objectClass: organizationalUnit
+ou: Machines
+
+dn: ou=People,dc=skole,dc=skolelinux,dc=no
+objectClass: top
+objectClass: organizationalUnit
+ou: People
+
+dn: ou=Pam,dc=skole,dc=skolelinux,dc=no
+objectClass: top
+objectClass: organizationalUnit
+ou: Pam
+
+dn: ou=Domains,dc=skole,dc=skolelinux,dc=no
+objectClass: top
+objectClass: organizationalUnit
+ou: Domains
+
+dn: ou=Group,dc=skole,dc=skolelinux,dc=no
+objectClass: top
+objectClass: organizationalUnit
+ou: Group
+
+dn: ou=Netgroup,dc=skole,dc=skolelinux,dc=no
+objectClass: top
+objectClass: organizationalUnit
+ou: Netgroup
+
+dn: ou=Variables,dc=skole,dc=skolelinux,dc=no
+objectClass: top
+objectClass: organizationalUnit
+ou: Variables
+
+dn: cn=admin,ou=People,dc=skole,dc=skolelinux,dc=no
+objectClass: top
+objectClass: organizationalRole
+objectClass: simpleSecurityObject
+cn: admin
+description: LDAP Administrator
+userPassword: {crypt}$ROOTPW
+
+dn: cn=admins,ou=Group,dc=skole,dc=skolelinux,dc=no
+objectClass: top
+objectClass: posixGroup
+objectClass: lisGroup
+objectClass: lisAclGroup
+cn: admins
+member:
+description: All system administrators in the institution
+gidNumber: 10001
+groupType: authority_group
+
+dn: cn=jradmins,ou=Group,dc=skole,dc=skolelinux,dc=no
+objectClass: top
+objectClass: posixGroup
+objectClass: lisGroup
+objectClass: lisAclGroup
+cn: jradmins
+member:
+description: Junior Admins
+gidNumber: 10002
+groupType: authority_group
+
+dn: cn=teachers,ou=Group,dc=skole,dc=skolelinux,dc=no
+objectClass: top
+objectClass: posixGroup
+objectClass: lisGroup
+objectClass: lisAclGroup
+cn: teachers
+member:
+description: All teachers in the institution
+gidNumber: 10003
+groupType: authority_group
+
+dn: cn=students,ou=Group,dc=skole,dc=skolelinux,dc=no
+objectClass: top
+objectClass: posixGroup
+objectClass: lisGroup
+objectClass: lisAclGroup
+cn: students
+member:
+description: All students/pupils in the institution
+gidNumber: 10004
+groupType: authority_group
+
+dn: cn=none,ou=Group,dc=skole,dc=skolelinux,dc=no
+objectClass: top
+objectClass: posixGroup
+objectClass: lisGroup
+cn: none
+description: dummy empty group
+gidNumber: 10005
+groupType: school_class
+
+dn: cn=machines,ou=Group,dc=skole,dc=skolelinux,dc=no
+objectClass: top
+objectClass: posixGroup
+cn: machines
+description: All computer that are allowed to join the skolelinux SMB domain
+gidNumber: 10006
+
+dn: cn=nextID,ou=Variables,dc=skole,dc=skolelinux,dc=no
+objectClass: top
+objectClass: posixGroup
+cn: nextID
+description: internal use
+gidNumber: 10007
+
+dn: cn=capabilities,ou=Variables,dc=skole,dc=skolelinux,dc=no
+objectClass: top
+objectClass: lisLdapCapabilities
+cn: capabilities
+structuralObjectClass: lisLdapCapabilities
+capability: nextID 1
+capability: groupType 1
+capability: capabilities 1
+capability: aclGroup 1
+capability: attic 1
diff --git a/debian-edu-config/ldap-schemas/EduPerson.schema b/debian-edu-config/ldap-schemas/EduPerson.schema
new file mode 100644
index 0000000..7d61365
--- /dev/null
+++ b/debian-edu-config/ldap-schemas/EduPerson.schema
@@ -0,0 +1,139 @@
+#
+# eduPerson Object Class Specification (200210)
+# eduOrg Object Class Specification (200210)
+#
+# See http://www.educause.edu/eduperson for background and usage
+#
+# eduPerson/eduOrg is an effort of Internet2 and EDUCAUSE
+#
+#
+# 1.3.6.1.4.1.5923 is the toplevel OID for this work
+#          .1 = MACE related work
+#          .1.1 = eduPerson
+#          .1.1.1 = attributes
+#          .1.1.2 = objectclass
+#          .1.1.3 = syntax (probably never used)
+#          .1.2 = eduOrg
+#          .1.2.1 = attributes
+#          .1.2.2 = objectclass
+#          .1.2.3 = syntax (probably never used)
+#
+# $Id: EduPerson.schema,v 1.1 2004/03/24 23:37:28 bgrotan-guest Exp $
+#
+
+ObjectIdentifier MACE          1.3.6.1.4.1.5923.1
+ObjectIdentifier eduP          MACE:1
+ObjectIdentifier eduPAttribute eduP:1
+ObjectIdentifier eduPObjClass  eduP:2
+ObjectIdentifier eduO          MACE:2
+ObjectIdentifier eduOAttribute eduO:1
+ObjectIdentifier eduOObjClass  eduO:2
+
+#
+# "eduPerson" attributes
+#
+attributetype ( eduPAttribute:1
+        NAME 'eduPersonAffiliation'
+        DESC 'eduPerson per Internet2 and EDUCAUSE'
+        EQUALITY caseIgnoreMatch
+        SYNTAX '1.3.6.1.4.1.1466.115.121.1.15' )
+
+attributetype ( eduPAttribute:2
+        NAME 'eduPersonNickname'
+        DESC 'eduPerson per Internet2 and EDUCAUSE' 
+        EQUALITY caseIgnoreMatch
+        SYNTAX '1.3.6.1.4.1.1466.115.121.1.15' )
+
+attributetype ( eduPAttribute:3
+        NAME 'eduPersonOrgDN'
+        DESC 'eduPerson per Internet2 and EDUCAUSE'
+        EQUALITY distinguishedNameMatch
+        SYNTAX '1.3.6.1.4.1.1466.115.121.1.12'
+        SINGLE-VALUE )
+
+attributetype ( eduPAttribute:4
+        NAME 'eduPersonOrgUnitDN'
+        DESC 'eduPerson per Internet2 and EDUCAUSE'
+        EQUALITY distinguishedNameMatch
+        SYNTAX '1.3.6.1.4.1.1466.115.121.1.12' )
+
+attributetype ( eduPAttribute:5
+        NAME 'eduPersonPrimaryAffiliation'
+        DESC 'eduPerson per Internet2 and EDUCAUSE'
+        EQUALITY caseIgnoreMatch
+        SYNTAX '1.3.6.1.4.1.1466.115.121.1.15'
+        SINGLE-VALUE )
+
+attributetype ( eduPAttribute:6
+        NAME 'eduPersonPrincipalName'
+        DESC 'eduPerson per Internet2 and EDUCAUSE'
+        EQUALITY caseIgnoreMatch
+        SYNTAX '1.3.6.1.4.1.1466.115.121.1.15'
+        SINGLE-VALUE )
+
+attributetype ( eduPAttribute:7
+        NAME 'eduPersonEntitlement'
+        DESC 'eduPerson per Internet2 and EDUCAUSE'
+        EQUALITY caseIgnoreMatch
+        SYNTAX '1.3.6.1.4.1.1466.115.121.1.15' )
+
+attributetype ( eduPAttribute:8
+        NAME 'eduPersonPrimaryOrgUnitDN'
+        DESC 'eduPerson per Internet2 and EDUCAUSE'
+        EQUALITY distinguishedNameMatch
+        SYNTAX '1.3.6.1.4.1.1466.115.121.1.12'
+        SINGLE-VALUE)
+
+#
+# "eduOrg" attributes
+#
+attributetype ( eduOAttribute:2
+        NAME 'eduOrgHomePageURI'
+        DESC 'eduOrg per Internet2 and EDUCAUSE'
+        EQUALITY caseExactMatch
+        SYNTAX '1.3.6.1.4.1.1466.115.121.1.15' )
+
+attributetype ( eduOAttribute:3
+        NAME 'eduOrgIdentityAuthNPolicyURI'
+        DESC 'eduOrg per Internet2 and EDUCAUSE'
+        EQUALITY caseExactMatch
+        SYNTAX '1.3.6.1.4.1.1466.115.121.1.15' )
+
+attributetype ( eduOAttribute:4
+        NAME 'eduOrgLegalName'
+        DESC 'eduOrg per Internet2 and EDUCAUSE'
+        EQUALITY caseIgnoreMatch
+        SYNTAX '1.3.6.1.4.1.1466.115.121.1.15' )
+
+attributetype ( eduOAttribute:5
+        NAME 'eduOrgSuperiorURI'
+        DESC 'eduOrg per Internet2 and EDUCAUSE'
+        EQUALITY caseExactMatch
+        SYNTAX '1.3.6.1.4.1.1466.115.121.1.15' )
+
+attributetype ( eduOAttribute:6
+        NAME 'eduOrgWhitePagesURI'
+        DESC 'eduOrg per Internet2 and EDUCAUSE'
+        EQUALITY caseExactMatch
+        SYNTAX '1.3.6.1.4.1.1466.115.121.1.15' )
+
+#
+# eduPerson objectclass definition
+#
+objectclass ( eduPObjClass
+        NAME  'eduPerson'
+        AUXILIARY
+        MAY ( eduPersonAffiliation $ eduPersonNickname $
+                eduPersonOrgDN $ eduPersonOrgUnitDN $
+                eduPersonPrimaryAffiliation $ eduPersonPrincipalName $
+                eduPersonEntitlement $ eduPersonPrimaryOrgUnitDN ) )
+
+#
+# eduOrg objectclass definition
+#
+objectclass ( eduOObjClass
+        NAME 'eduOrg'
+        AUXILIARY
+        MAY ( cn $ eduOrgHomePageURI $
+                eduOrgIdentityAuthNPolicyURI $ eduOrgLegalName $
+                eduOrgSuperiorURI $ eduOrgWhitePagesURI ) )
diff --git a/debian-edu-config/ldap-schemas/automount-debian-edu.schema b/debian-edu-config/ldap-schemas/automount-debian-edu.schema
new file mode 100644
index 0000000..e833ea0
--- /dev/null
+++ b/debian-edu-config/ldap-schemas/automount-debian-edu.schema
@@ -0,0 +1,23 @@
+# Depends upon core.schema and cosine.schema
+
+# OID Base is 1.3.6.1.4.1.2312.4
+#
+# Attribute types are under 1.3.6.1.4.1.2312.4.1
+# Object classes are under 1.3.6.1.4.1.2312.4.2
+# Syntaxes are under 1.3.6.1.4.1.2312.4.3
+
+# Attribute Type Definitions
+
+attributetype ( 1.3.6.1.1.1.1.25 NAME 'automountInformation'
+        DESC 'Information used by the autofs automounter'
+        EQUALITY caseExactIA5Match
+        SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE )
+
+objectclass ( 1.3.6.1.1.1.1.9 NAME 'automount' SUP top STRUCTURAL
+        DESC 'An entry in an automounter map'
+        MUST ( cn $ automountInformation $ objectclass )
+        MAY ( description ) )
+
+objectclass ( 1.3.6.1.4.1.2312.4.2.2 NAME 'automountMap' SUP top STRUCTURAL
+        DESC 'An group of related automount objects'
+        MUST ( ou ) )
diff --git a/debian-edu-config/ldap-schemas/courier.schema b/debian-edu-config/ldap-schemas/courier.schema
new file mode 100644
index 0000000..6aa6c8b
--- /dev/null
+++ b/debian-edu-config/ldap-schemas/courier.schema
@@ -0,0 +1,17 @@
+attributetype ( 1.3.6.1.4.1.42.2.27.2.1.32 NAME 'mailMessageStore'
+		DESC 'File system location of the Inbox for a user'
+		SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 
+		SINGLE-VALUE 
+	)
+
+# attributetype ( 1.3.6.1.1.1.1.3 NAME 'homeDirectory'
+#         	DESC 'The absolute path to the home directory'
+#         	EQUALITY caseExactIA5Match
+#         	SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 
+# 		SINGLE-VALUE 
+# 	)
+
+objectclass ( 1.3.6.1.4.1.8990.2.1.1 NAME 'imapUser'
+		SUP top
+		MUST ( mailMessageStore $ homeDirectory )
+	)
\ No newline at end of file
diff --git a/debian-edu-config/ldap-schemas/krb5-kdc.schema b/debian-edu-config/ldap-schemas/krb5-kdc.schema
new file mode 100644
index 0000000..1fc15b3
--- /dev/null
+++ b/debian-edu-config/ldap-schemas/krb5-kdc.schema
@@ -0,0 +1,134 @@
+# $OpenLDAP: pkg/ldap/servers/slapd/schema/krb5-kdc.schema,v 1.1.2.1 2000/09/05 18:28:34 kurt Exp $
+# $Id: krb5-kdc.schema,v 1.1 2004/03/24 23:37:28 bgrotan-guest Exp $
+# Definitions for a Kerberos V KDC schema
+
+# OID Base is iso(1) org(3) dod(6) internet(1) private(4) enterprise(1) padl(5322) kdcSchema(10)
+#
+# Syntaxes are under 1.3.6.1.4.1.5322.10.0
+# Attributes types are under 1.3.6.1.4.1.5322.10.1
+# Object classes are under 1.3.6.1.4.1.5322.10.2
+
+# Syntax definitions
+
+#krb5KDCFlagsSyntax SYNTAX ::= {
+#   WITH SYNTAX            INTEGER
+#--        initial(0),             -- require as-req
+#--        forwardable(1),         -- may issue forwardable
+#--        proxiable(2),           -- may issue proxiable
+#--        renewable(3),           -- may issue renewable
+#--        postdate(4),            -- may issue postdatable
+#--        server(5),              -- may be server
+#--        client(6),              -- may be client
+#--        invalid(7),             -- entry is invalid
+#--        require-preauth(8),     -- must use preauth
+#--        change-pw(9),           -- change password service
+#--        require-hwauth(10),     -- must use hwauth
+#--        ok-as-delegate(11),     -- as in TicketFlags
+#--        user-to-user(12),       -- may use user-to-user auth
+#--        immutable(13)           -- may not be deleted         
+#   ID                     { 1.3.6.1.4.1.5322.10.0.1 }
+#}
+
+#krb5PrincipalNameSyntax SYNTAX ::= {
+#   WITH SYNTAX            OCTET STRING
+#-- String representations of distinguished names as per RFC1510
+#   ID                     { 1.3.6.1.4.1.5322.10.0.2 }
+#}
+
+# Attribute type definitions
+ 
+attributetype ( 1.3.6.1.4.1.5322.10.1.1
+	NAME 'krb5PrincipalName'
+	DESC 'The unparsed Kerberos principal name'
+	EQUALITY caseExactIA5Match
+	SINGLE-VALUE
+	SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
+
+attributetype ( 1.3.6.1.4.1.5322.10.1.2
+	NAME 'krb5KeyVersionNumber'
+	EQUALITY integerMatch
+	SINGLE-VALUE
+	SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 )
+
+attributetype ( 1.3.6.1.4.1.5322.10.1.3
+	NAME 'krb5MaxLife'
+	EQUALITY integerMatch
+	SINGLE-VALUE
+	SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 )
+
+attributetype ( 1.3.6.1.4.1.5322.10.1.4
+	NAME 'krb5MaxRenew'
+	EQUALITY integerMatch
+	SINGLE-VALUE
+	SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 )
+
+attributetype ( 1.3.6.1.4.1.5322.10.1.5
+	NAME 'krb5KDCFlags'
+	EQUALITY integerMatch
+	SINGLE-VALUE
+	SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 )
+
+attributetype ( 1.3.6.1.4.1.5322.10.1.6
+	NAME 'krb5EncryptionType'
+	EQUALITY integerMatch
+	SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 )
+
+attributetype ( 1.3.6.1.4.1.5322.10.1.7
+	NAME 'krb5ValidStart'
+	ORDERING generalizedTimeOrderingMatch
+	SYNTAX 1.3.6.1.4.1.1466.115.121.1.24
+	SINGLE-VALUE )
+
+attributetype ( 1.3.6.1.4.1.5322.10.1.8
+	NAME 'krb5ValidEnd'
+	ORDERING generalizedTimeOrderingMatch
+	SYNTAX 1.3.6.1.4.1.1466.115.121.1.24
+	SINGLE-VALUE )
+
+attributetype ( 1.3.6.1.4.1.5322.10.1.9
+	NAME 'krb5PasswordEnd'
+	ORDERING generalizedTimeOrderingMatch
+	SYNTAX 1.3.6.1.4.1.1466.115.121.1.24
+	SINGLE-VALUE )
+
+# this is temporary; keys will eventually
+# be child entries or compound attributes.
+attributetype ( 1.3.6.1.4.1.5322.10.1.10
+	NAME 'krb5Key'
+	DESC 'Encoded ASN1 Key as an octet string'
+	SYNTAX 1.3.6.1.4.1.1466.115.121.1.5 )
+
+attributetype ( 1.3.6.1.4.1.5322.10.1.11
+	NAME 'krb5PrincipalRealm'
+	DESC 'Distinguished name of krb5Realm entry'
+	SUP distinguishedName )
+
+attributetype ( 1.3.6.1.4.1.5322.10.1.12
+	NAME 'krb5RealmName'
+	EQUALITY octetStringMatch
+	SYNTAX 1.3.6.1.4.1.1466.115.121.1.40{128} )
+
+# Object class definitions
+
+objectclass ( 1.3.6.1.4.1.5322.10.2.1
+	NAME 'krb5Principal'
+	SUP top
+	AUXILIARY
+	MUST ( krb5PrincipalName )
+	MAY ( cn $ krb5PrincipalRealm ) )
+
+objectclass ( 1.3.6.1.4.1.5322.10.2.2
+	NAME 'krb5KDCEntry'
+	SUP krb5Principal
+	AUXILIARY
+	MUST ( krb5KeyVersionNumber )
+	MAY ( krb5ValidStart $ krb5ValidEnd $ krb5PasswordEnd $
+              krb5MaxLife $ krb5MaxRenew $ krb5KDCFlags $
+              krb5EncryptionType $ krb5Key ) )
+
+objectclass ( 1.3.6.1.4.1.5322.10.2.3
+	NAME 'krb5Realm'
+	SUP top
+	AUXILIARY
+	MUST ( krb5RealmName ) )
+
diff --git a/debian-edu-config/ldap-schemas/lis.schema b/debian-edu-config/ldap-schemas/lis.schema
new file mode 100644
index 0000000..356d747
--- /dev/null
+++ b/debian-edu-config/ldap-schemas/lis.schema
@@ -0,0 +1,209 @@
+##
+## lis.schema
+##
+## A schema for managing the students, classes and teachers
+## in the Skolelinux project (http://www.skolelinux.no)
+##
+
+# Depends on core.schema, cosine.schema and nis.schema
+
+
+# The OID Base is 1.3.6.1.4.1.8990.42
+# The tree is split in two, .1 for attributes and .2 for objectclasses
+
+##
+##  Attributes
+##
+
+# LiS.1.1  emailAlias
+#
+attributetype ( 1.3.6.1.4.1.8990.42.1.1 NAME 'emailAlias'
+	DESC     'Valid email aliases, local part only'
+	SYNTAX    1.3.6.1.4.1.1466.115.121.1.26
+	EQUALITY  caseIgnoreIA5Match )
+
+# LiS.1.2  dateOfBirth
+#
+attributetype ( 1.3.6.1.4.1.8990.42.1.2 NAME 'dateOfBirth'
+	DESC     'Date of birth, accurate to the day'
+	SYNTAX    1.3.6.1.4.1.1466.115.121.1.24
+	EQUALITY  generalizedTimeMatch
+	SINGLE-VALUE )
+
+# LiS.1.3  kinship
+#
+attributetype ( 1.3.6.1.4.1.8990.42.1.3 NAME 'kinship'
+	DESC     'Name for type of family or custodian relationship'
+	SYNTAX    1.3.6.1.4.1.1466.115.121.1.26
+	EQUALITY  caseIgnoreIA5Match )
+
+# LiS.1.4  kin
+#
+attributetype ( 1.3.6.1.4.1.8990.42.1.4 NAME 'kin'
+	DESC     'Reference to person with kinship role'
+	SYNTAX    1.3.6.1.4.1.1466.115.121.1.12
+	EQUALITY  distinguishedNameMatch )
+
+# LiS.1.6  teacher
+#
+attributetype ( 1.3.6.1.4.1.8990.42.1.6 NAME 'teacher'
+	DESC     'Reference to person with teacher role'
+	SYNTAX    1.3.6.1.4.1.1466.115.121.1.12
+	EQUALITY  distinguishedNameMatch )
+
+# LiS.1.7  student
+#
+attributetype ( 1.3.6.1.4.1.8990.42.1.7 NAME 'student'
+	DESC     'Reference to person with student role'
+	SYNTAX   1.3.6.1.4.1.1466.115.121.1.12
+	EQUALITY distinguishedNameMatch )
+
+
+
+# LiS.1.8  timeAndPlace
+#
+# The attributes value is a text string which should follow the format
+#
+#  timeAndPlace ::= <time-spec> " " <place>
+#  time-spec    ::= <weeks> " " <day-of-week> " " <time> "-" <time>
+#  weeks        ::= "-" <number> | <number> | <number> "%" <number>
+#  number       ::= <digit> | <digit> <number>
+#  digit        ::= "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"
+#  day-of-week  ::=  "mon" | "tue" | "wed" | "thu" | "fri" | "sat" | "sun"
+#  time         ::= <hhmm> | <hhmmss>
+#  hhmm         ::= <digit> <digit> ":" <digit> <digit>
+#  hhmmss       ::= <hhmm> ":" <digit> <digit>
+#  place        ::= (any string)
+#
+# An alternative way of writing the syntax is:
+#  "[-D|D[%D]] (mon|tue|...) HH:MM[:SS]-HH:MM[:SS] Name-of-place"
+#
+#  "2 mon" means the second Monday of every month
+#  "-1 mon" means the last Monday of every month
+#  "2%4 mon" means on Mondays every forth week (week 2, 6, 10 and so on)
+#
+# The time should be specified in 24h format.  All times are local.
+#
+attributetype ( 1.3.6.1.4.1.8990.42.1.8 NAME 'timeAndPlace'
+	SYNTAX   1.3.6.1.4.1.1466.115.121.1.26
+	EQUALITY caseIgnoreIA5Match )
+
+# LiS.1.9  groupType
+#
+attributetype ( 1.3.6.1.4.1.8990.42.1.9 NAME 'groupType'
+	DESC     'Description of type of group at hand'
+	EQUALITY caseExactIA5Match
+	SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 
+	SINGLE-VALUE )
+
+# LiS.1.10  ageGroup
+#
+attributetype ( 1.3.6.1.4.1.8990.42.1.10 NAME 'ageGroup'
+	DESC     'The age group a person or group is affiliated with'
+	EQUALITY caseExactIA5Match
+	SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
+
+# LiS.1.11  capability
+#
+attributetype ( 1.3.6.1.4.1.8990.42.1.11 NAME 'capability'
+	EQUALITY caseExactIA5Match
+	SUBSTR caseExactIA5SubstringsMatch
+	SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
+
+# LiS.1.12  writeableBy
+#
+attributetype ( 1.3.6.1.4.1.8990.42.1.12 NAME 'writeableBy'
+	EQUALITY caseExactIA5Match
+	SUBSTR caseExactIA5SubstringsMatch
+	SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
+
+##
+##  Objectclasses
+##
+
+# LiS.2.1  lisSchool
+#
+#  associatedDomain: The email domain which should be used for this
+#                    school, if different from the hierarchical domain
+#                    name assigned to this school.
+#  cn:               Alternative names for this school.
+#
+objectclass ( 1.3.6.1.4.1.8990.42.2.1 NAME 'lisSchool'
+	SUP top
+	AUXILIARY
+	MAY (associatedDomain $ cn ))
+
+
+# LiS.2.2  lisPerson
+#
+#  owner:            Main teacher for student (has write access to this
+#                    object).
+#  dateOfBirth:      Self-explanatory.
+#  uniqueIdentifier: SSN or similar identifier which is unique beyond
+#                    this directory.
+#  emailAlias:       Valid email addresses.  The user's preferred email
+#                    address is rfc822Mailbox if present (from
+#                    inetOrgPerson), or else his/her uid (from
+#                    posixAccount).
+#
+objectclass ( 1.3.6.1.4.1.8990.42.2.2 NAME 'lisPerson'
+	SUP top
+	AUXILIARY
+	MAY ( owner $ dateOfBirth $ emailAlias $ uniqueIdentifier ) )
+
+# LiS.2.3  lisKinship
+#
+objectclass ( 1.3.6.1.4.1.8990.42.2.3 NAME 'lisKinship'
+	SUP top
+	STRUCTURAL
+	MUST ( kinship $ kin ) )
+
+# LiS.2.4  lisClass
+#
+#  cn:            Name of class.
+#  owner:         Teacher(s) responsible for this class (has write
+#                 access).
+#  teacher:       The personel who teach in this class.
+#  student:       Students who attend this class.
+#  timeAndPlace:  Where and when.
+#
+objectclass ( 1.3.6.1.4.1.8990.42.2.4 NAME 'lisClass'
+	SUP top
+	STRUCTURAL
+	MUST ( cn )
+	MAY ( owner $ teacher $ student $ timeAndPlace ) )
+
+# LiS.2.4  lisGroup
+#  this completes the posixGroup with data for the groupType
+#  cn:            Name of class.
+#  owner:         Teacher(s) responsible for this class (has write
+#                 access).
+#  teacher:       The personel who teach in this class.
+#  student:       Students who attend this class.
+#  timeAndPlace:  Where and when.
+#
+
+objectclass ( 1.3.6.1.4.1.8990.42.2.5 NAME 'lisGroup'
+	SUP top
+	AUXILIARY
+	MAY ( groupType $ ageGroup ) )
+
+
+# LiS.2.6 lisLdapCapabilities
+# 
+objectclass ( 1.3.6.1.4.1.8990.42.2.6 NAME 'lisLdapCapabilities' 
+	SUP top STRUCTURAL
+	DESC 'Descriptions of LDAP directory structure'
+	MUST ( cn )
+	MAY ( capability ) )
+
+# LiS.2.7 lisAclGroup
+objectclass ( 1.3.6.1.4.1.8990.42.2.7 NAME 'lisAclGroup' 
+        SUP ( posixGroup $ groupOfNames) STRUCTURAL
+	DESC 'hybrid group to allow atomic updates of ACLs and posixGroup')
+
+# LiS.2.8 
+objectclass ( 1.3.6.1.4.1.8990.42.2.8 NAME 'lisAclHelper' 
+        SUP top AUXILIARY
+	DESC 'utility objectclass to allow for filtering of users'
+	MAY ( writeableBy ) )
diff --git a/debian-edu-config/ldap-schemas/norEduPerson.schema b/debian-edu-config/ldap-schemas/norEduPerson.schema
new file mode 100644
index 0000000..a2f7ee0
--- /dev/null
+++ b/debian-edu-config/ldap-schemas/norEduPerson.schema
@@ -0,0 +1,122 @@
+#
+# FEIDE Object Class Specification
+#
+# $Id$
+#
+
+#
+# Object Identifiers used
+#
+ObjectIdentifier FEIDE           1.3.6.1.4.1.2428.90
+ObjectIdentifier feideAttribute  FEIDE:1
+ObjectIdentifier feideObjClass   FEIDE:2
+
+#
+# FEIDE attributes
+#
+attributetype ( feideAttribute:1
+        NAME 'norEduOrgUniqueNumber'
+        DESC 'The number describing the institution.'
+        SYNTAX 1.3.6.1.4.1.1466.115.121.1.27
+        EQUALITY integerMatch
+        USAGE userApplications
+        SINGLE-VALUE )
+
+attributetype ( feideAttribute:2
+        NAME 'norEduOrgUnitUniqueNumber'
+        DESC 'The number describing the organizational unit.'
+        SYNTAX 1.3.6.1.4.1.1466.115.121.1.27
+        EQUALITY integerMatch
+        USAGE userApplications
+        SINGLE-VALUE ) 
+
+attributetype ( feideAttribute:3
+        NAME 'norEduPersonBirthDate' 
+        DESC 'BirthDate for a person.'
+        SYNTAX 1.3.6.1.4.1.1466.115.121.1.27
+        EQUALITY integerMatch
+        USAGE userApplications
+        SINGLE-VALUE ) 
+
+attributetype ( feideAttribute:4
+        NAME 'norEduPersonLIN'
+        DESC 'Local unique identifier'
+        SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
+        EQUALITY caseIgnoreMatch
+        USAGE userApplications )
+
+attributetype ( feideAttribute:5
+        NAME 'norEduPersonNIN' 
+        DESC 'National Identity Number.'
+        SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
+        EQUALITY caseIgnoreMatch
+        USAGE userApplications
+        SINGLE-VALUE )
+
+attributetype ( feideAttribute:6
+        NAME 'norEduOrgAcronym'
+        DESC 'Attribute containing the acronym for the object.'
+        SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
+        EQUALITY caseIgnoreMatch
+        USAGE userApplications )
+
+attributetype ( feideAttribute:7
+	NAME 'norEduOrgUniqueIdentifier'
+	DESC 'The unique identifier describing the organization.'
+	SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
+	EQUALITY caseIgnoreMatch
+	USAGE userApplications
+	SINGLE-VALUE )
+
+attributetype ( feideAttribute:8
+	NAME 'norEduOrgUnitUniqueIdentifier'
+	DESC 'The unique identifier describing the organizational unit.'
+	SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
+	EQUALITY caseIgnoreMatch
+	USAGE userApplications
+	SINGLE-VALUE )
+
+attributetype ( feideAttribute:9
+	NAME 'federationFeideSchemaVersion'
+	DESC 'Attribute containing the acronym for the object.'
+	SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
+	EQUALITY caseIgnoreMatch
+	USAGE userApplications
+	SINGLE-VALUE )
+
+#
+# FEIDE Object Classes
+#
+objectclass ( feideObjClass:1
+        NAME 'norEduOrg'
+        SUP organization
+        DESC 'Supplementary local attributes.' 
+        MUST ( dc $ norEduOrgUniqueIdentifier ) 
+        MAY ( norEduOrgAcronym $ mail $ labeledURI ) ) 
+
+objectclass ( feideObjClass:2
+        NAME 'norEduOrgUnit' 
+        SUP organizationalUnit
+        DESC 'Supplementary local attributes.' 
+        MUST ( cn $ norEduOrgUnitUniqueIdentifier ) 
+        MAY ( norEduOrgAcronym $ labeledURI $ mail ) ) 
+
+objectclass ( feideObjClass:3
+        NAME 'norEduPerson'
+        SUP eduPerson
+        AUXILIARY
+        MUST ( norEduPersonNIN )
+        MAY ( norEduPersonBirthDate $ norEduPersonLIN) )
+
+objectclass ( feideObjClass:4
+	NAME 'norEduObsolete'
+	SUP organization
+	AUXILIARY
+	MAY ( norEduOrgUniqueNumber $ norEduOrgUnitUniqueNumber ) )
+
+objectclass ( feideObjClass:5
+	NAME 'federationFeideSchema'
+	SUP organization
+	AUXILIARY
+	DESC 'Supplementary non-person FEIDE attributes.'
+	MAY ( federationFeideSchemaVersion ) )
diff --git a/debian-edu-config/ldap-schemas/samba-2.2.x.schema b/debian-edu-config/ldap-schemas/samba-2.2.x.schema
new file mode 100644
index 0000000..28828f4
--- /dev/null
+++ b/debian-edu-config/ldap-schemas/samba-2.2.x.schema
@@ -0,0 +1,140 @@
+##
+## schema file for OpenLDAP 2.0.x
+## Schema for storing Samba's smbpasswd file in LDAP
+## OIDs are owned by the Samba Team
+##
+## Prerequisite schemas - uid (cosine.schema)
+##                      - displayName (inetorgperson.schema)
+##
+## 1.3.1.5.1.4.1.7165.2.1.x - attributetypes
+## 1.3.1.5.1.4.1.7165.2.2.x - objectclasses
+##
+
+##
+## Password hashes
+##
+attributetype ( 1.3.6.1.4.1.7165.2.1.1 NAME 'lmPassword'
+	DESC 'LanManager Passwd'
+	EQUALITY caseIgnoreIA5Match
+	SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{32} SINGLE-VALUE )
+
+attributetype ( 1.3.6.1.4.1.7165.2.1.2 NAME 'ntPassword'
+	DESC 'NT Passwd'
+	EQUALITY caseIgnoreIA5Match
+	SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{32} SINGLE-VALUE )
+
+##
+## Account flags in string format ([UWDX     ])
+##
+attributetype ( 1.3.6.1.4.1.7165.2.1.4 NAME 'acctFlags'
+	DESC 'Account Flags'
+	EQUALITY caseIgnoreIA5Match
+	SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{16} SINGLE-VALUE )
+
+## 
+## Password timestamps & policies
+##
+attributetype ( 1.3.6.1.4.1.7165.2.1.3 NAME 'pwdLastSet'
+	DESC 'NT pwdLastSet'
+	EQUALITY integerMatch
+	SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )
+
+attributetype ( 1.3.6.1.4.1.7165.2.1.5 NAME 'logonTime'
+	DESC 'NT logonTime'
+	EQUALITY integerMatch
+	SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )
+
+attributetype ( 1.3.6.1.4.1.7165.2.1.6 NAME 'logoffTime'
+	DESC 'NT logoffTime'
+	EQUALITY integerMatch
+	SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )
+
+attributetype ( 1.3.6.1.4.1.7165.2.1.7 NAME 'kickoffTime'
+	DESC 'NT kickoffTime'
+	EQUALITY integerMatch
+	SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )
+
+attributetype ( 1.3.6.1.4.1.7165.2.1.8 NAME 'pwdCanChange'
+	DESC 'NT pwdCanChange'
+	EQUALITY integerMatch
+	SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )
+
+attributetype ( 1.3.6.1.4.1.7165.2.1.9 NAME 'pwdMustChange'
+	DESC 'NT pwdMustChange'
+	EQUALITY integerMatch
+	SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )
+
+##
+## string settings
+##
+attributetype ( 1.3.6.1.4.1.7165.2.1.10 NAME 'homeDrive'
+	DESC 'NT homeDrive'
+	EQUALITY caseIgnoreIA5Match
+	SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{4} SINGLE-VALUE )
+
+attributetype ( 1.3.6.1.4.1.7165.2.1.11 NAME 'scriptPath'
+	DESC 'NT scriptPath'
+	EQUALITY caseIgnoreIA5Match
+	SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{255} SINGLE-VALUE )
+
+attributetype ( 1.3.6.1.4.1.7165.2.1.12 NAME 'profilePath'
+	DESC 'NT profilePath'
+	EQUALITY caseIgnoreIA5Match
+	SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{255} SINGLE-VALUE )
+
+attributetype ( 1.3.6.1.4.1.7165.2.1.13 NAME 'userWorkstations'
+	DESC 'userWorkstations'
+	EQUALITY caseIgnoreIA5Match
+	SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{255} SINGLE-VALUE )
+
+attributetype ( 1.3.6.1.4.1.7165.2.1.17 NAME 'smbHome'
+	DESC 'smbHome'
+	EQUALITY caseIgnoreIA5Match
+	SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{128} )
+
+attributetype ( 1.3.6.1.4.1.7165.2.1.18 NAME 'domain'
+	DESC 'Windows NT domain to which the user belongs'
+	EQUALITY caseIgnoreIA5Match
+	SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{128} )
+
+##
+## user and group RID
+##
+attributetype ( 1.3.6.1.4.1.7165.2.1.14 NAME 'rid'
+	DESC 'NT rid'
+	EQUALITY integerMatch
+	SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )
+
+attributetype ( 1.3.6.1.4.1.7165.2.1.15 NAME 'primaryGroupID'
+	DESC 'NT Group RID'
+	EQUALITY integerMatch
+	SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )
+
+##
+## The smbPasswordEntry objectclass has been depreciated in favor of the
+## sambaAccount objectclass
+##
+#objectclass ( 1.3.1.5.1.4.1.7165.2.2.1 NAME 'smbPasswordEntry' SUP top AUXILIARY
+#        DESC 'Samba smbpasswd entry'
+#        MUST ( uid $ uidNumber )
+#        MAY  ( lmPassword $ ntPassword $ pwdLastSet $ acctFlags ))
+
+objectclass ( 1.3.1.5.1.4.1.7165.2.2.2 NAME 'sambaAccount' SUP top STRUCTURAL
+	DESC 'Samba Account'
+	MUST ( uid $ rid ) 
+	MAY  ( cn $ lmPassword $ ntPassword $ pwdLastSet $ logonTime $
+               logoffTime $ kickoffTime $ pwdCanChange $ pwdMustChange $ acctFlags $ 
+               displayName $ smbHome $ homeDrive $ scriptPath $ profilePath $
+               description $ userWorkstations $ primaryGroupID $ domain ))
+
+##
+## Used for Winbind experimentation
+##
+objectclass ( 1.3.1.5.1.4.1.7165.1.2.2.3 NAME 'uidPool' SUP top AUXILIARY
+	DESC 'Pool for allocating UNIX uids'
+	MUST ( uidNumber $ cn ) )
+
+objectclass ( 1.3.1.5.1.4.1.7165.1.2.2.4 NAME 'gidPool' SUP top AUXILIARY
+	DESC 'Pool for allocating UNIX gids'
+	MUST ( gidNumber $ cn ) )
+
diff --git a/debian-edu-config/ldap-schemas/samba.schema b/debian-edu-config/ldap-schemas/samba.schema
new file mode 100644
index 0000000..da7e62a
--- /dev/null
+++ b/debian-edu-config/ldap-schemas/samba.schema
@@ -0,0 +1,376 @@
+##
+## schema file for OpenLDAP 2.x
+## Schema for storing Samba user accounts and group maps in LDAP
+## OIDs are owned by the Samba Team
+##
+## Prerequisite schemas - uid         (cosine.schema)
+##                      - displayName (inetorgperson.schema)
+##                      - gidNumber   (nis.schema)
+##
+## 1.3.6.1.4.1.7165.2.1.x - attributetypes
+## 1.3.6.1.4.1.7165.2.2.x - objectclasses
+##
+
+########################################################################
+##                            HISTORICAL                              ##
+########################################################################
+
+##
+## Password hashes
+##
+#attributetype ( 1.3.6.1.4.1.7165.2.1.1 NAME 'lmPassword'
+#	DESC 'LanManager Passwd'
+#	EQUALITY caseIgnoreIA5Match
+#	SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{32} SINGLE-VALUE )
+
+#attributetype ( 1.3.6.1.4.1.7165.2.1.2 NAME 'ntPassword'
+#	DESC 'NT Passwd'
+#	EQUALITY caseIgnoreIA5Match
+#	SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{32} SINGLE-VALUE )
+
+##
+## Account flags in string format ([UWDX     ])
+##
+#attributetype ( 1.3.6.1.4.1.7165.2.1.4 NAME 'acctFlags'
+#	DESC 'Account Flags'
+#	EQUALITY caseIgnoreIA5Match
+#	SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{16} SINGLE-VALUE )
+
+##
+## Password timestamps & policies
+##
+#attributetype ( 1.3.6.1.4.1.7165.2.1.3 NAME 'pwdLastSet'
+#	DESC 'NT pwdLastSet'
+#	EQUALITY integerMatch
+#	SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )
+
+#attributetype ( 1.3.6.1.4.1.7165.2.1.5 NAME 'logonTime'
+#	DESC 'NT logonTime'
+#	EQUALITY integerMatch
+#	SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )
+
+#attributetype ( 1.3.6.1.4.1.7165.2.1.6 NAME 'logoffTime'
+#	DESC 'NT logoffTime'
+#	EQUALITY integerMatch
+#	SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )
+
+#attributetype ( 1.3.6.1.4.1.7165.2.1.7 NAME 'kickoffTime'
+#	DESC 'NT kickoffTime'
+#	EQUALITY integerMatch
+#	SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )
+
+#attributetype ( 1.3.6.1.4.1.7165.2.1.8 NAME 'pwdCanChange'
+#	DESC 'NT pwdCanChange'
+#	EQUALITY integerMatch
+#	SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )
+
+#attributetype ( 1.3.6.1.4.1.7165.2.1.9 NAME 'pwdMustChange'
+#	DESC 'NT pwdMustChange'
+#	EQUALITY integerMatch
+#	SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )
+
+##
+## string settings
+##
+#attributetype ( 1.3.6.1.4.1.7165.2.1.10 NAME 'homeDrive'
+#	DESC 'NT homeDrive'
+#	EQUALITY caseIgnoreIA5Match
+#	SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{4} SINGLE-VALUE )
+
+#attributetype ( 1.3.6.1.4.1.7165.2.1.11 NAME 'scriptPath'
+#	DESC 'NT scriptPath'
+#	EQUALITY caseIgnoreIA5Match
+#	SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{255} SINGLE-VALUE )
+
+#attributetype ( 1.3.6.1.4.1.7165.2.1.12 NAME 'profilePath'
+#	DESC 'NT profilePath'
+#	EQUALITY caseIgnoreIA5Match
+#	SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{255} SINGLE-VALUE )
+
+#attributetype ( 1.3.6.1.4.1.7165.2.1.13 NAME 'userWorkstations'
+#	DESC 'userWorkstations'
+#	EQUALITY caseIgnoreIA5Match
+#	SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{255} SINGLE-VALUE )
+
+#attributetype ( 1.3.6.1.4.1.7165.2.1.17 NAME 'smbHome'
+#	DESC 'smbHome'
+#	EQUALITY caseIgnoreIA5Match
+#	SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{128} )
+
+#attributetype ( 1.3.6.1.4.1.7165.2.1.18 NAME 'domain'
+#	DESC 'Windows NT domain to which the user belongs'
+#	EQUALITY caseIgnoreIA5Match
+#	SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{128} )
+
+##
+## user and group RID
+##
+#attributetype ( 1.3.6.1.4.1.7165.2.1.14 NAME 'rid'
+#	DESC 'NT rid'
+#	EQUALITY integerMatch
+#	SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )
+
+#attributetype ( 1.3.6.1.4.1.7165.2.1.15 NAME 'primaryGroupID'
+#	DESC 'NT Group RID'
+#	EQUALITY integerMatch
+#	SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )
+
+##
+## The smbPasswordEntry objectclass has been depreciated in favor of the
+## sambaAccount objectclass
+##
+#objectclass ( 1.3.6.1.4.1.7165.2.2.1 NAME 'smbPasswordEntry' SUP top AUXILIARY
+#        DESC 'Samba smbpasswd entry'
+#        MUST ( uid $ uidNumber )
+#        MAY  ( lmPassword $ ntPassword $ pwdLastSet $ acctFlags ))
+
+#objectclass ( 1.3.6.1.4.1.7165.2.2.2 NAME 'sambaAccount' SUP top STRUCTURAL
+#	DESC 'Samba Account'
+#	MUST ( uid $ rid )
+#	MAY  ( cn $ lmPassword $ ntPassword $ pwdLastSet $ logonTime $
+#               logoffTime $ kickoffTime $ pwdCanChange $ pwdMustChange $ acctFlags $
+#               displayName $ smbHome $ homeDrive $ scriptPath $ profilePath $
+#               description $ userWorkstations $ primaryGroupID $ domain ))
+
+#objectclass ( 1.3.6.1.4.1.7165.2.2.3 NAME 'sambaAccount' SUP top AUXILIARY
+#	DESC 'Samba Auxiliary Account'
+#	MUST ( uid $ rid )
+#	MAY  ( cn $ lmPassword $ ntPassword $ pwdLastSet $ logonTime $
+#              logoffTime $ kickoffTime $ pwdCanChange $ pwdMustChange $ acctFlags $
+#              displayName $ smbHome $ homeDrive $ scriptPath $ profilePath $
+#              description $ userWorkstations $ primaryGroupID $ domain ))
+
+########################################################################
+##                        END OF HISTORICAL                           ##
+########################################################################
+
+#######################################################################
+##                Attributes used by Samba 3.0 schema                ##
+#######################################################################
+
+##
+## Password hashes
+##
+attributetype ( 1.3.6.1.4.1.7165.2.1.24 NAME 'sambaLMPassword'
+	DESC 'LanManager Password'
+	EQUALITY caseIgnoreIA5Match
+	SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{32} SINGLE-VALUE )
+
+attributetype ( 1.3.6.1.4.1.7165.2.1.25 NAME 'sambaNTPassword'
+	DESC 'MD4 hash of the unicode password'
+	EQUALITY caseIgnoreIA5Match
+	SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{32} SINGLE-VALUE )
+
+##
+## Account flags in string format ([UWDX     ])
+##
+attributetype ( 1.3.6.1.4.1.7165.2.1.26 NAME 'sambaAcctFlags'
+	DESC 'Account Flags'
+	EQUALITY caseIgnoreIA5Match
+	SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{16} SINGLE-VALUE )
+
+##
+## Password timestamps & policies
+##
+attributetype ( 1.3.6.1.4.1.7165.2.1.27 NAME 'sambaPwdLastSet'
+	DESC 'Timestamp of the last password update'
+	EQUALITY integerMatch
+	SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )
+
+attributetype ( 1.3.6.1.4.1.7165.2.1.28 NAME 'sambaPwdCanChange'
+	DESC 'Timestamp of when the user is allowed to update the password'
+	EQUALITY integerMatch
+	SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )
+
+attributetype ( 1.3.6.1.4.1.7165.2.1.29 NAME 'sambaPwdMustChange'
+	DESC 'Timestamp of when the password will expire'
+	EQUALITY integerMatch
+	SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )
+
+attributetype ( 1.3.6.1.4.1.7165.2.1.30 NAME 'sambaLogonTime'
+	DESC 'Timestamp of last logon'
+	EQUALITY integerMatch
+	SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )
+
+attributetype ( 1.3.6.1.4.1.7165.2.1.31 NAME 'sambaLogoffTime'
+	DESC 'Timestamp of last logoff'
+	EQUALITY integerMatch
+	SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )
+
+attributetype ( 1.3.6.1.4.1.7165.2.1.32 NAME 'sambaKickoffTime'
+	DESC 'Timestamp of when the user will be logged off automatically'
+	EQUALITY integerMatch
+	SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )
+
+attributetype ( 1.3.6.1.4.1.7165.2.1.48 NAME 'sambaBadPasswordCount'
+	DESC 'Bad password attempt count'
+	EQUALITY integerMatch
+	SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )
+
+attributetype ( 1.3.6.1.4.1.7165.2.1.49 NAME 'sambaBadPasswordTime'
+	DESC 'Time of the last bad password attempt'
+	EQUALITY integerMatch
+	SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )
+
+attributetype ( 1.3.6.1.4.1.7165.2.1.55 NAME 'sambaLogonHours'
+	DESC 'Logon Hours'
+	EQUALITY caseIgnoreIA5Match
+	SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{42} SINGLE-VALUE )
+
+##
+## string settings
+##
+attributetype ( 1.3.6.1.4.1.7165.2.1.33 NAME 'sambaHomeDrive'
+	DESC 'Driver letter of home directory mapping'
+	EQUALITY caseIgnoreIA5Match
+	SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{4} SINGLE-VALUE )
+
+attributetype ( 1.3.6.1.4.1.7165.2.1.34 NAME 'sambaLogonScript'
+	DESC 'Logon script path'
+	EQUALITY caseIgnoreMatch
+	SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{255} SINGLE-VALUE )
+
+attributetype ( 1.3.6.1.4.1.7165.2.1.35 NAME 'sambaProfilePath'
+	DESC 'Roaming profile path'
+	EQUALITY caseIgnoreMatch
+	SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{255} SINGLE-VALUE )
+
+attributetype ( 1.3.6.1.4.1.7165.2.1.36 NAME 'sambaUserWorkstations'
+	DESC 'List of user workstations the user is allowed to logon to'
+	EQUALITY caseIgnoreMatch
+	SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{255} SINGLE-VALUE )
+
+attributetype ( 1.3.6.1.4.1.7165.2.1.37 NAME 'sambaHomePath'
+	DESC 'Home directory UNC path'
+	EQUALITY caseIgnoreMatch
+	SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{128} )
+
+attributetype ( 1.3.6.1.4.1.7165.2.1.38 NAME 'sambaDomainName'
+	DESC 'Windows NT domain to which the user belongs'
+	EQUALITY caseIgnoreMatch
+	SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{128} )
+
+attributetype ( 1.3.6.1.4.1.7165.2.1.47 NAME 'sambaMungedDial'
+	DESC ''
+	EQUALITY caseExactMatch
+	SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{1050} )
+
+attributetype ( 1.3.6.1.4.1.7165.2.1.50 NAME 'sambaPasswordHistory'
+	DESC 'Concatenated MD4 hashes of the unicode passwords used on this account'
+	EQUALITY caseIgnoreIA5Match
+	SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{32} )
+
+##
+## SID, of any type
+##
+
+attributetype ( 1.3.6.1.4.1.7165.2.1.20 NAME 'sambaSID'
+	DESC 'Security ID'
+	EQUALITY caseIgnoreIA5Match
+	SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{64} SINGLE-VALUE )
+
+
+##
+## Primary group SID, compatible with ntSid
+##
+
+attributetype ( 1.3.6.1.4.1.7165.2.1.23 NAME 'sambaPrimaryGroupSID'
+	DESC 'Primary Group Security ID'
+	EQUALITY caseIgnoreIA5Match
+	SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{64} SINGLE-VALUE )
+
+attributetype ( 1.3.6.1.4.1.7165.2.1.51 NAME 'sambaSIDList'
+	DESC 'Security ID List'
+	EQUALITY caseIgnoreIA5Match
+	SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{64} )
+
+##
+## group mapping attributes
+##
+attributetype ( 1.3.6.1.4.1.7165.2.1.19 NAME 'sambaGroupType'
+	DESC 'NT Group Type'
+	EQUALITY integerMatch
+	SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )
+
+##
+## Store info on the domain
+##
+
+attributetype ( 1.3.6.1.4.1.7165.2.1.21 NAME 'sambaNextUserRid'
+	DESC 'Next NT rid to give our for users'
+	EQUALITY integerMatch
+	SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )
+
+attributetype ( 1.3.6.1.4.1.7165.2.1.22 NAME 'sambaNextGroupRid'
+	DESC 'Next NT rid to give out for groups'
+	EQUALITY integerMatch
+	SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )
+
+attributetype ( 1.3.6.1.4.1.7165.2.1.39 NAME 'sambaNextRid'
+	DESC 'Next NT rid to give out for anything'
+	EQUALITY integerMatch
+	SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )
+
+attributetype ( 1.3.6.1.4.1.7165.2.1.40 NAME 'sambaAlgorithmicRidBase'
+	DESC 'Base at which the samba RID generation algorithm should operate'
+	EQUALITY integerMatch
+	SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 SINGLE-VALUE )
+
+
+#######################################################################
+##              objectClasses used by Samba 3.0 schema               ##
+#######################################################################
+
+## The X.500 data model (and therefore LDAPv3) says that each entry can
+## only have one structural objectclass.  OpenLDAP 2.0 does not enforce
+## this currently but will in v2.1
+
+##
+## added new objectclass (and OID) for 3.0 to help us deal with backwards
+## compatibility with 2.2 installations (e.g. ldapsam_compat)  --jerry
+##
+objectclass ( 1.3.6.1.4.1.7165.2.2.6 NAME 'sambaSamAccount' SUP top AUXILIARY
+	DESC 'Samba 3.0 Auxilary SAM Account'
+	MUST ( uid $ sambaSID )
+	MAY  ( cn $ sambaLMPassword $ sambaNTPassword $ sambaPwdLastSet $
+	       sambaLogonTime $ sambaLogoffTime $ sambaKickoffTime $
+	       sambaPwdCanChange $ sambaPwdMustChange $ sambaAcctFlags $
+               displayName $ sambaHomePath $ sambaHomeDrive $ sambaLogonScript $
+	       sambaProfilePath $ description $ sambaUserWorkstations $
+	       sambaPrimaryGroupSID $ sambaDomainName $ sambaMungedDial $
+	       sambaBadPasswordCount $ sambaBadPasswordTime $
+	       sambaPasswordHistory $ sambaLogonHours))
+
+##
+## Group mapping info
+##
+objectclass ( 1.3.6.1.4.1.7165.2.2.4 NAME 'sambaGroupMapping' SUP top AUXILIARY
+	DESC 'Samba Group Mapping'
+	MUST ( gidNumber $ sambaSID $ sambaGroupType )
+	MAY  ( displayName $ description $ sambaSIDList ))
+
+##
+## Whole-of-domain info
+##
+objectclass ( 1.3.6.1.4.1.7165.2.2.5 NAME 'sambaDomain' SUP top STRUCTURAL
+	DESC 'Samba Domain Information'
+	MUST ( sambaDomainName $ 
+	       sambaSID ) 
+	MAY ( sambaNextRid $ sambaNextGroupRid $ sambaNextUserRid $
+	      sambaAlgorithmicRidBase ) )
+
+## used for idmap_ldap module
+objectclass ( 1.3.6.1.4.1.7165.2.2.7 NAME 'sambaUnixIdPool' SUP top AUXILIARY
+        DESC 'Pool for allocating UNIX uids/gids'
+        MUST ( uidNumber $ gidNumber ) )
+
+
+objectclass ( 1.3.6.1.4.1.7165.2.2.8 NAME 'sambaIdmapEntry' SUP top AUXILIARY
+        DESC 'Mapping from a SID to an ID'
+        MUST ( sambaSID )
+	MAY ( uidNumber $ gidNumber ) )
+
+objectclass ( 1.3.6.1.4.1.7165.2.2.9 NAME 'sambaSidEntry' SUP top STRUCTURAL
+        DESC 'Structural Class for a SID'
+        MUST ( sambaSID ) )
+
diff --git a/debian-edu-config/ldap-tools/barbarossa/README b/debian-edu-config/ldap-tools/barbarossa/README
new file mode 100644
index 0000000..fceac80
--- /dev/null
+++ b/debian-edu-config/ldap-tools/barbarossa/README
@@ -0,0 +1,36 @@
+###############################################################################
+#            Readme for passwd2ldap, makeldif and makesmbAcc                  #
+###############################################################################
+#                                                                             #
+# Maximilian Wilhelm <max at skolelinux.de>                                      #
+#                                                                             #
+# Last Changed: Sun, 24 Aug 2003 19:26:11 +0200                               #
+#                                                                             #
+###############################################################################
+
+* About
+
+  These scrips allow to migrate users from existing passwd, shadow and 
+  smbpasswd files to skolelinux ldap database.
+
+  The sciptset is still considered as beta!
+
+  
+* How does this scriptset work?
+
+  * Edit each script and set the path to the following files:
+    - passwd
+    - shadow
+    - smbpasswd
+  * It might be a good idea to "censor" your passwd file, so that only user
+    which should get an account in the LDAP DB are listed in that file.
+  * If you do not want to enter the LDAP-Admin password for every user created,
+    change the calls to "ldapadd" and "ldapmodify" in makeldif and makesmbAcc
+    and exchange the option "-W" by "-w <password>", *but* still remind, that
+    the clear text password is shown in the output of "ps".
+  * Execute passwd2ldap
+  * Be happy
+
+
+* Known Bugs
+  none :-)
diff --git a/debian-edu-config/ldap-tools/barbarossa/group2ldif b/debian-edu-config/ldap-tools/barbarossa/group2ldif
new file mode 100755
index 0000000..7337c3b
--- /dev/null
+++ b/debian-edu-config/ldap-tools/barbarossa/group2ldif
@@ -0,0 +1,130 @@
+#!/bin/bash
+#
+# Convert unix group file to LDIF
+#
+# Maximilian Wilhelm <debian-edu at rfc3514>
+#  -- Mon, 16 Aug 2004 17:55:40 +0200
+#
+
+
+#
+# Variables
+#
+
+# User maintaned Variables
+GROUPBASE="ou=Group,dc=skole,dc=skolelinux,dc=no"
+
+
+# Script maintaned
+GROUPFILE=""
+LDIFOUT=""
+EMPTYGROUPS=""
+TMPFILE="/tmp/group2ldif.$$.tmp"
+
+
+#
+# Some fency functions
+#
+
+#
+# How I want to be used.
+usage()
+{
+	echo "Usage: $0 -g <groupfile> [ -lo <ldif output> ] [ --include-empty-groups ] [ -h | -help ]"
+	exit 1
+}
+
+#
+# Simple group file validation
+checkgroup()
+{
+	if [ ! -s $GROUPFILE -a ! -r $GROUPFILE ]; then
+		echo "File \"${GROUPFILE}\" does not exist or is not readable" >&2
+		exit 1
+	elif [ `grep -c '[a-z]\+:[[:space:]x*]:[0-9]\+:.*' ${GROUPFILE}` -lt 1 ]; then
+		echo "File \"${GROUPFILE}\� seems not to be a valid group file." >&2
+		exit 1
+	fi
+}
+
+ldifgen()
+{
+while read line;
+do
+	group=`echo ${line} | cut -d: -f1`
+	gid=`echo ${line} | cut -d: -f3`
+	users=`echo ${line} | cut -d: -f4`
+
+	if [ "${EMPTYGROUPS}" == "yes" -o "${users}" ]; then
+	 # Group not empty, convert it.
+
+		# Group header
+		cat << EOF >> ${TMPFILE}
+
+dn: cn=${group},${GROUPBASE}
+objectClass: posixGroup
+objectClass: top
+cn: ${group}
+gidNumber: ${gid}
+EOF
+
+		# users
+		echo ${users} | tr ',' '\n' | while read user;
+		do
+			echo "memberUid: ${user}" >> ${TMPFILE}
+		done
+	else
+	 # Group is empty, don't convert
+		echo "Group ${group} is empty, not converted" >&2
+
+	fi
+
+done < ${GROUPFILE}
+
+
+}
+
+#
+# What to do with the output?
+output()
+{
+	if [ "${LDIFOUT}" ]; then
+		cp ${TMPFILE} ${LDIFOUT};
+	else
+		cat ${TMPFILE}
+	fi
+}
+
+
+
+#
+# Let the show begin
+#
+
+
+# What to do?
+[ $# == 0 ] && usage >&2
+
+while [ $# -gt 0 ]; do
+    case "$1" in
+        -g)			GROUPFILE="$2" ;;
+        -lo)			LDIFOUT="$2" ;;
+        --include-empty-groups)	EMPTYGROUPS="yes" ;;
+        -help|-h)		usage ;;
+    esac
+    shift
+done
+
+[ -z ${GROUPFILE} ] && usage>&2
+
+# Valid file?
+checkgroup
+
+# OK, let's convert it
+ldifgen
+
+# Tell the world
+output
+
+# remove tmpfile
+rm ${TMPFILE}
diff --git a/debian-edu-config/ldap-tools/barbarossa/makeldif b/debian-edu-config/ldap-tools/barbarossa/makeldif
new file mode 100755
index 0000000..3cf1451
--- /dev/null
+++ b/debian-edu-config/ldap-tools/barbarossa/makeldif
@@ -0,0 +1,71 @@
+#!/bin/sh
+################################################################################
+#                                  makeldif                                    #
+################################################################################
+#
+# Maximilian Wilhelm <max at skolelinux.de>
+# Frank Matthiess <frankm at skolelinux.de>
+#
+# Last changed Sun, 24 Aug 2003 19:23:42 +0200
+#
+
+# specify path to shadow file
+SHADOWPATH=""
+
+################################################################################
+
+# make sure, we have enough data
+if [ $# -ne 3 ]; then
+	echo "Usage: $0 [UID] [account name] [real name]";
+	exit 1;
+fi
+
+# make sure we have a shadow file and it exists
+if [ -z ${SHADOWPATH} ]; then
+	echo "Specify path to your shadow file in $0."
+	exit 1;
+fi
+
+# make sure the user is listed in the shadow file
+if [ -z $( cat ${SHADOWPATH} | cut -d: -f1 |  grep $2 ) ]; then
+	echo "Error: user $2 not listed in ${SHADOWPATH}";
+	exit 1;
+fi
+
+
+
+# temporary variables
+USERID=$1;
+USERNAME=$2;
+REALNAME=$(echo $3 | sed -e 's/"//g');
+USNAME=$(echo ${REALNAME}| cut -f$(echo $USERNAME | wc -w) -d " ");
+
+#
+# Generate LDIF entry for user and personal group
+#
+
+cat << EOF | ldapadd -x -h localhost -W -D cn=admin,ou=People,dc=skole,dc=skolelinux,dc=no
+
+dn: uid=${USERNAME},ou=People,dc=skole,dc=skolelinux,dc=no
+objectClass: posixAccount
+objectClass: imapUser
+cn: ${REALNAME}
+uid: ${USERNAME}
+uidNumber: ${USERID}
+gidNumber: ${USERID}
+homeDirectory: /skole/tjener/home0/${USERNAME}
+mailMessageStore: /var/lib/maildirs/${USERNAME}
+loginShell: /bin/bash
+userPassword: {crypt}$(grep ${USERNAME} ${SHADOWPATH} | cut -d: -f2 )
+
+dn: cn=${USERNAME},ou=Group,dc=skole,dc=skolelinux,dc=no
+objectClass: top
+objectClass: posixGroup
+objectClass: lisGroup
+groupType: private
+description: dontcare
+cn: ${USERNAME}
+gidNumber: ${USERID}
+
+EOF
+
diff --git a/debian-edu-config/ldap-tools/barbarossa/makesmbAcc b/debian-edu-config/ldap-tools/barbarossa/makesmbAcc
new file mode 100755
index 0000000..518a31f
--- /dev/null
+++ b/debian-edu-config/ldap-tools/barbarossa/makesmbAcc
@@ -0,0 +1,41 @@
+#!/bin/sh
+################################################################################
+#                                  makesmbAcc                                  #
+################################################################################
+#
+# Maximilian Wilhelm <max at skolelinux.de>
+#
+# Last changed Sun, 24 Aug 2003 19:25:23 +0200
+#
+
+# specify path to smbpasswd file
+SMBPWD=""
+
+################################################################################
+
+if [ -z ${SMBPWD} ]; then
+	echo "Specify the path to your smbpasswd file in $0."
+	exit 1;
+fi
+
+if [ -z "$( grep $1 ${SMBPWD} )" ]; then
+	echo "Error: User not listed in ${SMBPWD}."
+	exit 1;
+fi
+
+# temporary variables
+USERID=$1
+LMPW=$(grep $USERID $SMBPWD | cut -d: -f3 )
+NTPW=$(grep $USERID $SMBPWD | cut -d: -f4 )
+
+
+# creata a samba account and set dummy password
+smbpasswd -a $USERID foo
+
+
+# Reset samba passwords to given hashes
+cat << EOF | ldapmodify -x -h localhost -W -D cn=admin,ou=people,dc=skole,dc=skolelinux,dc=no
+dn: uid=${USERID},ou=People,dc=skole,dc=skolelinux,dc=no
+sambaNTPassword: $NTPW
+sambaLMPassword: $LMPW
+EOF
diff --git a/debian-edu-config/ldap-tools/barbarossa/passwd2ldif b/debian-edu-config/ldap-tools/barbarossa/passwd2ldif
new file mode 100755
index 0000000..ae4b3d8
--- /dev/null
+++ b/debian-edu-config/ldap-tools/barbarossa/passwd2ldif
@@ -0,0 +1,29 @@
+#!/bin/sh
+################################################################################
+#                                passwd2ldap                                   #
+################################################################################
+#
+# Maximilian Wilhelm <max at skolelinux.de>
+# Frank Matthiess <frankm at skolelinux.de>
+#
+# Last changed: Sun, 24 Aug 2003 19:55:05 +0200
+#
+
+# Path to passwd file
+PASSWDPATH=""
+
+################################################################################
+
+if [ -z $PASSWDPATH ]; then
+	echo "Specify the path to your passwd file.";
+	exit 1;
+fi
+
+cat ${PASSWDPATH} | while read LINE;
+do
+	UID=$(echo ${LINE} | cut -d: -f3 );
+	UNAME=$(echo ${LINE} | cut -f1 -d:);
+	REALNAME="$(echo ${LINE} | cut -f5 -d: | cut -d, -f1 )";
+	./makeldif ${UID} ${UNAME} "${REALNAME}";
+	./makesmbAcc ${UNAME};
+done;
diff --git a/debian-edu-config/ldap-tools/csvparser b/debian-edu-config/ldap-tools/csvparser
new file mode 100755
index 0000000..9eeaf35
--- /dev/null
+++ b/debian-edu-config/ldap-tools/csvparser
@@ -0,0 +1,177 @@
+#!/usr/bin/perl -w
+#
+# Author: Rune Nordb�e Skillingstad <runesk at linpro.no>
+#
+# $Id: csvparser,v 1.1 2004/01/17 17:40:29 pere Exp $
+
+use strict;
+
+use Text::Unaccent;
+use Net::LDAP;
+use Data::Dumper;
+use Unicode::String qw (utf8 latin1);
+
+# This is not working right :)
+my $ldapserver   = "localhost";
+my $basedn       = "o=stfk,c=no";
+my $ldapadmindn  = "cn=admin,o=stfk,c=no";
+my $ldappassword = "foofoo";
+my $maildomain   = "elev.stfk.no";
+my $maildir      = "/var/mail/Maildir/";
+my $homedir      = "/var/mail/Maildir/";
+
+my %usernames;
+
+srand (time ^ $$ ^ unpack "%L*", `/bin/ps axww | /bin/gzip`);
+
+my $ldap = Net::LDAP->new($ldapserver, version => 3) or die "$@";
+$ldap->bind($ldapadmindn, password => $ldappassword);
+
+sub genusername {
+    my($fname, $lname, $mname) = @_;
+    my $i = 2;
+    my $j = 1;
+
+    # This wont work for � and � unless you use the UnicodeData-patch
+    $fname = lc(unac_string("LATIN1", $fname));
+    $lname = lc(unac_string("LATIN1", $lname));
+    if($mname) {
+	$mname =~ s/ /\./;
+	$mname = lc(unac_string("LATIN1", $mname));
+    }
+    my $username = $fname.".".$lname;
+    while($usernames{$username}) {
+	if(!$mname) {
+	    $username = $fname.$i++.".".$lname;
+	} else {
+	    if(length($mname) < $j) {
+		$username = $fname.$i++.".".$mname.".".$lname;
+	    } else {
+		$username = $fname.".".substr($mname, 0, $j++).".".$lname;
+	    }
+	}
+    }
+    $usernames{$username} = 1;
+    return $username;
+
+}
+
+sub loadusernames {
+    my $mesg = $ldap->search(base   => "ou=People,domain=$maildomain,ou=Domains,".$basedn,
+			     filter => "objectclass=mailaccount",
+			     scope  => "one",
+			     attrs   => ['uid']
+			     );
+    $mesg->code && die $mesg->error;
+    my @allentries = $mesg->all_entries;
+    foreach my $entry (@allentries){
+	my $uid = $entry->get_value('uid');
+	$uid =~ s,/+$,,;
+	$usernames{"$uid"} = "1";
+    }
+}
+
+sub next_char {
+    my $password = lc(shift(@_));
+    my $vowels = "aeiouy";
+    my $consonants = "bdfghjklmnoprstuv";
+    my $doubles = "bdfgjklmnopst";
+    my $range;
+    my $n = 0;
+    if(!$password) {
+	$range = $vowels . $consonants;
+    } elsif($password =~ /[$vowels]$/) {
+	$range = $consonants;
+    } elsif($password =~ /[$consonants]{2}$/) {
+	$range = $vowels;
+    } elsif($password =~ /[$consonants]$/) {
+	if($password =~ /(\s)(\s)$/) {
+	    if ($1 = $2) {
+		$range = $vowels;
+	    } else {
+		$range = $vowels.$doubles;
+	    }
+	} else {
+	    $range = $vowels.$doubles;
+	}
+    } else {
+	$range = $vowels.$consonants;
+    }
+#    $range = "123456789" if(!int(rand(20)));
+    my $char = substr($range, rand(length($range)), 1);
+    $char = uc($char) unless rand(10) % 9;
+    return $char;
+}
+	
+
+sub genpasswd {
+    my $password;
+    my $min = 6;
+    my $max = 8;
+    my $length = $min + int(rand($max - $min + 1));
+    for(my $i = 0; $i < $length; $i++) {
+	$password .= &next_char($password);
+    }
+    return $password;
+} 
+
+sub output {
+    my ($username, $fullname, $password, @rest) = @_;
+    &adduser($ldap, $username, $fullname, $password, 
+	     $maildomain, $maildir, $homedir);
+    print STDOUT "$maildomain;$username;$fullname;$password;" . 
+      join(";", at rest) . "\n";
+}
+
+sub adduser {
+    my ($ldap, $username, $fullname, $passwd, $domain, $maildir, $homedir) = @_;
+    if ($maildir !~ /\/$/) {
+        $maildir .= "/";
+    }
+    
+    if ($homedir !~ /\/$/) {
+        $homedir .= "/";
+    }
+	
+    my %data = (
+		attrs => [
+                          'uid'   => $username,
+                          'cn' => latin1($fullname)->utf8,
+                          'domain' => $domain,
+                          'homeDirectory' => $homedir . $domain ."/".$username."/",
+                          'mailDir' => $maildir . $domain ."/".$username."/",
+                          'mail' => $username . '@' . $domain,
+                          'mailAddr' => $username . '@' . $domain,
+                          'userPassword' => $passwd, 
+                          'objectclass' => ['mailaccount','limacuteConfig'],]);
+    
+    my $dn = "uid=$username,ou=People,domain=$domain,ou=Domains,$basedn";
+    
+    $ldap->add($dn, %data);
+}
+    
+if($#ARGV < 0) {
+    print STDERR "Usage: $0 <infile>\n";
+    exit;
+}
+
+&loadusernames;
+
+open(IN, "<$ARGV[0]") || die "Can't open infile $ARGV[0]";
+
+while(<IN>) {
+    chomp;
+    my ($tname, $lname, @rest) = split(";");
+    # This might be cleaner
+    my ($fname, @mname) = split(" ", $tname);
+    $lname =~ s/ /\./g;
+    my $mname = join(" ", @mname);
+    my $username = &genusername($fname, $lname, $mname);
+    my $password = &genpasswd;
+    if($mname) {
+	&output($username, "$fname $mname $lname", $password, @rest);
+    } else {
+	&output($username, "$fname $lname", $password, @rest);
+    }
+}
+close(IN);
diff --git a/debian-edu-config/ldap-tools/ldap-debian-edu-install b/debian-edu-config/ldap-tools/ldap-debian-edu-install
new file mode 100755
index 0000000..8e84559
--- /dev/null
+++ b/debian-edu-config/ldap-tools/ldap-debian-edu-install
@@ -0,0 +1,141 @@
+#!/bin/bash
+
+
+
+# Some easy means to start/stop the mail spool
+if [ -x /etc/init.d/exim ] ; then 
+  MTAINIT=/etc/init.d/exim
+elif [ -x /etc/init.d/exim4 ] ; then 
+  MTAINIT=/etc/init.d/exim4
+else
+  echo "Unknown MTA, exiting..." 
+  exit 9
+fi
+
+
+copy_example_DB_CONFIG() {
+#function to set a DB_CONFIG, ripped from slapd.postinst
+# Copy an example DB_CONFIG file
+# copy_example_DB_CONFIG <directory>
+        local directory srcdir
+
+        directory="$1"
+        srcdir="/usr/share/slapd"
+
+        if ! [ -f "${directory}/DB_CONFIG" ] && [ -d "$directory" ]; then
+                cp $srcdir/DB_CONFIG "${directory}/DB_CONFIG"
+        fi
+}
+
+
+# Init tree
+init_ldap () {
+  rm -f /var/lib/ldap/*
+  copy_example_DB_CONFIG /var/lib/ldap
+
+
+    if [ -f /etc/shadow ]
+    then 
+	PW=`cat /etc/shadow | \
+		 grep ^root | \
+		 cut -d':' -f2`
+    else
+	PW=`cat /etc/passwd | \
+		 grep ^root | \
+		 cut -d':' -f2`
+    fi
+
+  for ldif in \
+    /etc/ldap/root.ldif \
+    /etc/ldap/netgroup.ldif \
+    /etc/ldap/autofs.ldif
+  do
+    sed -e "s:\$ROOTPW:$PW:" < $ldif | /usr/sbin/slapadd 
+
+    if [ ! $? ]
+      then
+	echo "error: Unable to load $ldif"
+	exit 1
+    fi
+  done
+}
+
+set -e
+
+# Create ldap-tree on the initial install
+$MTAINIT stop
+/etc/init.d/slapd stop
+
+# Make sure slapd is really stopped
+SLAPPIDS=$(pidof slapd || /bin/true)
+if [ "$SLAPPIDS" ] ; then 
+  echo -n "Warning: slapd is still running, trying to TERM it"
+  for SLAPPID in $SLAPPIDS ; do 
+    kill $SLAPPID || /bin/true
+  done
+fi
+
+# Not sure why, but it seem like slapd takes some time to shut down 
+LOOP=0
+while [ $LOOP -lt 10 ] ; do 
+  SLAPPIDS=$(pidof slapd || /bin/true)
+  if [ "$SLAPPIDS" ] ; then 
+    let LOOP=($LOOP + 1)
+    sleep 1
+    echo -n "."
+  else
+    LOOP=10
+  fi
+done
+echo  
+if [ "$SLAPPIDS" ] ; then 
+  echo -n "Error: slapd is still running, I'll KILL it"
+  for SLAPPID in $SLAPPIDS ; do 
+    kill -9 $SLAPPID || /bin/true
+  done
+fi
+
+# Not sure why, but it seem like slapd takes some time to shut down 
+LOOP=0
+while [ $LOOP -lt 10 ] ; do 
+  SLAPPIDS=$(pidof slapd || /bin/true)
+  if [ "$SLAPPIDS" ] ; then 
+    let LOOP=($LOOP + 1)
+    sleep 1
+    echo -n "."
+  else
+    LOOP=10
+  fi
+done
+echo 
+if [ "$SLAPPIDS" ] ; then 
+  echo "Error: Critical: slapd is still running, I'm giving up"
+  exit 9
+fi
+
+if slapcat \
+  |grep 'dn: cn=all-hosts,ou=Netgroup,dc=skole,dc=skolelinux,dc=no' \
+  >/dev/null 2>&1
+then
+  echo "Found existing data: skiping initalization"
+else
+  init_ldap
+
+  #in etch the database must be owned by openldap
+  if getent passwd openldap | grep  -q openldap ; then
+     chown -R  openldap:openldap /var/lib/ldap
+  fi
+  # Add the samba-admin user
+  # Dont try if you dont have the samba restart script
+  [ -x /etc/init.d/samba ] && /usr/bin/samba-debian-edu-admin
+fi
+
+# Restart ldap server if it aint already running 
+# (samba-debian-edu-admin also tries to start slapd)
+SLAPPIDS=$(pidof slapd || /bin/true)
+if [ -z "$SLAPPIDS" ] ; then 
+  /etc/init.d/slapd start
+fi
+
+chown mail.mail /var/lib/maildirs/
+$MTAINIT start
diff --git a/debian-edu-config/ldap-tools/ldap-upgrade-db-fix b/debian-edu-config/ldap-tools/ldap-upgrade-db-fix
new file mode 100755
index 0000000..6fda601
--- /dev/null
+++ b/debian-edu-config/ldap-tools/ldap-upgrade-db-fix
@@ -0,0 +1,43 @@
+#!/bin/bash
+
+slapcat | \
+  while read LINE ; do 
+    case "$LINE" in 
+      dn:*) 
+        POSACC= 
+        POSUSER=
+        IMAP= 
+        DN="$LINE" ;; 
+      objectClass:*posixAccount)
+        POSACC=OK;;
+      objectClass:*imapUser) IMAP=OK ;;
+      uid:*) 
+        if [ -n "$POSACC" ] ; then 
+          POSUSER=$(echo $LINE | awk '{print $2}') 
+        fi ;;
+      cn:*) 
+        CN="$LINE" ;;
+      *) 
+        if [ -n "$LINE" -o -z "$CN" ] ; then 
+          continue ; 
+        fi
+        echo "$DN"
+        echo "changetype: modify"
+        echo "replace: cn"
+        echo "$CN"
+        if [ -n "$POSACC" -a -z "$IMAP" -a -n "$POSUSER" ] ; then 
+          echo "-"
+          echo "add: objectClass"
+          echo "objectClass: imapUser"
+          echo "-"
+          echo "add: mailMessageStore"
+          echo "mailMessageStore: /var/lib/maildirs/$POSUSER"
+        fi 
+        echo ""
+        ;; 
+    esac 
+  done | \
+    ldapmodify -x -P 3 -r -W \
+      -D "cn=admin,ou=People,dc=skole,dc=skolelinux,dc=no"
+
+
diff --git a/debian-edu-config/ldap-tools/ldap2netgroup b/debian-edu-config/ldap-tools/ldap2netgroup
new file mode 100755
index 0000000..c13d576
--- /dev/null
+++ b/debian-edu-config/ldap-tools/ldap2netgroup
@@ -0,0 +1,44 @@
+#!/usr/bin/perl
+#
+# Tool to export netgroups from LDAP to /etc/netgroup format.
+#
+# TODO:
+#  - wrap long groups
+
+use strict;
+use warnings;
+use Net::LDAP;
+
+use vars qw($ldaphost $base $debug);
+
+$debug = 0;
+
+$ldaphost = 'ldap'                                     || $ARGV[0];
+$base     = 'ou=Netgroup,dc=skole,dc=skolelinux,dc=no' || $ARGV[1];
+
+my $ldap = new Net::LDAP($ldaphost) || die "Unable to connect to LDAP host '$ldaphost'";
+
+my $mesg = $ldap->bind ; # as anonymous
+	    
+die("Unable to bind anonymously: $mesg->error") unless ( 0 == $mesg->code );
+
+$mesg = $ldap->search(
+                      base   => $base,
+                      filter => '(objectClass=nisNetgroup)'
+                      );
+
+$mesg->code && die $mesg->error;
+
+foreach my $entry ($mesg->all_entries) {
+    my $name    = $entry->get_value("cn");
+    my @triples = $entry->get_attribute("nisNetgroupTriple");
+
+    print "$name";
+    for my $val (@triples) {
+	print " $val";
+    }
+    print "\n";
+    $entry->dump if $debug;
+}
+
+$ldap->unbind;   # take down session
diff --git a/debian-edu-config/ldap-tools/ldappasswd2 b/debian-edu-config/ldap-tools/ldappasswd2
new file mode 100755
index 0000000..54fb6ff
--- /dev/null
+++ b/debian-edu-config/ldap-tools/ldappasswd2
@@ -0,0 +1,40 @@
+#!/usr/bin/perl
+#
+# Tool to set a new admin password in LDAP.  Written by Torstein
+# Svendsen.
+#
+# If the LDAP admin password is lost, use rootdn and rootpw in
+# /etc/ldap/slapd.conf to get an override password able to set a new
+# password.
+#
+# Check out ldappasswd from ldap-utils to see if it can replace this
+# program.
+
+use strict;
+use warnings;
+use Net::LDAP;
+
+use vars qw($dn $password $md4password $ldaphost);
+
+$ldaphost    = 'ldap';
+$dn          = 'cn=admin,ou=People,dc=skole,dc=skolelinux,dc=no';
+$password    = 'secret'; # Current passord in clear text
+$md5password = '$1$ubzu8/wx$KuUO3OtpjbXu74d67vqyI/'; # new password hash
+
+my $ldap = new Net::LDAP($ldaphost);
+
+my $mesg = $ldap->bind(
+                       'dn' => $dn,
+                       'password' => $password
+                       );
+            
+die("Wrong password!") unless ( 0 == $mesg->code );
+
+my $md5 = '{crypt}'. $md5password;
+
+$ldap->modify(
+              $dn,
+              'replace' => {
+                  'userPassword' => $md5,
+              }
+              );
diff --git a/debian-edu-config/ldap-tools/mkslapdcert b/debian-edu-config/ldap-tools/mkslapdcert
new file mode 100755
index 0000000..3f2655d
--- /dev/null
+++ b/debian-edu-config/ldap-tools/mkslapdcert
@@ -0,0 +1,44 @@
+#!/bin/sh
+#
+# Author: Rune Nordb�e Skillingstad <rune at skillingtad.no>
+# Date: 2003-02-12
+#
+# Create a TLS certificate for slapd. To change default settings,
+# edit /etc/ldap/ssl/slapd-cert.cnf
+#
+# $Id$
+
+
+opensslbin=/usr/bin/openssl
+
+certconf=/etc/ldap/ssl/slapd-cert.cnf
+privkey=/etc/ldap/ssl/slapd.pem
+pubkey=/var/www/ldap-server-pubkey.pem
+
+test -x $opensslbin || (echo "error: can't fint openssl."; exit 1)
+
+if [ ! -f $certconf ] ; then
+    echo "error: missing certificate configuration file $certconf."
+fi
+
+chmod 750 /etc/ldap/ssl
+
+if [ -f $privkey ] ; then
+    echo "error: private key $privkey already exist.  Exiting."
+    exit 1;
+fi
+
+$opensslbin req -new -x509 -nodes \
+      -config $certconf -out $privkey -keyout $privkey > /dev/null 2>&1 \
+  || echo "error: problems running openssl."
+
+openssl x509 -inform pem -in $privkey -pubkey -noout > $pubkey \
+  || echo "error: problems running openssl."
+
+# Make sure the private key is only readable by root
+chmod 600 $privkey
+
+# And make the public key readable by all.  This is stored in a directory
+# available for download using HTTP, to allow it to be copied to
+# all LDAP PAM client.
+chmod 644 $pubkey
diff --git a/debian-edu-config/ldap-tools/novell-openldap b/debian-edu-config/ldap-tools/novell-openldap
new file mode 100755
index 0000000..b438224
--- /dev/null
+++ b/debian-edu-config/ldap-tools/novell-openldap
@@ -0,0 +1,198 @@
+#!/usr/bin/perl -W
+use strict;
+# 
+# Author: Harald Inge Boerseth <haraldib at broadpark.no>
+# 
+# This script is written to enter users into the
+# LDAP DB from users defined in a LDIF file. 
+# In this case the LDIF file is generated from a Novel 6.0 
+# authentication server. An example of what an LDIF entry looks 
+# like in this case can be seen at the end of the script. 
+# It should be a simple task to adapt the script to other LDIF files.
+#
+# Note that the script corrects some sequences of UTF8 encoding
+# that were found to be wrong as exported from the Novell 6.0 server.
+# These lines of code should be removed when reading LDIF entries
+# that are believed to be correct regarding UTF-8 encoding.
+# The corrections are done in the subroutine utf8_corr().
+#
+# Note that some data definitions have to be entered before
+# running the script. Look for comments starting with 'Replace ...'.
+# Good luck!!!
+
+use Net::LDAP;
+use Net::LDAP::LDIF;
+use File::Find;
+use File::Copy;
+use File::Glob;
+
+# Replace homebase as appropriate...
+my $homebase   = '/skole/tjener/home0/';
+# Replace mailbase as appropriate...
+my $mailbase   = '/var/lib/maildirs/';
+# Replace nn below...
+my $rootdn     = 'cn=<nn>,ou=People,dc=skole,dc=skolelinux,dc=no';
+# Replace root password blow...
+my $rootpasswd = '<password>';
+my $basedn     = 'dc=skole,dc=skolelinux,dc=no';
+my $cntr       = 1;
+
+# Replace first uid value and gid value below...
+# ...the script assumes that uid's and gid's following
+# this value is not already taken, i.e. the lowest free number
+# for uid and gid should be used.
+my $uid_val    = 10199;
+my $gid_val    = 10199;
+
+my $ldap       = Net::LDAP->new('localhost', onerror => 'warn');
+#  Replace name of LDIF-file below...
+my $ldif       = Net::LDAP::LDIF->new("<ldif file>", "r", onerror => 'warn');
+
+$ldap->bind($rootdn, password => $rootpasswd);
+
+while ( not $ldif->eof() ) {
+    my $ldif_entry = $ldif->read_entry();
+    if ( $ldif->error() ) {
+ 	print "Error msg: ",$ldif->error(),"\n";
+	print "Error lines:\n",$ldif->error_lines(),"\n";
+
+    } else {
+	my $dn = $ldif_entry->dn;
+
+	my $uid = undef;
+	$dn =~ /cn=(\w+)/ && ($uid = $1);
+
+	# Skip entires where the uid is not provided...
+	next unless defined $uid;
+
+	$ldif_entry->replace('sn' => 'NN') 
+	  unless $ldif_entry->exists('sn');
+	$ldif_entry->replace('givenName' => 'NN') 
+	  unless $ldif_entry->exists('givenName');
+	my $given_name = $ldif_entry->get_value('givenName');
+	my $sn = $ldif_entry->get_value('sn');
+
+	# The attributes givenName and sn contain wrong
+	# UTF8 encodings for the characters �,�,a,�,�,�...
+	# ...this is a special operation needed for
+	# this specific input file only.
+	utf8_corr($given_name);
+	utf8_corr($sn);
+
+	my $homedir = $homebase . $uid;
+	my $maildir = "/var/lib/maildirs/" . $uid;
+	my $new_entry = Net::LDAP::Entry->new;
+
+	$uid_val++;
+	$gid_val++;
+
+	$new_entry->dn("uid=$uid,ou=People,dc=skole,dc=skolelinux,dc=no");
+	$new_entry->
+	    add('objectClass'      => ['posixAccount','imapUser'],
+		'cn'               => $given_name . " " . $sn,
+		'uid'              => $uid,
+		'uidNumber'        => $uid_val,
+		'gidNumber'        => $gid_val,
+		'homeDirectory'    => $homedir,
+		'mailMessageStore' => $maildir,
+		'loginShell'       => '/bin/bash',
+		'userPassword'     => $uid);
+
+	print "Processing: ", $new_entry->dn, "\n";
+	$ldap->add($new_entry);
+	print "addSuccess\n";
+	create_dir($new_entry);
+	create_grp($new_entry);
+	print "\n"; 
+    }
+}
+$ldap->unbind();
+$ldif->done();
+exit;
+
+
+sub utf8_corr {
+    # The LDIF file geneated from Novel contained errors
+    # regarding UTF8 encoding of �,�,�,�,�,�...
+    $_[0] =~ s/\303\217/\303\230/g;
+    $_[0] =~ s/\302\265/\303\246/g;
+    $_[0] =~ s/\302\260/\303\270/g;
+    $_[0] =~ s/\303\225/\303\245/g;
+}
+
+
+sub create_dir {
+    my $entry        = shift;
+    my $uidnumber    = $entry->get_value('uidnumber');
+    my $gidnumber    = $entry->get_value('gidnumber');
+    my $homedir      = $entry->get_value('homedirectory');
+    my $cn           = $entry->get_value('cn');
+
+    if (-d $homedir) {
+	print "homedirOK (already created) $homedir\n";
+	return;
+    }
+    umask 0022;
+    mkdir $homedir, 0755 || die "Unable to create $homedir: $!\n";
+    my @files = </etc/skel/.* /etc/skel/*>;
+    foreach (@files) {
+	next if m(^/etc/skel/\.\.$);
+	next if m(^/etc/skel/\.$);
+	`cp -r $_ $homedir`;
+    }
+    find(sub {chown($uidnumber, $gidnumber, $_)}, $homedir);
+    print "homedirOK, $cn ( $homedir )\n";
+}
+
+
+sub create_grp {
+    my $entry     = shift;
+    my $gidnumber = $entry->get_value('gidnumber');
+    my $cn        = $entry->get_value('cn');
+    my $uid       = $entry->get_value('uid');
+    my $mesg      = $ldap->search (base   => "ou=Group,$basedn",
+				   filter => "gidNumber=$gidnumber");
+    if (! $mesg->count()){
+	# Group id unknown...
+	my $new_entry = Net::LDAP::Entry->new();
+	$new_entry->dn("cn=$uid,ou=Group,$basedn");
+	$new_entry->add(objectclass => 'posixGroup',
+			cn          => $uid,
+			gidNumber   => $gidnumber);
+	$ldap->add($new_entry);
+	print "groupOK, $cn ( $gidnumber )\n";
+    } else {
+	print "groupOK (already created), $cn ( $gidnumber )\n";
+    }
+}
+
+# Example of LDIF entry processed by the script
+# Some values (<...>) changed for security reasons...
+#dn: cn=<cn>,ou=elev,ou=Users,o=UVNETT
+#changetype: add
+#givenName: <givenname>
+#fullName:: <QXlFYSBLZWxow5VziFJ5x2g=>
+#Language: ENGLISH
+#sn: <sn>
+#securityEquals: cn=Elever,ou=Users,o=UVNETT
+#passwordUniqueRequired: TRUE
+#passwordRequired: TRUE
+#passwordMinimumLength: 5
+#passwordExpirationTime: 20030429113427Z
+#passwordExpirationInterval: 7776000
+#objectClass: inetOrgPerson
+#objectClass: organizationalPerson
+#objectClass: person
+#objectClass: ndsLoginProperties
+#objectClass: top
+#loginTime: 20030218122529Z
+#loginGraceLimit: 6
+#ndsHomeDirectory: cn=EMBLA_DATA,ou=Drift,o=UVNETT#0#<...>
+#groupMembership: cn=Elever,ou=Users,o=UVNETT
+#cn: <cn>
+#ACL: 2#subtree#cn=<cn>,ou=elev,ou=Users,o=UVNETT#[All Attributes Rights]
+#ACL: 6#entry#cn=<cn>,ou=elev,ou=Users,o=UVNETT#loginScript
+#ACL: 2#entry#[Public]#messageServer
+#ACL: 2#entry#[Root]#groupMembership
+#ACL: 6#entry#cn=<cn>,ou=elev,ou=Users,o=UVNETT#printJobConfiguration
+#ACL: 2#entry#[Root]#networkAddress
diff --git a/debian-edu-config/ldap-tools/passwd2ldif b/debian-edu-config/ldap-tools/passwd2ldif
new file mode 100755
index 0000000..3684350
--- /dev/null
+++ b/debian-edu-config/ldap-tools/passwd2ldif
@@ -0,0 +1,75 @@
+#!/usr/bin/perl
+#
+# $Id: passwd2ldif,v 1.1 2004/01/17 17:40:29 pere Exp $
+
+use strict;
+
+use constant UIDSTART => 100;
+use constant GIDSTART => 100;
+use constant MAILPREFIX => "/var/lib/maildirs";
+
+my %users;
+my %groups;
+
+# Read all users
+open(PASSWD, "/etc/passwd");
+while(<PASSWD>){
+    chomp;
+    m/^(.+):(.*):(.+):(.*):(.*):(.*):(.*)$/;
+    next if ($3 < UIDSTART);
+    $users{$1} = {};
+    $users{$1}{'uidNumber'}        = $3;
+    $users{$1}{'gidNumber'}        = $4;
+    $users{$1}{'cn'}               = $5 || "N/A";
+    $users{$1}{'homeDirectory'}    = $6 || "N/A";
+    $users{$1}{'loginShell'}       = $7 || "/bin/false";
+    $users{$1}{'mailMessageStore'} = MAILPREFIX."/$1";
+ }
+close(PASSWD);
+
+# Read all groups
+open(GROUP, "/etc/group");
+while(<GROUP>){
+    chomp;
+    m/^(.+):(.*):(.+):(.*)/;
+    next if ($3 < GIDSTART);
+    $groups{$1} = {};
+    $groups{$1}{'gidNumber'} = $3;
+}
+close(GROUP);
+
+# Read all passwords
+open(SHADOW, "/etc/shadow");
+while(<SHADOW>){
+    m/^(.+):(.+):(.*):(.*):(.*):(.*):(.*):(.*):(.*)$/;
+    if ($users{$1}{'uidNumber'}){
+	$users{$1}{'userPassword'} = "{crypt}$2";
+    }
+}
+close(SHADOW);
+
+# Generate ldif
+foreach my $key (keys(%users)){
+    if (! $users{$key}{'userPassword'}){
+	$users{$key}{'userPassword'} = "{crypt}*";
+    }
+    print "dn: uid=$key,ou=People,dc=skole,dc=skolelinux,dc=no\n";
+    print "objectclass: posixAccount\n";
+    print "objectclass: imapUser\n";
+    print "uid: ". $key ."\n";
+    print "cn: ". $users{$key}{'cn'} ."\n";
+    print "uidNumber: ". $users{$key}{'uidNumber'} ."\n";
+    print "gidNumber: ". $users{$key}{'gidNumber'} ."\n";
+    print "homeDirectory: ". $users{$key}{'homeDirectory'} ."\n";
+    print "mailMessageStore: ". $users{$key}{'mailMessageStore'} ."\n";
+    print "userPassword: ". $users{$key}{'userPassword'} ."\n";
+    print "loginShell: ". $users{$key}{'loginShell'} ."\n";
+    print "\n";
+}
+foreach my $key (keys(%groups)){
+    print "dn: cn=$key,ou=Group,dc=skole,dc=skolelinux,dc=no\n";
+    print "objectclass: posixGroup\n";
+    print "cn: ". $key ."\n";
+    print "gidNumber: ". $groups{$key}{'gidNumber'} ."\n";
+    print "\n";
+}
diff --git a/debian-edu-config/ldap-tools/samba-debian-edu-admin b/debian-edu-config/ldap-tools/samba-debian-edu-admin
new file mode 100755
index 0000000..fcff9b9
--- /dev/null
+++ b/debian-edu-config/ldap-tools/samba-debian-edu-admin
@@ -0,0 +1,129 @@
+#!/bin/bash
+
+TIMEOUT=120 # seconds
+
+BASE=dc=skole,dc=skolelinux,dc=no
+LDAPURI="ldaps://ldap"
+DOMAIN=SKOLELINUX
+BASEDN=cn=smbadmin,ou=People,$BASE
+SHORTHOST=`hostname -s`
+
+# Search for existing samba objects, and if they exists, exit
+if /usr/bin/ldapsearch -LLL -H $LDAPURI -x -b "$BASEDN" 1>/dev/null 2>&1 ; then
+  echo "error: smbadmin account already exists, exiting"
+  exit 1
+fi
+
+if [ -x /etc/init.d/slapd -a -x /etc/init.d/samba ] ; then
+    :
+else
+    echo "error: Missing slapd or samba.  Exiting."
+    exit 1
+fi
+
+# Start slapd
+/etc/init.d/slapd start
+
+# Restart Samba
+/etc/init.d/samba restart
+
+# We have to fetch something called sambasid to create the sambaDomainName
+# object. if we do not have this object smbpasswd will complain try to
+# add it to the ldap tree, but since samba does not have write access,
+# it will fail. but the sambasid is not available until 120 seconds after
+# samba is restarted for the first time. This is on my PIII-750MHz test
+# machine.
+
+get_sid() {
+  net getlocalsid $SHORTHOST 2>/dev/null| cut -f 2 -d:
+}
+
+DELAY=5
+AFTER=0
+echo "Waiting up to $TIMEOUT seconds for \"net getlocalsid $SHORTHOST\" to return"
+SAMBASID="$(get_sid)"
+while [ -z "$SAMBASID" -a $AFTER -lt $TIMEOUT ]  ; do
+  echo -n .
+  let AFTER=$AFTER+$DELAY
+  sleep $DELAY
+  SAMBASID="$(get_sid)"
+done
+
+
+if [ -z "$SAMBASID" ] ; then
+  echo unable to fetch SAMBASID 1>&2
+  exit 0
+fi
+
+echo "SAMBASID success after $AFTER sec" 1>&2
+
+# Generate Samba_passwd
+SMBPW=$(/usr/bin/makepasswd)
+
+# Generate Crypted password
+CRYPTPW=$(/usr/sbin/slappasswd -u -s $SMBPW)
+
+# Stop openldap
+/etc/init.d/slapd stop
+
+# Stop nscd
+/etc/init.d/nscd stop
+
+# Add smbadmin user to ldap db
+cat << EOF | /usr/sbin/slapadd
+dn: $BASEDN
+objectClass: top
+objectClass: organizationalRole
+objectClass: simpleSecurityObject
+cn: smbadmin
+description: Samba Administrator
+userPassword: $CRYPTPW
+
+EOF
+
+# Store samba pw for later use
+/usr/bin/smbpasswd -w $SMBPW
+
+
+# Samba want s to save some information, but since we do not want to
+# allow global write access to samba, we just do the update ourselves.
+NOW=$(date -u +%Y%m%d%H%M%SZ)
+cat << EOF | /usr/sbin/slapadd
+dn: sambaDomainName=$DOMAIN,$BASE
+sambaDomainName: $DOMAIN
+sambaSID: $SAMBASID
+sambaAlgorithmicRidBase: 1000
+objectClass: sambaDomain
+EOF
+
+cat << EOF | /usr/sbin/slapadd
+dn: uid=root,ou=People,$BASE
+objectClass: sambaSamAccount
+objectClass: account
+uid: root
+sambaSID: ${SAMBASID}-1000
+EOF
+
+#in etch the database must be owned by openldap
+if getent passwd openldap | grep  -q openldap ; then
+   chown -R  openldap:openldap /var/lib/ldap
+fi
+
+# Start slapd
+/etc/init.d/slapd start
+
+# Wait until slapd is started, and it's possible to fetch the group "Admins"
+LOOP=0
+while [ $LOOP -lt 10 ] ; do 
+  if getent group admins >/dev/null ; then 
+    LOOP=10
+  else
+    sleep 1
+    let LOOP=($LOOP + 1)
+  fi
+done
+
+# Add samba Groupmap for Admins
+/usr/bin/net groupmap add rid=512 unixgroup=admins \
+             type=domain ntgroup="Domain Admins" \
+             comment="All system administrators in the school"
diff --git a/debian-edu-config/lib/mime/packages/debian-edu-mailcap b/debian-edu-config/lib/mime/packages/debian-edu-mailcap
new file mode 100644
index 0000000..340fe59
--- /dev/null
+++ b/debian-edu-config/lib/mime/packages/debian-edu-mailcap
@@ -0,0 +1,32 @@
+# Global mailcap entries
+# $Id: debian-edu-mailcap,v 1.1 2004/03/01 15:56:46 runesk-guest Exp $
+
+# OpenOffice
+application/vnd.sun.xml.writer;ooffice %s
+application/vnd.sun.xml.writer.global;ooffice %s
+application/vnd.stardivision.writer;ooffice %s
+application/vnd.stardivision.writer-global;ooffice %s
+application/x-starwriter;ooffice %s
+application/vnd.sun.xml.writer.template;ooffice %s
+application/vnd.sun.xml.calc;ooffice %s
+application/vnd.stardivision.calc;ooffice %s
+application/x-starcalc;ooffice %s
+application/vnd.sun.xml.calc.template;ooffice %s
+application/vnd.sun.xml.impress;ooffice %s
+application/vnd.stardivision.impress;ooffice %s
+application/vnd.stardivision.impress-packed;ooffice %s
+application/x-starimpress;ooffice %s
+application/vnd.sun.xml.impress.template;ooffice %s
+application/vnd.sun.xml.draw;ooffice %s
+application/vnd.stardivision.draw;ooffice %s
+application/x-stardraw;ooffice %s
+application/vnd.sun.xml.draw.template;ooffice %s
+application/vnd.sun.xml.math;ooffice %s
+application/vnd.stardivision.math;ooffice %s
+application/x-starmath;ooffice %s
+
+# Kghostview for .ps and .pdf 
+image/ps; kghostview '%s'
+image/pdf; kghostview '%s'
+application/pdf; kghostview '%s'
+application/postscript;  kghostview '%s'
diff --git a/debian-edu-config/sbin/debian-edu-etc-svk b/debian-edu-config/sbin/debian-edu-etc-svk
new file mode 100755
index 0000000..260f3b0
--- /dev/null
+++ b/debian-edu-config/sbin/debian-edu-etc-svk
@@ -0,0 +1,69 @@
+#!/bin/sh
+#
+# Track changes in /etc/ to make it easy to undo changes or check modifications.
+
+# Based on http://lists.debian.org/debian-devel/2005/02/msg00495.html
+
+set -e
+
+subdir=/etc
+ignorefiles="adjtime ld.so.cache"
+
+
+do_init() {
+    # fail early (assume set -e) if the directory is missing
+    cd $subdir
+
+    # Install svk
+    aptitude install svk
+   
+    # Initialize a depot in /root/.svk.  This is interactive.  Need to find a way to avoid question.
+    # use expect?
+#    svk depotmap --init
+    expect -d -c 'spawn svk depotmap --init; send "y\r"'
+
+    # Import $subdir making it a working copy
+    svk import -m "Initial import." --to-checkout /$subdir $subdir
+   
+    # Make your depot not that readable by non-root
+    chmod -R go-rwx ~/.svk
+
+    tmpfile=/tmp/foo
+
+    svk propget svn:ignore > $tmpfile
+
+    # Remove volatile files from revision control
+    for filename in $ignorefiles ; do
+	svk rm -K $filename
+	echo $filename >> $tmpfile
+    done
+
+    # Keep the ignore list sorted, and avoid empty lines
+    sort -u < $tmpfile | grep -v '^$'> $tmpfile.new && mv $tmpfile.new $tmpfile
+
+    # Hack to replace the old list with the new list.  the call will
+    # be 'cp $tmpfile svk-edit-file', and thus replace instead of
+    # editing.
+    EDITOR="cp $tmpfile" svk propedit svn:ignore
+    rm $tmpfile
+
+    svk commit -m "Remove automatically updated files."
+}
+
+do_update() {
+    cd $subdir
+    svk commit -m "Recent changes."
+}
+
+case "$1" in 
+    init)
+	do_init
+	;;
+    update)
+	do_update
+	;;
+    *)
+	echo "error: incorrect command '$1'."
+	exit 1
+	;;
+esac
diff --git a/debian-edu-config/sbin/debian-edu-fsautoresize b/debian-edu-config/sbin/debian-edu-fsautoresize
new file mode 100644
index 0000000..c55037e
--- /dev/null
+++ b/debian-edu-config/sbin/debian-edu-fsautoresize
@@ -0,0 +1,354 @@
+#!/usr/bin/perl
+#
+# Author:  Petter Reinholdtsen
+# Date:    2006-09-19
+# License: GNU General Public License
+#
+# This is the fsautoresize system.  It checks file systems, and
+# automatically extend the full ones based on the provided
+# instructions.
+
+
+use strict;
+use warnings;
+
+use Getopt::Std;
+
+# Using this module (instead of Filesys::DiskSpace) to get a version
+# providing the device size, and not only free and used.
+use Filesys::Df; # from debian package libfilesys-df-perl
+
+my %opts;
+getopts("dnv", \%opts) || usage();
+
+# Config
+
+# for each mount point in the list, extend it when it become too full
+# (based on real size in KiB/MiB/GiB or percent), and increase it with
+# either a static size or a percentage, until it reaches the upper
+# limit (in real size or fraction of volume group).  Should also
+# support scripting to decide if the partition should be extended or
+# not, to handle more advanced logic like 100 MiB per user with home
+# directories on /home/.
+
+# read config
+#
+#  Format:
+#    [regex]  minsizefree/min%free  maxsize/max%size (of vg)  size/% incrememt
+# The last matching regex take effect.  Example:
+#  .+ 1% 20g 10%
+#  /usr 10% 10g 1g
+
+my @conffiles = qw(/usr/share/debian-edu-config/fsautoresizetab
+                   /site/etc/fsautoresizetab
+                   /etc/fsautoresizetab);
+
+# handle signals (for reload and shutdown)
+
+# Check if all the listed mount points support online extending
+
+# loop
+
+#   check full file systems (libfilesys-df-perl, libfilesys-diskfree-perl,
+#                            libfilesys-diskspace-perl,libfilesys-statvfs-perl)
+#   resize if available space in volume group
+#   send email if resize succeeded
+
+
+$ENV{PATH} = "/sbin:/usr/sbin:/bin:/usr/bin";
+
+my %fsops =
+(
+    'ext3' => {
+        'online_supported' => \&ext3_online_supported,
+        'online_resize' => \&ext3_online_resize,
+    },
+);
+
+my %devopts =
+(
+    'lvm' => {
+        'resize' => \&lvm_resize,
+    }
+);
+
+sub usage {
+    print "Usage: $0 [-dnv]\n";
+}
+
+sub run {
+    my @cmd = @_;
+    print STDERR "exec: ", join(" ", @cmd, $opts{n} ? "" : " (dryrun)", "\n");
+    if ($opts{n}) {
+        system(@cmd);
+        return 0 == $?;
+    } else {
+        return 1;
+    }
+    return undef;
+}
+
+sub ext3_online_supported {
+    my %minfo = @_;
+    my $device = $minfo{device};
+    my $supported = 0;
+    open(TUNE2FS, "tune2fs -l $device 2>/dev/null |") || die "Unable to check $device";
+    while (<TUNE2FS>) {
+        chomp;
+        $supported = 1 if (m/Filesystem features: .*resize_inode /);
+    }
+    close(TUNE2FS);
+    return $supported;
+}
+
+sub ext3_online_resize {
+    my (%minfo) = @_;
+    my $device = $minfo{device};
+
+    my $device_resize = $devopts{$minfo{devicetype}}->{resize};
+    my $retval;
+    if (&$device_resize($minfo{device}, $minfo{newsize})) {
+        $retval = run "resize2fs", "$device";
+        if (!$retval) {
+            # Perhaps resize2fs is too old.  Try ext2online instead.
+            my $retval = run "ext2online", "$device";
+        }
+    } else {
+        print STDERR "error: unable to resize $device\n";
+    }
+    # ext2online ?
+
+    # fsck -f, lvresize, resize2fs
+    return $retval;
+}
+
+sub lvm_resize {
+    my ($device, $newsize) = @_;
+
+    $device = map_dev_to_lvmdev($device);
+
+    # Using lvextend and not lvresize, to make sure we do not try to
+    # shrink the file system.
+    return run("lvextend","-L${newsize}k", "$device");
+}
+
+sub map_dev_to_lvmdev {
+    my $device = shift;
+    my ($vg, $lv) = $device =~ m%/dev/mapper/([^-]+)-(.+)$%;
+    if ($vg) { # Remap if using stupid new linux kernel and/or tools
+        $device = "/dev/$vg/$lv";
+    }
+    return $device
+}
+
+sub guess_devicetype {
+    my $device = shift;
+
+    # Try to find the real device, to handle /dev/vg/lv -> /dev/mapper/vg-lv
+    $device = readlink $device if ( -l $device );
+
+    return "lvm" if ($device =~ m%^/dev/mapper/.+-.+$%);
+    return undef;
+}
+
+sub get_volumecapasity {
+    my $device = shift;
+    return 1000; # XXX Placeholder
+}
+
+sub get_lvextents {
+    my $device = shift;
+    $device = map_dev_to_lvmdev($device);
+
+    open(my $fh, "lvdisplay -c $device 2>/dev/null |") or
+        die "Unable to extract lvm lv extent size for $device";
+    my @f = split(/:/, <$fh>);
+    close($fh);
+
+    return @f[6,7];
+}
+
+sub supported_mountpoints {
+    my %mountpoints;
+    open(M, "/proc/mounts") || die "Unable to open /proc/mounts";
+    while (<M>) {
+        chomp;
+        my @f = split(/\s+/);
+        my $device = $f[0];
+        my $mountpoint = $f[1];
+        my $typename = $f[2];
+        next unless (exists $fsops{$typename});
+        my $devicetype = guess_devicetype($device),
+        my $extents;
+
+#        print STDERR "Checking $mountpoint\n" if $opts{v};
+        if ( -d $mountpoint ) { # df only work if the directory is available
+            my $ref = df($mountpoint);
+            my ($size, $used, $avail) =
+                ($ref->{blocks}, $ref->{used}, $ref->{bavail});
+#            my ($fs_type, $fs_desc, $used, $avail, $fused, $favail) =
+#                df $mountpoint;
+
+            if (defined $devicetype && "lvm" eq $devicetype) {
+                my ($volsizeblocks, $extents) = get_lvextents($device);
+                # Convert from 512 byte blocks to kilobytes
+                $size = $volsizeblocks/2;
+            }
+
+#            print STDERR "  A: $avail $used\n" if $opts{v};
+            my %minfo =
+                (
+                 mountpoint => $mountpoint,
+                 device     => $device,
+                 devicetype => $devicetype,
+                 fstype     => $typename,
+                 extents    => $extents,
+                 # These three are in kilobytes
+                 used       => $used,
+                 available  => $avail,
+                 size       => $size,
+                 volsize    => get_volumecapasity(),
+                 );
+            next unless (defined $minfo{'devicetype'} && exists
+                         $devopts{$minfo{'devicetype'}});
+
+            $mountpoints{$mountpoint} = \%minfo;
+        }
+
+    }
+    close(M);
+    return %mountpoints;
+}
+
+sub calculate_resize {
+    my ($minforef, $configref) = @_;
+    my $mountpoint = $minforef->{mountpoint};
+    my $lastconfig;
+    for my $config (@$configref) {
+        my $regex = ${$config}{'regex'};
+        if ($mountpoint =~ m/^$regex$/) {
+#            print STDERR "Matching '$regex'\n" if $opts{v};
+            $lastconfig = $config;
+        }
+    }
+
+    if ($lastconfig) {
+        my $minfree   = $lastconfig->{minfree};
+        my $maxsize   = $lastconfig->{maxsize};
+        my $increment = $lastconfig->{increment};
+        print(STDERR "info: $mountpoint matched regex ", $lastconfig->{regex},
+              " from ", $lastconfig->{sourcefile}, "\n") if $opts{v};
+
+        print STDERR "  $minfree $maxsize\n" if $opts{v};
+        if ($minfree =~ m/(\d+)%$/) {
+            $minfree = int($minforef->{size} * $1 / 100);
+        }
+        if ($maxsize =~ m/(\d+)%$/) {
+            $maxsize = int($minforef->{volsize} * $1 / 100);
+        }
+        if ($increment =~ m/(\d+)%$/) {
+            $increment = int($minforef->{size} * $1 / 100);
+        }
+        if (defined $lastconfig->{fstype} && "lvm" eq $lastconfig->{fstype}) {
+            my $extents   = $lastconfig->{extents};
+            my $extentsize= $lastconfig->{size} / $extents;
+            if ($increment < $extentsize) {
+                # Need to increase by at least one extent
+                $increment = $extentsize;
+            }
+        }
+        my $available = $minforef->{available};
+        print STDERR "  $minfree>?$available $maxsize $increment\n" if $opts{v};
+        if ($minfree > $available) {
+            my $size = $minforef->{size};
+            my $newsize = $size + $increment;
+            $newsize = $maxsize if ($newsize > $maxsize);
+            if ($newsize > $size) {
+                $minforef->{newsize} = $newsize;
+                print STDERR "  Need more than $available available, resizing to $newsize\n" if $opts{v};
+            } else {
+                # Upper limit is below the wanted size.  Not resizing
+                $minforef->{newsize} = $minforef->{size};
+            }
+        } else {
+            $minforef->{newsize} = $minforef->{size};
+        }
+    } else {
+        print STDERR "info: unable to match $mountpoint in config file\n";
+        $minforef->{newsize} = $minforef->{size};
+    }
+}
+
+sub as_kilobyte {
+    my $val = shift;
+    $val = $1 * 1024 * 1024 * 1024 if ($val =~ m/^(\d+)t$/i);
+    $val = $1 * 1024 * 1024 if ($val =~ m/^(\d+)g$/i);
+    $val = $1 * 1024 if ($val =~ m/^(\d+)m$/i);
+    return $val;
+}
+
+sub load_config {
+    my @conffiles = @_;
+    my @config;
+
+    for my $file (@conffiles) {
+        open(F, "<", $file) || next;
+        while (<F>) {
+            chomp;
+            s/\#.*//;
+            my ($regex, $minfree, $maxsize, $increment) = split(/\s+/);
+            next unless $regex;
+            $increment = "10%" if $increment eq "defaults";
+            $minfree = as_kilobyte($minfree);
+            $maxsize = as_kilobyte($maxsize);
+            $increment = as_kilobyte($increment);
+            my %fields =
+                (
+                 regex     => $regex,
+                 minfree   => $minfree,
+                 maxsize   => $maxsize,
+                 increment => $increment,
+                 sourcefile=> $file,
+                 );
+            push(@config, \%fields);
+        }
+        close F;
+    }
+    return @config;
+}
+
+sub fs_resize {
+    my @config = @_;
+
+    my %mountpoints = supported_mountpoints();
+
+    for my $mountpoint (sort keys %mountpoints) {
+        my %minfo = %{$mountpoints{$mountpoint}};
+
+        calculate_resize(\%minfo, \@config);
+        my $online_supported =
+            $fsops{$minfo{fstype}}->{'online_supported'};
+#        print(STDERR "S: $mountpoint ", $minfo{size}, " ",
+#              $minfo{newsize}, "\n") if $opts{v};
+        if ($minfo{size} != $minfo{newsize}) {
+            print STDERR "info: trying to resize $mountpoint\n"
+                if $opts{v};
+            if (&$online_supported(%minfo)) {
+                $fsops{$minfo{fstype}}->{'online_resize'}(%minfo);
+            } else {
+                print STDERR "warning: unable to resize $mountpoint, online resizing support is not detected\n";
+            }
+        }
+    }
+}
+
+if ($opts{d}) { # Deamon mode, run in the background
+    while (1) {
+        my @config = load_config(@conffiles);
+        fs_resize(@config);
+        sleep 300;
+    }
+} else {
+    my @config = load_config(@conffiles);
+    fs_resize(@config);
+}
diff --git a/debian-edu-config/sbin/debian-edu-fsautoresizetab b/debian-edu-config/sbin/debian-edu-fsautoresizetab
new file mode 100644
index 0000000..cdcb977
--- /dev/null
+++ b/debian-edu-config/sbin/debian-edu-fsautoresizetab
@@ -0,0 +1,10 @@
+# Example configuration for fsautoresize on Debian Edu.
+# Override these values in /etc/fsautoresizetab
+/.*                      10% 20g 10%
+/usr                     10% 10g defaults
+/var                     10% 10g defaults
+/var/spool/squid         10% 40g defaults
+/var/opt/ltsp/swapfiles   5% 30g defaults
+/skole/tjener/home[0-9]+ 10% 30g defaults
+/skole/backup            10% 50g defaults
+
diff --git a/debian-edu-config/sbin/debian-edu-reboot-when-idle b/debian-edu-config/sbin/debian-edu-reboot-when-idle
new file mode 100755
index 0000000..fefbd33
--- /dev/null
+++ b/debian-edu-config/sbin/debian-edu-reboot-when-idle
@@ -0,0 +1,122 @@
+#! /bin/sh
+#
+# Modified by:
+#   Kjetil T. Homme <kjetilho at ifi.uio.no>
+#   Peder Stray <peder at ifi.uio.no>
+#
+# Contributed under the terms of the GNU GPL v2 or later:
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or (at
+# your option) any later version.
+#
+# Modified by Petter Reinholdtsen
+#  - Restructure the code to move all site specific code into two
+#    functions reboot_contact() and is_idle().
+#  - Rewrote code to be easier to read.
+#  - Rewrote to work with bourne shell, not only korn shell.
+#  - Make sure to report unsupported operating systems before detaching.
+#  - Ignore processes owned by user 'exim' as well.
+
+
+# Return string with mail address to inform that the machine need a
+# reboot, or empty string if this script can reboot the machine even
+# if it isn't idle.
+reboot_contact() {
+	host=$1
+
+	# This test only work for ifi.uio.no
+	if innetgr -h $host sparcservers ; then
+		echo "solaris-drift at ifi.uio.no"
+	fi
+}
+
+# Return true if machine is idle, and false if it isn't
+is_idle() {
+	if ps -ef |
+	    awk '/[p]atch-setup|[d]aily|[r]pm-setup/ { exit 1 }
+		 /axnetipc|rc5des|dnetc|oafd/ { next }
+		 $8 ~ /^esd$/ { next }
+		 $1 ~ /^sturles$/ && /gruskontroll|sleep|mprime|condor_exec.exe/ { next }
+		 $1 !~ /^(root|irc|rpc|rpcuser|ntp|ident|daemon|cad|kmem|nobody|bin|wnn|xfs|exim|gdm|palantir|postgres|condor|UID)$/ { exit 1 }'
+	then
+		true
+	else
+		false
+	fi
+}
+
+if pgrep -x -u root shutdown >/dev/null
+then
+	echo "warning: already running shutdown"
+	exit 0
+fi
+
+# Check and report OS problems before detaching
+case `uname -s` in
+	SunOS)	shutdown=/usr/ucb/shutdown ;;
+	Linux)	shutdown=/sbin/shutdown ;;
+	*)	echo "error: unsupported operating system"
+		exit 1
+		;;
+esac
+
+if [ "$1" = "detached" ]; then
+	shift
+else
+	exec /local/bin/detach $0 detached "$@"
+fi
+
+option="-r"
+case $1 in
+	-h)	option="-h"; shift ;;
+esac
+
+# reboot senest 5 om morgenen, minst 30 timer frem i tid
+hnow=`date +%H`
+time=`expr \( 53 - $hnow \) \* 60`
+
+# start en shutdown i bakgrunnen, med mindre reboot_contact er satt.
+host=`uname -n`
+mailto=`reboot_contact $host`
+if [ "$mailto" ] ; then
+	echo "Machine $host will be rebootet when idle!" |
+	    mail -s "reboot-when-idle: $host" $mailto
+else
+	logger -t reboot-when-idle "info: will reboot host when idle, or in $time minutes"
+
+	$shutdown $option +$time "$@" &
+fi
+
+count=0
+until is_idle
+do
+	sleep 60
+#	count=$((count+1))
+#	if [ $count -gt 720 ]
+#	then
+#		case $(date +%H) in
+#			2[1-3])	$shutdown $option +120 "$@" ;;
+#		esac
+#	fi
+done
+
+$shutdown -c
+
+# her m� vi sove litt.  shutdown fyrer av seg sj�lv i bakgrunnen, og
+# brukar litt tid p� � stoppe den gamle.
+# 
+# Broadcast message from root (Thu Sep  4 06:32:50 2003):
+# 
+# The system is going DOWN for reboot in 2820 minutes!
+# + /sbin/shutdown -c
+# + /sbin/shutdown -r now
+# shutdown: already running.
+# root at rovereto /var/log 17 # 
+# Shutdown cancelled.
+
+sleep 5
+
+logger -t reboot-when-idle "info: rebooting idle host"
+
+$shutdown $option now "$@"
diff --git a/debian-edu-config/sbin/debian-edu-restart-services b/debian-edu-config/sbin/debian-edu-restart-services
new file mode 100755
index 0000000..0015a82
--- /dev/null
+++ b/debian-edu-config/sbin/debian-edu-restart-services
@@ -0,0 +1,73 @@
+#!/bin/sh
+#
+# Restart the daemons which might have changed the configuration
+# during install
+
+set -e 
+
+echo "info: Stopping services in sequence."
+for ALL in /etc/rc1.d/K* ; do 
+  if [ -h $ALL ] ; then 
+    SERVICE=$(basename $(readlink $ALL))
+  else
+    SERVICE=$(basename $ALL)
+  fi
+  echo "info: Stopping $SERVICE"
+  $ALL stop || /bin/true
+done
+
+for service in \
+    slapd \
+    portmap \
+    apache \
+    ;
+    do
+  if [ "$(pidof $service)" ] ; then
+      echo "info: '$service' still running, sending HUP."
+      pkill $service || /bin/true
+  fi
+done
+
+echo "info: Checking what's still running"
+ps aux | while read LINE ; do 
+  echo "info: $LINE"
+done
+
+for service in \
+    slapd \
+    portmap \
+    apache \
+    ;
+    do
+  if [ "$(pidof $service)" ] ; then
+      echo "info: '$service' still running, sending KILL."
+      pkill -9 $service || /bin/true
+  fi
+done
+
+echo "info: Checking what's still running"
+ps aux | while read LINE ; do 
+  echo "info: $LINE"
+done
+
+echo "Info: Restarting networking"
+/etc/init.d/networking restart || /bin/true
+
+echo "info: Starting services in sequence."
+for ALL in /etc/rc2.d/S* ; do 
+  if [ -h $ALL ] ; then 
+    SERVICE=$(basename $(readlink $ALL))
+  else
+    SERVICE=$(basename $ALL)
+  fi
+  if [ "$SERVICE" = "kdm" ] ; then 
+    if [ -f /etc/inittab.real ] ; then 
+      echo "info: Skipping start of $SERVICE, inittab.real still exists"
+      continue
+    fi
+  fi
+  echo "info: Starting $SERVICE"
+  $ALL start || /bin/true
+done
+
+exit 0
diff --git a/debian-edu-config/sbin/debian-edu-test-install b/debian-edu-config/sbin/debian-edu-test-install
new file mode 100755
index 0000000..57a839c
--- /dev/null
+++ b/debian-edu-config/sbin/debian-edu-test-install
@@ -0,0 +1,18 @@
+#!/bin/sh -e
+#
+# Run the test suite to check if the installation was OK
+
+basedir=/usr/lib/debian-edu-config/testsuite
+
+cd $basedir
+
+for file in *; do
+    TEST=$(basename $file)
+    if ! ./$file ; then 
+        if [ "$debian_edu_error_flag_file" ] ; then 
+            echo "$0: $TEST failed" >> $debian_edu_error_flag_file
+        else
+            echo "$0: $TEST failed" 1>&2
+        fi
+    fi
+done
diff --git a/debian-edu-config/sbin/ltsp-make-client b/debian-edu-config/sbin/ltsp-make-client
new file mode 100755
index 0000000..20cf031
--- /dev/null
+++ b/debian-edu-config/sbin/ltsp-make-client
@@ -0,0 +1,307 @@
+#!/bin/sh
+#
+# Set up diskless/stateless workstations for Debian Edu, using LTSP 
+#
+# Author: Finn-Arne Johansen
+# Date:   2006-01-25
+
+# Make sure we terminate on the first error instead of making a mess
+set -e
+
+echo
+echo "See http://wiki.debian.org/DebianEdu/HowTo/LtspDisklessWorkstation for instructions"
+echo "on how to set up and configure a diskless workstation using this script."
+echo
+
+target=
+
+while [ $# -gt 0 ] ; do 
+  case "$1" in 
+    --target) target="$2" ; shift ;;
+  esac
+  shift
+done
+
+# Make the installation a bit more quiet when started from the command line
+# The locale is not setup in the thin client chroot (yet?)
+LC_ALL=C
+export LC_ALL
+
+#avoid running deamons in the chroot
+LTSP_HANDLE_DAEMONS=false
+export LTSP_HANDLE_DAEMONS
+
+
+test "$target" || target=/opt/ltsp/i386
+dist=sarge
+
+if [ ! -d $target ] ; then
+    echo "error: $target do not exist. You need to run debian-edu-ltsp first"
+    exit 1
+fi
+
+# Check if server uses mirror or cd to install
+if apt-cache policy ltsp-server | grep -q "cdrom://" ; then 
+  mirror=file:///cdrom
+else
+  mirror=http://ftp.debian.org/debian
+fi
+
+# Insert commands to be executed when the script is terminated
+on_exit() {
+    # Unmount if anything is mounted
+    for dir in $umounts ; do
+	echo "Unmounting $dir"
+	umount $dir || true
+    done
+
+    if [ true = "$run_successfull" ] ; then
+	echo "info: conversion ended successfully"
+    else
+	echo "error: conversion ended abnormally"
+    fi
+}
+
+trap on_exit EXIT
+
+# Mount the CD ROM if needed
+case $mirror in
+    file:///cdrom)
+        mount /cdrom
+	umounts="/cdrom"
+	;;
+    file:///media/cdrom)
+        mount /media/cdrom
+	umounts="/media/cdrom"
+	;;
+    *)
+        ;;
+esac
+
+
+if [ "$umounts" ] ; then 
+  mount --bind /cdrom  $target/cdrom
+  umounts="$target/cdrom $umounts"
+fi
+
+mount -t proc proc  $target/proc
+umounts="$target/proc $umounts"
+cat /usr/lib/debian-edu-install/defaults.common \
+    /usr/lib/debian-edu-install/defaults.networked \
+    /usr/lib/debian-edu-install/defaults.workstation | \
+    chroot $target debconf-set-selections
+debconf-get-selections | grep "^locales" | \
+  chroot $target debconf-set-selections
+debconf-get-selections | grep "^popularity-contest" | \
+  chroot $target debconf-set-selections
+
+if [ -f /etc/locale.gen -a ! -f $target/locale.gen ] ; then 
+  cp /etc/locale.gen $target/etc/locale.gen 
+fi
+
+if [ -f /etc/environment -a ! -f $target/envrionment ] ; then 
+  cp /etc/environment $target/etc/environment
+fi
+
+# set the timezone
+cp -d /etc/localtime $target/etc 
+
+# Make the install Silent
+DEBIAN_FRONTEND=noninteractive
+export DEBIAN_FRONTEND
+
+
+# install som more packages
+
+# Bind-mount /var/cache/apt/archives/ on
+# /opt/ltsp/i386/var/cache/apt/archives/, to avoid having to download
+# packages twice.
+mount --bind /var/cache/apt/archives $target/var/cache/apt/archives
+umounts="$target/var/cache/apt/archives $umounts"
+
+chroot $target apt-get update
+chroot $target apt-get install -qy education-tasks 
+
+# Install all edu-dependencies
+chroot $target tasksel install education-workstation
+
+# All Packages may not exist on the CD
+# Install one at a time, to get as many as possible
+#ADDPKG="usbmount samba libpam-mount smbfs"
+# FIXME Add Samba when we have working thin client smb.conf
+ADDPKGS="usbmount libpam-mount smbfs localization-config"
+for PKG in $ADDPKGS ; do
+  chroot $target apt-get install -qy $PKG || /bin/true
+done
+
+# Configure locale specific settings.
+chroot $target update-locale-config $LANG
+
+# Kill processes that are currently running on $target
+if [ "$CHROOTPART" = "$target" ] ; then 
+  fuser -mkv $target/ || /bin/true
+fi
+
+# check which network the install is on, and start either as diskless
+# workstation or thin client
+cat <<EOF > $target/etc/init.d/ltsp_set_runlevel
+#!/bin/sh
+### BEGIN INIT INFO
+# Provides:          ltsp_set_runlevel
+# Required-Start:    $local_fs
+# Required-Stop:     $local_fs
+# Should-Start:      console-screen xfree86-common
+# Default-Start:     S
+# Default-Stop:      
+# Short-Description: Select runlevel for LTSP client at boot time
+# Description:       Based on current IP address, select runlevel
+#                    for the LTSP client at boot time.  This allow it
+#                    to switch dynamically between thin client and
+#                    diskless workstation profile.
+### END INIT INFO
+
+case "\$1" in
+  start) ;;
+  *) exit 0 ;;
+esac
+
+IP_ETH=\$(/sbin/ifconfig eth0 | sed -ne 's/ *inet addr:\([0-9.]*\) .*/\1/p')
+
+case "\$IP_ETH" in
+  10.*)
+    telinit 3 ;;
+  192.*)
+    telinit 4 ;;
+esac
+
+exit 0
+EOF
+chmod 0755 $target/etc/init.d/ltsp_set_runlevel
+chroot $target update-rc.d ltsp_set_runlevel start 99 S . stop 01 1 2 3 4 5 6 .
+
+only_run_on_rclevel() {
+  runlevel=$1 # Use level N to disable on all levels
+  shift
+  for service in $@ ; do
+      for link in $(cd $target/etc; ls rc[S2345].d/[SK]*$service || true); do
+	  # link now look like 'rcS.d/S99foo'
+	  set `echo $link|sed "s%rc\(.\).d\/\([SK]\)\(..\)$service%\1 \2 \3%"`
+	  lvl=$1
+	  action=$2
+	  seq=$3
+	  if [ "K" = "$action" ] && [ "$runlevel" = "$lvl" ]; then
+	      mv $target/etc/$link $target/etc/rc$lvl.d/S$seq$service
+	  fi
+	  if [ "S" = "$action" ] && [ "$runlevel" != "$lvl" ]; then
+	      mv $target/etc/$link $target/etc/rc$lvl.d/K$seq$service
+	  fi
+      done
+  done	
+}
+
+# Needed to get the loopback interface
+only_run_on_rclevel S ifupdown networking
+
+# a lot of services should only be started in runlevel 3, eg, when
+# running in workstation mode
+only_run_on_rclevel 3 kdm xfs nscd cupsys autofs
+
+# a lot of services should only be started in runlevel 4, eg. when running
+# in thin client mode
+only_run_on_rclevel 4 ltsp-client samba
+
+# Some services should not be started on the terminals
+only_run_on_rclevel N munin-node cron report-reboot open-backdoor enable-nat \
+    boot_xconf cfengine2 start-wlan inetd
+
+## set up samba for thinclients
+# Fixme - provide a working smb.conf
+#ln -sf smb-thinclient-debian-edu.conf $target/etc/samba/smb.conf
+
+# set up usbmount for terminals
+ln -sf usbmount-debian-edu.conf $target/etc/usbmount/usbmount.conf
+
+# Create /skole, since the chroot will be read-only
+mkdir -p $target/skole
+
+# Make the ldap users availible in the chroot
+chroot $target cfengine-debian-edu -Dinstallation
+
+# Create a new resolv.conf based on the one on the host
+# FixME, this will not work if server have no net during setup, and is
+# not a main-server
+rm -rf $target/etc/resolv.conf
+sed -e 's:127.0.0.1:10.0.2.2:g' /etc/resolv.conf | \
+   grep -v "^#" > $target/etc/resolv.conf
+chmod 0644 $target/etc/resolv.conf
+
+# Set up a working hosts file
+rm -rf $target/etc/hosts
+cp /etc/hosts $target/etc/hosts
+
+# it's nice to have a running ssh for the admin
+rm -f $target/etc/ssh/sshd_not_to_be_run
+
+if [ -f $target/etc/kde3/kdm/kdmrc ] ; then
+    # Set up randomdevice for kdm if it is installed
+    update-ini-file $target/etc/kde3/kdm/kdmrc 'General' RandomDevice \
+	/dev/urandom
+
+    #Include pammount config in /etc/pam.d/kdm
+    KDM_PAM=$target/etc/pam.d/kdm
+    KDM_ADD=$(grep -n ^auth $KDM_PAM | head -1 | cut -f1 -d:)
+
+    cat << EOF | patch -Np0 $KDM_PAM
+--- $KDM_PAM
++++ $KDM_PAM.new
+@@ -$KDM_ADD,0 +$KDM_ADD,2 @@
++ at include common-pammount
++
+EOF
+fi
+
+# Need to set up some boot info in dhcpd.conf
+# FIXME I guess this also will fail if done on a thin-client-server
+# without proper connection
+# But then again - the boot information should then be located on the
+# main server
+NETIF=eth0
+DHCP_OLD=/etc/dhcp3/dhcpd-debian-edu.conf
+DHCP_NEW=/etc/dhcp3/dhcpd-stateless-debian-edu.conf
+DHCP_ADD=
+IP_ETH=$(/sbin/ifconfig $NETIF | sed -ne 's/ *inet addr:\([0-9.]*\) .*/\1/p')
+NET_ETH=$(/sbin/route -n | awk "/$NETIF/ { print \$1 }"| head -1 )
+MASK_ETH=$(/sbin/route -n | awk "/$NETIF/ { print \$3 }"| head -1 )
+INTERNAL_NET=$(grep -n "shared-network INTERNAL" $DHCP_OLD | cut -f1 -d:)
+THIN_NET=$(grep -n "shared-network THINCLIENTS"  $DHCP_OLD | cut -f1 -d:)
+
+OPTION_END=$(head -$THIN_NET $DHCP_OLD | tail +$INTERNAL_NET  | \
+             grep -ne "^ *option" | tail -1 | cut -f1 -d:)
+PXEFILE="$(tail +$THIN_NET $DHCP_OLD | grep -e '^ *filename.*pxe' | head -1)"
+
+head -$THIN_NET $DHCP_OLD | tail +$INTERNAL_NET | \
+  grep -qe "^ *filename" || DHCP_ADD="$DHCP_ADD$PXEFILE\n"
+head -$THIN_NET $DHCP_OLD | tail +$INTERNAL_NET | \
+  grep -qe "^ *option root-path" || \
+  DHCP_ADD="$DHCP_ADD  option root-path \"$IP_ETH:$target\";\n"
+
+if [ "$DHCP_ADD" ] ; then
+  DHCP_SPLIT=$(expr $INTERNAL_NET + $OPTION_END)
+  head -$DHCP_SPLIT $DHCP_OLD > $DHCP_NEW
+  echo "$DHCP_ADD" >> $DHCP_NEW
+  tail +$DHCP_SPLIT $DHCP_OLD >> $DHCP_NEW
+  test -h /etc/dhcp3/dhcpd.conf && \
+    ln -sf dhcpd-stateless-debian-edu.conf /etc/dhcp3/dhcpd.conf
+  /usr/sbin/invoke-rc.d dhcp3-server restart || true # Is this a fatal error?
+fi
+
+# Export filesystem to the stateless machines if it isn't exported already
+basedir=`dirname $target` # Get /opt/ltsp from /opt/ltsp/i386
+if grep -q "^$basedir " /etc/exports ; then
+    :
+else
+    echo "$basedir $NET_ETH/$MASK_ETH(ro,async,no_root_squash,subtree_check)" >> /etc/exports
+    /usr/sbin/invoke-rc.d nfs-kernel-server restart
+fi
+
+run_successfull=true # report success to on_exit()
diff --git a/debian-edu-config/share/debian-edu-config/tools/adduser b/debian-edu-config/share/debian-edu-config/tools/adduser
new file mode 100755
index 0000000..b0bfb2d
--- /dev/null
+++ b/debian-edu-config/share/debian-edu-config/tools/adduser
@@ -0,0 +1,25 @@
+#!/bin/bash 
+# $Id: adduser,v 1.2 2004/03/27 14:23:24 finnarne-guest Exp $
+# This script takes 2 parameters
+# The username and the group to add the user into
+# use at own risk
+
+DOMAIN="dc=skole,dc=skolelinux,dc=no"
+URI="ldaps://ldap"
+
+UNAME=$1
+GROUP=$2
+
+if [ -z "$UNAME" -o -z "$GROUP" ] ; then 
+  echo -e "usage:\n\t$0 <username> <group>"
+  exit 9
+fi
+
+
+
+cat << EOF | ldapmodify -D "cn=admin,ou=People,$DOMAIN" -H "$URI" -W -v -x
+dn: cn=$GROUP,ou=Group,$DOMAIN
+changetype: modify
+add: memberUid
+memberUid: $UNAME
+EOF
diff --git a/debian-edu-config/share/debian-edu-config/tools/jrpasswd b/debian-edu-config/share/debian-edu-config/tools/jrpasswd
new file mode 100755
index 0000000..e8f7ceb
--- /dev/null
+++ b/debian-edu-config/share/debian-edu-config/tools/jrpasswd
@@ -0,0 +1,239 @@
+#!/usr/bin/env python
+
+# -*- coding: utf-8 -*-
+
+"""
+Password change utility implementation based on sarge-based Skolelinux.
+
+This utility has the ability to change passord for other users than
+the current user, but only with the help of LDAP access control lists. 
+You can also change the samba-passwords, if python-smbpasswd is installed.
+
+So a regular student can't change an other students' password unless he/her 
+has been granted the right to do so by an administrator. This grant can either
+be done in slapd.conf, or as a more general way - give a ldap-group access to 
+change peoples passwords - and grant this right to change by adding members to 
+this group. 
+
+This script can also be used to change ones own password. Just run it without 
+any arguments.
+
+Author: Bjorn Ove Grotan <bjorn.ove at grotan.com>
+Depends: python (2.1>=), python-ldap
+May-depend: smbpasswd
+Licence: GPL
+
+Use at own risk.
+"""
+
+import sys
+import os
+import string,base64,random
+from getpass import getuser,getpass
+
+# Needed for generating encrypted passwords. Debian-Edu uses crypt by default. 
+# SSHA is concidered more secure in authors' houmble opinion.
+import md5,sha,crypt
+
+try:
+    import ldap
+    from ldap import modlist
+except ImportError,ie:
+    print "Python-ldap not install or missing in PYTHONPATH. Exiting..."
+    sys.exit()
+
+# aptitute install smbpasswd
+try:
+    import smbpasswd
+    update_sambapassword = True
+except ImportError,ie:
+    #print "Could not find python-smbpasswd. Will only update general passwords,"
+    #print "and not samba-passwords."
+    update_sambapassword = False
+
+###############################################################################################
+#
+# Configuration
+#
+###############################################################################################
+
+debug = False
+uri = 'ldaps://ldap' # or whatever is the "cn" in the server's certificate
+# Hardcode a simple proxy-user with minimal rights, or open for anonymous search if disabled.
+# Basically, we need to search after a given users distinguished name (dn) in user_base.
+binddn = '' 
+bindpw = ''
+user_base = 'ou=People,dc=skole,dc=skolelinux,dc=no' # Where can we find users in this tree?
+filterattribute='uid'
+# Support selfsigned certificates, unless this is enabled through /etc/ldap.conf (TLS_REQCERT allow)
+#ldap.set_option(ldap.OPT_X_TLS_REQUIRE_CERT, ???)
+
+###############################################################################################
+#
+# Functions
+#
+###############################################################################################
+
+def usage():
+    """How to use this module
+    """
+    print "Skolelinux password-change utility."
+    print ""
+    print "To change your own password(s):"
+    print "  %s" % (sys.argv[0])
+    print ""
+    print "To change a different persons' password(s):"
+    print "  %s -u <username>" % (sys.argv[0])
+    print ""
+    print "This help:"
+    print "  %s -h" % (sys.argv[0])
+    print ""
+    sys.exit()
+
+def getsalt(chars = string.letters + string.digits,length=16):
+    """Generate a random salt. Default length is 16.
+       Originated from mkpasswd in Luma
+    """
+    salt = ""
+    for i in range(int(length)):
+        salt += random.choice(chars)
+    return salt
+
+def mkpasswd(pwd,hash='ssha'):
+    """Generate hashed passwords. Originated from mkpasswd in Luma
+    """
+    alg = {
+        'ssha':'Seeded SHA-1',
+        'sha':'Secure Hash Algorithm',
+        'smd5':'Seeded MD5',
+        'md5':'MD5',
+        'crypt':'Standard unix crypt'
+    }
+    # Don't add support for sambapasswords unless we're using it
+    if (update_sambapassword):
+        alg['lmhash'] = 'Lanman hash'
+        alg['nthash'] = 'NT Hash'
+    if hash not in alg.keys():
+        return "Algorithm <%s> not supported in this version." % hash
+    else:
+        salt = getsalt()
+        if hash == "ssha":
+            return "{SSHA}" + base64.encodestring(sha.new(str(pwd) + salt).digest() + salt)
+        elif hash == "sha":
+            return "{SHA}" + base64.encodestring(sha.new(str(pwd)).digest())
+        elif hash == "md5":
+            return "{SHA}" + base64.encodestring(md5.new(str(pwd)).digest())
+        elif hash == "smd5":
+            return "{SMD5}" + base64.encodestring(md5.new(str(pwd) + salt).digest() + salt)
+        elif hash == "crypt":
+            return "{CRYPT}" + crypt.crypt(str(pwd),getsalt(length=2))
+        # nt/lm-hash are used directly in their own password-attributes.. no need to prefix the hash
+        elif hash == "lmhash":
+            return smbpasswd.lmhash(pwd)
+        elif hash == "nthash":
+            return smbpasswd.nthash(pwd)
+
+
+def get_dn(username):
+    """Searches the LDAPtree for this username. Returns its dn.
+    """
+    dn = None
+    try:
+        l = ldap.initialize(uri)
+    except LDAPError,le:
+        print "Error connecting to ldapserver."
+        print "Reason: %s" % (repr(le))
+        sys.exit()
+    filter = filterattribute + '=' + username
+    if debug:
+        print "SearchFilter: %s" % filter
+    try:
+        l.simple_bind_s('','')
+        res = l.search_s(user_base,ldap.SCOPE_ONELEVEL,filter)
+        try:
+            dn = res[0][0] # res is a list of tuple objects, where the first element is dn, other is ldif
+            if debug:
+                print "Found dn: %s" % dn
+        except IndexError,ie:
+            print "User not found in database"
+            sys.exit()
+    except ldap.UNWILLING_TO_PERFORM,e:
+        print "Server is unwilling to perform the operation."
+        sys.exit()
+    except ldap.LDAPError,le:
+        print "An error occured while talking to the server: ", le
+        sys.exit()
+    return dn
+
+def get_passwd():
+    """Helper function to retrieve new password"""
+    p1 = getpass('Enter new password: ')
+    if (len(p1) < 6):
+        print "Password length too short. Passwords are 6-8 characters"
+        p1 = get_passwd()
+    else:
+        p2 = getpass('Retype new password: ')
+        if (p1 != p2):
+            print "Password mismatch."
+            sys.exit()
+    return p1
+
+def do_change(username,debug):
+    """Main function - handles ldap write operations.
+    """
+    binddn = get_dn(getuser())
+    bindpw = getpass('(Your own) Password:')
+    if debug:
+        print "Binding as: %s" % binddn
+    user = get_dn(username)
+    if debug:
+        print "Changing password for dn: %s" % user
+    try:
+        l = ldap.initialize(uri)
+        l.simple_bind_s(binddn,bindpw)
+    except ldap.INVALID_CREDENTIALS:
+        print "Wrong username and/or password - or not enough encryption."
+        sys.exit()
+    except ldap.LDAPError,le:
+        print "An error occured while connecting to LDAP server"
+        print "Reason: %s" % (le.args)
+        sys.exit()
+
+    newPassword = get_passwd()
+    ldif = []
+    # We change password on attribute userPassword,sambaLMPassword and sambaNTPassword
+    ldif.append((ldap.MOD_REPLACE,"userPassword",mkpasswd(newPassword,hash='md5')))
+    # Perhaps set attributes such as sambaPwdLastSet,shadowExpire and shadowLastChange 
+    # Are these attributes used with functionality anywhere?
+    if update_sambapassword:
+        ldif.append((ldap.MOD_REPLACE,"sambaLMPassword",mkpasswd(newPassword,hash='lmhash')))
+        ldif.append((ldap.MOD_REPLACE,"sambaNTPassword",mkpasswd(newPassword,hash='nthash')))
+    if debug:
+        print "Modifying dn: %s" % (user)
+        print "LDIF :\n %s" % (ldif)
+    # Finally, we try to modify the object
+    try:
+        l.modify_s(user,ldif)
+        print "Password(s) changed on user %s" % (username)
+    except ldap.LDAPError,e:
+        print "An error occured while modifying %s" % (username)
+        print "Reason: %s" % (e.args)
+        sys.exit()
+        
+
+if __name__ == '__main__':
+    args = sys.argv[1:]
+    if ('-u' in args):
+        try:
+            username = args[1]
+        except:
+            usage()
+    elif ('-h' in args):
+        usage()
+    else:
+        # If no username is supplied at commandline, assume current user wants
+        # to change his/her password(s)
+        username = getuser()
+    if debug:
+        print "Trying to change password for user: %s" % username
+    do_change(username,debug)
diff --git a/debian-edu-config/share/debian-edu-config/tools/ldap-user-clean-attic.sh b/debian-edu-config/share/debian-edu-config/tools/ldap-user-clean-attic.sh
new file mode 100755
index 0000000..c6801b2
--- /dev/null
+++ b/debian-edu-config/share/debian-edu-config/tools/ldap-user-clean-attic.sh
@@ -0,0 +1,52 @@
+#!/bin/bash
+#
+# Clean up users older than N days from the attic
+# Author: Finn-Arne Johansen <faj at bzz.no>
+# $Id: ldap-user-clean-attic.sh,v 1.2 2004/06/16 21:01:59 finnarne-guest Exp $
+
+# Show how this thing is used
+
+set -e 
+usage () {
+  echo "
+usage: $0 <NUMBER_OF_DAYS>
+  where NUMBER_OF_DAYS is the limit of which to delete users
+  users will be delete from the \"attic\"
+  and their home directory will be removed
+"
+}
+
+if [ $# -ne 1 ] ; then 
+  usage
+  exit 9
+fi
+
+OLDERTHAN=$(date -d -${1}days +%Y%m%d235959Z 2>/dev/null)
+
+if [ $? -ne 0 ] ; then 
+  usage 
+  exit 9
+fi
+
+TMPFILE=/tmp/$(basename $0).$$
+
+touch $TMPFILE
+chmod 0600 $TMPFILE
+chown 0:0 $TMPFILE
+
+ldapsearch -LLL -H ldaps://ldap -x -b "ou=Attic,dc=skole,dc=skolelinux,dc=no" \
+  "(&(uid=*)(modifyTimestamp<=$OLDERTHAN))" homeDirectory > $TMPFILE
+
+if ! grep -q "^dn:" $TMPFILE ; then 
+  echo "Sorry, Nothing to delete, exiting"
+else
+  grep "^dn:" $TMPFILE | cut -f2 -d: | \
+    ldapdelete -H ldaps://ldap -x \
+               -D "cn=admin,ou=People,dc=skole,dc=skolelinux,dc=no" -W
+  for EACH in $(grep "^homeDirectory:" $TMPFILE | cut -f2- -d:) ; do 
+    rm -rf $EACH
+  done 
+fi
+
+rm -rf $TMPFILE
+
diff --git a/debian-edu-config/share/debian-edu-config/tools/ldap-users.pl b/debian-edu-config/share/debian-edu-config/tools/ldap-users.pl
new file mode 100755
index 0000000..1aeedb8
--- /dev/null
+++ b/debian-edu-config/share/debian-edu-config/tools/ldap-users.pl
@@ -0,0 +1,1802 @@
+#!/usr/bin/perl -w
+# ldap-users.pl - Administrate users in ldap
+#
+# $Id: ldap-users.pl,v 1.101 2004/09/24 15:16:03 andreas Exp $
+
+use Data::Dumper;
+use Net::LDAP;
+use Net::LDAP::Entry;
+use Net::LDAP::Util qw( ldap_error_name ldap_error_text);
+use Text::Unaccent;
+use HTML::FromText;
+use Time::HiRes qw(usleep);
+use locale;
+use POSIX;
+use strict;
+
+END {ldap_close()}
+
+# setlocale(LC_COLLATE, "no_NO.UTF-8");    
+
+my %g;    # this is "g" for global. but only global to this file,
+          # not the whole process.
+
+# Connect to LDAP server.
+sub ldap_connect {
+    my ( $server, $rootdn, $basedn, $minid, $maxid ) = @_;
+
+    my (@err, @dbg);
+
+    $g{minid}         = $minid;
+    $g{maxid}         = $maxid;
+    $g{server}        = $server;
+    $g{rootdn}        = $rootdn;
+    $g{basedn}        = $basedn;
+    $g{ldap}          = undef;
+    $g{err}           = \@err;
+    $g{dbg}           = \@dbg;
+    $g{allreadyusers} = undef;
+    $g{modified}      = undef;
+
+    # Take a look at bug 404 if this doesn't work
+    $g{ldap} = Net::LDAP->new($server,version => '3') 
+	|| die "Unable to connect to LDAP server on host \"$server\": $! ";
+    my $result = $g{ldap}->start_tls( verify => 'none');
+#    $g{ldap} = Net::LDAP->new( $server, version => '3',debug=>15 )
+#      || die "Configuration error or LDAP server not running on $server: $! ";
+#    my $result = $g{ldap}->start_tls( verify => 'require',
+#				      cafile => '/var/lib/pyca/Root/cacert.pem');
+    die "LDAP Error: "
+      . ldap_error_name( $result->code ) . " "
+      . ldap_error_text( $result->code ) . " "
+      if $result->code();
+}
+
+sub ldap_check_capabilities {
+    my ($needed_ref) = @_;
+
+    my $base   = $g{basedn};
+    my $filter = "cn=capabilities";
+    my $result = $g{ldap}->search( base => $base, filter => $filter );
+    my $entry  = $result->pop_entry;
+    if ( $result->code or !$entry ) {
+        error_msg( "No capabilities found:"
+            . ldap_error_text( $result->code ) . "\n" );
+        return undef;
+    }
+
+    foreach my $cap ( $entry->get_value("capability") ) {
+        ( $cap, my $have_version ) = split ( / /, $cap );
+        if ( $needed_ref->{$cap} and $needed_ref->{$cap} > $have_version ) {
+            return undef;
+        }
+        else {
+            delete $needed_ref->{$cap} if  $needed_ref->{$cap};
+        }
+    }
+
+    if ( keys %$needed_ref ) {
+
+        # we depend on capabilities the ldap directory does not meet.
+	return undef;
+    }
+    return "can run";
+}
+
+# Make a unique username from common name.
+sub make_uid {
+    my ( $firstname, $lastname, $newnames_ref ) = @_;
+    $g{allreadyusers} = $newnames_ref;
+    my $username = make_unique_username( $firstname, $lastname );
+    return $username;
+}
+
+sub change_slicing {
+    my ( $filter_var, $slice_point, $uppercase_ref ) = @_;
+
+    my @filter_var_list;
+    my $n = $slice_point;    # this is done this way because
+                             # the s/// replaces the k-1 occurance,
+                             # so $n needs to lag one behind.
+    $slice_point++;
+    my $star_cnt = $filter_var =~ tr/*/*/;
+    if ( $slice_point > $star_cnt ) {
+        $slice_point = undef;
+        return ( [], $slice_point );
+    }
+
+    for my $char ( 'a' .. 'z', '0' .. '9', @$uppercase_ref ) {
+        my $filter_var_new = $filter_var;
+
+        $filter_var_new =~ s/(^[^*]*(?:\*.*?){$n})\*/$1$char*/x;
+        push @filter_var_list, $filter_var_new;
+    }
+
+    return ( \@filter_var_list, $slice_point );
+}
+
+sub check_slice_empty {
+    my ($slice_ref) = @_;
+    return 1 if $#$slice_ref == -1;
+    return 0;
+}
+
+sub sort_result {
+    my ( $sort_array_ref, $sort_key ) = @_;
+
+    my @result =
+      sort { $a->get_value($sort_key) cmp $b->get_value($sort_key); }
+      @{$sort_array_ref};
+    return @result;
+}
+
+sub get_slice {
+    my ( $base, $filter_fix, $filter_var, $uppercase_ref, $depth ) = @_;
+    my ( @slice, $filters );
+
+    $depth++;
+
+    # final filter:"(&(objectClass=lisGroup)(cn="*a*b*"))"
+    # filter_fix: "&(objectClass=lisGroup)"
+    # variable filter: cn="*a*b*"
+    my $filter = "($filter_fix($filter_var))";
+    my $mesg = $g{ldap}->search( base => $base, filter => $filter );
+    if ( 4 == $mesg->code ) {
+
+        # We got a LDAP_SIZELIMIT_EXEEDED error.
+        #split up slice 
+        my $slice_point = 0;
+        do {
+            ( my $filter_var_list_ref, $slice_point ) =
+              change_slicing( $filter_var, $slice_point, $uppercase_ref );
+            for my $filter_var_new ( @{$filter_var_list_ref} ) {
+                if ( 9 < $depth ) { last }
+                ;    # savety against infinit recursion
+                 # we should not go deeper then 9 since logins have just 8 chars
+                 #get sub-slices
+                my ( $slice_ref, $filters_applied ) = get_slice(
+                    $base,          $filter_fix, $filter_var_new,
+                    $uppercase_ref, $depth
+                );
+
+                # merge new slices 
+                push ( @slice, @{$slice_ref} );
+                $filters .= $filters_applied if $filters_applied;
+            }
+        } while ( check_slice_empty( \@slice ) and defined $slice_point );
+        if ( 1 == $depth ) { # this happens after we are done with our recursion
+                #here we get all other entries,
+                #which for some reason were not covered in the other searches.
+            $filter = "($filter_fix$filters($filter_var))\n";
+            $mesg = $g{ldap}->search( base => $base, filter => $filter );
+            my @tmp = $mesg->all_entries();
+            debug_msg( "key $filter  returned " . ( $#tmp + 1 ) . " users\n" );
+            push ( @slice, $mesg->all_entries() );
+        }
+    }
+    elsif ( $mesg->code ) {    # some other error!
+        error_msg( "ldap problem: $base $filter : "
+            . ldap_error_name( $mesg->code ) . " "
+            . ldap_error_text( $mesg->code ) . "\n" )
+          if $mesg->code;
+        return ( [], "" );
+    }
+    else {    # We got the whole slice in one piece.
+        @slice   = $mesg->all_entries();
+        $filters = "(!$filter_var)";
+
+        my @tmp = $mesg->all_entries();
+        debug_msg( "key $filter  returned " . ( $#tmp + 1 ) . " users\n" )
+          unless ( -1 == $#tmp );
+    }
+    if ( 1 == $depth ) {
+        $filter_var =~ m/^(.*)=/;
+        my $sort_key = $1;
+        @slice = sort_result( \@slice, $sort_key );
+    }
+    return ( \@slice, $filters );
+}
+
+# Get all users in a given domain $basedn.
+sub ldap_get_users {
+
+    my $base = "ou=People," . $g{basedn};
+
+    # since we dont have unique cn for users, it is unsave to search 
+    # the cn with a limited SIZELIMIT therefore we must limit us to the 
+    # uid, which is unique. it is much more efficent, too.
+    my $filter_fix = "&(objectClass=posixAccount)";
+    my $filter_var = "uid=*";
+    my ( $slice_ref, $filters_applied ) =
+      get_slice( $base, $filter_fix, $filter_var );
+    return @{$slice_ref};
+}
+
+# Search for users in a given domain $basedn.
+sub ldap_search_users {
+    my ( $searchin, $searchfor ) = @_;
+
+    my $base       = "ou=People," . $g{basedn};
+    my $filter_fix = "&(objectClass=posixAccount)";
+    my $filter_var = "$searchin=$searchfor*";
+    my ( $slice_ref, $filters_applied ) =
+      get_slice( $base, $filter_fix, $filter_var );
+    return @{$slice_ref};
+}
+
+# Search in a given domain $basedn.
+sub ldap_search {
+    my ( $searchin, $searchfor ) = @_;
+    my ( $ou, $oc, $attribut );
+    unless ($searchin) {
+        goto error_exit;
+    }
+    elsif ( $searchin eq "class_cn" ) {
+        $oc       = "lisGroup";
+        $attribut = "cn";
+        $ou       = "ou=Group,";
+    }
+    elsif ( $searchin eq "user_login" ) {
+        $oc       = "posixAccount";
+        $attribut = "uid";
+        $ou       = "ou=People,";
+    }
+    elsif ( $searchin eq "user_cn" ) {
+        $oc       = "posixAccount";
+        $attribut = "cn";             #XXX cn ist nicht unique!!!
+        $ou       = "ou=People,";
+    }
+    else {
+        error_exit:
+        return ( "illegal search type\n", undef );
+    }
+    unless ( $searchfor and $searchfor =~ /\*/ ) {
+        $searchfor .= "*";    #XXX quick fix, make this an exact search instead.
+    }
+    my $base       = $ou . $g{basedn};
+    my $filter_fix =
+      "&(objectClass=$oc)(!(|(groupType=private)(cn=admin)(cn=nextID)))";
+    my $filter_var = "$attribut=$searchfor";
+    my ( $slice_ref, $filters_applied ) =
+      get_slice( $base, $filter_fix, $filter_var );
+    if ( $slice_ref->[0] and $slice_ref->[0]->get_value('cn') ) {
+        return ( "OK", @{$slice_ref} );
+    }
+    else {
+        return ( "EMPTY", undef );
+    }
+}
+
+sub ldap_disable_user_login {
+    my ( $user_login, $rootpw ) = @_;
+    my $result = $g{ldap}->bind( $g{rootdn}, 'password' => $rootpw );
+    if ( $result->code ) {
+        error_msg( "Could not bind to ldap server! "
+            . ldap_error_name( $result->code ) . ": "
+            . ldap_error_text( $result->code ) . "\n" );
+        return undef;
+    }
+
+    my $base   = "ou=People," . $g{basedn};
+    my $filter = "&(objectClass=posixAccount)(uid=$user_login)";
+
+    $result = $g{ldap}->search( base => $base, filter => $filter );
+    my $entry = $result->pop_entry;
+    if ( $result->code or !$entry ) {
+        debug_msg( "No such user \"$user_login\" found:"
+            . ldap_error_text( $result->code ) . "\n" );
+        return undef;
+    }
+
+    if ( $config{sambasync} ){
+	system( "smbpasswd -d $user_login  >/dev/null 2>&1" );
+    }
+
+    my $inactive_flag = $entry->get_value('shadowFlag');
+    if ($inactive_flag) {
+        debug_msg( "User $user_login is allready disabled by flag:"
+            . ldap_error_text( $result->code ) . "\n" );
+    }
+    else {
+        $result =
+          $g{ldap}->modify( $entry,
+            changes => [ add => [ 'shadowFlag' => 1 ] ] );
+        if ( $result->code ) {
+            debug_msg( "Error deactivating user's ldap-flag! "
+                . ldap_error_name( $result->code ) . "\n" );
+        }
+    }
+
+    my $passwd = $entry->get_value('userPassword');
+    if ( $passwd =~ /^DISABLED!/ ) {
+        debug_msg( "User $user_login is allready disabled by password:"
+            . ldap_error_text( $result->code ) . "\n" );
+    }
+    else {
+        $result =
+          $g{ldap}->modify( $entry,
+            changes => [ replace => [ 'userPassword' => "DISABLED!$passwd" ] ]
+        );
+        if ( $result->code ) {
+            debug_msg( "Error deactivating user's password! "
+                . ldap_error_name( $result->code ) . "\n" );
+        }
+    }
+
+    my $shell = $entry->get_value('loginShell');
+    if ( $shell =~ /^DISABLED!/ ) {
+        debug_msg( "User $user_login is allready disabled by shell-distrortion:"
+            . ldap_error_text( $result->code ) . "\n" );
+    }
+    else {
+        $result =
+          $g{ldap}->modify( $entry,
+            changes => [ replace => [ 'loginShell' => "DISABLED!$shell" ] ] );
+        if ( $result->code ) {
+            debug_msg( "Error deactivating user's shell! "
+                . ldap_error_name( $result->code ) . "\n" );
+        }
+    }
+
+    my $homedir = $entry->get_value('homeDirectory');
+    if ( ( ( stat($homedir) )[2] & 07777 ) == 00000 ) {
+        debug_msg(
+"User $user_login is allready disabled by homedirectory permissoions:"
+            . ldap_error_text( $result->code ) . "\n" );
+    }
+    else {
+        my $ret = chmod 0000, $homedir;
+        if ( $ret != 1 ) {
+            debug_msg("Error deactivating user's homedirectory! $homedir \n");
+        }
+    }
+    $g{modified} = 1;
+    return 1;
+}
+
+sub ldap_enable_user_login {
+    my ( $user_login, $rootpw ) = @_;
+    my $result = $g{ldap}->bind( $g{rootdn}, 'password' => $rootpw );
+    if ( $result->code ) {
+        error_msg( "Could not bind to ldap server! "
+            . ldap_error_name( $result->code ) . ": "
+            . ldap_error_text( $result->code ) . "\n" );
+        return undef;
+    }
+
+    my $base   = "ou=People," . $g{basedn};
+    my $filter = "(&(objectClass=posixAccount)(uid=$user_login))";
+
+    $result = $g{ldap}->search( base => $base, filter => $filter );
+
+    my $entry = $result->pop_entry;
+    if ( $result->code or !$entry ) {
+        debug_msg( "No such user \"$user_login\" found:"
+            . ldap_error_text( $result->code ) . "\n" );
+        return undef;
+    }
+
+    if ( $config{sambasync} ){
+	system( "smbpasswd -e $user_login  >/dev/null 2>&1" );
+    }
+
+    my $inactive_flag = $entry->get_value('shadowFlag');
+    unless ($inactive_flag) {
+        debug_msg( "User $user_login is allready ldap-enabled:"
+            . ldap_error_text( $result->code ) . "\n" );
+    }
+    else {
+        $result =
+          $g{ldap}->modify( $entry,
+            changes => [ delete => [ 'shadowFlag' => 1 ] ] );
+        if ( $result->code ) {
+            debug_msg( "Error enabling user! "
+                . ldap_error_name( $result->code ) . "\n" );
+        }
+    }
+
+    my $homedir = $entry->get_value('homeDirectory');
+    if ( ( ( stat($homedir) )[2] & 07777 ) == 00755 ) {
+        debug_msg( "User $user_login is allready enabled for the homedir:"
+            . ldap_error_text( $result->code ) . "\n" );
+    }
+    else {
+        my $ret = chmod 0755, $homedir;
+        if ( $ret != 1 ) {
+            debug_msg("Error enabling user's home directory $homedir!\n");
+        }
+    }
+
+    my $shell = $entry->get_value('loginShell');
+    unless ( $shell =~ /^DISABLED!(.*)$/ ) {
+        debug_msg("User $user_login is allready enabled on shell level.");
+    }
+    else {
+        $shell  = $1;
+        $result =
+          $g{ldap}->modify( $entry,
+            changes => [ replace => [ 'loginShell' => $shell ] ] );
+        if ( $result->code ) {
+            debug_msg( "Error enabling user's shell $shell! "
+                . ldap_error_name( $result->code ) . "\n" );
+        }
+    }
+
+    my $passwd = $entry->get_value('userPassword');
+    unless ( $passwd =~ /^DISABLED!(.*)$/ ) {
+        debug_msg("User $user_login is allready enabled on shell level.");
+    }
+    else {
+        $passwd = $1;
+        $result =
+          $g{ldap}->modify( $entry,
+            changes => [ replace => [ 'userPassword' => $passwd ] ] );
+        if ( $result->code ) {
+            debug_msg( "Error enabling user's shell $shell! "
+                . ldap_error_name( $result->code ) . "\n" );
+        }
+    }
+    $g{modified} = 1;
+    return 1;
+}
+
+sub ldap_search_user_disabled_logins {
+    my ( $searchin, $searchfor ) = @_;
+    my ( $ou, $oc, $attribut );
+
+    my $filter_fix =
+      "&(shadowFlag=1)(!(|(groupType=private)(cn=admin)(cn=nextID)))";
+    
+    unless ($searchin) {
+        goto error_exit;
+    }
+    elsif ( $searchin eq "class_cn" ) {
+	my @uids; 
+	my($msg, @list) = ldap_search($searchin, $searchfor);
+	return  ( "EMPTY", undef ) if $msg ne "OK";
+	for my $class (@list){
+	    push @uids, $class->get_value("memberUID");
+	}
+	my $filter_append;
+	for my $uid ( unique( @uids ) ){
+	    $filter_append .= "(uid=$uid)";      
+	}
+	$filter_fix .= "(|$filter_append)" if $filter_append;
+        $oc       = "posixAccount";
+        $attribut = "uid";
+        $ou       = "ou=People,";
+    }
+    elsif ( $searchin eq "user_login" ) {
+        $oc       = "posixAccount";
+        $attribut = "uid";
+        $ou       = "ou=People,";
+    }
+    elsif ( $searchin eq "user_cn" ) {
+        $oc       = "posixAccount";
+        $attribut = "cn";       #XXX cn ist nicht unique!!!
+        $ou       = "ou=People,";
+    }
+    else {
+        error_exit:
+        return ( "illegal search type\n", undef );
+    }
+    unless ( $searchfor and $searchfor =~ /\*/ ) {
+        $searchfor .= "*";    #XXX quick fix, make this an exact search instead.
+    }
+    my $base       = $ou . $g{basedn};
+    my $filter_var = "$attribut=$searchfor";
+    my ( $slice_ref, $filters_applied ) =
+      get_slice( $base, $filter_fix, $filter_var );
+    if ( $slice_ref->[0] and $slice_ref->[0]->get_value('cn') ) {
+        return ( "OK", @{$slice_ref} );
+    }
+    else {
+        return ( "EMPTY", undef );
+    }
+}
+
+sub ldap_get_group_login_status{
+    my ( $cn ) = @_;
+
+    my $base       = "ou=People," . $g{basedn};
+    my $filter_var = "uid=*";
+
+    my $group = ldap_get_group($cn);
+    my @uids = $group->get_value("memberUID");
+    
+    my $filter_append;
+    for my $uid ( unique( @uids ) ){
+	$filter_append .= "(uid=$uid)";      
+    }
+
+    my ($login_enabled_flag, $login_disabled_flag) = (undef, undef);
+    if ($filter_append) {
+	my $filter_fix = "&(!(shadowFlag=1))(|$filter_append)"; 
+	my ( $slice_ref, $filters_applied ) =
+	    get_slice( $base, $filter_fix, $filter_var );
+	if ( $slice_ref->[0] and $slice_ref->[0]->get_value('cn') ) {
+	    $login_enabled_flag = "1";
+	}
+
+	$filter_fix = "&(shadowFlag=1)(|$filter_append)"; 
+	( $slice_ref, $filters_applied ) =
+	    get_slice( $base, $filter_fix, $filter_var );
+	if ( $slice_ref->[0] and $slice_ref->[0]->get_value('cn') ) {
+	    $login_disabled_flag = "1";
+	}
+    }
+    return ($login_enabled_flag, $login_disabled_flag);
+}
+
+sub ldap_search_group_disabled_logins
+{    # this wont work like this, need to loop over all users in group
+    my ($searchfor) = @_;
+    my $base       = "ou=People," . $g{basedn};
+    my $filter_fix = "&(userPassword=\!*)(gidNumber=$searchfor)";
+    my $filter_var = "uid=*";
+    my ( $slice_ref, $filters_applied ) =
+      get_slice( $base, $filter_fix, $filter_var );
+    return @{$slice_ref};
+}
+
+sub ldap_search_user_enabled_logins {
+    my ( $searchin, $searchfor ) = @_;
+    my ( $oc, $ou, $attribut );
+
+    my $filter_fix =
+      "&(!(shadowFlag=1))(!(|(groupType=private)(cn=admin)(cn=nextID)))";
+
+    unless ($searchin) {
+        goto error_exit;
+    }
+    elsif ( $searchin eq "class_cn" ) {
+	my @uids; 
+	my($msg, @list) = ldap_search($searchin, $searchfor);
+	return  ( "EMPTY", undef ) if $msg ne "OK";
+	for my $class (@list){
+	    push @uids, $class->get_value("memberUID");
+	}
+	my $filter_append;
+	for my $uid ( unique( @uids ) ){
+	    $filter_append .= "(uid=$uid)";      
+	}
+	$filter_fix .= "(|$filter_append)" if $filter_append;
+        $oc       = "posixAccount";
+        $attribut = "uid";
+        $ou       = "ou=People,";
+    }
+    elsif ( $searchin eq "user_login" ) {
+        $oc       = "posixAccount";
+        $attribut = "uid";
+        $ou       = "ou=People,";
+    }
+    elsif ( $searchin eq "user_cn" ) {
+        $oc       = "posixAccount";
+        $attribut = "cn";       #XXX cn ist nicht unique!!!
+        $ou       = "ou=People,";
+    }
+    else {
+        error_exit:
+        return ( "illegal search type\n", undef );
+    }
+    unless ( $searchfor and $searchfor =~ /\*/ ) {
+        $searchfor .= "*";    #XXX quick fix, make this an exact search instead.
+    }
+    my $base       = $ou . $g{basedn};
+    my $filter_var = "$attribut=$searchfor";
+    my ( $slice_ref, $filters_applied ) =
+      get_slice( $base, $filter_fix, $filter_var );
+    if ( $slice_ref->[0] and $slice_ref->[0]->get_value('cn') ) {
+        return ( "OK", @{$slice_ref} );
+    }
+    else {
+        return ( "EMPTY", undef );
+    }
+}
+
+sub ldap_search_group_enabled_logins
+{    # this wont work like this, need to loop over all users in group
+    my ($searchfor) = @_;
+    my $base       = "ou=People," . $g{basedn};
+    my $filter_fix = "&(!userPassword=!*)(gidNumber=$searchfor)";
+    my $filter_var = "uid=*";
+    my ( $slice_ref, $filters_applied ) =
+      get_slice( $base, $filter_fix, $filter_var );
+    return @{$slice_ref};
+}
+
+# Get all groups in a domain $basedn.
+sub ldap_get_groups {
+    my ($group_type) = @_;
+
+    my $base       = "ou=Group," . $g{basedn};
+    my $filter_fix = "&(objectClass=lisGroup)";
+    if ($group_type) {
+        $filter_fix .= "(groupType=$group_type)";
+    }
+    my $filter_var = "cn=*";
+    my ( $slice_ref, $filters_applied ) =
+      get_slice( $base, $filter_fix, $filter_var );
+
+    return @{$slice_ref};
+}
+
+# Get all groups a user $uid is member of, given a domain $basedn.
+sub ldap_get_membergroups {
+    my ($uid) = @_;
+
+    my $base       = "ou=Group," . $g{basedn};
+    my $filter_fix = "&(objectClass=lisGroup)(|(memberUid=$uid)(member=uid=$uid,ou=People,".$g{basedn}."))";
+    my $filter_var = "cn=*";
+    my ( $slice_ref, $filters_applied ) =
+      get_slice( $base, $filter_fix, $filter_var );
+
+    return @{$slice_ref};
+}
+
+# this is a more general function for retrieving a 
+# list of groups a user is a member of with more 
+# finegrained search criteria.
+sub ldap_get_member_grouplist {
+    my ( $uid, $grouptype ) = @_;
+
+    my $base       = "ou=Group," . $g{basedn};
+    my $filter_fix =
+      "&(objectClass=lisGroup)(memberUid=$uid)(groupType=$grouptype)";
+    my $filter_var = "cn=*";
+    my ( $slice_ref, $filters_applied ) =
+      get_slice( $base, $filter_fix, $filter_var );
+
+    return @{$slice_ref};
+}
+
+sub ldap_get_not_member_grouplist {
+    my ( $uid, $grouptype ) = @_;
+
+    my $base       = "ou=Group," . $g{basedn};
+    my $filter_fix =
+      "&(objectClass=lisGroup)(groupType=$grouptype)(!(memberUid=$uid))";
+    my $filter_var = "cn=*";
+    my ( $slice_ref, $filters_applied ) =
+      get_slice( $base, $filter_fix, $filter_var );
+
+    return @{$slice_ref};
+}
+
+# takes gidNumber, returns list of complete user entries
+sub ldap_get_member_userlist {
+    my ($gidNumber) = @_;
+
+    my @list;
+    my $base   = "ou=Group," . $g{basedn};
+    my $filter = "(&(objectClass=lisGroup)(gidNumber=$gidNumber))";
+    my $mesg   = $g{ldap}->search( base => $base, filter => $filter );
+    my $entry  = $mesg->pop_entry;
+    unless ($entry) { return undef }
+    my @uids = $entry->get_value("memberUid");
+
+    for my $uid (@uids) {
+        my $user = ldap_get_user($uid);
+        push @list, $user;
+    }
+    return @list;
+}
+
+# Exemple ageGroup structure:
+# dn: cn=year2009,ou=Group,dc=skole
+# cn: exampleAgeGroup
+# memberUid: bernd     this is the user's uid
+# memberUid: kalle       ... teachers are in several age groups
+# ageGroup: mathe2     this is the group's cn
+# ageGroup: physics2     ... these classes are suitable for students that age
+
+# A Generic AgeGroup "GeAGroup" would contain both all students 
+# and all classes applicable for all students, regardless their age.
+
+# between schoolyears pupils and teachers are removed 
+# from their classes and moved to their new classes:
+# 1) the ageGroup attributes (reflecting the groups/classes) 
+#    are moved down to the following ageGroup
+# 2) the users are removed from those moved groups 
+#    and added to similar groups, which names index is increased by one,
+#    if those exist.
+# (this is done in step 1) those groups are then added to the ageGroup group
+#
+# one could search for missing groups in a step early in the 
+# process and offer to create those groups/abort.
+
+# get all users who are not yet members in a group
+sub ldap_get_not_member_userlist {
+    my ($gidNumber) = @_;
+
+    # we need to get all users who are part of the 
+    # ageGroups but not of the gid. 
+    # first get all users in $gidNumber 
+    my @list;
+    my $base   = "ou=Group," . $g{basedn};
+    my $filter = "(&(objectClass=lisGroup)(gidNumber=$gidNumber))";
+    my $mesg   = $g{ldap}->search( base => $base, filter => $filter );
+    my $entry  = $mesg->pop_entry;
+    unless ($entry) { return undef }
+    my @black_list = $entry->get_value("memberUid");
+    my $cn         = $entry->get_value("cn");
+
+=head1
+    # find the age groups this group is part of.
+    $base = "ou=Group," . $g{basedn};
+    my $filter_fix = "&(groupType=age_group)(ageGroup=$cn)";
+    my $filter_var = "cn=*";
+    my ( $slice_ref, $filters_applied ) =
+      get_slice( $base, $filter_fix, $filter_var );
+    if ( -1 == $#$slice_ref ) {
+
+        # this group is not part of an ageGroup, 
+        # use the worst case (generic ageGroup) instead.
+        my $filter = "(&(objectClass=lisGroup)(cn=genagegp))";
+        my $mesg   = $g{ldap}->search( base => $base, filter => $filter );
+        my $entry  = $mesg->pop_entry;
+        $slice_ref = [$entry];
+    }
+
+    # from those age groups use all users
+    # put them in a hash, for faster access and to "uniq" them
+    my %all_uids;
+    for my $group (@$slice_ref) {
+        for my $uid ( $group->get_value("memberUid") ) {
+            $all_uids{$uid} = 1;
+        }
+    }
+
+    # remove the users in the blacklist
+    for my $uid (@black_list) {
+        delete $all_uids{$uid};    # if ( $all_uids{$uid} );
+    }
+
+    my $filter_fix_append;
+
+    # we now have the uids of the wanted users ready, 
+    # but we need to get their complete entries
+    # therefor we get all user entries   
+    for my $uid ( keys %all_uids ) {
+        $filter_fix_append .= "(uid=$uid)";
+    }
+    $base = "ou=People," . $g{basedn};
+    if ($filter_fix_append) {
+        $filter_fix = "&(objectClass=posixAccount)(|$filter_fix_append)";
+    }
+    else {
+        return undef;
+
+        #$filter_fix = "&(objectClass=posixAccount)";
+    }
+    ( $slice_ref, $filters_applied ) =
+      get_slice( $base, $filter_fix, $filter_var );
+    return @{$slice_ref};
+=cut
+
+    #make blacklist a hash, for faster access
+    my (%blacklist, $blacklist_filter);
+    for my $uid (@black_list) {
+        $blacklist{$uid} = 1;    
+	$blacklist_filter .= "(uid=$uid)";
+    }
+    
+    # Get all users.
+    $base = "ou=People," . $g{basedn};
+    my $filter_fix = "&(objectClass=posixAccount)";
+    unless ( -1 == $#black_list ) {
+	$filter_fix .= "(!(|$blacklist_filter))";
+    }
+    my $filter_var = "uid=*";
+    my ( $slice_ref, $filters_applied ) =
+      get_slice( $base, $filter_fix, $filter_var );
+  
+    return @$slice_ref;
+
+#    my @ret_list;
+#    # remove the users in the blacklist
+#    for my $user (@$slice_ref) {
+#        my $uid = $user->get_value("uid");  
+#        unless ( $blacklist{$uid} ) {
+#            push @ret_list, $user;
+#        }
+#    }
+#    
+#    return @ret_list;
+}
+
+# Get all groups a user $uid is not member of, given a domain $basedn.
+sub ldap_get_not_membergroups {
+    my ($uid) = @_;
+    my @notGroups;
+
+    my $grpBase    = "ou=Group,"  . $g{basedn};
+    my $actBase    = "ou=People," . $g{basedn};
+    my $filter_fix = "&(objectClass=lisGroup)(!(memberUid=$uid))";
+    my $filter_var = "cn=*";
+    my ( $slice_ref, $filters_applied ) =
+      get_slice( $grpBase, $filter_fix, $filter_var );
+
+    foreach my $group ( @{$slice_ref} ) {
+        my $gidNumber = $group->get_value('gidNumber');
+        my $filter    = "(&(objectClass=posixAccount)(gidNumber=$gidNumber))";
+        my $privGroup = $g{ldap}->search(
+            base   => $actBase,
+            filter => $filter
+        );
+        my $didfindgroup = $privGroup->count();
+        unless ($didfindgroup) {
+            push ( @notGroups, $group );
+        }
+    }
+    return @notGroups;
+}
+
+# In a domain $basedn, get data about a user $uid. 
+# If user is not found, undef is returned.
+sub ldap_get_user {
+    my ($uid) = @_;
+
+    my $base   = "ou=People," . $g{basedn};
+    my $filter = "uid=$uid";
+
+    my $mesg = $g{ldap}->search( base => $base, filter => $filter );
+    error_msg( "ldap_get_user: " . ldap_error_text( $mesg->code ) . "\n" )
+      if $mesg->code;
+
+    return $mesg->pop_entry;
+}
+
+# In a domain $basedn, get data about a user $uid. 
+# If user is not found, undef is returned.
+
+sub ldap_get_old_user {
+    my ($uid) = @_;
+
+    my $base   = "ou=Attic," . $g{basedn};
+    my $filter = "uid=$uid";
+
+    my $mesg = $g{ldap}->search( base => $base, filter => $filter );
+    error_msg( "ldap_get_user: " . ldap_error_text( $mesg->code ) . "\n" )
+      if $mesg->code;
+
+    return $mesg->pop_entry;
+}
+
+# Returns if the group $gidNumber exists in domain $basedn.
+sub ldap_group_exists {
+    my ($gid) = @_;
+
+    my $mesg = $g{ldap}->search(
+        base   => "ou=Group," . $g{basedn},
+        filter => "cn=$gid"
+    );
+    debug_msg( "ldap_group_exists: " . ldap_error_name( $mesg->code ) . "\n" )
+      if $mesg->code;
+    return $mesg->count();
+}
+
+# Returns if a given (group or user)-id exists in domain $basedn.
+sub ldap_id_exists {
+    my ($id) = @_;
+    my $base = "ou=Group," . $g{basedn};
+
+    my $mesg = $g{ldap}->search( base => $base, filter => "gidNumber=$id" );
+    debug_msg( "ldap_id_exists: " . ldap_error_name( $mesg->code ) . "\n" )
+      if $mesg->code;
+    unless ( $mesg->count() ) {    # usually we should not need to do this,
+            # because UID and GID are likely the same for users.
+        $mesg = $g{ldap}->search( base => $base, filter => "uidNumber=$id" );
+        debug_msg( "ldap_id_exists: " . ldap_error_name( $mesg->code ) . "\n" )
+          if $mesg->code;
+    }
+    return $mesg->count();
+}
+
+# Returns the name of a group $gid in the domain $basedn,
+# or the string "(not in ldap)" if the group is not found.
+sub ldap_get_groupname {
+    my ($gidNumber) = @_;
+
+    my $mesg = $g{ldap}->search(
+        base   => "ou=Group," . $g{basedn},
+        filter => "gidNumber=$gidNumber",
+        attrs  => "cn",
+    );
+    debug_msg( "ldap_get_groupname: " . ldap_error_name( $mesg->code ) . "\n" )
+      if $mesg->code;
+
+    return "(not in ldap)" unless ( $mesg->count() );
+
+    my $entry = $mesg->pop_entry;
+    return $entry->get_value('cn');
+}
+
+# Returns the group $gid in the domain $basedn,
+# or undef if the group is not found.
+sub ldap_get_group {
+    my ($cn) = @_;
+
+    my $mesg = $g{ldap}->search(
+        base   => "ou=Group," . $g{basedn},
+        filter => "cn=$cn"
+    );
+    debug_msg( "ldap_get_groupname: " . ldap_error_name( $mesg->code ) . "\n" )
+      if $mesg->code;
+
+    return $mesg->pop_entry;
+}
+
+# Returns the description of the $gid in the domain $basedn,
+# or the string "(not in ldap)" if the group is not found.
+sub ldap_get_groupdescription {
+    my ($gidNumber) = @_;
+
+    my $mesg = $g{ldap}->search(
+        base   => "ou=Group," . $g{basedn},
+        filter => "gidNumber=$gidNumber",
+        attrs  => "cn",
+    );
+    debug_msg(
+        "ldap_get_groupdescription: " . ldap_error_name( $mesg->code ) . "\n" )
+      if $mesg->code;
+
+    return "(not in ldap)" unless ( $mesg->count() );
+
+    my $entry = $mesg->pop_entry;
+    return $entry->get_value('description');
+}
+
+sub ldap_find_current_id {
+
+    my @list  = ldap_get_groups();
+    my $maxid = $g{minid};
+    while (@list) {
+        my $entry = pop @list;
+        my $id    = $entry->get_value('gidNumber');
+        $maxid = $id if ( $id > $maxid );
+    }
+
+    @list = ldap_get_users();
+    while (@list) {
+        my $entry = pop @list;
+        my $id    = $entry->get_value('gidNumber');
+        $maxid = $id if ( $id > $maxid );
+        $id = $entry->get_value('uidNumber');
+        $maxid = $id if ( $id > $maxid );
+    }
+
+    return $maxid;
+}
+
+sub ldap_create_entry_nextid {
+
+    my $entry = Net::LDAP::Entry->new();
+    $entry->dn( "ou=Variables," . $g{basedn} );
+    $entry->add(
+        objectclass => [ 'organizationalUnit', 'top' ],
+        ou          => "Variables"
+    );
+    $entry->update( $g{ldap} );
+    $entry = Net::LDAP::Entry->new();
+    $entry->dn( "cn=nextID,ou=Variables," . $g{basedn} );
+    my $current_id = ldap_find_current_id();
+    $entry->add(
+        objectclass => [ 'posixGroup', 'top' ],
+        cn          => "nextID",
+        gidNumber   => $current_id,
+    );
+    ldap_update( $entry );
+
+}
+
+# looks up cn=nextID,ouVariables,$basedn to get the new ID it should use
+# function fetched from http://www.ccie.org.uk/resources/newuid.html 
+# function somewhat rewritten to suit our needs
+sub ldap_get_newid {
+    my ($rootpw) = @_;
+    my $loop = 2;
+    my ( $result, $object, $newid );
+    my $minid = $g{minid};
+    my $maxid = $g{maxid};
+    my $base  = "ou=variables," . $g{basedn};
+
+    $result = $g{ldap}->bind( $g{rootdn}, 'password' => $rootpw );
+    if ( $result->code ) {
+        error_msg( "Could not bind to ldap server! "
+            . ldap_error_name( $result->code ) . ": "
+            . ldap_error_text( $result->code ) . "\n" );
+        return undef;
+    }
+
+    while ($loop) {
+        $result = $g{ldap}->search(
+            base   => $base,
+            filter => "cn=nextID"
+        );
+        $object = $result->pop_entry;
+        if ( $result->code or !$object ) {
+
+            # It the Search Fails it's most likely that this is an old
+            # installation, with a missing dn=nextID, ou=Variables
+            debug_msg( "Need to generate nextID!:"
+                . ldap_error_text( $result->code ) . "\n" );
+            ldap_create_entry_nextid();
+
+            # Okay , try searching again
+            $result = $g{ldap}->search(
+                base   => $base,
+                filter => "cn=nextID"
+            );
+            $object = $result->pop_entry;
+        }
+
+        if ($object) {
+            $newid = $object->get_value('gidnumber');
+            debug_msg("Got a valid nextID: $newid !\n");
+        }
+        else {
+            debug_msg( "Got no nextID! Quit trying?!?"
+                . ldap_error_text( $result->code ) . "\n" );
+            undef $newid;
+            last;
+        }
+        debug_msg("Increasing nextID!\n");
+        $result = $g{ldap}->modify(
+            $object,
+            changes => [
+                delete => [ 'gidNumber' => $newid ],
+                add    => [ 'gidNumber' => $newid + 1 ]
+            ]
+        );
+        if ( $result->code
+            || getpwuid($newid)
+            || getgrgid($newid)
+            || ldap_id_exists($newid)
+            || ( $newid > $maxid )
+            || ( $newid < $minid ) )
+        {
+            debug_msg( "Something suspicous happend while increasing nextID! "
+                . ldap_error_name( $result->code ) . "\n" );
+            if ( ( $newid gt $maxid ) || ( $newid lt $minid ) ) {
+                unless ($loop) {
+                    error_msg("nextID out of bounds. But quit tying.\n");
+                    undef $newid;
+                    last;
+                }
+                debug_msg(
+"now attempt to set nextID, since it was out of bounds: $minid, $maxid\n"
+                );
+                $result = $g{ldap}->modify(
+                    $object,
+                    changes => [
+                        delete => [ 'gidNumber' => $newid + 1 ],
+                        add    => [ 'gidNumber' => $minid ]
+                    ]
+                );
+                if ( $result->code ) {
+                    debug_msg(
+                        "Something suspicous happend while setting nextID! "
+                        . ldap_error_name( $result->code ) . "\n" );
+                }
+                $loop--;
+            }
+            debug_msg("Race Condition? Need to try again!\n");
+            undef $newid;
+            usleep( int( rand(500) ) );
+        }
+        else {
+            debug_msg("I think i succeeded getting a nextID!\n");
+            last;
+        }
+    }
+    debug_msg("Returning now $newid!\n");
+    $g{modified} = 1;
+    return ($newid);
+}
+
+# Add a user to LDAP.
+sub ldap_add_user {
+    my (
+        $cn,        $uid,       $userpw,
+        $uidNumber, $gidNumber, $rootpw,
+        $homedir,   $maildir,   $userpw_crypt
+      )
+      = @_;
+
+    # if there is no given crypt-hash generate it
+    unless ( $userpw_crypt ) {
+        $userpw_crypt = gen_crypt($userpw);
+    }
+
+    debug_msg("Trying to add this users: uidNumber:$uidNumber  uid:$uid!\n");
+    $g{ldap}->bind( $g{rootdn}, password => $rootpw );    #XXX no error check!
+    my $entry     = Net::LDAP::Entry->new();
+    my $new_entry = "uid=$uid,ou=People," . $g{basedn};
+    $entry->dn($new_entry);
+    $entry->add(
+        objectclass   => [ 'posixAccount', 'top', 'shadowAccount', 'imapUser' ],
+        cn            => $cn,
+        uid           => $uid,
+        uidNumber     => $uidNumber,
+        gidNumber     => $gidNumber,
+        homeDirectory => $homedir,
+        mailMessageStore => $maildir,
+        userPassword     => "{crypt}" . $userpw_crypt,
+        loginShell       => "/bin/bash",
+    );
+
+    return ldap_update($entry);
+}
+
+# Add a machine to LDAP.
+sub ldap_add_machine {
+    my (
+        $cn,        $uid,  , $uidNumber,
+        $gidNumber, $rootpw, 
+	)
+	= @_;
+    
+    debug_msg("Trying to add this machine: uidNumber:$uidNumber  uid:$uid!\n");
+    $g{ldap}->bind( $g{rootdn}, password => $rootpw );
+    my $entry     = Net::LDAP::Entry->new();
+    my $new_entry = "uid=$uid,ou=Machines,ou=People," . $g{basedn};
+    $entry->dn($new_entry);
+    $entry->add(
+		objectclass   => [ 'posixAccount', 'top', 'account'],
+		cn            => $cn,
+		uid           => $uid,
+		uidNumber     => $uidNumber,
+		gidNumber     => $gidNumber,
+		homeDirectory => "/dev/null",
+		loginShell       => "/bin/false",
+		);
+    
+    return ldap_update($entry);;
+}
+
+# Change an attribute $attr to the value $value for the user $uid.
+sub ldap_mod_user {
+    my ( $uid, $rootpw, $attr, $value ) = @_;
+
+    $g{ldap}->bind( $g{rootdn}, password => $rootpw );
+    $g{ldap}->modify( "uid=$uid,ou=People," . $g{basedn},
+        replace => { $attr => "$value" } );
+    $g{modified} = 1;
+}
+
+# Change many attributes/value pairs in the 
+#   hash-ref $changes_ref for the user $uid.
+sub ldap_modify_user {
+    my ( $uid, $changes_ref, $rootpw ) = @_;
+
+    my %additions;    # this is for new fields in the ldap-entry
+    my $user = ldap_get_user($uid);
+
+    for my $key ( keys %$changes_ref ) {
+        unless ( $user->get_value($key) ) {
+	    next if ( $key eq "userPassword" );
+            $additions{$key} = $changes_ref->{$key};
+            delete $changes_ref->{$key};
+        }
+    }
+    my $auth_msg = $g{ldap}->bind( $g{rootdn}, password => $rootpw );
+    return "auth_failed" if $auth_msg->code();
+    
+
+    my $mesg = $g{ldap}->modify(
+        "uid=$uid,ou=People," . $g{basedn}, replace => $changes_ref,
+        add => \%additions
+    );
+    $g{modified} = 1;
+    error_msg( "ldap_modify_user Error: "
+        . ldap_error_name( $mesg->code ) . " "
+        . ldap_error_text( $mesg->code ) . " " )
+      if ( $mesg->code );
+    return undef;
+}
+
+# Change attributes/value pairs in the 
+#   hash-ref $changes_ref for the group $gidNumber.
+sub ldap_modify_group {
+    my ( $cn, $changes_ref, $rootpw ) = @_;
+
+    my %additions;    # this is for new fields in the ldap-entry
+    my $group = ldap_get_group($cn);
+    for my $key ( keys %$changes_ref ) {
+        unless ( $group->get_value($key) ) {
+            $additions{$key} = $changes_ref->{$key};
+            delete $changes_ref->{$key};
+        }
+    }
+    $g{ldap}->bind( $g{rootdn}, password => $rootpw );
+
+    if ( keys %additions ) {
+        my $mesg =
+          $g{ldap}->modify( "cn=$cn,ou=Group," . $g{basedn},
+            add => \%additions );
+        error_msg( "ldap_modify_user Error: "
+            . ldap_error_name( $mesg->code ) . " "
+            . ldap_error_text( $mesg->code ) . " " )
+          if ( $mesg->code );
+    }
+    if ( keys %$changes_ref ) {
+        my $mesg =
+          $g{ldap}->modify( "cn=$cn,ou=Group," . $g{basedn},
+            replace => $changes_ref );
+        error_msg( "ldap_modify_user Error: "
+            . ldap_error_name( $mesg->code ) . " "
+            . ldap_error_text( $mesg->code ) . " " )
+          if ( $mesg->code );
+    }
+    $g{modified} = 1;
+}
+
+# Make a new group $gid, with number $gidNumber, to LDAP.
+sub ldap_add_group {
+    my ( $cn, $gidNumber, $rootpw, $type, 
+#         $age_groups_ref, 
+         $description ) = @_;
+
+    if( getgrnam( $cn ) ) {
+	error_msg("Group $cn exists allready. ");
+	return undef;
+    } 
+
+    unless ($type)        { $type        = "dontcare" }
+    unless ($description) { $description = "dontcare" }
+    
+    $g{ldap}->bind( $g{rootdn}, password => $rootpw );
+    my $entry = Net::LDAP::Entry->new();
+    $entry->dn( "cn=$cn,ou=Group," . $g{basedn} );
+    
+    if ( $type eq "authority_group" ) {
+        $entry->add(
+            objectclass => [ 'lisAclGroup', 'top', 'lisGroup' ],
+            cn          => $cn,
+            gidNumber   => $gidNumber,
+            groupType   => $type,
+            description => $description,
+            member => "cn=admin,ou=People," . $g{basedn},
+        );
+    }
+    else {
+        $entry->add(
+            objectclass => [ 'posixGroup', 'top', 'lisGroup' ],
+            cn          => $cn,
+            gidNumber   => $gidNumber,
+            groupType   => $type,
+            description => $description,
+        );
+    }
+#    for my $age_group ( @{$age_groups_ref} ) {
+#        ldap_add_group_to_age_group( $cn, $age_group, $rootpw );
+#    }
+    return ldap_update($entry);
+}
+
+sub ldap_add_group_to_age_group {
+    my ( $cn, $age_group, $rootpw ) = @_;
+
+    my $mesg = $g{ldap}->search(
+        base   => $g{basedn},
+        filter => "(cn=$age_group)"
+    );
+
+    my $group_entry = $mesg->pop_entry;
+    return "agegroupdoesntexist" unless ($group_entry);
+
+    $g{ldap}->bind( $g{rootdn}, password => $rootpw );
+
+    my $group_type = $group_entry->get_value("grouptype");
+    if ( $group_type eq "age_group" ) {
+        $g{ldap}->modify(
+            "cn=$age_group,ou=Group," . $g{basedn},
+            add => { 'ageGroup' => "$cn" }
+        );
+	$g{modified} = 1;
+        return "groupaddedtoagegroup";
+    }
+    else {
+        return "targetgroupisnoagegroup";
+    }
+}
+
+sub ldap_update_age_groups {
+
+    # group cn wants to be member in all the 
+    # ageGroups given in $age_groups_ref
+    my ( $cn, $age_groups_ref, $rootpw ) = @_;
+
+    my %age_groups_target;
+    for (@$age_groups_ref) {
+        $age_groups_target{$_} = 1;
+    }
+
+    for my $entry ( ldap_find_age_groups($cn) ) {
+        my $cn_actual = $entry->get_value("cn");
+
+        # eliminate the groups which are correct allready.
+        if ( $age_groups_target{$cn_actual} ) {
+            delete $age_groups_target{$cn_actual};
+        }
+        else {
+
+            # delete the once that are not wanted anymore
+            ldap_del_group_from_age_group( $cn, $cn_actual, $rootpw );
+        }
+    }
+
+    # now we have the target groups left, 
+    # which need to be made member in the age groups
+    for my $cn_age_group ( keys %age_groups_target ) {
+        ldap_add_group_to_age_group( $cn, $cn_age_group, $rootpw );
+    }
+}
+
+sub ldap_find_age_groups {
+    my ($cn) = @_;
+
+    my $base       = $g{basedn};
+    my $filter_fix = "&(objectClass=lisGroup)(ageGroup=$cn)";
+    my $filter_var = "cn=*";
+    my ( $slice_ref, $filters_applied ) =
+      get_slice( $base, $filter_fix, $filter_var );
+
+    return @{$slice_ref};
+}
+
+sub ldap_del_group_from_age_group {
+    my ( $cn, $age_group, $rootpw ) = @_;
+
+    my $mesg = $g{ldap}->search(
+        base   => $g{basedn},
+        filter => "(&(cn=$age_group)(ageGroup=$cn))"
+    );
+
+    my $group_entry = $mesg->pop_entry;
+    return "no such agegroup with that membergroup exists"
+      unless ($group_entry);
+
+    $g{ldap}->bind( $g{rootdn}, password => $rootpw );
+
+    my $group_type = $group_entry->get_value("grouptype");
+    if ( $group_type eq "age_group" ) {
+        $g{ldap}->modify(
+            "cn=$age_group,ou=Group," . $g{basedn},
+            delete => { 'ageGroup' => "$cn" }
+        );
+	$g{modified} = 1;
+        return "groupdeletedfromagegroup";
+    }
+    else {
+        return "targetgroupisnoagegroup";
+    }
+}
+
+# Add a user $uid to group $gid.
+#strings returned correspond to strings in the lang/en file!
+sub ldap_add_user_to_group {
+    my ( $uid, $gid, $rootpw ) = @_;
+
+    my $mesg = $g{ldap}->search(
+        base   => $g{basedn},
+        filter => "(&(cn=$gid)(memberUid=$uid))"
+    );
+    return "useralreadymember" if ( $mesg->pop_entry );
+    $mesg = $g{ldap}->search(
+        base   => "ou=Group," . $g{basedn},
+        filter => "(cn=$gid)"
+    );
+    my $group_entry = $mesg->pop_entry;
+    return "groupdoesntexist" unless ($group_entry);
+    $g{ldap}->bind( $g{rootdn}, password => $rootpw );
+    my $group_type = $group_entry->get_value("grouptype");
+
+    if ( $group_type ne "authority_group" ) {
+        $g{ldap}->modify(
+            "cn=$gid,ou=Group," . $g{basedn},
+            add => { 'memberUid' => "$uid" }
+        );
+    }
+    else {
+        $g{ldap}->modify(
+            "cn=$gid,ou=Group," . $g{basedn},
+            add => {
+                'memberUid' => "$uid",
+                'member'    => "uid=$uid,ou=People," . $g{basedn},
+            }
+        );
+    }
+    $g{modified} = 1;
+    return "addedgroupuser";
+}
+
+# Delete a user $uid from group $gid. 
+sub ldap_del_user_from_group {
+    my ( $uid, $gid, $rootpw ) = @_;
+
+    my $mesg = $g{ldap}->search(
+        base   => "ou=Group," . $g{basedn},
+        filter => "(&(cn=$gid)(|(memberUid=$uid)(member=uid=$uid,ou=People,".$g{basedn}.")))"
+    );
+    my $group_entry = $mesg->pop_entry;
+    return "(not a member)" unless ($group_entry);
+    $g{ldap}->bind( $g{rootdn}, password => $rootpw );
+    my $group_type = $group_entry->get_value("grouptype");
+    if ( $group_type ne "authority_group" ) {
+        $mesg = $g{ldap}->modify(
+	    "cn=$gid,ou=Group," . $g{basedn},
+	    delete => { 'memberUid' => "$uid" }
+        );
+    }
+    else {
+        $mesg = $g{ldap}->modify(
+            "cn=$gid,ou=Group," . $g{basedn},
+            delete => {
+                'memberUid' => "$uid",
+                'member'    => "uid=$uid,ou=People," . $g{basedn},
+            }
+        );
+    }
+    $g{modified} = 1;
+    return "(User removed from group)";
+}
+
+# Delete a user $uid.
+sub ldap_delete_user {
+    my ( $uid, $rootpw ) = @_;
+    
+    $g{modified} = 1;
+    $g{ldap}->bind( $g{rootdn}, password => $rootpw );
+    my $result = $g{ldap}->delete( "uid=$uid,ou=People,".$g{basedn} );
+    return $result->code;    
+}
+
+# Move a user $uid to the attic.
+sub ldap_remove_user {
+    my ( $uid, $rootpw ) = @_;
+    
+    $g{modified} = 1;
+    $g{ldap}->bind( $g{rootdn}, password => $rootpw );
+    my $result = $g{ldap}->moddn( "uid=$uid,ou=People,".$g{basedn},
+                                  newrdn => "uid=$uid",
+                                  deleteoldrdn => 1,
+                                  newsuperior => "ou=Attic,".$g{basedn},
+                                  );
+    return $result->code;    
+}
+
+# Delete a group $gid.
+sub ldap_delete_group {
+    my ( $cn, $rootpw ) = @_;
+    $g{modified} = 1;
+    $g{ldap}->bind( $g{rootdn}, password => $rootpw );
+    my $msg = $g{ldap}->delete( "cn=$cn,ou=Group," . $g{basedn} );
+    return $msg->code;
+}
+
+# Print error message to browser if ldap_error.
+sub print_ldap_error {
+    my ( $errormsg, $result ) = @_;
+    my $output = $errormsg;
+    $output .= text('error') . ": \n";
+    $output .= ldap_error_name( $result->code ) . ": "
+      . ldap_error_text( $result->code );
+    return $output;
+}
+
+# Close the connetction to the LDAP server.
+sub ldap_close {
+    $g{ldap}->unbind() if $g{ldap};
+    if ($g{modified}) {
+	system ("nscd -i passwd >/dev/null 2>&1; nscd -i group >/dev/null 2>&1") 
+	    if( -e "/var/run/nscd.pid" );
+    }
+}
+
+sub ldap_update {
+    my( $entry ) = @_;
+    my $ret = $entry->update( $g{ldap} ) if $entry;
+    $g{modified} = 1;
+
+    return $ret;
+}
+
+# Encrypt a password.
+sub gen_crypt {
+    my ($plain) = @_;
+    my $salt;
+
+    # Get a truly random salt.
+    open FILE, "</dev/urandom";
+    sysread FILE, $salt, 2;
+    close FILE;
+
+    # If crypt needs salt to be a set of usable characters, uncomment this.
+    #   srand($salt);
+    #   $salt = chr(int(rand(97)) + 25).chr(int(rand(97)) + 25);
+    # Encrypt.
+    return crypt( $plain, $salt );
+
+}
+
+sub make_unique_username {
+    my ( $firstname, $lastname, $prefered_login ) = @_;
+    my @names = user_suggest_unames( $firstname, $lastname, $prefered_login );
+    unless ( @names > 0 ) {
+        error_msg("Found no suitable unames from '$firstname $lastname'.\n");
+        return undef;
+    }
+    return $names[0];
+}
+
+sub make_cn {
+    my ( $first_name, $last_name ) = @_;
+
+    my $cn = "$first_name";
+    $cn .= " $last_name" if ($last_name);
+    return $cn;
+}
+
+sub conv_name {
+    my ( $s, $alt ) = @_;
+
+
+    $s =~ s/[��]/ae/g;    # Different mapping of � and �,
+    $s =~ s/[��]/aa/g;    # used when creating usernames.
+    $s =~ s/[��]/ae/g;
+    $s =~ s/[��]/oe/g;
+    $s =~ s/[��]/ue/g;
+
+
+    # Vask bort ymse s�re tegn
+    $s =~ tr
+        (���������������������������������������������������������{[}]|�\\)
+        (AOAaooaAAAAACEEEEIIIINOOOOOUUUUYaaaaaceeeeiiiinooooouuuuyaAaAooO);
+    $s =~ s/�/Dh/g;
+    $s =~ s/�/dh/g;
+    $s =~ s/�/Th/g;
+    $s =~ s/�/th/g;
+    $s =~ s/�/ss/g;
+    $s =~ s/[\200-\377]/x/g;
+    $s =~ tr/A-Z/a-z/;
+    $s =~ s/[^a-zA-Z0-9 ]//g;
+    return $s;
+}
+
+sub user_suggest_unames {
+    my ( $fname, $lname, $prefered_login ) = @_;
+    my $initial;
+    my $firstinit;
+    my @potuname = ();
+    my $goal     = 1;    # minimum number of alternatives to find.
+
+    # to make this work with cn as input.
+    $lname = ( split ( / /, $fname ) )[-1] unless $lname;
+
+    push ( @potuname, $prefered_login ) 
+	if ( $prefered_login and validate_new_uname($prefered_login) );
+    my $complete_name = &conv_name( "$fname $lname", 1 );
+
+    # Remember just the first initials.
+
+    if ( $complete_name =~ /^(.*)[ -]+(\S+)\s+(\S+)$/ ) {
+
+        # at least three names
+        $firstinit = $1;
+        $firstinit =~ s/([- ])(\S)[^- ]*/$1$2/g;
+        $firstinit =~ s/^(\S).*?($|[- ])/$1/;
+        $firstinit =~ s/[- ]//g;
+    }
+
+    # Remove hyphens.  People called "Geir-Ove Johnsen Hansen" generally
+    # prefer "geirove" to just "geir".
+
+    $complete_name =~ s/-//g;
+
+    $complete_name =~ /^(\S+)?(.*\s+(\S)\S*)?\s+(\S+)?$/;
+    $fname = substr( $1, 0, 8 );
+    $initial = $3;
+    $lname   = substr( $4, 0, 8 );
+
+    # print "DEBUG: split into '$fname' '$initial' '$lname'\n";
+
+    $lname = $fname unless $lname;    # Sane behaviour if only one name.
+
+    # First try the obvious, first and last name.  Should be
+    # restricted to interactively created accounts (== usually
+    # non-student).
+
+    if (0) {
+        push ( @potuname, $fname ) if validate_new_uname($fname);
+        push ( @potuname, $lname ) if validate_new_uname($lname);
+    }
+
+    # For people with many names, we prefer to use all initials:
+    # Example:  Geir-Ove Johnsen Hansen
+    #           ffff fff i       llllll
+    # Here, firstinit is "GO" and initial is "J".
+    #
+    # gohansen gojhanse gohanse gojhans ... gojh goh
+    # ssllllll ssilllll sslllll ssillll     ssil ssl
+    #
+    # ("ss" means firstinit, "i" means initial, "l" means last name)
+
+    my ( $i, $j, $try );
+
+    if ( $firstinit && length($firstinit) > 1 ) {
+        $i = length($firstinit);
+        my $llen = length($lname);
+        $llen = 8 - $i if ( $llen > 8 - $i );
+        for ( $j = $llen ; $j > 0 ; $j-- ) {
+            $try = $firstinit . substr( $lname, 0, $j );
+            push ( @potuname, $try ) if validate_new_uname($try);
+            if ( $j > 1 && $initial ) {
+                $try = $firstinit . $initial . substr( $lname, 0, $j - 1 );
+                push ( @potuname, $try ) if validate_new_uname($try);
+            }
+            last if @potuname >= $goal;
+        }
+    }
+
+    # Now try different substrings from first and last name.
+    #
+    # geiroveh,
+    # fffffffl
+    # geirovh geirovha geirovjh,
+    # ffffffl ffffffll ffffffil
+    # geiroh geirojh geiroha geirojha geirohan,
+    # fffffl fffffil fffffll fffffill ffffflll
+    # geirh geirjh geirha geirjha geirhan geirjhan geirhans
+    # ffffl ffffil ffffll ffffill fffflll ffffilll ffffllll
+    # ...
+    # gjh gh gjha gha gjhan ghan ... gjhansen ghansen
+    # fil fl fill fll filll flll     fillllll fllllll
+
+    my $flen = length($fname);
+
+    $flen = 7 if $flen > 7;
+    for ( $i = $flen ; $i > 0 ; $i-- ) {
+        my $llim = length($lname);
+        $llim = 8 - $i if ( $llim > 8 - $i );
+        for ( $j = 1 ; $j <= $llim ; $j++ ) {
+            if ($initial) {
+
+                # Is there room for an initial?
+                if ( $j == $llim && $i + $llim < 8 ) {
+                    $try =
+                      substr( $fname, 0, $i ) . $initial
+                      . substr( $lname, 0, $j );
+                    push ( @potuname, $try ) if validate_new_uname($try);
+                }
+
+                # Is there room for an initial if we chop a letter off
+                # last name?
+                if ( $j > 1 ) {
+                    $try =
+                      substr( $fname, 0, $i ) . $initial
+                      . substr( $lname, 0, $j - 1 );
+                    push ( @potuname, $try ) if validate_new_uname($try);
+                }
+            }
+            $try = substr( $fname, 0, $i ) . substr( $lname, 0, $j );
+            push ( @potuname, $try ) if validate_new_uname($try);
+        }
+        last if @potuname >= $goal;
+    }
+
+    # Absolutely last ditch effort:  geirov1, geirov2 etc.
+
+    $i = 1;
+    $flen = 6 if $flen > 6;
+    while ( @potuname < $goal && $i < 100 ) {
+        $try = substr( $fname, 0, $flen ) . $i++;
+        push ( @potuname, $try ) if validate_new_uname($try);
+    }
+
+    return @potuname;
+}
+
+sub validate_new_uname {
+    my ($uname) = @_;
+
+    # We only allow numbers and lowercase letters
+    if ( $uname =~ m/[^a-z0-9]/ ) {
+        error_msg(  text( "login_illegal_chars", $uname ) );
+        return undef;
+    }
+    elsif ( length($uname) <= 1 ) {
+        error_msg(  text( "login_too_short" ) );
+        return undef;
+
+        #    } elsif (gethostbyname($uname)) {
+        #       debug_msg("Username `$uname' in use as hostname");
+        #       return undef;
+    }
+    elsif ( ldap_get_user($uname) ) {
+        error_msg( text( "login_allready_used", $uname ) );
+        return undef;
+    }
+    elsif ( getgrnam($uname) ) {
+        error_msg( text( "login_is_file_group", $uname ) );
+        return undef;
+    }
+    elsif ( ldap_get_group($uname) ) {
+        error_msg( text( "login_is_ldap_group", $uname ) );
+        return undef;
+    }
+    
+    elsif ( ldap_get_old_user($uname) ) {
+        error_msg( text ( "login_was_used", $uname ) );
+        return undef;
+    }
+    elsif ( getpwnam($uname) || grep { $_ eq $uname; }
+
+        qw(root bin daemon adm lp sync shutdown halt mail nobody
+        nobodyv ftp uucp uucpa auth cron core tcb ris wnn sys
+        nuucp hpdb opc_op predmail smbnull sysadm cmwlogin diag
+        auditor dbadmin sgiweb rfindd ezsetup demos outofbox
+        guest 4dgifts noaccess rpcuser teachers admins students 
+	jradmins)
+      )
+    {
+        error_msg("'$uname' is a system user.\n");
+        return undef;
+    }
+    elsif ( getpwnam($uname) || grep { $_ eq $uname; }
+
+        qw(shit fuck dimwit whore fuckwit)
+      )    # to be continued...
+    {
+        error_msg("'$uname' is a dirty word.\n");
+        return undef;
+    }
+    return 1;
+}
+
+sub error_msg {
+    my ($mesg) = @_;
+    push @{ $g{err} }, $mesg;
+}
+
+sub ldap_err_output {
+    my $ret;
+
+    while ( @{ $g{err} } ) {
+        $ret .= shift @{ $g{err} };
+    }
+    return $ret;
+}
+
+sub debug_msg {
+    my ($mesg) = @_;
+    push @{ $g{dbg} }, $mesg;
+}
+
+sub ldap_dbg_output {
+    my $ret;
+
+    while ( @{ $g{dbg} } ) {
+        $ret .= shift @{ $g{dbg} };
+    }
+    return $ret;
+}
+
+# this function does not at all belong in the ldap module. 
+# needs to go elsewhere later.
+sub read_adduser_config {
+    my $config_file = "/etc/adduser.conf";
+    read_file( $config_file, \%config );    # reuse a function from web-lib.pl
+         #now the config data is in the config hash. (c:
+
+}
+
+sub read_miniserv_config {
+    my $config_file = "/etc/webmin/miniserv.conf";
+    read_file( $config_file, \%config );    # reuse a function from web-lib.pl
+}
+
+1;
+
+__END__
diff --git a/debian-edu-config/share/debian-edu-config/tools/ldapdump.sh b/debian-edu-config/share/debian-edu-config/tools/ldapdump.sh
new file mode 100755
index 0000000..d2e0926
--- /dev/null
+++ b/debian-edu-config/share/debian-edu-config/tools/ldapdump.sh
@@ -0,0 +1,57 @@
+#!/bin/bash
+#
+# dumping the LDAP-database with slapcat into /var/backups/ldapdump.ldif
+#
+# $Id$
+#
+
+DUMPDIR=/var/backups/slapd
+DUMPFILE=$DUMPDIR/ldapdump.ldif
+TMPDUMPFILE=$DUMPDIR/ldapdump_tmp.ldif
+PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
+
+# if no dump catalog exists, make one; else
+# check that we have read/write access to it
+if [ ! -d "$DUMPDIR" ] ; then 
+    mkdir $DUMPDIR
+    chmod 0700 $DUMPDIR
+else
+    if [ ! -r "$DUMPDIR" -o ! -w "$DUMPDIR" ]; then
+	echo "No read- and/or writeaccess to $DUMPDIR, bailing out.."
+	exit 1
+    fi
+fi
+
+# do the LDAP-databasedump (slapcat)
+if [ -x /etc/init.d/slapd -a -x /usr/sbin/slapcat ]; then
+    /etc/init.d/slapd stop
+    /usr/sbin/slapcat -l $TMPDUMPFILE
+    SCRETVAL=$?
+    /etc/init.d/slapd start
+    if [ ! $SCRETVAL -eq 0 ]; then
+	echo "/usr/sbin/slapcat failed, bailing out."
+	exit 1
+    fi
+else
+    echo "Either /etc/init.d/slapd or /usr/sbin/slapcat was not executable."
+    echo "Bailing out.."
+    exit 1
+fi
+
+# check that the LDAP-dumpfile is larger than zero, then replace
+# the old dumpfile with the new one
+if [ -s "$TMPDUMPFILE" ]; then
+    if [ -f "$DUMPFILE" ]; then
+	if [ ! -w "$DUMPFILE" ]; then
+	    echo "We don't have write access to $DUMPFILE, bailing out.."
+	    exit 1
+	fi
+    fi
+    mv "$TMPDUMPFILE" "$DUMPFILE"
+    echo "Successfully dumped the LDAP-database to $DUMPFILE."
+else
+    echo "The LDAP-dump was zero-sized, bailing out.."
+    exit 1
+fi
+
+exit 0
diff --git a/debian-edu-config/share/debian-edu-config/tools/logoutkill.sh b/debian-edu-config/share/debian-edu-config/tools/logoutkill.sh
new file mode 100755
index 0000000..de71cd8
--- /dev/null
+++ b/debian-edu-config/share/debian-edu-config/tools/logoutkill.sh
@@ -0,0 +1,42 @@
+#!/bin/bash
+
+# $Id: logoutkill.sh,v 1.3 2004/04/25 21:38:12 pere Exp $
+# This script could be run from /etc/kde2/kdm/Xreset by adding the line 
+# '/usr/share/debian-edu-config/tools/logoutkill.sh $USER'
+# right before the line 
+# 'exit 0'
+
+
+KEEPONES="root USER daemon"
+USERLIMIT=10000
+
+if [ -f /etc/skolelinux/logoutkill.conf ] ; then 
+  mv /etc/skolelinux/logoutkill.conf /etc/debian-edu/logoutkill.conf
+fi 
+
+if [ -f /etc/debian-edu/logoutkill.conf ] ; then 
+  . /etc/debian-edu/logoutkill.conf
+fi 
+
+for EVERY in $KEEPONES ; do 
+  KEEP="${KEEP:+$KEEP|}^$EVERY"
+done
+
+USER=$1
+
+if [ -z "$USER" ] ; then 
+  echo -e "usage:\n\t$0 <username>"
+  exit 0
+fi
+
+ps auxw | grep ^$USER | grep -vE $KEEP | \
+  while read PUSER PID NULL ; do 
+    [ "$PUSER" = "$USER" -a $(id -u $PUSER) -ge $USERLIMIT ] && kill $PID ; 
+  done
+
+sleep 10
+  
+ps auxw | grep ^$USER | grep -vE $KEEP | \
+  while read PUSER PID NULL ; do 
+    [ "$PUSER" = "$USER" -a $(id -u $PUSER) -ge $USERLIMIT ] && kill -9 $PID ; 
+  done
diff --git a/debian-edu-config/share/debian-edu-config/tools/movehome b/debian-edu-config/share/debian-edu-config/tools/movehome
new file mode 100755
index 0000000..74bfafa
--- /dev/null
+++ b/debian-edu-config/share/debian-edu-config/tools/movehome
@@ -0,0 +1,45 @@
+#!/bin/bash
+# $Id: movehome,v 1.1 2004/03/27 14:23:48 finnarne-guest Exp $
+# This tools take 2 parameters
+# User name and the location of the new home directory
+# use at own risk
+
+
+UNAME=$1
+NEWHOME=$2
+
+DOMAIN="dc=skole,dc=skolelinux,dc=no"
+ADMIN="cn=admin,ou=People,$DOMAIN"
+
+if [ -z "$UNAME" -o -z "$NEWHOME" ] ; then 
+  echo "usage:\n\t$0 <username> <newhome>"
+  exit 9
+fi
+
+OLDHOME=$(getent passwd $1| cut -f6 -d:)
+
+if [ -z "$OLDHOME" -o ! -d "$OLDHOME" -o ! -d "$NEWHOME" ] ; then 
+  echo "please make sure thet $UNAME have a home, and that $NEWHOME exists"
+  exit 9
+fi
+
+if [ -d "$NEWHOME/$UNAME" ] ; then 
+  echo "sorry, $NEWHOME/$UNAME already exists"
+  exit 9
+fi
+
+
+mv "$OLDHOME" "$NEWHOME"
+
+cat <<EOF | ldapmodify -D "$ADMIN" -H "ldaps://ldap/" -W -v -x
+dn: uid=$UNAME,ou=People,$DOMAIN
+changetype: modify
+replace: homeDirectory
+homeDirectory: $NEWHOME/$UNAME
+EOF
+
+(
+  cd $NEWHOME/$UNAME
+  grep -rl "$OLDHOME" .openoffice .sversionrc Desktop .kde* .opera 2>/dev/null | \
+    while read FILE ; do echo -e ",s:$OLDHOME:$NEWHOME/$UNAME:g\nwq" | ed "$FILE" ; done 
+)
diff --git a/debian-edu-config/share/debian-edu-config/tools/nbdquery b/debian-edu-config/share/debian-edu-config/tools/nbdquery
new file mode 100755
index 0000000..df8e536
--- /dev/null
+++ b/debian-edu-config/share/debian-edu-config/tools/nbdquery
@@ -0,0 +1,18 @@
+#!/bin/sh
+
+# Copyright 2007 Ronny Aasen <ronny at skolelinux.no>
+# Distributed under the terms of the GNU General Public License version 2 or any later version.
+
+# queries the nbd-clients and reports what source ports it uses to stdout. 
+# should usually be run from an inetd. unfortunatly because of lsof it needs to run as root
+
+PATH=/bin:/usr/bin
+export PATH
+
+for pid in $(pidof nbd-client) ; do
+   port=$(lsof -P -p $pid | grep 9210 | cut -d":" -f2 | cut -d"-" -f1)
+   echo $port
+done
+
+
+
diff --git a/debian-edu-config/share/debian-edu-config/tools/nbdswap-cleanup b/debian-edu-config/share/debian-edu-config/tools/nbdswap-cleanup
new file mode 100755
index 0000000..cc0b8ff
--- /dev/null
+++ b/debian-edu-config/share/debian-edu-config/tools/nbdswap-cleanup
@@ -0,0 +1,71 @@
+#!/bin/bash
+
+# Copyright 2007 Ronny Aasen <ronny at skolelinux.no>
+# Distributed under the terms of the GNU General Public License version 2 or any later version.
+
+# compare the files in the swapdir, vs the running processes, vs the alive ltsp clients.
+# and remove the cruft UGLY UGLY remove all this when nbd-server is sane.
+
+#set -x 
+
+PATH=/bin:/usr/bin
+export PATH
+
+#known language
+LANG=C
+export $LANG
+
+NBDQUERY_PORT=9211
+export NBDQUERY_PORT
+
+#only run if the services are installed.
+test -x /usr/sbin/nbdswapd || exit 0
+test -x /bin/nbd-server || exit 0
+
+#only run if there is a SWAPDIR configured. 
+test ! -r /etc/ltsp/nbdswapd.conf || . /etc/ltsp/nbdswapd.conf
+if [ ${SWAPDIR:-0} = "0" ] ; then 
+        exit 0
+fi
+
+
+#remove files not owned by any process, eg after a powerfailure. 
+for file in $SWAPDIR/file*  ; do
+   if [ -f $file ] ; then
+       ps aux | grep -v grep | grep nbd-server | grep -q $file || rm $file
+   fi
+done
+
+# stop nbd-server processes with no client running
+# Query the ltsp client on port 9211 to get a list of ports in use by nbd-clients. 
+# and can safely be removed.
+
+pids=$(ps ax -o pid,args | grep -v grep | grep ' /usr/sbin/nbdswapd' | awk '{print $1}' )
+for pid in $pids ; do
+	# in case there are no nbdswapds running
+	if [ ${pid:-0} -ne "0" ]; then
+		#get the ports in use by nbdswapd
+		for l_port in $(lsof -P -p $pid | grep 9210 | grep TCP | head -n 1 | cut -d":" -f3 | cut -d" " -f1) ; do
+			#figure out the ltps client hostname 
+			host=$(lsof -P -p $pid | grep 9210 | grep TCP | head -n 1 | cut -d":" -f2 | cut -d">" -f2)
+			
+			#query the ltsp host for the nbd-client ports in use 
+		 	r_port=$(nc $host $NBDQUERY_PORT )
+			
+			if [ ${r_port:-0} -ne "0" ]; then
+				#keep if it matches
+				if [ "$l_port" -ne  "$r_port" ]; then 
+					#what nbd-server is child of this nbdswapd
+					for nbds_pid in $(ps ax --no-heading -o pid,ppid,args| grep $pid | grep -v grep | grep nbd-server | awk '{print $1}'); do
+					#kill this nbd-server
+					#it will take it's file and go. 
+						kill -1 $nbds_pid
+					done
+				fi
+			fi
+		done
+	fi
+done
+
+exit 0 
+
diff --git a/debian-edu-config/share/debian-edu-config/tools/nightkill.sh b/debian-edu-config/share/debian-edu-config/tools/nightkill.sh
new file mode 100755
index 0000000..0ea1c91
--- /dev/null
+++ b/debian-edu-config/share/debian-edu-config/tools/nightkill.sh
@@ -0,0 +1,33 @@
+#!/bin/bash
+
+# $Id$
+# This script could be run every night, to kill stray processes. 
+
+KEEPONES="root USER daemon"
+USERLIMIT=10000
+
+# New location for config file [pere 2004-04-25]
+if [ -f /etc/skolelinux/nightkill.conf ] ; then 
+  mv /etc/skolelinux/nightkill.conf /etc/debian-edu/nightkill.conf
+fi
+
+if [ -f /etc/debian-edu/nightkill.conf ] ; then 
+  . /etc/debian-edu/nightkill.conf
+fi 
+
+for EVERY in $KEEPONES ; do 
+  KEEP="${KEEP:+$KEEP|}^$EVERY"
+done
+
+
+ps hauxwn | \
+  while read PUSER PID NULL ; do 
+    [ $PUSER -ge $USERLIMIT ] && kill $PID >& /dev/null
+  done
+
+sleep 10
+  
+ps hauxwn  | \
+  while read PUSER PID NULL ; do 
+    [ $PUSER -ge $USERLIMIT ] && kill -9 $PID >& /dev/null 
+  done
diff --git a/debian-edu-config/share/debian-edu-config/tools/passwd b/debian-edu-config/share/debian-edu-config/tools/passwd
new file mode 100755
index 0000000..7702df2
--- /dev/null
+++ b/debian-edu-config/share/debian-edu-config/tools/passwd
@@ -0,0 +1,85 @@
+#!/bin/bash
+# $Id$
+# This script changes a users password in ldap - and if smbpasswd exists,
+# also update samba password
+# use at own risk
+
+
+BASE="ou=People,dc=skole,dc=skolelinux,dc=no"
+test "$HOST" || HOST="ldap"
+NEWPASSWD=
+
+NAME=$1
+
+if [ -z "$NAME" ] ; then 
+  echo -e "usage: 
+    $0 <username>"
+  exit 2
+fi
+
+# Who do you want to change password of ? 
+# only admin user are allow to change password of admin user
+case "$NAME" in 
+  admin)
+    ENTRY=cn
+    BINDUSER=cn=admin,$BASE
+    ;;
+  smbadmin)
+    ENTRY=cn
+    BINDUSER=cn=admin,$BASE
+    NEWPASSWD=$(makepasswd)
+
+    ;;
+  *) ENTRY=uid 
+     BINDUSER=uid=$(id -un),$BASE
+     ;;
+esac
+
+# Binding as admin only if you are root user,i
+# If you are root, you should know the admin password
+test $(id -u) -eq 0 && BINDUSER=cn=admin,$BASE
+
+if [ -z "$NEWPASSWD" ] ; then 
+  # Make sure we have a new password (and we know what it is)
+  read -p "Enter new password for user $NAME: " -s NEWPASSWD
+  echo
+  read -p "Reenter new password: " -s CHKPASSWD
+  echo
+  if [ "$CHKPASSWD" != "$NEWPASSWD" ] ; then 
+    echo "Sorry, passwords don't match"
+    exit 2
+  fi
+fi
+
+# NOW Try to change the password
+RESULT="$(ldappasswd -h $HOST -xZW -s "$NEWPASSWD" -D $BINDUSER \
+	   $ENTRY=$NAME,$BASE)"
+
+if [ "$RESULT" != "Result: Success (0)" ] ; then 
+  echo "Could not change ldap passwd for user $NAME"
+  echo "ldappasswd returned $RESULT"
+  exit 2
+fi
+
+if [ ! -x /usr/bin/smbpasswd ] ; then 
+  echo "Hmm, no smbpasswd, what kind of installation is this?"
+  exit 0
+fi
+
+# Need to look at python-smbpasswd for this part
+
+case "$NAME" in 
+  admin) ;;
+  smbadmin)
+    # If we've changed the smbadmin PW, we also need to change the stored password
+    /usr/bin/smbpasswd -w "$NEWPASSWD" >/dev/null
+    ;;
+  *) 
+    # root should be able to use smbpasswd directly
+    if [ $(id -u) -eq 0 ] ; then 
+      echo -e "$NEWPASSWD\n$NEWPASSWD" | /usr/bin/smbpasswd "$NAME" >/dev/null
+    else # admin users should be able to use sudo
+      echo -e "$NEWPASSWD\n$NEWPASSWD" | sudo /usr/bin/smbpasswd "$NAME" >/dev/null
+    fi
+    ;;
+esac
diff --git a/debian-edu-config/share/debian-edu/common/share/config/artsmessagerc b/debian-edu-config/share/debian-edu/common/share/config/artsmessagerc
new file mode 100644
index 0000000..d471fad
--- /dev/null
+++ b/debian-edu-config/share/debian-edu/common/share/config/artsmessagerc
@@ -0,0 +1,3 @@
+[Notification Messages]
+ShowInfoMessages=false
+Sound_server_informational_message:__Error_while_initializing_the_sound_driver:_device_/dev/dsp_can't_be_opened_(No_such_file_or_directory)__The_sound_server_will_continue,_using_the_null_output_device.=false
diff --git a/debian-edu-config/share/debian-edu/common/share/config/kcookiejarrc b/debian-edu-config/share/debian-edu/common/share/config/kcookiejarrc
new file mode 100644
index 0000000..36a4188
--- /dev/null
+++ b/debian-edu-config/share/debian-edu/common/share/config/kcookiejarrc
@@ -0,0 +1,7 @@
+DefaultRadioButton=2
+ShowCookieDetails=false
+
+[Cookie Policy]
+CookieDomainAdvice=
+CookieGlobalAdvice=Accept
+Cookies=true
diff --git a/debian-edu-config/share/debian-edu/common/share/config/kdeprintrc b/debian-edu-config/share/debian-edu/common/share/config/kdeprintrc
new file mode 100644
index 0000000..61925ac
--- /dev/null
+++ b/debian-edu-config/share/debian-edu/common/share/config/kdeprintrc
@@ -0,0 +1,2 @@
+[General]
+PrintSystem=cups
diff --git a/debian-edu-config/share/debian-edu/common/share/config/konquerorrc b/debian-edu-config/share/debian-edu/common/share/config/konquerorrc
new file mode 100644
index 0000000..d31b886
--- /dev/null
+++ b/debian-edu-config/share/debian-edu/common/share/config/konquerorrc
@@ -0,0 +1,2 @@
+[Java/JavaScript Settings]
+EnableJavaScript=true
diff --git a/debian-edu-config/share/debian-edu/common/share/config/kpersonalizerrc b/debian-edu-config/share/debian-edu/common/share/config/kpersonalizerrc
new file mode 100644
index 0000000..f4cb26a
--- /dev/null
+++ b/debian-edu-config/share/debian-edu/common/share/config/kpersonalizerrc
@@ -0,0 +1,2 @@
+[General]
+FirstLogin=false
diff --git a/debian-edu-config/share/debian-edu/common/share/mimelnk/applnk/msword.desktop b/debian-edu-config/share/debian-edu/common/share/mimelnk/applnk/msword.desktop
new file mode 100644
index 0000000..49956ab
--- /dev/null
+++ b/debian-edu-config/share/debian-edu/common/share/mimelnk/applnk/msword.desktop
@@ -0,0 +1,7 @@
+[Desktop Entry]
+Comment=Microsoft Word-dokument
+Hidden=false
+Icon=wordprocessing
+MimeType=application/msword
+Patterns=*.doc;*.DOC;*.dot;*.DOT
+Type=MimeType
diff --git a/debian-edu-config/share/debian-edu/networked-kde3/share/config/kioslaverc b/debian-edu-config/share/debian-edu/networked-kde3/share/config/kioslaverc
new file mode 100644
index 0000000..0ffb6b3
--- /dev/null
+++ b/debian-edu-config/share/debian-edu/networked-kde3/share/config/kioslaverc
@@ -0,0 +1,10 @@
+# - Make Konqueror use $http_proxy and $ftp_proxy as proxy 
+# - Force proxy use through kiosk
+# - Only works if kde version 3.3 or greater (as proxytype 4 didn't
+#   exist before)
+###########################################################
+[Proxy Settings][$i]
+ProxyType=4 #use environment variables to determine proxy
+ftpProxy=ftp_proxy
+httpProxy=http_proxy
+httpsProxy=http_proxy
diff --git a/debian-edu-config/share/debian-edu/root/share/apps/kdesktop/Desktop/tjener.desktop b/debian-edu-config/share/debian-edu/root/share/apps/kdesktop/Desktop/tjener.desktop
new file mode 100644
index 0000000..42469ad
--- /dev/null
+++ b/debian-edu-config/share/debian-edu/root/share/apps/kdesktop/Desktop/tjener.desktop
@@ -0,0 +1,11 @@
+[Desktop Entry]
+Encoding=UTF-8
+Name=Debian Edu web server
+GenericName=www
+Comment=Internal webpage
+TryExec=x-www-browser
+Exec=x-www-browser http://www/
+Icon=password
+Terminal=false
+Type=Application
+Categories=Application;Network;System;Security
diff --git a/debian-edu-config/share/debian-edu/students/etc/xdg/menus/applications-kmenuedit.menu b/debian-edu-config/share/debian-edu/students/etc/xdg/menus/applications-kmenuedit.menu
new file mode 100644
index 0000000..9f05a12
--- /dev/null
+++ b/debian-edu-config/share/debian-edu/students/etc/xdg/menus/applications-kmenuedit.menu
@@ -0,0 +1,160 @@
+<!DOCTYPE Menu PUBLIC "-//freedesktop//DTD Menu 1.0//EN" "http://www.freedesktop.org/standards/menu-spec/1.0/menu.dtd">
+<Menu>
+ <Exclude>
+  <Filename>kde-Kfind.desktop</Filename>
+  <Filename>kde-Help.desktop</Filename>
+  <Filename>kde-Home.desktop</Filename>
+  <Filename>kde-KControl.desktop</Filename>
+  <Filename>kde-adept_installer.desktop</Filename>
+ </Exclude>
+ <Menu>
+  <Name>Applications</Name>
+  <Deleted/>
+ </Menu>
+ <Menu>
+  <Name>Utilities</Name>
+  <Deleted/>
+ </Menu>
+ <Menu>
+  <Name>System</Name>
+  <Deleted/>
+ </Menu>
+ <Menu>
+  <Name>Settingsmenu</Name>
+  <Deleted/>
+ </Menu>
+ <Menu>
+  <Name>Science</Name>
+  <Deleted/>
+ </Menu>
+ <Menu>
+  <Name>Office</Name>
+  <Deleted/>
+ </Menu>
+ <Menu>
+  <Name>Multimedia</Name>
+  <Deleted/>
+ </Menu>
+ <Menu>
+  <Name>Internet</Name>
+  <Deleted/>
+ </Menu>
+ <Menu>
+  <Name>Graphics</Name>
+  <Deleted/>
+ </Menu>
+ <Menu>
+  <Name>Games</Name>
+  <Deleted/>
+ </Menu>
+ <Menu>
+  <Name>Edutainment</Name>
+  <Deleted/>
+ </Menu>
+ <Menu>
+  <Name>Development</Name>
+  <Deleted/>
+ </Menu>
+ <Menu>
+  <Name>Debian</Name>
+  <Deleted/>
+ </Menu>
+ <Menu>
+  <Name>msuic</Name>
+  <Directory>music.directory</Directory>
+  <Deleted/>
+ </Menu>
+ <Menu>
+  <Name>mathematics</Name>
+  <Directory>mathematics.directory</Directory>
+  <Include>
+   <Filename>kmplot.desktop</Filename>
+   <Filename>kbruch.desktop</Filename>
+   <Filename>kpercentage.desktop</Filename>
+  </Include>
+  <Exclude>
+   <Filename>kalzium.desktop</Filename>
+  </Exclude>
+  <Layout>
+   <Merge type="files" />
+   <Filename>kpercentage.desktop</Filename>
+   <Filename>kmplot.desktop</Filename>
+   <Filename>kbruch.desktop</Filename>
+  </Layout>
+ </Menu>
+ <Menu>
+  <Name>.hidden</Name>
+  <Include>
+   <Filename>kde-Kfind.desktop</Filename>
+   <Filename>kde-Help.desktop</Filename>
+   <Filename>kde-Home.desktop</Filename>
+   <Filename>kde-KControl.desktop</Filename>
+   <Filename>kde-adept_installer.desktop</Filename>
+   <Filename>kalzium.desktop</Filename>
+  </Include>
+ </Menu>
+ <Menu>
+  <Name>languages</Name>
+  <Directory>languages.directory</Directory>
+  <Include>
+   <Filename>klatin.desktop</Filename>
+   <Filename>kvoctrain.desktop</Filename>
+   <Filename>kwordquiz.desktop</Filename>
+  </Include>
+  <Layout>
+   <Merge type="files" />
+   <Filename>klatin.desktop</Filename>
+   <Filename>kvoctrain.desktop</Filename>
+   <Filename>kwordquiz.desktop</Filename>
+  </Layout>
+ </Menu>
+ <Menu>
+  <Name>science</Name>
+  <Layout>
+   <Merge type="files" />
+   <Filename>kstars.desktop</Filename>
+   <Filename>kalzium.desktop</Filename>
+  </Layout>
+  <Directory>science.directory</Directory>
+  <Include>
+   <Filename>kalzium.desktop</Filename>
+   <Filename>kstars.desktop</Filename>
+  </Include>
+ </Menu>
+ <Menu>
+  <Name>computer_science</Name>
+  <Directory>computer_science.directory</Directory>
+  <Include>
+   <Filename>kturtle.desktop</Filename>
+  </Include>
+  <Layout>
+   <Merge type="files" />
+   <Filename>kturtle.desktop</Filename>
+  </Layout>
+ </Menu>
+ <Layout>
+  <Merge type="menus" />
+  <Menuname>writing</Menuname>
+  <Menuname>creative work</Menuname>
+  <Menuname>computer_science</Menuname>
+  <Menuname>languages</Menuname>
+  <Menuname>science</Menuname>
+  <Menuname>mathematics</Menuname>
+  <Menuname>music</Menuname>
+ </Layout>
+ <Menu>
+  <Name>writing</Name>
+  <Layout>
+   <Merge type="files" />
+   <Filename>oowriter.desktop</Filename>
+   <Filename>ooimpress.desktop</Filename>
+   <Filename>oocalc.desktop</Filename>
+  </Layout>
+  <Directory>writing.directory</Directory>
+  <Include>
+   <Filename>oowriter.desktop</Filename>
+   <Filename>ooimpress.desktop</Filename>
+   <Filename>oocalc.desktop</Filename>
+  </Include>
+ </Menu>
+</Menu>
diff --git a/debian-edu-config/share/debian-edu/students/share/applications/kalzium.desktop b/debian-edu-config/share/debian-edu/students/share/applications/kalzium.desktop
new file mode 100644
index 0000000..ee477f2
--- /dev/null
+++ b/debian-edu-config/share/debian-edu/students/share/applications/kalzium.desktop
@@ -0,0 +1,14 @@
+[Desktop Entry]
+Comment=
+Exec='/usr/bin/kalzium'
+TryExec='/usr/bin/kalzium'
+GenericName=Periodic Table of Elements
+Icon=kalzium
+Name=kalzium
+Path=
+StartupNotify=true
+Terminal=0
+TerminalOptions=
+Type=Application
+X-KDE-SubstituteUID=false
+X-KDE-Username=
diff --git a/debian-edu-config/share/debian-edu/students/share/applications/kbruch.desktop b/debian-edu-config/share/debian-edu/students/share/applications/kbruch.desktop
new file mode 100644
index 0000000..4935daa
--- /dev/null
+++ b/debian-edu-config/share/debian-edu/students/share/applications/kbruch.desktop
@@ -0,0 +1,14 @@
+[Desktop Entry]
+Comment=
+Exec='/usr/bin/kbruch'
+TryExec='/usr/bin/kbruch'
+GenericName=Exercise Fractions
+Icon=kbruch
+Name=kbruch
+Path=
+StartupNotify=true
+Terminal=0
+TerminalOptions=
+Type=Application
+X-KDE-SubstituteUID=false
+X-KDE-Username=
diff --git a/debian-edu-config/share/debian-edu/students/share/applications/klatin.desktop b/debian-edu-config/share/debian-edu/students/share/applications/klatin.desktop
new file mode 100644
index 0000000..c7dca88
--- /dev/null
+++ b/debian-edu-config/share/debian-edu/students/share/applications/klatin.desktop
@@ -0,0 +1,14 @@
+[Desktop Entry]
+Comment=
+Exec='/usr/bin/klatin'
+TryExec='/usr/bin/klatin'
+GenericName=Latin Reviser
+Icon=klatin
+Name=klatin
+Path=
+StartupNotify=true
+Terminal=0
+TerminalOptions=
+Type=Application
+X-KDE-SubstituteUID=false
+X-KDE-Username=
diff --git a/debian-edu-config/share/debian-edu/students/share/applications/kmplot.desktop b/debian-edu-config/share/debian-edu/students/share/applications/kmplot.desktop
new file mode 100644
index 0000000..c76554f
--- /dev/null
+++ b/debian-edu-config/share/debian-edu/students/share/applications/kmplot.desktop
@@ -0,0 +1,14 @@
+[Desktop Entry]
+Comment=Function Plotter
+Exec='/usr/bin/kmplot'
+TryExec='/usr/bin/kmplot'
+GenericName=Mathematical Function Plotter
+Icon=kmplot
+Name=kmplot
+Path=
+StartupNotify=true
+Terminal=0
+TerminalOptions=
+Type=Application
+X-KDE-SubstituteUID=false
+X-KDE-Username=
diff --git a/debian-edu-config/share/debian-edu/students/share/applications/kpercentage.desktop b/debian-edu-config/share/debian-edu/students/share/applications/kpercentage.desktop
new file mode 100644
index 0000000..df9d8fd
--- /dev/null
+++ b/debian-edu-config/share/debian-edu/students/share/applications/kpercentage.desktop
@@ -0,0 +1,14 @@
+[Desktop Entry]
+Comment=
+Exec='/usr/bin/kpercentage'
+TryExec='/usr/bin/kpercentage'
+GenericName=Exercise Percentages
+Icon=kpercentage
+Name=kpercentage
+Path=
+StartupNotify=true
+Terminal=0
+TerminalOptions=
+Type=Application
+X-KDE-SubstituteUID=false
+X-KDE-Username=
diff --git a/debian-edu-config/share/debian-edu/students/share/applications/kstars.desktop b/debian-edu-config/share/debian-edu/students/share/applications/kstars.desktop
new file mode 100644
index 0000000..2102847
--- /dev/null
+++ b/debian-edu-config/share/debian-edu/students/share/applications/kstars.desktop
@@ -0,0 +1,14 @@
+[Desktop Entry]
+Comment=
+Exec='/usr/bin/kstars'
+TryExec='/usr/bin/kstars'
+GenericName=Planetarium
+Icon=kstars
+Name=kstars
+Path=
+StartupNotify=true
+Terminal=0
+TerminalOptions=
+Type=Application
+X-KDE-SubstituteUID=false
+X-KDE-Username=
diff --git a/debian-edu-config/share/debian-edu/students/share/applications/kturtle.desktop b/debian-edu-config/share/debian-edu/students/share/applications/kturtle.desktop
new file mode 100644
index 0000000..3459740
--- /dev/null
+++ b/debian-edu-config/share/debian-edu/students/share/applications/kturtle.desktop
@@ -0,0 +1,14 @@
+[Desktop Entry]
+Comment=
+Exec='/usr/bin/kturtle'
+TryExec='/usr/bin/kturtle'
+GenericName=Logo Programming Environment
+Icon=kturtle
+Name=kturtle
+Path=
+StartupNotify=true
+Terminal=0
+TerminalOptions=
+Type=Application
+X-KDE-SubstituteUID=false
+X-KDE-Username=
diff --git a/debian-edu-config/share/debian-edu/students/share/applications/kvoctrain.desktop b/debian-edu-config/share/debian-edu/students/share/applications/kvoctrain.desktop
new file mode 100644
index 0000000..a816180
--- /dev/null
+++ b/debian-edu-config/share/debian-edu/students/share/applications/kvoctrain.desktop
@@ -0,0 +1,14 @@
+[Desktop Entry]
+Comment=
+Exec='/usr/bin/kvoctrain'
+TryExec='/usr/bin/kvoctrain'
+GenericName=Vocabulary trainer
+Icon=kvoctrain
+Name=kvoctrain
+Path=
+StartupNotify=true
+Terminal=0
+TerminalOptions=
+Type=Application
+X-KDE-SubstituteUID=false
+X-KDE-Username=
diff --git a/debian-edu-config/share/debian-edu/students/share/applications/kwordquiz.desktop b/debian-edu-config/share/debian-edu/students/share/applications/kwordquiz.desktop
new file mode 100644
index 0000000..74d82d1
--- /dev/null
+++ b/debian-edu-config/share/debian-edu/students/share/applications/kwordquiz.desktop
@@ -0,0 +1,14 @@
+[Desktop Entry]
+Comment=
+Exec='/usr/bin/kwordquiz'
+TryExec='/usr/bin/kwordquiz'
+GenericName=Vocabulary quiz-trainer
+Icon=kwordquiz
+Name=kwordquiz
+Path=
+StartupNotify=true
+Terminal=0
+TerminalOptions=
+Type=Application
+X-KDE-SubstituteUID=false
+X-KDE-Username=
diff --git a/debian-edu-config/share/debian-edu/students/share/applications/oocalc.desktop b/debian-edu-config/share/debian-edu/students/share/applications/oocalc.desktop
new file mode 100644
index 0000000..2b45894
--- /dev/null
+++ b/debian-edu-config/share/debian-edu/students/share/applications/oocalc.desktop
@@ -0,0 +1,14 @@
+[Desktop Entry]
+Comment=
+Exec='/usr/bin/oocalc'
+TryExec='/usr/bin/oocalc'
+GenericName=OpenOffice.org Calc
+Icon=ooo-calc
+Name=oocalc
+Path=
+StartupNotify=true
+Terminal=0
+TerminalOptions=
+Type=Application
+X-KDE-SubstituteUID=false
+X-KDE-Username=
diff --git a/debian-edu-config/share/debian-edu/students/share/applications/ooimpress.desktop b/debian-edu-config/share/debian-edu/students/share/applications/ooimpress.desktop
new file mode 100644
index 0000000..135698c
--- /dev/null
+++ b/debian-edu-config/share/debian-edu/students/share/applications/ooimpress.desktop
@@ -0,0 +1,14 @@
+[Desktop Entry]
+Comment=
+Exec='/usr/bin/ooimpress'
+TryExec='/usr/bin/ooimpress'
+GenericName=OpenOffice.org Impress
+Icon=ooo-impress
+Name=ooimpress
+Path=
+StartupNotify=true
+Terminal=0
+TerminalOptions=
+Type=Application
+X-KDE-SubstituteUID=false
+X-KDE-Username=
diff --git a/debian-edu-config/share/debian-edu/students/share/applications/oowriter.desktop b/debian-edu-config/share/debian-edu/students/share/applications/oowriter.desktop
new file mode 100644
index 0000000..46832c4
--- /dev/null
+++ b/debian-edu-config/share/debian-edu/students/share/applications/oowriter.desktop
@@ -0,0 +1,14 @@
+[Desktop Entry]
+Comment=
+Exec='/usr/bin/oowriter'
+TryExec='/usr/bin/oowriter'
+GenericName=OpenOffice.org Writer
+Icon=ooo-writer
+Name=oowriter
+Path=
+StartupNotify=true
+Terminal=0
+TerminalOptions=
+Type=Application
+X-KDE-SubstituteUID=false
+X-KDE-Username=
diff --git a/debian-edu-config/share/debian-edu/students/share/apps/kdesktop/Desktop/.directory b/debian-edu-config/share/debian-edu/students/share/apps/kdesktop/Desktop/.directory
new file mode 100644
index 0000000..e69de29
diff --git a/debian-edu-config/share/debian-edu/students/share/apps/kdesktop/Desktop/kalzium.desktop b/debian-edu-config/share/debian-edu/students/share/apps/kdesktop/Desktop/kalzium.desktop
new file mode 100644
index 0000000..c13cac3
--- /dev/null
+++ b/debian-edu-config/share/debian-edu/students/share/apps/kdesktop/Desktop/kalzium.desktop
@@ -0,0 +1,100 @@
+# KDE Config File
+[Desktop Entry]
+Encoding=UTF-8
+Type=Application
+Exec=kalzium -caption "%c" %i %m
+TryExec=/usr/bin/kalzium
+Icon=kalzium
+DocPath=kalzium/index.html
+Comment=KDE Periodic Table of Elements
+Comment[bn]=কে.ডি.ই. উপস্থাপিত পদার্থের পর্যায় সারণী
+Comment[bs]=KDE periodna tablica elemenata
+Comment[ca]=Taula periòdica dels elements per a KDE
+Comment[cs]=Periodická tabulka prvků pro KDE
+Comment[da]=Det periodiske system af grundstoffer for KDE
+Comment[de]=Periodensystem der Elemente
+Comment[el]=Περιοδικός πίνακας των στοιχείων του KDE
+Comment[es]=Tabla periódica de los elementos de KDE
+Comment[et]=KDE keemiliste elementide tabel
+Comment[eu]=Elemtuen taula periodikoa
+Comment[fa]=جدول تناوبی عناصر KDE
+Comment[fi]=Alkuaineiden jaksollinen järjestelmä
+Comment[fr]=Classification périodique des éléments de KDE
+Comment[he]=הטבלה המחזורית של היסודות של KDE
+Comment[hu]=KDE-alapú periódusos rendszer
+Comment[it]=Tavola periodica degli elementi per KDE
+Comment[ja]=元素周期表
+Comment[km]=តារាង​ខួប​នៃ​ធាតុ​គីមី​របស់ KDE
+Comment[nl]=Periodieke Tabel der Elementen
+Comment[pl]=Układ okresowy pierwiastków dla KDE
+Comment[pt]=Tabela Periódica de Elementos do KDE
+Comment[pt_BR]=Tabela Periódica de Elementos do KDE
+Comment[ru]=Периодическая система Менделеева
+Comment[sk]=KDE Periodická tabuľka prvkov
+Comment[sl]=Periodni sistem elementov
+Comment[sr]=Периодни систем елемената за KDE
+Comment[sr at Latn]=Periodni sistem elemenata za KDE
+Comment[sv]=Periodiska systemet för KDE
+Comment[uk]=Періодична таблиця елементів
+Comment[vi]=Bảng Tuần hoàn các Nguyên tố Hoá học KDE
+Comment[zh_TW]=KDE 元素週期表
+Terminal=false
+Name=Kalzium
+Name[bn]=ক্যালজিয়াম
+Name[fo]=Kalsium
+Name[hi]=के-एल्जियम
+Name[lv]=Kalcium
+Name[mk]=Калциум
+Name[mn]=Кальци
+Name[pa]=ਕੈਲਜੀਅਮ
+Name[pl]=Kalzium (Program do nauki pierwiastków chemicznych)
+Name[ta]=கால்சியம்
+GenericName=Periodic Table of Elements
+GenericName[af]=Periodieke Tabel van Elemente
+GenericName[ar]=الجدول الدوري للعناصر
+GenericName[bg]=Таблица на химическите елементи
+GenericName[bn]=পদার্থের পর্যায় সারণী
+GenericName[bs]=Periodna tablica elemenata
+GenericName[ca]=Taula periòdica dels elements
+GenericName[cs]=Periodická tabulka
+GenericName[cy]=Tabl yr Elfennau
+GenericName[da]=Grundstoffernes periodiske system
+GenericName[de]=Elektronisches Periodensystem
+GenericName[el]=Περιοδικός πίνακας των στοιχείων
+GenericName[es]=Tabla periódica de los elementos
+GenericName[et]=Keemiliste elementide tabel
+GenericName[eu]=Elemtuen taula periodikoa
+GenericName[fa]=جدول دوره‌ای عناصر
+GenericName[fi]=Alkuaineiden jaksollinen järjestelmä
+GenericName[fr]=Classification périodique des éléments
+GenericName[gl]=Tabla periódica dos elementos
+GenericName[he]=הטבלה המחזורית של היסודות
+GenericName[hi]=तत्वों के पीरियाडिक टेबल
+GenericName[hu]=Periódusos rendszer
+GenericName[is]=Lotukerfið
+GenericName[it]=Tavola periodica degli elementi
+GenericName[ja]=元素周期表
+GenericName[km]=តារាង​ខួម​នៃ​ធាតុ​គីមី
+GenericName[mk]=Периодична табела на елементи
+GenericName[nb]=Grunnstoffenes periodiske system
+GenericName[nds]=Periodensysteem vun den Elementen
+GenericName[nl]=Periodieke Tabel der Elementen
+GenericName[nn]=Det periodiske systemet
+GenericName[pa]=ਇਕਾਈਆਂ ਦੀ ਆਵਰਤੀ ਸਾਰਣੀ
+GenericName[pl]=Tablica okresowa pierwiastków
+GenericName[pt]=Tabela Periódica de Elementos
+GenericName[pt_BR]=Tabela Periódica dos Elementos
+GenericName[ru]=Периодическая система Менделеева
+GenericName[sk]=Periodická tabuľka prvkov
+GenericName[sl]=Periodna tabela elementov
+GenericName[sr]=Периодни систем елемената
+GenericName[sr at Latn]=Periodni sistem elemenata
+GenericName[sv]=Periodiska systemet
+GenericName[ta]=பொருட்களின் கால அட்டவணை
+GenericName[tg]=Системаи даври элементҳо
+GenericName[tr]=Elementlerin Peryodik Tablosu
+GenericName[uk]=Періодична таблиця елементів
+GenericName[vi]=Bảng Tuần hoàn các Nguyên tố
+GenericName[zh_CN]=元素周期表
+GenericName[zh_TW]=元素週期表
+Categories=Qt;KDE;Education;Science;
diff --git a/debian-edu-config/share/debian-edu/students/share/apps/kdesktop/Desktop/kbruch.desktop b/debian-edu-config/share/debian-edu/students/share/apps/kdesktop/Desktop/kbruch.desktop
new file mode 100644
index 0000000..b2e6184
--- /dev/null
+++ b/debian-edu-config/share/debian-edu/students/share/apps/kdesktop/Desktop/kbruch.desktop
@@ -0,0 +1,111 @@
+# KDE Config File
+[Desktop Entry]
+Encoding=UTF-8
+Type=Application
+Exec=kbruch -caption "%c" %i %m
+TryExec=/usr/bin/kbruch
+Icon=kbruch
+DocPath=kbruch/index.html
+GenericName=Exercise Fractions
+GenericName[af]=Oefen Breuke
+GenericName[ar]=تمرين على الكسور
+GenericName[bg]=Упражнения с дроби
+GenericName[bn]=ভগ্নাংশের অংক অনুশীলন করুন
+GenericName[bs]=Vježbajte razlomke
+GenericName[ca]=Fraccions d'exercici
+GenericName[cs]=Cvičení se zlomky
+GenericName[cy]=Ymarfer Ffracsiynnau
+GenericName[da]=Øvelsesopgaver med brøker
+GenericName[de]=Bruchrechnen üben
+GenericName[el]=Εξάσκηση με κλάσματα
+GenericName[es]=Ejercitar fracciones
+GenericName[et]=Harjutused murdudega
+GenericName[eu]=Zatiki ariketak
+GenericName[fa]=تمرین کسرها
+GenericName[fi]=Harjoittele murtolukulaskuja
+GenericName[fr]=Exercices pratiques avec des fractions
+GenericName[gl]=Exercicios de fraccións
+GenericName[he]=תרגילי בשברים
+GenericName[hi]=अभ्यास अंश
+GenericName[hu]=Törtszámítás-gyakorló
+GenericName[is]=Tugabrotaæfingar
+GenericName[it]=Esercizi con le frazioni
+GenericName[ja]=分数の練習
+GenericName[km]=លំហាត់​ប្រភាគ
+GenericName[mk]=Вежбајте дропки
+GenericName[nb]=Brøk-øvelser
+GenericName[nl]=Breuken oefenen
+GenericName[nn]=Brøkøvingar
+GenericName[pl]=Ćwiczenia z ułamków
+GenericName[pt]=Exercícios com Fracções
+GenericName[pt_BR]=Exercitar Frações
+GenericName[ru]=Упражнения с дробями
+GenericName[sk]=Cvičenie zlomkov
+GenericName[sl]=Vaje z ulomki
+GenericName[sr]=Вежбајте задатке са разломцима
+GenericName[sr at Latn]=Vežbajte zadatke sa razlomcima
+GenericName[sv]=Övningar med bråk
+GenericName[ta]=பின்னங்களில் பயிற்சிகள்
+GenericName[tg]=Машқҳо барои ададҳои касрӣ
+GenericName[tr]=Parçalara Çalış
+GenericName[uk]=Вправи з дробами
+GenericName[vi]=Bài tập Phân số
+GenericName[zh_CN]=分数练习
+GenericName[zh_TW]=練習分數
+Comment=Practice exercises with fractions
+Comment[af]=Doen oefeninge met breuke
+Comment[ar]=تمارين عمليّة على الكسور
+Comment[bg]=Практически упражнения с дроби
+Comment[bn]=ভগ্নাংশের অংকের অনুশীলনী চর্চা করুন
+Comment[bs]=Vježbajte rad sa razlomcima
+Comment[ca]=Practica exercicis amb fraccions
+Comment[cs]=Praktická cvičení se zlomky
+Comment[cy]=Ymarfer ymarferion efo ffracsiynnau
+Comment[da]=Øvelsesopgaver med brøker
+Comment[de]=Übungen mit Brüchen
+Comment[el]=Εξάσκηση με ασκήσεις κλασμάτων
+Comment[es]=Práctica de ejercicios con fracciones
+Comment[et]=Harjutused murdudega
+Comment[eu]=Entrenatu zatikidun ariketekin
+Comment[fa]=انجام تمرین با کسرها
+Comment[fi]=Harjoittele murtolukulaskuja
+Comment[fr]=Exercices pratiques avec des fractions
+Comment[gl]=Exercicios prácticos con fraccións
+Comment[he]=התאמנות בתרגילי שברים
+Comment[hi]=अंश के साथ अभ्यास प्रश्नोत्तर
+Comment[hu]=Gyakorlási példák törtszámításhoz
+Comment[is]=Gera æfingar með tugabrotum
+Comment[it]=Esercizi con le frazioni
+Comment[ja]=分数の実践練習
+Comment[km]=លំហាត់​អនុវត្ត​ប្រភាគ
+Comment[lv]=Praktiskie uzdevumi ar daļām
+Comment[mk]=Вежбајте задачи со дропки
+Comment[ms]=Buat latihan pecahan
+Comment[nb]=Treningsøvelser med brøker
+Comment[nds]=Brookreken öven
+Comment[nl]=Praktische oefeningen met breuken
+Comment[nn]=Øvingar i brøkrekning
+Comment[pl]=Ćwiczenia z ułamków
+Comment[pt]=Faça exercícios com fracções
+Comment[pt_BR]=Exercícios práticos com frações
+Comment[ru]=Практические упражнения с дробями
+Comment[sk]=Cvičenie operácií so zlomkami
+Comment[sl]=Vaje računanja z ulomki
+Comment[sr]=Вежбајте задатке са разломцима
+Comment[sr at Latn]=Vežbajte zadatke sa razlomcima
+Comment[sv]=Övningar med bråk
+Comment[ta]=பின்னங்களில் செயல்முறை பயிற்சிகள்
+Comment[tg]=Машқҳои таҷрибавӣ барои ададҳои касрӣ
+Comment[tr]=Parçalarla alıştırmalara çalış
+Comment[uk]=Практичні вправи з дробами
+Comment[vi]=Bài luyện tập tính toán với phân số
+Comment[zh_CN]=练习分数
+Comment[zh_TW]=練習計算分數題
+Terminal=false
+Name=KBruch
+Name[bn]=কে-ব্রুচ
+Name[hi]=के-ब्रच
+Name[pa]=ਕਬੁਰਸ਼
+Name[sv]=Kbruch
+Name[ta]=கேபிரயுச்
+Categories=Qt;KDE;Education;Math;
diff --git a/debian-edu-config/share/debian-edu/students/share/apps/kdesktop/Desktop/keduca.desktop b/debian-edu-config/share/debian-edu/students/share/apps/kdesktop/Desktop/keduca.desktop
new file mode 100644
index 0000000..6efa113
--- /dev/null
+++ b/debian-edu-config/share/debian-edu/students/share/apps/kdesktop/Desktop/keduca.desktop
@@ -0,0 +1,113 @@
+[Desktop Entry]
+Encoding=UTF-8
+GenericName=Tests & Exams
+GenericName[af]=Toetse & Eksamens
+GenericName[ar]=الاختبارات والامتحانات
+GenericName[bg]=Тестове и изпити
+GenericName[bn]=পরীক্ষা
+GenericName[bs]=Testovi i ispiti
+GenericName[ca]=Proves i exàmens
+GenericName[cs]=Testy a zkoušky
+GenericName[cy]=Arbrofion ac Arholiadau
+GenericName[da]=Test & eksaminer
+GenericName[de]=Tests und Prüfungen
+GenericName[el]=Τεστ & Eξετάσεις
+GenericName[es]=Pruebas y exámenes
+GenericName[et]=Testid ja eksamid
+GenericName[eu]=Testak eta azterketak
+GenericName[fa]=آزمون و امتحان
+GenericName[fi]=Testit ja kokeet
+GenericName[fo]=Royndir
+GenericName[fr]=Tests et examens
+GenericName[ga]=Teisteanna agus Scrúduithe
+GenericName[gl]=Test e exames
+GenericName[he]=מבחנים
+GenericName[hi]=जाँच व परीक्षा
+GenericName[hu]=Tesztkészítő
+GenericName[is]=Verkefni & Próf
+GenericName[it]=Prove ed esami
+GenericName[ja]=テスト & 試験
+GenericName[km]=ការ​ប្រលង និង សាកល្បង
+GenericName[lt]=Testai ir egzaminai
+GenericName[lv]=Testi & Eksāmeni
+GenericName[mk]=Тестови и испити
+GenericName[mn]=Тест ба Шалгалт
+GenericName[ms]=Ujian dan Peperiksaan
+GenericName[nb]=Prøver og eksamener
+GenericName[nl]=Toetsen & examens
+GenericName[nn]=Testar og prøvar
+GenericName[nso]=Meleko & Dithlahlobo
+GenericName[pa]=ਟੈਸਟ ਤੇ ਪ੍ਰੀਖਿਆ
+GenericName[pl]=Testy i egzaminy
+GenericName[pt]=Testes e Exames
+GenericName[pt_BR]=Testes & Exames
+GenericName[ru]=Экзаменатор KDE
+GenericName[se]=Geahččaleamit ja eksamenat
+GenericName[sk]=Testy a skúšky
+GenericName[sl]=Preizkusi in izpiti
+GenericName[sr]=Тестови и испити
+GenericName[sr at Latn]=Testovi i ispiti
+GenericName[sv]=Prov och examen
+GenericName[ta]=சோதனைகளும் தேர்வுகளும்
+GenericName[tg]=Санҷиш ва Имтиҳон
+GenericName[tr]=Sınavlar ve Testler
+GenericName[uk]=Тести та екзамени
+GenericName[ven]=linga & Mulingo
+GenericName[vi]=Kiểm tra & Thi
+GenericName[xh]=Uvavanyo Nemviwo
+GenericName[zh_CN]=测验和考试
+GenericName[zh_TW]=測驗與考試
+GenericName[zu]=Izivivinyo kanye Nokubhalwa kwezivivinyo
+Comment=KDE Tests & Exams Program
+Comment[bn]=কে.ডি.ই. উপস্থাপিত পরীক্ষা নেওয়ার প্রোগ্রাম
+Comment[bs]=KDE program za testove i ispite
+Comment[ca]=Programa de proves i exàmens per a KDE
+Comment[cs]=KDE program pro testování a zkoušení
+Comment[da]=Test- og eksamensprogram for KDE
+Comment[de]=KDE Test- und Prüfungsprogramm
+Comment[el]=Πρόγραμμα εξετάσεων και ελέγχων του KDE
+Comment[es]=Programa de exámenes y tests de KDE
+Comment[et]=KDE testide ja eksamite programm
+Comment[eu]=KDE testak eta azterketak programa
+Comment[fa]=آزمونهای KDE و برنامۀ امتحانها
+Comment[fi]=KDE Testaus- ja koeohjelma
+Comment[fr]=Programme de tests et d'examens de KDE
+Comment[he]=תוכנת מבחנים ובחנים של KDE
+Comment[hu]=Teszt- és viszgakészítő program
+Comment[it]=Prove ed esami per KDE
+Comment[ja]=KDE テスト & 試験
+Comment[km]=កម្មវិធី​ប្រលង និង សាកល្បង
+Comment[nl]=KDE-programma voor tests en examens
+Comment[pl]=Program do testów i egzaminów dla KDE
+Comment[pt]=Programa de Testes & Exames do KDE
+Comment[pt_BR]=Programa de Testes & Exames do KDE
+Comment[ru]=Простая программа для проведения тестов
+Comment[sk]=KDE testovacie a skúšacie programy
+Comment[sl]=Program za izdelavo testov
+Comment[sr]=KDE програм за тестове и испите
+Comment[sr at Latn]=KDE program za testove i ispite
+Comment[sv]=Prov- och examenprogram för KDE
+Comment[uk]=Програма для тестів та екзаменів
+Comment[vi]=Chương trình Kiểm tra & Thi KDE
+Comment[zh_CN]=KDE 测验和考试程序
+Comment[zh_TW]=KDE 測驗與考試的程式
+Exec=keduca
+TryExec=/usr/bin/keduca
+Icon=keduca
+MimeType=application/x-edu;application/x-edugallery
+Name=KEduca
+Name[af]=Keduca
+Name[ar]=التعليم ك
+Name[bn]=কে-এডুকা
+Name[hi]=के-एज़ुका
+Name[mn]=КСургалт
+Name[pa]=ਕ-ਪ੍ਰੀਖਿਆ
+Name[sv]=Keduca
+Name[ta]=கேயுடியுகா
+Name[ven]=Pfunzo ya K
+DocPath=keduca/index.html
+Path=
+Terminal=false
+Type=Application
+X-DCOP-ServiceType=Multi
+Categories=Qt;KDE;Education;X-KDE-Edu-Teaching;
diff --git a/debian-edu-config/share/debian-edu/students/share/apps/kdesktop/Desktop/kig.desktop b/debian-edu-config/share/debian-edu/students/share/apps/kdesktop/Desktop/kig.desktop
new file mode 100644
index 0000000..cdbf2f1
--- /dev/null
+++ b/debian-edu-config/share/debian-edu/students/share/apps/kdesktop/Desktop/kig.desktop
@@ -0,0 +1,96 @@
+[Desktop Entry]
+Encoding=UTF-8
+Name=Kig
+Name[bn]=কিগ
+Name[hi]=केआईजी
+Name[pa]=ਕਿਗ
+Name[ta]=கிக்
+GenericName=Interactive Geometry
+GenericName[af]=Interaktiewe Meetkunde
+GenericName[bg]=Интерактивна геометрия
+GenericName[bn]=ইন্টারঅ্যাকটিভ জ্যামিতি
+GenericName[bs]=Interaktivna geometrija
+GenericName[ca]=Geometria interactiva
+GenericName[cs]=Interaktivní geometrie
+GenericName[cy]=Geometreg Rhyngweithiol
+GenericName[da]=Interaktiv geometri
+GenericName[de]=Interaktive Geometrie
+GenericName[el]=Aλληλεπιδραστική γεωμετρία
+GenericName[es]=Geometría interactiva
+GenericName[et]=Interaktiivne geomeetria
+GenericName[eu]=Geometria interaktiboa
+GenericName[fa]=هندسۀ تعاملی
+GenericName[fi]=Interaktiivinen Geometria
+GenericName[fr]=Géométrie interactive
+GenericName[gl]=Xeometría interactiva
+GenericName[he]=גאומטריה אינטראקטיבית
+GenericName[hi]=इंटरएक्टिव ज्यॉमिती
+GenericName[hr]=Interaktivna geometrija
+GenericName[hu]=Interaktív geometria
+GenericName[is]=Gagnvirk rúmfræði
+GenericName[it]=Geometria interattiva
+GenericName[ja]=幾何学との対話
+GenericName[km]=ធរណីមាត្រ​អន្តរកម្ម
+GenericName[lt]=Interaktyvi geometrija
+GenericName[nb]=Interaktiv geometri
+GenericName[nl]=Interactieve geometry
+GenericName[nn]=Interaktiv geometri
+GenericName[pl]=Interaktywna geometria
+GenericName[pt]=Geometria Interactiva
+GenericName[pt_BR]=Geometria Interativa
+GenericName[ru]=Интерактивная геометрия
+GenericName[sk]=Interaktívna geometria
+GenericName[sl]=Interaktivna geometrija
+GenericName[sr]=Интерактивна геометрија
+GenericName[sr at Latn]=Interaktivna geometrija
+GenericName[sv]=Interaktiv geometri
+GenericName[ta]= ஊடாடும் வடிவியல்
+GenericName[tg]=Геометрияи интерактивӣ
+GenericName[tr]=Etkileşimli Geometri
+GenericName[uk]=Інтерактивна геометрія
+GenericName[ven]=Geometry yau shumea nayo
+GenericName[vi]=Hình học Tương tác
+GenericName[xh]=Umyili Wesiboniso Esingaphakathi
+GenericName[zh_CN]=交互几何
+GenericName[zh_TW]=交互式幾何作圖
+GenericName[zu]=Ukubekeka Kwebalazwe Kokukhulumisanayo
+Comment=Explore Geometric Constructions
+Comment[bn]=জ্যামিতি ছবি আঁকা চর্চা করুন
+Comment[bs]=Istražite geometrijske konstrukcije
+Comment[ca]=Explora construccions geomètriques
+Comment[cs]=Objevujte geometrické konstrukce
+Comment[da]=Udforsk geometriske konstruktioner
+Comment[de]=Geometrische Konstruktionen untersuchen
+Comment[el]=Εξερεύνηση γεωμετρικών κατασκευών
+Comment[es]=Exploración de construcciones geométricas
+Comment[et]=Geomeetriliste kujundite tundmaõppimine
+Comment[eu]=Arakatu geometria egiturak
+Comment[fa]=کاوش ساختارهای هندسی
+Comment[fi]=Tutki geometrisia rakenteita
+Comment[fr]=Explorer les constructions géométriques
+Comment[he]=חקור מבנים גאומטריים
+Comment[hu]=Geometriai oktatóprogram
+Comment[it]=Esplora le costruzioni geometriche
+Comment[ja]=幾何学との対話
+Comment[km]=រុករក​សំណង់​ធរណីមាត្រ
+Comment[nl]=Ruimtelijke constructies verkennen
+Comment[pl]=Zabawa konstrukcjami geometrycznymi
+Comment[pt]=Explorar Construções Geométricas
+Comment[pt_BR]=Explorar Construções Geométricas
+Comment[ru]=Работа с геометрическими построениями
+Comment[sk]=Prieskum geometrických konštrukcií
+Comment[sl]=Raziskovanje geometrijskih konstrukcij
+Comment[sr]=Истражујте геометријске конструкције
+Comment[sr at Latn]=Istražujte geometrijske konstrukcije
+Comment[sv]=Utforska geometriska konstruktioner
+Comment[uk]=Дослідження геометричних конструкцій
+Comment[vi]=Khám phá các phép Dụng Hình học
+Comment[zh_TW]=作出幾何圖形
+Exec=kig %i %m -caption "%c"
+TryExec=/usr/bin/kig
+MimeType=application/x-kig;application/x-kgeo;
+Icon=kig
+Type=Application
+DocPath=kig/index.html
+Terminal=false
+Categories=Qt;KDE;Education;Math;
diff --git a/debian-edu-config/share/debian-edu/students/share/apps/kdesktop/Desktop/klatin.desktop b/debian-edu-config/share/debian-edu/students/share/apps/kdesktop/Desktop/klatin.desktop
new file mode 100644
index 0000000..b5513f2
--- /dev/null
+++ b/debian-edu-config/share/debian-edu/students/share/apps/kdesktop/Desktop/klatin.desktop
@@ -0,0 +1,108 @@
+[Desktop Entry]
+Encoding=UTF-8
+Type=Application
+Exec=klatin -caption "%c" %i %m
+TryExec=/usr/bin/klatin
+Icon=klatin
+DocPath=klatin/index.html
+Comment=A program to help revise Latin
+Comment[af]='n Program om Latyn te help hersien
+Comment[bg]=Самоучител по латински
+Comment[bn]=ল্যাটিন ভাষা চর্চায় সহায়তা করার একটি প্রোগ্রাম
+Comment[bs]=Program za pomoć pri revidiranju Latinskog
+Comment[ca]=Un programa per ajudar a revisar el llatí
+Comment[cs]=Program na procvičování latiny
+Comment[cy]=Rhaglen i helpu adolygu Lladin
+Comment[da]=Et program til at hjælpe med at revidere Latin
+Comment[de]=Ein Programm, das beim Erlernen der lateinischen Sprache hilft
+Comment[el]=Μία εφαρμογή για να ξαναθυμηθείτε τα Λατινικά
+Comment[es]=Un programa de ayuda para la corrección del latín
+Comment[et]=Ladina keele õpiprogramm
+Comment[eu]=Latina errepasatzeko tresna bat
+Comment[fa]=برنامه‌ای برای کمک به بازبینی لاتین
+Comment[fi]=Ohjelma latinan harjoitteluun
+Comment[fr]=Un programme pour aider à réviser le latin
+Comment[gl]=Un programa que axuda a repasar latín
+Comment[he]=תכנה לעזרה בהגיית לטינית
+Comment[hi]=एक प्रोग्राम जो आपको लेटिन को सुधारने में मदद करता है
+Comment[hu]=Oktatóprogram a latin nyelv gyakorlásához
+Comment[is]=Forrit til að fara yfir Latínu
+Comment[it]=Un programma per ripassare il Latino
+Comment[ja]=ラテン語を学習するプログラム
+Comment[km]=កម្មវិធី​សម្រាប់​ជួយ​កែប្រែ​ភាសា​ឡាតាំង
+Comment[mk]=Програма која ќе ви помогне да го повторите латинскиот јазик
+Comment[nb]=Eit øvingsprogram i latin
+Comment[nl]=Een programme om uw Latijn op te halen
+Comment[nn]=Eit øvingsprogram i latin
+Comment[pl]=Program do powtarzania łaciny
+Comment[pt]=Programa para rever Latim
+Comment[pt_BR]=Um programa para ajudar a revisão de Latim
+Comment[ru]=Программа обучения латыни
+Comment[sk]=Program pre latinčinu
+Comment[sl]=Program za pregled latinščine
+Comment[sr]=Програм за помоћ у обнови латинског
+Comment[sr at Latn]=Program za pomoć u obnovi latinskog
+Comment[sv]=Ett program för att hjälpa till med latinrepetition
+Comment[ta]=லத்தீனை மறு ஆய்வு செய்ய உதவும் ஒரு நிரல்
+Comment[tg]=Банома барои хондани забони Лотинӣ
+Comment[tr]=Latince'yi gözden geçirmenize yardım eden bir uygulama
+Comment[uk]=Програма для повторення латині
+Comment[vi]=Một chương trình giúp ôn tập tiếng Latin
+Comment[zh_CN]=帮助复习拉丁语的程序
+Comment[zh_TW]=練習拉丁文的程式
+Terminal=false
+Name=KLatin
+Name[af]=K-Latyn
+Name[bn]=কে-ল্যাটিন
+Name[hi]=के-लेटिन
+Name[is]=KLatína
+Name[pl]=Łacina
+Name[sv]=Klatin
+Name[ta]=கேலத்தின்
+Name[tg]=KЛотинӣ
+Name[ven]=Tshilatini tsha K
+GenericName=Latin Reviser
+GenericName[af]=Latyn Hersiener
+GenericName[bg]=Самоучител по латински
+GenericName[bn]=ল্যাটিন চর্চা
+GenericName[bs]=Revidiranje Latinskog
+GenericName[ca]=Revisor de llatí
+GenericName[cs]=Procvičování latiny
+GenericName[cy]=Adolygydd Lladin
+GenericName[da]=Latin-reviderer
+GenericName[de]=Latein-Übungen
+GenericName[el]=Εφαρμογή φρεσκαρίσματος των Λατινικών
+GenericName[es]=Revisor de latín
+GenericName[et]=Ladina keele õpiprogramm
+GenericName[eu]=Latin errepasatzailea
+GenericName[fa]=بازبینی لاتین
+GenericName[fi]=Latinan harjoitukset
+GenericName[fr]=Outil de révision du latin
+GenericName[gl]=Utilidade de repaso de latín
+GenericName[he]=הגייה לטינית
+GenericName[hi]=लेटिन सुधारक
+GenericName[hu]=Latinoktató
+GenericName[is]=Latínupúki
+GenericName[it]=Studio del Latino
+GenericName[ja]=ラテン語の学習
+GenericName[km]=កម្មវិធី​កែប្រែ​ភាសា​ឡាតាំង
+GenericName[nb]=Øvingsprogram i latin
+GenericName[nl]=Latijn
+GenericName[nn]=Øvingsprogram i latin
+GenericName[pl]=Program do powtarzania łaciny
+GenericName[pt]=Revisão de Latim
+GenericName[pt_BR]=Revisor de Latim
+GenericName[ru]=Обучение латыни
+GenericName[sk]=Výuka latinčiny
+GenericName[sl]=Pregled latinščine
+GenericName[sr]=Обнављач латинског
+GenericName[sr at Latn]=Obnavljač latinskog
+GenericName[sv]=Latinrepetition
+GenericName[ta]=லத்தீன் மறு ஆய்வி
+GenericName[tg]=Намоишгари Лотинӣ
+GenericName[tr]=Latince Gözden Geçiricisi
+GenericName[uk]=Повторення латині
+GenericName[vi]=Ôn tập Latin
+GenericName[zh_CN]=拉丁语复习工具
+GenericName[zh_TW]=拉丁語復習
+Categories=Qt;KDE;Education;X-KDE-Edu-Language;
diff --git a/debian-edu-config/share/debian-edu/students/share/apps/kdesktop/Desktop/kmplot.desktop b/debian-edu-config/share/debian-edu/students/share/apps/kdesktop/Desktop/kmplot.desktop
new file mode 100644
index 0000000..591a7af
--- /dev/null
+++ b/debian-edu-config/share/debian-edu/students/share/apps/kdesktop/Desktop/kmplot.desktop
@@ -0,0 +1,118 @@
+# KDE Config File
+[Desktop Entry]
+Encoding=UTF-8
+Type=Application
+Exec=kmplot
+TryExec=/usr/bin/kmplot
+Icon=kmplot
+DocPath=kmplot/index.html
+Comment=Function Plotter
+Comment[af]=Funksieplotter
+Comment[ar]=مخطط وظيفة
+Comment[bg]=Чертане на функции
+Comment[bn]=ফাংশন প্লটার
+Comment[br]=Tresell fonksion
+Comment[bs]=Crtač funkcija
+Comment[ca]=Traçador de funcions
+Comment[cs]=Zobrazení funkce
+Comment[cy]=Plotydd Ffwythiannau
+Comment[da]=Funktionsprogram
+Comment[de]=Funktionsplotter
+Comment[el]=Γραφική αναπαράσταση συναρτήσεων
+Comment[es]=Trazador de funciones
+Comment[et]=Funktsioonide graafiku joonistaja
+Comment[eu]=Funtzio-marrazkigilea
+Comment[fa]=رسام تابع
+Comment[fi]=Kuvaajapiirturi
+Comment[fo]=Funkateknari
+Comment[fr]=Traceur de courbes
+Comment[ga]=Breacaire Feidhmeanna
+Comment[gl]=Utilidade para a representación gráfica de funcións
+Comment[he]=תווין פונקציות
+Comment[hi]=फंक्शन प्लॉट करने वाला
+Comment[hr]=Crtač funkcija
+Comment[hu]=Függvényábrázoló
+Comment[is]=Teiknar gröf falla
+Comment[it]=Grafici di funzioni
+Comment[ja]=関数プロッタ
+Comment[km]=កម្មវិធី​គ្រោង​អនុគមន៍
+Comment[lt]=funkcijinis braižytuvas
+Comment[lv]=Funkciju Zīmētājs
+Comment[mk]=Цртач на функции
+Comment[mn]=Функцийн плоттер
+Comment[ms]=Plot Fungsi
+Comment[nb]=Funksjonsplotter
+Comment[nl]=functieplotter
+Comment[nn]=Funksjonsteiknar
+Comment[nso]=Mmei wa Pereko
+Comment[pl]=Program rysujący wykresy funkcji
+Comment[pt]=Desenho de funções
+Comment[pt_BR]=função plotter
+Comment[ru]=Построение графиков функций
+Comment[se]=Funkšuvdnasárgojeaddji
+Comment[sk]=Kreslenie funkcií
+Comment[sl]=Risanje funkcij
+Comment[sr]=Цртач функција
+Comment[sr at Latn]=Crtač funkcija
+Comment[sv]=Funktionsritare
+Comment[ta]=இயக்க வரைவி
+Comment[tg]=Плоттери Функсионалӣ
+Comment[tr]=Fonksiyon Noktalayıcı
+Comment[uk]=Побудова графіків функцій
+Comment[ven]=Mushumo wa tshiiti tsha nyito
+Comment[vi]=Vẽ đồ thị Hàm số
+Comment[xh]=Umzobi Womsebenzi
+Comment[zh_CN]=函数绘图程序
+Comment[zh_TW]=函數繪圖程式
+Comment[zu]=Umbheki Womsebenzi
+Terminal=false
+Name=KmPlot
+Name[ar]=المخطط
+Name[bn]=কে-এমপ্লট
+Name[hi]=के-एम-प्लॉट
+Name[sv]=Kmplot
+Name[ta]=கேஎம்பிளாட்
+Name[ven]=Mutodo wa Km
+Name[vi]=Đồ thị K
+Categories=Qt;KDE;Education;Math;
+MimeType=application/x-kmplot
+GenericName=Mathematical Function Plotter
+GenericName[bg]=Интерактивна геометрия
+GenericName[bn]=গাণিতিক ফাংশন প্লটার
+GenericName[bs]=Crtač matematičkih funkcija
+GenericName[ca]=Traçador de funcions matemàtiques
+GenericName[cs]=Kreslení funkcí
+GenericName[cy]=Plotydd Ffwythiannau Mathemategol
+GenericName[da]=Matematisk funktionsplotter
+GenericName[de]=Mathematischer Funktionsplotter
+GenericName[el]=Γραφική αναπαράσταση συναρτήσεων
+GenericName[es]=Trazador de funciones matemáticas
+GenericName[et]=Matemaatiliste funktsioonide graafiku joonistaja
+GenericName[eu]=Funtzio matematikoen marrazkigilea
+GenericName[fa]=رسام تابع ریاضی
+GenericName[fi]=Matemaattisten funktioiden kuvaajapiirturi
+GenericName[fr]=Traceur de fonctions mathématiques
+GenericName[ga]=Breacaire Feidhmeanna Matamaiticiúla
+GenericName[he]=תוין פונקציות מתמטיות
+GenericName[hu]=Függvényábrázoló
+GenericName[is]=Teiknar gröf falla
+GenericName[it]=Grafici di funzioni matematiche
+GenericName[ja]=数学関数プロッタ
+GenericName[km]=កម្មវិធី​គ្រោង​អនុគមន៍​គណិតវិទ្យា
+GenericName[nb]=Matematisk Funksjonsplotter
+GenericName[nl]=Wiskundige functieplotter
+GenericName[pl]=Program rysujący funkcje matematyczne
+GenericName[pt]=Desenho de Funções Matemáticas
+GenericName[pt_BR]=Plotter de Função Matemáticas
+GenericName[ru]=Графопостроитель функций
+GenericName[sk]=Kreslenie matematických funkcií
+GenericName[sl]=Risanje matematičnih funkcij
+GenericName[sr]=Цртач математичких функција
+GenericName[sr at Latn]=Crtač matematičkih funkcija
+GenericName[sv]=Matematisk funktionsritare
+GenericName[ta]=கணக்கியல் இயக்க வரைவி
+GenericName[tr]=Matematiksel Fonksiyon Çizici
+GenericName[uk]=Графобудівник математичних функцій
+GenericName[vi]=Vẽ đồ thị Hàm số Toán học
+GenericName[zh_CN]=数学函数绘图器
+GenericName[zh_TW]=函數繪圖程式
diff --git a/debian-edu-config/share/debian-edu/students/share/apps/kdesktop/Desktop/kpercentage.desktop b/debian-edu-config/share/debian-edu/students/share/apps/kdesktop/Desktop/kpercentage.desktop
new file mode 100644
index 0000000..6a27d71
--- /dev/null
+++ b/debian-edu-config/share/debian-edu/students/share/apps/kdesktop/Desktop/kpercentage.desktop
@@ -0,0 +1,74 @@
+[Desktop Entry]
+Encoding=UTF-8
+Name=KPercentage
+Name[af]=K-Persentasie
+Name[ar]=النسبة المئوية
+Name[bn]=কে-পার্সেন্টেজ
+Name[cy]=Kamran
+Name[fo]=KProsent
+Name[hi]=के-परसेंटेज
+Name[hr]=Postotak
+Name[is]=KPrósentur
+Name[mn]=KХувь
+Name[pt_BR]=KPor cento
+Name[sv]=Kpercentage
+Name[ta]=கேவிழுக்காடு 
+Name[ven]=Zwa nomboro ya dana
+Name[vi]=Phần trăm K
+GenericName=Exercise Percentages
+GenericName[af]=Oefen Persentasies
+GenericName[ar]=تمرين النسبة المئويّة
+GenericName[bg]=Упражнения с проценти
+GenericName[bn]=শতাংশের অংক অনুশীলন করুন
+GenericName[bs]=Vježbajte postotke
+GenericName[ca]=Percentatges d'exercici
+GenericName[cs]=Procvičování procent
+GenericName[cy]=Ymarfer Canrannau
+GenericName[da]=Øvelser med procent
+GenericName[de]=Prozentrechnung üben
+GenericName[el]=Εξάσκηση με ποσοστά
+GenericName[es]=Ejercitar porcentajes
+GenericName[et]=Harjutused protsentidega
+GenericName[eu]=Entrenatu portzentaiak
+GenericName[fa]=تمرین درصدها
+GenericName[fi]=Harjoittele prosentteja
+GenericName[fr]=Exercices pratiques avec des pourcentages
+GenericName[gl]=Exercicios de porcentaxes
+GenericName[he]=מתרגל אחוזים
+GenericName[hi]=प्रतिशत अभ्यास
+GenericName[hu]=Százalékszámító
+GenericName[is]=Æfa prósentureikninga
+GenericName[it]=Esercizi con le percentuali
+GenericName[ja]=パーセンテージ(百分率)の練習
+GenericName[km]=លំហាត់​ភាគរយ
+GenericName[mk]=Вежбајте проценти
+GenericName[nb]=Prosent-øvelser
+GenericName[nl]=Percentages oefenen
+GenericName[nn]=Prosentøvingar
+GenericName[pl]=Ćwiczenia z procentów
+GenericName[pt]=Exercícios com Percentagens
+GenericName[pt_BR]=Exercitar Porcentagens
+GenericName[ru]=Упражнения с процентами
+GenericName[sk]=Cvičenie percent
+GenericName[sl]=Vaje z odstotki
+GenericName[sr]=Вежбајте проценте
+GenericName[sr at Latn]=Vežbajte procente
+GenericName[sv]=Öva procenttal
+GenericName[ta]=பயிற்ஞி விழுக்காடு
+GenericName[tg]=Машқҳо барои ҳисоби фоиз
+GenericName[tr]=Çalışma Oranları
+GenericName[uk]=Вправи з відсотками
+GenericName[vi]=Bài tập tính Phần trăm
+GenericName[zh_CN]=练习百分数
+GenericName[zh_TW]=練習百分率計算
+Comment=
+Comment[bn]=মন্তব্য
+Comment[sl]=Periodna tabela elementov
+Exec=kpercentage
+TryExec=/usr/bin/kpercentage
+Terminal=false
+Icon=kpercentage
+Type=Application
+DocPath=kpercentage/index.html
+
+Categories=Qt;KDE;Education;Math;
diff --git a/debian-edu-config/share/debian-edu/students/share/apps/kdesktop/Desktop/kstars.desktop b/debian-edu-config/share/debian-edu/students/share/apps/kdesktop/Desktop/kstars.desktop
new file mode 100644
index 0000000..7150b4d
--- /dev/null
+++ b/debian-edu-config/share/debian-edu/students/share/apps/kdesktop/Desktop/kstars.desktop
@@ -0,0 +1,133 @@
+# KDE Config File
+[Desktop Entry]
+Encoding=UTF-8
+Type=Application
+Exec=kstars -caption "%c" %i %m
+TryExec=/usr/bin/kstars
+Icon=kstars
+DocPath=kstars/index.html
+Comment=Desktop Planetarium
+Comment[af]=Werkskerm Planetarium
+Comment[ar]=قبة سماوية لسطح المكتب
+Comment[bg]=Планетариум за работния плот
+Comment[bn]=ডেস্কটপ প্ল্যানেটোরিয়াম
+Comment[br]=Planetarium a vurev
+Comment[bs]=Planetarium na desktopu
+Comment[ca]=Planetari per a l'escriptori
+Comment[cs]=Planetárium na vaší obrazovce
+Comment[cy]=Planetariwm Penbwrdd
+Comment[da]=Planetarieprogram
+Comment[de]=Das Planetarium für den Schreibtisch
+Comment[el]=Πλανητάριο επιφάνειας εργασίας
+Comment[es]=Planetario para el escritorio
+Comment[et]=Töölaua planetaarium
+Comment[eu]=Mahaigaineko planetarioa
+Comment[fa]=رومیزی آسمان‌نما
+Comment[fi]=Työpöytäplanetaario
+Comment[fr]=Planétarium
+Comment[gl]=Planetario para o escritorio
+Comment[he]=פלנטריום שולחני
+Comment[hi]=डेस्कटॉप प्लेनेटेरियम
+Comment[hr]=Planetarij za radnu površinu
+Comment[hu]=Munkaasztali planetárium
+Comment[is]=Skjáborðsstjörnuver
+Comment[it]=Planetario per il desktop
+Comment[ja]=デスクトッププラネタリウム
+Comment[km]=សំណាក​ចក្រវាល​ផ្ទៃ​តុ
+Comment[lt]=Darbastalio planetariumas
+Comment[lv]=Darbvirsmas Planetārijs
+Comment[mk]=Планетариум на работна површина
+Comment[mn]=Дэлгэцэн дээрх Оддын Хотхон
+Comment[ms]=Planetarium Ruang Kerja
+Comment[nb]=Skrivebordsplanetarium
+Comment[nds]=Planetarium för'n Schriefdisch
+Comment[nl]=Desktop-planetarium
+Comment[nn]=Skrivebordsplanetarium
+Comment[nso]=Planetarium ya Desktop
+Comment[pl]=Planetarium na pulpicie
+Comment[pt]=Planetário
+Comment[pt_BR]=Planetário do Ambiente de trabalho
+Comment[ru]=Настольный планетарий
+Comment[se]=Čállenbeavdeplánetaria
+Comment[sk]=Planetárium na vašej ploche
+Comment[sl]=Namizni planetarij
+Comment[sr]=Планетаријум на радној површини
+Comment[sr at Latn]=Planetarijum na radnoj površini
+Comment[sv]=Skrivbordsplanetarium
+Comment[ta]= பணிமேடை கோளரங்கம்
+Comment[tg]=Планетариуми Мизи Корӣ
+Comment[tr]=Masaüstünde Yıldızlar
+Comment[uk]=Настільний планетарій
+Comment[ven]=Vhusumbedzhwa mupo ya Desikithopo
+Comment[vi]=Ngắm sao trên Màn hình máy tính
+Comment[xh]=Indlu ye Desktop
+Comment[zh_CN]=桌面天文馆
+Comment[zh_TW]=桌面星象儀
+Comment[zu]=Okwemikhathi kwe-Desktop
+Terminal=false
+Name=KStars
+Name[af]=K-sterre
+Name[ar]=نجوم ك
+Name[bn]=কে-স্টার
+Name[cy]=KSer
+Name[fo]=KStjørnur
+Name[hi]=के-स्टार्स
+Name[is]=KStjörnur
+Name[mn]=K-Од
+Name[pl]=Gwiazdy
+Name[pt_BR]=Estrelas
+Name[sv]=Kstars
+Name[ta]=கேஸ்டார்ஸ்
+Name[ven]=Vhadivhalea vha K
+Name[vi]=Sao K
+GenericName=Desktop Planetarium
+GenericName[af]=Werkskerm Planetarium
+GenericName[ar]=نموذج النظام الشمسي لسطح المكتب
+GenericName[bg]=Планетариум за работния плот
+GenericName[bn]=ডেস্কটপ প্ল্যানেটোরিয়াম
+GenericName[br]=Planetarium a vurev
+GenericName[bs]=Desktop planetarijum
+GenericName[ca]=Planetari per a l'escriptori
+GenericName[cs]=Planetárium na vaší obrazovce
+GenericName[cy]=Planetariwm Penbwrdd
+GenericName[da]=Planetarieprogram
+GenericName[de]=Elektronisches Planetarium
+GenericName[el]=Πλανητάριο επιφάνειας εργασίας
+GenericName[es]=Planetario para el escritorio
+GenericName[et]=Töölaua planetaarium
+GenericName[eu]=Mahaigaineko planetarioa
+GenericName[fa]=رومیزی آسمان‌نما 
+GenericName[fi]=Työpöytäplanetaario
+GenericName[fr]=Planétarium
+GenericName[gl]=Planetario
+GenericName[he]=פלנטריום שולחני
+GenericName[hi]=डेस्कटॉप प्लेनेटेरियम
+GenericName[hu]=Planetárium
+GenericName[is]=Skjáborðsstjörnuver
+GenericName[it]=Planetario per il desktop
+GenericName[ja]=デスクトッププラネタリウム
+GenericName[km]=សំណាក​ចក្រវាល​ផ្ទៃ​តុ
+GenericName[lt]=Darbastalio planetariumas
+GenericName[mk]=Планетариум на раб. површина
+GenericName[nb]=Skrivebordsplanetarium
+GenericName[nds]=Planetarium för'n Schriefdisch
+GenericName[nl]=Bureaublad-planetarium
+GenericName[nn]=Skrivebordsplanetarium
+GenericName[pl]=Planetarium na biurku
+GenericName[pt]=Planetário
+GenericName[pt_BR]=Planetário do Ambiente de trabalho
+GenericName[ru]=Настольный планетарий
+GenericName[sk]=Planetárium
+GenericName[sl]=Namizni planetarij
+GenericName[sr]=Планетаријум на радној површиниџ
+GenericName[sr at Latn]=Planetarijum na radnoj površinidž
+GenericName[sv]=Skrivbordsplanetarium
+GenericName[ta]=பணிமேடை கோளரங்கம்
+GenericName[tg]=Планетариуми Мизи Корӣ
+GenericName[tr]=Masaüstü Yıldız Evi
+GenericName[uk]=Настільний планетарій
+GenericName[vi]=Ngắm sao trên Màn hình
+GenericName[zh_CN]=桌面天文馆
+GenericName[zh_TW]=桌面星象儀
+X-DCOP-ServiceType=Multi
+Categories=Qt;KDE;Education;Science;Astronomy;
diff --git a/debian-edu-config/share/debian-edu/students/share/apps/kdesktop/Desktop/kturtle.desktop b/debian-edu-config/share/debian-edu/students/share/apps/kdesktop/Desktop/kturtle.desktop
new file mode 100644
index 0000000..c78bf3e
--- /dev/null
+++ b/debian-edu-config/share/debian-edu/students/share/apps/kdesktop/Desktop/kturtle.desktop
@@ -0,0 +1,107 @@
+[Desktop Entry]
+Encoding=UTF-8
+DocPath=kturtle/index.html
+Name=KTurtle
+Name[af]=KSkilpad
+Name[bn]=কে-টার্টল
+Name[fi]=Konna
+Name[hi]=के-टर्टल
+Name[is]=KSkjaldbaka
+Name[sv]=Kturtle
+Name[tg]=KСангпушт
+GenericName=Logo Programming Environment
+GenericName[af]=Logo Programmeeromgewing
+GenericName[bg]=Програмиране на Лого
+GenericName[bn]=লোগো প্রোগ্রামিং
+GenericName[bs]=Logo programsko okruženje
+GenericName[ca]=Entorn de programació de Logo
+GenericName[cs]=Logo programovací prostředí
+GenericName[cy]=Amgylchedd Rhaglennu Logo
+GenericName[da]=Logo programmeringsmiljø
+GenericName[de]=Logo-Programmierumgebung
+GenericName[el]=Περιβάλλον προγραμματισμού σε Logo
+GenericName[es]=Entorno de programación de Logo
+GenericName[et]=Logo programmeerimise keskkond
+GenericName[eu]=Logo programazio ingurunea
+GenericName[fa]=محیط برنامه‌سازی لوگو
+GenericName[fi]=Logo-ohjelmointiympäristö
+GenericName[fr]=Environnement de programmation en Logo
+GenericName[gl]=Contorno de programación en Logo
+GenericName[he]=סביבת תכנות לשפת לוגו
+GenericName[hi]=लोगो डेवलपमेंट माहौल.
+GenericName[hu]=Logo-programozás
+GenericName[is]=Logo forritunarumhverfi
+GenericName[it]=Ambiente di programmazione Logo
+GenericName[ja]=ロゴ プログラミング環境
+GenericName[km]=បរិស្ថាន​កម្មវិធី​រូប​សញ្ញា
+GenericName[nb]=Programmeringsmiljø for Logo
+GenericName[nl]=Logo programmeeromgeving
+GenericName[nn]=Programmeringsmiljø for Logo
+GenericName[pl]=Środowisko do programowania w Logo
+GenericName[pt]=Ambiente de Programação em Logo
+GenericName[pt_BR]=Ambiente de Programação Logo
+GenericName[ru]=Черепашка
+GenericName[sk]=Programovacie prostredie pre Logo
+GenericName[sl]=Programsko okolje za Logo
+GenericName[sr]=Програмерско окружење за Logo
+GenericName[sr at Latn]=Programersko okruženje za Logo
+GenericName[sv]=Logo-programmeringsmiljö
+GenericName[ta]=சிண்ண நிரல் உருவாக சூழல்
+GenericName[tg]=Муҳити барноманависии Logo
+GenericName[tr]=Logo Programlama Ortamı
+GenericName[uk]=Середовище програмування на мові Logo
+GenericName[vi]=Môi trường Lập trình Logo
+GenericName[zh_CN]=Logo 编程环境
+GenericName[zh_TW]=Logo 程式環境
+Exec=kturtle -caption "%c" %i %m
+TryExec=/usr/bin/kturtle
+Icon=kturtle
+Type=Application
+Comment=A KDE Logo programming environment
+Comment[af]='n KDE Logo programmeeromgewing
+Comment[bg]=Среда за програмиране на Лого
+Comment[bn]=কেডিই'র লোগো প্রোগ্রামিং
+Comment[bs]=KDE programsko okruženje za Logo
+Comment[ca]=Un entorn de programació de Logo per a KDE
+Comment[cs]=KDE Logo programovací prostředí
+Comment[cy]=Amgylchedd Rhaglennu Logo KDE
+Comment[da]=Et  KDE Logo programmeringsmiljø
+Comment[de]=Eine KDE-Programmierumgebung für Logo
+Comment[el]=Ένα περιβάλλον προγραμματισμού σε Logo για το KDE
+Comment[es]=Un entorno de programación de Logo para KDE
+Comment[et]=KDE Logo programmeerimise keskkond
+Comment[eu]=KDE-ren Logo programazio ingurune bat
+Comment[fa]=محیط برنامه‌سازی لوگو KDE
+Comment[fi]=KDE Logo-ohjelmointiympäristö
+Comment[fr]=Un environnement de programmation en Logo pour KDE
+Comment[gl]=Un contorno de programación en Logo para KDE
+Comment[he]=סביבצ עבודה של KDE לשפת לוגו
+Comment[hi]=केडीई हेतु लोगो प्रोग्रामिंग माहौल
+Comment[hu]=KDE-alapú Logo-programozási környezet
+Comment[is]=KDE Logo forritunarumhverfi
+Comment[it]=Ambiente di programmazione Logo per KDE
+Comment[ja]=KDE ロゴ プログラミング環境
+Comment[km]=បរិស្ថាន​កម្មវិធី​រូប​សញ្ញា​របស់ KDE
+Comment[nb]=Et KDE-miljø for Logo-programmering
+Comment[nl]=Logo-programmeeromgeving voor KDE
+Comment[nn]=Eit KDE-miljø for Logo-programmering
+Comment[pl]=Środowisko do programowania w Logo dla KDE
+Comment[pt]=Ambiente de programação em Logo para o KDE
+Comment[pt_BR]=Ambiente de programação Logo do KDE
+Comment[ru]=Обучение программированию на языке ЛОГО
+Comment[sk]=KDE programovacie prostredie pre Logo
+Comment[sl]=Okolje za programiranje v jeziku Logo za KDE
+Comment[sr]=KDE програмерско окружење за Logo
+Comment[sr at Latn]=KDE programersko okruženje za Logo
+Comment[sv]=Logo-programmeringsmiljö för KDE
+Comment[ta]=ஒரு KDE சின்னத்தின் நிரலாக்க சூழல்
+Comment[tg]=Муҳити барноманависии KDE Logo
+Comment[tr]=Bir KDE Logo programlama ortamı
+Comment[uk]=KDE середовище програмування на мові Logo
+Comment[vi]=Một môi trường lập trình Logo cho KDE
+Comment[zh_CN]=KDE Logo 编程环境
+Comment[zh_TW]=KDE 的 Logo 程式設計環境
+Path=
+Terminal=false
+X-KDE-StartupNotify=true
+Categories=Qt;KDE;Education;
diff --git a/debian-edu-config/share/debian-edu/students/share/apps/kdesktop/Desktop/kverbos.desktop b/debian-edu-config/share/debian-edu/students/share/apps/kdesktop/Desktop/kverbos.desktop
new file mode 100644
index 0000000..a393bac
--- /dev/null
+++ b/debian-edu-config/share/debian-edu/students/share/apps/kdesktop/Desktop/kverbos.desktop
@@ -0,0 +1,66 @@
+# KDE Config File
+[Desktop Entry]
+Encoding=UTF-8
+Type=Application
+Exec=kverbos -caption "%c" %i %m
+TryExec=/usr/bin/kverbos
+Icon=kverbos
+DocPath=kverbos/index.html
+Comment=
+Comment[bn]=মন্তব্য
+Comment[sl]=Periodna tabela elementov
+Terminal=false
+Name=Kverbos
+Name[ar]=افعال ك
+Name[bn]=কে-ভার্বোস
+Name[hi]=के-वर्बोस
+Name[it]=KVerbos
+Name[ta]=கேவர்போஸ்
+GenericName=Study Spanish Verbforms
+GenericName[af]=Leer Spaanse Werkwoordvorme
+GenericName[ar]=دراسة تصريف الأفعال الأسبانيّة
+GenericName[bg]=Форми на глаголи на испански
+GenericName[bn]=স্প্যানিশ ক্রিয়ারূপ শিখুন
+GenericName[bs]=Naučite španske glagole
+GenericName[ca]=Estudia les formes verbals de l'espanyol
+GenericName[cs]=Španělské slovesné tvary
+GenericName[cy]=Astudio Berfau Sbaeneg
+GenericName[da]=Spanske verber
+GenericName[de]=Spanische Verbformen üben
+GenericName[el]=Μελετήστε Ισπανικά ρήματα
+GenericName[es]=Estudiar las formas verbales del español
+GenericName[et]=Hispaania tegusõnade õppimine
+GenericName[eu]=Ikasi gaztelerako aditz-formak
+GenericName[fa]=بررسی شکل فعلهای اسپانیایی 
+GenericName[fi]=Opiskele espanjan verbimuotoja
+GenericName[fr]=Étude des formes verbales espagnoles
+GenericName[gl]=Aprende as formas verbais do castelán
+GenericName[he]=לימוד צורות פעלים בספרדית
+GenericName[hi]=स्टडी स्पेनिश वेबफ़ॉर्म
+GenericName[hu]=Spanyol igeragozás
+GenericName[is]=Læra spánskar sagnir
+GenericName[it]=Studia i verbi spagnoli
+GenericName[ja]=スペイン語の動詞の形態の学習
+GenericName[km]=សិក្សា​ទម្រង់​ករិយាសព្ទ​អេស្ប៉ាញ
+GenericName[mk]=Учете шпански глаголски форми
+GenericName[nb]=Studer spanske verbformer
+GenericName[nds]=Spaansche Verben lehren
+GenericName[nl]=Oefen Spaanse werkwoordvormen
+GenericName[nn]=Studer spansk verbbøying
+GenericName[pl]=Nauka odmiany hiszpańskich czasowników
+GenericName[pt]=Verbos em Espanhol
+GenericName[pt_BR]=Estudo das formas verbais em Espanhol
+GenericName[ru]=Изучение испанских глаголов
+GenericName[sk]=Štúdium slovesných foriem španielštiny
+GenericName[sl]=Učenje španskih glagolskih oblik
+GenericName[sr]=Учење шпанских глаголских облика
+GenericName[sr at Latn]=Učenje španskih glagolskih oblika
+GenericName[sv]=Studera spanska verbformer
+GenericName[ta]= ஸ்பானிஷ் வினை வடிவங்களை படி
+GenericName[tg]=Омӯзиши шаклҳои феълҳои испанӣ
+GenericName[tr]=İspanyolca Yüklem Biçimlerine Çalış
+GenericName[uk]=Вивчення форм іспанських дієслів
+GenericName[vi]=Học Dạng động từ Tây Ban Nha
+GenericName[zh_CN]=学习西班牙语动词形式
+GenericName[zh_TW]=學習西班牙語的動詞形態
+Categories=Qt;KDE;Education;X-KDE-Edu-Language;
diff --git a/debian-edu-config/share/debian-edu/students/share/apps/kdesktop/Desktop/kvoctrain.desktop b/debian-edu-config/share/debian-edu/students/share/apps/kdesktop/Desktop/kvoctrain.desktop
new file mode 100644
index 0000000..24f2fce
--- /dev/null
+++ b/debian-edu-config/share/debian-edu/students/share/apps/kdesktop/Desktop/kvoctrain.desktop
@@ -0,0 +1,78 @@
+[Desktop Entry]
+Encoding=UTF-8
+GenericName=Vocabulary Trainer
+GenericName[af]=Woordeskat-afrigter
+GenericName[ar]=مدرب الكلمات
+GenericName[bg]=Речникови тренировки
+GenericName[bn]=শব্দভাণ্ডার সমৃদ্ধকারী
+GenericName[bs]=Učitelj rječnika
+GenericName[ca]=Entrenador de vocabulari
+GenericName[cs]=Procvičování slovní zásoby
+GenericName[cy]=Hyfforddwr Geirfa
+GenericName[da]=Ordforrådsøvelser
+GenericName[de]=Vokabeltrainer
+GenericName[el]=Εκπαιδευτής λεξιλογίου
+GenericName[es]=Entrenador de vocabulario
+GenericName[et]=Sõnavara treening
+GenericName[eu]=Hiztegi entrenatzailea
+GenericName[fa]=مربی واژه‌ها
+GenericName[fi]=Sanaston harjoittaja
+GenericName[fr]=Tester son vocabulaire
+GenericName[gl]=Entreador de vocabulario
+GenericName[he]=מאמן אוצר מילים
+GenericName[hi]=शब्दावली प्रशिक्षक
+GenericName[hr]=Trener vokabulara
+GenericName[hu]=Szótárfüzet
+GenericName[is]=Æfir orðaforða
+GenericName[it]=Apprendimento di vocaboli
+GenericName[ja]=ボキャブラリの強化
+GenericName[km]=កម្មវិធី​បង្ហាត់​វាក្យសព្ទ
+GenericName[lt]=Žodyno treniruoklis
+GenericName[lv]=Mācību Vārdnīca
+GenericName[mk]=Тренер за речник
+GenericName[mn]=Эгшигийн дасгал
+GenericName[ms]=Jurulatih Perbendaharaan Kata
+GenericName[nb]=Glosetrening
+GenericName[nds]=Vokabeln lehren
+GenericName[nl]=Woordenschattrainer
+GenericName[nn]=Glosetrening
+GenericName[nso]=Morutisi wa Tsebo ya Mantsu
+GenericName[pl]=Trening słownictwa
+GenericName[pt]=Treinar o Vocabulário
+GenericName[pt_BR]=Um Treinador de Vocabulário
+GenericName[ru]=Тренировка словарного запаса
+GenericName[se]=Sátnehárjeheapmi
+GenericName[sk]=Tréning slovnej zásoby
+GenericName[sl]=Učitelj besednega zaklada
+GenericName[sr]=Тренер речника
+GenericName[sr at Latn]=Trener rečnika
+GenericName[sv]=Ordförrådsträning
+GenericName[ta]=சொல்லாக்க பயிற்சியாளர்
+GenericName[tg]=Машқи Луғат
+GenericName[uk]=Тренування словникового запасу
+GenericName[ven]=Mugudisi wa ndivho
+GenericName[vi]=Luyện tập Từ vựng
+GenericName[xh]=Uqeqeshi Wonobumba ababekwe ngokulandelelana
+GenericName[zh_CN]=单词练习
+GenericName[zh_TW]=字彙訓練師
+GenericName[zu]=Umlolongi Wokusetshenziswa kwamagama
+Name=KVocTrain
+Name[af]=K-woord-leerder
+Name[ar]=معلم الكلمات ك
+Name[bn]=কে-ভকট্রেন
+Name[hi]=के-वॉक-ट्रेन
+Name[mn]=KЭгшигийн дасгал
+Name[pt_BR]=Treina vocabulário
+Name[sv]=Kvoctrain
+Name[ta]=கேவிஒசி பயிற்சி
+Name[ven]=U gudiswa ha K
+Name[vi]=Tập Từ vựng K
+Name[zu]=KVocIsitimela
+MimeType=application/x-kvoctrain;text/x-kvtml;
+Exec=kvoctrain
+TryExec=/usr/bin/kvoctrain
+Icon=kvoctrain
+DocPath=kvoctrain/index.html
+Type=Application
+Terminal=false
+Categories=Qt;KDE;Education;X-KDE-Edu-Language;
diff --git a/debian-edu-config/share/debian-edu/students/share/apps/kdesktop/Desktop/kwordquiz.desktop b/debian-edu-config/share/debian-edu/students/share/apps/kdesktop/Desktop/kwordquiz.desktop
new file mode 100644
index 0000000..17a5cdc
--- /dev/null
+++ b/debian-edu-config/share/debian-edu/students/share/apps/kdesktop/Desktop/kwordquiz.desktop
@@ -0,0 +1,117 @@
+# KDE Config File
+[Desktop Entry]
+Encoding=UTF-8
+Type=Application
+Exec=kwordquiz -caption "%c" %i %m
+TryExec=/usr/bin/kwordquiz
+Icon=kwordquiz
+DocPath=kwordquiz/index.html
+Comment=A flashcard and vocabulary learning program
+Comment[af]='n Flitskaart- en woordeskat-aanleerprogram
+Comment[bg]=Програма за запаметяване с карти
+Comment[bn]=ফ্ল্যাশকার্ড ব্যবহার ও শব্দভাণ্ডার সমৃদ্ধকারী একটি প্রোগ্রাম
+Comment[bs]=Program za učenje kartica i rječnika
+Comment[ca]=Un programa de targetes ràpides i d'aprenentatge de vocabulari
+Comment[cs]=Výukový program na procvičení slovní zásoby
+Comment[cy]=Rhaglen cerdiau fflach ar gyfer dysgu geirfa
+Comment[da]=Et kort- og ordforråds indlæringsprogram
+Comment[de]=Ein Karteikarten- und Vokabel-Lernprogramm
+Comment[el]=Ένα πρόγραμμα εκμάθησης λεξιλογίου
+Comment[es]=Un programa de aprendizaje de fichas y vocabulario
+Comment[et]=Sähvikute ja sõnavara omandamise programm
+Comment[eu]=Fitxak eta hiztegiak ikasteko programa bat
+Comment[fa]=برنامۀ کارت فلاش و یادگیری واژه‌ها
+Comment[fi]=Opettelukortti- ja sanastoharjoitusohjelma
+Comment[fr]=Un programme d'apprentissage du vocabulaire et de cartes flash
+Comment[gl]=Un programa para aprender vocabulario
+Comment[he]=תוכנית ללימוד דקדוק
+Comment[hi]=फ्लैश कार्ड तथा शब्द सीखने का प्रोग्राम
+Comment[hu]=Elektronikus szótárfüzet gyakorlási lehetőséggel
+Comment[is]=Hjálparkorta og orðaforða-kennslutól
+Comment[it]=Un programma di supporto alla memorizzazione
+Comment[ja]=フラッシュカードと語彙学習プログラム
+Comment[km]=កម្មវិធី​រៀន​វាក្យសព្ទ និង បណ្ណ​បង្ហាញ
+Comment[mk]=Флеш картичка и програма за проширување на речникот
+Comment[nb]=Et program for gloseøving og spørsmålskort
+Comment[nl]=Een woordenschat-lesprogramma
+Comment[nn]=Eit program for gloseøving og spørsmålskort
+Comment[pl]=Program do przypominania i nauki słówek
+Comment[pt]=Um programa de cartões e aprendizagem de vocabulário
+Comment[pt_BR]=Um programa de cartas para aprendizagem de vocabulário
+Comment[ru]=Программа для заучивания слов
+Comment[sk]=Výukový program pre slovíčka
+Comment[sl]=Program za učenje s kartami in učenje besedišča
+Comment[sr]=Програм за учење речника и помоћу брзих картица
+Comment[sr at Latn]=Program za učenje rečnika i pomoću brzih kartica
+Comment[sv]=Ett program med snabbkort och ordförrådsinlärning
+Comment[ta]=ஒரு ஒளி அட்டை மற்றும் சொல்லாக்கம் பயிலும் நிரல்
+Comment[tg]=Омӯзиши луғат
+Comment[tr]=Bir fiş ve dilbilgisi öğrenme uygulaması
+Comment[uk]=Програма для завчання слів по картках
+Comment[vi]=Một chương trình luyện tập từ vừng bằng các thẻ
+Comment[zh_CN]=Flash 卡片和词汇学习程序
+Comment[zh_TW]=閃卡與字彙學習程式
+Terminal=false
+Name=KWordQuiz
+Name[bn]=কে-ওয়ার্ড-কুইজ
+Name[hi]=के-वर्ड-क्विज़
+Name[sv]=Kwordquiz
+Name[ta]=கேவார்த்தை வினாவிடை
+Name[tg]=KҲарфИмтиҳон
+Name[vi]=Đố Từ K
+GenericName=Vocabulary Trainer
+GenericName[af]=Woordeskat-afrigter
+GenericName[ar]=مدرب الكلمات
+GenericName[bg]=Речникови тренировки
+GenericName[bn]=শব্দভাণ্ডার সমৃদ্ধকারী
+GenericName[bs]=Učitelj rječnika
+GenericName[ca]=Entrenador de vocabulari
+GenericName[cs]=Procvičování slovní zásoby
+GenericName[cy]=Hyfforddwr Geirfa
+GenericName[da]=Ordforrådsøvelser
+GenericName[de]=Vokabeltrainer
+GenericName[el]=Εκπαιδευτής λεξιλογίου
+GenericName[es]=Entrenador de vocabulario
+GenericName[et]=Sõnavara treening
+GenericName[eu]=Hiztegi entrenatzailea
+GenericName[fa]=مربی واژه‌ها
+GenericName[fi]=Sanaston harjoittaja
+GenericName[fr]=Tester son vocabulaire
+GenericName[gl]=Entreador de vocabulario
+GenericName[he]=מאמן אוצר מילים
+GenericName[hi]=शब्दावली प्रशिक्षक
+GenericName[hr]=Trener vokabulara
+GenericName[hu]=Szótárfüzet
+GenericName[is]=Æfir orðaforða
+GenericName[it]=Apprendimento di vocaboli
+GenericName[ja]=ボキャブラリの強化
+GenericName[km]=កម្មវិធី​បង្ហាត់​វាក្យសព្ទ
+GenericName[lt]=Žodyno treniruoklis
+GenericName[lv]=Mācību Vārdnīca
+GenericName[mk]=Тренер за речник
+GenericName[mn]=Эгшигийн дасгал
+GenericName[ms]=Jurulatih Perbendaharaan Kata
+GenericName[nb]=Glosetrening
+GenericName[nds]=Vokabeln lehren
+GenericName[nl]=Woordenschattrainer
+GenericName[nn]=Glosetrening
+GenericName[nso]=Morutisi wa Tsebo ya Mantsu
+GenericName[pl]=Trening słownictwa
+GenericName[pt]=Treinar o Vocabulário
+GenericName[pt_BR]=Um Treinador de Vocabulário
+GenericName[ru]=Тренировка словарного запаса
+GenericName[se]=Sátnehárjeheapmi
+GenericName[sk]=Tréning slovnej zásoby
+GenericName[sl]=Učitelj besednega zaklada
+GenericName[sr]=Тренер речника
+GenericName[sr at Latn]=Trener rečnika
+GenericName[sv]=Ordförrådsträning
+GenericName[ta]=சொல்லாக்க பயிற்சியாளர்
+GenericName[tg]=Машқи Луғат
+GenericName[uk]=Тренування словникового запасу
+GenericName[ven]=Mugudisi wa ndivho
+GenericName[vi]=Luyện tập Từ vựng
+GenericName[xh]=Uqeqeshi Wonobumba ababekwe ngokulandelelana
+GenericName[zh_CN]=单词练习
+GenericName[zh_TW]=字彙訓練師
+GenericName[zu]=Umlolongi Wokusetshenziswa kwamagama
diff --git a/debian-edu-config/share/debian-edu/students/share/apps/kdesktop/Desktop/ooo-impress.desktop b/debian-edu-config/share/debian-edu/students/share/apps/kdesktop/Desktop/ooo-impress.desktop
new file mode 100644
index 0000000..db97ec3
--- /dev/null
+++ b/debian-edu-config/share/debian-edu/students/share/apps/kdesktop/Desktop/ooo-impress.desktop
@@ -0,0 +1,89 @@
+[Desktop Entry]
+Version=1.0
+Encoding=UTF-8
+Terminal=false
+Icon=ooo-impress
+Type=Application
+InitialPreference=2
+Categories=Application;Office;X-Red-Hat-Base;X-SuSE-Core-Office;
+Exec=ooffice -impress %U
+TryExec=/usr/bin/ooimpress
+MimeType=application/vnd.oasis.opendocument.presentation;application/vnd.oasis.opendocument.presentation-template;application/vnd.sun.xml.impress;application/vnd.sun.xml.impress.template;application/vnd.stardivision.impress;application/mspowerpoint;application/vnd.ms-powerpoint
+Name=OpenOffice.org Impress
+Comment=Create and edit presentations for slideshows, meeting and Web pages by using Impress.
+Comment[en]=Create and edit presentations for slideshows, meeting and Web pages by using Impress.
+Comment[de]=Erstellen und bearbeiten von Präsentationen für Dia-Vorführungen, Meetings und Web-Auftritte mit Impress
+Comment[af]=Skep en redigeer voorleggings vir skyfievertonings, vergaderings en webbladsye met Impress.
+Comment[as_IN]=ইমপ্ৰেছ ব্যৱহাৰ কৰি শ্লাইডশ্ব', মিটিং আৰু ৱেব পৃষ্ঠা সৃষ্টি আৰু সম্পাদনা কৰক. 
+Comment[be_BY]=Стварайце і рэдагуйце прэзентацыі для слайдавых паказаў, сустрэч і старонак Сеціва з дапамогаю Impress-а.
+Comment[bg]=С Impress можете да създавате и редактирате презентации за прожекции, събрания и уебстраници.
+Comment[br]=Impress - Krouidigezh hag embannadur kinnigadennoù evit treyonennaouegoù, emvodoù ha pajennoù Web.
+Comment[bs]=Kreiranje i uređivanje prezentacija za prikaze, sastanke i Web stranice koristeći Impress.
+Comment[ca]=Creeu i editeu presentacions per a diapositives, pàgines web i conferències amb l'Impress.
+Comment[cs]=Vytvářejte a upravujte prezentace pro ukázky, porady a webové stránky pomocí Impressu.
+Comment[cy]=Creu a golygu cyflwyniadau ar gyfer sioeau tryloywderau, cyfarfodydd a thudalennau Gwe gan ddefnyddio Impress.
+Comment[da]=Opret og rediger præsentationer til oplæg, møder og websider ved brug af Impress.
+Comment[el]=Δημιουργία και επεξεργασία παρουσιάσεων για διαφάνειες, συναντήσεις και ιστοσελίδες με τη χρήση του Impress.
+Comment[en_GB]=Create and edit presentations for slideshows, meeting and Web pages using Impress.
+Comment[en_ZA]=Create and edit presentations for slideshows, meeting and Web pages by using Impress.
+Comment[es]=Crear y editar presentaciones para charlas o reuniones y páginas Web con Impress.
+Comment[et]=Impress võimaldab luua ja redigeerida esitlusi slaidiseansside, koosolekute ning veebilehtede jaoks.
+Comment[fa]=با جلوه، ارائه‌هایی برای نمایش‌های اسلایدی، جلسات و صفحات وب ایجاد یا ویرایش کنید.
+Comment[fi]=Luo ja muokkaa esitys- ja kokouskalvoja sekä web-sivuja käyttämällä Impress -ohjelmaa.
+Comment[fr]=Impress - Création et édition de présentations pour diaporamas, réunions et pages Web
+Comment[ga]=Create and edit presentations for slideshows, meeting and Web pages by using Impress.
+Comment[gu]=ઇમ્પ્રેસ દ્રારા તકતીપ્રદશૅનો, મુલાકાતો અને વેબ પાનાઓ રજૂઆતઓ બનાવો અને સુઘારો.
+Comment[gu_IN]=ઇમ્પ્રેસ દ્રારા તકતીપ્રદશૅનો, મુલાકાતો અને વેબ પાનાઓ રજૂઆતઓ બનાવો અને સુઘારો.
+Comment[he]=יצירה ועריכה של שקפים עבור מצגות, פגישות ודפי אינטרנט באמצעות תוכנת המצגות
+Comment[hi_IN]=Create and edit presentations for slideshows, meeting and Web pages by using Impress.
+Comment[hr]=Stvorite i uredite prezentacije za prikazivanje i web stranice koristeći Impress.
+Comment[hu]=Bemutatók készítése és szerkesztése diavetítésekhez vagy a webre az Impress használatával.
+Comment[it]=Impress vi permette di creare e modificare presentazioni, diapositive e pagine Web.
+Comment[ja]=Impress を使用して、スライドショー、ミーティングおよび Web ページ用のプレゼンテーションを作成して編集します。
+Comment[ka]=პრეზენტაციებისა და სლაიდების ჩვენების შექმნა და რედაქტირება, შეხვედრები და ვებ გვერდები.
+Comment[km]=បង្កើត និង កែ​សម្រួល​ការ​បង្ហាញ​សម្រាប់​បង្ហាញ​ស្លាយ កិច្ច​ប្រជុំ និង ទំព័រ​បណ្តាញ​ដោយ​ប្រើ Impress ។
+Comment[ko]=Impress를 사용하여 슬라이드 쇼, 회의 및 웹 페이지에 대한 프레젠테이션을 만들고 편집합니다.
+Comment[lo]=ສ້າງແລະແກ້ໄຂພາບເລື່ອນສຳລັບການບັນຍາຍ, ການປະຊຸມແລະໜ້າເວັບດ້ວຍການໃຊ້ອີມເຟສ.
+Comment[lt]=Pateikčių rengykle rengiamos pateiktys pranešimams, pateiktis galima įkelti į tinklalapį.
+Comment[lv]=Veidot un labot prezentācijas slīdrādes, tikšanās un web lapas lietojot Impress.
+Comment[mk]=Креирајте и уредувајте презентации за слајдови, состаноци и веб-страници со користење на Impress.
+Comment[ml_IN]=ഇംപ്രസ് ഉപയോഗിച്ച് സ്ലൈഡ് പ്രദര്ശനങ്ങളിലെയും, മീറ്റിങ്ങിന്റെയും വെബ്പേജിന്റെയും അവതരണങ്ങള് സൃഷ്ടിക്കുകയും എഡിറ്റു ചെയ്യുകയും ചെയ്യുക.
+Comment[mr_IN]=स्लाईडशोज, सभा आणि वेब पानासाठी इम्प्रेस वापरून प्रस्तुती निर्माण आणि संपादन करा.
+Comment[nb]=Opprett og rediger presentasjoner for lysbildeframvisning, møter og nettsider ved å bruke Impress.
+Comment[ne]=इम्प्रेसको प्रयोग द्वारा स्लाइड शोहरू, बैठक र वेब पृष्ठहरूको लागि प्रस्तुतीकरण सृजना तथा सम्पादन गर्नुहोस्।
+Comment[nl]=Met Impress kunt u presentaties voor diavoorstellingen, vergaderingen en webpagina's maken en bewerken.
+Comment[nn]=Med Impress kan du laga og redigera presentasjonar for framvisingar, møte og nettsider.
+Comment[nr]=Enza nokuhlela amphrizentheyitjhini wamaslayidishowu, imihlangano namakahsi we-Webh ngokusebenzisa i-Impress.
+Comment[ns]=Hlama le go rulaganya ditlhagišo tša dipontšho tša selaete, dikopano le matlakala a Wepe ka go diriša Impress.
+Comment[or_IN]=ଇମ୍ଫ୍ରେସ୍ ଉପୟୋଗକରି ସ୍ଲାଇଡ୍ ଦୃଶ୍ଯ,ମିଟିଙ୍ଗ ଏବଂ ଉଏବ୍ ପୃଷ୍ଠାଗୁଡିକ ପାଇଁ ଉପସ୍ଥାପନାଗୁଡିକୁ ସୃଷ୍ଟି ଏବଂ ସମ୍ପାଦନ କର୤
+Comment[pa_IN]=ਪੇਸ਼ਕਾਰ ਨਾਲ ਸਲਾਈਡ-ਸ਼ੋ, ਮੀਟਿੰਗ ਅਤੇ ਵੈੱਬਸਫ਼ੇ ਨੂੰ ਬਣਾਇਆ ਅਤੇ ਸੋਧਿਆ ਜਾ ਸਕਦਾ ਹੈ।
+Comment[pl]=Twórz i edytuj prezentacje, które będziesz mógł wykorzystać podczas pokazów, spotkań oraz na stronach www przy pomocy programu Impress.
+Comment[pt]=Permite criar e editar apresentações para reuniões e páginas da Web através do Impress.
+Comment[pt_BR]=Criar e editar apresentações para slides, reuniões e páginas da Web por meio do Impress.
+Comment[ru]=Создание и редактирование презентаций для слайдшоу, встреч и веб-страниц.
+Comment[rw]=Kurema no guhindura amayerekana y'amagaragazabice, inama n'impapuro Rubuga ukoresheje Impress.
+Comment[sh_YU]=Pravi i uređuje prezentacije za prikazivanja, sastanke i veb stranice korišćenjem Prezentacije.
+Comment[sk]=Vytvárajte a upravujte prezentácie pre porady s stretnutia s použitím Impress.
+Comment[sl]=Z Impressom ustvarjajte in urejajte prosojnice za predstavitve in spletne strani.
+Comment[sr_CS]=Прави и уређује презентације за приказивања, састанке и веб странице коришћењем Презентације.
+Comment[ss]=Yakha u-edithe kwetfulwa kwetitfuntishelela, kuhlangana nemapheji ewebhu ngekusebentisa Impress.
+Comment[st]=Bopa le ho lokisa dinehelano tsa dipontsho tsa selaete, dikopano le maqephe a Wepe ka ho sebedisa Impress.
+Comment[sv]=Skapa och redigera presentationer för bildskärmspresentationer, möten och webbsidor med hjälp av Impress.
+Comment[sw_TZ]=Create and edit presentations for slideshows, meeting and Web pages by using Impress.
+Comment[ta]=Create and edit presentations for slideshows, meeting and Web pages by using Impress.
+Comment[ta_IN]=Create and edit presentations for slideshows, meeting and Web pages by using Impress.
+Comment[te_IN]=స్లైడ్ షోలు యొక్క సమర్పణములు,సభ మరియు ముద్రములను ఉపయోగించిన మహాతలం పుటలును నిర్మించి సరిచేయుము.
+Comment[tg]=Бо ёрии Impress баёнияҳо сохтан, онҳоро ислоҳ кардан мумкин аст.
+Comment[th]=สร้างและแก้ไขงานนำเสนอภาพนิ่ง การประชุม และหน้าเว็บโดยการใช้ Impress
+Comment[ti_ER]=ጽሑፍ መግለጺ፡ ገጻት ዓለባ ሓበሬታን ብ ኢምፕረስ ተጠቂምካ ትስርሖምን ተማዓራርዮምን።
+Comment[tr]=Impress kullanarak sunum, toplantı, belge ve Web sayfalarını oluştur ve düzenle.
+Comment[ts]=Endla ni ku lulamisa Minkombiso ya tislayidi, tipheji ta minhlangani ni ta Web hi ku tirhisa Impress.
+Comment[ur_IN]=سلائڈشواورپیشکش تخلیق اورمرتب کرو،میٹینگ اورویب پیجیز امپریس کااستعمال کرکے
+Comment[ve]=Vhumbani nahone ni lulamise nzudzanyo u itela misumbedzo ya siḽaidi, muṱangano na masiaṱari a Web nga u shumisa Impress.
+Comment[vi]=Tạo và chỉnh sửa trình diễn cho chiếu bóng, hội họp và trang mạng dùng Impress.
+Comment[xh]=Dala uze uhlele iinkcazelo-mboniso yemiboniso yezlayidi, iintlanganiso namakhasi Othungelwano ngokusebenzisa i-Impress.
+Comment[zh_CN]=使用 Impress 创建并编辑幻灯片、会议和网页中使用的演示文稿。
+Comment[zh_TW]=使用 Impress 可建立與編輯用於投影片、會議和網頁的簡報。
+Comment[zu]=Yenza futhi ulungise imiboniso amaslaydi, amakhasi emihlangano naweWebhu ngokusebenzisa i-Impress.
+StartupNotify=true
+X-KDE-Protocols=file,http,smb,ftp,webdav
diff --git a/debian-edu-config/share/debian-edu/students/share/apps/kdesktop/Desktop/ooo-writer.desktop b/debian-edu-config/share/debian-edu/students/share/apps/kdesktop/Desktop/ooo-writer.desktop
new file mode 100644
index 0000000..edcd435
--- /dev/null
+++ b/debian-edu-config/share/debian-edu/students/share/apps/kdesktop/Desktop/ooo-writer.desktop
@@ -0,0 +1,89 @@
+[Desktop Entry]
+Version=1.0
+Encoding=UTF-8
+Terminal=false
+Icon=ooo-writer
+Type=Application
+InitialPreference=2
+Categories=Application;Office;X-Red-Hat-Base;X-SuSE-Core-Office;
+Exec=ooffice -writer %U
+TryExec=/usr/bin/oowriter
+MimeType=application/vnd.oasis.opendocument.text;application/vnd.oasis.opendocument.text-template;application/vnd.oasis.opendocument.text-web;application/vnd.oasis.opendocument.text-master;application/vnd.sun.xml.writer;application/vnd.sun.xml.writer.template;application/vnd.sun.xml.writer.global;application/vnd.stardivision.writer;application/msword;application/vnd.ms-word;application/x-doc;application/rtf;application/vnd.wordperfect;application/wordperfect
+Name=OpenOffice.org Writer
+Comment=Create and edit text and graphics in letters, reports, documents and Web pages by using Writer.
+Comment[en]=Create and edit text and graphics in letters, reports, documents and Web pages by using Writer.
+Comment[de]=Erstellen und bearbeiten von Text und Grafiken in Briefen, Reports, Dokumenten und Web-Seiten mit Writer
+Comment[af]=Skep en redigeer teks en grafika in briewe, verslae, dokumente en webbladsye met Writer.
+Comment[as_IN]=ৰাইটাৰ ব্যৱহাৰ কৰি চিঠি, ৰিপৰ্ট, ডকুমেন্ট আৰু পৃষ্ঠাবোৰত থকা টেক্সট আৰু গ্ৰাফিক্স সৃষ্টি আৰু সম্পাদনা কৰক. 
+Comment[be_BY]=Стварайце і рэдагуйце тэкст і графіку ў лістах, справаздачах, дакументах і старонках Сеціва з дапамогаю Writer-а.
+Comment[bg]=С Writer можете да създавате и редактирате текст и графики в писма, отчети, документи и уебстраници.
+Comment[br]=Krouidigezh hag embannadur testennoù ha skeudennoù evit lizhiri, danevelloù, teulioù ha pajennoù Web.
+Comment[bs]=Kreiranje i uređivanje teksta i grafike u pismima, izvještajima, dokumentima i Web stranicama koristeći Writer.
+Comment[ca]=Creeu i editeu textos i gràfics en cartes, informes, documents i pàgines web amb el Writer.
+Comment[cs]=Vytvářejte a upravujte text a obrázky v dopisech, sestavách, dokumentech a webových stránkách pomocí Writeru.
+Comment[cy]=Creu a golygu testun a graffigau mewn llythyron, adroddiadau, dogfennau a thudalennau Gwe gyda Writer.
+Comment[da]=OpenOffice.org 2.0-tekstdokument
+Comment[el]=Δημιουργία και επεξεργασία κειμένου και γραφικών σε επιστολές, αναφορές, έγγραφα και ιστοσελίδες με τη χρήση του Writer.
+Comment[en_GB]=Create and edit text and graphics in letters, reports, documents and Web pages using Writer.
+Comment[en_ZA]=Create and edit text and graphics in letters, reports, documents and Web pages by using Writer.
+Comment[es]=Crear y editar texto y gráficos de cartas, informes, documentos y páginas Web con Writer.
+Comment[et]=Writer võimaldab luua ja redigeerida kirjade, aruannete, dokumentide ning veebilehtede teksti ja pilte.
+Comment[fa]=با استفاده از کاتب، متن و گرافیک نامه‌ها، گزارش‌ها، نوشتارها و صفحات وب را ایجاد یا ویرایش کنید.
+Comment[fi]=Luo ja muokkaa tekstiä ja grafiikkaa kirjeisiin, raportteihin, tekstiasiakirjoihin ja internet-sivuihin Writer-ohjelmalla.
+Comment[fr]=Writer - Création et édition de textes et d'images pour courriers, rapports, documents et pages Web
+Comment[ga]=Create and edit text and graphics in letters, reports, documents and Web pages by using Writer.
+Comment[gu]=લખાણ દ્રારા પત્રો, અહેવાલો, દસ્તાવેજો અને વેબ પાનાઓમાં લખાણ અને ચિત્રો બનાવો અને સુઘારો.
+Comment[gu_IN]=લખાણ દ્રારા પત્રો, અહેવાલો, દસ્તાવેજો અને વેબ પાનાઓમાં લખાણ અને ચિત્રો બનાવો અને સુઘારો.
+Comment[he]=יצירה ועריכה של טקסט וגרפיקה במכתבים, דוחות, מסמכים ודפי אינטרנט באמצעות מסמך כיתוב
+Comment[hi_IN]=Create and edit text and graphics in letters, reports, documents and Web pages by using Writer.
+Comment[hr]=Stvorite i uredite takst i slike u pisma, izvješćima, dokumentima i web stranicama koristeći Writer.
+Comment[hu]=Levelek, jelentések, dokumentumok és weboldalak szövegének és grafikájának létrehozása és szerkesztése a Writer használatával.
+Comment[it]=Usando Writer, potete creare e modificare il testo e le immagini di lettere, rapporti, documenti e pagine Web.
+Comment[ja]=Writer を使用して、レター、レポート、ドキュメントおよび Web ページのテキストおよび図を作成および編集します。
+Comment[ka]=ტექსტისა და გრაფიკის, პატაკების, წერილების, დოკუმენტებისა და ვებ გვერდების შექმნა და რედაქტირება.
+Comment[km]=បង្កើត និង កែ​សម្រួល​អត្ថបទ និង ក្រាហ្វិក​ក្នុង​សំបុត្រ របាយការណ៍ ឯកសារ និង ទំព័រ​បណ្តាញ​ដោយ​ប្រើ Writer ។
+Comment[ko]=Writer를 사용하여 편지, 보고서, 문서 및 웹 페이지에서 텍스트와 그림을 만들고 편집할 수 있습니다.
+Comment[lo]=ສ້າງແລະແກ້ໄຂຂໍ້ຄວາມແລະພາບສະແດງໃນຈົດໝາຍ, ລາຍງານ, ເອກະສານ ແລະ ໜ້າເວັບດ້ວຍການໃຊ້ເຄື່ອງຂຽນ.
+Comment[lt]=Tekstų rengykle galima kurti laiškus, ataskaitas, kitus dokumentus ir tinklalapius, įterpti į juos paveikslus.
+Comment[lv]=Veidot un labot tekstu un grafiku vēstulēs, atskaitēs, dokumentos un Web lapās lietojot Writer.
+Comment[mk]=Креирајте и уредувајте текст и графика во писма, извештаи, документи и веб-страници со користење на Writer.
+Comment[ml_IN]=റൈറ്റര് ഉപയോഗിച്ച് കത്തുകളിലെയും റിപ്പോര്ട്ടുകളിലെയും ഡോക്കുമെന്റിലെയും വെബ് പേജിലെയും  ടെക്സ്റ്റും ഗ്രാഫിക്സും സൃഷ്ടിക്കുകയും എഡിറ്റു ചെയ്യുകയും ചെയ്യുക.
+Comment[mr_IN]=पत्रातून, अहवालातून, दस्तऐवजातून आणि वेब पानातून रायटर वापरून मजकूर आणि चित्र निर्माण आणि संपादन करा.
+Comment[nb]=Opprett og rediger tekst og bilder i brev, rapporter, dokumenter og nettsider ved å bruke Writer.
+Comment[ne]=राइटरको प्रयोगद्वारा चिठ्ठीहरू, प्रतिवेदनहरू, कागजातहरू र वेब पृष्ठहरूमा पाठ तथा ग्राफिक्स सृजना तथा सम्पादन गर्नुहोस्।
+Comment[nl]=Met Writer kunt u tekst en afbeeldingen in brieven, rapporten, documenten en webpagina's maken en bewerken.
+Comment[nn]=Med Writer kan du laga og redigera tekst og bilete i brev, rapportar, dokument og nettsider.
+Comment[nr]=Enza nokuhlela itheksti neentjengiso eziseencwadini, emibikweni, emitlolweni nemakhasini weWebh ngokusebenzisa i-Writer.
+Comment[ns]=Hlama le go rulaganya sengwalwa le diswantšho mangwalong, dipegong, ditokumenteng le matlakaleng a Wepe ka go diriša Writer.
+Comment[or_IN]=ରାଇଟର ଉପୟୋଗ କରି ପତ୍ରଗୁଡିକରେ, ରିପୋର୍ଟରେ,ଦଲିଲଗୁଡିକରେ ଏବଂ ଉଏବ୍ ପୃଷ୍ଠାଗୁଡିକରେ ଟେକ୍ସଟ ଏବଂ  ଲେଖାଚିତ୍ରଗୁଡିକୁ ସୃଷ୍ଟି ଏବଂ ସମ୍ପାଦନ କର ୤
+Comment[pa_IN]=ਲੇਖਕ ਨਾਲ ਪੱਤਰਾਂ, ਰਿਪੋਰਟਾਂ, ਦਸਤਾਵੇਜ਼ਾਂ ਅਤੇ ਵੈੱਬ ਸਫ਼ਿਆਂ ਵਿੱਚ ਪਾਠ ਅਤੇ ਚਿੱਤਰ ਬਣਾਏ ਤੇ ਸੋਧੇ ਜਾ ਸਕਦੇ ਹਨ।
+Comment[pl]=Twórz i edytuj listy, raporty, dokumenty i strony www wykorzystując program Writer.
+Comment[pt]=Permite criar e editar texto e gráficos em cartas, relatórios, documentos e páginas da Web utilizando o Writer.
+Comment[pt_BR]=Criar e editar texto e figuras em cartas, relatórios, documentos e páginas da Web por meio do Writer.
+Comment[ru]=Создание и редактирование текста и рисунков в письмах, отчетах, документах или веб-страницах.
+Comment[rw]=Kurema no guhindura umwandiko n'ibishushanyo mu mabaruwa, raporo, inyandiko n'amapaji Rubuga ukoresheje Writer.
+Comment[sh_YU]=Pravi i uređuje tekst i grafiku u pismima, izveštajima i veb stranicama korišćenjem Pisca.
+Comment[sk]=Vytvárajte a upravujte textové a grafické listy, správy, dokumenty a webové stránky s použitím Writer.
+Comment[sl]=Z Writerjem ustvarjajte in urejajte besedilo in slike v pismih, poročilih, dokumentih in spletnih straneh.
+Comment[sr_CS]=Прави и уређује текст и графику у писмима, извештајима и веб страницама коришћењем Писца.
+Comment[ss]=Yakha u-edithe umbhalo nemagrafiki etincwadzini, umbiko, wemadokhumenti nemapheji eWebhu ngekusebentisa Writer.
+Comment[st]=Bopa le ho lokisa mongolo le ditshwantsho mangolong, ditlalehong, ditokomaneng le maqepheng a Wepe ka ho sebedisa Writer.
+Comment[sv]=Skapa och redigera text och grafik i brev, rapporter, dokument och webbsidor med hjälp av Writer.
+Comment[sw_TZ]=Create and edit text and graphics in letters, reports, documents and Web pages by using Writer.
+Comment[ta]=Create and edit text and graphics in letters, reports, documents and Web pages by using Writer.
+Comment[ta_IN]=Create and edit text and graphics in letters, reports, documents and Web pages by using Writer.
+Comment[te_IN]=పత్రము మరియు లేఖ యొక్క చిత్రరూపములు,నివేదనలు,పత్రములు మరియు వ్రాయు యంత్రమును ఉపయోగించిన మహాతలం పుటలును నిర్మించి సరిచేయుము. 
+Comment[tg]=Бо ёрии Writer матн ва тасвир сохтан, онҳоро ислоҳ кардан мумкин аст.
+Comment[th]=สร้างและแก้ไขข้อความและกราฟิกส์ในจดหมาย รายงาน เอกสาร และหน้าเว็บโดยการใช้ Writer
+Comment[ti_ER]=ጽሑፍ፡ ግራፊካዊ ትሕዝቶ፡ ጸብጻብ፡ ሰነዳትን ገጻት ዓለባ ሓበሬታን ብ ራይተር ተጠቂምካ ክትሰርሖምን ክተማዓራርዮምን ትኽእል።
+Comment[tr]=Writer kullanarak mektuplardaki metin ve grafikleri, rapor, belge ve Web sayfalarını oluştur ve düzenle.
+Comment[ts]=Cinca ni ku lulamisa marito ni vudirowi eka mapapila, swiviko, tidokumente ni tipheji ta Web hi ku tirhisa Writer.
+Comment[ur_IN]=خطوط میں متن اورگرافکس تخلیق اورمرتب کرو،رپورٹس،دستاویزاورویب پیجیز رائٹرکااستعمال کرکے
+Comment[ve]=Vhumbani ni dovhe ni lulamise ḽiṅwalwa na dzigirafiki kha maṅwalo, mivhigo, maṅwalo na masiaṱari a Web nga u shumisa Writer.
+Comment[vi]=Tạo và chỉnh sửa văn bản và đồ họa trong thư, báo cáo, tài liệu và trang mạng dùng Writer.
+Comment[xh]=Dala uze uhlele isiqendu nezazobe zegrafu ezileteni, iingxelo, amaxwebhu namakhasi Othungelwano ngokusebenzisa i-Writer.
+Comment[zh_CN]=使用 Writer 创建并编辑信函、报表、文档和网页中的文本和图形。
+Comment[zh_TW]=使用 Writer 可以在信件、報告、文件和網頁中建立與編輯文字和圖形。
+Comment[zu]=Yenza futhi ulungise umbhalo nemidwebo esezinhlamvini zamagama, emibikweni, emafayelini nasemakhasini eWebhu ngokusebenzisa i-Writer.
+StartupNotify=true
+X-KDE-Protocols=file,http,smb,ftp,webdav
diff --git a/debian-edu-config/share/debian-edu/students/share/config/kdeglobals b/debian-edu-config/share/debian-edu/students/share/config/kdeglobals
new file mode 100644
index 0000000..10cb1ee
--- /dev/null
+++ b/debian-edu-config/share/debian-edu/students/share/config/kdeglobals
@@ -0,0 +1,17 @@
+[KDE Action Restrictions][$i]
+action/editfiletype=false
+action/kwin_rmb=false
+action/menuedit=false
+movable_toolbars=false
+run_desktop_files=false
+start_new_session=false
+user/root=false
+
+[KDE Control Module Restrictions]
+kde-filetypes.desktop=false
+
+[KDE Resource Restrictions]
+xdgconf-menu=false
+
+[Paths]
+Trash=$HOME/Desktop/Trash/
diff --git a/debian-edu-config/share/debian-edu/students/share/config/kdesktoprc b/debian-edu-config/share/debian-edu/students/share/config/kdesktoprc
new file mode 100644
index 0000000..57e4b39
--- /dev/null
+++ b/debian-edu-config/share/debian-edu/students/share/config/kdesktoprc
@@ -0,0 +1,5 @@
+[$i]
+[Version]
+KDEVersionMajor=3
+KDEVersionMinor=5
+KDEVersionRelease=5
diff --git a/debian-edu-config/share/debian-edu/students/share/config/konqiconviewrc b/debian-edu-config/share/debian-edu/students/share/config/konqiconviewrc
new file mode 100644
index 0000000..a6a0c62
--- /dev/null
+++ b/debian-edu-config/share/debian-edu/students/share/config/konqiconviewrc
@@ -0,0 +1,3 @@
+[Settings]
+SortDirsFirst=true
+SortingCriterion=sort_nci
diff --git a/debian-edu-config/share/debian-edu/students/share/config/menus/applications.menu b/debian-edu-config/share/debian-edu/students/share/config/menus/applications.menu
new file mode 100644
index 0000000..b995a5f
--- /dev/null
+++ b/debian-edu-config/share/debian-edu/students/share/config/menus/applications.menu
@@ -0,0 +1,196 @@
+<!DOCTYPE Menu PUBLIC "-//freedesktop//DTD Menu 1.0//EN" "http://www.freedesktop.org/standards/menu-spec/1.0/menu.dtd">
+<Menu>
+ <Exclude>
+  <Filename>kde-Kfind.desktop</Filename>
+  <Filename>kde-Help.desktop</Filename>
+  <Filename>kde-Home.desktop</Filename>
+  <Filename>kde-KControl.desktop</Filename>
+  <Filename>kde-adept_installer.desktop</Filename>
+ </Exclude>
+ <Menu>
+  <Name>Applications</Name>
+  <Deleted/>
+ </Menu>
+ <Menu>
+  <Name>Utilities</Name>
+  <Deleted/>
+ </Menu>
+ <Menu>
+  <Name>System</Name>
+  <Deleted/>
+ </Menu>
+ <Menu>
+  <Name>Settingsmenu</Name>
+  <Deleted/>
+ </Menu>
+ <Menu>
+  <Name>Science</Name>
+  <Deleted/>
+ </Menu>
+ <Menu>
+  <Name>Office</Name>
+  <Deleted/>
+ </Menu>
+ <Menu>
+  <Name>Multimedia</Name>
+  <Deleted/>
+ </Menu>
+ <Menu>
+  <Name>Internet</Name>
+  <Deleted/>
+ </Menu>
+ <Menu>
+  <Name>Graphics</Name>
+  <Deleted/>
+ </Menu>
+ <Menu>
+  <Name>Games</Name>
+  <Deleted/>
+ </Menu>
+ <Menu>
+  <Name>Edutainment</Name>
+  <Deleted/>
+ </Menu>
+ <Menu>
+  <Name>Development</Name>
+  <Deleted/>
+ </Menu>
+ <Menu>
+  <Name>Debian</Name>
+  <Deleted/>
+ </Menu>
+ <Menu>
+  <Name>msuic</Name>
+  <Directory>msuic.directory</Directory>
+  <Deleted/>
+ </Menu>
+ <Menu>
+  <Name>music</Name>
+  <Directory>music.directory</Directory>
+  <Layout>
+   <Merge type="files" />
+   <Filename>score-reading-trainer.desktop</Filename>
+  </Layout>
+  <Include>
+   <Filename>score-reading-trainer.desktop</Filename>
+  </Include>
+ </Menu>
+ <Menu>
+  <Name>mathematics</Name>
+  <Directory>mathematics.directory</Directory>
+  <Include>
+   <Filename>kmplot.desktop</Filename>
+   <Filename>h.desktop</Filename>
+   <Filename>k3dsurf-2.desktop</Filename>
+   <Filename>kalgebra.desktop</Filename>
+   <Filename>kbruch.desktop</Filename>
+   <Filename>kpercentage.desktop</Filename>
+   <Filename>kformula.desktop</Filename>
+   <Filename>qliss3d-2.desktop</Filename>
+  </Include>
+  <Exclude>
+   <Filename>kalzium.desktop</Filename>
+  </Exclude>
+  <Layout>
+   <Merge type="files" />
+   <Filename>h.desktop</Filename>
+   <Filename>kformula.desktop</Filename>
+   <Filename>kpercentage.desktop</Filename>
+   <Filename>qliss3d-2.desktop</Filename>
+   <Filename>k3dsurf-2.desktop</Filename>
+   <Filename>kalgebra.desktop</Filename>
+   <Filename>kmplot.desktop</Filename>
+   <Filename>kbruch.desktop</Filename>
+  </Layout>
+ </Menu>
+ <Menu>
+  <Name>.hidden</Name>
+  <Include>
+   <Filename>kde-Kfind.desktop</Filename>
+   <Filename>kde-Help.desktop</Filename>
+   <Filename>kde-Home.desktop</Filename>
+   <Filename>kde-KControl.desktop</Filename>
+   <Filename>kde-adept_installer.desktop</Filename>
+   <Filename>kalzium.desktop</Filename>
+  </Include>
+ </Menu>
+ <Menu>
+  <Name>languages</Name>
+  <Directory>languages.directory</Directory>
+  <Include>
+   <Filename>klatin.desktop</Filename>
+   <Filename>kvoctrain.desktop</Filename>
+   <Filename>kwordquiz.desktop</Filename>
+  </Include>
+  <Layout>
+   <Merge type="files" />
+   <Filename>klatin.desktop</Filename>
+   <Filename>kvoctrain.desktop</Filename>
+   <Filename>kwordquiz.desktop</Filename>
+  </Layout>
+ </Menu>
+ <Menu>
+  <Name>science</Name>
+  <Layout>
+   <Merge type="files" />
+   <Filename>kstars.desktop</Filename>
+   <Filename>kalzium.desktop</Filename>
+  </Layout>
+  <Directory>science.directory</Directory>
+  <Include>
+   <Filename>kalzium.desktop</Filename>
+   <Filename>kstars.desktop</Filename>
+  </Include>
+ </Menu>
+ <Menu>
+  <Name>creative work</Name>
+  <Layout>
+   <Merge type="files" />
+   <Filename>vym-2.desktop</Filename>
+   <Filename>kdissert.desktop</Filename>
+  </Layout>
+  <Directory>creative work.directory</Directory>
+  <Include>
+   <Filename>vym-2.desktop</Filename>
+   <Filename>kdissert.desktop</Filename>
+  </Include>
+ </Menu>
+ <Menu>
+  <Name>computer science</Name>
+  <Directory>computer science.directory</Directory>
+  <Include>
+   <Filename>kturtle.desktop</Filename>
+   <Filename>kregexpeditor.desktop</Filename>
+  </Include>
+  <Layout>
+   <Merge type="files" />
+   <Filename>kturtle.desktop</Filename>
+   <Filename>kregexpeditor.desktop</Filename>
+  </Layout>
+ </Menu>
+ <Layout>
+  <Merge type="menus" />
+  <Menuname>writing</Menuname>
+  <Menuname>creative work</Menuname>
+  <Menuname>computer science</Menuname>
+  <Menuname>languages</Menuname>
+  <Menuname>science</Menuname>
+  <Menuname>mathematics</Menuname>
+  <Menuname>music</Menuname>
+ </Layout>
+ <Menu>
+  <Name>writing</Name>
+  <Layout>
+   <Merge type="files" />
+   <Filename>oowriter.desktop</Filename>
+   <Filename>ooimpress.desktop</Filename>
+   <Filename>oocalc.desktop</Filename>
+  </Layout>
+  <Directory>writing.directory</Directory>
+  <Include>
+   <Filename>oowriter.desktop</Filename>
+   <Filename>ooimpress.desktop</Filename>
+   <Filename>oocalc.desktop</Filename>
+  </Include>
+ </Menu>
+</Menu>
diff --git a/debian-edu-config/share/debian-edu/students/share/config/menus/kde-applications.menu b/debian-edu-config/share/debian-edu/students/share/config/menus/kde-applications.menu
new file mode 100644
index 0000000..b995a5f
--- /dev/null
+++ b/debian-edu-config/share/debian-edu/students/share/config/menus/kde-applications.menu
@@ -0,0 +1,196 @@
+<!DOCTYPE Menu PUBLIC "-//freedesktop//DTD Menu 1.0//EN" "http://www.freedesktop.org/standards/menu-spec/1.0/menu.dtd">
+<Menu>
+ <Exclude>
+  <Filename>kde-Kfind.desktop</Filename>
+  <Filename>kde-Help.desktop</Filename>
+  <Filename>kde-Home.desktop</Filename>
+  <Filename>kde-KControl.desktop</Filename>
+  <Filename>kde-adept_installer.desktop</Filename>
+ </Exclude>
+ <Menu>
+  <Name>Applications</Name>
+  <Deleted/>
+ </Menu>
+ <Menu>
+  <Name>Utilities</Name>
+  <Deleted/>
+ </Menu>
+ <Menu>
+  <Name>System</Name>
+  <Deleted/>
+ </Menu>
+ <Menu>
+  <Name>Settingsmenu</Name>
+  <Deleted/>
+ </Menu>
+ <Menu>
+  <Name>Science</Name>
+  <Deleted/>
+ </Menu>
+ <Menu>
+  <Name>Office</Name>
+  <Deleted/>
+ </Menu>
+ <Menu>
+  <Name>Multimedia</Name>
+  <Deleted/>
+ </Menu>
+ <Menu>
+  <Name>Internet</Name>
+  <Deleted/>
+ </Menu>
+ <Menu>
+  <Name>Graphics</Name>
+  <Deleted/>
+ </Menu>
+ <Menu>
+  <Name>Games</Name>
+  <Deleted/>
+ </Menu>
+ <Menu>
+  <Name>Edutainment</Name>
+  <Deleted/>
+ </Menu>
+ <Menu>
+  <Name>Development</Name>
+  <Deleted/>
+ </Menu>
+ <Menu>
+  <Name>Debian</Name>
+  <Deleted/>
+ </Menu>
+ <Menu>
+  <Name>msuic</Name>
+  <Directory>msuic.directory</Directory>
+  <Deleted/>
+ </Menu>
+ <Menu>
+  <Name>music</Name>
+  <Directory>music.directory</Directory>
+  <Layout>
+   <Merge type="files" />
+   <Filename>score-reading-trainer.desktop</Filename>
+  </Layout>
+  <Include>
+   <Filename>score-reading-trainer.desktop</Filename>
+  </Include>
+ </Menu>
+ <Menu>
+  <Name>mathematics</Name>
+  <Directory>mathematics.directory</Directory>
+  <Include>
+   <Filename>kmplot.desktop</Filename>
+   <Filename>h.desktop</Filename>
+   <Filename>k3dsurf-2.desktop</Filename>
+   <Filename>kalgebra.desktop</Filename>
+   <Filename>kbruch.desktop</Filename>
+   <Filename>kpercentage.desktop</Filename>
+   <Filename>kformula.desktop</Filename>
+   <Filename>qliss3d-2.desktop</Filename>
+  </Include>
+  <Exclude>
+   <Filename>kalzium.desktop</Filename>
+  </Exclude>
+  <Layout>
+   <Merge type="files" />
+   <Filename>h.desktop</Filename>
+   <Filename>kformula.desktop</Filename>
+   <Filename>kpercentage.desktop</Filename>
+   <Filename>qliss3d-2.desktop</Filename>
+   <Filename>k3dsurf-2.desktop</Filename>
+   <Filename>kalgebra.desktop</Filename>
+   <Filename>kmplot.desktop</Filename>
+   <Filename>kbruch.desktop</Filename>
+  </Layout>
+ </Menu>
+ <Menu>
+  <Name>.hidden</Name>
+  <Include>
+   <Filename>kde-Kfind.desktop</Filename>
+   <Filename>kde-Help.desktop</Filename>
+   <Filename>kde-Home.desktop</Filename>
+   <Filename>kde-KControl.desktop</Filename>
+   <Filename>kde-adept_installer.desktop</Filename>
+   <Filename>kalzium.desktop</Filename>
+  </Include>
+ </Menu>
+ <Menu>
+  <Name>languages</Name>
+  <Directory>languages.directory</Directory>
+  <Include>
+   <Filename>klatin.desktop</Filename>
+   <Filename>kvoctrain.desktop</Filename>
+   <Filename>kwordquiz.desktop</Filename>
+  </Include>
+  <Layout>
+   <Merge type="files" />
+   <Filename>klatin.desktop</Filename>
+   <Filename>kvoctrain.desktop</Filename>
+   <Filename>kwordquiz.desktop</Filename>
+  </Layout>
+ </Menu>
+ <Menu>
+  <Name>science</Name>
+  <Layout>
+   <Merge type="files" />
+   <Filename>kstars.desktop</Filename>
+   <Filename>kalzium.desktop</Filename>
+  </Layout>
+  <Directory>science.directory</Directory>
+  <Include>
+   <Filename>kalzium.desktop</Filename>
+   <Filename>kstars.desktop</Filename>
+  </Include>
+ </Menu>
+ <Menu>
+  <Name>creative work</Name>
+  <Layout>
+   <Merge type="files" />
+   <Filename>vym-2.desktop</Filename>
+   <Filename>kdissert.desktop</Filename>
+  </Layout>
+  <Directory>creative work.directory</Directory>
+  <Include>
+   <Filename>vym-2.desktop</Filename>
+   <Filename>kdissert.desktop</Filename>
+  </Include>
+ </Menu>
+ <Menu>
+  <Name>computer science</Name>
+  <Directory>computer science.directory</Directory>
+  <Include>
+   <Filename>kturtle.desktop</Filename>
+   <Filename>kregexpeditor.desktop</Filename>
+  </Include>
+  <Layout>
+   <Merge type="files" />
+   <Filename>kturtle.desktop</Filename>
+   <Filename>kregexpeditor.desktop</Filename>
+  </Layout>
+ </Menu>
+ <Layout>
+  <Merge type="menus" />
+  <Menuname>writing</Menuname>
+  <Menuname>creative work</Menuname>
+  <Menuname>computer science</Menuname>
+  <Menuname>languages</Menuname>
+  <Menuname>science</Menuname>
+  <Menuname>mathematics</Menuname>
+  <Menuname>music</Menuname>
+ </Layout>
+ <Menu>
+  <Name>writing</Name>
+  <Layout>
+   <Merge type="files" />
+   <Filename>oowriter.desktop</Filename>
+   <Filename>ooimpress.desktop</Filename>
+   <Filename>oocalc.desktop</Filename>
+  </Layout>
+  <Directory>writing.directory</Directory>
+  <Include>
+   <Filename>oowriter.desktop</Filename>
+   <Filename>ooimpress.desktop</Filename>
+   <Filename>oocalc.desktop</Filename>
+  </Include>
+ </Menu>
+</Menu>
diff --git a/debian-edu-config/share/debian-edu/students/share/config/uiserverrc b/debian-edu-config/share/debian-edu/students/share/config/uiserverrc
new file mode 100644
index 0000000..0f61746
--- /dev/null
+++ b/debian-edu-config/share/debian-edu/students/share/config/uiserverrc
@@ -0,0 +1,12 @@
+[ProgressList]
+Col0=70
+Col1=160
+Col3=60
+Col4=92
+Col5=65
+Col6=70
+Col7=70
+Col8=450
+Enabled2=false
+FixedColumnWidths=false
+ShowListHeader=true
diff --git a/debian-edu-config/share/debian-edu/students/share/desktop-directories/computer science.directory b/debian-edu-config/share/debian-edu/students/share/desktop-directories/computer science.directory
new file mode 100644
index 0000000..61ee072
--- /dev/null
+++ b/debian-edu-config/share/debian-edu/students/share/desktop-directories/computer science.directory	
@@ -0,0 +1,5 @@
+[Desktop Entry]
+Comment=
+GenericName=
+Icon=package
+Name=computer science
diff --git a/debian-edu-config/share/debian-edu/students/share/desktop-directories/creative work.directory b/debian-edu-config/share/debian-edu/students/share/desktop-directories/creative work.directory
new file mode 100644
index 0000000..3e93b51
--- /dev/null
+++ b/debian-edu-config/share/debian-edu/students/share/desktop-directories/creative work.directory	
@@ -0,0 +1,5 @@
+[Desktop Entry]
+Comment=
+GenericName=
+Icon=package
+Name=creative work
diff --git a/debian-edu-config/share/debian-edu/students/share/desktop-directories/languages.directory b/debian-edu-config/share/debian-edu/students/share/desktop-directories/languages.directory
new file mode 100644
index 0000000..7af5f41
--- /dev/null
+++ b/debian-edu-config/share/debian-edu/students/share/desktop-directories/languages.directory
@@ -0,0 +1,5 @@
+[Desktop Entry]
+Comment=
+GenericName=
+Icon=package
+Name=languages
diff --git a/debian-edu-config/share/debian-edu/students/share/desktop-directories/mathematics.directory b/debian-edu-config/share/debian-edu/students/share/desktop-directories/mathematics.directory
new file mode 100644
index 0000000..29f6f37
--- /dev/null
+++ b/debian-edu-config/share/debian-edu/students/share/desktop-directories/mathematics.directory
@@ -0,0 +1,5 @@
+[Desktop Entry]
+Comment=
+GenericName=
+Icon=package
+Name=mathematics
diff --git a/debian-edu-config/share/debian-edu/students/share/desktop-directories/music.directory b/debian-edu-config/share/debian-edu/students/share/desktop-directories/music.directory
new file mode 100644
index 0000000..ddb5488
--- /dev/null
+++ b/debian-edu-config/share/debian-edu/students/share/desktop-directories/music.directory
@@ -0,0 +1,5 @@
+[Desktop Entry]
+Comment=
+GenericName=
+Icon=package
+Name=music
diff --git a/debian-edu-config/share/debian-edu/students/share/desktop-directories/science.directory b/debian-edu-config/share/debian-edu/students/share/desktop-directories/science.directory
new file mode 100644
index 0000000..fc1cd67
--- /dev/null
+++ b/debian-edu-config/share/debian-edu/students/share/desktop-directories/science.directory
@@ -0,0 +1,5 @@
+[Desktop Entry]
+Comment=
+GenericName=
+Icon=package
+Name=science
diff --git a/debian-edu-config/share/debian-edu/students/share/desktop-directories/writing.directory b/debian-edu-config/share/debian-edu/students/share/desktop-directories/writing.directory
new file mode 100644
index 0000000..8888664
--- /dev/null
+++ b/debian-edu-config/share/debian-edu/students/share/desktop-directories/writing.directory
@@ -0,0 +1,5 @@
+[Desktop Entry]
+Comment=
+GenericName=
+Icon=package
+Name=writing
diff --git a/debian-edu-config/share/debian-edu/students/share/services/update_ksycoca b/debian-edu-config/share/debian-edu/students/share/services/update_ksycoca
new file mode 100644
index 0000000..e69de29
diff --git a/debian-edu-config/share/debian-edu/thin-client/share/config/kcmartsrc b/debian-edu-config/share/debian-edu/thin-client/share/config/kcmartsrc
new file mode 100644
index 0000000..8a5c0fd
--- /dev/null
+++ b/debian-edu-config/share/debian-edu/thin-client/share/config/kcmartsrc
@@ -0,0 +1,3 @@
+[Arts]
+AudioIO=esd
+Arguments=\s-F 10 -S 4096 -a esd -s 60 -m artsmessage -c drkonqi -l 3 -f
diff --git a/debian-edu-config/share/ltsp/plugins/ltsp-build-client/Debian-custom/000-arch-detection b/debian-edu-config/share/ltsp/plugins/ltsp-build-client/Debian-custom/000-arch-detection
new file mode 100644
index 0000000..28a39eb
--- /dev/null
+++ b/debian-edu-config/share/ltsp/plugins/ltsp-build-client/Debian-custom/000-arch-detection
@@ -0,0 +1,9 @@
+case $MODE in
+  configure)
+    ARCH=${ARCH:-"$(dpkg --print-architecture)"}
+    # force building an i386 environment on amd64 servers
+    if [ "$ARCH" = "amd64" ]; then
+      ARCH=i386
+    fi
+  ;;
+esac
diff --git a/debian-edu-config/share/ltsp/plugins/ltsp-build-client/Debian-custom/025-bootprompt-opts b/debian-edu-config/share/ltsp/plugins/ltsp-build-client/Debian-custom/025-bootprompt-opts
new file mode 100644
index 0000000..abd43da
--- /dev/null
+++ b/debian-edu-config/share/ltsp/plugins/ltsp-build-client/Debian-custom/025-bootprompt-opts
@@ -0,0 +1,5 @@
+case "$MODE" in
+   configure)
+        export BOOTPROMPT_OPTS="quiet splash"
+         ;;
+esac
diff --git a/debian-edu-config/share/man/man8/debian-edu-restart-services.8 b/debian-edu-config/share/man/man8/debian-edu-restart-services.8
new file mode 100644
index 0000000..13cc725
--- /dev/null
+++ b/debian-edu-config/share/man/man8/debian-edu-restart-services.8
@@ -0,0 +1,24 @@
+.\"{{{ Man Page author Benjamin Sonntag <benjamin at sonntag.fr> }}}
+.\"{{{  Title
+.TH DEBIAN-EDU-RESTART-SERVICES 8 "Jan 28, 2006" "" "Debian-Edu Administrator's Manual"
+.\"}}}
+.\"{{{  Name
+.SH NAME
+debian-edu-restart-services \- restart the services that are running on this server.
+.\"}}}
+.\"{{{  Synopsis
+.SH SYNOPSIS
+.B /sbin/debian-edu-restart-services
+.\"}}}
+.\"{{{  Description
+.SH DESCRIPTION
+\fBdebian-edu-restart-services\fP restart the services running on this server. It stop them properly, then kill the remaining process (with SIGHUP then SIGKILL). Then it restart each service.
+.\"}}}
+.\"{{{  Author
+.SH AUTHOR
+Debian-Edu International Team.
+.\"}}}
+.\"{{{  See also
+.SH "SEE ALSO"
+.BR invoke-rc.d (8)
+.\"}}}
diff --git a/debian-edu-config/share/man/man8/debian-edu-test-install.8 b/debian-edu-config/share/man/man8/debian-edu-test-install.8
new file mode 100644
index 0000000..90e71a3
--- /dev/null
+++ b/debian-edu-config/share/man/man8/debian-edu-test-install.8
@@ -0,0 +1,21 @@
+.\"{{{ Man Page author Benjamin Sonntag <benjamin at sonntag.fr> }}}
+.\"{{{  Title
+.TH DEBIAN-EDU-TEST-INSTALL 8 "Jan 28, 2006" "" "Debian-Edu Administrator's Manual"
+.\"}}}
+.\"{{{  Name
+.SH NAME
+debian-edu-test-install \- Launch debian-edu test suite to check a debian-edu installation.
+.\"}}}
+.\"{{{  Synopsis
+.SH SYNOPSIS
+.B /sbin/debian-edu-test-install
+.\"}}}
+.\"{{{  Description
+.SH DESCRIPTION
+\fBdebian-edu-test-install\fP launch every script in /usr/lib/debian-edu-config/testsuite and check it result. Those scripts test each and every service that should be installed by debian-edu distribution and return true or false. 
+.PP
+If you set the environment variable $debian_edu_error_flag_file to a filename, error or success result will be added to this file instead of stdout.
+.\"}}}
+.\"{{{  Author
+.SH AUTHOR
+Debian-Edu International Team.
diff --git a/debian-edu-config/share/man/man8/skolelinux-restart-services.8 b/debian-edu-config/share/man/man8/skolelinux-restart-services.8
new file mode 120000
index 0000000..f546c6a
--- /dev/null
+++ b/debian-edu-config/share/man/man8/skolelinux-restart-services.8
@@ -0,0 +1 @@
+debian-edu-restart-services.8
\ No newline at end of file
diff --git a/debian-edu-config/share/man/man8/skolelinux-test-install.8 b/debian-edu-config/share/man/man8/skolelinux-test-install.8
new file mode 120000
index 0000000..d8f5e91
--- /dev/null
+++ b/debian-edu-config/share/man/man8/skolelinux-test-install.8
@@ -0,0 +1 @@
+debian-edu-test-install.8
\ No newline at end of file
diff --git a/debian-edu-config/testsuite/base-config b/debian-edu-config/testsuite/base-config
new file mode 100755
index 0000000..82ec25d
--- /dev/null
+++ b/debian-edu-config/testsuite/base-config
@@ -0,0 +1,13 @@
+#!/bin/sh -e
+#
+# Report the install settings used, for installations before etch
+
+file=/root/dbootstrap_settings
+
+if [ -f "$file" ] ; then
+    sed "s%^%info: $0: $file: %" < $file
+else
+    echo "info: $0: $file is missing."
+fi
+
+exit 0
diff --git a/debian-edu-config/testsuite/bind9-dns b/debian-edu-config/testsuite/bind9-dns
new file mode 100755
index 0000000..b2e6b1c
--- /dev/null
+++ b/debian-edu-config/testsuite/bind9-dns
@@ -0,0 +1,83 @@
+#!/bin/sh -e
+#
+# Test if the DNS server works.
+
+if test -r /etc/skolelinux/config ; then
+    mv /etc/skolelinux/config /etc/debian-edu/config
+fi
+
+if test -r /etc/debian-edu/config ; then
+    . /etc/debian-edu/config
+fi
+
+# In case we are a standalone profile, just exit gracefully
+if echo "$PROFILE" | grep -q Standalone ; then
+	exit 0
+fi
+
+# The internal DNS server is called 'domain'
+dnsserver='domain'
+
+if echo "$PROFILE" | grep -q Main-Server ; then
+    dnsserver=localhost
+fi
+
+test_addr() {
+    severity=$1
+    hostinfo=$2
+    host=`echo $hostinfo | cut -d: -f1`
+    ip=`echo $hostinfo | cut -d: -f2`
+
+   #echo "Testing '$host' '$ip'"
+   case  `dpkg -S /usr/bin/host |cut -d":" -f1` in
+      #bind9-host
+      bind9-host)
+          forwardip=`host  "$host" "$dnsserver" 2>/dev/null | tail -n1 | grep -v 'CNAME' | awk '{ print $4; }'`
+          reversename=`host  "$ip" "$dnsserver" 2>/dev/null | grep 'pointer' | awk '{ print $5; }' | sed -e 's/\.$//g' `
+	  ;;
+      #default to old way
+      host | *) 
+          forwardip=`host -q  "$host" "$dnsserver" 2>/dev/null | grep -v 'CNAME' | awk '{ print $3; }'`
+          reversename=`host -q  "$ip" "$dnsserver" 2>/dev/null | grep '^Name:' | awk '{ print $2; }'`
+	  ;;
+   esac
+
+
+    if test "$ip" = "$forwardip" ; then
+	echo "success: $0: DNS lookup for '$host' on server '$dnsserver' works ('$forwardip')."
+    else
+	echo "$severity: $0: Unable to look up '$host' on server '$dnsserver' ('$forwardip')."
+    fi
+
+    if test "$host" = "$reversename" ; then
+	echo "success: $0: DNS lookup for '$ip' on server '$dnsserver' works ('$reversename')."
+    else
+	shortname=`echo $reversename | cut -d. -f1`
+	if test "$host" = "$shortname" ; then
+	    echo "success: $0: DNS lookup for '$ip' on server '$dnsserver' works ('$reversename')."
+	else
+	    echo "$severity: $0: Unable to look up '$ip' on server '$dnsserver' ('$reversename' != '$host')."
+	fi
+    fi
+}
+
+
+# Check if we have internet connectivity
+for hostinfo in \
+    www.uio.no:129.240.4.44
+  do
+    test_addr info $hostinfo
+done
+
+# Check if forward and reverse is correct
+for hostinfo in \
+    tjener:10.0.2.2 \
+    tjener.intern:10.0.2.2 \
+    ltspserver00:10.0.2.10 \
+    static00:10.0.2.50 \
+    dhcp001.intern:10.0.2.101 \
+    ltsp010:192.168.0.10 \
+    ltsp010.intern:192.168.0.10
+  do
+    test_addr error $hostinfo
+done
diff --git a/debian-edu-config/testsuite/cups b/debian-edu-config/testsuite/cups
new file mode 100755
index 0000000..f0ecb46
--- /dev/null
+++ b/debian-edu-config/testsuite/cups
@@ -0,0 +1,29 @@
+#!/bin/sh -e
+#
+# Test if the CUPS server is working.
+
+if [ -f /etc/cups/cupsd.conf ] ; then
+    :
+else
+    echo "error: $0: /etc/cups/cupsd.conf is missing.  Is cupsys installed?"
+    exit 1
+fi
+
+if pidof cupsd > /dev/null ; then
+    echo "success: $0: cupsd is running."
+else
+    echo "error: $0: cupsd is not running."
+    exit 1
+fi
+
+port=ipp
+proto=tcp
+
+if netstat -a 2>&1 | grep ":$port " | grep -q "^$proto" ; then
+    echo "success: $0: cupsd server is listening on $port/$proto."
+else
+    echo "error: $0: cupsd server is not listening on $port/$proto."
+    exit 1
+fi
+
+exit 0
diff --git a/debian-edu-config/testsuite/dash b/debian-edu-config/testsuite/dash
new file mode 100755
index 0000000..3eacd87
--- /dev/null
+++ b/debian-edu-config/testsuite/dash
@@ -0,0 +1,11 @@
+#!/bin/sh -e
+#
+# Test if /bin/sh is dash or bash
+
+current=`ls -l /bin/sh | rev | cut -d" " -f1-3 | rev`
+
+if [ "/bin/sh -> dash" = "$current" ] ; then
+	echo "success: $0: /bin/sh is dash"
+else
+	echo "error: $0: incorrect link: $current"
+fi
diff --git a/debian-edu-config/testsuite/dhcpd b/debian-edu-config/testsuite/dhcpd
new file mode 100755
index 0000000..131f7f3
--- /dev/null
+++ b/debian-edu-config/testsuite/dhcpd
@@ -0,0 +1,33 @@
+#!/bin/sh -e
+#
+# Test if the DHCP server is working.
+
+if test -r /etc/debian-edu/config ; then
+    . /etc/debian-edu/config
+fi
+
+# Only main-server and thin-client server profiles run dhcpd
+if echo "$PROFILE" | egrep -q 'Main-Server|Thin-Client-Server' ; then
+    :
+else
+    exit 0
+fi
+
+cfg=/etc/default/dhcp3-server
+
+if [ -f $cfg ] ; then
+    . $cfg
+    echo "info: $0: configured interfaces is '$INTERFACES'"
+else
+    echo "error: $0: $cfg is missing."
+    exit 1
+fi
+
+if pidof dhcpd3 > /dev/null ; then
+    echo "success: $0: dhcpd3 is running."
+else
+    echo "error: $0: dhcpd3 is not running."
+    exit 1
+fi
+
+exit 0
diff --git a/debian-edu-config/testsuite/filesystems b/debian-edu-config/testsuite/filesystems
new file mode 100755
index 0000000..0fcd086
--- /dev/null
+++ b/debian-edu-config/testsuite/filesystems
@@ -0,0 +1,18 @@
+#!/bin/sh
+#
+# Check that we are using ext3, not ext2
+
+LANG=C
+export LANG
+
+awk "/ext2/ { print \"error: $0: Using ext2 on\",\$2 }" /proc/mounts
+awk "/ext3/ { print \"success: $0: Using ext3 on\",\$2 }" /proc/mounts
+
+# Make sure all ext3 mount points are online resizable
+for p in `df -Pt ext3  | grep -v ^Filesystem |awk '{print $1}'`; do 
+    if tune2fs -l $p| grep features | grep -q resize_inode ; then
+	:
+    else
+	echo "error: $0: Missing resize_inode in ext3 fs $p"
+    fi
+done
diff --git a/debian-edu-config/testsuite/hardware b/debian-edu-config/testsuite/hardware
new file mode 100755
index 0000000..b344489
--- /dev/null
+++ b/debian-edu-config/testsuite/hardware
@@ -0,0 +1,51 @@
+#!/bin/sh -e
+#
+# Report the detected HW
+
+if [ -x /sbin/discover ] ; then
+	/sbin/discover -f "info: $0: discover: %m;%S;%D;%V;%M;%d\n" all || true
+else
+	echo "error: $0: Unable to find /sbin/discover"
+fi
+
+LSPCI=/sbin/lspci
+if [ -x /usr/bin/lspci ] ; then
+    LSPCI=/usr/bin/lspci # This is the location in Sarge [2005-01-30]
+fi
+
+if [ -x $LSPCI ] ; then
+	(
+		$LSPCI -v -t || true
+		$LSPCI -n || true
+		$LSPCI -v || true
+		echo "For use with 'lspci -F':"
+		$LSPCI -x || true
+	)| sed "s%^%info: $0: lspci: %"
+else
+	echo "error: $0: Unable to find $LSPCI"
+fi
+
+if [ -x /sbin/lsmod ] ; then
+	/sbin/lsmod | sed "s%^%info: $0: lsmod: %"
+else
+	echo "error: $0: Unable to find /sbin/lsmod"
+fi
+
+for file in cpuinfo ioports iomem interrupts meminfo ; do
+	if [ -e /proc/$file ] ; then
+		cat /proc/$file | sed "s%^%info: $0: $file: %"
+	else
+		echo "error: $0: Unable to find /proc/$file"
+	fi
+done
+
+disks=`cat /proc/partitions|egrep 'ide|scsi'|awk '{print $4}'|grep '/disc'|sed 's%^%/dev/%'`
+for disk in $disks ; do
+	/sbin/hdparm -i $disk 2>&1 |  sed "s%^%info: $0: hdparm: %"
+done
+
+if [ -x /usr/sbin/dmidecode ] ; then
+    /usr/sbin/dmidecode | sed "s%^%info: $0: dmidecode: %"
+else
+    echo "error: $0: Unable to find /usr/sbin/dmidecode"
+fi
diff --git a/debian-edu-config/testsuite/kde b/debian-edu-config/testsuite/kde
new file mode 100755
index 0000000..7cc9aea
--- /dev/null
+++ b/debian-edu-config/testsuite/kde
@@ -0,0 +1,29 @@
+#!/bin/sh -e
+#
+# Test if kde applications are properly configured
+
+if test -r /etc/debian-edu/config ; then
+    . /etc/debian-edu/config
+fi
+
+# Check /etc/kde[23]/kioslaverc, it should be readable by all, and
+# contain references to the web cache.
+
+for file in /etc/kde2/kioslaverc /etc/kde3/kioslaverc ; do
+    if [ -f $file ] ; then
+	mode="`stat -c "%a" $file`"
+	if [ 644 = "$mode" ] || [ 755 = "$mode" ]; then
+	    echo "success: $0: Correct permissions for $file"
+	else
+	    echo "error: $0: Incorrect permissions for $file"
+	    ls -l $file
+	fi
+	if grep -q webcache:3128 $file ; then
+	    echo "success: $0: Proxy settings in $file"
+	else
+	    echo "error: $0: Missing proxy settings in $file"
+	fi
+    fi
+done
+
+exit 0
diff --git a/debian-edu-config/testsuite/kdm b/debian-edu-config/testsuite/kdm
new file mode 100755
index 0000000..9e2dc8a
--- /dev/null
+++ b/debian-edu-config/testsuite/kdm
@@ -0,0 +1,55 @@
+#!/bin/sh -e
+#
+# Test if the kdm server is working.
+
+if test -r /etc/debian-edu/config ; then
+    . /etc/debian-edu/config
+fi
+
+# Standalone Main-Server do not install kdm
+if [ "$PROFILE" = Main-Server ] ; then
+    exit 0
+fi
+
+# Check if a deb package is installed.  Return true if it is, and
+# false if it isn't.
+deb_installed() {
+    RET=$( dpkg -s $1 2>/dev/null | awk '/Status\:/ {print $4}' )
+    if [ "$RET" = "installed" ] ; then
+        true
+    else
+        false
+    fi
+}
+
+# Only test if kdm is installed
+if  deb_installed kdm ; then
+    :
+else
+    echo "info: $0: kdm is not installed"
+    exit 0
+fi
+
+# kdm shall not be started, disabling the following tests
+# (2006-01-25, werner)
+
+# kdm is not started yet when this is executed during installation.
+# Thus only information.
+#if pidof kdm > /dev/null ; then
+#    echo "success: $0: kdm is running."
+#else
+#    echo "info: $0: kdm is not running."
+#    exit 1
+#fi
+#
+#port=xdmcp
+#proto=udp
+#
+#if netstat -a 2>&1 | grep ":$port " | grep -q "^$proto" ; then
+#    echo "success: $0: kdm server is listening on $port/$proto."
+#else
+#    echo "info: $0: kdm server is not listening on $port/$proto."
+#    exit 1
+#fi
+#
+#exit 0
diff --git a/debian-edu-config/testsuite/keyboard-console b/debian-edu-config/testsuite/keyboard-console
new file mode 100755
index 0000000..3e756c2
--- /dev/null
+++ b/debian-edu-config/testsuite/keyboard-console
@@ -0,0 +1,90 @@
+#!/bin/sh -e
+#
+# Test if console keyboard is correct.
+
+# This test will never succeed, because the console-data package will
+# first load the keyboard definition into the kernel, and then run
+# dumpkeys and save the content into /etc/console/boottime.kmap.gz.
+# The generated file will never look like the file in
+# /usr/share/keymaps.
+
+exit 0
+
+if test -r /etc/skolelinux/config ; then
+    mv /etc/skolelinux/config /etc/debian-edu/config
+fi
+
+if test -r /etc/debian-edu/config ; then
+    . /etc/debian-edu/config
+fi
+
+curmap=/etc/console/boottime.kmap.gz
+
+if test ! -f $curmap ; then
+    echo "error: $0: No console keymap in '$curmap'."
+    exit 1
+fi
+
+map_locale_to_keyboard() {
+##
+# mapname should be the path under /usr/share/keymaps to the right keymap
+##
+    case "$1" in
+	ca*|es*)
+	    mapname="i386/qwerty/es"
+	    ;;
+	da*)
+	    mapname="i386/qwerty/dk-latin1"
+	    ;;
+	de*)
+	    mapname="i386/qwertz/de-latin1-nodeadkeys"
+	    ;;
+	fr_FR*)
+	    mapname="i386/azerty/fr-latin1"
+	    ;;
+	fi*)
+	    mapname="i386/qwerty/fi-latin1"
+	    ;;
+#	it*)
+#	    mapname="i386/qwerty/it"
+#	    ;;
+#	lv*)
+#	    mapname="i386/qwerty/lv-latin7"
+#	    ;;
+	nb*|no*|nn*|se*)
+	    mapname="i386/qwerty/no-latin1"
+	    ;;
+	nds_DE)
+	    mapname="i386/qwertz/de-latin1-nodeadkeys"
+	    ;;
+	nl_BE*|fr_BE*)
+	    mapname="i386/azerty/be-latin1"
+	    ;;
+	nl_NL*)
+	    mapname="i386/qwerty/nl"
+	    ;;
+	    
+	pl_PL*)
+	    mapname="i386/qwerty/pl"
+	    ;;
+	sv*)
+	    mapname="i386/qwerty/se-latin1"
+	    ;;
+	*)
+	    # Accept the existing value if the default language is unspecified
+	    keymap="$curmap"
+	    ;;
+    esac
+}
+
+map_locale_to_keyboard "$LOCALE"
+
+if test -z "$keymap" ; then
+    keymap="/usr/share/keymaps/$mapname.kmap.gz"
+fi
+
+if cmp "$curmap" "$keymap" > /dev/null 2>&1 ; then
+    echo "success: $0: Current console keymap is identical to '$keymap'."
+else
+    echo "error: $0: Current console keymap do not match '$keymap'."
+fi
diff --git a/debian-edu-config/testsuite/ldap-client b/debian-edu-config/testsuite/ldap-client
new file mode 100755
index 0000000..ccf4a27
--- /dev/null
+++ b/debian-edu-config/testsuite/ldap-client
@@ -0,0 +1,84 @@
+#!/bin/sh -e
+#
+# Test if the LDAP server is working.
+# $Id$
+
+if test -r /etc/debian-edu/config ; then
+    . /etc/debian-edu/config
+fi
+
+# Only networked profiles use LDAP
+if echo "$PROFILE" | egrep -q 'Main-Server|Workstation|Thin-Client-Server' ; then
+    :
+else
+    exit 0
+fi
+
+RESULT=0
+
+# Test if LDAP server is reachable
+if ping -c 3 ldap > /dev/null 2>&1 ; then
+    echo "success: $0: Host 'ldap' is pingable."
+else
+    echo "error: $0: Host 'ldap' is not pingable."
+    RESULT=1
+fi
+
+for file in libnss-ldap.conf pam_ldap.conf ; do
+    if [ -f /etc/$file ] ; then
+	grep -v '^#' /etc/$file | grep -v '^$' | sort |
+	    sed "s/^/info: $file: /"
+    else
+	RESULT=1
+	echo "error: $0: $file is missing."
+    fi
+done
+
+if [ -f /etc/ldap/ldap.conf ] ; then
+    if grep -q "^HOST ldap" /etc/ldap/ldap.conf ; then
+        :
+    else
+        echo "error: $0: ldap/ldap.conf misses definition of HOST ldap"
+        RESULT=1
+    fi
+else
+    RESULT=1
+    echo "error: $0: ldap/ldap.conf is missing."
+fi
+
+# test netgroups
+if ldap2netgroup | grep -q tjener ; then
+    echo "success: $0: ldap2netgroup found 'tjener'"
+else
+    echo "error: $0: ldap2netgroup unable to find 'tjener'."
+    RESULT=1
+fi
+
+if netgroup all-hosts | grep -q tjener ; then
+    echo "success: $0: netgroup found 'tjener'"
+else
+    echo "error: $0: netgroup unable to find 'tjener'."
+    RESULT=1
+fi
+
+if [ -x /usr/bin/ldapsearch ] ; then
+    LDAP_MOUNTS="$(
+        ldapsearch -LLL -h ldap -b ou=Automount,dc=skole,dc=skolelinux,dc=no \
+                   -x '(objectClass=automount)' |\
+            grep "^cn:" | while read attr val; do
+                echo "$val"
+          done
+        )"
+    echo info: $0: Mountpoints found in ldap: $LDAP_MOUNTS
+    for WANT_MOUNT in /skole tjener home0 ; do
+        if ! echo $LDAP_MOUNTS | grep -q $WANT_MOUNT ; then
+            echo "error: $0: Missing $WANT_MOUNT mount point in ldap"
+            RESULT=1
+        fi
+    done
+else
+    echo "error: $0:Missing /usr/bin/ldapsearch "
+    RESULT=1
+fi
+
+exit $RESULT
diff --git a/debian-edu-config/testsuite/ldap-server b/debian-edu-config/testsuite/ldap-server
new file mode 100755
index 0000000..a7ecbf5
--- /dev/null
+++ b/debian-edu-config/testsuite/ldap-server
@@ -0,0 +1,59 @@
+#!/bin/sh -e
+#
+# Test if the LDAP server is working.
+# $Id$
+
+if test -r /etc/debian-edu/config ; then
+    . /etc/debian-edu/config
+fi
+
+# Only Main-Server should use LDAP
+if echo "$PROFILE" | grep -q Main-Server ; then
+    :
+else
+    exit 0
+fi
+
+if [ -f /etc/ldap/slapd.conf ] ; then
+    :
+else
+    echo "error: $0: /etc/ldap/slapd.conf is missing.  Is slapd installed?"
+    exit 1
+fi
+
+if pidof slapd > /dev/null ; then
+    echo "success: $0: slapd is running."
+else
+    echo "error: $0: slapd is not running."
+    exit 1
+fi
+
+RESULT=0
+
+for port in ldap ldaps ; do
+    proto=tcp
+
+    if netstat -a 2>&1 | grep ":$port " | grep -q "^$proto" ; then
+        echo "success: $0: slapd server is listening on $port/$proto."
+    else
+        echo "error: $0: slapd server is not listening on $port/$proto."
+        RESULT=1
+    fi
+done
+
+if [ -x /usr/sbin/slapcat ] ; then
+    slapcat | sed "s%^%info: $0: slapcat: %"
+else
+    echo "error: $0: Unable to find /usr/sbin/slapcat"
+    RESULT=1
+fi
+
+if [ -f /etc/ldap/ssl/slapd.pem ] ; then
+    openssl verify  /etc/ldap/ssl/slapd.pem | 
+	  sed "s%^%info: $0: slapd.pem: %"
+else
+    echo "error: Missing /etc/ldap/ssl/slapd.pem"
+    RESULT=1
+fi
+
+exit $RESULT
diff --git a/debian-edu-config/testsuite/locale b/debian-edu-config/testsuite/locale
new file mode 100755
index 0000000..6d959d2
--- /dev/null
+++ b/debian-edu-config/testsuite/locale
@@ -0,0 +1,21 @@
+#!/bin/sh -e
+#
+# Test if the locale is correctly configured.
+
+echo "info: $0: install locale: '$LANG' '$LANGUAGE'"
+
+env|egrep 'LC|LANG' | sed "s%^%info: $0: install env: %"
+
+if [ ! -f /etc/environment ] ; then
+    echo "error: $0: Unable to find /etc/environment."
+    exit 1
+else
+    unset LANG LANGUAGE LC_ALL
+    set -a
+    . /etc/environment
+    locale | sed "s%^%info: $0: locale: %"
+    locale charmap | sed "s%^%info: $0: locale charmap: %"
+    env|egrep 'LC|LANG' | sed "s%^%info: $0: env: %"
+fi
+
+exit 0
diff --git a/debian-edu-config/testsuite/ltsp b/debian-edu-config/testsuite/ltsp
new file mode 100755
index 0000000..90e9b80
--- /dev/null
+++ b/debian-edu-config/testsuite/ltsp
@@ -0,0 +1,18 @@
+#!/bin/sh
+#
+# Check the LTSP installation.
+
+ARCH=`dpkg --print-installation-architecture`
+
+PROFILE=
+if test -r /etc/debian-edu/config ; then
+    . /etc/debian-edu/config
+fi
+
+if echo "$PROFILE" | grep -q Thin-Client-Server ; then
+    if [ -d /opt/ltsp/$ARCH/etc ] ; then
+	echo "success: Found LTSP chroot"
+    else
+	echo "error: LTSP chroot is missing in /opt/ltsp/$ARCH/"
+    fi
+fi
diff --git a/debian-edu-config/testsuite/network b/debian-edu-config/testsuite/network
new file mode 100755
index 0000000..ece734f
--- /dev/null
+++ b/debian-edu-config/testsuite/network
@@ -0,0 +1,130 @@
+#!/bin/sh -e
+#
+# Report the current network status
+
+error() {
+    echo "error: $0: $*"
+}
+
+PROFILE=
+if test -r /etc/debian-edu/config ; then
+    . /etc/debian-edu/config
+fi
+
+if [ -x /sbin/ifconfig ] ; then
+	/sbin/ifconfig -a | sed "s%^%info: $0: ifconfig: %" || true
+else
+	error "Unable to find /sbin/ifconfig"
+fi
+
+if [ -x /sbin/route ] ; then
+	/sbin/route -n | sed "s%^%info: $0: route: %" || true
+else
+	error "Unable to find /sbin/route"
+fi
+
+if [ -x /usr/bin/nmap ] ; then
+	/usr/bin/nmap localhost 2>&1 | sed "s%^%info: $0: nmap: %" || true
+else
+	error "Unable to find /sbin/nmap"
+fi
+
+# Only test if nfs-common is installed which is not the case on a
+# standalone profile
+if ! echo "$PROFILE" | grep -q Standalone ; then
+	if [ -x /sbin/showmount ] ; then
+		/sbin/showmount -e localhost 2>&1 | sed "s%^%info: $0: showmount: %" || true
+	else
+		error "Unable to find /sbin/showmount"
+	fi
+fi
+	
+if [ -f /etc/resolv.conf ] ; then
+	cat /etc/resolv.conf | sed "s%^%info: $0: resolv.conf: %" || true
+else
+	error "Unable to find /etc/resolv.conf"
+fi
+
+if [ -f /etc/hosts ] ; then
+	cat /etc/hosts | sed "s%^%info: $0: hosts: %" || true
+else
+	error "Unable to find /etc/hosts"
+fi
+if [ -x /usr/bin/rpcinfo ] ; then
+	/usr/bin/rpcinfo -p localhost 2>&1 | sed "s%^%info: $0: rpcinfo: %" || true
+else
+	error "Unable to find /usr/bin/rpcinfo"
+fi
+
+######################################################################
+# Detect missing (or not detected) HW, and make sure we have the rest
+# of the network available. [Should it move to a separate file?]
+######################################################################
+
+have_interface() {
+    if /sbin/ifconfig "$1" > /dev/null 2>&1 ; then
+        true
+    else
+        false
+    fi
+}
+
+for value in `echo $PROFILE |sed 's/ /-/g' | sed 's/,-/ /g'`; do
+  info "Testing profile '$value'"
+  case $value in
+      Workstation)
+        networked=true
+        workstation=true
+        ;;
+      Thin-Client-Server|LTSP-server)
+        networked=true
+        workstation=true
+        ltspserver=true
+        ;;
+      Main-Server|Server)
+        networked=true
+        server=true
+        ;;
+      Standalone)
+        networked=false
+        standalone=true
+        ;;
+      Barebone)
+        networked=true
+        ;;
+      *)
+        error "unknown profile '$profile'"
+        ;;
+  esac
+done
+
+if test "$networked" = true && ! have_interface eth0 ; then
+    error "Missing network interface eth0 needed by the main server, thin client server and workstation."
+fi
+
+if test "$ltspserver" = true && ! have_interface eth1 ; then
+    error "Missing network interface eth1 needed by the thin client server."
+fi
+
+if test "$networked" = true -a "$server" != true ; then
+    # should be able to reach tjener.intern at this poing
+    if ! ping -c1 tjener.intern > /dev/null 2>&1 ; then
+        error "Unable to ping tjener.intern."
+    fi
+fi
+
+if false && test "$server" = true && have_interface eth0; then
+    # Make sure we are the only main server on the net.  Should not be
+    # able to reach another tjener.intern
+    # Eh, how do we test this?  Check if we are the only DHCP server around?
+    ifdown eth0
+    if dhclient -d -e eth0 ; then
+        :
+    else
+        # Oh, we got a reply from a DHCP server.  This is not supposed
+        # to happen.
+        error "Found another DHCP server on eth0!  Multiple main-server installs?"
+    fi
+fi
+
+exit 0
diff --git a/debian-edu-config/testsuite/ntp b/debian-edu-config/testsuite/ntp
new file mode 100755
index 0000000..f8491a1
--- /dev/null
+++ b/debian-edu-config/testsuite/ntp
@@ -0,0 +1,49 @@
+#!/bin/sh -e
+#
+# Test if the NTP configuration is correct.
+
+if test -r /etc/skolelinux/config ; then
+    mv /etc/skolelinux/config /etc/debian-edu/config
+fi
+
+if test -r /etc/debian-edu/config ; then
+    . /etc/debian-edu/config
+fi
+
+# Only networked profiles use NTP
+if echo "$PROFILE" | egrep -q 'Main-Server|Workstation|Thin-Client-Server' ; then
+    :
+else
+    exit 0
+fi
+
+if dash -n /etc/default/ntpdate ; then
+    :
+else
+    echo error: script error in /etc/default/ntpdate.
+fi
+
+if [ ! -x /usr/bin/ntpq ] ; then
+    echo "error: $0: The ntpq binary is missing."
+    exit 1
+fi
+
+# Test if NTP server is reachable
+if ping -c 3 ntp > /dev/null 2>&1 ; then
+    echo "success: $0: Host 'ntp' is pingable."
+else
+    echo "error: $0: Host 'ntp' is not pingable."
+    RESULT=1
+fi
+
+curservers=`ntpq -c lpeers | tail -n +3 | awk '{print $1}' |tr "\n" " "`
+
+echo "info: $0: Current NTP servers: '$curservers'."
+
+if echo $PROFILE | grep -q 'Main-Server' ; then
+    if echo $curservers | grep -q 'LOCAL(0)' ; then
+	echo "success: $0: Found local NTP clock on server."
+    else
+	echo "error: $0: Missing local NTP clock on server."
+    fi
+fi
diff --git a/debian-edu-config/testsuite/partitioning b/debian-edu-config/testsuite/partitioning
new file mode 100755
index 0000000..7ffbd9e
--- /dev/null
+++ b/debian-edu-config/testsuite/partitioning
@@ -0,0 +1,30 @@
+#!/bin/sh -e
+#
+# Report the partition tables
+
+if [ -x /sbin/fdisk ] ; then
+	( for disk in hda hdb hdc hdd sda sdb sdc sdd ; do
+		/sbin/fdisk -l /dev/$disk || true
+	  done
+	) 2>&1 | sed "s%^%info: $0: fdisk: %"
+else
+	echo "error: $0: Unable to find /sbin/fdisk"
+fi
+
+if [ -f /proc/partitions ] ; then
+	sed "s%^%info: $0: partitions: %" < /proc/partitions
+else
+	echo "error: $0: Unable to find /proc/partitions"
+fi
+
+if [ -f /etc/fstab ] ; then
+	sed "s%^%info: $0: fstab: %" < /etc/fstab
+else
+	echo "error: $0: Unable to find /etc/fstab"
+fi
+
+if [ -x /bin/df ] ; then
+	/bin/df -k | sed "s%^%info: $0: df: %"
+else
+	echo "error: $0: Unable to find /bin/df"
+fi
diff --git a/debian-edu-config/testsuite/php b/debian-edu-config/testsuite/php
new file mode 100755
index 0000000..f134a69
--- /dev/null
+++ b/debian-edu-config/testsuite/php
@@ -0,0 +1,51 @@
+#!/bin/sh -e
+#
+# Test if PHP is working
+
+# We do not use PHP any more [pere 2005-12-02]
+exit 0
+
+if test -r /etc/debian-edu/config ; then
+    . /etc/debian-edu/config
+fi
+
+# Only Main-Server should use PHP
+if echo "$PROFILE" | grep -q Main-Server ; then
+    :
+else
+    exit 0
+fi
+
+testfile=/home/www/test.php
+url=http://www.intern/test.php
+
+unset http_proxy || true
+unset ftp_proxy  || true
+
+if [ ! -x /usr/bin/GET ] ; then
+    echo "error: $0: Unable to find /usr/bin/GET."
+    exit 1
+else
+    cat <<EOF > "$testfile"
+<html>
+  <head>
+    <title>Min f�rste PHP-side</title>
+  </head>
+  <body>
+n    <?php echo "Hello World<p>"; ?>
+  </body>
+</html>
+EOF
+    chmod a+rx "$testfile"
+
+    if /usr/bin/GET "$url" 2>/dev/null | grep -q 'Hello World' ; then
+	echo "success: $0: PHP script executed as it should."
+        rm -f "$testfile"
+    else
+	echo "error: $0: PHP script gave incorrect output or failed to run."
+        rm -f "$testfile"
+	exit 1
+    fi
+fi
+
+exit 0
diff --git a/debian-edu-config/testsuite/postoffice b/debian-edu-config/testsuite/postoffice
new file mode 100755
index 0000000..c92ba12
--- /dev/null
+++ b/debian-edu-config/testsuite/postoffice
@@ -0,0 +1,35 @@
+#!/bin/sh -e
+#
+# Test if the post office is working.
+
+if test -r /etc/skolelinux/config ; then
+    mv /etc/skolelinux/config /etc/debian-edu/config
+fi
+
+if test -r /etc/debian-edu/config ; then
+    . /etc/debian-edu/config
+fi
+
+# Only Main-Server should implement mail server
+if echo "$PROFILE" | grep -q Main-Server ; then
+    enabled=true
+fi
+
+if [ true != "$enabled" ] ; then
+    exit 0
+fi
+
+proto=tcp
+retval=0
+
+#for port in smtp imap2 imaps; do
+for port in smtp imaps; do
+    if netstat -a 2>&1 | grep ":$port " | grep -q "^$proto"; then
+	echo "success: $0: postoffice is listening on $port/$proto."
+    else
+	echo "error: $0: postoffice is not listening on $port/$proto."
+	retval=1
+    fi
+done
+
+exit $retval
diff --git a/debian-edu-config/testsuite/procs b/debian-edu-config/testsuite/procs
new file mode 100755
index 0000000..f7f6788
--- /dev/null
+++ b/debian-edu-config/testsuite/procs
@@ -0,0 +1,15 @@
+#!/bin/sh -e
+#
+# Report the running processes.
+
+if [ -x /bin/ ] ; then
+	/bin/ps auxww | sed "s%^%info: $0: ps: %"
+else
+	echo "error: $0: Unable to find /bin/ps"
+fi
+
+if [ -x /usr/bin/pstree ] ; then
+	/usr/bin/pstree -p | sed "s%^%info: $0: pstree: %"
+else
+	echo "error: $0: Unable to find /usr/bin/pstree"
+fi
diff --git a/debian-edu-config/testsuite/samba b/debian-edu-config/testsuite/samba
new file mode 100755
index 0000000..735d4cc
--- /dev/null
+++ b/debian-edu-config/testsuite/samba
@@ -0,0 +1,71 @@
+#!/bin/sh -e
+#
+# Test if the smbadmin account is created
+
+BASE=dc=skole,dc=skolelinux,dc=no
+LDAPHOST="ldap"
+BASEDN=cn=smbadmin,ou=People,$BASE
+
+if test -r /etc/debian-edu/config ; then
+    . /etc/debian-edu/config
+fi
+
+# Standalone Main-Server do not install xfs
+if [ "$PROFILE" = Main-Server ] ; then
+    exit 0
+fi
+
+# Check if a deb package is installed.  Return true if it is, and
+# false if it isn't.
+deb_installed() {
+    RET=$( dpkg -s $1 2>/dev/null | awk '/Status\:/ {print $4}' )
+    if [ "$RET" = "installed" ] ; then
+        true
+    else
+        false
+    fi
+}
+
+# Only test if xfs is installed
+if  deb_installed samba ; then
+    :
+else
+    echo "info: $0: samba is not installed"
+    exit 0
+fi
+
+if pidof smbd > /dev/null ; then
+    echo "success: $0: samba is running."
+else
+    echo "error: $0: samba is not running."
+    exit 1
+fi
+
+port=netbios-ns 
+proto=udp
+
+if netstat -a 2>&1 | grep ":$port " | grep -q "^$proto" ; then
+    echo "success: $0: Netbios name service is listening on $port/$proto."
+else
+    echo "error: $0: Netbios name service is not listening on $port/$proto."
+    exit 1
+fi
+
+port=netbios-ssn
+proto=tcp
+
+if netstat -a 2>&1 | grep ":$port " | grep -q "^$proto" ; then
+    echo "success: $0: Netbios session service is listening on $port/$proto."
+else
+    echo "error: $0: Netbios session service is not listening on $port/$proto."
+    exit 1
+fi
+
+if /usr/bin/ldapsearch -LLL -h $LDAPHOST -x -b "$BASEDN" 1>/dev/null 2>&1 ; then
+    echo "success: $0: smbadmin account exists in ldap"
+else
+    echo "error: $0: smbadmin account doesnt exists in ldap"
+    exit 1
+fi
+
+exit 0
diff --git a/debian-edu-config/testsuite/syslog b/debian-edu-config/testsuite/syslog
new file mode 100755
index 0000000..f190458
--- /dev/null
+++ b/debian-edu-config/testsuite/syslog
@@ -0,0 +1,63 @@
+#!/bin/sh -e
+#
+# Test if the syslog server is working.
+
+if test -r /etc/skolelinux/config ; then
+    mv /etc/skolelinux/config /etc/debian-edu/config
+fi
+
+if test -r /etc/debian-edu/config ; then
+    . /etc/debian-edu/config
+fi
+
+# Standalone profile currently has no syslog configuration ready
+# and therefore exit gracefully if we are installing one
+if echo $PROFILE | grep -q Standalone ; then
+	exit 0
+fi
+
+# Test if syslog server is reachable
+if ping -c 3 syslog > /dev/null 2>&1 ; then
+    echo "success: $0: Host 'syslog' is pingable."
+else
+    echo "error: $0: Host 'syslog' is not pingable."
+    RESULT=1
+fi
+
+# The Main-server, Standalone and Standalone-Extras should not log to
+# syslog.intern.
+
+if echo "$PROFILE" | grep -q Main-Server ; then
+    if grep -q '^\*.\*.*@syslog' /etc/syslog.conf ; then
+        echo "error: $0: Main-Server is forwarding syslog messages to @syslog"
+    else
+        echo "success: $0: Main-Server is not forwarding syslog messages to @syslog"
+    fi
+fi
+
+
+# Only Main-Server and Thin-Client-Server should accept syslog
+# messages from the net.
+
+if echo "$PROFILE" | grep -q Main-Server ; then
+    enabled=true
+fi
+if echo "$PROFILE" | grep -q Thin-Client-Server ; then
+    enabled=true
+fi
+
+if [ true != "$enabled" ] ; then
+    exit 0
+fi
+
+port=syslog
+proto=udp
+
+if netstat -a 2>&1 | grep ":$port " | grep -q "^$proto"; then
+    echo "success: $0: syslog server is listening on $port/$proto."
+else
+    echo "error: $0: syslog server is not listening on $port/$proto."
+    exit 1
+fi
+
+exit 0
diff --git a/debian-edu-config/testsuite/taskpkgs b/debian-edu-config/testsuite/taskpkgs
new file mode 100755
index 0000000..f312311
--- /dev/null
+++ b/debian-edu-config/testsuite/taskpkgs
@@ -0,0 +1,60 @@
+#!/bin/sh -e
+#
+# Check to make sure the correct profile packages are installed
+
+# Check if a deb package is installed.  Return true if it is, and
+# false if it isn't. (copied from debian-edu-install)
+deb_installed() {
+    RET=$( dpkg -s $1 2>/dev/null | awk '/Status\:/ {print $4}' )
+    if [ "$RET" = "installed" ] ; then
+	true
+    else
+	false
+    fi
+}
+
+check_installed() {
+    if deb_installed "$1" ; then
+	echo "success: $0: Package $1 is installed."
+    else
+	echo "error: $0: Package $1 is not installed!"
+	retval=1
+    fi
+}
+
+if test -r /etc/skolelinux/config ; then
+    mv /etc/skolelinux/config /etc/debian-edu/config
+fi
+
+if test -r /etc/debian-edu/config ; then
+    . /etc/debian-edu/config
+fi
+
+retval=0
+
+check_installed education-common
+
+for value in `echo $PROFILE |sed 's/ /-/g' | sed 's/,-/ /g'`; do
+    case $value in
+	Standalone-Extras|Standaloneextra)
+	    check_installed education-standalone-extras
+	    ;;
+	Standalone)
+	    check_installed education-standalone
+	    ;;
+	Workstation)
+	    check_installed education-workstation
+	    ;;
+	Thin-Client-Server|LTSP-server)
+	    check_installed education-thin-client-server
+	    ;;
+	Main-Server|Server)
+	    check_installed education-main-server
+	    ;;
+	*)
+	    error "unknown profile '$profile'"
+	    ;;
+    esac
+done
+
+exit $retval
diff --git a/debian-edu-config/testsuite/timezone b/debian-edu-config/testsuite/timezone
new file mode 100755
index 0000000..c188338
--- /dev/null
+++ b/debian-edu-config/testsuite/timezone
@@ -0,0 +1,99 @@
+#!/bin/sh -e
+#
+# Test if the timezone is correct.
+
+if test -r /etc/skolelinux/config ; then
+    mv /etc/skolelinux/config /etc/debian-edu/config
+fi
+
+if test -r /etc/debian-edu/config ; then
+    . /etc/debian-edu/config
+fi
+
+#/etc/localtime is now copied, not symlinked
+#curzone=`readlink /etc/localtime | sed 's%^/usr/share/zoneinfo/%%'`
+curzone=$(cat /etc/timezone)
+
+map_locale_to_timezone() {
+    case "$1" in
+	*_BE*)
+	    localzone="Europe/Brussels"
+	    ;;
+	*_BR)
+	    localzone="America/Sao_Paulo America/Noronha \
+	               America/Belem America/Fortaleza \
+		       America/Recife America/Araguaina \
+		       America/Maceio America/Cuiaba \
+		       America/Porto_Velho America/Boa_Vista \
+		       America/Manaus America/Eirunepe \
+		       America/Rio_Brancor"
+	    ;;
+	*_DE*)
+	    localzone="Europe/Berlin"
+	    ;;
+	*_DK)
+	    localzone="Europe/Copenhagen"
+	    ;;
+	*_ES*)
+	    localzone="Europe/Madrid"
+	    ;;
+	*_FI*)
+	    localzone="Europe/Helsinki"
+	    ;;
+	*_FR*)
+	    localzone="Europe/Paris"
+	    ;;
+	*_IT*)
+	    localzone="Europe/Rome"
+	    ;;
+	*_LV)
+	    localzone="Europe/Riga"
+	    ;;
+	*_MX)
+	    localzone="America/Mexico_City America/Cancun America/Merida \
+	               America/Monterrey America/Mazatlan America/Chihuahua \
+		       America/Hermosillo America/Tijuana"
+	    ;;
+	*_NL*)
+	    localzone="Europe/Amsterdam"
+	    ;;
+	*_NO)
+	    localzone="Europe/Oslo"
+	    ;;
+	*_PL)
+	    localzone="Europe/Warsaw"
+	    ;;
+	*_BR)
+	    localzone="America/Sao_Paulo"
+	    ;;
+	*_SE)
+	    localzone="Europe/Oslo"
+	    ;;
+	*_SV)
+	    localzone="Europe/Stockholm"
+	    ;;
+	*)
+	    # Accept the existing value if the default language is unspecified
+	    localzone="$curzone";
+	    ;;
+    esac
+}
+
+map_locale_to_timezone "$LOCALE"
+
+foundZone=true
+for zone in $localzone; do
+ if test "$curzone" != "$zone"; then
+     foundZone=false;
+ else
+    if diff /etc/localtime /usr/share/zoneinfo/$curzone >/dev/null ; then 
+        echo "success: $0: Time zone is '$curzone'."
+        exit;
+    else
+        echo "error: $0: /etc/localtime is not equal to /usr/share/zoneinfo/$curzone."
+    fi; 
+ fi;    
+done     
+
+echo "error: $0: Time zone is '$curzone', which is not one of ('$localzone')."
+
diff --git a/debian-edu-config/testsuite/webcache b/debian-edu-config/testsuite/webcache
new file mode 100755
index 0000000..8bdf576
--- /dev/null
+++ b/debian-edu-config/testsuite/webcache
@@ -0,0 +1,64 @@
+#!/bin/sh -e
+#
+# Test if the proxy server (squid) works.
+
+if test -r /etc/skolelinux/config ; then
+    mv /etc/skolelinux/config /etc/debian-edu/config
+fi
+
+if test -r /etc/debian-edu/config ; then
+    . /etc/debian-edu/config
+fi
+
+# Only networked profiles use squid
+if echo "$PROFILE" | egrep -q 'Main-Server|Workstation|Thin-Client-Server' ; then
+    :
+else
+    exit 0
+fi
+
+server=webcache
+
+# Test ownership of the squid cache directory
+if test -d /var/spool/squid ; then 
+    SQUIDOWNER=$(find /var/spool/squid -maxdepth 0 -printf %u)
+    if [ "$SQUIDOWNER" = "proxy" ] ;  then 
+        echo "success: $0: SquidOwner is $SQUIDOWNER"
+    else
+        echo "error: $0: SquidOwner is $SQUIDOWNER"
+        RESULT=1
+    fi
+fi
+
+# Test if HTTP proxy cache is reachable
+if ping -c 3 $server > /dev/null 2>&1 ; then
+    echo "success: $0: Host '$server' is pingable."
+else
+    echo "error: $0: Host '$server' is not pingable."
+    RESULT=1
+fi
+
+# Wait for 10 seconds
+HEADOPTS="-t 10"
+
+if echo "$PROFILE" | egrep -q 'Main-Server' ; then
+    if pidof squid > /dev/null ; then
+        echo "success: $0: squid is running."
+    else
+        echo "error: $0: squid is not running."
+        exit 1
+    fi
+fi
+
+# Use the proxy
+http_proxy=http://$server:3128/
+ftp_proxy=$http_proxy
+export http_proxy ftp_proxy
+
+url=http://www.intern/
+
+if /usr/bin/HEAD $HEADOPTS $url > /dev/null 2>&1 ; then
+    echo "success: $0: Valid response from '$url' using proxy '$http_proxy'."
+else
+    echo "error: $0: Unable to connect to '$url' using proxy '$http_proxy'."
+fi
diff --git a/debian-edu-config/testsuite/webserver b/debian-edu-config/testsuite/webserver
new file mode 100755
index 0000000..88f3c47
--- /dev/null
+++ b/debian-edu-config/testsuite/webserver
@@ -0,0 +1,49 @@
+#!/bin/bash -e
+#
+# Test if the web server (apache) works.
+
+if test -r /etc/skolelinux/config ; then
+    mv /etc/skolelinux/config /etc/debian-edu/config
+fi
+
+if test -r /etc/debian-edu/config ; then
+    . /etc/debian-edu/config
+fi
+
+# Only Main-Server profile provide webserver
+if echo "$PROFILE" | grep -q 'Main-Server' ; then
+    :
+else
+    exit 0
+fi
+
+server=www
+
+# Wait for 10 seconds
+HEADOPTS="-t 10"
+
+unset http_proxy || true
+unset ftp_proxy  || true
+
+if pidof apache > /dev/null ; then
+    echo "success: $0: apache is running."
+else
+    if pidof apache2 > /dev/null ; then
+	echo "success: $0: apache2 is running."
+    else
+	echo "error: $0: apache is not running."
+	exit 1
+    fi
+fi
+	    
+if [ ! -x /usr/bin/HEAD ] ; then
+	echo "error: $0: Unable to find /usr/bin/HEAD."
+	exit 1
+else
+    url=http://$server/
+    if HEAD $HEADOPTS $url 2>&1 | grep -q 'Server: Apache' ; then
+	echo "success: $0: Apache is listening on '$url'."
+    else
+	echo "error: $0: Apache is not listening on '$url'."
+    fi
+fi
diff --git a/debian-edu-config/testsuite/xfree86 b/debian-edu-config/testsuite/xfree86
new file mode 100755
index 0000000..5b8f4f6
--- /dev/null
+++ b/debian-edu-config/testsuite/xfree86
@@ -0,0 +1,51 @@
+#!/bin/sh -e
+#
+# Test if the XFree86 server is working.
+
+if test -r /etc/debian-edu/config ; then
+    . /etc/debian-edu/config
+fi
+
+# Standalone Main-Server do not install XFree86 dictionaries
+if [ "$PROFILE" = Main-Server ] ; then
+    exit 0
+fi
+
+# Check if a deb package is installed.  Return true if it is, and
+# false if it isn't.
+deb_installed() {
+    RET=$( dpkg -s $1 2>/dev/null | awk '/Status\:/ {print $4}' )
+    if [ "$RET" = "installed" ] ; then
+        true
+    else
+        false
+    fi
+}
+
+# Only test if xserver-common is installed
+if  deb_installed xserver-common ; then
+    :
+else
+    echo "info: $0: xserver-common is not installed"
+    exit 0
+fi
+
+symlink=/etc/X11/X
+if [ -e $symlink ] ; then
+	linkto=`ls -l $symlink | rev | awk '{ print $1 }' | rev`
+	echo "info: $0: Symlink $symlink points to $linkto"
+else
+	echo "error: $0: no symlink $symlink pointing to X server"
+fi
+
+#filename=/tmp/.X11-unix/X0
+#if netstat -a 2>&1 | grep LISTENING | grep -q "$filename" ; then
+#    echo "success: $0: XFree86 server is listening on $filename."
+#else
+#    # X is not started yet when this is executed during installation.
+#    # Thus only information.
+#    echo "info: $0: XFree86 server is not listening on $filename."
+#    exit 1
+#fi
+
+exit 0
diff --git a/debian-edu-config/testsuite/xfs b/debian-edu-config/testsuite/xfs
new file mode 100755
index 0000000..77ce651
--- /dev/null
+++ b/debian-edu-config/testsuite/xfs
@@ -0,0 +1,52 @@
+#!/bin/sh -e
+#
+# Test if the xfs server is working.
+
+if test -r /etc/debian-edu/config ; then
+    . /etc/debian-edu/config
+fi
+
+# Standalone Main-Server do not install xfs
+if [ "$PROFILE" = Main-Server ] ; then
+    exit 0
+fi
+
+# Check if a deb package is installed.  Return true if it is, and
+# false if it isn't.
+deb_installed() {
+    RET=$( dpkg -s $1 2>/dev/null | awk '/Status\:/ {print $4}' )
+    if [ "$RET" = "installed" ] ; then
+        true
+    else
+        false
+    fi
+}
+
+# Only test if xfs is installed
+if  deb_installed xfs ; then
+    :
+else
+    echo "info: $0: xfs is not installed"
+    exit 0
+fi
+
+if pidof xfs > /dev/null ; then
+    echo "success: $0: xfs is running."
+else
+    echo "error: $0: xfs is not running."
+    exit 1
+fi
+
+if echo "$PROFILE" | egrep -q 'Thin-Client-Server' ; then
+    port=font-service
+    proto=tcp
+
+    if netstat -a 2>&1 | grep ":$port " | grep -q "^$proto" ; then
+        echo "success: $0: xfs server is listening on $port/$proto."
+    else
+        echo "error: $0: xfs server is not listening on $port/$proto."
+        exit 1
+    fi
+fi
+
+exit 0
diff --git a/debian-edu-config/var/www/index.html.de b/debian-edu-config/var/www/index.html.de
new file mode 100644
index 0000000..8640a4a
--- /dev/null
+++ b/debian-edu-config/var/www/index.html.de
@@ -0,0 +1,127 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+<!-- $Id$ -->
+  <title>Willkomen auf «www»: Infoseite der Debian-Edu-Installation</title>
+  <link rev="made" href="mailto:linuxiskolen at skolelinux.no">
+  <link rel="top" href="http://developer.skolelinux.no/">
+  <link rel="alternate" title="Norsk" href="/index.html.no">
+  <link rel="alternate" title="Deutsch" href="/index.html.de">
+  <link rel="alternate" title="English" href="/index.html.en">
+  <link rel="alternate" title="Français" href="/index.html.fr">
+  <link rel="alternate" title="Español" href="/index.html.es">
+    <link rel="alternate" title="Nederlands" href="/index.html.nl">
+  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+  <meta name="Language" content="de">
+  <meta name="Author" content="Ole Aamot, Petter Reinholdtsen, Gaute Hvoslef Kvalnes, Frode Jemtland, Ralf Gesellensetter">
+  <link rel="stylesheet" href="skl-ren_css.css" type="text/css">
+ </head>
+ <body>
+  <div class="hbar">
+  <div class="menu">
+   <h2 class="menu">Debian-edu</h2>
+   <ul>
+    <li><a href="http://www.skolelinux.org/">Webseite<br></a></li>
+    <li><a href="http://developer.skolelinux.no/index.html.en">Entwicklerseiten<br></a></li>
+    <li><a href="http://developer.skolelinux.no/mailinglister.html">Mailinglisten<br></a></li>
+   </ul>
+
+    <h2 class="menu">Lokale Dienste</h2>
+  
+   <ul>
+    <li><a href="https://www:631/">Druckerverwaltung<br></a></li>
+    <li><a href="https://www/nagios2/">Nagios</a></li>
+    <li><a href="/munin/">Munin</a></li>
+    <li><a href="http://127.0.0.1/sitesummary/">Sitesummary</a></li>
+    <li><a href="https://www/lwat">Lwat</a></li>
+   </ul>
+  </div>
+  <div class="body">
+  <div align="left"> 
+   <a href="index.html.en">[English]</a>
+   <a href="index.html.es">[Español]</a>
+   <a href="index.html.fr">[Français]</a>
+   <a href="index.html.no">[Norsk]</a> 
+   <a href="index.html.nl">[Nederlands]</a> 
+  </div>
+
+  <h1><a name="top"><img src="logo-trans.png" alt="Skolelinux"></a></h1>
+
+  <h2>Herzlich willkommen bei Skolelinux</h2>
+  <p><strong>Diese Seite liegt auf dem Hauptserver (Tjener). Sie
+  wird automatisch bei der Installation von Debian-Edu (Skolelinux)
+  angelegt. Als Administrator können Sie diese Seite Ihren eigenen
+  Bedürfnissen anpassen. Bearbeiten Sie dazu die Datei
+  /var/www/index.html.de mit Ihrem Lieblingseditor. <br>
+  </strong></p>
+
+  <p>Auf der rechten Seite finden Sie einige hilfreiche
+  Verknüpfungen, die Ihnen einen Eindruck von den zahlreichen
+  Serverdiensten geben sollen, die Skolelinux im Laufe der Installation
+  automatisch konfiguriert.  </p>
+
+  <ul>
+   <li>Der erste Abschnitt <span style="font-style: italic;">Debian-edu</span>
+    geleitet sie zu weiterführenden Internetseiten von
+    Debian-edu/Skolelinux.</li>
+   <li>Die Verknüpfungen unter <span style="font-style: italic;">Lokale
+    Dienste</span> weisen auf hiesige Serverseiten, die Ihnen bei Ihrer 
+    täglichen Arbeit als Systemadministrator behilflich sein können.  </li>
+   <ul>
+    <li><strong>Druckerverwaltung:</strong> Hier können Sie
+     Drucker einrichten, die netzweit verwendet werden sollen.</li>
+    <li><strong>Nagios:</strong> Hier gelangen Sie auf die
+     Nagios-Seiten. Nach Anmeldung als «nagiosadmin» (Passwort
+     «skolelinux») erhalten Sie zahlreiche Statistiken zum
+     Gesundheitszustand Ihres Servers.</li>
+    <li><strong>Munin:</strong> Dieser Serverdienst sammelt ebenfalls
+     Statistiken zur Performanz Ihres Servers und stellt diese sogar
+     graphisch dar.</li>
+    <li><span style="font-weight: bold;">Webmin:</span> Hier gelangen
+     Sie zu der webbasierten Systemverwaltung. Sie benötigen das
+     Administratorkennwort (root-Rechte) und können u.a. neue Nutzer
+     anlegen.<br>
+    </li>
+<!--<li><strong>Webmin:</strong> Choose this to get to the Webmin
+pages. You have to have root privileges to visit this page. (You can
+add other users here if you want.)</li> -->
+   </ul>
+  </ul>
+
+  <h2>Eigene Webseiten für Schüler und Lehrer im Intranet</h2>
+  All Nutzer im Skolelinux-System haben die Möglichkeit, in Ihrem
+  eigenen Verzeichnis einen Ordner «public_html» anzulegen.
+  Alle Dateien, die hier gespeichert werden, können in die
+  persönliche Webseite eingebunden werden, die systemweit unter der
+  URL http://www/~username/ verfügbar ist. Wenn also die
+  Schülerin Erika Mustermann den Nutzernamen erikam hat, ist ihre
+  Webseite unter  
+  <a href="http://www/%7Ejond/">http://www/~erikam/</a>
+  erreichbar; dabei wird automatisch die Datein index.html in ihrem
+  Verzeichnis public_html geladen.
+
+  <h2>Teilnahme am Beliebtheitswettbewerb (popularity-contest)</h2>
+  <p>Wir bitten Sie eindringlich, dieses Paket zu installieren; auf diese
+  Weise helfen Sie uns bei der Entscheidung, welche Softwarepakete die
+  nächste Version von Skolelinux enthalten sollte. <br>
+  </p>
+
+  <p>Weitere Informationen über Popularity Contest finden Sie unter  
+  <a href="http://skolelinux.de/wiki/PopularityContest">http://skolelinux.de/wiki/PopularityContest</a>
+  </p>
+
+  <p><a href="http://popcon.skolelinux.org/">Die PopCon-Seite
+  von Debian-Edu</a> wird täglich aktualisiert, so dass jeder
+  einsehen kann, welche Softwarepakete an den eingetragenen Rechnern
+  genutzt wird. <br>
+  </p>
+
+  <p>Um an diesem Wettbewerb teilzunehmen, starten Sie das  
+  <a href="http://popcon.skolelinux.org/participate.sh">Debian-Edu
+  Installerscript</a> als root. </p>
+
+  <hr> <address> $Id$ </address>
+  </div>
+  </div>
+ </body>
+</html>
diff --git a/debian-edu-config/var/www/index.html.en b/debian-edu-config/var/www/index.html.en
new file mode 100644
index 0000000..0f422c2
--- /dev/null
+++ b/debian-edu-config/var/www/index.html.en
@@ -0,0 +1,103 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+        "http://www.w3.org/TR/html4/loose.dtd">
+
+<!-- $Id$ -->
+
+<html lang="en">
+  <head>
+    <title>Welcome to «www»: Info page for a debian-edu-installation</title>
+    <link rev="made" href="mailto:linuxiskolen at skolelinux.no">
+    <link rel="top" href="http://developer.skolelinux.no/">
+    <link rel="alternate" title="Norsk" href="index.html.no">
+    <link rel="alternate" title="English" href="index.html.en">
+    <link rel="alternate" title="Deutsch" href="index.html.de">
+    <link rel="alternate" title="Français" href="index.html.fr">
+    <link rel="alternate" title="Español" href="index.html.es">
+    <link rel="alternate" title="Nederlands" href="index.html.nl">
+    <meta http-equiv="Content-Type" content="text/html; charset=utf8">
+    <meta name="Language" content="en">
+    <meta name="Author" content="Ole Aamot, Petter Reinholdtsen, Gaute Hvoslef Kvalnes, Frode Jemtland">
+    <link rel="stylesheet" href="skl-ren_css.css" type="text/css">
+  </head>
+
+  <body>
+
+    <div class="hbar"/>
+
+    <div class="menu">
+      <h2 class="menu">Debian-edu</h2>
+     <ul>
+      <li><a href="http://www.skolelinux.org/">Web page</a></li>
+      <li><a href="http://wiki.debian.org/DebianEdu">Wiki page</a></li>
+      <li><a href="http://wiki.debian.org/DebianEdu/MailingLists">Email lists</a></li>
+      <li><a href="http://popcon.skolelinux.org/">Collected package usage</a></li>
+     </ul>
+
+      <h2 class="menu">Local services</h2>
+
+     <ul>
+      <li><a href="https://www:631/">Printer administration</a></li>
+      <li><a href="https://www/nagios2/">Nagios</a></li>
+      <li><a href="/munin/">Munin</a></li>
+      <li><a href="http://127.0.0.1/sitesummary/">Sitesummary</a></li>
+      <li><a href="https://www/lwat">Lwat</a></li>
+      <li><a href="/debian-edu-doc/en">Documentation</a></li>
+      <li><a href="https://backup/slbackup-php">Backup</a></li>
+     </ul>
+
+
+    </div>
+
+    <div class="body">
+
+    <div align="left">
+      <a href="index.html.de">[Deutsch]</a>
+      <a href="index.html.es">[Español]</a>
+      <a href="index.html.fr">[Français]</a>
+      <a href="index.html.no">[Norsk]</a>
+      <a href="index.html.nl">[Nederlands]</a> 
+    </div>
+
+
+    <h1><a name="top"><img src="logo-trans.png" alt="Skolelinux"></a></h1>
+
+    <h2>Welcome to «www»</h2>
+    <p><strong>If you can see this, it means that the installation of your 
+    debian-edu server was successful. Congratulations, and welcome. To change
+    the content of this page, edit
+    /var/www/index.html.en, in your favorite editor.</strong></p>
+    <p>
+    On the right side for this page you see some links that can be helpful for you in your
+    work, with administrating a debian-edu network.
+    <ul>
+     <li>The links under Debian-edu are links to the Debian-edu and/or Skolelinux pages on the Internet.</li>
+     <li>The links under Local services are links to services running on this server.
+     This is tools that can assist you in your daily work with the Debian-edu solution.
+    </li>
+     <ul>
+      <li><strong>Printer administration:</strong> Choose this to administer your printers.</li>
+      <li><strong>Nagios:</strong> Choose this to get to the Nagios system monitor pages. Standard user name is  
+      «nagiosadmin» and you have to set the password (as root) with «htpasswd /etc/nagios2/htpasswd.users nagiosadmin».</li>
+      <li><strong>Munin:</strong> Choose this to get to the Munin statistic pages.</li>
+      <li><strong>Lwat:</strong> Choose this to get to Lwat. The LDAP admin pages for debian-edu.(You can add other users here if you want.)</li>
+      <li><strong>Documentation:</strong> Choose this to browse the installed documentation</li>
+      <li><strong>Backup:</strong> Choose this to get to the backup system, here you can restore or change the nightly backup</li>
+     </ul>
+    </ul>
+    </p>
+    <h2>Own web pages for the users on the system.</h2>
+    <p>All users on the system, can create a catalog on their home directory with the name 
+    «public_html». Here the users can add their own home pages. The home pages
+    will be available at the address http://www/~username/. If you have a user named
+    Jon Doe, with the user name jond, his web pages will be available at 
+    <a href="http://www/~jond/">http://www/~jond/</a>. If the user don't 
+    exist, or the catalog public_html do not exist, you will get the «Not Found» 
+    error page. If the public_html catalog exists, but it is empty, you will get the 
+    «Permission Denied» error page. To change this, create the index.html file inside
+    the public_html catalog.
+
+
+    <hr>
+    <address>$Id$</address>
+  </body>
+</html>
diff --git a/debian-edu-config/var/www/index.html.es b/debian-edu-config/var/www/index.html.es
new file mode 100644
index 0000000..a532c1f
--- /dev/null
+++ b/debian-edu-config/var/www/index.html.es
@@ -0,0 +1,115 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+        "http://www.w3.org/TR/html4/loose.dtd">
+
+<!-- $Id: index.html.es 4466 2005-09-18 09:31:46Z jemtland-guest $ -->
+
+<html lang="es">
+  <head>
+    <title>Bienvenido a «www»: Página de información sobre su instalación debian-edu</title>
+    <link rev="made" href="mailto:linuxiskolen at skolelinux.no">
+    <link rel="top" href="http://developer.skolelinux.no/">
+    <link rel="alternate" title="Deutsch" href="/index.html.de">
+    <link rel="alternate" title="English" href="/index.html.en">
+    <link rel="alternate" title="Español" href="/index.html.es">
+    <link rel="alternate" title="Français" href="/index.html.fr">
+    <link rel="alternate" title="Norsk" href="/index.html.no">
+    <link rel="alternate" title="Nederlands" href="/index.html.nl">
+    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+    <meta name="Language" content="es">
+    <meta name="Author" content="Ole Aamot, Petter Reinholdtsen, Gaute Hvoslef Kvalnes, Frode Jemtland, Patrice Neff">
+    <link rel="stylesheet" href="skl-ren_css.css" type="text/css">
+  </head>
+
+  <body>
+
+    <div class="hbar"/>
+
+    <div class="menu">
+      <h2 class="menu">Debian-edu</h2>
+     <ul>
+      <li><a href="http://www.skolelinux.org/">Página web</a></li>
+      <li><a href="http://developer.skolelinux.no/">Páginas para desarrolladores</a></li>
+      <li><a href="http://developer.skolelinux.no/mailinglister.html">Listas de correo</a></li>
+     </ul>
+
+      <h2 class="menu">Servicios locales</h2>
+
+     <ul>
+      <li><a href="https://www:631/">Administración de impresoras</a></li>
+      <li><a href="https://www/nagios2/">Nagios</a></li>
+      <li><a href="/munin/">Munin</a></li>
+      <li><a href="http://127.0.0.1/sitesummary/">Sitesummary</a></li>
+      <li><a href="https://www/lwat">Lwat</a></li>
+     </ul>
+
+
+    </div>
+
+    <div class="body">
+
+    <div align="left">
+      <a href="index.html.de">[Deutsch]</a> 
+      <a href="index.html.en">[English]</a>
+      <a href="index.html.fr">[Français]</a>
+      <a href="index.html.no">[Norsk]</a> 
+      <a href="index.html.nl">[Nederlands]</a> 
+    </div>
+
+
+    <h1><a name="top"><img src="logo-trans.png" alt="Skolelinux"></a></h1>
+
+    <h2>Bienvenido a «www»</h2>
+    <p><strong>Si ve esta página, la instalación de su servidor Debian-edu
+    ha sido éxitosa. Felicitaciones y bienvenido.
+    Puede editar el archivo /var/www/index.html.es para cambiar el contenido
+    de esta página.</strong></p>
+    <p>
+    Al lado derecho de esta página hay enlaces útiles para la administración
+    de la red Debian-edu.
+    <ul>
+     <li>Los enlaces bajo Debian-edu, son enlaces a páginas de Debian-edu/Skolelinux en la Internet.</li>
+     <li>Los enlaces bajo servicios locales, son servicios en este servidor.
+     Son utilitarios para ayudarle en su trabajo en el sistema Debian-edu.
+    </li>
+     <ul>
+      <li><strong>Administración de impresoras:</strong> Selecciona eso para administrar sus impresoras.</li>
+      <li><strong>Nagios:</strong> Nagios es un monitoreo del servidor. Aquí puede ver si un servicio del servidor no funciona.
+      Por defecto el usuario es «nagiosadmin» y la contraseña es «skolelinux».
+      <li><strong>Munin:</strong> Selecciona este enlace para visitar las páginas de estadística de Munin.</li>
+      <li><strong>Webmin:</strong> En Webmin puede administrar el sistema Linux. Puede iniciar una
+      sesión con el usuario «root» y su contraseña. (Puede añadir otros usuarios en Webmin si quiere)</li>
+     </ul>
+    </ul>
+    </p>
+    <h2>Páginas para los usuarios</h2>
+    <p>Todos los usuarios en este sistema pueden crear un directorio de nombre
+    «public_html» en su directorio personal para publicar una página web. Este
+    directorio está disponible en la dirección http://www/~nombre/. Por ejemplo
+    si existe el usuario con el nombre Juan Rodríguez y el nombre de usuario juanr, su
+    páginas están disponibles en http://www/~juanr/. Si el usuario o su directorio
+    public_html no existe tendrás el error "404 Not Found".</p>
+
+    <h2>Estadística de popularidad en Debian-edu</h2>
+
+    <p>Por favor instala el paquete popularity-contest que nos permite
+    saber que paquetes están instalados en su sistema Debian-edu. Esta
+    información vamos a usar para saber que paquetes incluir en la próxima
+    versión de Debian-edu.</p>
+    
+    <p>Para aprender más sobre popularity-contest puede visitar
+    <a href="http://developer.skolelinux.no/dokumentasjon/debian-edu-popcon.html">
+    http://developer.skolelinux.no/dokumentasjon/debian-edu-popcon.html</a>.</p>
+
+    <p>La <a href="http://popcon.skolelinux.org/">página web
+    de la estadística de popularidad en Debian-edu</a> se actualiza cada
+    día. Allá todos pueden ver que tipo de software se usa en las máquinas
+    que envían sus informaciones.</p>
+
+    <p>Para participar descarga el
+    <a href="http://popcon.skolelinux.org/participate.sh">script de
+    instalación</a> y ejecutalo como root.</p>
+    
+    <hr>
+    <address>$Id: index.html.es 4466 2005-09-18 09:31:46Z jemtland-guest $</address>
+  </body>
+</html>
diff --git a/debian-edu-config/var/www/index.html.fr b/debian-edu-config/var/www/index.html.fr
new file mode 100644
index 0000000..f27cb65
--- /dev/null
+++ b/debian-edu-config/var/www/index.html.fr
@@ -0,0 +1,105 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+        "http://www.w3.org/TR/html4/loose.dtd">
+
+<!-- $Id: index.html.fr 5505 2006-01-28 15:35:54Z vinci-guest $ -->
+
+<html lang="fr">
+  <head>
+    <title>Bienvenur sur «www»: Page d'information d'une installation de debian-edu</title>
+    <link rev="made" href="mailto:linuxiskolen at skolelinux.no">
+    <link rel="top" href="http://developer.skolelinux.no/">
+    <link rel="alternate" title="Norsk" href="/index.html.no">
+    <link rel="alternate" title="English" href="/index.html.en">
+    <link rel="alternate" title="Deutsch" href="/index.html.de">
+    <link rel="alternate" title="Français" href="/index.html.fr">
+    <link rel="alternate" title="Español" href="/index.html.es">
+    <link rel="alternate" title="Nederlands" href="/index.html.nl">
+    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+    <meta name="Language" content="fr">
+    <meta name="Author" content="Ole Aamot, Petter Reinholdtsen, Gaute Hvoslef Kvalnes, Frode Jemtland">
+    <link rel="stylesheet" href="skl-ren_css.css" type="text/css">
+
+  </head>
+
+  <body>
+
+    <div class="hbar"/>
+
+    <div class="menu">
+      <h2 class="menu">Debian-edu</h2>
+     <ul>
+      <li><a href="http://www.skolelinux.org/">Site Web</a></li>
+      <li><a href="http://developer.skolelinux.no/index.html.en">Page des développeurs (en anglais)</a></li>
+      <li><a href="http://developer.skolelinux.no/mailinglister.html.en">Listes de discussions (en anglais)</a></li>
+     </ul>
+
+      <h2 class="menu">Accès aux services locaux</h2>
+
+     <ul>
+      <li><a href="https://www:631/">Administration des imprimantes</a></li>
+      <li><a href="https://www/nagios2/">Nagios</a></li>
+      <li><a href="/munin/">Munin</a></li>
+      <li><a href="http://127.0.0.1/sitesummary/">Sitesummary</a></li>
+      <li><a href="https://www/lwat">Lwat</a></li>
+     </ul>
+
+
+    </div>
+
+    <div class="body">
+
+    <div align="left">
+      <a href="index.html.de">[Deutsch]</a>
+      <a href="index.html.en">[English]</a>
+      <a href="index.html.es">[Español]</a>
+      <a href="index.html.no">[Norsk]</a>
+      <a href="index.html.nl">[Nederlands]</a> 
+    </div>
+
+
+    <h1><a name="top"><img src="logo-trans.png" alt="Skolelinux"></a></h1>
+
+    <h2>Bienvenue sur «www»</h2>
+    <p><strong>Si vous pouvez voir cette page, cela signifie que votre installation de serveur debian-edu a été effectuée avec succès. Félicitation et bienvenue. Pour changer le contenu de cette page, modifiez le fichier /var/www/index.html.fr avec votre éditeur favoris.</strong></p>
+    <p>
+    Sur la droite de cette page, vous trouverez des liens utiles pour vos tâches d'administration de réseau debian-edu.
+    <ul>
+     <li>Les liens du menu Debian-edu pointent vers les sites Debian-edu et Skolelinux sur Internet.</li>
+     <li>Les liens du menu Service Locaux pointent vers des services tournant sur ce serveur.
+     Ces outils vous assistent dans l'administration quotidienne de votre système Debian-edu.
+    </li>
+     <ul>
+      <li><strong>Administration des imprimantes :</strong> Pour gérer vos imprimantes.</li>
+      <li><strong>Nagios:</strong> Cliquez sur ce lien pour voir les pages de Nagios. Le nom d'utilisateur par défaut est   
+      «nagiosadmin» avec pour mot de passe «skolelinux». (Vous devriez le changer.)</li>
+      <li><strong>Munin:</strong> Cliquez sur ce lien pour voir les statistiques graphiques du système.</li>
+      <li><strong>Webmin:</strong> Cliquez sur ce lien pour accéder à Webmin. Vous devrez disposer du mot de passe root pour accéder à cette partie. (Vous pourrez aussi autoriser d'autres utilisateur si vous le souhaitez.)</li>
+     </ul>
+    </ul>
+    </p>
+    <h2>Sites web des utilisateurs du système.</h2>
+    <p>Chaque utilisateur du système peut se créer un site web dans son répertoire personnel. 
+Il suffit pour cela qu'il crée un dossier «public_html». 
+À cet endroit, il suffit d'y mettre des pages web, qui seront accessible à partir de l'adresse http://www/~nomdutilisateur/. 
+Par exemple, si vous avez un utilisateur nommé Sylvain Martin, ayant pour nom d'utilisateur sylvainm, sa page web sera accessible à l'adresse <a href="http://www/~sylvainm/">http://www/~sylvainm/</a>. 
+Si ce utilisateur n'existe pas, ou si le dossier public_html n'existe pas, vous aurez une page d'erreur «Non trouvée».
+Si le dossier public_html existe mais est vide, vous obtiendrez une page d'erreur «Non autorisé». Pour éviter cela, créez un fichier index.html dans le dossier public_html.
+
+  <h2>Participation au sondage de popularité de Debian-edu</h2>
+
+  <p>Nous vous invitons vivement à installer ce package, qui nous permet de disposer de statistiques sur l'utilisation des paquets installés, de telle sorte que nous sachions lesquels inclure ou non dans la prochaine version de debian-edu.
+
+  <p>Pour plus d'information sur le sondage de popularité de Debian-edu, rendez-vous à l'adresse 
+  <a href="http://developer.skolelinux.no/dokumentasjon/debian-edu-popcon.html">
+  http://developer.skolelinux.no/dokumentasjon/debian-edu-popcon.html</a>
+
+  <p><a href="http://popcon.skolelinux.org/">La page de sondage de popularité de debian-edu</a>
+  est mise à jour quotidiennement, et tout le monde peut voir quels genres de logiciels sont utilisés par les machines l'ayant rapporté.  
+
+  <p>Pour participer, lancez le 
+  <a href="http://popcon.skolelinux.org/participate.sh">script d'installation pour debian-edu</a> en tant que root.
+
+    <hr>
+    <address>$Id: index.html.fr 5505 2006-01-28 15:35:54Z vinci-guest $</address>
+  </body>
+</html>
diff --git a/debian-edu-config/var/www/index.html.nl b/debian-edu-config/var/www/index.html.nl
new file mode 100644
index 0000000..41bc8ba
--- /dev/null
+++ b/debian-edu-config/var/www/index.html.nl
@@ -0,0 +1,118 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+        "http://www.w3.org/TR/html4/loose.dtd">
+
+<!-- $Id: index.html.en 5710 2006-02-04 07:11:38Z pneff-guest $ -->
+
+<html lang="nl">
+  <head>
+    <title>Welkom op «www»: Info pagina van de debian-edu-installatie</title>
+    <link rev="made" href="mailto:linuxiskolen at skolelinux.no">
+    <link rel="top" href="http://developer.skolelinux.no/">
+    <link rel="alternate" title="Norsk" href="/index.html.no">
+    <link rel="alternate" title="English" href="/index.html.en">
+    <link rel="alternate" title="Deutsch" href="/index.html.de">
+    <link rel="alternate" title="Français" href="/index.html.fr">
+    <link rel="alternate" title="Español" href="/index.html.es">
+    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+    <meta name="Language" content="nl">
+    <meta name="Author" content="Ole Aamot, Petter Reinholdtsen, Gaute Hvoslef Kvalnes, Frode Jemtland">
+    <link rel="stylesheet" href="skl-ren_css.css" type="text/css">
+  </head>
+
+  <body>
+
+    <div class="hbar"/>
+
+    <div class="menu">
+      <h2 class="menu">Debian-edu</h2>
+     <ul>
+      <li><a href="http://www.skolelinux.org/">Webpagina</a></li>
+      <li><a href="http://developer.skolelinux.no/index.html.en">Ontwikkelaars Pagina's</a></li>
+      <li><a href="http://developer.skolelinux.no/mailinglister.html">E-maillijsten</a></li>
+     </ul>
+
+      <h2 class="menu">Lokale netwerkdiensten</h2>
+
+     <ul>
+      <li><a href="https://www:631/">Printer-administratie</a></li>
+      <li><a href="https://www/nagios2/">Nagios</a></li>
+      <li><a href="/munin/">Munin</a></li>
+      <li><a href="http://127.0.0.1/sitesummary/">Sitesummary</a></li>
+      <li><a href="https://www/lwat">Lwat</a></li>
+     </ul>
+
+
+    </div>
+
+    <div class="body">
+
+    <div align="left">
+      <a href="index.html.en">[English]</a>
+      <a href="index.html.de">[Deutsch]</a>
+      <a href="index.html.es">[Español]</a>
+      <a href="index.html.fr">[Français]</a>
+      <a href="index.html.no">[Norsk]</a>
+    </div>
+
+
+    <h1><a name="top"><img src="logo-trans.png" alt="Skolelinux"></a></h1>
+
+    <h2>Welkom op «www»</h2>
+    <p><strong>Wanneer u dit leest kunt u ervan uit gaan dat de installatie van uw Debian-Edu server
+    gelukt is. Proficiat en welkom. Om de inhoud van deze pagina te wijzigen dient u het bestand 
+    /var/www/index.html.nl aan te passen in uw favoriete tekst-editor. 
+    </strong></p>
+    <p>
+    Aan de rechterkant van deze pagina ziet u enkele links die nuttig kunnen zijn tijdens het beheer
+    van het Debian-Edu netwerk.
+    <ul>
+     <li>De links onder 'Debian-edu' zijn links naar Debian-edu en/of Skolelinux pagina's op het Internet.</li>
+     <li>De links onder 'Lokale Netwerkdiensten' zijn links naar administratiepagina's van diensten
+     die deze server aanbiedt. Dit zijn hulpmiddelen die u helpen in het dagelijks beheer van uw 
+     Debian-Edu netwerk.
+     </li>
+     <ul>
+      <li><strong>Printer-administratie:</strong> Kies dit om printerinstellingen te beheren.</li>
+      <li><strong>Nagios:</strong> Dit zijn de Nagios-pagina's. De standaard gebruikersnaam is  
+      «nagiosadmin» met wachtwoord «skolelinux». (Dit dient u aan te passen!)</li>
+      <li><strong>Munin:</strong> Dit leidt naar de Munin-pagina's met statistieken.</li>
+      <li><strong>Webmin:</strong> Dit leidt naar de Webmin-pagina's. U dient 'root'-rechten te
+      hebben om deze pagina te kunnen gebruiken (u kunt andere gebruikers indien gewenst wel 
+      beheerdersrechten geven).</li>
+     </ul>
+    </ul>
+    </p>
+    <h2>Eigen webpagina's voor gebruikers op het systeem.</h2>
+    <p>Alle gebruikers op het systeem kunnen een eigen webpagina aanmaken. Hiertoe dient enkel een
+    submap «public_html» aangemaakt te worden in de thuismap van de gebruiker. 
+    Webpagina's die in deze map geplaatst worden zijn dan beschikbaar op het adres
+    http://www/~gebruikersnaam/. Als u dus een gebruiker 'Jon Doe' heeft met gebruikersnaam
+    'jond', zijn door hem gemaakte webpagina's dus te vinden op
+    <a href="http://www/~jond/">http://www/~jond/</a>. Wanneer de gebruiker, 
+    of de submap public_html niet bestaan krijgt u de «Not Found» foutpagina. 
+    Wanneer de submap public_html wel bestaat maar leeg is, krijgt u de 
+    «Permission Denied» foutpagina te zien. Om dit te voorkomen dient u een index.html
+    bestand aan te maken in de public_html map.
+
+  <h2>Deelnemen aan de Debian-Edu-populariteitstest (popularity-contest-pakket)</h2>
+
+  <p>We vragen u om dit pakket te installeren, hierdoor krijgen we een beter 
+  overzicht van welke pakketten standaard deel dienen uit te maken van de volgende
+  Debian-Edu versie.
+
+  <p>Meer informatie over popularity-contest vindt u op 
+  <a href="http://developer.skolelinux.no/dokumentasjon/debian-edu-popcon.html">
+  http://developer.skolelinux.no/dokumentasjon/debian-edu-popcon.html</a>
+
+  <p><a href="http://popcon.skolelinux.org/">De Debian-Edu populariteitsteset-webpagina
+  </a> wordt dagelijks bijgewerkt, en iedereen kan zien welke software gebruikt wordt op machines
+  die hieraan deelnemen.
+
+  <p>Om deel te nemen dient u het
+  <a href="http://popcon.skolelinux.org/participate.sh">Debian-Edu installatiescript</a>
+  uit te voeren als de gebruiker 'root'.  
+
+    <hr>
+    <address>$Id: index.html.en 5710 2006-02-04 07:11:38Z pneff-guest $</address>
+  </body>
+</html>
diff --git a/debian-edu-config/var/www/index.html.no b/debian-edu-config/var/www/index.html.no
new file mode 100644
index 0000000..5c4f424
--- /dev/null
+++ b/debian-edu-config/var/www/index.html.no
@@ -0,0 +1,101 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+        "http://www.w3.org/TR/html4/loose.dtd">
+
+<!-- $Id$ -->
+
+<html lang="no">
+  <head>
+    <title>Velkommen til «www»: Informasjonsside for en skolelinux-installasjon</title>
+    <link rev="made" href="mailto:linuxiskolen at skolelinux.no">
+    <link rel="top" href="http://developer.skolelinux.no/">
+    <link rel="alternate" title="Norsk" href="/index.html.nb">
+    <link rel="alternate" title="English" href="/index.html.en">
+    <link rel="alternate" title="Deutsch" href="/index.html.de">
+    <link rel="alternate" title="Français" href="/index.html.fr">
+    <link rel="alternate" title="Español" href="/index.html.es">
+    <link rel="alternate" title="Nederlands" href="/index.html.nl">
+    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+    <meta name="Language" content="no">
+    <meta name="Author" content="Ole Aamot, Petter Reinholdtsen, Gaute Hvoslef Kvalnes, Frode Jemtland, Axel Bojer.">
+    <link rel="stylesheet" href="skl-ren_css.css" type="text/css">
+  </head>
+
+  <body>
+
+    <div class="hbar"/>
+
+    <div class="menu">
+      <h2 class="menu">Skolelinux</h2>
+     <ul>
+      <li><a href="http://www.skolelinux.org/no/">Nettsider</a></li>
+      <li><a href="http://developer.skolelinux.no/index.html.nb">Utviklersider</a></li>
+      <li><a href="http://developer.skolelinux.no/mailinglister.html">E-postlister</a></li>
+      <li><a href="http://popcon.skolelinux.org/">Innsamlet pakkebruk</a></li> 
+     </ul>
+
+      <h2 class="menu">Lokale tjenester</h2>
+
+     <ul>
+      <li><a href="https://www:631/">Skriveradministrasjon</a></li>
+      <li><a href="https://www/nagios2/">Overvåkning</a></li>
+      <li><a href="/munin/">Statistikk</a></li>
+      <li><a href="http://127.0.0.1/sitesummary/">Sitesummary</a></li>
+      <li><a href="https://www/lwat">Lwat</a></li>
+      <li><a href="/debian-edu-doc/en">Dokumentasjon</a></li>
+      <li><a href="https://backup/slbackup-php">Sikkerhetskopiering</a></li>
+     </ul>
+
+
+    </div>
+
+    <div class="body">
+
+    <div align="left">
+      <a href="index.html.de">[Deutsch]</a>
+      <a href="index.html.en">[English]</a>
+      <a href="index.html.es">[Español]</a>
+      <a href="index.html.fr">[Français]</a>
+      <a href="index.html.nl">[Nederlands]</a> 
+    </div>
+
+      
+    <h1><a name="top"><img src="logo-trans.png" alt="Skolelinux"></a></h1>
+
+    <h2>Velkommen til «www»</h2>
+    <p><strong>At du ser denne siden tyder på at du har installert et nytt 
+    skolelinuxsystem; gratulerer, og velkommen. For å endre innhold på 
+    denne siden, kan du redigere fila /var/www/index.html.no, i det skriveprogrammet du foretrekker.
+    </strong></p>
+    <p>Til høyre på denne siden ser du noen lenker som kan hjelpe deg videre 
+    i din jobb med å administrere et skolelinux-nett.
+    <ul>
+     <li>Lenkene under Skolelinux er lenker til Skolelinuxprosjektets sider på nettet. </li>
+     <li>Lenkene under Lokale tjenester, er lenker til tjenester på denne wwwen.
+     Dette er verktøy som kan bistå deg som driftsansvarlig til lettere å
+     kunne gjøre din jobb.</li>
+     <ul>
+      <li><strong>Skriveradministrasjon:</strong> Velg dette for å administrere skriverne på wwwen.</li>
+      <li><strong>Overvåkning:</strong> Velg dette for å få tilgang til Nagios-sidene. Standard 
+      brukernavn er «nagiosadmin» med passordet «skolelinux».</li>
+      <li><strong>Statistikk:</strong> Velg dette for å se statistikksidene som er laget av Munin.</li>
+      <li><strong>Administrasjon:</strong> Velg dette for å få tilgang til brukergrensesnittet til Webmin. 
+      Du kan bare logge deg inn som root.</li>
+     </ul>
+    </ul>
+    </p>
+    <h2>Egne nettsider for brukerne på systemet.</h2>
+    <p>Alle brukere du lager på systemet kan lage en mappe på sitt 
+    hjemmeområde som heter «public_html». Her kan brukeren legge inn sin egen hjemmeside.
+    Hjemmesiden vil være tilgjengelig på adressen http://www/~brukernavn/.
+    Hvis du altså har en bruker som heter Ola Normann, med brukernavnet olan, 
+    vil hans hjemmeside være tilgjengelig på <a href="http://www/~olan/">
+    http://www/~olan/</a>. Hvis vedkommende ikke eksisterer, eller ikke har 
+    laget mappa public_html på sitt hjemmeområdet, vil du få
+    feilmeldinga «Not Found». Hvis public_html eksisterer, men er tom, vil du få
+    feilmeldinga «Permission Denied». For å endre dette, lag fila index.html i 
+    denne mappa.
+
+    <hr>
+    <address>$Id$</address>
+  </body>
+</html>
diff --git a/debian-edu-config/var/www/logo-trans.png b/debian-edu-config/var/www/logo-trans.png
new file mode 100644
index 0000000..42b7a74
Binary files /dev/null and b/debian-edu-config/var/www/logo-trans.png differ
diff --git a/debian-edu-config/var/www/skl-ren_css.css b/debian-edu-config/var/www/skl-ren_css.css
new file mode 100644
index 0000000..8b72d19
--- /dev/null
+++ b/debian-edu-config/var/www/skl-ren_css.css
@@ -0,0 +1,69 @@
+body    {
+        color:  black;
+        background:     #F5F5E5;
+	padding: 1ex;
+	background-position: top right;
+        }
+
+h1	{
+	text-align: center;
+	font-family: serif;
+	font-variant: small-caps;
+	letter-spacing: 0.3em;
+	font-size: 3em;
+	}
+
+h2	{
+	color:	#881133;
+	}
+
+h2.menu	{
+	color:	#6699BB;
+	background: #E5FAFF;
+	text-align: right;
+	font-family: serif;
+	font-size: 1.5em;
+	font-variant: small-caps;
+	padding-right: 1ex;
+	}
+
+body>div.hbar	{
+	background:	#991111;
+	width: 100%;
+	height: 1ex;
+	}
+
+div.body	{
+	margin-top: 1ex;
+	padding-left: 1ex;
+	padding-right: 1em;
+	padding-top: 1em;
+	padding-bottom: 1ex;
+	margin-right: 26ex;
+	}
+
+div.menu	{
+	background: 	#CCEEF5;
+	margin-top: 	1ex;
+	padding: 	1px 5px 2em;
+	line-height: 	1.3;
+	float: 	right;
+	width: 	28ex;
+	}
+
+a:link	{
+	font-weight: bold;
+	}
+
+a:active {
+	text-decoration: overline;
+	}
+
+a:visited {
+	font-weight: bold;
+	}
+
+ at media print {
+	div.menu {visibility: hidden}
+	div.body {margin-right: 2ex}
+	}
diff --git a/debian-edu-config/var/www/wpad.dat b/debian-edu-config/var/www/wpad.dat
new file mode 100644
index 0000000..dccc492
--- /dev/null
+++ b/debian-edu-config/var/www/wpad.dat
@@ -0,0 +1,8 @@
+function FindProxyForURL(url, host)
+    {
+        if (isPlainHostName(host) ||
+            dnsDomainIs(host, ".intern"))
+            return "DIRECT";
+        else
+            return "PROXY webcache:3128; DIRECT";
+    }

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-edu/debian-edu-config.git



More information about the debian-edu-commits mailing list