#!/bin/bash
# lmz-settings-policies
#  Set UDM policies according to definition
#
# Depends: UDM
#
# Copyright (C) 2013-2018 Univention GmbH
#
# http://www.univention.de/
#
# All rights reserved.
#
# The source code of this program is made available
# under the terms of the GNU Affero General Public License version 3
# (GNU AGPL V3) as published by the Free Software Foundation.
#
# Binary versions of this program provided by Univention to you as
# well as other copyrighted, protected or trademarked materials like
# Logos, graphics, fonts, specific documentations and configurations,
# cryptographic keys etc. are subject to a license agreement between
# you and Univention and not subject to the GNU AGPL V3.
#
# In the case you use this program under the terms of the GNU AGPL V3,
# the program is provided 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 Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public
# License with the Debian GNU/Linux or Univention distribution in file
# /usr/share/common-licenses/AGPL-3; if not, see
# <http://www.gnu.org/licenses/>.

set -u
set -e

# initialize package release policy version information
ucr set lmz/package-release-policy-version?0

eval "$(ucr shell ldap/base domainname \
    lmz/package-release-policy-version \
    repository/online/component/lmz/username \
    version/version \
    )"

msg () { # {{{1
	echo -e "$(date): $@"
} # }}}1

dn_exists () { # {{{1
	univention-ldapsearch -s base -b "${1}" dn -LLL 2>/dev/null | grep -q '^dn:'
}

modify_object () { # {{{1
	# $1: Object type
	# $2: Object DN
	# $3..: Settings
	local dn name pos_dn udm_type

	# $1
	udm_type="${1}"

	# $2
	dn="${2}"
	name=$(echo "${dn}"|sed -n -e 's/^[^=]*=//;s/,.*//p')
	pos_dn=$(echo "${dn}"|sed -n -e 's/^[^,]*,//p')
	shift 2

	if dn_exists "${dn}"; then
		msg "Modifying object ${name} (type: ${udm_type})"
		udm "${udm_type}" modify --dn "${dn}" "${@}"
	else
		msg "Creating object ${name} (type: ${udm_type})"
		udm "${udm_type}" create --position "${pos_dn}" --set name="${name}" "${@}"
	fi
} # }}}1

