2013-10-28 02:36:19 +00:00
|
|
|
#!/bin/sh
|
|
|
|
#
|
2013-10-28 16:38:10 +00:00
|
|
|
# ***** BEGIN LICENSE BLOCK *****
|
|
|
|
# Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
|
|
|
#
|
|
|
|
# The contents of this file are subject to the Mozilla Public License Version
|
|
|
|
# 1.1 (the "License"); you may not use this file except in compliance with
|
|
|
|
# the License. You may obtain a copy of the License at
|
|
|
|
# http://www.mozilla.org/MPL/
|
|
|
|
#
|
|
|
|
# Software distributed under the License is distributed on an "AS IS" basis,
|
|
|
|
# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
|
|
|
# for the specific language governing rights and limitations under the
|
|
|
|
# License.
|
|
|
|
#
|
|
|
|
# The Original Code is guacamole-server.
|
|
|
|
#
|
|
|
|
# The Initial Developer of the Original Code is
|
|
|
|
# Michael Jumper.
|
|
|
|
# Portions created by the Initial Developer are Copyright (C) 2010
|
|
|
|
# the Initial Developer. All Rights Reserved.
|
|
|
|
#
|
|
|
|
# Contributor(s):
|
|
|
|
#
|
|
|
|
# Alternatively, the contents of this file may be used under the terms of
|
|
|
|
# either the GNU General Public License Version 2 or later (the "GPL"), or
|
|
|
|
# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
|
|
|
# in which case the provisions of the GPL or the LGPL are applicable instead
|
|
|
|
# of those above. If you wish to allow use of your version of this file only
|
|
|
|
# under the terms of either the GPL or the LGPL, and not to allow others to
|
|
|
|
# use your version of this file under the terms of the MPL, indicate your
|
|
|
|
# decision by deleting the provisions above and replace them with the notice
|
|
|
|
# and other provisions required by the GPL or the LGPL. If you do not delete
|
|
|
|
# the provisions above, a recipient may use your version of this file under
|
|
|
|
# the terms of any one of the MPL, the GPL or the LGPL.
|
|
|
|
#
|
|
|
|
# ***** END LICENSE BLOCK *****
|
|
|
|
#
|
2013-10-28 02:36:19 +00:00
|
|
|
# guacctl
|
|
|
|
#
|
|
|
|
# Utility for sending Guacamole-specific console codes for controlling the SSH
|
|
|
|
# session, such as:
|
|
|
|
#
|
|
|
|
# * Downloading files
|
|
|
|
# * Setting the destination directory for uploads
|
|
|
|
#
|
2013-10-28 21:28:37 +00:00
|
|
|
# This script may also be run as "guacget", in which case the script accepts
|
|
|
|
# no options and assumes anything given on the commandline is a file to be
|
|
|
|
# downloaded.
|
|
|
|
#
|
|
|
|
|
2013-10-28 02:36:19 +00:00
|
|
|
|
2013-10-28 21:28:37 +00:00
|
|
|
# Given the name of a file, which may be a relative path, produce the full,
|
|
|
|
# real, non-relative path for that same file.
|
2013-10-28 16:28:23 +00:00
|
|
|
fullpath() {
|
|
|
|
FILENAME="$1"
|
|
|
|
DIR=`dirname "$FILENAME"`
|
|
|
|
FILE=`basename "$FILENAME"`
|
|
|
|
(cd "$DIR" && echo "$PWD/$FILE")
|
|
|
|
}
|
|
|
|
|
2013-10-28 21:28:37 +00:00
|
|
|
# Sends the Guacamole-specific console code for initiating a download.
|
2013-10-28 02:36:19 +00:00
|
|
|
send_download_file() {
|
|
|
|
FILENAME="$1"
|
|
|
|
printf "\033]482200;%s\007" "$FILENAME"
|
|
|
|
}
|
|
|
|
|
2013-10-28 21:28:37 +00:00
|
|
|
# Sends the Guacamole-specific console code for setting the upload directory.
|
2013-10-28 02:36:19 +00:00
|
|
|
send_set_directory() {
|
|
|
|
FILENAME="$1"
|
|
|
|
printf "\033]482201;%s\007" "$FILENAME"
|
|
|
|
}
|
|
|
|
|
2013-10-28 21:28:37 +00:00
|
|
|
# Prints the given error text to STDERR.
|
2013-10-28 02:36:19 +00:00
|
|
|
error() {
|
|
|
|
echo "$NAME:" "$@" >&2
|
|
|
|
}
|
|
|
|
|
2013-10-28 21:28:37 +00:00
|
|
|
# Prints usage documentation for this script.
|
2013-10-28 02:36:19 +00:00
|
|
|
usage() {
|
|
|
|
cat >&2 <<END
|
2013-10-28 21:28:37 +00:00
|
|
|
guacctl 0.8.0, Guacamole SSH session control utility.
|
|
|
|
Usage: guacctl [OPTION] [FILE]...
|
2013-10-28 02:36:19 +00:00
|
|
|
|
2013-10-28 21:28:37 +00:00
|
|
|
-d, --download download each of the files listed.
|
|
|
|
-s, --set-directory set the destination directory for future uploaded
|
|
|
|
files.
|
2013-10-28 02:36:19 +00:00
|
|
|
END
|
|
|
|
}
|
|
|
|
|
2013-10-28 21:28:37 +00:00
|
|
|
# Initiates a download for each of the specified files
|
2013-10-28 02:36:19 +00:00
|
|
|
download_files() {
|
|
|
|
|
2013-10-28 21:28:37 +00:00
|
|
|
# Validate arguments
|
|
|
|
if [ $# -lt 1 ]; then
|
|
|
|
error "No files specified."
|
|
|
|
return;
|
|
|
|
fi
|
|
|
|
|
2013-10-28 02:36:19 +00:00
|
|
|
for FILENAME in "$@"; do
|
|
|
|
if [ -e "$FILENAME" ]; then
|
2013-11-12 17:52:56 +00:00
|
|
|
send_download_file "`fullpath "$FILENAME"`"
|
2013-10-28 02:36:19 +00:00
|
|
|
else
|
|
|
|
error "$FILENAME: File does not exist."
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
|
|
|
|
}
|
|
|
|
|
2013-10-28 21:28:37 +00:00
|
|
|
# Changes the upload path for future uploads to the given directory
|
2013-10-28 02:36:19 +00:00
|
|
|
set_directory() {
|
|
|
|
|
2013-10-28 21:28:37 +00:00
|
|
|
# Validate arguments
|
|
|
|
if [ $# -lt 1 ]; then
|
|
|
|
error "No destination directory specified."
|
|
|
|
return;
|
|
|
|
fi
|
|
|
|
|
|
|
|
if [ $# -gt 1 ]; then
|
|
|
|
error "Only one destination directory may be given."
|
|
|
|
return;
|
|
|
|
fi
|
|
|
|
|
2013-10-28 02:36:19 +00:00
|
|
|
FILENAME="$1"
|
2013-10-28 21:28:37 +00:00
|
|
|
if [ -d "$FILENAME" ]; then
|
2013-11-12 17:52:56 +00:00
|
|
|
send_set_directory "`fullpath "$FILENAME"`"
|
2013-10-28 02:36:19 +00:00
|
|
|
else
|
|
|
|
error "$FILENAME: File does not exist or is not a directory."
|
|
|
|
fi
|
|
|
|
|
|
|
|
}
|
|
|
|
|
2013-10-28 21:28:37 +00:00
|
|
|
# Get script name
|
2013-10-28 02:36:19 +00:00
|
|
|
NAME=`basename "$0"`
|
|
|
|
|
|
|
|
# Parse options
|
|
|
|
if [ "x$NAME" = "xguacget" ]; then
|
|
|
|
download_files "$@"
|
2013-10-28 21:28:37 +00:00
|
|
|
elif [ "x$1" = "x--download" -o "x$1" = "x-d" ]; then
|
2013-10-28 02:36:19 +00:00
|
|
|
shift
|
|
|
|
download_files "$@"
|
2013-10-28 21:28:37 +00:00
|
|
|
elif [ "x$1" = "x--set-directory" -o "x$1" = "x-s" ]; then
|
2013-10-28 02:36:19 +00:00
|
|
|
shift
|
|
|
|
set_directory "$@"
|
|
|
|
else
|
|
|
|
usage
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|