View | Details | Raw Unified | Return to bug 28562
Collapse All | Expand All

(-)a/branches/ucs-3.2/ucs-3.2-0/management/univention-join/univention-join (-15 / +11 lines)
 Lines 121-140   download_host_certificate () { Link Here 
121
	echo -n "Download host certificate "
121
	echo -n "Download host certificate "
122
	local HOSTPWD="/etc/machine.secret"
122
	local HOSTPWD="/etc/machine.secret"
123
	local HOSTACCOUNT="$hostname\$"
123
	local HOSTACCOUNT="$hostname\$"
124
	while true
124
	local i delay=20
125
	for ((i=0;i<300;i+=delay)) # max 5 minutes
125
	do
126
	do
126
		univention-scp "$HOSTPWD" -q -r \
127
		univention-scp "$HOSTPWD" -q -r \
127
			"$HOSTACCOUNT@$DCNAME:/etc/univention/ssl/$hostname" \
128
			"$HOSTACCOUNT@$DCNAME:/etc/univention/ssl/$hostname" \
128
			"$HOSTACCOUNT@$DCNAME:/etc/univention/ssl/$hostname.$domainname" \
129
			"$HOSTACCOUNT@$DCNAME:/etc/univention/ssl/$hostname.$domainname" \
129
			/etc/univention/ssl/ >>/var/log/univention/join.log 2>&1
130
			/etc/univention/ssl/ >>/var/log/univention/join.log 2>&1
130
		[ -d "/etc/univention/ssl/$hostname" ] && [ -d "/etc/univention/ssl/$hostname.$domainname" ] && break
131
		if [ -d "/etc/univention/ssl/$hostname" ] && [ -d "/etc/univention/ssl/$hostname.$domainname" ]
132
		then
133
			echo -e "\033[60Gdone"
134
			return
135
		fi
131
		echo -n "."
136
		echo -n "."
132
		sleep 20
137
		sleep $delay
133
	done
138
	done
134
139
135
	echo -e "\033[60Gdone"
140
	echo "failed"
141
	failed_message "failed to get host certificate"
136
}
142
}
137
143
144
138
check_ldap_tls_connection () {
145
check_ldap_tls_connection () {
139
	echo -n "Check TLS connection "
146
	echo -n "Check TLS connection "
140
147
 Lines 668-678   if [ "$server_role" = "domaincontroller_backup" ]; then Link Here 
668
675
669
	download_host_certificate
676
	download_host_certificate
670
677
671
	if [ ! -d "/etc/univention/ssl/$hostname" ] &&  [ ! -d "/etc/univention/ssl/$hostname.$domainname" ]; then
672
		echo "failed to get host certificate"
673
		failed_message "failed to get host certificate"
674
	fi
675
676
	echo -n "Sync SSL settings: "
678
	echo -n "Sync SSL settings: "
677
	eval "$(univention-ssh --no-split "$DCPWD" "${DCACCOUNT}@${DCNAME}" /usr/sbin/univention-config-registry shell ssl/country ssl/state ssl/locality ssl/organization ssl/organizationalunit ssl/common ssl/email)"
679
	eval "$(univention-ssh --no-split "$DCPWD" "${DCACCOUNT}@${DCNAME}" /usr/sbin/univention-config-registry shell ssl/country ssl/state ssl/locality ssl/organization ssl/organizationalunit ssl/common ssl/email)"
678
	univention-config-registry set \
680
	univention-config-registry set \
 Lines 752-761   elif [ "$server_role" = "domaincontroller_slave" ]; then Link Here 
752
754
753
	download_host_certificate
755
	download_host_certificate
754
756
755
	if [ ! -d "/etc/univention/ssl/$hostname" ] &&  [ ! -d "/etc/univention/ssl/$hostname.$domainname" ]; then
756
		failed_message "failed to get host certificate"
757
	fi
758
759
	echo -n "Restart LDAP Server: "
757
	echo -n "Restart LDAP Server: "
760
	/etc/init.d/slapd restart >>/var/log/univention/join.log 2>&1
758
	/etc/init.d/slapd restart >>/var/log/univention/join.log 2>&1
761
	echo -e "\033[60Gdone"
759
	echo -e "\033[60Gdone"
762
- 
763
--
764
.../ucs-3.2/ucs-3.2-0/management/univention-join/univention-join     | 5 +++--
760
.../ucs-3.2/ucs-3.2-0/management/univention-join/univention-join     | 5 +++--
765
.../ucs-3.2-0/management/univention-join/univention-server-join      | 3 ++-
761
.../ucs-3.2-0/management/univention-join/univention-server-join      | 3 ++-
766
2 files changed, 5 insertions(+), 3 deletions(-)
762
2 files changed, 5 insertions(+), 3 deletions(-)
(-)a/branches/ucs-3.2/ucs-3.2-0/management/univention-join/univention-join (-2 / +3 lines)
 Lines 873-880   if [ -d /etc/runit/univention-directory-listener ]; then Link Here 
873
	/etc/init.d/univention-directory-listener restart >>/var/log/univention/join.log 2>&1
873
	/etc/init.d/univention-directory-listener restart >>/var/log/univention/join.log 2>&1
874
fi
874
fi
875
875
876
if [ "$interfaces_${interfaces_primary:-eth0}_type" != "dhcp" ]; then
876
varname="interfaces_${interfaces_primary:-eth0}_type"
877
	univention-config-registry commit /etc/resolv.conf >>/var/log/univention/join.log 2>&1
877
if [ "${!varname}" != "dhcp" ]; then
878
	univention-config-registry commit /etc/resolv.conf >>"$LOGFILE" 2>&1
878
fi
879
fi
879
880
880
exit 0
881
exit 0
(-)a/branches/ucs-3.2/ucs-3.2-0/management/univention-join/univention-server-join (-3 / +4 lines)
 Lines 316-322   if [ -n "$IP" ]; then Link Here 
316
		subnet="$(univention-ipcalc6 --ip "$IP" --netmask "$NETMASK" --output reverse --calcdns)"
316
		subnet="$(univention-ipcalc6 --ip "$IP" --netmask "$NETMASK" --output reverse --calcdns)"
317
	else
317
	else
318
		# Fallback
318
		# Fallback
319
		subnet="$(univention-ipcalc6 --ip "$IP" --netmask "$interfaces_${interfaces_primary:-eth0}_netmask" --output reverse --calcdns)"
319
		varname="interfaces_${interfaces_primary:-eth0}_netmask"
320
		subnet="$(univention-ipcalc6 --ip "$IP" --netmask "${!varname}" --output reverse --calcdns)"
320
	fi
321
	fi
321
	log 0 "	Calculated subnet = $subnet"
322
	log 0 "	Calculated subnet = $subnet"
322
323
323
- 
324
The return status of a pipeline is the exit status of the last
325
command, unless the pipefail option is enabled.
324
--
325
.../ucs-3.2-0/management/univention-join/univention-server-join       | 4 ++--
326
.../ucs-3.2-0/management/univention-join/univention-server-join       | 4 ++--
326
1 file changed, 2 insertions(+), 2 deletions(-)
327
1 file changed, 2 insertions(+), 2 deletions(-)
(-)a/branches/ucs-3.2/ucs-3.2-0/management/univention-join/univention-server-join (-4 / +2 lines)
 Lines 209-216   create_entry () { Link Here 
209
	local group="$5"
209
	local group="$5"
210
	log 0 "Join $desc"
210
	log 0 "Join $desc"
211
211
212
	old_dn="$(univention-directory-manager "$module" list --filter name="$NEWHOSTNAME" "${ADMINOPTIONS[@]}" | sed -ne "s|^DN: ||p")"
212
	if ! old_dn="$(set -o pipefail ; univention-directory-manager "$module" list --filter name="$NEWHOSTNAME" "${ADMINOPTIONS[@]}" | sed -ne "s|^DN: ||p")"
213
	if [ $? -gt 0 ]; then
213
	then
214
		log 1 "E: failed search $desc [$old_dn]"
214
		log 1 "E: failed search $desc [$old_dn]"
215
		exit 1
215
		exit 1
216
	fi
216
	fi
217
- 
218
--
219
.../management/univention-join/univention-join     | 24 ++----
217
.../management/univention-join/univention-join     | 24 ++----
220
.../univention-join/univention-server-join         | 97 +++++++++-------------
218
.../univention-join/univention-server-join         | 97 +++++++++-------------
221
2 files changed, 49 insertions(+), 72 deletions(-)
219
2 files changed, 49 insertions(+), 72 deletions(-)
(-)a/branches/ucs-3.2/ucs-3.2-0/management/univention-join/univention-join (-15 / +9 lines)
 Lines 487-507   else Link Here 
487
	args+=(-binddn "$binddn")
487
	args+=(-binddn "$binddn")
488
fi
488
fi
489
489
490
# TODO: Support multiple network interfaces
490
for ip in $(ip addr show scope global | sed -rne '/\<scope global\>/s|.*\<inet6? ([0-9a-f.:/]+)\>.*|\1|p')
491
# Search for the standard IP:
491
do
492
IP="$(get_default_ip_address)"
492
	args+=(-ip "$ip")
493
if [ -n "$IP" ]; then
493
done
494
	args+=(-ip "$IP")
494
for iface in /sys/class/net/*
495
	if [ "${master_version:0:1}" -ge 3 ]; then
495
do
496
		NETMASK="$(get_default_netmask)"
496
	[ -L "${iface}/device" ] || continue
497
		# Since UCS 3.0 it is possible to append the netmask
497
	args+=(-mac "$(cat "${iface}/address")")
498
		args+=(-netmask "$NETMASK")
498
done
499
	fi
500
fi
501
mac_addr="$(LC_ALL=C ip link show | sed -rne 's|.*link/ether ([0-9a-fA-F:]+) brd .*|\1|p' | head -n1)"
502
if [ -n "$mac_addr" ]; then
503
	args+=(-mac "$mac_addr")
504
fi
505
499
506
# invalidate the nscd hosts cache
500
# invalidate the nscd hosts cache
507
#  https://forge.univention.org/bugzilla/show_bug.cgi?id=30886
501
#  https://forge.univention.org/bugzilla/show_bug.cgi?id=30886
(-)a/branches/ucs-3.2/ucs-3.2-0/management/univention-join/univention-server-join (-59 / +40 lines)
 Lines 94-100   log() { Link Here 
94
	fi
94
	fi
95
}
95
}
96
96
97
MAC=""
97
MAC=()
98
IP=()
98
BINDDN=""
99
BINDDN=""
99
BINDPWFILE=""
100
BINDPWFILE=""
100
DOMAINNAME=""
101
DOMAINNAME=""
 Lines 117-123   do Link Here 
117
			shift 2 || exit 2
118
			shift 2 || exit 2
118
			;;
119
			;;
119
		"-ip")
120
		"-ip")
120
			IP="${2:?missing IP address}"
121
			IP+=("${2:?missing IP address}")
121
			shift 2 || exit 2
122
			shift 2 || exit 2
122
			;;
123
			;;
123
		"-netmask")
124
		"-netmask")
 Lines 129-135   do Link Here 
129
			shift 2 || exit 2
130
			shift 2 || exit 2
130
			;;
131
			;;
131
		"-mac")
132
		"-mac")
132
			MAC="${2:?missing ethernet MAC address}"
133
			MAC+=("${2:?missing ethernet MAC address}")
133
			shift 2 || exit 2
134
			shift 2 || exit 2
134
			;;
135
			;;
135
		"-bindaccount")
136
		"-bindaccount")
 Lines 208-213   create_entry () { Link Here 
208
	local primaryGroup="$4"
209
	local primaryGroup="$4"
209
	local group="$5"
210
	local group="$5"
210
	log 0 "Join $desc"
211
	log 0 "Join $desc"
212
	local mac ip
211
213
212
	if ! old_dn="$(set -o pipefail ; univention-directory-manager "$module" list --filter name="$NEWHOSTNAME" "${ADMINOPTIONS[@]}" | sed -ne "s|^DN: ||p")"
214
	if ! old_dn="$(set -o pipefail ; univention-directory-manager "$module" list --filter name="$NEWHOSTNAME" "${ADMINOPTIONS[@]}" | sed -ne "s|^DN: ||p")"
213
	then
215
	then
 Lines 215-246   create_entry () { Link Here 
215
		exit 1
217
		exit 1
216
	fi
218
	fi
217
219
218
	args=()
220
	declare -a args=()
221
222
	for mac in "${MAC[@]}"
223
	do
224
		args+=(--set mac="$MAC")
225
	done
226
227
	for ip in "${IP[@]}"
228
	do
229
		args+=(--set ip="${ip%/*}")
230
	done
231
232
	# DNS
233
	if [ -n "$IP" ]
234
	then
235
		forwardZone="$(univention-directory-manager dns/forward_zone list \
236
			--filter zone="$DOMAINNAME" \
237
			"${ADMINOPTIONS[@]}" | sed -ne 's/^DN: //p')"
238
		log 0 "	forwardZone $forwardZone"
239
	fi
240
	for addr in "${IP[@]}"
241
	do
242
		local ip="${addr%/*}" prefix="${addr#*/}"
243
		: "${prefix:=NETMASK}"
244
		: "${prefix:=$(. /usr/share/univention-lib/base.sh && get_default_netmask)}"
245
		local subnet="$(univention-ipcalc6 --ip "$ip" --netmask "$prefix" --calcdns --output reverse)"
246
		local reverseZone="$(univention-directory-manager dns/reverse_zone list \
247
			--filter subnet="$subnet" \
248
			"${ADMINOPTIONS[@]}" | sed -ne 's/^DN: //p')"
249
		log 0 "	reverseZone $reverseZone"
250
		# UDM BUG: multiple --set don't work; --apend only prints a warning for modify; ignore old entries for now
251
		[ -n "$reverseZone" ] && args+=(--append dnsEntryZoneReverse="$reverseZone $ip")
252
		[ -n "$forwardZone" ] && args+=(--append dnsEntryZoneForward="$forwardZone $ip")
253
	done
254
219
	if [ -z "$old_dn" ]; then
255
	if [ -z "$old_dn" ]; then
220
		log 0 "	Create new $desc "
256
		log 0 "	Create new $desc "
221
257
222
		if [ -n "$IP" ]; then
223
			args+=(--set ip="$IP")
224
			# DNS
225
			if [ -n "$forwardZone" ]; then
226
				args+=(--set dnsEntryZoneForward="$forwardZone")
227
				if [ -n "$reverseZone" ]; then
228
					args+=(--set dnsEntryZoneReverse="$reverseZone")
229
				fi
230
			fi
231
		fi
232
		if [ -n "$MAC" ]; then
233
			args+=(--set mac="$MAC")
234
		fi
235
		# DHCP
236
		case "$module" in
237
		computers/managedclient|computers/mobileclient)
238
			if [ -n "$dhcpEntry" ] && [ -n "$IP" ] && [ -n "$MAC" ]; then
239
				args+=(--set dhcpEntryZone="$dhcpEntry $IP $MAC")
240
			fi
241
			;;
242
		esac