connect_policy () { # {{{1
	# $1: Policy DN
	# $3..: tuple (UDM type, LDAP object DN) that will be connected to the policy
	local dn name pos_dn udm_type

	# $1
	dn="${1}"
	name=$(echo "${dn}"|sed -n -e 's/^[^=]*=//;s/,.*//p')
	shift 1

	while [ $# -ge 2 ]; do
		udm_type="${1}"
		object_dn="${2}"
		shift 2
		msg "Connecting policy ${name} to DN: ${object_dn}"
		udm "${udm_type}" modify --dn "${object_dn}" --policy-reference "${dn}"
	done
} # }}}1

# Start execution

# default-central-settings {{{1
dn_default_central_settings="cn=default-central-settings,cn=config-registry,cn=policies,${ldap_base}"
udm policies/registry modify --dn "${dn_default_central_settings}" --remove registry || true   $(: Workaround for changed behaviour from UCS 3.2 to 4.1: --append will not work if value already exists, so we --remove the old registry policy )
modify_object policies/registry "${dn_default_central_settings}" \
	--append 'registry=cron/renew-aliases/command "/usr/bin/newaliases"' \
	--append 'registry=cron/renew-aliases/description "Erneutes Einlesen der E-Mail-Aliases aus /etc/aliases"' \
	--append 'registry=cron/renew-aliases/time "0 6 * * *"' \
	--append 'registry=cups/errorpolicy "abort-job"'                                   $(: CUPS abort job anstatt den Drucker zu stoppen - Reduktion Supportaufwand, Issue 1080) \
	--append 'registry=dhcpd/options/wpad/252 "text"'                                  $(: aktiviert die Prüfung der automatischen Proxykonfiguration per DHCP) \
	--append 'registry=directory/manager/samba3/legacy "yes"'                          $(: UCS Bug 33677 on memberservers) \
	--append 'registry=directory/manager/web/modules/computers/domaincontroller_backup/properties/name/may_change "0"'  $(: Deaktiviere Modifikation von bestimmten Attributen, Ticket 573) \
	--append 'registry=directory/manager/web/modules/computers/domaincontroller_master/properties/name/may_change "0"'  $(: Deaktiviere Modifikation von bestimmten Attributen, Ticket 573) \
	--append 'registry=directory/manager/web/modules/computers/domaincontroller_slave/properties/name/may_change "0"'   $(: Deaktiviere Modifikation von bestimmten Attributen, Ticket 573) \
	--append 'registry=directory/manager/web/modules/computers/ipmanagedclient/properties/name/may_change "0"'          $(: Deaktiviere Modifikation von bestimmten Attributen, Ticket 573) \
	--append 'registry=directory/manager/web/modules/computers/linux/properties/name/may_change "0"'                    $(: Deaktiviere Modifikation von bestimmten Attributen, Ticket 573) \
	--append 'registry=directory/manager/web/modules/computers/macos/properties/name/may_change "0"'                    $(: Deaktiviere Modifikation von bestimmten Attributen, Ticket 573) \
	--append 'registry=directory/manager/web/modules/computers/memberserver/properties/name/may_change "0"'             $(: Deaktiviere Modifikation von bestimmten Attributen, Ticket 573) \
	--append 'registry=directory/manager/web/modules/computers/ubuntu/properties/name/may_change "0"'                   $(: Deaktiviere Modifikation von bestimmten Attributen, Ticket 573) \
	--append 'registry=directory/manager/web/modules/computers/ucc/properties/name/may_change "0"'                      $(: Deaktiviere Modifikation von bestimmten Attributen, Ticket 573) \
	--append 'registry=directory/manager/web/modules/computers/windows/properties/name/may_change "0"'                  $(: Deaktiviere Modifikation von bestimmten Attributen, Ticket 573) \
	--append 'registry=directory/manager/web/modules/computers/windows_domaincontroller/properties/name/may_change "0"' $(: Deaktiviere Modifikation von bestimmten Attributen, Ticket 573) \
	--append 'registry=directory/manager/web/modules/groups/group/properties/name/may_change "0"'                       $(: Deaktiviere Modifikation von bestimmten Attributen, Ticket 573) \
	--append 'registry=directory/manager/web/modules/shares/share/properties/name/may_change "0"'                       $(: Deaktiviere Modifikation von bestimmten Attributen, Ticket 573) \
	--append 'registry=directory/manager/web/modules/shares/share/properties/path/may_change "0"'                       $(: Deaktiviere Modifikation von bestimmten Attributen, Ticket 573) \
	--append 'registry=directory/manager/web/modules/users/user/properties/username/may_change "0"'                     $(: Deaktiviere Modifikation von bestimmten Attributen, Ticket 573) \
	--append 'registry=interfaces/eth0/route/10.1.1.0 "net 10.1.1.0/24 gw 10.1.0.10"'  $(: Route zum sicheren Lehrernetz) \
	--append 'registry=interfaces/eth0/route/10.1.2.0 "net 10.1.2.0/24 gw 10.1.0.10"'  $(: Route zum kleinen Schülernetz) \
	--append 'registry=interfaces/eth0/route/10.2.0.0 "net 10.2.0.0/16 gw 10.1.0.10"'  $(: Route zum großen Schülernetz) \
	--append 'registry=ldap/acl/user/password/change "yes"'                            $(: Erlaube Passwortänderungen für Benutzer) \
	--append 'registry=logrotate/rotate "daily"'                                       $(: Tägliche Logrotation über 30 Tage) \
	--append 'registry=logrotate/rotate/count "30"'                                    $(: Tägliche Logrotation über 30 Tage) \
	--append 'registry=logrotate/syslog/rotate/count "30"'                             $(: Tägliche Logrotation über 30 Tage) \
	--append 'registry=mail/alias/root "netzwerkberater@paedml-linux.lokal"'           $(: Der Netzwerkberater ist Empfänger für alle Mails) \
	--append 'registry=nss/group/cachefile/check_member "no"'                          $(: Prüfung von Gruppenmitgliedschaften im Gruppencache wird aus Performancegründen deaktiviert, Issue 1117) \
	--append 'registry=printer/assignment/removeall "yes"'                             $(: Entferne alle Drucker beim ausführen des Logon Scripts) \
	--append 'registry=quota/userdefault "no"'                                         $(: Deaktiviere Benutzerquota-Auswergund UCS Bug 28729) \
	--append 'registry=repository/app_center/server "http://paedml-linux-apps.support-netz.de"' $(: Appcenter) \
	--append 'registry=repository/online/server "paedml-linux.support-netz.de"'        $(: Verwendung eines eigenen Repository-Servers) \
	--append 'registry=samba/homedirletter "H"'                                        $(: Heimatverzeichnis wird über H eingebunden) \
	--append 'registry=samba/shares/readlist "pcpatch"'                                $(: erteilt dem opsi-Benutzer pcpatch nur Leserechte / keine Schreibrechte auf Freigaben) \
	--append 'registry=squid/basicauth/children "40"'                                  $(: Squid für grosse Umbebungen konfiguriert, Issue 14) \
	--append 'registry=squid/krb5auth "yes"'                                           $(: Umstellung auf Kerberos, Issue 690) \
	--append 'registry=squid/krb5auth/children "40"'                                   $(: Umstellung auf Kerberos, Issue 690) \
	--append 'registry=squid/krb5auth/keepalive "no"'                                  $(: HTTP Login Popup funktioniert sonst nicht korrekt auf nicht gejointen Maschinen Issue 11207) \
	--append 'registry=squid/ntlmauth "no"'                                            $(: Umstellung auf Kerberos, Issue 690) \
	--append 'registry=squid/ntlmauth/children "40"'                                   $(: Squid für grosse Umbebungen konfiguriert, Issue 14) \
	--append 'registry=timeserver "10.1.0.11"'                                         $(: setzt Timeserver auf die Firewall) \
	--append 'registry=ucsschool/import/generate/share/marktplatz "no"'                $(: Generierung des Marktplatz deaktiviert) \
	--append 'registry=ucsschool/import/set/homedrive "H:"'                            $(: Heimatverzeichnis wird über H eingebunden) \
	--append 'registry=ucsschool/import/set/netlogon/script/path "ucs-school-logon.vbs"' $(: Die Datei wird von ucs-school-netlogon.py generiert und ruft implizit programme.bat zum Mapping des Programme-Shares K: auf) \
	--append 'registry=ucsschool/netlogon/PDFDrucker/script "pdfprinter.vbs"'          $(: Connect PDF printer) \
	--append 'registry=ucsschool/netlogon/Programme/script "programme.bat"'            $(: Mapping des Programme-Shares K:) \
	--append 'registry=ucsschool/netlogon/univention-printer-assignment/script "druckerverbinden.bat"' $(: Umstellung auf eigenes Skript anstatt univention-printer-assignment.vbs) \
	--append 'registry=ucsschool/netlogon/univention-printer-assignment/script/priority "9"' $(: Run printer logon script earlier than pdfprinter.vbs Bug 33955) \
	--append 'registry=ucsschool/userlogon/classshareletter "T"'                       $(: Setzt Klassen-Letter auf T) \
	--append 'registry=ucsschool/userlogon/shares_foldername "Freigaben"'              $(: Setzt Share-Verzeichnisname auf Freigaben) \
	--append 'registry=ucsschool/userlogon/shares_folder_icon "%SystemRoot%\system32\imageres.dll,176"'              $(: Icon Freigaben auf Desktop) \
	--append 'registry=ucsschool/userlogon/other_links_icon "%SystemRoot%\system32\imageres.dll,169"'                $(: Icon andere Freigaben) \
	--append 'registry=ucsschool/userlogon/my_files_link_icon "%SystemRoot%\system32\imageres.dll,117"'              $(: Icon von Meine Dateien) \
	--append 'registry=ucsschool/userlogon/disabled_share_links/server "aproflehrer-desktop,aprofschueler-desktop"'  $(: aprof-Freigaben entfernen) \
	--append 'registry=ucsschool/userlogon/create_shortcuts "yes"'                     $(: Verzeichnis mit Links anlegen) \
	--append 'registry=ucsschool/userlogon/create_myfiles_link "yes"'                  $(: Link zur Meine Dokumente anlegen) \
	--append 'registry=umc/http/session/timeout "3600"'                                $(: Timeout auf 1 Stunde gesetzt) \
	--append 'registry=windows/wins-server "server.paedml-linux.lokal"'                $(: WINS-Server muss explizit gesetzt sein, sonst funktioniert OPSI nicht richtig)

connect_policy "${dn_default_central_settings}" \
	container/cn cn=computers,"${ldap_base}"

# ucr-dc-master {{{1
dn_ucr_dc_master="cn=ucr-dc-master,cn=config-registry,cn=policies,${ldap_base}"
udm policies/registry modify --dn "${dn_ucr_dc_master}" --remove registry || true       $(: Workaround for changed behaviour from UCS 3.2 to 4.1: --append will not work if value already exists, so we --remove thw old registry policy )
modify_object policies/registry "${dn_ucr_dc_master}" \
	--append 'registry=cron/delete_desktopini/command "find /home/ /home/lehrer/ /home/schueler/ -maxdepth 2 -type f -iname desktop.ini -exec rm -f {} \;"' \
	--append 'registry=cron/delete_desktopini/description "Löschen der desktop.ini, um den Verzeichnisnamen Eigene Dateien zu verhindern"' \
	--append 'registry=cron/delete_desktopini/time "*/15 * * * *"' \
	--append 'registry=auth/nagios/group/admins-schule "yes"'                           $(: Anmeldung von Schuladministratoren am Nagios erlauben) \
	--append 'registry=horde/php/apache/cfg/upload_max_filesize "10M"'                  $(: Erhöht den Upload von Mailanhängen auf 10 Megabyte) \
	--append 'registry=mail/cyrus/mailbox/delete "yes"'                                 $(: Lösche Mailboxen beim Löschen eines Benutzers, siehe Ticket 646) \
	--append 'registry=opsi/http/server "backup.paedml-linux.lokal"'                    $(: Define OPSI config server - this could be replaced by OPSI service annotations) \
	--append 'registry=samba/serverstring "paedML Linux"'                               $(: Änderung des Samba Server Strings, siehe Ticket 424) \
	--append 'registry=ucsschool/helpdesk/recipient "root@localhost"'                   $(: Leite Helpdeskmails an root weiter) \
	--append 'registry=ucsschool/wizards/schoolwizards/users/roles/disabled "staff,teachersAndStaff"' $(: Entferne staff und teachersAndStaff aus dem Import-Wizard) \
	--append 'registry=ucsschool/wizards/schoolwizards/workaround/admin-connection "yes"' $(: Erlaube LDAP-Zugriff für den Benutzer Netzwerkberater) \
	--append 'registry=ucsschool/exam/cron/cleanup-master "30 3 * * *"'                 $(: Überbleibsel des Klassenarbeitsmodus nachts automatisiert aufräumen) \
	--append 'registry=ucsschool/exam/user/ldap/blacklist "mail|mailPrimaryAddress|mailAlternativeAddress|sambaProfilePath|ucsschoolSourceUID|ucsschoolRecordUID"' $(: Benutzer-Attribut sambaProfilePath zusätzlich zum default bei exam Benutzern ausschließen) \
	--append 'registry=ucsschool/exam/group/ldap/blacklist/regex "cn=schueler-schule,.*"' $(: Gruppe schueler-schule bei exam Benutzern ausschließen) \
	--append 'registry=umc/server/upload/max "524288"'                                  $(: BUG Ticket 435, 512 MB UMC Upload Limit) \
	--append 'registry=samba/spoolss/architecture "Windows x64"'                        $(: Samba 4 spoolsserver architecture parameter. siehe Ticket 739) \
	--append 'registry=squid/rewrite/children "40"'                                     $(: Erhöht die maximale Anzahl von URL rewrite children auf 40) \
	--append 'registry="saml/idp/authsource "univention-negotiate"'                     $(: Kerberos Authentifizierung am Identity Provider zuzulassen)

connect_policy "${dn_ucr_dc_master}" \
	computers/domaincontroller_master cn=server,cn=dc,cn=computers,"${ldap_base}"

# ucr-dc-backup {{{1
dn_ucr_dc_backup="cn=ucr-dc-backup,cn=config-registry,cn=policies,${ldap_base}"
udm policies/registry modify --dn "${dn_ucr_dc_backup}" --remove registry || true        $(: Workaround for changed behaviour from UCS 3.2 to 4.1: --append will not work if value already exists, so we --remove the old registry policy )
modify_object policies/registry "${dn_ucr_dc_backup}" \
	--append 'registry=cron/opsi-backup/command "jitter 4800 /usr/bin/opsi-backup create /var/backups > /dev/null 2>&1"' \
	--append 'registry=cron/opsi-backup/description "Sichere OPSI-Konfiguration taeglich"' \
	--append 'registry=cron/opsi-backup/time "0 18 * * *"' \
	--append 'registry=cron/opsi-clean-repository/command "jitter 4800 /bin/rm /var/lib/opsi/repository/* > /dev/null 2>&1"' \
	--append 'registry=cron/opsi-clean-repository/description "Loesche lokales OPSI-Repository monatlich"' \
	--append 'registry=cron/opsi-clean-repository/time "15 18 1 * *"' \
	--append 'registry=cron/opsi-product-updater/command "jitter 4800 /usr/bin/timeout-wrapper > /dev/null"' \
	--append 'registry=cron/opsi-product-updater/description "Aktualisiere OPSI-Produktpakete taeglich"' \
	--append 'registry=cron/opsi-product-updater/time "0 22 * * *"' \
	--append 'registry=cron/opsi-directory-connector/command "/usr/bin/opsidirectoryconnector --config /etc/opsi/opsidirectoryconnector.conf > /dev/null 2>&1"' \
	--append 'registry=cron/opsi-directory-connector/description "opsi directory connector stündlich ausführen"' \
	--append 'registry=cron/opsi-directory-connector/time "*/15 * * * *"' \
	--append 'registry=dhcpd/autostart "no"'                                            $(: univention-dhcp wird durch OPSI installiert, da aber kein lokales LDAP vorhanden ist, wird der Dienst deaktiviert) \
	--append 'registry=opsi/product-download/notification/active "true"'                $(: Sende Benachrichtigungen beim Download vom Paketen) \
	--append 'registry=samba/serverstring "paedML Linux"'                               $(: Änderung des Samba Server Strings, siehe Ticket 424) \
	--append 'registry=samba/share/home "no"'                                           $(: Deactivate Samba Home Share, Issue 614)

connect_policy "${dn_ucr_dc_backup}" \
	computers/memberserver cn=backup,cn=memberserver,cn=computers,"${ldap_base}"

# package-maintenance {{{1
dn_package_maintenance="cn=package-maintenance,cn=installation,cn=update,cn=policies,${ldap_base}"
modify_object policies/maintenance "${dn_package_maintenance}" \
	--set cron=1 \
	--set minute=5 \
	--set hour=17 \
	--set weekday=Friday

modify_object policies/maintenance "${dn_package_maintenance}" \
	--remove month=January \
	--remove month=February \
	--remove month=March \
	--remove month=April \
	--remove month=May \
	--remove month=June \
	--remove month=July \
	--remove month=August \
	--remove month=September \
	--remove month=October \
	--remove month=November \
	--remove month=December \
	--remove day=1 \
	--remove day=2 \
	--remove day=3 \
	--remove day=4 \
	--remove day=5 \
	--remove day=6 \
	--remove day=7 \
	--remove day=8 \
	--remove day=9 \
	--remove day=10 \
	--remove day=11 \
	--remove day=12 \
	--remove day=13 \
	--remove day=14 \
	--remove day=15 \
	--remove day=16 \
	--remove day=17 \
	--remove day=18 \
	--remove day=19 \
	--remove day=20 \
	--remove day=21 \
	--remove day=22 \
	--remove day=23 \
	--remove day=24 \
	--remove day=25 \
	--remove day=26 \
	--remove day=27 \
	--remove day=28 \
	--remove day=29 \
	--remove day=30 \
	--remove day=31

connect_policy "${dn_package_maintenance}" \
	container/cn cn=computers,"${ldap_base}"

# Setting release policy
dn_release_maintenance="cn=release-maintenance,cn=installation,cn=update,cn=policies,${ldap_base}"
modify_object policies/release "${dn_release_maintenance}" \
	--set activate=TRUE \
	--set releaseVersion=4.3-99

## Setting fixed release Version 3.2-8. LMZ Redmine #1749
if [ ${lmz_package_release_policy_version} -lt 1 ]; then
    msg "Setting package release policy version 1"

    # Removed the fixed release Version for specific customers. 2017-01-17 --Michel Smidt

    ucr set lmz/package-release-policy-version=1
    eval "$(ucr shell lmz/package-release-policy-version)"
    msg "Done."
fi

connect_policy "${dn_release_maintenance}" \
	container/cn cn=computers,"${ldap_base}"

# packages {{{1
dn_lmz_packages="cn=lmz,cn=packages,cn=univention,${ldap_base}"
modify_object settings/packages "${dn_lmz_packages}" \
	--append packageList=lmz-archive-key                              $(: Repository Key) \
	--append packageList=lmz-backuppc-config                          $(: BackupPC-Konfiguration) \
	--append packageList=lmz-branding                                 $(: Branding der UMC und Übersichtsseite) \
	--append packageList=lmz-clamav-scan-shares                       $(: Virenscan für Dateifreigaben) \
	--append packageList=lmz-create-opsi-package-zertifikat           $(: OPSI Paket zertifikat mit neuer UCS CA bauen) \
	--append packageList=lmz-files-master                             $(: Dateien, die vom LMZ gepfelegt werden) \
	--append packageList=lmz-import-add-multiple-network-cards        $(: Import von Clients mit mehreren MAC-Adressen) \
	--append packageList=lmz-import-add-shares                        $(: lmz-import-hooks zum Erstellen und Anpassen von Dateifreigaben) \
	--append packageList=lmz-import-add-to-ou-host-group              $(: lmz-import-hooks zur automatischen Zuordnung von Clients zur Gruppe OU@SCHULE@Windows-Edukativnetz) \
	--append packageList=lmz-import-attach-pxe-boot-policy            $(: lmz-import-hooks zur automatischen Zuordnung von PXE-Bootrichtlinien zu Clients) \
	--append packageList=lmz-import-set-homedir                       $(: lmz-import-hooks zur automatischen Erstellung von Dateifreigaben für Lehrer und Netzwerkberater) \
	--append packageList=lmz-initial-setup                            $(: Initiale Konfiguration der Umgebung) \
	--append packageList=lmz-logon-logger                             $(: Protokolliert Benutzeran- und -abmeldungen) \
	--append packageList=lmz-mysql-dump                               $(: Sichert alle MySQL-Datenbanken) \
	--append packageList=lmz-postgresql-dump                          $(: Sichert alle PostgreSQL-Datenbanken) \
	--append packageList=lmz-settings-backup                          $(: Einstellungen für den UCS Backup) \
	--append packageList=lmz-settings-master                          $(: Einstellungen für den UCS Master) \
	--append packageList=lmz-ucc-image-download-and-setup             $(: Installiert UCC-Image) \
	--append packageList=console-setup                                $(: einheitliches Keyboardlayout) \
	--append packageList=mc                                           $(: Midnight Commander) \
	--append packageList=open-vm-tools                                $(: VMware-Tools) \
	--append packageList=opsi-files                                   $(: lose files required by the OPSI setup, Issues 550 and 571) \
	--append packageList=opsi-security-enhancements                   $(: OPSI-Sicherheitsanpassungen) \
	--append packageList=opsi4ucs                                     $(: OPSI) \
	--append packageList=opsi-directory-connector                     $(: OPSI directory connector ) \
	--append packageList=wimlib15                                     $(: OPSI wimlib) \
	--append packageList=wimtools                                     $(: OPSI wimlib) \
	--append packageList=paedml-import                                $(: Wrapper für den Benutzerimport) \
	--append packageList=strace                                       $(: Debugging) \
	--append packageList=ucs-school-radius-802.1x                     $(: Freeradius package for UCS@school) \
	--append packageList=univention-mysql-secret                      $(: OPSI Backend Erweiterung mit MySQL) \
	--append packageList=univention-nagios-opsi                       $(: Nagios-Überwachung für OPSI) \
	--append packageList=univention-opsi-product-updater              $(: OPSI Product Updater) \
	--append packageList=univention-opsilistener                      $(: Angepasster Listener, der auch Gruppenmitgliedschaften synchronisiert) \
	--append packageList=univention-printer-assignment                $(: Druckerzuweisung für Windows Clients) \
	--append packageList=univention-printquota                        $(: Aktiviert Druckerquota) \
	--append packageList=univention-shalla-list-downloader            $(: Blacklist-Downloader) \
	--append packageList=univention-ucc-local-imagebackup-integration $(: Erweiterung der UMC um Funktionen für das Local-Image-Backup für UCC Clients) \
	--append packageList=lmz-horde-global-addressbook                 $(: Erstellung eines globalen Schul-Adressbuchs in Horde) \
	--append packageList=lmz-postfix-limit-mails                      $(: Konfiguriert die Sendelimittierung in Postfix)

# packages-master {{{1
dn_packages_master="cn=packages-master,cn=packages,cn=update,cn=policies,${ldap_base}"
modify_object policies/masterpackages "${dn_packages_master}" \
	--append masterPackages=lmz-archive-key \
	--remove masterPackages=lmz-backuppc-config \
	--append masterPackages=lmz-branding \
	--append masterPackages=lmz-clamav-scan-shares \
	--append masterPackages=lmz-class-structure-homes \
	--append masterPackages=lmz-files-master \
	--append masterPackages=lmz-import-add-multiple-network-cards \
	--append masterPackages=lmz-import-add-shares \
	--append masterPackages=lmz-import-add-to-ou-host-group \
	--append masterPackages=lmz-import-attach-pxe-boot-policy \
	--append masterPackages=lmz-import-set-homedir \
	--append masterPackages=lmz-initial-setup \
	--append masterPackages=lmz-logon-logger \
	--remove masterPackages=lmz-postgresql-dump \
	--append masterPackages=lmz-settings-master \
	--remove masterPackages=lmz-ucc-image-download-and-setup \
	--append masterPackages=console-setup \
	--append masterPackages=mc \
	--append masterPackages=open-vm-tools \
	--remove masterPackages=paedml-import \
	--append masterPackages=strace \
	--append masterPackages=ucs-school-radius-802.1x \
	--append masterPackages=univention-printer-assignment \
	--append masterPackages=univention-printquota \
	--append masterPackages=univention-shalla-list-downloader \
	--remove masterPackages=univention-ucc-local-imagebackup-integration \
	--remove masterPackages=lmz-horde-global-addressbook \
	--append masterPackages=lmz-postfix-limit-mails

connect_policy "${dn_packages_master}" \
	computers/domaincontroller_master cn=server,cn=dc,cn=computers,"${ldap_base}"

# packages-backup {{{1
dn_packages_backup="cn=packages-backup,cn=packages,cn=update,cn=policies,${ldap_base}"
modify_object policies/memberpackages "${dn_packages_backup}" \
	--append memberPackages=lmz-archive-key \
	--append memberPackages=lmz-branding \
	--append memberPackages=lmz-create-opsi-package-zertifikat \
	--remove memberPackages=lmz-mysql-dump \
	--append memberPackages=lmz-settings-backup \
	--append memberPackages=console-setup \
	--append memberPackages=mc \
	--append memberPackages=open-vm-tools \
	--append memberPackages=opsi-security-enhancements \
	--append memberPackages=opsi4ucs \
	--append memberPackages=opsi-files \
	--append memberPackages=opsi-directory-connector \
	--append memberPackages=wimlib15 \
	--append memberPackages=wimtools \
	--append memberPackages=strace \
	--append memberPackages=univention-nagios-opsi \
	--remove memberPackages=univention-opsi-product-updater \
	--remove memberPackages=univention-opsilistener \
	--append memberPackages=univention-mysql-secret \
	--remove memberPackages=lmz-clamav-scan-shares \
	--append memberPackagesRemove=lmz-clamav-scan-shares

connect_policy "${dn_packages_backup}" \
	computers/memberserver cn=backup,cn=memberserver,cn=computers,"${ldap_base}"

# DHCP boot policies {{{1
PXE_SERVER_OPSI=backup

msg "Creating DHCP boot policies"

# Policy for unknown clients that need to be registered - BIOS
dn_client_registration="cn=client-registration,cn=boot,cn=dhcp,cn=policies,${ldap_base}"
udm policies/dhcp_boot remove --dn "${dn_client_registration}" --ignore_not_exists || true
udm dhcp/service modify --dn "cn=schule,cn=dhcp,ou=schule,${ldap_base}" --policy-dereference "${dn_client_registration}" || true

# Policy for unknown clients that need to be registered - UEFI
dn_client_registration_efi="cn=client-registration-efi,cn=boot,cn=dhcp,cn=policies,${ldap_base}"
udm policies/dhcp_boot remove --dn "${dn_client_registration_efi}" --ignore_not_exists || true
udm dhcp/service modify --dn "cn=schule,cn=dhcp,ou=schule,${ldap_base}" --policy-dereference "${dn_client_registration_efi}" || true

# Policy for windows clients that need to boot via OPSI
dn_opsi_boot="cn=opsi-boot,cn=boot,cn=dhcp,cn=policies,${ldap_base}"
modify_object policies/dhcp_boot "${dn_opsi_boot}" \
	--set boot_filename="" \
	--set boot_server="${PXE_SERVER_OPSI}.${domainname}"

# Policy default-settings without filename
dn_default_settings="cn=default-settings,cn=boot,cn=dhcp,cn=policies,${ldap_base}"
modify_object policies/dhcp_boot "${dn_default_settings}" \
	--set boot_filename=""

# DHCP filename switch for BIOS and UEFI
dhcp_switch=$(cat << END
# filename is relative to /var/lib/univention-client-boot/
filename "pxelinux.0";
# This is the UEFI detection:
# BIOS / Legacy:
if substring (option vendor-class-identifier , 19,1 ) = "0" {
        log (info, "pxe client");
        filename "pxelinux.0";
}
# UEFI x64:
else if substring (option vendor-class-identifier , 19,1 ) = "7" {
        log (info, "efi64 client");
        filename "pxelinux.cfg/elilo.efi";
}
# VMware:
else if substring (option vendor-class-identifier , 19,1 ) = "9" {
        log (info, "vmware efi client");
        filename "pxelinux.cfg/elilo.efi";
}
else {
        log (info, concat ( "Unhandled vendor class Arch: ", substring(option vendor-class-identifier , 19,1 )));
}
END
)
modify_object dhcp/service "cn=schule,cn=dhcp,ou=schule,${ldap_base}" \
	--set statements="${dhcp_switch}"

connect_policy "${dn_opsi_boot}" \
	dhcp/service "cn=schule,cn=dhcp,ou=schule,${ldap_base}"

# Policy for windows clients that need to boot via OPSI UEFI
dn_opsi_uefi_boot="cn=opsi-uefi-boot,cn=boot,cn=dhcp,cn=policies,${ldap_base}"
udm policies/dhcp_boot remove --dn "${dn_opsi_uefi_boot}" --ignore_not_exists || true

# Policy for UCC clients that need to boot via UCC
dn_ucc_boot="cn=ucc-boot,cn=boot,cn=dhcp,cn=policies,${ldap_base}"
udm policies/dhcp_boot remove --dn "${dn_ucc_boot}" --ignore_not_exists || true

# create domadmin-umc / change default-umc-all policy {{{1
dn_domadmin_umc="cn=domadmin-umc,cn=UMC,cn=policies,${ldap_base}"
modify_object policies/umc "${dn_domadmin_umc}" \
	--append "allow=cn=schoolwizards-computers,cn=operations,cn=UMC,cn=univention,${ldap_base}" $(: Hinzufügen von Computern) \
	--append "allow=cn=udm-computers,cn=operations,cn=UMC,cn=univention,${ldap_base}" $(: Bearbeiten von Computern)

connect_policy "${dn_domadmin_umc}" \
	users/user "uid=domadmin,cn=users,${ldap_base}"

# disconnect default-umc-all from Domain Admins, only connect it to
# Administrator in order to bring the separate policy for domadmin alive
dn_umc_all="cn=default-umc-all,cn=UMC,cn=policies,${ldap_base}"
msg "Disconnecting policy default-umc-all from group Domain Admins"
udm groups/group modify --dn "cn=Domain Admins,cn=groups,${ldap_base}" --policy-dereference "${dn_umc_all}" || true

connect_policy "${dn_umc_all}" \
	users/user "uid=Administrator,cn=users,${ldap_base}"

# change default-umc-all {{{1
dn_umc_all="cn=default-umc-all,cn=UMC,cn=policies,${ldap_base}"
msg "Removing schools wizard from default-umc-all"
udm policies/umc modify --dn "${dn_umc_all}" --remove "allow=cn=schoolwizards-schools,cn=operations,cn=UMC,cn=univention,${ldap_base}" || true

# extend ucsschool-umc-teachers-default {{{1
dn_umc_teachers="cn=ucsschool-umc-teachers-default,cn=UMC,cn=policies,${ldap_base}"
modify_object policies/umc "${dn_umc_teachers}" \
	--append "allow=cn=schoolgroups-class,cn=operations,cn=UMC,cn=univention,${ldap_base}" $(: Lehrer-Klassenzuordnung für Lehrer zugänglich gemacht)

# extend ucsschool-umc-admins-default {{{1
dn_umc_admins="cn=ucsschool-umc-admins-default,cn=UMC,cn=policies,${ldap_base}"
modify_object policies/umc "${dn_umc_admins}" \
	--append "allow=cn=schoolwizards-classes,cn=operations,cn=UMC,cn=univention,${ldap_base}"   $(: Import von Klasen) \
	--append "allow=cn=schoolwizards-computers,cn=operations,cn=UMC,cn=univention,${ldap_base}" $(: Import von Computern) \
	--append "allow=cn=schoolwizards-users,cn=operations,cn=UMC,cn=univention,${ldap_base}"     $(: Import von Benutzern) \
	--append "allow=cn=schoolcsvimport-all,cn=operations,cn=UMC,cn=univention,${ldap_base}"     $(: CSV-Import-Assistent) \
	--append "allow=cn=printers-all,cn=operations,cn=UMC,cn=univention,${ldap_base}"            $(: Druckermanagement)

# connect default-udm-self policy {{{1
dn_udm_self="cn=default-udm-self,cn=UMC,cn=policies,${ldap_base}"
connect_policy "${dn_udm_self}" \
	groups/group "cn=Domain Users schule,cn=groups,ou=schule,${ldap_base}"

# create DHCP lease policy {{{1
dn_dhcp_lease_time="cn=default-settings,cn=leasetime,cn=dhcp,cn=policies,${ldap_base}"
modify_object policies/dhcp_leasetime "${dn_dhcp_lease_time}" \
	--set "lease_time_default=7 days" $(: 7 Tage Leasetime) \
	--set "lease_time_min=2 hours" $(: 2 Stunden Leasetime minimal) \
	--set "lease_time_max=30 days" $(: 30 Tage Leasetime maximal)
connect_policy "${dn_dhcp_lease_time}" container/dc "${ldap_base}"

# disconnect default-settings DHCP/Routing from ldap base.  Issue #413
dn_routing_default="cn=default-settings,cn=routing,cn=dhcp,cn=policies,${ldap_base}"
msg "Disconnecting dhcp/routing policy default-settings from LDAP base"
udm container/dc modify --dn "${ldap_base}" --policy-dereference "${dn_routing_default}" || true

# extend PAEDAGOGIK network schule-10.1.0.0 {{{1
dn_network_paedagogik="cn=10.1.0.0,cn=schule,cn=dhcp,ou=schule,${ldap_base}"
modify_object dhcp/subnet "${dn_network_paedagogik}" \
	--set "name=10.1.0.0" \
	--superordinate "cn=schule,cn=dhcp,ou=schule,${ldap_base}" \
	--set "subnet=10.1.0.0" \
	--set "subnetmask=24" \
	--set "range=10.1.0.230 10.1.0.254"

# extend sicheres Lehrernetz network schule-10.1.1.0 {{{1
dn_network_lehrernetz="cn=10.1.1.0,cn=schule,cn=dhcp,ou=schule,${ldap_base}"
modify_object dhcp/subnet "${dn_network_lehrernetz}" \
	--set "name=10.1.1.0" \
	--superordinate "cn=schule,cn=dhcp,ou=schule,${ldap_base}" \
	--set "subnet=10.1.1.0" \
	--set "subnetmask=24" \
	--set "range=10.1.1.230 10.1.1.254"

# extend small Schülernetz network schule-10.1.2.0 {{{1
dn_network_small_schuelernetz="cn=10.1.2.0,cn=schule,cn=dhcp,ou=schule,${ldap_base}"
modify_object dhcp/subnet "${dn_network_small_schuelernetz}" \
	--set "name=10.1.2.0" \
	--superordinate "cn=schule,cn=dhcp,ou=schule,${ldap_base}" \
	--set "subnet=10.1.2.0" \
	--set "subnetmask=24" \
	--set "range=10.1.2.230 10.1.2.254"

# extend big Schülernetz network schule-10.2.0.0 {{{1
dn_network_big_schuelernetz="cn=10.2.0.0,cn=schule,cn=dhcp,ou=schule,${ldap_base}"
modify_object dhcp/subnet "${dn_network_big_schuelernetz}" \
	--set "name=10.2.0.0" \
	--superordinate "cn=schule,cn=dhcp,ou=schule,${ldap_base}" \
	--set "subnet=10.2.0.0" \
	--set "subnetmask=16" \
	--set "range=10.2.252.0 10.2.255.254"

# vi: ft=sh:tw=80:sw=4:ts=4:fdm=marker
