#!/bin/bash eval "$(ucr shell)" testRename () { local lw="ldapsearch-wrapper" local role=$1 local dnsDhcp=$2 local typ=${role/*_/} local newName=neuer$typ$dnsDhcp$$ local grpName=grp-$typ$dnsDhcp$$ local name=old$typ$dnsDhcp$$ local mac=$(openssl rand 6 | xxd -p | sed 's/\(..\)/\1:/g; s/:$//') local ip=$(ldapsearch -x -b cn=default,cn=networks,$ldap_base|$lw|grep univentionNextIp| awk '{print $2}') local fzone=$(ldapsearch -x -b cn=default,cn=networks,$ldap_base|$lw|grep univentionDnsForwardZone|awk '{print $2}') local rzone=$(ldapsearch -x -b cn=default,cn=networks,$ldap_base|$lw|grep univentionDnsReverseZone|awk '{print $2}') local dzone=$(ldapsearch -x -b cn=default,cn=networks,$ldap_base|$lw|grep univentionDhcpEntry|awk '{print $2}') ip=$(echo $ip| awk -F . '{print $1"."$2"."$3"."$4 + 1}') echo "dn: cn=default,cn=networks,dc=univention,dc=qa changetype: modify replace: univentionNextIp univentionNextIp: $ip " | ldapmodify -D "cn=admin,$ldap_base" -w $(< /etc/ldap.secret) if [ -n "$dnsDhcp" ]; then extra="--set mac=$mac --set ip=$ip " extra="$extra --set dnsEntryZoneReverse=$rzone" extra="$extra --set dnsEntryZoneForward=$fzone" dd="$dzone $ip $mac" fi udm groups/group create \ --position cn=groups,$ldap_base \ --set name=$grpName udm computers/$role create \ --position "cn=computers,$ldap_base" \ --set name="$name" $extra if [ -n "$dnsDhcp" ]; then udm computers/$role modify \ --dn "cn=$name,cn=computers,$ldap_base" \ --set dhcpEntryZone="$dd" fi udm groups/group modify \ --dn "cn=$grpName,cn=groups,$ldap_base" \ --set name=$grpName \ --append hosts=cn="$name",cn=computers,$ldap_base udm computers/$role modify \ --dn "cn=$name,cn=computers,$ldap_base" \ --set name="$newName" # memberuid an primärer gruppe gid=$(ldapsearch -LLL -x cn=$newName gidNumber | $lw | grep gidNumber | awk '{print $2}') muid=$(ldapsearch -LLL -x "(&(gidNumber=$gid)(memberuid=$newName$))" memberUid | $lw | grep memberUid | head -1) unqm=$(ldapsearch -LLL -x "(&(gidNumber=$gid)(uniqueMember=cn=$newName,cn=computers,$ldap_base))" uniqueMember | $lw | grep uniqueMember | head -1) if [ -z "$muid" -o -z "$unqm" ]; then echo "no memberuid/or uniqueMember in primary group of $newName" exit 1 fi # test membership in grp1 muid2=$(ldapsearch -LLL -x "(&(cn=$grpName)(memberUid=$newName$))" memberUid | $lw | grep memberUid | head -1) unqm2=$(ldapsearch -LLL -x "(&(cn=$grpName)(uniqueMember=cn=$newName,cn=computers,$ldap_base))" uniqueMember | $lw | grep uniqueMember | head -1) if [ -z "$muid2" -o -z "$unqm2" ]; then echo "no memberuid/or uniqueMember in group of $newName" exit 1 fi # check existens of oldname in ldap ldapsearch -x | grep -v krb5PrincipalName | grep $name if [ $? -eq 0 ]; then echo found $name in ldap exit 1 fi if [ -n "$dnsDhcp" ]; then fqdn="$newName.$domainname" fztest=$(udm dns/host_record list --superordinate "$fzone" --filter name="$newName"| grep DN) retest=$(udm dns/ptr_record list --superordinate "$rzone" --filter ptr_record="$fqdn."| grep DN) dhtest=$(udm dhcp/host list --superordinate "$dzone" --filter host="$newName"| grep DN) if [ -z "$dhtest" -o -z "$fztest" -o -z "$retest" ]; then echo "dhcp/dns failed for $newName" exit 1 fi fi read udm computers/$role remove --dn "cn=$newName,cn=computers,$ldap_base" --remove_referring udm groups/group remove --dn "cn=$grpName,cn=groups,$ldap_base" } testRename "domaincontroller_slave" testRename "domaincontroller_backup" testRename "domaincontroller_master" testRename "macos" testRename "managedclient" testRename "memberserver" testRename "mobileclient" testRename "domaincontroller_slave" "true" testRename "domaincontroller_backup" "true" testRename "domaincontroller_master" "true" testRename "macos" "true" testRename "managedclient" "true" testRename "memberserver" "true" testRename "mobileclient" "true" ##thinclient ##ipmanagedclient ##windows