243
244
		cmd=(univention-directory-manager "$module" create \
258
		cmd=(univention-directory-manager "$module" create \
245
			--position "$position" \
259
			--position "$position" \
246
			--set name="$NEWHOSTNAME" \
260
			--set name="$NEWHOSTNAME" \
 Lines 283-294   create_entry () { Link Here 
283
	else
297
	else
284
		log 0 "Modify $desc [$old_dn]"
298
		log 0 "Modify $desc [$old_dn]"
285
299
286
		if [ -n "$MAC" ]; then
287
			args+=(--set mac="$MAC")
288
		fi
289
		if [ -n "$IP" ]; then
290
			args+=(--set ip="$IP")
291
		fi
292
		rc="$(univention-directory-manager "$module" modify \
300
		rc="$(univention-directory-manager "$module" modify \
293
			--dn "$old_dn" \
301
			--dn "$old_dn" \
294
			--set password="$computerPassword" \
302
			--set password="$computerPassword" \
 Lines 311-341   create_entry () { Link Here 
311
	fi
319
	fi
312
}
320
}
313
321
314
if [ -n "$IP" ]; then
315
	if [ -n "$NETMASK" ]; then
316
		subnet="$(univention-ipcalc6 --ip "$IP" --netmask "$NETMASK" --output reverse --calcdns)"
317
	else
318
		# Fallback
319
		varname="interfaces_${interfaces_primary:-eth0}_netmask"
320
		subnet="$(univention-ipcalc6 --ip "$IP" --netmask "${!varname}" --output reverse --calcdns)"
321
	fi
322
	log 0 "	Calculated subnet = $subnet"
323
324
	forwardZone="$(univention-directory-manager dns/forward_zone list \
325
		--filter zone="$DOMAINNAME" \
326
		"${ADMINOPTIONS[@]}" | sed -ne 's/^DN: //p')"
327
	reverseZone="$(univention-directory-manager dns/reverse_zone list \
328
		--filter subnet="$subnet" \
329
		"${ADMINOPTIONS[@]}" | sed -ne 's/^DN: //p')"
330
	dhcpEntry="$(univention-directory-manager dhcp/service list \
331
		--filter name="$DOMAINNAME" \
332
		"${ADMINOPTIONS[@]}" | sed -ne 's/^DN: //p')"
333
334
	log 0 "	forwardZone $forwardZone"
335
	log 0 "	reverseZone $reverseZone"
336
	log 0 "	dhcpEntry $dhcpEntry"
337
fi
338
339
computerPassword="$(create_machine_password)"
322
computerPassword="$(create_machine_password)"
340
323
341
case "$ROLE" in
324
case "$ROLE" in
342
- 
343
--
344
.../management/univention-join/univention-join     | 127 +++++++++++----------
325
.../management/univention-join/univention-join     | 127 +++++++++++----------
345
.../univention-join/univention-run-join-scripts    |  15 ++-
326
.../univention-join/univention-run-join-scripts    |  15 ++-
346
2 files changed, 78 insertions(+), 64 deletions(-)
327
2 files changed, 78 insertions(+), 64 deletions(-)
(-)a/branches/ucs-3.2/ucs-3.2-0/management/univention-join/univention-join (-59 / +68 lines)
 Lines 45-58   DCPWD="$USERTMP/dcpwd" Link Here 
