Tryag File Manager
Home
-
Turbo Force
Current Path :
/
etc
/
vmware-tools
/
Upload File :
New :
File
Dir
//etc/vmware-tools/xsession-xdm.sh
#!/bin/sh # # Copyright (c) 2007-2019 VMware, Inc. All rights reserved. # # This script is run in two instances: # 1. It was hooked into XDM via twiddling xdm-config. # 2. It was hooked into legacy GDM via inserting a script in # /etc/X11/xinitrc.d. # # This script's responsibility is primarily to launch vmware-user during # X session startup. In the XDM case, after launching vmware-user, we # resume executing the original, system Xsession script. In the GDM # case, we do nothing else. # # usage: xsession-xdm.sh [-gdm] # -gdm: Indicates caller is the GDM helper (xsession-gdm); run # vmware-user -only-, then exit. # BEGINNING_OF_DB_DOT_SH #!/bin/sh # # Manage an installer database # # Add an answer to a database in memory db_answer_add() { local dbvar="$1" # IN/OUT local id="$2" # IN local value="$3" # IN local answers local i eval "$dbvar"'_answer_'"$id"'="$value"' eval 'answers="$'"$dbvar"'_answers"' # There is no double quote around $answers on purpose for i in $answers; do if [ "$i" = "$id" ]; then return fi done answers="$answers"' '"$id" eval "$dbvar"'_answers="$answers"' } # Remove an answer from a database in memory db_answer_remove() { local dbvar="$1" # IN/OUT local id="$2" # IN local new_answers local answers local i eval 'unset '"$dbvar"'_answer_'"$id" new_answers='' eval 'answers="$'"$dbvar"'_answers"' # There is no double quote around $answers on purpose for i in $answers; do if [ "$i" != "$id" ]; then new_answers="$new_answers"' '"$i" fi done eval "$dbvar"'_answers="$new_answers"' } # Load all answers from a database on stdin to memory (<dbvar>_answer_* # variables) db_load_from_stdin() { local dbvar="$1" # OUT eval "$dbvar"'_answers=""' # read doesn't support -r on FreeBSD 3.x. For this reason, the following line # is patched to remove the -r in case of FreeBSD tools build. So don't make # changes to it. while read -r action p1 p2; do if [ "$action" = 'answer' ]; then db_answer_add "$dbvar" "$p1" "$p2" elif [ "$action" = 'remove_answer' ]; then db_answer_remove "$dbvar" "$p1" fi done } # Load all answers from a database on disk to memory (<dbvar>_answer_* # variables) db_load() { local dbvar="$1" # OUT local dbfile="$2" # IN db_load_from_stdin "$dbvar" < "$dbfile" } # Iterate through all answers in a database in memory, calling <func> with # id/value pairs and the remaining arguments to this function db_iterate() { local dbvar="$1" # IN local func="$2" # IN shift 2 local answers local i local value eval 'answers="$'"$dbvar"'_answers"' # There is no double quote around $answers on purpose for i in $answers; do eval 'value="$'"$dbvar"'_answer_'"$i"'"' "$func" "$i" "$value" "$@" done } # If it exists in memory, remove an answer from a database (disk and memory) db_remove_answer() { local dbvar="$1" # IN/OUT local dbfile="$2" # IN local id="$3" # IN local answers local i eval 'answers="$'"$dbvar"'_answers"' # There is no double quote around $answers on purpose for i in $answers; do if [ "$i" = "$id" ]; then echo 'remove_answer '"$id" >> "$dbfile" db_answer_remove "$dbvar" "$id" return fi done } # Add an answer to a database (disk and memory) db_add_answer() { local dbvar="$1" # IN/OUT local dbfile="$2" # IN local id="$3" # IN local value="$4" # IN db_remove_answer "$dbvar" "$dbfile" "$id" echo 'answer '"$id"' '"$value" >> "$dbfile" db_answer_add "$dbvar" "$id" "$value" } # Add a file to a database on disk # 'file' is the file to put in the database (it may not exist on the disk) # 'tsfile' is the file to get the timestamp from, '' if no timestamp db_add_file() { local dbfile="$1" # IN local file="$2" # IN local tsfile="$3" # IN local date if [ "$tsfile" = '' ]; then echo 'file '"$file" >> "$dbfile" else # We cannot guarantee existence of GNU coreutils date on all platforms # (e.g. Solaris). Ignore timestamps in that case. date=`date -r "$tsfile" '+%s' 2> /dev/null` || true if [ "$date" != '' ]; then date=' '"$date" fi echo 'file '"$file$date" >> "$dbfile" fi } # Remove file from database db_remove_file() { local dbfile="$1" # IN local file="$2" # IN echo "remove_file $file" >> "$dbfile" } # Add a directory to a database on disk db_add_dir() { local dbfile="$1" # IN local dir="$2" # IN echo 'directory '"$dir" >> "$dbfile" } # END_OF_DB_DOT_SH export PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin export PATH=${PATH}:/usr/X11R6/bin Xsession="" vmware_user="" vmware_etc_dir="/etc/vmware-tools" vmware_db="" failsafe() { # Old school -- X11 ports/packages used to be installed under $X11BASE. exec /usr/X11R6/lib/X11/xdm/Xsession # New school -- recent X11 ports/packages installed under $LOCALBASE. exec /usr/local/lib/X11/xdm/Xsession # Linux school exec /etc/X11/xdm/Xsession } open_db() { vmware_etc_dir="/etc/vmware-tools" vmware_db="${vmware_etc_dir}/locations" # Load up the install-time database if [ ! -r "$vmware_db" ]; then # XXX return fi db_load 'vmdb' "$vmware_db" } run_vmware_user() { vmware_user="${vmdb_answer_BINDIR}/vmware-user" # BINDIR/vmware-user is really a symlink to the setuid wrapper, # and said wrapper will fork on its own, so there's no need to # background the process here. if [ -n "$vmware_user" -a -x "$vmware_user" ]; then "$vmware_user" fi } exec_xsession() { local x11_base="$vmdb_answer_X11DIR" local xrdb="$x11_base/bin/xrdb" local xdmConfig="$x11_base/lib/X11/xdm/xdm-config" [ -r "$xdmConfig" ] || xdmConfig="/etc/X11/xdm/xdm-config" [ -r "$xdmConfig" ] || return # Determine an Xsession script to run. # # XXX Even though we require Perl to install and configure the Tools, we # can't be sure that it's present in the PATH defined above. If this turns # out to be a problem, this script can be massaged at config time. Xsession=$("$xrdb" -n -DVMWARE_USER_AUTOSTART "$xdmConfig" | perl "${vmware_etc_dir}/xsession-xdm.pl") exec "$Xsession" } main() { if open_db; then run_vmware_user if [ $# -ge 1 -a "$1" = "-gdm" ]; then exit; fi exec_xsession fi failsafe } main "$@"