Cdiff functions_static.ksh
*** /workspace/du105637/oscposthot/webrev/usr/src/cmd/ha-services/gds-agents/PostgreSQL/functions_static.ksh- Tue Apr 22 05:14:55 2008
--- functions_static.ksh Mon Apr 21 06:10:05 2008
*** 19,29 ****
#
# CDDL HEADER END
#
#
! # Copyright 2007 Sun Microsystems, Inc. All rights reserved.
# Use is subject to license terms.
#
#ident "%Z%%M% %I% %E% SMI"
--- 19,29 ----
#
# CDDL HEADER END
#
#
! # Copyright 2008 Sun Microsystems, Inc. All rights reserved.
# Use is subject to license terms.
#
#ident "%Z%%M% %I% %E% SMI"
*** 39,49 ****
--- 39,57 ----
PMFADM=/usr/cluster/bin/pmfadm
UNAME=/usr/bin/uname
ECHO=/usr/bin/echo
AWK=/usr/bin/awk
EGREP=/usr/bin/egrep
+ GREP=/usr/bin/grep
PROJECTS=/usr/bin/projects
+ WC=/usr/bin/wc
+ CAT=/usr/bin/cat
+ ENV=/usr/bin/env
+ RM=/usr/bin/rm
+ SSH_AGENT=/usr/bin/ssh-agent
+ SSH_ADD=/usr/bin/ssh-add
+ CHMOD=/usr/bin/chmod
terminate()
{
debug_message "Function: terminate - Begin"
*** 142,163 ****
#
# This function assume the resource group name preset in the variable ${RESOURCEGROUP} and should be called
#
# $(rgs_zonename)
#
! # It passes back the zonename or nothing.
debug_message "Function: rg_zonename - Begin "
${SET_DEBUG}
nodes_zone=
nodename=`${UNAME} -n`
! node=`${SCHA_RESOURCEGROUP_GET} -G ${RESOURCEGROUP} -O NODELIST|grep ${nodename}`
! if ${ECHO} ${node} | grep : >/dev/null 2>&1
then
nodes_zone=`${ECHO} ${node} | ${AWK} -F: '{print $2}'`
fi
print ${nodes_zone}
--- 150,194 ----
#
# This function assume the resource group name preset in the variable ${RESOURCEGROUP} and should be called
#
# $(rgs_zonename)
#
! # It passes back a zonename or nothing.
! # If there are more than one zones in the nodelist, it passes back either the zone where the resource group
! # is online or first one in the list.
debug_message "Function: rg_zonename - Begin "
${SET_DEBUG}
nodes_zone=
nodename=`${UNAME} -n`
! node=`${SCHA_RESOURCEGROUP_GET} -G ${RESOURCEGROUP} -O NODELIST|${EGREP} "${nodename}$|${nodename}:"`
! if ${ECHO} ${node} | ${GREP} : >/dev/null 2>&1
then
+ if [ `${ECHO} ${node}|${WC} -w` -gt 1 ]
+ then
+ online=0
+ for i in ${node}
+ do
+ if ${SCHA_RESOURCEGROUP_GET} -G ${RESOURCEGROUP} -O RG_state_node ${i}| ${GREP} -i online >/dev/null 2>&1
+ then
+ nodes_zone=`${ECHO} ${i} | ${AWK} -F: '{print $2}'`
+ online=1
+ fi
+ done
+
+ # check if we found a zone where the resource group is online, if not pick the first zone in the list
+
+ if [ ${online} -eq 0 ]
+ then
+ first_node=`${ECHO} ${node} | ${AWK} '{print $1}'`
+ nodes_zone=`${ECHO} ${first_node} | ${AWK} -F: '{print $2}'`
+ fi
+ else
nodes_zone=`${ECHO} ${node} | ${AWK} -F: '{print $2}'`
+ fi
fi
print ${nodes_zone}
*** 487,492 ****
--- 518,618 ----
fi
debug_message "Function: restart_dependency - End"
return ${St}
+ }
+
+ start_ssh_agent()
+ {
+ #
+ # Start an ssh-agent and add the decrypted private key.
+ # Only when the ssh-agent contains the private key, a ssh login without a
+ # passphrase challenge is possible.
+ #
+ # This function stores the environment variables SSH_AUTH_SOCK and
+ # SSH_AGENT_PID in /tmp/${RESOURCE}-ssh in a ksh compatible format.
+ #
+ # The start_ssh_agent function is meant to be called in the target users
+ # environment.
+ #
+ # The only necessary parameter is the passphrase of the target users
+ # private ssh key.
+ # If you use this function you should kill the started ssh-agent in your
+ # stop function.
+ #
+ # To do this you have to export the SSH_AGENT_PID from tmp/${RESOURCE}-ssh
+ # in the users environment and call /usr/bin/ssh-agent -k.
+ #
+ # The returncode of the start_ssh_agent function is 0 for success, and 1 for error.
+
+ debug_message "Function: start_ssh_agent - Begin"
+ ${SET_DEBUG}
+
+ SSH_PASS=${1}
+
+ rc_start_ssh_agent=0
+ export DISPLAY=""
+
+ # remove the SSH_ASKPASS script and the temporary store of SSH_AUTH_SOCK
+ # and SSH_AGENT_PID to satisfy noclobber
+
+ ${RM} /tmp/${RESOURCE}-askpass 2>/dev/null
+ ${RM} /tmp/${RESOURCE}-ssh 2>/dev/null
+
+ # start the ssh-agent
+
+ eval `${SSH_AGENT} -s` >/dev/null 2>&1
+ if [ ${?} -eq 0 ]
+ then
+ debug_message "Function: start_ssh_agent - ssh-agent started"
+
+ ${ENV} | ${EGREP} "SSH_AUTH_SOCK|SSH_AGENT_PID">/tmp/${RESOURCE}-ssh
+
+ # create the SSH_ASKPASS script needed for a headless ssh-agent
+
+ export SSH_ASKPASS=/tmp/${RESOURCE}-askpass
+ ${CAT} > ${SSH_ASKPASS} <<EOF
+ #!/usr/bin/ksh
+ # reads a passphrase at the ssh-agent command
+ read x
+ ${ECHO} \${x}
+ EOF
+ ${CHMOD} +x ${SSH_ASKPASS}
+
+ # decrypt the private key and store it in memory
+
+ if print ${SSH_PASS}|${SSH_ADD} >/dev/null 2>&1
+ then
+ debug_message "Function: start_ssh_agent - ssh-add successful, private key decryped and stored"
+ else
+ # SCMSGS
+ # @explanation
+ # The ssh passphrase passed to the start_ssh_agent function is wrong
+ # @user_action
+ # Fix the ssh passphrase entry in your parameters
+ scds_syslog -p daemon.err -t $(syslog_tag) -m \
+ "start_ssh_agent: The passphrase %s is wrong" \
+ "${SSH_PASS}"
+ rc_start_ssh_agent=1
+ fi
+
+ # remove the previously created askpass script
+
+ ${RM} ${SSH_ASKPASS}
+ else
+ # SCMSGS
+ # @explanation
+ # The ssh-agent is not startable for the given user
+ # @user_action
+ # Determine and fix the root cause by running the ssh-agent manually
+ # as the target user
+ scds_syslog -p daemon.err -t $(syslog_tag) -m \
+ "start_ssh_agent: The start of the ssh-agent was unsuccessful"
+ rc_start_ssh_agent=1
+
+ fi
+
+ debug_message "Function: start_ssh_agent - End"
+ return ${rc_start_ssh_agent}
+
}