summaryrefslogtreecommitdiffstats
path: root/jack/etc
diff options
context:
space:
mode:
authorJean-Philippe Lesot <jplesot@google.com>2015-03-30 16:17:41 +0200
committerJean-Philippe Lesot <jplesot@google.com>2015-03-30 16:19:39 +0200
commitaff7f44d00ec1988820c8aad7f860a21cbb6a512 (patch)
treead2d0c3b6a8cceb7adcfedcfd178c176f5792b92 /jack/etc
parent3fe67bfc2b4b159bc69c3e40e89d04633456bd50 (diff)
downloadtoolchain_jack-aff7f44d00ec1988820c8aad7f860a21cbb6a512.tar.gz
toolchain_jack-aff7f44d00ec1988820c8aad7f860a21cbb6a512.tar.bz2
toolchain_jack-aff7f44d00ec1988820c8aad7f860a21cbb6a512.zip
Add preliminary support of security, and fix some blockages
Change-Id: I984ed39480d28202795b36bb8a18c9396b4de7de
Diffstat (limited to 'jack/etc')
-rwxr-xr-xjack/etc/jack47
1 files changed, 35 insertions, 12 deletions
diff --git a/jack/etc/jack b/jack/etc/jack
index 1f88695a..74e925fc 100755
--- a/jack/etc/jack
+++ b/jack/etc/jack
@@ -39,19 +39,22 @@ JACK_DIR="$SERVER_DIR/jack-task-$$/"
JACK_OUT="$JACK_DIR/out"
JACK_ERR="$JACK_DIR/err"
JACK_CLI="$JACK_DIR/cli"
+JACK_EXIT="$JACK_DIR/exit"
JACK_PWD="$PWD"
-mkdir -m 700 "$SERVER_DIR" 2>/dev/null
+umask 077
+mkdir "$SERVER_DIR" 2>/dev/null
# Cleanup
-trap 'rm -f $JACK_OUT $JACK_ERR $JACK_CLI 2>/dev/null; rmdir $JACK_DIR 2>/dev/null' EXIT
+trap 'rm -f "$JACK_OUT" "$JACK_ERR" "$JACK_CLI" "$JACK_EXIT" 2>/dev/null; rmdir "$JACK_DIR" 2>/dev/null' EXIT
set -o errexit
-# Create fifo for a task
-mkdir -m 700 "$JACK_DIR"
-mkfifo -m 600 "$JACK_OUT"
-mkfifo -m 600 "$JACK_ERR"
+# Create fifos and files for a task
+mkdir "$JACK_DIR"
+mkfifo "$JACK_OUT"
+mkfifo "$JACK_ERR"
+touch "$JACK_CLI" "$JACK_EXIT"
# Try to cleanup if interrupted
trap 'kill -9 $PID_OUT $PID_ERR; wait $PID_OUT $PID_ERR 2>/dev/null; exit 255' SIGHUP SIGINT SIGQUIT SIGTERM ERR
@@ -76,14 +79,16 @@ trap ERR
#
# Launch compilation
-EXIT_CODE=255
RETRY=3
while true; do
- EXIT_CODE=$(curl -f -s -d@- http://127.0.0.1:$SERVER_PORT/jack <<< "+ $JACK_OUT $JACK_ERR $JACK_CLI")
- CODE=$?
- if [ $CODE -eq 0 ]; then
+ HTTP_CODE=$(curl --fail --silent --data @- --output "$JACK_EXIT" --write-out %{http_code} http://127.0.0.1:$SERVER_PORT/jack <<< "+ $JACK_OUT $JACK_ERR $JACK_CLI")
+ CURL_CODE=$?
+ JACK_CODE=$(cat "$JACK_EXIT")
+ if [ $CURL_CODE -eq 0 ]; then
+ # No problem, let's go
break;
- elif [ $CODE -eq 7 ]; then
+ elif [ $CURL_CODE -eq 7 ]; then
+ # Failed to connect
if [ $RETRY -eq 0 ]; then
echo "Cannot launch background server"
kill -QUIT $$
@@ -94,6 +99,24 @@ while true; do
let RETRY=RETRY-1
sleep 3
fi
+ elif [ $CURL_CODE -eq 22 ]; then
+ # Http code not OK, let's decode
+ if [ $HTTP_CODE -eq 401 ]; then
+ # 401: Unauthorized
+ echo "Security problem, see server log" >&2
+ kill -QUIT $$
+ elif [ $HTTP_CODE -eq 400 ]; then
+ # 400: Bad request
+ echo "Bad request, see server log" >&2
+ kill -QUIT $$
+ else
+ # Other
+ echo "Internal unknown error, see server log" >&2
+ kill -QUIT $$
+ fi
+ else
+ # In case of partial, timeout, empty, network error, let's retry
+ sleep 1
fi
done
@@ -102,4 +125,4 @@ wait $PID_OUT
wait $PID_ERR
# Exit
-exit $EXIT_CODE
+exit $JACK_CODE