45
VERSION_CHECK=true
45
VERSION_CHECK=true
46
VERBOSE=false
46
VERBOSE=false
47
47
48
LOGFILE="/var/log/univention/join.log"
49
log () {
50
	echo "$(LC_ALL=C date): $*" >>"$LOGFILE"
51
}
52
echo_right () {
53
	local text="$*"
54
	echo -e "\033[$((${COLUMNS:-80}-${#text}))G${text}"
55
}
56
48
trapOnExit() {
57
trapOnExit() {
49
	rm -rf "$USERTMP"
58
	rm -rf "$USERTMP"
50
	if [ -n "$VERBOSE" -a "$VERBOSE" = "true" ]; then
59
	if [ -n "$VERBOSE" -a "$VERBOSE" = "true" ]; then
51
		if [ -n "$old_listener_debug_level" ]; then
60
		if [ -n "$old_listener_debug_level" ]; then
52
			ucr set listener/debug/level="$old_listener_debug_level" >>/var/log/univention/join.log 2>&1
61
			ucr set listener/debug/level="$old_listener_debug_level" >>"$LOGFILE" 2>&1
53
		fi
62
		fi
54
	fi
63
	fi
55
	echo "$(LC_ALL=C date): finish $0" >>/var/log/univention/join.log 2>&1
64
	log "finish $0"
56
}
65
}
57
66
58
trap trapOnExit EXIT
67
trap trapOnExit EXIT
 Lines 72-78   display_help() { Link Here 
72
	  -realm <kerberos realm>:       Kerberos realm, e.g. TEST.LOCAL
81
	  -realm <kerberos realm>:       Kerberos realm, e.g. TEST.LOCAL
73
	  -windom <windows domain name>: Name of the windows (samba) domain
82
	  -windom <windows domain name>: Name of the windows (samba) domain
74
	  -disableVersionCheck           Disable version check against _dcname_
83
	  -disableVersionCheck           Disable version check against _dcname_
75
	  -verbose                       Enable verbose logging (/var/log/univention/join.log)
84
	  -verbose                       Enable verbose logging ($LOGFILE)
76
85
77
	  -h | --help | -?:              Print this usage message and exit program
86
	  -h | --help | -?:              Print this usage message and exit program
78
	  --version:                     Print version information and exit program
87
	  --version:                     Print version information and exit program
 Lines 127-143   download_host_certificate () { Link Here 
127
		univention-scp "$HOSTPWD" -q -r \
136
		univention-scp "$HOSTPWD" -q -r \
128
			"$HOSTACCOUNT@$DCNAME:/etc/univention/ssl/$hostname" \
137
			"$HOSTACCOUNT@$DCNAME:/etc/univention/ssl/$hostname" \
129
			"$HOSTACCOUNT@$DCNAME:/etc/univention/ssl/$hostname.$domainname" \
138
			"$HOSTACCOUNT@$DCNAME:/etc/univention/ssl/$hostname.$domainname" \
130
			/etc/univention/ssl/ >>/var/log/univention/join.log 2>&1
139
			/etc/univention/ssl/ >>"$LOGFILE" 2>&1
131
		if [ -d "/etc/univention/ssl/$hostname" ] && [ -d "/etc/univention/ssl/$hostname.$domainname" ]
140
		if [ -d "/etc/univention/ssl/$hostname" ] && [ -d "/etc/univention/ssl/$hostname.$domainname" ]
132
		then
141
		then
133
			echo -e "\033[60Gdone"
142
			echo_right "done"
134
			return
143
			return
135
		fi
144
		fi
136
		echo -n "."
145
		echo -n "."
137
		sleep $delay
146
		sleep $delay
138
	done
147
	done
139
148
140
	echo "failed"
149
	echo_right "failed"
141
	failed_message "failed to get host certificate"
150
	failed_message "failed to get host certificate"
142
}
151
}
143
152
 Lines 152-158   check_ldap_tls_connection () { Link Here 
152
 		failed_message "Establishing a TLS connection with $DCNAME failed. Maybe you didn't specify a FQDN."
161
 		failed_message "Establishing a TLS connection with $DCNAME failed. Maybe you didn't specify a FQDN."
153
	fi
162
	fi
154
163
155
	echo -e "\033[60Gdone"
164
	echo_right "done"
156
}
165
}
157
166
158
run_join_scripts () {
167
run_join_scripts () {
 Lines 163-179   run_join_scripts () { Link Here 
163
			test -e "$i" || continue
172
			test -e "$i" || continue
164
			echo -n "Configure $(basename "$i") "
173
			echo -n "Configure $(basename "$i") "
165
			[ -n "$SIMPLEGUI" ] && echo
174
			[ -n "$SIMPLEGUI" ] && echo
166
			echo "Configure $(basename "$i") $(LC_ALL=C date)" >>/var/log/univention/join.log
175
			log "Configure $(basename "$i")"
167
			bashVerbose=""
176
			bashVerbose=""
168
			if [ -n "$VERBOSE" -a "$VERBOSE" = "true" ]; then
177
			if [ -n "$VERBOSE" -a "$VERBOSE" = "true" ]; then
169
				bashVerbose="bash -x"
178
				bashVerbose="bash -x"
170
			fi
179
			fi
171
			$bashVerbose "$i" --binddn "$binddn" --bindpwd "$(<"$DCPWD")" >>/var/log/univention/join.log 2>&1
180
			$bashVerbose "$i" --binddn "$binddn" --bindpwd "$(<"$DCPWD")" >>"$LOGFILE" 2>&1
172
			if [ $? -ne 0 ]; then
181
			if [ $? -ne 0 ]; then
173
				echo -e "\033[60Gfailed"
182
				echo_right "failed"
174
				failed_message "FAILED: $(basename "$i")"
183
				failed_message "FAILED: $(basename "$i")"
175
			else
184
			else
176
				echo -e "\033[60Gdone"
185
				echo_right "done"
177
				delete_unjoinscript "$(basename "$i")"
186
				delete_unjoinscript "$(basename "$i")"
178
			fi
187
			fi
179
			if [ "$server_role" = "domaincontroller_slave" -o "$server_role" = "domaincontroller_backup" ]; then
188
			if [ "$server_role" = "domaincontroller_slave" -o "$server_role" = "domaincontroller_backup" ]; then
 Lines 216-222   run_join_scripts () { Link Here 
216
}
225
}
217
226
218
# log univention-join call
227
# log univention-join call
219
echo "$(LC_ALL=C date): starting $0 $*" >>/var/log/univention/join.log 2>&1
228
log "starting $0 $*"
220
229
221
while [ $# -gt 0 ]
230
while [ $# -gt 0 ]
222
do
231
do
 Lines 280-293   done Link Here 
280
289
281
# verbose logging for univention-join and listener
290
# verbose logging for univention-join and listener
282
if [ -n "$VERBOSE" -a "$VERBOSE" = "true" ]; then
291
if [ -n "$VERBOSE" -a "$VERBOSE" = "true" ]; then
283
	exec 2>>/var/log/univention/join.log
292
	exec 2>>"$LOGFILE"
284
	set -x
293
	set -x
285
	if [ -n "$listener_debug_level" ]; then
294
	if [ -n "$listener_debug_level" ]; then
286
		old_listener_debug_level="$listener_debug_level"
295
		old_listener_debug_level="$listener_debug_level"
287
	else
296
	else
288
		old_listener_debug_level="2"
297
		old_listener_debug_level="2"
289
	fi
298
	fi
290
	ucr set listener/debug/level=4 >>/var/log/univention/join.log 2>&1
299
	ucr set listener/debug/level=4 >&2
291
	listener_debug_level=4
300
	listener_debug_level=4
292
fi
301
fi
293
302
 Lines 325-337   if [ -z "$DCNAME" ]; then Link Here 
325
	echo -n "Search DC Master: "
334
	echo -n "Search DC Master: "
326
	DCNAME="$(host -t SRV "_domaincontroller_master._tcp.$domainname" | sed -ne '$s/.* \([^ ]\+\)\.$/\1/p')"
335
	DCNAME="$(host -t SRV "_domaincontroller_master._tcp.$domainname" | sed -ne '$s/.* \([^ ]\+\)\.$/\1/p')"
327
	if [ -n "$DCNAME" ]; then
336
	if [ -n "$DCNAME" ]; then
328
		echo -e "\033[60Gdone"
337
		echo_right "done"
329
	else
338
	else
330
		for i in "$nameserver" "$nameserver1" "$nameserver2" "$nameserver3" "$dns_forwarder1" "$dns_forwarder2" "$dns_forwarder3"; do
339
		for i in "$nameserver" "$nameserver1" "$nameserver2" "$nameserver3" "$dns_forwarder1" "$dns_forwarder2" "$dns_forwarder3"; do
331
			if [ -z "$i" ]; then continue; fi
340
			if [ -z "$i" ]; then continue; fi
332
			DCNAME="$(host -t SRV "_domaincontroller_master._tcp.$domainname" "$i" | sed -ne '$s/.* \([^ ]\+\)\.$/\1/p')"
341
			DCNAME="$(host -t SRV "_domaincontroller_master._tcp.$domainname" "$i" | sed -ne '$s/.* \([^ ]\+\)\.$/\1/p')"
333
			if [ -n "$DCNAME" ]; then
342
			if [ -n "$DCNAME" ]; then
334
				echo -e "\033[60Gdone"
343
				echo_right "done"
335
				echo "domain $domainname" >/etc/resolv.conf
344
				echo "domain $domainname" >/etc/resolv.conf
336
				echo "nameserver $i" >>/etc/resolv.conf
345
				echo "nameserver $i" >>/etc/resolv.conf
337
				test -x /etc/init.d/nscd && /etc/init.d/nscd restart >>/var/log/univention/join.log 2>&1
346
				test -x /etc/init.d/nscd && /etc/init.d/nscd restart >>/var/log/univention/join.log 2>&1
 Lines 352-358   if ! ping -c 1 "$DCNAME" >/dev/null 2>&1 && ! ping6 -c 1 "$DCNAME" >/dev/null 2> Link Here 
352
	failed_message "ping to $DCNAME failed"
361
	failed_message "ping to $DCNAME failed"
353
fi
362
fi
354
363
355
if ! univention-ssh "$DCPWD" "${DCACCOUNT}@${DCNAME}" echo ssh-check 2>>/var/log/univention/join.log | grep -qs ssh-check
364
if ! univention-ssh "$DCPWD" "${DCACCOUNT}@${DCNAME}" echo ssh-check 2>>"$LOGFILE" | grep -qs ssh-check
356
then
365
then
357
	failed_message "ssh-login for ${DCACCOUNT}@${DCNAME} failed. Maybe you entered a wrong password."
366
	failed_message "ssh-login for ${DCACCOUNT}@${DCNAME} failed. Maybe you entered a wrong password."
358
fi
367
fi
 Lines 380-386   done Link Here 
380
IFS=$OLDIFS
389
IFS=$OLDIFS
381
390
382
# check join constraints
391
# check join constraints
383
echo "running version check" >>/var/log/univention/join.log
392
log "running version check"
384
393
385
mystatus="no"
394
mystatus="no"
386
if [ -n "$master_version" -a -n "$master_patchlevel" ]; then
395
if [ -n "$master_version" -a -n "$master_patchlevel" ]; then
 Lines 395-422   if [ "no" = "$mystatus" ]; then Link Here 
395
	if $VERSION_CHECK; then
404
	if $VERSION_CHECK; then
396
		failed_message "$vmsg"
405
		failed_message "$vmsg"
397
	else
406
	else
398
		echo "$vmsg Continuing anyway as requested with option (-disableVersionCheck)." >>/var/log/univention/join.log
407
		log "$vmsg Continuing anyway as requested with option (-disableVersionCheck)."
399
	fi
408
	fi
400
else
409
else
401
	echo "OK: UCS version on ${DCNAME} is higher or equal ($vmaster) to the local version ($vmyself)." >>/var/log/univention/join.log
410
	log "OK: UCS version on ${DCNAME} is higher or equal ($vmaster) to the local version ($vmyself)."
402
fi
411
fi
403
412
404
echo -e "\033[60Gdone"
413
echo_right "done"
405
414
406
if [ -x /etc/init.d/slapd ]; then
415
if [ -x /etc/init.d/slapd ]; then
407
	echo -n "Stop LDAP Server: "
416
	echo -n "Stop LDAP Server: "
408
	/etc/init.d/slapd stop >>/var/log/univention/join.log 2>&1
417
	/etc/init.d/slapd stop >>"$LOGFILE" 2>&1
409
	echo -e "\033[60Gdone"
418
	echo_right "done"
410
fi
419
fi
411
420
412
if [ -x /etc/init.d/samba4 ]; then
421
if [ -x /etc/init.d/samba4 ]; then
413
	echo -n "Stop Samba 4 Server: "
422
	echo -n "Stop Samba 4 Server: "
414
	if [ "$dns_backend" = "samba4" ]; then
423
	if [ "$dns_backend" = "samba4" ]; then
415
		ucr set dns/backend=ldap >>/var/log/univention/join.log 2>&1
424
		ucr set dns/backend=ldap >>"$LOGFILE" 2>&1
416
		/etc/init.d/bind9 restart >>/var/log/univention/join.log 2>&1
425
		/etc/init.d/bind9 restart >>"$LOGFILE" 2>&1
417
	fi
426
	fi
418
	/etc/init.d/samba4 stop >>/var/log/univention/join.log 2>&1
427
	/etc/init.d/samba4 stop >>"$LOGFILE" 2>&1
419
	echo -e "\033[60Gdone"
428
	echo_right "done"
420
fi
429
fi
421
430
422
if [ -z "$LDAPBASE" ]; then
431
if [ -z "$LDAPBASE" ]; then
 Lines 428-442   fi Link Here 
428
437
429
if [ -n "$ldap_base" ]; then
438
if [ -n "$ldap_base" ]; then
430
	univention-config-registry set ldap/base="$ldap_base" >/dev/null 2>&1
439
	univention-config-registry set ldap/base="$ldap_base" >/dev/null 2>&1
431
	echo -e "\033[60Gdone"
440
	echo_right "done"
432
else
441
else
433
	failed_message "Failed to determine ldap/base."
442
	failed_message "Failed to determine ldap/base."
434
fi
443
fi
435
444
436
if [ -x /etc/init.d/slapd ]; then
445
if [ -x /etc/init.d/slapd ]; then
437
	echo -n "Start LDAP Server: "
446
	echo -n "Start LDAP Server: "
438
	/etc/init.d/slapd start >>/var/log/univention/join.log 2>&1
447
	/etc/init.d/slapd start >>"$LOGFILE" 2>&1
439
	echo -e "\033[60Gdone"
448
	echo_right "done"
440
fi
449
fi
441
450
442
echo -n "Search LDAP binddn "
451
echo -n "Search LDAP binddn "
 Lines 460-466   fi Link Here 
460
if [ -z "$binddn" ]; then
469
if [ -z "$binddn" ]; then
461
	failed_message "binddn for user $DCACCOUNT not found. "
470
	failed_message "binddn for user $DCACCOUNT not found. "
462
else
471
else
463
	echo -e "\033[60Gdone"
472
	echo_right "done"
464
fi
473
fi
465
474
466
if [ $server_role != "domaincontroller_master" -a "$server_role" != "domaincontroller_backup" -a -z "$binddn" ]; then
475
if [ $server_role != "domaincontroller_master" -a "$server_role" != "domaincontroller_backup" -a -z "$binddn" ]; then
 Lines 470-476   fi Link Here 
470
if [ -x /usr/bin/rdate ]; then
479
if [ -x /usr/bin/rdate ]; then
471
	echo -n "Sync time "
480
	echo -n "Sync time "
472
	/usr/bin/rdate "$DCNAME" >/dev/null 2>&1
481
	/usr/bin/rdate "$DCNAME" >/dev/null 2>&1
473
	echo -e "\033[60Gdone"
482
	echo_right "done"
474
fi
483
fi
475
484
476
args=()
485
args=()
 Lines 506-520   args+=(-role "$server_role" -hostname "$hostname" -domainname "$domainname") Link Here 
506
# Copy local $DCPWD to remote $DCPWD' and invoke univention-join remotely
515
# Copy local $DCPWD to remote $DCPWD' and invoke univention-join remotely
507
univention-ssh --no-split "$DCPWD" "${DCACCOUNT}@${DCNAME}" \
516
univention-ssh --no-split "$DCPWD" "${DCACCOUNT}@${DCNAME}" \
508
	'DCPWD=$(mktemp) && trap "rm -f \"$DCPWD\"" EXIT && cat >"$DCPWD" && /usr/share/univention-join/univention-server-join -bindpwfile "$DCPWD"' \
517
	'DCPWD=$(mktemp) && trap "rm -f \"$DCPWD\"" EXIT && cat >"$DCPWD" && /usr/share/univention-join/univention-server-join -bindpwfile "$DCPWD"' \
509
	"$(bashquote "${args[@]}")" <"$DCPWD" 2>&1 | tee "$USERTMP/log" >>/var/log/univention/join.log
518
	"$(bashquote "${args[@]}")" <"$DCPWD" 2>&1 | tee "$USERTMP/log" >>"$LOGFILE"
510
res_message="$(sed -n '/^E:/ { s/^E:\s*// p }' "$USERTMP/log")"
519
res_message="$(sed -n '/^E:/ { s/^E:\s*// p }' "$USERTMP/log")"
511
if [ -z "$res_message" ]; then
520
if [ -z "$res_message" ]; then
512
	echo -e "\033[60Gdone"
521
	echo_right "done"
513
fi
522
fi
514
523
515
if [ -s "$USERTMP/log" ]
524
if [ -s "$USERTMP/log" ]
516
then
525
then
517
	echo "Join result = [$(<"$USERTMP/log")]" | sed -e 's/KerberosPasswd="[^"]*"//' | fromdos -fa >>/var/log/univention/join.log
526
	echo "Join result = [$(<"$USERTMP/log")]" | sed -e 's/KerberosPasswd="[^"]*"//' | fromdos -fa >>"$LOGFILE"
518
527
519
	#try to get password
528
	#try to get password
520
	kpwd="$(sed -ne 's|^KerberosPasswd="\(.*\)" *|\1|p' <"$USERTMP/log")"
529
	kpwd="$(sed -ne 's|^KerberosPasswd="\(.*\)" *|\1|p' <"$USERTMP/log")"
 Lines 540-546   then Link Here 
540
549
541
	ldap_dn="$(sed -ne 's|^ldap_dn="\(.*\)" *|\1|p' <"$USERTMP/log")"
550
	ldap_dn="$(sed -ne 's|^ldap_dn="\(.*\)" *|\1|p' <"$USERTMP/log")"
542
	if [ -n "$ldap_dn" ]; then
551
	if [ -n "$ldap_dn" ]; then
543
		univention-config-registry set ldap/hostdn="$ldap_dn" >>/var/log/univention/join.log 2>&1
552
		univention-config-registry set ldap/hostdn="$ldap_dn" >>"$LOGFILE" 2>&1
544
	else
553
	else
545
		failed_message "No LDAP Host DN returned"
554
		failed_message "No LDAP Host DN returned"
546
	fi
555
	fi
 Lines 602-614   set_kerberos_realm () { Link Here 
602
	local DCNAME="$3"
611
	local DCNAME="$3"
603
	local realm="$4"
612
	local realm="$4"
604
	if [ -z "$realm" ]; then
613
	if [ -z "$realm" ]; then
605
		realm="$(univention-ssh "$DCPWD" "${DCACCOUNT}@${DCNAME}" '/usr/sbin/univention-config-registry get kerberos/realm')" >>/var/log/univention/join.log 2>&1
614
		realm="$(univention-ssh "$DCPWD" "${DCACCOUNT}@${DCNAME}" '/usr/sbin/univention-config-registry get kerberos/realm')" >>"$LOGFILE" 2>&1
606
		if [ $? != 0 -o -z "$realm" ]; then
615
		if [ $? != 0 -o -z "$realm" ]; then
607
			echo "Unable to retrieve the kerberos realm. Try to use option -realm <kerberos/realm>"
616
			echo "Unable to retrieve the kerberos realm. Try to use option -realm <kerberos/realm>"
608
			exit 1
617
			exit 1
609
		fi
618
		fi
610
	fi
619
	fi
611
	univention-config-registry set kerberos/realm="$realm" >>/var/log/univention/join.log 2>&1
620
	univention-config-registry set kerberos/realm="$realm" >>"$LOGFILE" 2>&1
612
}
621
}
613
622
614
set_windows_domain () {
623
set_windows_domain () {
 Lines 619-631   set_windows_domain () { Link Here 
619
	local windom="$4"
628
	local windom="$4"
620
629
621
	if [ -z "$windom" ]; then
630
	if [ -z "$windom" ]; then
622
		windom="$(univention-ssh "$dcpwd" "${dcaccount}@${dcname}" '/usr/sbin/univention-config-registry get windows/domain')" >>/var/log/univention/join.log 2>&1
631
		windom="$(univention-ssh "$dcpwd" "${dcaccount}@${dcname}" '/usr/sbin/univention-config-registry get windows/domain')" >>"$LOGFILE" 2>&1
623
		if [ $? != 0 -o -z "$windom" ]; then
632
		if [ $? != 0 -o -z "$windom" ]; then
624
			echo "Unable to retrieve the windows/domain. Try to use option -windom <windows/domain>"
633
			echo "Unable to retrieve the windows/domain. Try to use option -windom <windows/domain>"
625
			exit 1
634
			exit 1
626
		fi
635
		fi
627
	fi
636
	fi
628
	univention-config-registry set windows/domain="$windom" >>/var/log/univention/join.log 2>&1
637
	univention-config-registry set windows/domain="$windom" >>"$LOGFILE" 2>&1
629
}
638
}
630
639
631
if [ "$server_role" = "domaincontroller_backup" ]; then
640
if [ "$server_role" = "domaincontroller_backup" ]; then
 Lines 638-651   if [ "$server_role" = "domaincontroller_backup" ]; then Link Here 
638
	if [ ! -e "/etc/ldap.secret" ]; then
647
	if [ ! -e "/etc/ldap.secret" ]; then
639
		failed_message "/etc/ldap.secret not found"
648
		failed_message "/etc/ldap.secret not found"
640
	fi
649
	fi
641
	echo -e "\033[60Gdone"
650
	echo_right "done"
642
651
643
	echo -n "Sync ldap-backup.secret: "
652
	echo -n "Sync ldap-backup.secret: "
644
	univention-scp "$DCPWD" -q "${DCACCOUNT}@${DCNAME}:/etc/ldap-backup.secret" /etc/ldap-backup.secret >>/var/log/univention/join.log 2>&1
653
	univention-scp "$DCPWD" -q "${DCACCOUNT}@${DCNAME}:/etc/ldap-backup.secret" /etc/ldap-backup.secret >>/var/log/univention/join.log 2>&1
645
	if [ ! -e "/etc/ldap-backup.secret" ]; then
654
	if [ ! -e "/etc/ldap-backup.secret" ]; then
646
		failed_message "/etc/ldap-backup.secret not found"
655
		failed_message "/etc/ldap-backup.secret not found"
647
	fi
656
	fi
648
	echo -e "\033[60Gdone"
657
	echo_right "done"
649
658
650
	univention-config-registry set \
659
	univention-config-registry set \
651
		ldap/server/name="$hostname.$domainname" \
660
		ldap/server/name="$hostname.$domainname" \
 Lines 654-664   if [ "$server_role" = "domaincontroller_backup" ]; then Link Here 
654
		ldap/master="$DCNAME" \
663
		ldap/master="$DCNAME" \
655
		ldap/master/port?7389 \
664
		ldap/master/port?7389 \
656
		ldap/server/type=slave \
665
		ldap/server/type=slave \
657
		>>/var/log/univention/join.log 2>&1
666
		>>"$LOGFILE" 2>&1
658
667
659
	echo -n "Sync SSL directory: "
668
	echo -n "Sync SSL directory: "
660
	univention-ssh-rsync "$DCPWD" -az "${DCACCOUNT}@${DCNAME}:/etc/univention/ssl/*" /etc/univention/ssl/ >>/var/log/univention/join.log 2>&1
669
	univention-ssh-rsync "$DCPWD" -az "${DCACCOUNT}@${DCNAME}:/etc/univention/ssl/*" /etc/univention/ssl/ >>"$LOGFILE" 2>&1
661
	echo -e "\033[60Gdone"
670
	echo_right "done"
662
671
663
	# prevent join from failing if umask is modified (Bug #21587)
672
	# prevent join from failing if umask is modified (Bug #21587)
664
	chmod 755 /etc/univention/ssl
673
	chmod 755 /etc/univention/ssl
 Lines 679-695   if [ "$server_role" = "domaincontroller_backup" ]; then Link Here 
679
		ssl/organizationalunit="$ssl_organizationalunit" \
688
		ssl/organizationalunit="$ssl_organizationalunit" \
680
		ssl/common="$ssl_common" \
689
		ssl/common="$ssl_common" \
681
		ssl/email="$ssl_email" \
690
		ssl/email="$ssl_email" \
682
		>>/var/log/univention/join.log 2>&1
691
		>>"$LOGFILE" 2>&1
683
	echo -e "\033[60Gdone"
692
	echo_right "done"
684
693
685
	echo -n "Restart LDAP Server: "
694
	echo -n "Restart LDAP Server: "
686
	/etc/init.d/slapd restart >>/var/log/univention/join.log 2>&1
695
	/etc/init.d/slapd restart >>/var/log/univention/join.log 2>&1
687
	echo -e "\033[60Gdone"
696
	echo_right "done"
688
697
689
	#TODO: implement a real sync
698
	#TODO: implement a real sync
690
	echo -n "Sync Kerberos settings: "
699
	echo -n "Sync Kerberos settings: "
691
	univention-scp "$DCPWD" -r "${DCACCOUNT}@${DCNAME}:/var/lib/heimdal-kdc/*" /var/lib/heimdal-kdc/ >>/var/log/univention/join.log 2>&1
700
	univention-scp "$DCPWD" -r "${DCACCOUNT}@${DCNAME}:/var/lib/heimdal-kdc/*" /var/lib/heimdal-kdc/ >>/var/log/univention/join.log 2>&1
692
	echo -e "\033[60Gdone"
701
	echo_right "done"
693
702
694
703
695
	# invalidate the nscd hosts cache
704
	# invalidate the nscd hosts cache
 Lines 699-705   if [ "$server_role" = "domaincontroller_backup" ]; then Link Here 
699
		ldap/server/name?"$DCNAME" \
708
		ldap/server/name?"$DCNAME" \
700
		ldap/master?"$DCNAME" \
709
		ldap/master?"$DCNAME" \
701
		kerberos/adminserver?"$DCNAME" \
710
		kerberos/adminserver?"$DCNAME" \
702
		>>/var/log/univention/join.log 2>&1
711
		>>"$LOGFILE" 2>&1
703
	set_kerberos_realm "$DCPWD" "$DCACCOUNT" "$DCNAME" "$REALM"
712
	set_kerberos_realm "$DCPWD" "$DCACCOUNT" "$DCNAME" "$REALM"
704
	set_windows_domain "$DCPWD" "$DCACCOUNT" "$DCNAME" "$WINDOM"
713
	set_windows_domain "$DCPWD" "$DCACCOUNT" "$DCNAME" "$WINDOM"
705
	eval "$(univention-config-registry shell)"
714
	eval "$(univention-config-registry shell)"
 Lines 722-728   elif [ "$server_role" = "domaincontroller_slave" ]; then Link Here 
722
731
723
	univention-scp "$DCPWD" "${DCACCOUNT}@${DCNAME}:/etc/ldap-backup.secret /etc/ldap-backup.secret" >/var/log/univention/join.log 2>&1
732
	univention-scp "$DCPWD" "${DCACCOUNT}@${DCNAME}:/etc/ldap-backup.secret /etc/ldap-backup.secret" >/var/log/univention/join.log 2>&1
724
733
725
	echo -e "\033[60Gdone"
734
	echo_right "done"
726
735
727
	univention-config-registry set \
736
	univention-config-registry set \
728
		ldap/server/name="$hostname.$domainname" \
737
		ldap/server/name="$hostname.$domainname" \
 Lines 731-737   elif [ "$server_role" = "domaincontroller_slave" ]; then Link Here 
731
		ldap/master="$DCNAME" \
740
		ldap/master="$DCNAME" \
732
		ldap/master/port?7389 \
741
		ldap/master/port?7389 \
733
		ldap/server/type=slave \
742
		ldap/server/type=slave \
734
		>>/var/log/univention/join.log 2>&1
743
		>>"$LOGFILE" 2>&1
735
744
736
	mkdir -p /etc/univention/ssl/ucsCA
745
	mkdir -p /etc/univention/ssl/ucsCA
737
	univention-scp "$DCPWD" -q "${DCACCOUNT}@${DCNAME}:/etc/univention/ssl/ucsCA/CAcert.pem" /etc/univention/ssl/ucsCA/ >>/var/log/univention/join.log 2>&1
746
	univention-scp "$DCPWD" -q "${DCACCOUNT}@${DCNAME}:/etc/univention/ssl/ucsCA/CAcert.pem" /etc/univention/ssl/ucsCA/ >>/var/log/univention/join.log 2>&1
 Lines 750-760   elif [ "$server_role" = "domaincontroller_slave" ]; then Link Here 
750
759
751
	echo -n "Restart LDAP Server: "
760
	echo -n "Restart LDAP Server: "
752
	/etc/init.d/slapd restart >>/var/log/univention/join.log 2>&1
761
	/etc/init.d/slapd restart >>/var/log/univention/join.log 2>&1
753
	echo -e "\033[60Gdone"
762
	echo_right "done"
754
763
755
	echo -n "Sync Kerberos settings: "
764
	echo -n "Sync Kerberos settings: "
756
	univention-scp "$DCPWD" -q -r "${DCACCOUNT}@${DCNAME}:/var/lib/heimdal-kdc/*" /var/lib/heimdal-kdc/ >>/var/log/univention/join.log 2>&1
765
	univention-scp "$DCPWD" -q -r "${DCACCOUNT}@${DCNAME}:/var/lib/heimdal-kdc/*" /var/lib/heimdal-kdc/ >>/var/log/univention/join.log 2>&1
757
	echo -e "\033[60Gdone"
766
	echo_right "done"
758
767
759
	mkdir -p /var/lib/univention-ldap/notify/
768
	mkdir -p /var/lib/univention-ldap/notify/
760
769
 Lines 765-771   elif [ "$server_role" = "domaincontroller_slave" ]; then Link Here 
765
		ldap/server/name?"$DCNAME" \
774
		ldap/server/name?"$DCNAME" \
766
		ldap/master?"$DCNAME" \
775
		ldap/master?"$DCNAME" \
767
		kerberos/adminserver?"$DCNAME" \
776
		kerberos/adminserver?"$DCNAME" \
768
		>>/var/log/univention/join.log 2>&1
777
		>>"$LOGFILE" 2>&1
769
	set_kerberos_realm "$DCPWD" "$DCACCOUNT" "$DCNAME" "$REALM"
778
	set_kerberos_realm "$DCPWD" "$DCACCOUNT" "$DCNAME" "$REALM"
770
	set_windows_domain "$DCPWD" "$DCACCOUNT" "$DCNAME" "$WINDOM"
779
	set_windows_domain "$DCPWD" "$DCACCOUNT" "$DCNAME" "$WINDOM"
771
	echo -n "0" >/var/lib/univention-ldap/schema/id/id
780
	echo -n "0" >/var/lib/univention-ldap/schema/id/id
 Lines 807-813   elif [ "$server_role" = "memberserver" ]; then Link Here 
807
		ldap/master?"$DCNAME" \
816
		ldap/master?"$DCNAME" \
808
		ldap/master/port?7389 \
817
		ldap/master/port?7389 \
809
		kerberos/adminserver?"$DCNAME" \
818
		kerberos/adminserver?"$DCNAME" \
810
		>>/var/log/univention/join.log 2>&1
819
		>>"$LOGFILE" 2>&1
811
	set_kerberos_realm "$DCPWD" "$DCACCOUNT" "$DCNAME" "$REALM"
820
	set_kerberos_realm "$DCPWD" "$DCACCOUNT" "$DCNAME" "$REALM"
812
	set_windows_domain "$DCPWD" "$DCACCOUNT" "$DCNAME" "$WINDOM"
821
	set_windows_domain "$DCPWD" "$DCACCOUNT" "$DCNAME" "$WINDOM"
813
	touch /var/univention-join/joined
822
	touch /var/univention-join/joined
 Lines 845-851   else Link Here 
845
		ldap/master/port?7389 \
854
		ldap/master/port?7389 \
846
		kerberos/adminserver="$DCNAME" \
855
		kerberos/adminserver="$DCNAME" \
847
		nsswitch/ldap=yes \
856
		nsswitch/ldap=yes \
848
		>>/var/log/univention/join.log 2>&1
857
		>>"$LOGFILE" 2>&1
849
	set_kerberos_realm "$DCPWD" "$DCACCOUNT" "$DCNAME" "$REALM"
858
	set_kerberos_realm "$DCPWD" "$DCACCOUNT" "$DCNAME" "$REALM"
850
	set_windows_domain "$DCPWD" "$DCACCOUNT" "$DCNAME" "$WINDOM"
859
	set_windows_domain "$DCPWD" "$DCACCOUNT" "$DCNAME" "$WINDOM"
851
	grep -q '^TLS_CACERT' /etc/ldap/ldap.conf || echo "TLS_CACERT /etc/univention/ssl/ucsCA/CAcert.pem" >>/etc/ldap/ldap.conf
860
	grep -q '^TLS_CACERT' /etc/ldap/ldap.conf || echo "TLS_CACERT /etc/univention/ssl/ucsCA/CAcert.pem" >>/etc/ldap/ldap.conf
 Lines 859-870   else Link Here 
859
fi
868
fi
860
869
861
if [ -d /etc/runit/univention-directory-notifier ]; then
870
if [ -d /etc/runit/univention-directory-notifier ]; then
862
	/etc/init.d/univention-directory-notifier restart >>/var/log/univention/join.log 2>&1
871
	/etc/init.d/univention-directory-notifier restart >>"$LOGFILE" 2>&1
863
	sleep 3
872
	sleep 3
864
fi
873
fi
865
874
866
if [ -d /etc/runit/univention-directory-listener ]; then
875
if [ -d /etc/runit/univention-directory-listener ]; then
867
	/etc/init.d/univention-directory-listener restart >>/var/log/univention/join.log 2>&1
876
	/etc/init.d/univention-directory-listener restart >>"$LOGFILE" 2>&1
868
fi
877
fi
869
878
870
varname="interfaces_${interfaces_primary:-eth0}_type"
879
varname="interfaces_${interfaces_primary:-eth0}_type"
(-)a/branches/ucs-3.2/ucs-3.2-0/management/univention-join/univention-run-join-scripts (-7 / +10 lines)
 Lines 79-84   failed_message () { Link Here 
79
	exit 1
79
	exit 1
80
}
80
}
81
81
82
echo_right () {
83
	local text="$*"
84
	echo -e "\033[$((${COLUMNS:-80}-${#text}))G${text}"
85
}
86
82
while [ $# -gt 0 ]
87
while [ $# -gt 0 ]
83
do
88
do
84
	case "$1" in
89
	case "$1" in
 Lines 177-183   if [ ! "$server_role" = "domaincontroller_master" ] || [ -n "$ASK_PASS" ] ; then Link Here 
177
		then
182
		then
178
			failed_message "Invalid credentials"
183
			failed_message "Invalid credentials"
179
		else
184
		else
180
			echo -e "\033[60Gdone"
185
			echo_right "done"
181
		fi
186
		fi
182
	fi
187
	fi
183
fi
188
fi
 Lines 222-233   then Link Here 
222
		echo "RUNNING $(basename "$i")"
227
		echo "RUNNING $(basename "$i")"
223
228
224
		if ! joinscript_extern_init "$i"; then
229
		if ! joinscript_extern_init "$i"; then
225
			echo -e "\033[60Gskipped (invalid joinscript)" >&3
230
			echo_right "skipped (invalid joinscript)" >&3
226
			echo "EXITCODE=invalid_joinscript"
231
			echo "EXITCODE=invalid_joinscript"
227
			continue
232
			continue
228
		fi
233
		fi
229
		if joinscript_check_already_executed && [ -z "$JOIN_FORCE" ]; then
234
		if joinscript_check_already_executed && [ -z "$JOIN_FORCE" ]; then
230
			echo -e "\033[60Gskipped (already executed)" >&3
235
			echo_right "skipped (already executed)" >&3
231
			echo "EXITCODE=already_executed"
236
			echo "EXITCODE=already_executed"
232
			continue
237
			continue
233
		fi
238
		fi
 Lines 240-248   then Link Here 
240
		RET=$?
245
		RET=$?
241
		echo "EXITCODE=$RET"
246
		echo "EXITCODE=$RET"
242
		if [ $RET != 0 ]; then
247
		if [ $RET != 0 ]; then
243
			echo -e "\033[60Gfailed (exitcode: $RET)" >&3
248
			echo_right "failed (exitcode: $RET)" >&3
244
		else
249
		else
245
			echo -e "\033[60Gdone" >&3
250
			echo_right "done" >&3
246
			delete_unjoinscript "$(basename "$i")"
251
			delete_unjoinscript "$(basename "$i")"
247
		fi
252
		fi
248
	done
253
	done
249
- 
250
--
251
.../management/univention-join/univention-join     | 26 +++++-----------------
254
.../management/univention-join/univention-join     | 26 +++++-----------------
252
1 file changed, 5 insertions(+), 21 deletions(-)
255
1 file changed, 5 insertions(+), 21 deletions(-)
(-)a/branches/ucs-3.2/ucs-3.2-0/management/univention-join/univention-join (-23 / +5 lines)
 Lines 367-393   then Link Here 
367
fi
367
fi
368
368
369
369
370
# get master versions
370
get_master_version () {
371
versions="$(univention-ssh "$DCPWD" "${DCACCOUNT}@${DCNAME}" /usr/sbin/ucr search --brief ^version/)"
371
	local version_version version_patchlevel
372
OLDIFS=$IFS
372
	eval "$(univention-ssh "$DCPWD" "${DCACCOUNT}@${DCNAME}" /usr/sbin/ucr shell version/version version/patchlevel)"
373
IFS=$'\n'
373
	echo "${version_version}.${version_patchlevel}"
374
for i in $versions; do
374
}
375
	key=${i%%: *}
376
	value=${i#*: }
377
	case "$key" in
378
		"version/version")
379
			master_version="$value"
380
			;;
381
		"version/patchlevel")
382
			master_patchlevel="$value"
383
			;;
384
		"version/releasename")
385
			master_releasename="$value"
386
			;;
387
	esac
388
done
389
IFS=$OLDIFS
390
391
# check join constraints
375
# check join constraints
392
log "running version check"
376
log "running version check"
393
377
394
- 
395
--
396
.../management/univention-join/univention-join     | 28 ++++++++--------------
378
.../management/univention-join/univention-join     | 28 ++++++++--------------
397
1 file changed, 10 insertions(+), 18 deletions(-)
379
1 file changed, 10 insertions(+), 18 deletions(-)
(-)a/branches/ucs-3.2/ucs-3.2-0/management/univention-join/univention-join (-20 / +10 lines)
 Lines 150-155   download_host_certificate () { Link Here 
150
	failed_message "failed to get host certificate"
150
	failed_message "failed to get host certificate"
151
}
151
}
152
152
153
invalidate_nscd_cache () {
154
	# <https://forge.univention.org/bugzilla/show_bug.cgi?id=30886>
155
	nscd -i hosts
156
}
157
153
158
154
check_ldap_tls_connection () {
159
check_ldap_tls_connection () {
155
	echo -n "Check TLS connection "
160
	echo -n "Check TLS connection "
 Lines 490-502   do Link Here 
490
	args+=(-mac "$(cat "${iface}/address")")
495
	args+=(-mac "$(cat "${iface}/address")")
491
done
496
done
492
497
493
# invalidate the nscd hosts cache
494
#  https://forge.univention.org/bugzilla/show_bug.cgi?id=30886
495
nscd -i hosts
496
497
echo -n "Join Computer Account: "
498
echo -n "Join Computer Account: "
498
args+=(-role "$server_role" -hostname "$hostname" -domainname "$domainname")
499
args+=(-role "$server_role" -hostname "$hostname" -domainname "$domainname")
499
# Copy local $DCPWD to remote $DCPWD' and invoke univention-join remotely
500
# Copy local $DCPWD to remote $DCPWD' and invoke univention-join remotely
501
invalidate_nscd_cache
500
univention-ssh --no-split "$DCPWD" "${DCACCOUNT}@${DCNAME}" \
502
univention-ssh --no-split "$DCPWD" "${DCACCOUNT}@${DCNAME}" \
501
	'DCPWD=$(mktemp) && trap "rm -f \"$DCPWD\"" EXIT && cat >"$DCPWD" && /usr/share/univention-join/univention-server-join -bindpwfile "$DCPWD"' \
503
	'DCPWD=$(mktemp) && trap "rm -f \"$DCPWD\"" EXIT && cat >"$DCPWD" && /usr/share/univention-join/univention-server-join -bindpwfile "$DCPWD"' \
502
	"$(bashquote "${args[@]}")" <"$DCPWD" 2>&1 | tee "$USERTMP/log" >>"$LOGFILE"
504
	"$(bashquote "${args[@]}")" <"$DCPWD" 2>&1 | tee "$USERTMP/log" >>"$LOGFILE"
 Lines 684-693   if [ "$server_role" = "domaincontroller_backup" ]; then Link Here 
684
	univention-scp "$DCPWD" -r "${DCACCOUNT}@${DCNAME}:/var/lib/heimdal-kdc/*" /var/lib/heimdal-kdc/ >>/var/log/univention/join.log 2>&1
686
	univention-scp "$DCPWD" -r "${DCACCOUNT}@${DCNAME}:/var/lib/heimdal-kdc/*" /var/lib/heimdal-kdc/ >>/var/log/univention/join.log 2>&1
685
	echo_right "done"
687
	echo_right "done"
686
688
687
689
	invalidate_nscd_cache
688
	# invalidate the nscd hosts cache
689
	nscd -i hosts
690
691
	univention-config-registry set \
690
	univention-config-registry set \
692
		ldap/server/name?"$DCNAME" \
691
		ldap/server/name?"$DCNAME" \
693
		ldap/master?"$DCNAME" \
692
		ldap/master?"$DCNAME" \
 Lines 751-759   elif [ "$server_role" = "domaincontroller_slave" ]; then Link Here 
751
750
752
	mkdir -p /var/lib/univention-ldap/notify/
751
	mkdir -p /var/lib/univention-ldap/notify/
753
752
754
	# invalidate the nscd hosts cache
753
	invalidate_nscd_cache
755
	nscd -i hosts
756
757
	univention-config-registry set \
754
	univention-config-registry set \
758
		ldap/server/name?"$DCNAME" \
755
		ldap/server/name?"$DCNAME" \
759
		ldap/master?"$DCNAME" \
756
		ldap/master?"$DCNAME" \
 Lines 791-799   elif [ "$server_role" = "memberserver" ]; then Link Here 
791
		>>/var/log/univention/join.log 2>&1
788
		>>/var/log/univention/join.log 2>&1
792
	grep -q '^TLS_CACERT' /etc/ldap/ldap.conf || echo "TLS_CACERT /etc/univention/ssl/ucsCA/CAcert.pem" >>/etc/ldap/ldap.conf
789
	grep -q '^TLS_CACERT' /etc/ldap/ldap.conf || echo "TLS_CACERT /etc/univention/ssl/ucsCA/CAcert.pem" >>/etc/ldap/ldap.conf
793
790
794
	# invalidate the nscd hosts cache
791
	invalidate_nscd_cache
795
	nscd -i hosts
796
797
	univention-config-registry set \
792
	univention-config-registry set \
798
		ldap/server/name?"$DCNAME" \
793
		ldap/server/name?"$DCNAME" \
799
		ldap/server/port?7389 \
794
		ldap/server/port?7389 \
 Lines 827-836   else Link Here 
827
	check_ldap_tls_connection
822
	check_ldap_tls_connection
828
823
829
	download_host_certificate
824
	download_host_certificate
830
825
	invalidate_nscd_cache
831
	# invalidate the nscd hosts cache
832
	nscd -i hosts
833
834
	univention-config-registry set \
826
	univention-config-registry set \
835
		ldap/server/name="$DCNAME" \
827
		ldap/server/name="$DCNAME" \
836
		ldap/server/port?7389 \
828
		ldap/server/port?7389 \
837
- 
838
--
839
.../management/univention-join/univention-join     | 60 ++++++++++------------
829
.../management/univention-join/univention-join     | 60 ++++++++++------------
840
1 file changed, 26 insertions(+), 34 deletions(-)
830
1 file changed, 26 insertions(+), 34 deletions(-)
(-)a/branches/ucs-3.2/ucs-3.2-0/management/univention-join/univention-join (-36 / +26 lines)
 Lines 126-131   bashquote () { # quote arguments for eval Link Here 
126
	echo -n "${escaped[@]}"
126
	echo -n "${escaped[@]}"
127
}
127
}
128
128
129
fetch_secret () {
130
	local name="/etc/${1}.secret"
131
	backup_secret "$1"
132
	echo -n "Sync ${name}: "
133
	if univention-scp "$DCPWD" "${DCACCOUNT}@${DCNAME}:${name} ${name}" >>"$LOGIFLE" 2>&1 &&
134
		[ -s "${name}" ]
135
	then
136
		echo_right "done"
137
	else
138
		echo_right "failed"
139
		failed_message "${name} not found"
140
	fi
141
}
142
backup_secret () {
143
	local name="/etc/${1}.secret"
144
	if [ -e "${name}" ]
145
	then
146
		cat "${name}" >>"${name}.SAVE"
147
		chmod 0600 "${name}.SAVE"
148
	fi
149
}
150
129
download_host_certificate () {
151
download_host_certificate () {
130
	echo -n "Download host certificate "
152
	echo -n "Download host certificate "
131
	local HOSTPWD="/etc/machine.secret"
153
	local HOSTPWD="/etc/machine.secret"
 Lines 515-530   then Link Here 
515
	kpwd="$(sed -ne 's|^KerberosPasswd="\(.*\)" *|\1|p' <"$USERTMP/log")"
537
	kpwd="$(sed -ne 's|^KerberosPasswd="\(.*\)" *|\1|p' <"$USERTMP/log")"
516
538
517
	if [ -n "$kpwd" ]; then
539
	if [ -n "$kpwd" ]; then
518
		if [ -e /etc/machine.secret ]; then
540
		backup_secret "machine"
519
			cat /etc/machine.secret >>/etc/machine.secret.SAVE
520
		fi
521
522
		echo -n "$kpwd" >/etc/machine.secret
541
		echo -n "$kpwd" >/etc/machine.secret
523
		fromdos /etc/machine.secret
542
		fromdos /etc/machine.secret
524
		chmod 600 /etc/machine.secret
543
		chmod 600 /etc/machine.secret
525
		if [ -e /etc/machine.secret.SAVE ]; then
526
			chmod 600 /etc/machine.secret.SAVE
527
		fi
528
	else
544
	else
529
		if [ -n "$res_message" ]; then
545
		if [ -n "$res_message" ]; then
530
			failed_message "$res_message"
546
			failed_message "$res_message"
 Lines 624-647   set_windows_domain () { Link Here 
624
}
640
}
625
641
626
if [ "$server_role" = "domaincontroller_backup" ]; then
642
if [ "$server_role" = "domaincontroller_backup" ]; then
627
643
	fetch_secret "ldap"
628
	if [ -e "/etc/ldap.secret" ]; then cat /etc/ldap.secret >>/etc/ldap.secret.SAVE; fi
644
	fetch_secret "ldap-backup"
629
	if [ -e "/etc/ldap-backup.secret" ]; then cat /etc/ldap-backup.secret >>/etc/ldap-backup.secret.SAVE; fi
630
631
	echo -n "Sync ldap.secret: "
632
	univention-scp "$DCPWD" -q "${DCACCOUNT}@${DCNAME}:/etc/ldap.secret" /etc/ldap.secret >>/var/log/univention/join.log 2>&1
633
	if [ ! -e "/etc/ldap.secret" ]; then
634
		failed_message "/etc/ldap.secret not found"
635
	fi
636
	echo_right "done"
637
638
	echo -n "Sync ldap-backup.secret: "
639
	univention-scp "$DCPWD" -q "${DCACCOUNT}@${DCNAME}:/etc/ldap-backup.secret" /etc/ldap-backup.secret >>/var/log/univention/join.log 2>&1
640
	if [ ! -e "/etc/ldap-backup.secret" ]; then
641
		failed_message "/etc/ldap-backup.secret not found"
642
	fi
643
	echo_right "done"
644
645
	univention-config-registry set \
645
	univention-config-registry set \
646
		ldap/server/name="$hostname.$domainname" \
646
		ldap/server/name="$hostname.$domainname" \
647
		ldap/server/ip="$IP" \
647
		ldap/server/ip="$IP" \
 Lines 707-721   if [ "$server_role" = "domaincontroller_backup" ]; then Link Here 
707
	run_join_scripts
707
	run_join_scripts
708
708
709
elif [ "$server_role" = "domaincontroller_slave" ]; then
709
elif [ "$server_role" = "domaincontroller_slave" ]; then
710
710
	fetch_secret "ldap-backup"
711
	echo -n "Sync ldap-backup.secret: "
712
713
	if [ -e "/etc/ldap-backup.secret" ]; then cat /etc/ldap-backup.secret >>/etc/ldap-backup.secret.SAVE; fi
714
715
	univention-scp "$DCPWD" "${DCACCOUNT}@${DCNAME}:/etc/ldap-backup.secret /etc/ldap-backup.secret" >/var/log/univention/join.log 2>&1
716
717
	echo_right "done"
718
719
	univention-config-registry set \
711
	univention-config-registry set \
720
		ldap/server/name="$hostname.$domainname" \
712
		ldap/server/name="$hostname.$domainname" \
721
		ldap/server/ip="$IP" \
713
		ldap/server/ip="$IP" \
722
- 
723
--
724
.../management/univention-join/univention-join     | 22 ++++------------------
714
.../management/univention-join/univention-join     | 22 ++++------------------
725
1 file changed, 4 insertions(+), 18 deletions(-)
715
1 file changed, 4 insertions(+), 18 deletions(-)
(-)a/branches/ucs-3.2/ucs-3.2-0/management/univention-join/univention-join (-20 / +4 lines)
 Lines 192-197   check_ldap_tls_connection () { Link Here 
192
}
192
}
193
193
194
run_join_scripts () {
194
run_join_scripts () {
195
	eval "$(univention-config-registry shell)"
196
197
	: > /var/univention-join/joined
198
	ln -sf /var/univention-join/joined /usr/share/univention-join/.joined
195
199
196
	LC_COLLATE="C"
200
	LC_COLLATE="C"
197
	if test -d "/usr/lib/univention-install/"; then
201
	if test -d "/usr/lib/univention-install/"; then
 Lines 694-706   if [ "$server_role" = "domaincontroller_backup" ]; then Link Here 
694
		>>"$LOGFILE" 2>&1
698
		>>"$LOGFILE" 2>&1
695
	set_kerberos_realm "$DCPWD" "$DCACCOUNT" "$DCNAME" "$REALM"
699
	set_kerberos_realm "$DCPWD" "$DCACCOUNT" "$DCNAME" "$REALM"
696
	set_windows_domain "$DCPWD" "$DCACCOUNT" "$DCNAME" "$WINDOM"
700
	set_windows_domain "$DCPWD" "$DCACCOUNT" "$DCNAME" "$WINDOM"
697
	eval "$(univention-config-registry shell)"
698
699
	mkdir -p /var/lib/univention-ldap/notify/
701
	mkdir -p /var/lib/univention-ldap/notify/
700
702
701
	touch /var/univention-join/joined
702
	ln -sf /var/univention-join/joined /usr/share/univention-join/.joined
703
704
	echo -n "0" >/var/lib/univention-ldap/schema/id/id
703
	echo -n "0" >/var/lib/univention-ldap/schema/id/id
705
	chown listener /var/lib/univention-ldap/schema/id/id
704
	chown listener /var/lib/univention-ldap/schema/id/id
706
705
 Lines 752-761   elif [ "$server_role" = "domaincontroller_slave" ]; then Link Here 
752
	set_windows_domain "$DCPWD" "$DCACCOUNT" "$DCNAME" "$WINDOM"
751
	set_windows_domain "$DCPWD" "$DCACCOUNT" "$DCNAME" "$WINDOM"
753
	echo -n "0" >/var/lib/univention-ldap/schema/id/id
752
	echo -n "0" >/var/lib/univention-ldap/schema/id/id
754
	chown listener /var/lib/univention-ldap/schema/id/id
753
	chown listener /var/lib/univention-ldap/schema/id/id
755
756
	touch /var/univention-join/joined
757
	ln -sf /var/univention-join/joined /usr/share/univention-join/.joined
758
759
	run_join_scripts
754
	run_join_scripts
760
755
761
elif [ "$server_role" = "memberserver" ]; then
756
elif [ "$server_role" = "memberserver" ]; then
 Lines 790-798   elif [ "$server_role" = "memberserver" ]; then Link Here 
790
		>>"$LOGFILE" 2>&1
785
		>>"$LOGFILE" 2>&1
791
	set_kerberos_realm "$DCPWD" "$DCACCOUNT" "$DCNAME" "$REALM"
786
	set_kerberos_realm "$DCPWD" "$DCACCOUNT" "$DCNAME" "$REALM"
792
	set_windows_domain "$DCPWD" "$DCACCOUNT" "$DCNAME" "$WINDOM"
787
	set_windows_domain "$DCPWD" "$DCACCOUNT" "$DCNAME" "$WINDOM"
793
	touch /var/univention-join/joined
794
	ln -sf /var/univention-join/joined /usr/share/univention-join/.joined
795
796
	run_join_scripts
788
	run_join_scripts
797
789
798
else
790
else
 Lines 826-837   else Link Here 
826
	set_kerberos_realm "$DCPWD" "$DCACCOUNT" "$DCNAME" "$REALM"
818
	set_kerberos_realm "$DCPWD" "$DCACCOUNT" "$DCNAME" "$REALM"
827
	set_windows_domain "$DCPWD" "$DCACCOUNT" "$DCNAME" "$WINDOM"
819
	set_windows_domain "$DCPWD" "$DCACCOUNT" "$DCNAME" "$WINDOM"
828
	grep -q '^TLS_CACERT' /etc/ldap/ldap.conf || echo "TLS_CACERT /etc/univention/ssl/ucsCA/CAcert.pem" >>/etc/ldap/ldap.conf
820
	grep -q '^TLS_CACERT' /etc/ldap/ldap.conf || echo "TLS_CACERT /etc/univention/ssl/ucsCA/CAcert.pem" >>/etc/ldap/ldap.conf
829
830
	touch /var/univention-join/joined
831
	ln -sf /var/univention-join/joined /usr/share/univention-join/.joined
832
833
	eval "$(univention-config-registry shell)"
834
835
	run_join_scripts
821
	run_join_scripts
836
fi
822
fi
837
823
838
- 
839
--
840
.../ucs-3.2-0/management/univention-join/univention-join | 16 +++++++---------
824
.../ucs-3.2-0/management/univention-join/univention-join | 16 +++++++---------
841
1 file changed, 7 insertions(+), 9 deletions(-)
825
1 file changed, 7 insertions(+), 9 deletions(-)
(-)a/branches/ucs-3.2/ucs-3.2-0/management/univention-join/univention-join (-11 / +7 lines)
 Lines 177-182   invalidate_nscd_cache () { Link Here 
177
	nscd -i hosts
177
	nscd -i hosts
178
}
178
}
179
179
180
reset_listener_schema () {
181
	mkdir -p /var/lib/univention-ldap/notify/
182
	echo -n "0" >/var/lib/univention-ldap/schema/id/id
183
	chown listener /var/lib/univention-ldap/schema/id/id
184
}
180
185
181
check_ldap_tls_connection () {
186
check_ldap_tls_connection () {
182
	echo -n "Check TLS connection "
187
	echo -n "Check TLS connection "
 Lines 698-708   if [ "$server_role" = "domaincontroller_backup" ]; then Link Here 
698
		>>"$LOGFILE" 2>&1
703
		>>"$LOGFILE" 2>&1
699
	set_kerberos_realm "$DCPWD" "$DCACCOUNT" "$DCNAME" "$REALM"
704
	set_kerberos_realm "$DCPWD" "$DCACCOUNT" "$DCNAME" "$REALM"
700
	set_windows_domain "$DCPWD" "$DCACCOUNT" "$DCNAME" "$WINDOM"
705
	set_windows_domain "$DCPWD" "$DCACCOUNT" "$DCNAME" "$WINDOM"
701
	mkdir -p /var/lib/univention-ldap/notify/
706
	reset_listener_schema
702
703
	echo -n "0" >/var/lib/univention-ldap/schema/id/id
704
	chown listener /var/lib/univention-ldap/schema/id/id
705
706
	run_join_scripts
707
	run_join_scripts
707
708
708
elif [ "$server_role" = "domaincontroller_slave" ]; then
709
elif [ "$server_role" = "domaincontroller_slave" ]; then
 Lines 739-746   elif [ "$server_role" = "domaincontroller_slave" ]; then Link Here 
739
	univention-scp "$DCPWD" -q -r "${DCACCOUNT}@${DCNAME}:/var/lib/heimdal-kdc/*" /var/lib/heimdal-kdc/ >>/var/log/univention/join.log 2>&1
740
	univention-scp "$DCPWD" -q -r "${DCACCOUNT}@${DCNAME}:/var/lib/heimdal-kdc/*" /var/lib/heimdal-kdc/ >>/var/log/univention/join.log 2>&1
740
	echo_right "done"
741
	echo_right "done"
741
742
742
	mkdir -p /var/lib/univention-ldap/notify/
743
744
	invalidate_nscd_cache
743
	invalidate_nscd_cache
745
	univention-config-registry set \
744
	univention-config-registry set \
746
		ldap/server/name?"$DCNAME" \
745
		ldap/server/name?"$DCNAME" \
 Lines 749-756   elif [ "$server_role" = "domaincontroller_slave" ]; then Link Here 
749
		>>"$LOGFILE" 2>&1
748
		>>"$LOGFILE" 2>&1
750
	set_kerberos_realm "$DCPWD" "$DCACCOUNT" "$DCNAME" "$REALM"
749
	set_kerberos_realm "$DCPWD" "$DCACCOUNT" "$DCNAME" "$REALM"
751
	set_windows_domain "$DCPWD" "$DCACCOUNT" "$DCNAME" "$WINDOM"
750
	set_windows_domain "$DCPWD" "$DCACCOUNT" "$DCNAME" "$WINDOM"
752
	echo -n "0" >/var/lib/univention-ldap/schema/id/id
751
	reset_listener_schema
753
	chown listener /var/lib/univention-ldap/schema/id/id
754
	run_join_scripts
752
	run_join_scripts
755
753
756
elif [ "$server_role" = "memberserver" ]; then
754
elif [ "$server_role" = "memberserver" ]; then
757
- 
758
--
759
.../management/univention-join/univention-join     | 63 ++++++++--------------
755
.../management/univention-join/univention-join     | 63 ++++++++--------------
760
1 file changed, 21 insertions(+), 42 deletions(-)
756
1 file changed, 21 insertions(+), 42 deletions(-)
(-)a/branches/ucs-3.2/ucs-3.2-0/management/univention-join/univention-join (-44 / +21 lines)
 Lines 648-653   set_windows_domain () { Link Here 
648
	univention-config-registry set windows/domain="$windom" >>"$LOGFILE" 2>&1
648
	univention-config-registry set windows/domain="$windom" >>"$LOGFILE" 2>&1
649
}
649
}
650
650
651
copy_ucs_ca () {
652
	mkdir -p /etc/univention/ssl/ucsCA
653
654
	univention-scp "$DCPWD" -q "${DCACCOUNT}@${DCNAME}:/etc/univention/ssl/ucsCA/CAcert.pem" /etc/univention/ssl/ucsCA/ >>"$LOGFILE" 2>&1
655
	if [ ! -e /etc/univention/ssl/ucsCA/CAcert.pem ]; then
656
		univention-scp "$DCPWD" -q "${DCACCOUNT}@${DCNAME}:/etc/univention/ssl/udsCA/CAcert.pem" /etc/univention/ssl/ucsCA/ >>"$LOGFILE" 2>&1
657
	fi
658
	fix_ssl_permissions
659
}
660
661
fix_ssl_permissions () {
662
	# prevent join from failing if umask is modified (Bug #21587)
663
	chmod 755 /etc/univention/ssl
664
	chmod 755 /etc/univention/ssl/ucsCA
665
	chmod 644 /etc/univention/ssl/ucsCA/CAcert.pem
666
}
667
651
if [ "$server_role" = "domaincontroller_backup" ]; then
668
if [ "$server_role" = "domaincontroller_backup" ]; then
652
	fetch_secret "ldap"
669
	fetch_secret "ldap"
653
	fetch_secret "ldap-backup"
670
	fetch_secret "ldap-backup"
 Lines 664-674   if [ "$server_role" = "domaincontroller_backup" ]; then Link Here 
664
	univention-ssh-rsync "$DCPWD" -az "${DCACCOUNT}@${DCNAME}:/etc/univention/ssl/*" /etc/univention/ssl/ >>"$LOGFILE" 2>&1
681
	univention-ssh-rsync "$DCPWD" -az "${DCACCOUNT}@${DCNAME}:/etc/univention/ssl/*" /etc/univention/ssl/ >>"$LOGFILE" 2>&1
665
	echo_right "done"
682
	echo_right "done"
666
683
667
	# prevent join from failing if umask is modified (Bug #21587)
684
	fix_ssl_permissions
668
	chmod 755 /etc/univention/ssl
669
	chmod 755 /etc/univention/ssl/ucsCA
670
	chmod 644 /etc/univention/ssl/ucsCA/CAcert.pem
671
672
	check_ldap_tls_connection
685
	check_ldap_tls_connection
673
686
674
	download_host_certificate
687
	download_host_certificate
 Lines 716-733   elif [ "$server_role" = "domaincontroller_slave" ]; then Link Here 
716
		ldap/master/port?7389 \
729
		ldap/master/port?7389 \
717
		ldap/server/type=slave \
730
		ldap/server/type=slave \
718
		>>"$LOGFILE" 2>&1
731
		>>"$LOGFILE" 2>&1
719
732
	copy_ucs_ca
720
	mkdir -p /etc/univention/ssl/ucsCA
721
	univention-scp "$DCPWD" -q "${DCACCOUNT}@${DCNAME}:/etc/univention/ssl/ucsCA/CAcert.pem" /etc/univention/ssl/ucsCA/ >>/var/log/univention/join.log 2>&1
722
	if [ ! -e /etc/univention/ssl/ucsCA/CAcert.pem ]; then
723
		univention-scp "$DCPWD" -q "${DCACCOUNT}@${DCNAME}:/etc/univention/ssl/udsCA/CAcert.pem" /etc/univention/ssl/ucsCA/ >>/var/log/univention/join.log 2>&1
724
	fi
725
726
	# prevent join from failing if umask is modified (Bug #21587)
727
	chmod 755 /etc/univention/ssl
728
	chmod 755 /etc/univention/ssl/ucsCA
729
	chmod 644 /etc/univention/ssl/ucsCA/CAcert.pem
730
731
	check_ldap_tls_connection
733
	check_ldap_tls_connection
732
734
733
	download_host_certificate
735
	download_host_certificate
 Lines 752-768   elif [ "$server_role" = "domaincontroller_slave" ]; then Link Here 
752
	run_join_scripts
754
	run_join_scripts
753
755
754
elif [ "$server_role" = "memberserver" ]; then
756
elif [ "$server_role" = "memberserver" ]; then
755
	mkdir -p /etc/univention/ssl/ucsCA
757
	copy_ucs_ca
756
	univention-scp "$DCPWD" -q "${DCACCOUNT}@${DCNAME}:/etc/univention/ssl/ucsCA/CAcert.pem" /etc/univention/ssl/ucsCA/ >>/var/log/univention/join.log 2>&1
757
	if [ ! -e /etc/univention/ssl/ucsCA/CAcert.pem ]; then
758
		univention-scp "$DCPWD" -q "${DCACCOUNT}@${DCNAME}:/etc/univention/ssl/udsCA/CAcert.pem" /etc/univention/ssl/ucsCA/ >>/var/log/univention/join.log 2>&1
759
	fi
760
761
	# prevent join from failing if umask is modified (Bug #21587)
762
	chmod 755 /etc/univention/ssl
763
	chmod 755 /etc/univention/ssl/ucsCA
764
	chmod 644 /etc/univention/ssl/ucsCA/CAcert.pem
765
766
	check_ldap_tls_connection
758
	check_ldap_tls_connection
767
759
768
	download_host_certificate
760
	download_host_certificate
 Lines 787-806   elif [ "$server_role" = "memberserver" ]; then Link Here 
787
779
788
else
780
else
789
# Client and Mobile Client
781
# Client and Mobile Client
790
782
	copy_ucs_ca
791
792
	mkdir -p /etc/univention/ssl/ucsCA
793
794
	univention-scp "$DCPWD" -q "${DCACCOUNT}@${DCNAME}:/etc/univention/ssl/ucsCA/CAcert.pem" /etc/univention/ssl/ucsCA/ >>/var/log/univention/join.log 2>&1
795
	if [ ! -e /etc/univention/ssl/ucsCA/CAcert.pem ]; then
796
		univention-scp "$DCPWD" -q "${DCACCOUNT}@${DCNAME}:/etc/univention/ssl/udsCA/CAcert.pem" /etc/univention/ssl/ucsCA/ >>/var/log/univention/join.log 2>&1
797
	fi
798
799
	# prevent join from failing if umask is modified (Bug #21587)
800
	chmod 755 /etc/univention/ssl
801
	chmod 755 /etc/univention/ssl/ucsCA
802
	chmod 644 /etc/univention/ssl/ucsCA/CAcert.pem
803
804
	check_ldap_tls_connection
783
	check_ldap_tls_connection
805
784
806
	download_host_certificate
785
	download_host_certificate
807
- 
808
--
809
.../ucs-3.2-0/management/univention-join/univention-join  | 15 ++++++++-------
786
.../ucs-3.2-0/management/univention-join/univention-join  | 15 ++++++++-------
810
1 file changed, 8 insertions(+), 7 deletions(-)
787
1 file changed, 8 insertions(+), 7 deletions(-)
(-)a/branches/ucs-3.2/ucs-3.2-0/management/univention-join/univention-join (-9 / +8 lines)
 Lines 665-670   fix_ssl_permissions () { Link Here 
665
	chmod 644 /etc/univention/ssl/ucsCA/CAcert.pem
665
	chmod 644 /etc/univention/ssl/ucsCA/CAcert.pem
666
}
666
}
667
667
668
restart_ldap_server () {
669
	echo -n "Restart LDAP Server: "
670
	/etc/init.d/slapd restart >>"$LOGFILE" 2>&1
671
	echo_right "done"
672
}
673
668
if [ "$server_role" = "domaincontroller_backup" ]; then
674
if [ "$server_role" = "domaincontroller_backup" ]; then
669
	fetch_secret "ldap"
675
	fetch_secret "ldap"
670
	fetch_secret "ldap-backup"
676
	fetch_secret "ldap-backup"
 Lines 699-707   if [ "$server_role" = "domaincontroller_backup" ]; then Link Here 
699
		>>"$LOGFILE" 2>&1
705
		>>"$LOGFILE" 2>&1
700
	echo_right "done"
706
	echo_right "done"
701
707
702
	echo -n "Restart LDAP Server: "
708
	restart_ldap_server
703
	/etc/init.d/slapd restart >>/var/log/univention/join.log 2>&1
704
	echo_right "done"
705
709
706
	#TODO: implement a real sync
710
	#TODO: implement a real sync
707
	echo -n "Sync Kerberos settings: "
711
	echo -n "Sync Kerberos settings: "
 Lines 733-742   elif [ "$server_role" = "domaincontroller_slave" ]; then Link Here 
733
	check_ldap_tls_connection
737
	check_ldap_tls_connection
734
738
735
	download_host_certificate
739
	download_host_certificate
736
740
	restart_ldap_server
737
	echo -n "Restart LDAP Server: "
738
	/etc/init.d/slapd restart >>/var/log/univention/join.log 2>&1
739
	echo_right "done"
740
741
741
	echo -n "Sync Kerberos settings: "
742
	echo -n "Sync Kerberos settings: "
742
	univention-scp "$DCPWD" -q -r "${DCACCOUNT}@${DCNAME}:/var/lib/heimdal-kdc/*" /var/lib/heimdal-kdc/ >>/var/log/univention/join.log 2>&1
743
	univention-scp "$DCPWD" -q -r "${DCACCOUNT}@${DCNAME}:/var/lib/heimdal-kdc/*" /var/lib/heimdal-kdc/ >>/var/log/univention/join.log 2>&1
743
- 
744
--
745
.../management/univention-join/univention-join       | 20 +++++++++-----------
744
.../management/univention-join/univention-join       | 20 +++++++++-----------
746
1 file changed, 9 insertions(+), 11 deletions(-)
745
1 file changed, 9 insertions(+), 11 deletions(-)
(-)a/branches/ucs-3.2/ucs-3.2-0/management/univention-join/univention-join (-13 / +9 lines)
 Lines 671-676   restart_ldap_server () { Link Here 
671
	echo_right "done"
671
	echo_right "done"
672
}
672
}
673
673
674
sync_kerberos_setting () {
675
	#TODO: implement a real sync
676
	echo -n "Sync Kerberos settings: "
677
	univention-scp "$DCPWD" -q -r "${DCACCOUNT}@${DCNAME}:/var/lib/heimdal-kdc/*" /var/lib/heimdal-kdc/ >>"$LOGFILE" 2>&1
678
	echo_right "done"
679
}
680
674
if [ "$server_role" = "domaincontroller_backup" ]; then
681
if [ "$server_role" = "domaincontroller_backup" ]; then
675
	fetch_secret "ldap"
682
	fetch_secret "ldap"
676
	fetch_secret "ldap-backup"
683
	fetch_secret "ldap-backup"
 Lines 706-717   if [ "$server_role" = "domaincontroller_backup" ]; then Link Here 
706
	echo_right "done"
713
	echo_right "done"
707
714
708
	restart_ldap_server
715
	restart_ldap_server
709
716
	sync_kerberos_setting
710
	#TODO: implement a real sync
711
	echo -n "Sync Kerberos settings: "
712
	univention-scp "$DCPWD" -r "${DCACCOUNT}@${DCNAME}:/var/lib/heimdal-kdc/*" /var/lib/heimdal-kdc/ >>/var/log/univention/join.log 2>&1
713
	echo_right "done"
714
715
	invalidate_nscd_cache
717
	invalidate_nscd_cache
716
	univention-config-registry set \
718
	univention-config-registry set \
717
		ldap/server/name?"$DCNAME" \
719
		ldap/server/name?"$DCNAME" \
 Lines 738-748   elif [ "$server_role" = "domaincontroller_slave" ]; then Link Here 
738
740
739
	download_host_certificate
741
	download_host_certificate
740
	restart_ldap_server
742
	restart_ldap_server
741
743
	sync_kerberos_setting
742
	echo -n "Sync Kerberos settings: "
743
	univention-scp "$DCPWD" -q -r "${DCACCOUNT}@${DCNAME}:/var/lib/heimdal-kdc/*" /var/lib/heimdal-kdc/ >>/var/log/univention/join.log 2>&1
744
	echo_right "done"
745
746
	invalidate_nscd_cache
744
	invalidate_nscd_cache
747
	univention-config-registry set \
745
	univention-config-registry set \
748
		ldap/server/name?"$DCNAME" \
746
		ldap/server/name?"$DCNAME" \
749
- 
750
--
751
.../management/univention-join/univention-join     | 42 ++++++++++++----------
747
.../management/univention-join/univention-join     | 42 ++++++++++++----------
752
1 file changed, 24 insertions(+), 18 deletions(-)
748
1 file changed, 24 insertions(+), 18 deletions(-)
(-)a/branches/ucs-3.2/ucs-3.2-0/management/univention-join/univention-join (-20 / +24 lines)
 Lines 366-395   if [ -z "$server_role" ]; then Link Here 
366
fi
366
fi
367
367
368
368
369
if [ -z "$DCNAME" ]; then
369
find_dc () {
370
	[ -n "$DCNAME" ] && return
371
370
	echo -n "Search DC Master: "
372
	echo -n "Search DC Master: "
371
	DCNAME="$(host -t SRV "_domaincontroller_master._tcp.$domainname" | sed -ne '$s/.* \([^ ]\+\)\.$/\1/p')"
373
	DCNAME="$(lookup_dns_srv)"
372
	if [ -n "$DCNAME" ]; then
374
	if [ -n "$DCNAME" ]; then
373
		echo_right "done"
375
		echo_right "done"
374
	else
376
		return
375
		for i in "$nameserver" "$nameserver1" "$nameserver2" "$nameserver3" "$dns_forwarder1" "$dns_forwarder2" "$dns_forwarder3"; do
376
			if [ -z "$i" ]; then continue; fi
377
			DCNAME="$(host -t SRV "_domaincontroller_master._tcp.$domainname" "$i" | sed -ne '$s/.* \([^ ]\+\)\.$/\1/p')"
378
			if [ -n "$DCNAME" ]; then
379
				echo_right "done"
380
				echo "domain $domainname" >/etc/resolv.conf
381
				echo "nameserver $i" >>/etc/resolv.conf
382
				test -x /etc/init.d/nscd && /etc/init.d/nscd restart >>/var/log/univention/join.log 2>&1
383
				break
384
			fi
385
		done
386
	fi
377
	fi
387
fi
388
378
389
if [ -z "$DCNAME" ]; then
379
	for ns in "$nameserver" "$nameserver1" "$nameserver2" "$nameserver3" "$dns_forwarder1" "$dns_forwarder2" "$dns_forwarder3"
390
	failed_message "missing dns service record for _domaincontroller_master._tcp.$domainname"
380
	do
391
fi
381
		[ -n "$i" ] || continue
382
		DCNAME="$(lookup_dns_srv "$ns")"
383
		[ -n "$DCNAME" ] || continue
384
385
		echo_right "done"
386
		echo "domain $domainname" >/etc/resolv.conf
387
		echo "nameserver $ns" >>/etc/resolv.conf
388
		[ -x /etc/init.d/nscd ] && /etc/init.d/nscd restart >>"$LOGFILE" 2>&1
389
		return
390
	done
392
391
392
	failed_message "missing dns service record for _domaincontroller_master._tcp.$domainname"
393
}
394
lookup_dns_srv () {
395
	host -t SRV "_domaincontroller_master._tcp.$domainname" ${1:+"$1"} |
396
		sed -ne '$s/.* \([^ ]\+\)\.$/\1/p'
397
}
398
find_dc
393
399
394
echo -n "Check DC Master: "
400
echo -n "Check DC Master: "
395
401
396
- 
397
--
398
.../management/univention-join/univention-join     | 101 +++++++++------------
402
.../management/univention-join/univention-join     | 101 +++++++++------------
399
1 file changed, 45 insertions(+), 56 deletions(-)
403
1 file changed, 45 insertions(+), 56 deletions(-)
(-)a/branches/ucs-3.2/ucs-3.2-0/management/univention-join/univention-join (-58 / +45 lines)
 Lines 38-49   eval "$(univention-config-registry shell)" Link Here 
38
38
39
. /usr/share/univention-lib/all.sh
39
. /usr/share/univention-lib/all.sh
40
40
41
SIMPLEGUI=""
41
SIMPLEGUI="-n"
42
TYPE=
42
TYPE=
43
USERTMP="$(mktemp -d)"
43
USERTMP="$(mktemp -d)"
44
DCPWD="$USERTMP/dcpwd"
44
DCPWD="$USERTMP/dcpwd"
45
VERSION_CHECK=true
45
VERSION_CHECK=true
46
VERBOSE=false
46
VERBOSE=
47
47
48
LOGFILE="/var/log/univention/join.log"
48
LOGFILE="/var/log/univention/join.log"
49
log () {
49
log () {
 Lines 56-62   echo_right () { Link Here 
56
56
57
trapOnExit() {
57
trapOnExit() {
58
	rm -rf "$USERTMP"
58
	rm -rf "$USERTMP"
59
	if [ -n "$VERBOSE" -a "$VERBOSE" = "true" ]; then
59
	if [ "$VERBOSE" = "true" ]; then
60
		if [ -n "$old_listener_debug_level" ]; then
60
		if [ -n "$old_listener_debug_level" ]; then
61
			ucr set listener/debug/level="$old_listener_debug_level" >>"$LOGFILE" 2>&1
61
			ucr set listener/debug/level="$old_listener_debug_level" >>"$LOGFILE" 2>&1
62
		fi
62
		fi
 Lines 202-263   run_join_scripts () { Link Here 
202
	: > /var/univention-join/joined
202
	: > /var/univention-join/joined
203
	ln -sf /var/univention-join/joined /usr/share/univention-join/.joined
203
	ln -sf /var/univention-join/joined /usr/share/univention-join/.joined
204
204
205
	[ -d "/usr/lib/univention-install/" ] || return
205
	LC_COLLATE="C"
206
	LC_COLLATE="C"
206
	if test -d "/usr/lib/univention-install/"; then
207
	for i in /usr/lib/univention-install/*.{inst,uinst}; do
207
		for i in /usr/lib/univention-install/*.{inst,uinst}; do
208
		[ -e "$i" ] || continue
208
			test -e "$i" || continue
209
		local basename="$(basename "${i%.*}")"
209
			echo -n "Configure $(basename "$i") "
210
		echo $SIMPLEGUI "Configure $basename "
210
			[ -n "$SIMPLEGUI" ] && echo
211
		log "Configure $basename"
211
			log "Configure $(basename "$i")"
212
		if ! ${VERBOSE+bash -x} "$i" --binddn "$binddn" --bindpwd "$(<"$DCPWD")" >>"$LOGFILE" 2>&1
212
			bashVerbose=""
213
		then
213
			if [ -n "$VERBOSE" -a "$VERBOSE" = "true" ]; then
214
			echo_right "failed"
214
				bashVerbose="bash -x"
215
			failed_message "FAILED: $basename"
215
			fi
216
		else
216
			$bashVerbose "$i" --binddn "$binddn" --bindpwd "$(<"$DCPWD")" >>"$LOGFILE" 2>&1
217
			echo_right "done"
217
			if [ $? -ne 0 ]; then
218
			delete_unjoinscript "$basename"
218
				echo_right "failed"
219
		fi
219
				failed_message "FAILED: $(basename "$i")"
220
		if [ "$basename" = "03univention-directory-listener.inst" ]; then
220
			else
221
			# check failed.ldif
221
				echo_right "done"
222
			if [ -e /var/lib/univention-directory-replication/failed.ldif ]; then
222
				delete_unjoinscript "$(basename "$i")"
223
				failed_message "FAILED: failed.ldif exists."
223
			fi
224
			fi
224
			if [ "$server_role" = "domaincontroller_slave" -o "$server_role" = "domaincontroller_backup" ]; then
225
			case "$server_role" in
225
226
			domaincontroller_backup)
226
				# check failed.ldif
227
				copy_transaction_log
227
				if [ "$(basename "$i")" = "03univention-directory-listener.inst" ]; then
228
				;;
228
					if [ -e /var/lib/univention-directory-replication/failed.ldif ]; then
229
			domaincontroller_slave)
229
						failed_message "FAILED: failed.ldif exists."
230
				if [ "$listener_supply_notifier" = "yes" ]; then
230
					fi
231
					copy_transaction_log
231
232
					# backup
233
					if [ "$server_role" = "domaincontroller_backup" ]; then
234
						univention-scp "$DCPWD" -r \
235
							"${DCACCOUNT}@${DCNAME}:/var/lib/univention-ldap/notify/transaction" \
236
							"$USERTMP/tlog" >/dev/null 2>&1
237
						if [ ! -e "$USERTMP/tlog" ]; then
238
							failed_message " FAILED: failed do copy /var/lib/univention-ldap/notify/transaction from the dc master. Please try again."
239
						fi
240
241
						id="$(</var/lib/univention-directory-listener/notifier_id)"
242
						awk -F ' ' '{ if ( $1 <= '$id') print }' "$USERTMP/tlog" >/var/lib/univention-ldap/notify/transaction
243
					fi
244
245
					# slave 
246
					if [ "$server_role" = "domaincontroller_slave" ]; then
247
						if [ -n "$listener_supply_notifier" -a "$listener_supply_notifier" = "yes" ]; then
248
							univention-scp "$DCPWD" -q \
249
								"${DCACCOUNT}@${DCNAME}:/var/lib/univention-ldap/notify/transaction" \
250
								"$USERTMP/tlog" >/dev/null 2>&1
251
							id="$(</var/lib/univention-directory-listener/notifier_id)"
252
							awk -F ' ' '{ if ( $1 <= '$id') print }' "$USERTMP/tlog" >/var/lib/univention-ldap/notify/transaction
253
						fi
254
255
					fi
256
				fi
232
				fi
257
			fi
233
				;;
258
		done
234
			esac
235
		fi
236
	done
237
}
238
239
copy_transaction_log () {
240
	univention-scp "$DCPWD" -r \
241
		"${DCACCOUNT}@${DCNAME}:/var/lib/univention-ldap/notify/transaction" \
242
		"$USERTMP/tlog" >/dev/null 2>&1
243
	if [ ! -e "$USERTMP/tlog" ]; then
244
		failed_message " FAILED: failed do copy /var/lib/univention-ldap/notify/transaction from the dc master. Please try again."
259
	fi
245
	fi
260
246
247
	local id
248
	read id </var/lib/univention-directory-listener/notifier_id
249
	awk -F ' ' '{ if ( $1 <= '$id') print }' "$USERTMP/tlog" >/var/lib/univention-ldap/notify/transaction
261
}
250
}
262
251
263
# log univention-join call
252
# log univention-join call
 Lines 298-304   do Link Here 
298
		"-simplegui")
287
		"-simplegui")
299
			# output simpler gui for univention-installer to be able to parse output
288
			# output simpler gui for univention-installer to be able to parse output
300
			shift
289
			shift
301
			SIMPLEGUI="yes"
290
			SIMPLEGUI=
302
			;;
291
			;;
303
		"-disableVersionCheck")
292
		"-disableVersionCheck")
304
			shift
293
			shift
 Lines 324-330   do Link Here 
324
done
313
done
325
314
326
# verbose logging for univention-join and listener
315
# verbose logging for univention-join and listener
327
if [ -n "$VERBOSE" -a "$VERBOSE" = "true" ]; then
316
if [ "$VERBOSE" = "true" ]; then
328
	exec 2>>"$LOGFILE"
317
	exec 2>>"$LOGFILE"
329
	set -x
318
	set -x
330
	if [ -n "$listener_debug_level" ]; then
319
	if [ -n "$listener_debug_level" ]; then
331
- 
332
--
333
.../ucs-3.2-0/management/univention-join/univention-server-join   | 8 +++++---
320
.../ucs-3.2-0/management/univention-join/univention-server-join   | 8 +++++---
334
1 file changed, 5 insertions(+), 3 deletions(-)
321
1 file changed, 5 insertions(+), 3 deletions(-)
(-)a/branches/ucs-3.2/ucs-3.2-0/management/univention-join/univention-server-join (-5 / +5 lines)
 Lines 297-308   create_entry () { Link Here 
297
	else
297
	else
298
		log 0 "Modify $desc [$old_dn]"
298
		log 0 "Modify $desc [$old_dn]"
299
299
300
		rc="$(univention-directory-manager "$module" modify \
300
		cmd=(univention-directory-manager "$module" modify \
301
			--dn "$old_dn" \
301
			--dn "$old_dn" \
302
			--set password="$computerPassword" \
302
			--set password="$computerPassword" \
303
			--set domain="$DOMAINNAME" \
303
			--set domain="$DOMAINNAME" \
304
			"${args[@]}" "${ADMINOPTIONS[@]}")"
304
			"${args[@]}" "${ADMINOPTIONS[@]}")
305
		if [ $? -gt 0 ]; then
305
		#log 0 "${cmd[@]}"
306
		if ! rc="$("${cmd[@]}")"
307
		then
306
			log 1 "E: failed to modify $desc $old_dn [$rc]"
308
			log 1 "E: failed to modify $desc $old_dn [$rc]"
307
			exit 1
309
			exit 1
308
		fi
310
		fi
309
- 
310
--
311
branches/ucs-3.2/ucs-3.2-0/management/univention-join/univention-join | 2 +-
311
branches/ucs-3.2/ucs-3.2-0/management/univention-join/univention-join | 2 +-
312
1 file changed, 1 insertion(+), 1 deletion(-)
312
1 file changed, 1 insertion(+), 1 deletion(-)
(-)a/branches/ucs-3.2/ucs-3.2-0/management/univention-join/univention-join (-3 / +1 lines)
 Lines 445-451   fi Link Here 
445
445
446
if [ -z "$LDAPBASE" ]; then
446
if [ -z "$LDAPBASE" ]; then
447
	echo -n "Search ldap/base"
447
	echo -n "Search ldap/base"
448
	ldap_base="$(univention-ssh "$DCPWD" "${DCACCOUNT}@${DCNAME}" /usr/sbin/ucr search --brief ^ldap/base$ | sed -ne 's|^ldap/base: ||p')"
448
	ldap_base="$(univention-ssh "$DCPWD" "${DCACCOUNT}@${DCNAME}" /usr/sbin/ucr get ldap/base)"
449
else
449
else
450
	ldap_base="$LDAPBASE"
450
	ldap_base="$LDAPBASE"
451
fi
451
fi
452
- 
453
--
454
branches/ucs-3.2/ucs-3.2-0/management/univention-join/univention-join | 4 ++--
452
branches/ucs-3.2/ucs-3.2-0/management/univention-join/univention-join | 4 ++--
455
.../ucs-3.2-0/management/univention-join/univention-server-join       | 4 ++--
453
.../ucs-3.2-0/management/univention-join/univention-server-join       | 4 ++--
456
2 files changed, 4 insertions(+), 4 deletions(-)
454
2 files changed, 4 insertions(+), 4 deletions(-)
(-)a/branches/ucs-3.2/ucs-3.2-0/management/univention-join/univention-join (-2 / +2 lines)
 Lines 188-195   check_ldap_tls_connection () { Link Here 
188
188
189
	eval "$(ucr shell ldap/master/port)"
189
	eval "$(ucr shell ldap/master/port)"
190
190
191
	ldapsearch -x -ZZ -p "$ldap_master_port" -s base -h "$DCNAME" -D "$binddn" -w "$(<"$DCPWD")" dn >/dev/null
191
	if ! ldapsearch -x -ZZ -p "$ldap_master_port" -s base -h "$DCNAME" -D "$binddn" -w "$(<"$DCPWD")" dn >/dev/null
192
	if  [ $? != 0 ]; then
192
	then
193
 		failed_message "Establishing a TLS connection with $DCNAME failed. Maybe you didn't specify a FQDN."
193
 		failed_message "Establishing a TLS connection with $DCNAME failed. Maybe you didn't specify a FQDN."
194
	fi
194
	fi
195
195
(-)a/branches/ucs-3.2/ucs-3.2-0/management/univention-join/univention-server-join (-4 / +2 lines)
 Lines 285-295   create_entry () { Link Here 
285
		echo "ldap_dn=\"$ldap_dn\""
285
		echo "ldap_dn=\"$ldap_dn\""
286
286
287
		if [ -n "$group" ]; then
287
		if [ -n "$group" ]; then
288
			rc="$(univention-directory-manager groups/group modify \
288
			if ! rc="$(univention-directory-manager groups/group modify \
289
				--dn="$group" \
289
				--dn="$group" \
290
				--append users="$ldap_dn" \
290
				--append users="$ldap_dn" \
291
				"${ADMINOPTIONS[@]}")"
291
				"${ADMINOPTIONS[@]}")"
292
			if [ $? -gt 0 ]; then
292
			then
293
				log 1 "E: failed to modify groups/group for $desc [$rc]"
293
				log 1 "E: failed to modify groups/group for $desc [$rc]"
294
				exit 1
294
				exit 1
295
			fi
295
			fi
296
- 
297
--
298
branches/ucs-3.2/ucs-3.2-0/management/univention-join/univention-join | 4 ++--
296
branches/ucs-3.2/ucs-3.2-0/management/univention-join/univention-join | 4 ++--
299
1 file changed, 2 insertions(+), 2 deletions(-)
297
1 file changed, 2 insertions(+), 2 deletions(-)
(-)a/branches/ucs-3.2/ucs-3.2-0/management/univention-join/univention-join (-4 / +2 lines)
 Lines 472-484   binddn="$(univention-ssh "$DCPWD" "${DCACCOUNT}@${DCNAME}" \ Link Here 
472
if [ -z "$binddn" ]; then
472
if [ -z "$binddn" ]; then
473
	# Next check is the local ldapi interface
473
	# Next check is the local ldapi interface
474
	binddn="$(univention-ssh "$DCPWD" "${DCACCOUNT}@${DCNAME}" \
474
	binddn="$(univention-ssh "$DCPWD" "${DCACCOUNT}@${DCNAME}" \
475
		ldapsearch -x -LLL -H ldapi:/// "\'(&(uid=$DCACCOUNT)(objectClass=person))\'" dn | ldapsearch-wrapper | ldapsearch-decode64 | sed -ne 's|^dn: ||p;s|^DN: ||p')"
475
		ldapsearch -x -LLL -H ldapi:/// "\'(&(uid=$DCACCOUNT)(objectClass=person))\'" dn | ldapsearch-wrapper | ldapsearch-decode64 | sed -ne 's|^dn: ||p')"
476
fi
476
fi
477
477
478
if [ -z "$binddn" ]; then
478
if [ -z "$binddn" ]; then
479
	# Check with anonymous bind
479
	# Check with anonymous bind
480
	binddn="$(univention-ssh "$DCPWD" "${DCACCOUNT}@${DCNAME}" \
480
	binddn="$(univention-ssh "$DCPWD" "${DCACCOUNT}@${DCNAME}" \
481
		ldapsearch -x -LLL "\'(&(uid=$DCACCOUNT)(objectClass=person))\'" dn | ldapsearch-wrapper | ldapsearch-decode64 | sed -ne 's|^dn: ||p;s|^DN: ||p')"
481
		ldapsearch -x -LLL "\'(&(uid=$DCACCOUNT)(objectClass=person))\'" dn | ldapsearch-wrapper | ldapsearch-decode64 | sed -ne 's|^dn: ||p')"
482
fi
482
fi
483
483
484
if [ -z "$binddn" ]; then
484
if [ -z "$binddn" ]; then
485
- 
486
--
487
.../ucs-3.2/ucs-3.2-0/management/univention-join/univention-join  | 8 +-------
485
.../ucs-3.2/ucs-3.2-0/management/univention-join/univention-join  | 8 +-------
488
1 file changed, 1 insertion(+), 7 deletions(-)
486
1 file changed, 1 insertion(+), 7 deletions(-)
(-)a/branches/ucs-3.2/ucs-3.2-0/management/univention-join/univention-join (-9 / +1 lines)
 Lines 752-764   elif [ "$server_role" = "memberserver" ]; then Link Here 
752
	check_ldap_tls_connection
752
	check_ldap_tls_connection
753
753
754
	download_host_certificate
754
	download_host_certificate
755
756
	univention-config-registry set \
757
		ldap/master="$DCNAME" \
758
		ldap/master/port?7389 \
759
		>>/var/log/univention/join.log 2>&1
760
	grep -q '^TLS_CACERT' /etc/ldap/ldap.conf || echo "TLS_CACERT /etc/univention/ssl/ucsCA/CAcert.pem" >>/etc/ldap/ldap.conf
761
762
	invalidate_nscd_cache
755
	invalidate_nscd_cache
763
	univention-config-registry set \
756
	univention-config-registry set \
764
		ldap/server/name?"$DCNAME" \
757
		ldap/server/name?"$DCNAME" \
 Lines 769-774   elif [ "$server_role" = "memberserver" ]; then Link Here 
769
		>>"$LOGFILE" 2>&1
762
		>>"$LOGFILE" 2>&1
770
	set_kerberos_realm "$DCPWD" "$DCACCOUNT" "$DCNAME" "$REALM"
763
	set_kerberos_realm "$DCPWD" "$DCACCOUNT" "$DCNAME" "$REALM"
771
	set_windows_domain "$DCPWD" "$DCACCOUNT" "$DCNAME" "$WINDOM"
764
	set_windows_domain "$DCPWD" "$DCACCOUNT" "$DCNAME" "$WINDOM"
765
	grep -q '^TLS_CACERT' /etc/ldap/ldap.conf || echo "TLS_CACERT /etc/univention/ssl/ucsCA/CAcert.pem" >>/etc/ldap/ldap.conf
772
	run_join_scripts
766
	run_join_scripts
773
767
774
else
768
else
775
- 
776
--
777
.../ucs-3.2/ucs-3.2-0/management/univention-join/univention-join | 9 +--------
769
.../ucs-3.2/ucs-3.2-0/management/univention-join/univention-join | 9 +--------
778
.../ucs-3.2-0/management/univention-join/univention-server-join  | 2 +-
770
.../ucs-3.2-0/management/univention-join/univention-server-join  | 2 +-
779
2 files changed, 2 insertions(+), 9 deletions(-)
771
2 files changed, 2 insertions(+), 9 deletions(-)
(-)a/branches/ucs-3.2/ucs-3.2-0/management/univention-join/univention-join (-8 / +1 lines)
 Lines 502-515   args=() Link Here 
502
if [ -n "$ldap_position" ]; then
502
if [ -n "$ldap_position" ]; then
503
	args+=(-position "$ldap_position")
503
	args+=(-position "$ldap_position")
504
fi
504
fi
505
505
args+=(-binddn "$binddn")
506
507
if [ "${master_version:0:1}" -lt 3 ]; then
508
	# UCS 2.x does not support the -binddn parameter
509
	args+=(-bindaccount "$DCACCOUNT")
510
else
511
	args+=(-binddn "$binddn")
512
fi
513
506
514
for ip in $(ip addr show scope global | sed -rne '/\<scope global\>/s|.*\<inet6? ([0-9a-f.:/]+)\>.*|\1|p')
507
for ip in $(ip addr show scope global | sed -rne '/\<scope global\>/s|.*\<inet6? ([0-9a-f.:/]+)\>.*|\1|p')
515
do
508
do
(-)a/branches/ucs-3.2/ucs-3.2-0/management/univention-join/univention-server-join (-3 / +1 lines)
 Lines 181-187   if [ -n "$BINDDN" ]; then Link Here 
181
	ADMINOPTIONS+=(--binddn "$BINDDN")
181
	ADMINOPTIONS+=(--binddn "$BINDDN")
182
fi
182
fi
183
if [ -n "$BINDPWFILE" ]; then
183
if [ -n "$BINDPWFILE" ]; then
184
	ADMINOPTIONS+=(--bindpwd "$(<"$BINDPWFILE")")
184
	ADMINOPTIONS+=(--bindpwdfile "$BINDPWFILE")
185
fi
185
fi
186
186
187
187
188
- 
189
--
190
.../management/univention-join/univention-join     | 27 +++++++++++-----------
188
.../management/univention-join/univention-join     | 27 +++++++++++-----------
191
.../univention-join/univention-server-join         |  2 +-
189
.../univention-join/univention-server-join         |  2 +-
192
2 files changed, 14 insertions(+), 15 deletions(-)
190
2 files changed, 14 insertions(+), 15 deletions(-)
(-)a/branches/ucs-3.2/ucs-3.2-0/management/univention-join/univention-join (-14 / +13 lines)
 Lines 514-521   do Link Here 
514
	args+=(-mac "$(cat "${iface}/address")")
514
	args+=(-mac "$(cat "${iface}/address")")
515
done
515
done
516
516
517
echo -n "Join Computer Account: "
518
args+=(-role "$server_role" -hostname "$hostname" -domainname "$domainname")
517
args+=(-role "$server_role" -hostname "$hostname" -domainname "$domainname")
518
519
echo -n "Join Computer Account: "
519
# Copy local $DCPWD to remote $DCPWD' and invoke univention-join remotely
520
# Copy local $DCPWD to remote $DCPWD' and invoke univention-join remotely
520
invalidate_nscd_cache
521
invalidate_nscd_cache
521
univention-ssh --no-split "$DCPWD" "${DCACCOUNT}@${DCNAME}" \
522
univention-ssh --no-split "$DCPWD" "${DCACCOUNT}@${DCNAME}" \
 Lines 535-542   then Link Here 
535
536
536
	if [ -n "$kpwd" ]; then
537
	if [ -n "$kpwd" ]; then
537
		backup_secret "machine"
538
		backup_secret "machine"
538
		echo -n "$kpwd" >/etc/machine.secret
539
		printf "%s" "$kpwd" >/etc/machine.secret
539
		fromdos /etc/machine.secret
540
		chmod 600 /etc/machine.secret
540
		chmod 600 /etc/machine.secret
541
	else
541
	else
542
		if [ -n "$res_message" ]; then
542
		if [ -n "$res_message" ]; then
 Lines 620-626   set_kerberos_realm () { Link Here 
620
}
620
}
621
621
622
set_windows_domain () {
622
set_windows_domain () {
623
624
	local dcpwd="$1"
623
	local dcpwd="$1"
625
	local dcaccount="$2"
624
	local dcaccount="$2"
626
	local dcname="$3"
625
	local dcname="$3"
 Lines 666-672   sync_kerberos_setting () { Link Here 
666
	echo_right "done"
665
	echo_right "done"
667
}
666
}
668
667
669
if [ "$server_role" = "domaincontroller_backup" ]; then
668
case "$server_role" in
669
domaincontroller_backup)
670
	fetch_secret "ldap"
670
	fetch_secret "ldap"
671
	fetch_secret "ldap-backup"
671
	fetch_secret "ldap-backup"
672
	univention-config-registry set \
672
	univention-config-registry set \
 Lines 684-690   if [ "$server_role" = "domaincontroller_backup" ]; then Link Here 
684
684
685
	fix_ssl_permissions
685
	fix_ssl_permissions
686
	check_ldap_tls_connection
686
	check_ldap_tls_connection
687
688
	download_host_certificate
687
	download_host_certificate
689
688
690
	echo -n "Sync SSL settings: "
689
	echo -n "Sync SSL settings: "
 Lines 712-719   if [ "$server_role" = "domaincontroller_backup" ]; then Link Here 
712
	set_windows_domain "$DCPWD" "$DCACCOUNT" "$DCNAME" "$WINDOM"
711
	set_windows_domain "$DCPWD" "$DCACCOUNT" "$DCNAME" "$WINDOM"
713
	reset_listener_schema
712
	reset_listener_schema
714
	run_join_scripts
713
	run_join_scripts
714
	;;
715
715
716
elif [ "$server_role" = "domaincontroller_slave" ]; then
716
domaincontroller_slave)
717
	fetch_secret "ldap-backup"
717
	fetch_secret "ldap-backup"
718
	univention-config-registry set \
718
	univention-config-registry set \
719
		ldap/server/name="$hostname.$domainname" \
719
		ldap/server/name="$hostname.$domainname" \
 Lines 725-731   elif [ "$server_role" = "domaincontroller_slave" ]; then Link Here 
725
		>>"$LOGFILE" 2>&1
725
		>>"$LOGFILE" 2>&1
726
	copy_ucs_ca
726
	copy_ucs_ca
727
	check_ldap_tls_connection
727
	check_ldap_tls_connection
728
729
	download_host_certificate
728
	download_host_certificate
730
	restart_ldap_server
729
	restart_ldap_server
731
	sync_kerberos_setting
730
	sync_kerberos_setting
 Lines 739-749   elif [ "$server_role" = "domaincontroller_slave" ]; then Link Here 
739
	set_windows_domain "$DCPWD" "$DCACCOUNT" "$DCNAME" "$WINDOM"
738
	set_windows_domain "$DCPWD" "$DCACCOUNT" "$DCNAME" "$WINDOM"
740
	reset_listener_schema
739
	reset_listener_schema
741
	run_join_scripts
740
	run_join_scripts
741
	;;
742
742
743
elif [ "$server_role" = "memberserver" ]; then
743
memberserver)
744
	copy_ucs_ca
744
	copy_ucs_ca
745
	check_ldap_tls_connection
745
	check_ldap_tls_connection
746
747
	download_host_certificate
746
	download_host_certificate
748
	invalidate_nscd_cache
747
	invalidate_nscd_cache
749
	univention-config-registry set \
748
	univention-config-registry set \
 Lines 757-768   elif [ "$server_role" = "memberserver" ]; then Link Here 
757
	set_windows_domain "$DCPWD" "$DCACCOUNT" "$DCNAME" "$WINDOM"
756
	set_windows_domain "$DCPWD" "$DCACCOUNT" "$DCNAME" "$WINDOM"
758
	grep -q '^TLS_CACERT' /etc/ldap/ldap.conf || echo "TLS_CACERT /etc/univention/ssl/ucsCA/CAcert.pem" >>/etc/ldap/ldap.conf
757
	grep -q '^TLS_CACERT' /etc/ldap/ldap.conf || echo "TLS_CACERT /etc/univention/ssl/ucsCA/CAcert.pem" >>/etc/ldap/ldap.conf
759
	run_join_scripts
758
	run_join_scripts
759
	;;
760
760
761
else
761
*) # Client and Mobile Client
762
# Client and Mobile Client
763
	copy_ucs_ca
762
	copy_ucs_ca
764
	check_ldap_tls_connection
763
	check_ldap_tls_connection
765
766
	download_host_certificate
764
	download_host_certificate
767
	invalidate_nscd_cache
765
	invalidate_nscd_cache
768
	univention-config-registry set \
766
	univention-config-registry set \
 Lines 777-783   else Link Here 
777
	set_windows_domain "$DCPWD" "$DCACCOUNT" "$DCNAME" "$WINDOM"
775
	set_windows_domain "$DCPWD" "$DCACCOUNT" "$DCNAME" "$WINDOM"
778
	grep -q '^TLS_CACERT' /etc/ldap/ldap.conf || echo "TLS_CACERT /etc/univention/ssl/ucsCA/CAcert.pem" >>/etc/ldap/ldap.conf
776
	grep -q '^TLS_CACERT' /etc/ldap/ldap.conf || echo "TLS_CACERT /etc/univention/ssl/ucsCA/CAcert.pem" >>/etc/ldap/ldap.conf
779
	run_join_scripts
777
	run_join_scripts
780
fi
778
	;;
779
esac
781
780
782
if [ -d /etc/runit/univention-directory-notifier ]; then
781
if [ -d /etc/runit/univention-directory-notifier ]; then
783
	/etc/init.d/univention-directory-notifier restart >>"$LOGFILE" 2>&1
782
	/etc/init.d/univention-directory-notifier restart >>"$LOGFILE" 2>&1
(-)a/branches/ucs-3.2/ucs-3.2-0/management/univention-join/univention-server-join (-2 / +1 lines)
 Lines 286-292   create_entry () { Link Here 
286
286
287
		if [ -n "$group" ]; then
287
		if [ -n "$group" ]; then
288
			if ! rc="$(univention-directory-manager groups/group modify \
288
			if ! rc="$(univention-directory-manager groups/group modify \
289
				--dn="$group" \
289
				--dn "$group" \
290
				--append users="$ldap_dn" \
290
				--append users="$ldap_dn" \
291
				"${ADMINOPTIONS[@]}")"
291
				"${ADMINOPTIONS[@]}")"
292
			then
292
			then
293
- 

Return to bug 28562