#!/bin/bash
#< Script to change admin password for JBoss JMX and WEB consoles
#
# Kevin Waldron - 20070322
BASENAME="/bin/basename"
CHMOD="/bin/chmod"
CP="/bin/cp"
DATE="/bin/date"
ECHO="/bin/echo"
ID="/usr/xpg4/bin/id"
MV="/bin/mv"
SED="/usr/bin/sed"
STTY="/bin/stty"
JBOSS_ROOT="/usr/local/jboss4"
JBOSS_SERVER_ROOT="${JBOSS_ROOT}/server"
JBOSS_SERVERS=( "${JBOSS_SERVER_ROOT}/instance1" \
"${JBOSS_SERVER_ROOT}/instance2" \
"${JBOSS_SERVER_ROOT}/instance3" )
# we use jmx-console-users.properties for all console auth (WEB and JMX)
JBOSS_PASSWD="conf/props/jmx-console-users.properties"
THIS_PROG=$( ${BASENAME} $0 )
VALID_USER="jboss"
VERBOSE=0
function print_error {
${ECHO} "Error: $@" >&2
}
function printv {
# print if verbose
(( VERBOSE )) && ${ECHO} "$@"
}
function print_usage {
{
${ECHO} "Usage: ${THIS_PROG} [-hv]"
${ECHO} " -h Display this usage message"
${ECHO} " -v Verbose"
} >&2
}
function check_user {
CURRENT_USER=$( ${ID} -un )
if [ "${CURRENT_USER}" != "${VALID_USER}" ]; then
print_error "Must be executed as user ${VALID_USER}"
exit 1
fi
}
function check_servers {
ERRORCOUNT=0
for JBOSS_SERVER in ${JBOSS_SERVERS[@]}; do
if [ ! -d "${JBOSS_SERVER}" ]; then
print_error "Server ${JBOSS_SERVER##*/} does not exist"
(( ERRORCOUNT = ERRORCOUNT + 1 ))
fi
if [ ! -f "${JBOSS_SERVER}/${JBOSS_PASSWD}" ]; then
print_error "Cannot locate ${JBOSS_PASSWD##*/} for server ${JBOSS_SERVER##*/}"
(( ERRORCOUNT = ERRORCOUNT + 1 ))
fi
done
if [ "${ERRORCOUNT}" -gt "0" ]; then
printv "${ERRORCOUNT} errors encountered - exiting"
exit 1
fi
}
function get_new_passwd {
${ECHO} "Please enter new JBoss administrator console password: \c"
${STTY} -echo
read NEW_PASSWD
${STTY} echo
${ECHO}
if [ "${NEW_PASSWD}" = "" ]; then
print_error "Blank password not allowed"
exit 1
fi
${ECHO} "Please confirm new JBoss administrator console password: \c"
${STTY} -echo
read CONFIRM_PASSWD
${STTY} echo
${ECHO}
printv "New passwd: ${NEW_PASSWD} Confirm passwd: ${CONFIRM_PASSWD}"
if [ "${NEW_PASSWD}" != "${CONFIRM_PASSWD}" ]; then
print_error "Passwords do not match"
exit 0
fi
}
function set_new_passwd {
for JBOSS_SERVER in ${JBOSS_SERVERS[@]}; do
THIS_CONF="${JBOSS_SERVER}/${JBOSS_PASSWD}"
printv "Changing password in ${THIS_CONF} for user admin"
(( VERBOSE )) && {
OLD_PASSWD=$( ${SED} -n 's/^admin=\(.*\)$/\1/p' ${THIS_CONF} )
printv "Old password: ${OLD_PASSWD}"
}
BACKUP_FILE="${THIS_CONF}.$( ${DATE} +%Y%m%d-%H%M )"
${CP} -p ${THIS_CONF} ${BACKUP_FILE}
printv "Backup created @ ${BACKUP_FILE}"
${SED} "s/^admin=.*$/admin=${NEW_PASSWD}/" ${THIS_CONF} > ${THIS_CONF}.tmp
${MV} ${THIS_CONF}.tmp ${THIS_CONF}
${CHMOD} 770 ${THIS_CONF}
CURRENT_PASSWD=$( ${SED} -n 's/^admin=\(.*\)$/\1/p' ${THIS_CONF} )
if [ "${CURRENT_PASSWD}" = "${NEW_PASSWD}" ]; then
${ECHO} "Password successfully changed for ${JBOSS_SERVER##*/}"
fi
done
}
#
# main()
#
check_user
while getopts ":hv" OPTION; do
case ${OPTION} in
"h") print_usage && exit 0 ;;
"v") VERBOSE=1 ;;
* ) print_usage && exit 1 ;;
esac
done
shift $(( ${OPTIND} - 1 ))
if [ "$#" -ne "0" ]; then
print_usage && exit 1
fi
check_servers
get_new_passwd
set_new_passwd
exit 0