1fceb383a3f0b59711832b9dc4e8329d7f216604semery#!/usr/bin/ksh
1fceb383a3f0b59711832b9dc4e8329d7f216604semery#
2707a226168717ec0ca29abd7fef59989493d3d4semery# CDDL HEADER START
2707a226168717ec0ca29abd7fef59989493d3d4semery#
2707a226168717ec0ca29abd7fef59989493d3d4semery# The contents of this file are subject to the terms of the
2707a226168717ec0ca29abd7fef59989493d3d4semery# Common Development and Distribution License (the "License").
2707a226168717ec0ca29abd7fef59989493d3d4semery# You may not use this file except in compliance with the License.
2707a226168717ec0ca29abd7fef59989493d3d4semery#
2707a226168717ec0ca29abd7fef59989493d3d4semery# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
2707a226168717ec0ca29abd7fef59989493d3d4semery# or http://www.opensolaris.org/os/licensing.
2707a226168717ec0ca29abd7fef59989493d3d4semery# See the License for the specific language governing permissions
2707a226168717ec0ca29abd7fef59989493d3d4semery# and limitations under the License.
2707a226168717ec0ca29abd7fef59989493d3d4semery#
2707a226168717ec0ca29abd7fef59989493d3d4semery# When distributing Covered Code, include this CDDL HEADER in each
2707a226168717ec0ca29abd7fef59989493d3d4semery# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
2707a226168717ec0ca29abd7fef59989493d3d4semery# If applicable, add the following below this CDDL HEADER, with the
2707a226168717ec0ca29abd7fef59989493d3d4semery# fields enclosed by brackets "[]" replaced with your own identifying
2707a226168717ec0ca29abd7fef59989493d3d4semery# information: Portions Copyright [yyyy] [name of copyright owner]
2707a226168717ec0ca29abd7fef59989493d3d4semery#
1fceb383a3f0b59711832b9dc4e8329d7f216604semery# CDDL HEADER END
1fceb383a3f0b59711832b9dc4e8329d7f216604semery#
b793cf1f804f52789df526036d96d1be7d3efc9dShawn Emery# Copyright 2009 Sun Microsystems, Inc. All rights reserved.
1fceb383a3f0b59711832b9dc4e8329d7f216604semery# Use is subject to license terms.
1fceb383a3f0b59711832b9dc4e8329d7f216604semery#
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semery#
1fceb383a3f0b59711832b9dc4e8329d7f216604semery# This command provides an simple interface to configure, destroy, and to obtain
1fceb383a3f0b59711832b9dc4e8329d7f216604semery# the status of a master or slave Kerberos KDC server.
1fceb383a3f0b59711832b9dc4e8329d7f216604semery#
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semeryfunction usage {
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semery app=`basename $0`
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semery printf "\n$(gettext "Usage: %s [ -a admprincipal ] [ -e enctype ] [ -h ]")\n" $app
1fceb383a3f0b59711832b9dc4e8329d7f216604semery printf "\t$(gettext "[ -p pwfile ] [ -r realm ] subcommand")\n\n"
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semery printf "\t$(gettext "-a: Create non-default admin principal.")\n"
1fceb383a3f0b59711832b9dc4e8329d7f216604semery printf "\t$(gettext "-e: Encryption type used to encrypt the master key")\n"
1fceb383a3f0b59711832b9dc4e8329d7f216604semery printf "\t$(gettext "-h: This help message.")\n"
1fceb383a3f0b59711832b9dc4e8329d7f216604semery printf "\t$(gettext "-p: File that contains the admin principal and master key password.")\n"
1fceb383a3f0b59711832b9dc4e8329d7f216604semery printf "\t$(gettext "-r: Set the default realm for this server.")\n\n"
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semery printf "\t$(gettext "where 'subcommand' is one of the following:")\n\n"
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semery printf "\t$(gettext "create [ master ]")\n"
1fceb383a3f0b59711832b9dc4e8329d7f216604semery printf "\t$(gettext "create [ -m masterkdc ] slave")\n"
1fceb383a3f0b59711832b9dc4e8329d7f216604semery printf "\t$(gettext "destroy")\n"
1fceb383a3f0b59711832b9dc4e8329d7f216604semery printf "\t$(gettext "status")\n\n"
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
67c900400ffabaec1fd8a7ee6cea5e9beb39c3cbsemery cleanup 1
1fceb383a3f0b59711832b9dc4e8329d7f216604semery}
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semeryfunction ask {
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semery # ask question, set global answer
1fceb383a3f0b59711832b9dc4e8329d7f216604semery typeset question=$1 default_answer=$2
1fceb383a3f0b59711832b9dc4e8329d7f216604semery if [[ -z $default_answer ]]; then
1fceb383a3f0b59711832b9dc4e8329d7f216604semery print "$question \c"
1fceb383a3f0b59711832b9dc4e8329d7f216604semery else
1fceb383a3f0b59711832b9dc4e8329d7f216604semery print "$question [$default_answer]: \c"
1fceb383a3f0b59711832b9dc4e8329d7f216604semery fi
1fceb383a3f0b59711832b9dc4e8329d7f216604semery read answer
1fceb383a3f0b59711832b9dc4e8329d7f216604semery [ -z "$answer" ] && answer="$default_answer"
1fceb383a3f0b59711832b9dc4e8329d7f216604semery}
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semeryfunction yesno {
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semery typeset question="$1"
1fceb383a3f0b59711832b9dc4e8329d7f216604semery # answer is a global set by ask
1fceb383a3f0b59711832b9dc4e8329d7f216604semery answer=
1fceb383a3f0b59711832b9dc4e8329d7f216604semery yn=`printf "$(gettext "y/n")"`
1fceb383a3f0b59711832b9dc4e8329d7f216604semery y=`printf "$(gettext "y")"`
1fceb383a3f0b59711832b9dc4e8329d7f216604semery n=`printf "$(gettext "n")"`
1fceb383a3f0b59711832b9dc4e8329d7f216604semery yes=`printf "$(gettext "yes")"`
1fceb383a3f0b59711832b9dc4e8329d7f216604semery no=`printf "$(gettext "no")"`
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semery while [[ -z $answer ]]; do
1fceb383a3f0b59711832b9dc4e8329d7f216604semery ask "$question" $yn
1fceb383a3f0b59711832b9dc4e8329d7f216604semery case $answer in
1fceb383a3f0b59711832b9dc4e8329d7f216604semery $y|$yes) answer=yes;;
1fceb383a3f0b59711832b9dc4e8329d7f216604semery $n|$no) answer=no;;
1fceb383a3f0b59711832b9dc4e8329d7f216604semery *) answer=;;
1fceb383a3f0b59711832b9dc4e8329d7f216604semery esac
1fceb383a3f0b59711832b9dc4e8329d7f216604semery done
1fceb383a3f0b59711832b9dc4e8329d7f216604semery}
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semeryfunction query {
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semery yesno "$*"
1fceb383a3f0b59711832b9dc4e8329d7f216604semery if [[ $answer = no ]]; then
1fceb383a3f0b59711832b9dc4e8329d7f216604semery printf "\t$(gettext "No action performed").\n"
1fceb383a3f0b59711832b9dc4e8329d7f216604semery fi
1fceb383a3f0b59711832b9dc4e8329d7f216604semery}
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semeryfunction cleanup {
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
67c900400ffabaec1fd8a7ee6cea5e9beb39c3cbsemery integer ret=$1
67c900400ffabaec1fd8a7ee6cea5e9beb39c3cbsemery
1fceb383a3f0b59711832b9dc4e8329d7f216604semery kdestroy -q -c $TMP_CCACHE 1>$TMP_FILE 2>&1
1fceb383a3f0b59711832b9dc4e8329d7f216604semery rm -f $TMP_FILE
67c900400ffabaec1fd8a7ee6cea5e9beb39c3cbsemery
67c900400ffabaec1fd8a7ee6cea5e9beb39c3cbsemery exit $ret
1fceb383a3f0b59711832b9dc4e8329d7f216604semery}
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semeryfunction error_message {
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semery printf "---------------------------------------------------\n"
1fceb383a3f0b59711832b9dc4e8329d7f216604semery printf "$(gettext "Setup FAILED").\n\n"
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
67c900400ffabaec1fd8a7ee6cea5e9beb39c3cbsemery cleanup 1
1fceb383a3f0b59711832b9dc4e8329d7f216604semery}
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semeryfunction check_bin {
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semery bin=$1
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semery if [[ ! -x $bin ]]; then
1fceb383a3f0b59711832b9dc4e8329d7f216604semery printf "$(gettext "Could not access/execute %s").\n" $bin
1fceb383a3f0b59711832b9dc4e8329d7f216604semery error_message
1fceb383a3f0b59711832b9dc4e8329d7f216604semery fi
1fceb383a3f0b59711832b9dc4e8329d7f216604semery}
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semeryfunction check_ret {
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semery integer ret=$1
1fceb383a3f0b59711832b9dc4e8329d7f216604semery prog=$2
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semery if [[ $ret -ne 0 ]]; then
1fceb383a3f0b59711832b9dc4e8329d7f216604semery printf "\n$(gettext "%s failed with return value %d, exiting").\n\n" $prog $ret
1fceb383a3f0b59711832b9dc4e8329d7f216604semery error_message
1fceb383a3f0b59711832b9dc4e8329d7f216604semery fi
1fceb383a3f0b59711832b9dc4e8329d7f216604semery}
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semeryfunction ok_to_proceed {
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semery yesno "$@"
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semery if [[ $answer = no ]]; then
1fceb383a3f0b59711832b9dc4e8329d7f216604semery printf "\n$(gettext "Exiting, no action performed")\n\n"
67c900400ffabaec1fd8a7ee6cea5e9beb39c3cbsemery cleanup 0
1fceb383a3f0b59711832b9dc4e8329d7f216604semery fi
1fceb383a3f0b59711832b9dc4e8329d7f216604semery}
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semeryfunction check_value {
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semery typeset arg="$1"
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semery if [[ -z $arg ]]; then
1fceb383a3f0b59711832b9dc4e8329d7f216604semery printf "\n$(gettext "No input obtained for %s, exiting").\n" $checkval
1fceb383a3f0b59711832b9dc4e8329d7f216604semery error_message
1fceb383a3f0b59711832b9dc4e8329d7f216604semery else
1fceb383a3f0b59711832b9dc4e8329d7f216604semery echo "$arg">$TMP_FILE
1fceb383a3f0b59711832b9dc4e8329d7f216604semery if egrep -s '[*$^#!]+' $TMP_FILE; then
1fceb383a3f0b59711832b9dc4e8329d7f216604semery printf "\n$(gettext "Invalid input obtained for %s, exiting").\n" $checkval
1fceb383a3f0b59711832b9dc4e8329d7f216604semery error_message
1fceb383a3f0b59711832b9dc4e8329d7f216604semery fi
1fceb383a3f0b59711832b9dc4e8329d7f216604semery fi
1fceb383a3f0b59711832b9dc4e8329d7f216604semery}
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semeryfunction setup_kdc_conf {
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semery printf "\n$(gettext "Setting up %s").\n" $KRB5_KDC_CONF
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semery if [[ -r $KRB5_KDC_CONF ]]; then
1fceb383a3f0b59711832b9dc4e8329d7f216604semery cat $KRB5_KDC_CONF > $KRB5_KDC_CONF.sav
1fceb383a3f0b59711832b9dc4e8329d7f216604semery cannot_create $KRB5_KDC_CONF.sav $?
1fceb383a3f0b59711832b9dc4e8329d7f216604semery fi
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semery exec 3>$KRB5_KDC_CONF
1fceb383a3f0b59711832b9dc4e8329d7f216604semery if [[ $? -ne 0 ]]; then
1fceb383a3f0b59711832b9dc4e8329d7f216604semery printf "\n$(gettext "Cannot write to %s, exiting").\n" $KRB5_KDC_CONF
1fceb383a3f0b59711832b9dc4e8329d7f216604semery error_message
1fceb383a3f0b59711832b9dc4e8329d7f216604semery fi
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semery printf "\n[kdcdefaults]\n\tkdc_ports = 88,750\n\n" 1>&3
1fceb383a3f0b59711832b9dc4e8329d7f216604semery printf "[realms]\n\t$REALM = {\n" 1>&3
1fceb383a3f0b59711832b9dc4e8329d7f216604semery printf "\t\tprofile = $KRB5_KRB_CONF\n" 1>&3
1fceb383a3f0b59711832b9dc4e8329d7f216604semery printf "\t\tdatabase_name = $PRINCDB\n" 1>&3
1fceb383a3f0b59711832b9dc4e8329d7f216604semery printf "\t\tmaster_key_type = $ENCTYPE\n" 1>&3
1fceb383a3f0b59711832b9dc4e8329d7f216604semery printf "\t\tacl_file = $KADM5ACL\n" 1>&3
1fceb383a3f0b59711832b9dc4e8329d7f216604semery printf "\t\tkadmind_port = 749\n" 1>&3
1fceb383a3f0b59711832b9dc4e8329d7f216604semery printf "\t\tmax_life = 8h 0m 0s\n" 1>&3
1fceb383a3f0b59711832b9dc4e8329d7f216604semery printf "\t\tmax_renewable_life = 7d 0h 0m 0s\n" 1>&3
1fceb383a3f0b59711832b9dc4e8329d7f216604semery printf "\t\tdefault_principal_flags = +preauth\n" 1>&3
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semery printf "\t\tsunw_dbprop_enable = true\n" 1>&3
1fceb383a3f0b59711832b9dc4e8329d7f216604semery if [[ $master = yes ]]; then
1fceb383a3f0b59711832b9dc4e8329d7f216604semery printf "\t\tsunw_dbprop_master_ulogsize = 1000\n" 1>&3
1fceb383a3f0b59711832b9dc4e8329d7f216604semery fi
1fceb383a3f0b59711832b9dc4e8329d7f216604semery if [[ $slave = yes ]]; then
1fceb383a3f0b59711832b9dc4e8329d7f216604semery printf "\t\tsunw_dbprop_slave_poll = 2m\n" 1>&3
1fceb383a3f0b59711832b9dc4e8329d7f216604semery fi
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semery printf "\t}\n" 1>&3
1fceb383a3f0b59711832b9dc4e8329d7f216604semery}
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semeryfunction setup_krb_conf {
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semery printf "\n$(gettext "Setting up %s").\n" $KRB5_KRB_CONF
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semery if [[ -r $KRB5_KRB_CONF ]]; then
1fceb383a3f0b59711832b9dc4e8329d7f216604semery cat $KRB5_KRB_CONF > $KRB5_KRB_CONF.sav
1fceb383a3f0b59711832b9dc4e8329d7f216604semery cannot_create $KRB5_KRB_CONF.sav $?
1fceb383a3f0b59711832b9dc4e8329d7f216604semery fi
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semery exec 3>$KRB5_KRB_CONF
1fceb383a3f0b59711832b9dc4e8329d7f216604semery if [[ $? -ne 0 ]]; then
1fceb383a3f0b59711832b9dc4e8329d7f216604semery printf "\n$(gettext "Cannot write to %s, exiting").\n" $KRB5_KRB_CONF
1fceb383a3f0b59711832b9dc4e8329d7f216604semery error_message
1fceb383a3f0b59711832b9dc4e8329d7f216604semery fi
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semery printf "[libdefaults]\n" 1>&3
1fceb383a3f0b59711832b9dc4e8329d7f216604semery printf "\tdefault_realm = $REALM\n\n" 1>&3
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semery printf "[realms]\n" 1>&3
1fceb383a3f0b59711832b9dc4e8329d7f216604semery printf "\t$REALM = {\n" 1>&3
1fceb383a3f0b59711832b9dc4e8329d7f216604semery if [[ $slave = yes ]]; then
1fceb383a3f0b59711832b9dc4e8329d7f216604semery printf "\t\tkdc = $master_hn\n" 1>&3
1fceb383a3f0b59711832b9dc4e8329d7f216604semery fi
1fceb383a3f0b59711832b9dc4e8329d7f216604semery printf "\t\tkdc = $fqhn\n" 1>&3
1fceb383a3f0b59711832b9dc4e8329d7f216604semery if [[ $master = yes ]]; then
1fceb383a3f0b59711832b9dc4e8329d7f216604semery printf "\t\tadmin_server = $fqhn\n" 1>&3
1fceb383a3f0b59711832b9dc4e8329d7f216604semery else
1fceb383a3f0b59711832b9dc4e8329d7f216604semery printf "\t\tadmin_server = $master_hn\n" 1>&3
1fceb383a3f0b59711832b9dc4e8329d7f216604semery fi
1fceb383a3f0b59711832b9dc4e8329d7f216604semery printf "\t}\n\n" 1>&3
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semery printf "[domain_realm]\n" 1>&3
1fceb383a3f0b59711832b9dc4e8329d7f216604semery printf "\t.$domain = $REALM\n\n" 1>&3
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semery printf "[logging]\n" 1>&3
1fceb383a3f0b59711832b9dc4e8329d7f216604semery printf "\tdefault = FILE:/var/krb5/kdc.log\n" 1>&3
1fceb383a3f0b59711832b9dc4e8329d7f216604semery printf "\tkdc = FILE:/var/krb5/kdc.log\n" 1>&3
1fceb383a3f0b59711832b9dc4e8329d7f216604semery printf "\tkdc_rotate = {\n\t\tperiod = 1d\n\t\tversions = 10\n\t}\n\n" 1>&3
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semery printf "[appdefaults]\n" 1>&3
1fceb383a3f0b59711832b9dc4e8329d7f216604semery printf "\tkinit = {\n\t\trenewable = true\n\t\tforwardable = true\n" 1>&3
1fceb383a3f0b59711832b9dc4e8329d7f216604semery printf "\t}\n" 1>&3
1fceb383a3f0b59711832b9dc4e8329d7f216604semery}
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semeryfunction cannot_create {
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semery typeset filename="$1"
1fceb383a3f0b59711832b9dc4e8329d7f216604semery typeset stat="$2"
1fceb383a3f0b59711832b9dc4e8329d7f216604semery if [[ $stat -ne 0 ]]; then
1fceb383a3f0b59711832b9dc4e8329d7f216604semery printf "\n$(gettext "Cannot create/edit %s, exiting").\n" $filename
1fceb383a3f0b59711832b9dc4e8329d7f216604semery error_message
1fceb383a3f0b59711832b9dc4e8329d7f216604semery fi
1fceb383a3f0b59711832b9dc4e8329d7f216604semery}
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semeryfunction check_admin {
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semery message=$1
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semery if [[ -z $ADMIN_PRINC ]]; then
1fceb383a3f0b59711832b9dc4e8329d7f216604semery printf "$message"
1fceb383a3f0b59711832b9dc4e8329d7f216604semery read ADMIN_PRINC
1fceb383a3f0b59711832b9dc4e8329d7f216604semery checkval="ADMIN_PRINC"; check_value $ADMIN_PRINC
1fceb383a3f0b59711832b9dc4e8329d7f216604semery fi
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semery echo "$ADMIN_PRINC">$TMP_FILE
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semery if egrep -s '\/admin' $TMP_FILE; then
1fceb383a3f0b59711832b9dc4e8329d7f216604semery # Already in "/admin" format, do nothing
1fceb383a3f0b59711832b9dc4e8329d7f216604semery :
1fceb383a3f0b59711832b9dc4e8329d7f216604semery else
1fceb383a3f0b59711832b9dc4e8329d7f216604semery if egrep -s '\/' $TMP_FILE; then
1fceb383a3f0b59711832b9dc4e8329d7f216604semery printf "\n$(gettext "Improper entry for krb5 admin principal, exiting").\n"
1fceb383a3f0b59711832b9dc4e8329d7f216604semery error_message
1fceb383a3f0b59711832b9dc4e8329d7f216604semery else
1fceb383a3f0b59711832b9dc4e8329d7f216604semery ADMIN_PRINC=$(echo "$ADMIN_PRINC/admin")
1fceb383a3f0b59711832b9dc4e8329d7f216604semery fi
1fceb383a3f0b59711832b9dc4e8329d7f216604semery fi
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semery}
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semeryfunction ping_check {
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semery typeset machine="$1"
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semery if $PING $machine > /dev/null 2>&1; then
1fceb383a3f0b59711832b9dc4e8329d7f216604semery :
1fceb383a3f0b59711832b9dc4e8329d7f216604semery else
1fceb383a3f0b59711832b9dc4e8329d7f216604semery printf "\n$(gettext "%s %s is unreachable, exiting").\n" $string $machine
1fceb383a3f0b59711832b9dc4e8329d7f216604semery error_message
1fceb383a3f0b59711832b9dc4e8329d7f216604semery fi
1fceb383a3f0b59711832b9dc4e8329d7f216604semery}
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semeryfunction check_host {
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semery echo "$host">$TMP_FILE
1fceb383a3f0b59711832b9dc4e8329d7f216604semery if egrep -s '[^.]\.[^.]+$' $TMP_FILE; then
1fceb383a3f0b59711832b9dc4e8329d7f216604semery # do nothing, host is in fqhn format
1fceb383a3f0b59711832b9dc4e8329d7f216604semery :
1fceb383a3f0b59711832b9dc4e8329d7f216604semery else
1fceb383a3f0b59711832b9dc4e8329d7f216604semery if egrep -s '\.+' $TMP_FILE; then
1fceb383a3f0b59711832b9dc4e8329d7f216604semery printf "\n$(gettext "Improper format of host name: '%s'").\n"
1fceb383a3f0b59711832b9dc4e8329d7f216604semery printf "$(gettext "Expecting the following format: 'somehost.example.com' or 'somehost', exiting").\n"
1fceb383a3f0b59711832b9dc4e8329d7f216604semery error_message
1fceb383a3f0b59711832b9dc4e8329d7f216604semery else
1fceb383a3f0b59711832b9dc4e8329d7f216604semery # Attach fqdn to host, to get the Fully Qualified Domain
1fceb383a3f0b59711832b9dc4e8329d7f216604semery # Name of the host requested
1fceb383a3f0b59711832b9dc4e8329d7f216604semery host=$(echo "$host.$domain")
1fceb383a3f0b59711832b9dc4e8329d7f216604semery fi
1fceb383a3f0b59711832b9dc4e8329d7f216604semery fi
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semery #
1fceb383a3f0b59711832b9dc4e8329d7f216604semery # Ping to see if the host is alive!
1fceb383a3f0b59711832b9dc4e8329d7f216604semery #
1fceb383a3f0b59711832b9dc4e8329d7f216604semery ping_check $host
1fceb383a3f0b59711832b9dc4e8329d7f216604semery}
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semeryfunction kill_daemons {
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semery # Kill daemons so they won't go into maintenance mode
1fceb383a3f0b59711832b9dc4e8329d7f216604semery $SVCADM disable -s krb5kdc
1fceb383a3f0b59711832b9dc4e8329d7f216604semery if [[ $? -ne 0 ]]; then
1fceb383a3f0b59711832b9dc4e8329d7f216604semery printf "\n$(gettext "Error in disabling krb5kdc, exiting").\n"
1fceb383a3f0b59711832b9dc4e8329d7f216604semery error_message
1fceb383a3f0b59711832b9dc4e8329d7f216604semery fi
1fceb383a3f0b59711832b9dc4e8329d7f216604semery $SVCADM disable -s kadmin
1fceb383a3f0b59711832b9dc4e8329d7f216604semery if [[ $? -ne 0 ]]; then
1fceb383a3f0b59711832b9dc4e8329d7f216604semery printf "\n$(gettext "Error in disabling kadmind, exiting").\n"
1fceb383a3f0b59711832b9dc4e8329d7f216604semery error_message
1fceb383a3f0b59711832b9dc4e8329d7f216604semery fi
1fceb383a3f0b59711832b9dc4e8329d7f216604semery $SVCADM disable -s krb5_prop
1fceb383a3f0b59711832b9dc4e8329d7f216604semery if [[ $? -ne 0 ]]; then
1fceb383a3f0b59711832b9dc4e8329d7f216604semery printf "\n$(gettext "Error in disabling kpropd, exiting").\n"
1fceb383a3f0b59711832b9dc4e8329d7f216604semery error_message
1fceb383a3f0b59711832b9dc4e8329d7f216604semery fi
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semery # Make sure that none of the daemons outside of SMF are running either
1fceb383a3f0b59711832b9dc4e8329d7f216604semery pkill kadmind
1fceb383a3f0b59711832b9dc4e8329d7f216604semery if [[ $? -gt 1 ]]; then
1fceb383a3f0b59711832b9dc4e8329d7f216604semery printf "\n$(gettext "Error in killing kadmind, exiting").\n"
1fceb383a3f0b59711832b9dc4e8329d7f216604semery error_message
1fceb383a3f0b59711832b9dc4e8329d7f216604semery fi
1fceb383a3f0b59711832b9dc4e8329d7f216604semery pkill krb5kdc
1fceb383a3f0b59711832b9dc4e8329d7f216604semery if [[ $? -gt 1 ]]; then
1fceb383a3f0b59711832b9dc4e8329d7f216604semery printf "\n$(gettext "Error in killing krb5kdc, exiting").\n"
1fceb383a3f0b59711832b9dc4e8329d7f216604semery error_message
1fceb383a3f0b59711832b9dc4e8329d7f216604semery fi
1fceb383a3f0b59711832b9dc4e8329d7f216604semery pkill kpropd
1fceb383a3f0b59711832b9dc4e8329d7f216604semery if [[ $? -gt 1 ]]; then
1fceb383a3f0b59711832b9dc4e8329d7f216604semery printf "\n$(gettext "Error in killing kpropd, exiting").\n"
1fceb383a3f0b59711832b9dc4e8329d7f216604semery error_message
1fceb383a3f0b59711832b9dc4e8329d7f216604semery fi
1fceb383a3f0b59711832b9dc4e8329d7f216604semery}
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semeryfunction setup_mkeytab {
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semery check_admin "\n$(gettext "Enter the krb5 administrative principal to be created"): \c"
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semery if [[ -z $PWFILE ]]; then
1fceb383a3f0b59711832b9dc4e8329d7f216604semery echo
1fceb383a3f0b59711832b9dc4e8329d7f216604semery $KADMINL -q "ank $ADMIN_PRINC"
1fceb383a3f0b59711832b9dc4e8329d7f216604semery check_ret $? $KADMINL
1fceb383a3f0b59711832b9dc4e8329d7f216604semery else
1fceb383a3f0b59711832b9dc4e8329d7f216604semery cat $PWFILE $PWFILE | $KADMINL -q "ank $ADMIN_PRINC" > /dev/null 2>&1
1fceb383a3f0b59711832b9dc4e8329d7f216604semery check_ret $? $KADMINL
1fceb383a3f0b59711832b9dc4e8329d7f216604semery fi
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semery $KADMINL -q "ank -randkey host/$fqhn" 1>$TMP_FILE 2>&1
1fceb383a3f0b59711832b9dc4e8329d7f216604semery check_ret $? $KADMINL
1fceb383a3f0b59711832b9dc4e8329d7f216604semery $KADMINL -q "ktadd host/$fqhn" 1>$TMP_FILE 2>&1
1fceb383a3f0b59711832b9dc4e8329d7f216604semery check_ret $? $KADMINL
1fceb383a3f0b59711832b9dc4e8329d7f216604semery}
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semeryfunction setup_skeytab {
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semery check_admin "\n$(gettext "Enter the krb5 administrative principal to be used"): \c"
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semery printf "$(gettext "Obtaining TGT for %s") ...\n" $ADMIN_PRINC
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semery if [[ -z $PWFILE ]]; then
1fceb383a3f0b59711832b9dc4e8329d7f216604semery kinit -c $TMP_CCACHE -S kadmin/$master_hn $ADMIN_PRINC
1fceb383a3f0b59711832b9dc4e8329d7f216604semery check_ret $? kinit
1fceb383a3f0b59711832b9dc4e8329d7f216604semery else
1fceb383a3f0b59711832b9dc4e8329d7f216604semery cat $PWFILE | kinit -c $TMP_CCACHE -S kadmin/$master_hn \
1fceb383a3f0b59711832b9dc4e8329d7f216604semery $ADMIN_PRINC > /dev/null 2>&1
1fceb383a3f0b59711832b9dc4e8329d7f216604semery fi
1fceb383a3f0b59711832b9dc4e8329d7f216604semery klist -c $TMP_CCACHE 1>$TMP_FILE 2>&1
1fceb383a3f0b59711832b9dc4e8329d7f216604semery if egrep -s "$(gettext "Valid starting")" $TMP_FILE && \
1fceb383a3f0b59711832b9dc4e8329d7f216604semery egrep -s "kadmin/$master_hn@$REALM" $TMP_FILE; then
1fceb383a3f0b59711832b9dc4e8329d7f216604semery :
1fceb383a3f0b59711832b9dc4e8329d7f216604semery else
1fceb383a3f0b59711832b9dc4e8329d7f216604semery printf "\n$(gettext "kinit of %s failed, exiting").\n" $ADMIN_PRINC
1fceb383a3f0b59711832b9dc4e8329d7f216604semery error_message
1fceb383a3f0b59711832b9dc4e8329d7f216604semery fi
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semery $KADMIN -c $TMP_CCACHE -q "ank -randkey kiprop/$fqhn" 1>$TMP_FILE 2>&1
1fceb383a3f0b59711832b9dc4e8329d7f216604semery check_ret $? $KADMIN
1fceb383a3f0b59711832b9dc4e8329d7f216604semery $KADMIN -c $TMP_CCACHE -q "ktadd kiprop/$fqhn" 1>$TMP_FILE 2>&1
1fceb383a3f0b59711832b9dc4e8329d7f216604semery check_ret $? $KADMIN
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semery $KADMIN -c $TMP_CCACHE -q "ank -randkey host/$fqhn" 1>$TMP_FILE 2>&1
1fceb383a3f0b59711832b9dc4e8329d7f216604semery check_ret $? $KADMIN
1fceb383a3f0b59711832b9dc4e8329d7f216604semery $KADMIN -c $TMP_CCACHE -q "ktadd host/$fqhn" 1>$TMP_FILE 2>&1
1fceb383a3f0b59711832b9dc4e8329d7f216604semery check_ret $? $KADMIN
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semery kdestroy -q -c $TMP_CCACHE 1>$TMP_FILE 2>&1
1fceb383a3f0b59711832b9dc4e8329d7f216604semery check_ret $? $kdestroy
1fceb383a3f0b59711832b9dc4e8329d7f216604semery}
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semeryfunction setup_kadm5acl {
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semery printf "\n$(gettext "Setting up %s").\n" $KADM5ACL
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semery if [[ -r $KADM5ACL ]]; then
1fceb383a3f0b59711832b9dc4e8329d7f216604semery cat $KADM5ACL > $KADM5ACL.sav
1fceb383a3f0b59711832b9dc4e8329d7f216604semery cannot_create $KADM5ACL.sav $?
1fceb383a3f0b59711832b9dc4e8329d7f216604semery fi
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semery exec 3>$KADM5ACL
1fceb383a3f0b59711832b9dc4e8329d7f216604semery if [[ $? -ne 0 ]]; then
1fceb383a3f0b59711832b9dc4e8329d7f216604semery printf "\n$(gettext "Cannot write to %s, exiting").\n" $KADM5ACL
1fceb383a3f0b59711832b9dc4e8329d7f216604semery error_message
1fceb383a3f0b59711832b9dc4e8329d7f216604semery fi
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semery if [[ $master = yes ]]; then
1fceb383a3f0b59711832b9dc4e8329d7f216604semery printf "\n$ADMIN_PRINC@$REALM\t\tacmil\n" 1>&3
1fceb383a3f0b59711832b9dc4e8329d7f216604semery printf "\nkiprop/*@$REALM\t\tp\n" 1>&3
1fceb383a3f0b59711832b9dc4e8329d7f216604semery else
1fceb383a3f0b59711832b9dc4e8329d7f216604semery printf "\n*/admin@___default_realm___\t\t*\n" 1>&3
1fceb383a3f0b59711832b9dc4e8329d7f216604semery fi
1fceb383a3f0b59711832b9dc4e8329d7f216604semery}
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semeryfunction setup_kpropdacl {
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semery printf "\n$(gettext "Setting up %s").\n\n" $KPROPACL
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semery if [[ -r $KPROPACL ]]; then
1fceb383a3f0b59711832b9dc4e8329d7f216604semery cat $KPROPACL > $KPROPACL.sav
1fceb383a3f0b59711832b9dc4e8329d7f216604semery cannot_create $KPROPACL.sav $?
1fceb383a3f0b59711832b9dc4e8329d7f216604semery fi
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semery exec 3>$KPROPACL
1fceb383a3f0b59711832b9dc4e8329d7f216604semery if [[ $? -ne 0 ]]; then
1fceb383a3f0b59711832b9dc4e8329d7f216604semery printf "\n$(gettext "Cannot write to %s, exiting").\n" $KPROPACL
1fceb383a3f0b59711832b9dc4e8329d7f216604semery error_message
1fceb383a3f0b59711832b9dc4e8329d7f216604semery fi
1fceb383a3f0b59711832b9dc4e8329d7f216604semery printf "\nhost/$master_hn@$REALM\n" 1>&3
1fceb383a3f0b59711832b9dc4e8329d7f216604semery}
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semeryfunction setup_master {
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semery # create principal DB (KDB)
1fceb383a3f0b59711832b9dc4e8329d7f216604semery if [[ -z $PWFILE ]]; then
1fceb383a3f0b59711832b9dc4e8329d7f216604semery echo
1fceb383a3f0b59711832b9dc4e8329d7f216604semery kdb5_util create
1fceb383a3f0b59711832b9dc4e8329d7f216604semery check_ret $? kdb5_util
1fceb383a3f0b59711832b9dc4e8329d7f216604semery else
1fceb383a3f0b59711832b9dc4e8329d7f216604semery cat $PWFILE $PWFILE | kdb5_util create > /dev/null
1fceb383a3f0b59711832b9dc4e8329d7f216604semery check_ret $? kdb5_util
1fceb383a3f0b59711832b9dc4e8329d7f216604semery fi
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semery setup_mkeytab
1fceb383a3f0b59711832b9dc4e8329d7f216604semery setup_kadm5acl
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semery $SVCADM enable -r -s krb5kdc
1fceb383a3f0b59711832b9dc4e8329d7f216604semery $SVCADM enable -r -s kadmin
1fceb383a3f0b59711832b9dc4e8329d7f216604semery}
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semeryfunction setup_slave {
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semery integer count=1
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semery setup_skeytab
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semery # Clear the kadm5acl, since the start methods look at this file
1fceb383a3f0b59711832b9dc4e8329d7f216604semery # to see if the server has been configured as a master server
1fceb383a3f0b59711832b9dc4e8329d7f216604semery setup_kadm5acl
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semery setup_kpropdacl
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semery $SVCADM enable -r -s krb5_prop
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semery # Wait for full propagation of the database, in some environments
1fceb383a3f0b59711832b9dc4e8329d7f216604semery # this could take a few seconds
1fceb383a3f0b59711832b9dc4e8329d7f216604semery while [[ ! -f /var/krb5/principal ]]; do
1fceb383a3f0b59711832b9dc4e8329d7f216604semery if [[ count -gt $LOOPCNT ]]; then
1fceb383a3f0b59711832b9dc4e8329d7f216604semery printf "\n$(gettext "Could not receive updates from the master").\n"
1fceb383a3f0b59711832b9dc4e8329d7f216604semery error_message
1fceb383a3f0b59711832b9dc4e8329d7f216604semery ((count = count + 1))
1fceb383a3f0b59711832b9dc4e8329d7f216604semery fi
1fceb383a3f0b59711832b9dc4e8329d7f216604semery printf "$(gettext "Waiting for database from master")...\n"
1fceb383a3f0b59711832b9dc4e8329d7f216604semery sleep $SLEEPTIME
1fceb383a3f0b59711832b9dc4e8329d7f216604semery done
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semery # The database is propagated now we need to create the stash file
1fceb383a3f0b59711832b9dc4e8329d7f216604semery if [[ -z $PWFILE ]]; then
1fceb383a3f0b59711832b9dc4e8329d7f216604semery kdb5_util stash
1fceb383a3f0b59711832b9dc4e8329d7f216604semery check_ret $? kdb5_util
1fceb383a3f0b59711832b9dc4e8329d7f216604semery else
1fceb383a3f0b59711832b9dc4e8329d7f216604semery cat $PWFILE | kdb5_util stash > /dev/null 2>&1
1fceb383a3f0b59711832b9dc4e8329d7f216604semery check_ret $? kdb5_util
1fceb383a3f0b59711832b9dc4e8329d7f216604semery fi
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semery $SVCADM enable -r -s krb5kdc
1fceb383a3f0b59711832b9dc4e8329d7f216604semery}
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
b793cf1f804f52789df526036d96d1be7d3efc9dShawn Emeryfunction kdb5_destroy {
b793cf1f804f52789df526036d96d1be7d3efc9dShawn Emery typeset status=0
b793cf1f804f52789df526036d96d1be7d3efc9dShawn Emery typeset arg=
b793cf1f804f52789df526036d96d1be7d3efc9dShawn Emery
b793cf1f804f52789df526036d96d1be7d3efc9dShawn Emery [[ -n $REALM ]] && arg="-r $REALM"
b793cf1f804f52789df526036d96d1be7d3efc9dShawn Emery printf "$(gettext "yes")\n" | kdb5_util $arg destroy > /dev/null 2>&1
b793cf1f804f52789df526036d96d1be7d3efc9dShawn Emery
b793cf1f804f52789df526036d96d1be7d3efc9dShawn Emery status=$?
b793cf1f804f52789df526036d96d1be7d3efc9dShawn Emery [[ $status -eq 0 ]] && return $status
b793cf1f804f52789df526036d96d1be7d3efc9dShawn Emery
b793cf1f804f52789df526036d96d1be7d3efc9dShawn Emery # Could mean that the admin could have already removed part of the
b793cf1f804f52789df526036d96d1be7d3efc9dShawn Emery # configuration. Better to check to see if anything else should be
b793cf1f804f52789df526036d96d1be7d3efc9dShawn Emery # destroyed. We check by looking at any other stash files in /var/krb5
b793cf1f804f52789df526036d96d1be7d3efc9dShawn Emery stashfiles=`ls $STASH`
b793cf1f804f52789df526036d96d1be7d3efc9dShawn Emery for stash in $stashfiles
b793cf1f804f52789df526036d96d1be7d3efc9dShawn Emery do
b793cf1f804f52789df526036d96d1be7d3efc9dShawn Emery realm=${stash#*.k5.}
b793cf1f804f52789df526036d96d1be7d3efc9dShawn Emery [[ -z $realm ]] && continue
b793cf1f804f52789df526036d96d1be7d3efc9dShawn Emery
b793cf1f804f52789df526036d96d1be7d3efc9dShawn Emery printf "$(gettext "Found non-default realm: %s")\n" $realm
b793cf1f804f52789df526036d96d1be7d3efc9dShawn Emery query "$(gettext "Do you wish to destroy realm"): $realm ?"
b793cf1f804f52789df526036d96d1be7d3efc9dShawn Emery if [[ $answer == yes ]]; then
b793cf1f804f52789df526036d96d1be7d3efc9dShawn Emery printf "$(gettext "yes")\n" | kdb5_util -r $realm destroy > /dev/null 2>&1
b793cf1f804f52789df526036d96d1be7d3efc9dShawn Emery status=$?
b793cf1f804f52789df526036d96d1be7d3efc9dShawn Emery if [[ $status -ne 0 ]]; then
b793cf1f804f52789df526036d96d1be7d3efc9dShawn Emery printf "$(gettext "Could not destroy realm: %s")\n" $realm
b793cf1f804f52789df526036d96d1be7d3efc9dShawn Emery return $status
b793cf1f804f52789df526036d96d1be7d3efc9dShawn Emery fi
b793cf1f804f52789df526036d96d1be7d3efc9dShawn Emery else
b793cf1f804f52789df526036d96d1be7d3efc9dShawn Emery printf "$(gettext "%s will not be destroyed").\n" $realm
b793cf1f804f52789df526036d96d1be7d3efc9dShawn Emery status=0
b793cf1f804f52789df526036d96d1be7d3efc9dShawn Emery fi
b793cf1f804f52789df526036d96d1be7d3efc9dShawn Emery done
b793cf1f804f52789df526036d96d1be7d3efc9dShawn Emery
b793cf1f804f52789df526036d96d1be7d3efc9dShawn Emery return $status
b793cf1f804f52789df526036d96d1be7d3efc9dShawn Emery}
b793cf1f804f52789df526036d96d1be7d3efc9dShawn Emery
1fceb383a3f0b59711832b9dc4e8329d7f216604semeryfunction destroy_kdc {
b793cf1f804f52789df526036d96d1be7d3efc9dShawn Emery typeset status
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semery # Check first to see if this is an existing KDC or server
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan if [[ -f $KRB5KT || -f $PRINCDB || -f $OLDPRINCDB ]]
1fceb383a3f0b59711832b9dc4e8329d7f216604semery then
1fceb383a3f0b59711832b9dc4e8329d7f216604semery if [[ -z $PWFILE ]]; then
1fceb383a3f0b59711832b9dc4e8329d7f216604semery printf "\n$(gettext "Some of the following files are present on this system"):\n"
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan echo "\t$KRB5KT\n\t$PRINCDB\n\t$OLDPRINCDB\n\t$STASH\n"
1fceb383a3f0b59711832b9dc4e8329d7f216604semery if [[ -z $d_option ]]; then
1fceb383a3f0b59711832b9dc4e8329d7f216604semery printf "$(gettext "You must first run 'kdcmgr destroy' to remove all of these files before creating a KDC server").\n\n"
67c900400ffabaec1fd8a7ee6cea5e9beb39c3cbsemery cleanup 1
1fceb383a3f0b59711832b9dc4e8329d7f216604semery else
1fceb383a3f0b59711832b9dc4e8329d7f216604semery ok_to_proceed "$(gettext "All of these files will be removed, okay to proceed?")"
1fceb383a3f0b59711832b9dc4e8329d7f216604semery fi
1fceb383a3f0b59711832b9dc4e8329d7f216604semery fi
1fceb383a3f0b59711832b9dc4e8329d7f216604semery else
1fceb383a3f0b59711832b9dc4e8329d7f216604semery if [[ -n $d_option ]]; then
1fceb383a3f0b59711832b9dc4e8329d7f216604semery printf "\n$(gettext "No KDC related files exist, exiting").\n\n"
67c900400ffabaec1fd8a7ee6cea5e9beb39c3cbsemery cleanup 0
1fceb383a3f0b59711832b9dc4e8329d7f216604semery fi
1fceb383a3f0b59711832b9dc4e8329d7f216604semery return
1fceb383a3f0b59711832b9dc4e8329d7f216604semery fi
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
b793cf1f804f52789df526036d96d1be7d3efc9dShawn Emery kdb5_destroy
b793cf1f804f52789df526036d96d1be7d3efc9dShawn Emery status=$?
b793cf1f804f52789df526036d96d1be7d3efc9dShawn Emery
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan rm -f $KRB5KT
b793cf1f804f52789df526036d96d1be7d3efc9dShawn Emery
b793cf1f804f52789df526036d96d1be7d3efc9dShawn Emery [[ $status -ne 0 ]] && cleanup 1
1fceb383a3f0b59711832b9dc4e8329d7f216604semery}
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semeryfunction kadm5_acl_configed {
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semery if [[ -s $KADM5ACL ]]; then
1fceb383a3f0b59711832b9dc4e8329d7f216604semery grep -v '^[ ]*#' $KADM5ACL | \
1fceb383a3f0b59711832b9dc4e8329d7f216604semery egrep '_default_realm_' > /dev/null 2>&1
1fceb383a3f0b59711832b9dc4e8329d7f216604semery if [[ $? -gt 0 ]]; then
1fceb383a3f0b59711832b9dc4e8329d7f216604semery return 0
1fceb383a3f0b59711832b9dc4e8329d7f216604semery fi
1fceb383a3f0b59711832b9dc4e8329d7f216604semery fi
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semery return 1
1fceb383a3f0b59711832b9dc4e8329d7f216604semery}
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semeryfunction status_kdc {
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semery integer is_master=0
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semery printf "\n$(gettext "KDC Status Information")\n"
1fceb383a3f0b59711832b9dc4e8329d7f216604semery echo "--------------------------------------------"
1fceb383a3f0b59711832b9dc4e8329d7f216604semery svcs -xv svc:/network/security/krb5kdc:default
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semery if kadm5_acl_configed; then
1fceb383a3f0b59711832b9dc4e8329d7f216604semery is_master=1
1fceb383a3f0b59711832b9dc4e8329d7f216604semery printf "\n$(gettext "KDC Master Status Information")\n"
1fceb383a3f0b59711832b9dc4e8329d7f216604semery echo "--------------------------------------------"
1fceb383a3f0b59711832b9dc4e8329d7f216604semery svcs -xv svc:/network/security/kadmin:default
1fceb383a3f0b59711832b9dc4e8329d7f216604semery else
1fceb383a3f0b59711832b9dc4e8329d7f216604semery printf "\n$(gettext "KDC Slave Status Information")\n"
1fceb383a3f0b59711832b9dc4e8329d7f216604semery echo "--------------------------------------------"
1fceb383a3f0b59711832b9dc4e8329d7f216604semery svcs -xv svc:/network/security/krb5_prop:default
1fceb383a3f0b59711832b9dc4e8329d7f216604semery fi
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semery printf "\n$(gettext "Transaction Log Information")\n"
1fceb383a3f0b59711832b9dc4e8329d7f216604semery echo "--------------------------------------------"
1fceb383a3f0b59711832b9dc4e8329d7f216604semery /usr/sbin/kproplog -h
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semery printf "$(gettext "Kerberos Related File Information")\n"
1fceb383a3f0b59711832b9dc4e8329d7f216604semery echo "--------------------------------------------"
1fceb383a3f0b59711832b9dc4e8329d7f216604semery printf "$(gettext "(will display any missing files below)")\n"
1fceb383a3f0b59711832b9dc4e8329d7f216604semery FILELIST="$KRB5_KDC_CONF $KRB5_KRB_CONF $KADM5ACL $KRB5KT $PRINCDB "
1fceb383a3f0b59711832b9dc4e8329d7f216604semery for file in $FILELIST; do
1fceb383a3f0b59711832b9dc4e8329d7f216604semery if [[ ! -s $file ]]; then
1fceb383a3f0b59711832b9dc4e8329d7f216604semery printf "$(gettext "%s not found").\n" $file
1fceb383a3f0b59711832b9dc4e8329d7f216604semery fi
1fceb383a3f0b59711832b9dc4e8329d7f216604semery done
1fceb383a3f0b59711832b9dc4e8329d7f216604semery if [[ $is_master -eq 0 && ! -s $KPROPACL ]]; then
1fceb383a3f0b59711832b9dc4e8329d7f216604semery printf "$(gettext "%s not found").\n" $KPROPACL
1fceb383a3f0b59711832b9dc4e8329d7f216604semery fi
159d09a20817016f09b3ea28d1bdada4a336bb91Mark Phalan
1fceb383a3f0b59711832b9dc4e8329d7f216604semery test ! -s $STASH &&
1fceb383a3f0b59711832b9dc4e8329d7f216604semery printf "$(gettext "Stash file not found") (/var/krb5/.k5.*).\n"
1fceb383a3f0b59711832b9dc4e8329d7f216604semery echo
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
67c900400ffabaec1fd8a7ee6cea5e9beb39c3cbsemery cleanup 0
1fceb383a3f0b59711832b9dc4e8329d7f216604semery}
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semery# Start of Main script
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
b793cf1f804f52789df526036d96d1be7d3efc9dShawn Emerytypeset -u REALM
b793cf1f804f52789df526036d96d1be7d3efc9dShawn Emerytypeset -l host
b793cf1f804f52789df526036d96d1be7d3efc9dShawn Emerytypeset -l fqhn
b793cf1f804f52789df526036d96d1be7d3efc9dShawn Emery
1fceb383a3f0b59711832b9dc4e8329d7f216604semery# Defaults
1fceb383a3f0b59711832b9dc4e8329d7f216604semeryKRB5_KDC_CONF=/etc/krb5/kdc.conf
1fceb383a3f0b59711832b9dc4e8329d7f216604semeryKRB5_KRB_CONF=/etc/krb5/krb5.conf
1fceb383a3f0b59711832b9dc4e8329d7f216604semeryKADM5ACL=/etc/krb5/kadm5.acl
1fceb383a3f0b59711832b9dc4e8329d7f216604semeryKPROPACL=/etc/krb5/kpropd.acl
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semeryKRB5KT=/etc/krb5/krb5.keytab
1fceb383a3f0b59711832b9dc4e8329d7f216604semeryPRINCDB=/var/krb5/principal
1fceb383a3f0b59711832b9dc4e8329d7f216604semeryOLDPRINCDB=/var/krb5/principal.old
1fceb383a3f0b59711832b9dc4e8329d7f216604semerySTASH=/var/krb5/.k5.*
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semeryKADMINL=/usr/sbin/kadmin.local; check_bin $KADMINL
1fceb383a3f0b59711832b9dc4e8329d7f216604semeryKADMIN=/usr/sbin/kadmin; check_bin $KADMIN
1fceb383a3f0b59711832b9dc4e8329d7f216604semeryKDCRES=/usr/lib/krb5/klookup; check_bin $KDCRES
1fceb383a3f0b59711832b9dc4e8329d7f216604semerySVCADM=/usr/sbin/svcadm; check_bin $SVCADM
1fceb383a3f0b59711832b9dc4e8329d7f216604semeryPING=/usr/sbin/ping; check_bin $PING
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semeryENCTYPE=aes128-cts-hmac-sha1-96
1fceb383a3f0b59711832b9dc4e8329d7f216604semeryLOOPCNT=10
1fceb383a3f0b59711832b9dc4e8329d7f216604semerySLEEPTIME=5
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semeryif [[ -x /usr/bin/mktemp ]]; then
1fceb383a3f0b59711832b9dc4e8329d7f216604semery TMP_FILE=$(/usr/bin/mktemp /etc/krb5/krb5tmpfile.XXXXXX)
1fceb383a3f0b59711832b9dc4e8329d7f216604semery TMP_CCACHE=$(/usr/bin/mktemp /etc/krb5/krb5tmpccache.XXXXXX)
1fceb383a3f0b59711832b9dc4e8329d7f216604semeryelse
1fceb383a3f0b59711832b9dc4e8329d7f216604semery TMP_FILE="/etc/krb5/krb5tmpfile.$$"
1fceb383a3f0b59711832b9dc4e8329d7f216604semery TMP_CCACHE="/etc/krb5/krb5tmpccache.$$"
1fceb383a3f0b59711832b9dc4e8329d7f216604semeryfi
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semeryif [[ ! -f /etc/resolv.conf ]]; then
1fceb383a3f0b59711832b9dc4e8329d7f216604semery printf "$(gettext "Error: need to configure /etc/resolv.conf").\n"
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
67c900400ffabaec1fd8a7ee6cea5e9beb39c3cbsemery cleanup 1
1fceb383a3f0b59711832b9dc4e8329d7f216604semeryfi
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semeryfqhn=`$KDCRES`
1fceb383a3f0b59711832b9dc4e8329d7f216604semeryif [[ -n "$fqhn" ]]; then
1fceb383a3f0b59711832b9dc4e8329d7f216604semery :
1fceb383a3f0b59711832b9dc4e8329d7f216604semeryelif [[ -n $(hostname) && -n $(domainname) ]]; then
b793cf1f804f52789df526036d96d1be7d3efc9dShawn Emery fqhn=$(hostname|cut -f1 -d'.').$(domainname|cut -f2- -d'.')
1fceb383a3f0b59711832b9dc4e8329d7f216604semeryelse
1fceb383a3f0b59711832b9dc4e8329d7f216604semery printf "$(gettext "Error: can not determine full hostname (FQHN). Aborting")\n"
1fceb383a3f0b59711832b9dc4e8329d7f216604semery printf "$(gettext "Note, trying to use hostname and domainname to get FQHN").\n"
67c900400ffabaec1fd8a7ee6cea5e9beb39c3cbsemery
67c900400ffabaec1fd8a7ee6cea5e9beb39c3cbsemery cleanup 1
1fceb383a3f0b59711832b9dc4e8329d7f216604semeryfi
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semeryping_check $fqhn
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semerydomain=${fqhn#*.} # remove host part
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semeryexitmsg=`printf "$(gettext "Exiting...")"`
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semerytrap "echo $exitmsg; rm -f $TMP_FILE $TMP_CCACHE; exit 1" HUP INT QUIT TERM
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semerywhile getopts :a:e:hp:r:s flag
1fceb383a3f0b59711832b9dc4e8329d7f216604semerydo
1fceb383a3f0b59711832b9dc4e8329d7f216604semery case "$flag" in
1fceb383a3f0b59711832b9dc4e8329d7f216604semery a) ADMIN_PRINC=$OPTARG;;
1fceb383a3f0b59711832b9dc4e8329d7f216604semery e) ENCTYPE=$OPTARG;;
1fceb383a3f0b59711832b9dc4e8329d7f216604semery h) usage;;
1fceb383a3f0b59711832b9dc4e8329d7f216604semery p) PWFILE=$OPTARG
1fceb383a3f0b59711832b9dc4e8329d7f216604semery if [[ ! -r $PWFILE ]]; then
1fceb383a3f0b59711832b9dc4e8329d7f216604semery printf "\n$(gettext "Password file %s does not exist, exiting").\n\n" $PWFILE
67c900400ffabaec1fd8a7ee6cea5e9beb39c3cbsemery cleanup 1
1fceb383a3f0b59711832b9dc4e8329d7f216604semery fi
1fceb383a3f0b59711832b9dc4e8329d7f216604semery ;;
1fceb383a3f0b59711832b9dc4e8329d7f216604semery r) REALM=$OPTARG;;
1fceb383a3f0b59711832b9dc4e8329d7f216604semery *) usage;;
1fceb383a3f0b59711832b9dc4e8329d7f216604semery esac
1fceb383a3f0b59711832b9dc4e8329d7f216604semerydone
1fceb383a3f0b59711832b9dc4e8329d7f216604semeryshift $(($OPTIND - 1))
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semerycase "$*" in
1fceb383a3f0b59711832b9dc4e8329d7f216604semery create) master=yes;;
1fceb383a3f0b59711832b9dc4e8329d7f216604semery "create master") master=yes;;
1fceb383a3f0b59711832b9dc4e8329d7f216604semery "create -m "*) host=$3
1fceb383a3f0b59711832b9dc4e8329d7f216604semery checkval="MASTER"; check_value $host
1fceb383a3f0b59711832b9dc4e8329d7f216604semery check_host
1fceb383a3f0b59711832b9dc4e8329d7f216604semery master_hn=$host
1fceb383a3f0b59711832b9dc4e8329d7f216604semery if [[ $4 != slave ]]; then
1fceb383a3f0b59711832b9dc4e8329d7f216604semery usage
1fceb383a3f0b59711832b9dc4e8329d7f216604semery fi;&
1fceb383a3f0b59711832b9dc4e8329d7f216604semery "create slave") slave=yes;;
1fceb383a3f0b59711832b9dc4e8329d7f216604semery destroy) d_option=yes
1fceb383a3f0b59711832b9dc4e8329d7f216604semery kill_daemons
47fc6f3c5b3c55e162497f2704e8a30366037e6dsemery destroy_kdc
47fc6f3c5b3c55e162497f2704e8a30366037e6dsemery cleanup 0;;
1fceb383a3f0b59711832b9dc4e8329d7f216604semery status) status_kdc;;
1fceb383a3f0b59711832b9dc4e8329d7f216604semery *) usage;;
1fceb383a3f0b59711832b9dc4e8329d7f216604semeryesac
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semerykill_daemons
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semeryprintf "\n$(gettext "Starting server setup")\n"
1fceb383a3f0b59711832b9dc4e8329d7f216604semeryprintf "---------------------------------------------------\n"
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semery# Checks for existing kdb and destroys if desired
1fceb383a3f0b59711832b9dc4e8329d7f216604semerydestroy_kdc
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semeryif [[ -z $REALM ]]; then
1fceb383a3f0b59711832b9dc4e8329d7f216604semery printf "$(gettext "Enter the Kerberos realm"): \c"
1fceb383a3f0b59711832b9dc4e8329d7f216604semery read REALM
1fceb383a3f0b59711832b9dc4e8329d7f216604semery checkval="REALM"; check_value $REALM
1fceb383a3f0b59711832b9dc4e8329d7f216604semeryfi
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semeryif [[ -z $master && -z $slave ]]; then
1fceb383a3f0b59711832b9dc4e8329d7f216604semery query "$(gettext "Is this machine to be configured as a master?"): \c"
1fceb383a3f0b59711832b9dc4e8329d7f216604semery master=$answer
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semery if [[ $answer = no ]]; then
1fceb383a3f0b59711832b9dc4e8329d7f216604semery query "$(gettext "Is this machine to be configured as a slave?"): \c"
1fceb383a3f0b59711832b9dc4e8329d7f216604semery slave=$answer
1fceb383a3f0b59711832b9dc4e8329d7f216604semery if [[ $answer = no ]]; then
1fceb383a3f0b59711832b9dc4e8329d7f216604semery printf "\n$(gettext "Machine must either be a master or a slave KDC server").\n"
1fceb383a3f0b59711832b9dc4e8329d7f216604semery error_message
1fceb383a3f0b59711832b9dc4e8329d7f216604semery fi
1fceb383a3f0b59711832b9dc4e8329d7f216604semery fi
1fceb383a3f0b59711832b9dc4e8329d7f216604semeryfi
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semeryif [[ $slave = yes && -z $master_hn ]]; then
1fceb383a3f0b59711832b9dc4e8329d7f216604semery printf "$(gettext "What is the master KDC's host name?"): \c"
1fceb383a3f0b59711832b9dc4e8329d7f216604semery read host
1fceb383a3f0b59711832b9dc4e8329d7f216604semery checkval="MASTER"; check_value $host
1fceb383a3f0b59711832b9dc4e8329d7f216604semery check_host
1fceb383a3f0b59711832b9dc4e8329d7f216604semery master_hn=$host
1fceb383a3f0b59711832b9dc4e8329d7f216604semeryfi
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semerysetup_kdc_conf
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semerysetup_krb_conf
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semeryif [[ $master = yes ]]; then
1fceb383a3f0b59711832b9dc4e8329d7f216604semery setup_master
1fceb383a3f0b59711832b9dc4e8329d7f216604semeryelse
1fceb383a3f0b59711832b9dc4e8329d7f216604semery setup_slave
1fceb383a3f0b59711832b9dc4e8329d7f216604semeryfi
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
1fceb383a3f0b59711832b9dc4e8329d7f216604semeryprintf "\n---------------------------------------------------\n"
1fceb383a3f0b59711832b9dc4e8329d7f216604semeryprintf "$(gettext "Setup COMPLETE").\n\n"
1fceb383a3f0b59711832b9dc4e8329d7f216604semery
67c900400ffabaec1fd8a7ee6cea5e9beb39c3cbsemerycleanup 0