34 lslocks | awk '{ if ($9 == "'"$RUN_DIR"'") { print $2 } }'
41 for pid in $(lock_queue); do
42 echo $pid $(sed --null-data -ne '/^NOVABOOT_ID=/ s///p' /proc/$pid/environ)
45 echo "Target is occupied by:"
46 ( echo "PID USER LOGIN_TIME FROM"; echo "$queue" ) | column -t
52 exec flock --no-fork "$RUN_DIR" "$@"
60 if eval [ "\"\$$1\"" ]; then
63 die "$1 variable not defined in $CFG"
67 # run_subcommand should be called only after permission checks and/or locking
71 trap "rm -f $RUN_DIR/ppid" EXIT
72 echo $NOVABOOT_PPID > $RUN_DIR/ppid
73 echo 'novaboot-server: Connected'
75 check_var target_console && eval exec $target_console;;
77 check_var target_reset && eval exec $target_reset;;
78 "rsync --server "*" . .")
79 if [ $# -ne 5 ]; then die "Unexpected rsync invocation: $*"; fi
80 mkdir -p "$HOME/tftproot"
82 exec rsync --server $3 . . ;;
84 check_var target_on && eval exec $target_on;;
86 check_var target_off && eval exec $target_off;;
88 echo >&2 "novaboot-server: Command not allowed: $*"
89 logger -p error "novaboot-server: Command not allowed: $*"
95 if [ "$1" = "-c" ]; then shift
96 else die "Permission denied"; fi
98 if [ "${1%% *}" = "user" ]; then
99 # Get user name encoded in ~/.ssh/authorized_keys
102 set -- $SSH_ORIGINAL_COMMAND
105 if [ $# -eq 0 ]; then print_help; fi
107 IP=${SSH_CONNECTION%% *}
108 HOST=$(getent hosts $IP) || HOST=$IP
110 DATE=$(LANG=C date +'%F_%T')
111 export NOVABOOT_ID="${NB_USER:-?} $DATE ${REMOTE}"
112 export NOVABOOT_PPID=$PPID
116 # Commands allowed at any time
118 "console") locked $0 console;;
119 "add-key") shift; add_key "$@"; exit $?;;
124 # Commands allowed only when nobody or the same user is connected to the console
125 ALLOWED_PPID=$(cat $RUN_DIR/ppid 2>/dev/null || :)
126 if [ "$PPID" -eq "${ALLOWED_PPID:-0}" ]; then run=unlocked; else run=locked; fi
130 RUN_DIR="$XDG_RUNTIME_DIR/novaboot"
132 if [ -z "$NOVABOOT_ID" ]; then
135 if [ "$NOVABOOT_SERVER_CONFIG" ]; then
136 CFG="$NOVABOOT_SERVER_CONFIG"
138 CFG="$HOME/.novaboot-server"