From cdee9d97e7f802d8af4afc2b877441ffabf62c28 Mon Sep 17 00:00:00 2001 From: Greg Wilkins Date: Thu, 17 Aug 2017 15:32:41 +1000 Subject: [PATCH] Issue #63 Bypass start.jar (#66) Issue #63 Bypass start.jar - renamed command file to /jetty-start - added warning if start.d is newer /jetty-start - Any --dry-run command that produces more than one line is considered an a terminating command and the output is reported. - Rely on -e for non zero exit --- 9.2-jre7/Dockerfile | 2 +- 9.2-jre7/docker-entrypoint.sh | 54 +++++++++++++++++++++++++ 9.2-jre7/generate-jetty-start.sh | 3 ++ 9.2-jre8/Dockerfile | 2 +- 9.2-jre8/docker-entrypoint.sh | 54 +++++++++++++++++++++++++ 9.2-jre8/generate-jetty-start.sh | 3 ++ 9.3-jre8/Dockerfile | 2 +- 9.3-jre8/alpine/docker-entrypoint.sh | 54 +++++++++++++++++++++++++ 9.3-jre8/alpine/generate-jetty-start.sh | 3 ++ 9.3-jre8/docker-entrypoint.sh | 54 +++++++++++++++++++++++++ 9.3-jre8/generate-jetty-start.sh | 3 ++ 9.4-jre8/Dockerfile | 2 +- 9.4-jre8/alpine/docker-entrypoint.sh | 54 +++++++++++++++++++++++++ 9.4-jre8/alpine/generate-jetty-start.sh | 3 ++ 9.4-jre8/docker-entrypoint.sh | 54 +++++++++++++++++++++++++ 9.4-jre8/generate-jetty-start.sh | 3 ++ docker-entrypoint.sh | 54 +++++++++++++++++++++++++ generate-jetty-start.sh | 3 ++ update.sh | 2 +- 19 files changed, 404 insertions(+), 5 deletions(-) create mode 100755 9.2-jre7/generate-jetty-start.sh create mode 100755 9.2-jre8/generate-jetty-start.sh create mode 100755 9.3-jre8/alpine/generate-jetty-start.sh create mode 100755 9.3-jre8/generate-jetty-start.sh create mode 100755 9.4-jre8/alpine/generate-jetty-start.sh create mode 100755 9.4-jre8/generate-jetty-start.sh create mode 100755 generate-jetty-start.sh diff --git a/9.2-jre7/Dockerfile b/9.2-jre7/Dockerfile index 7c731bf..a0a03e1 100644 --- a/9.2-jre7/Dockerfile +++ b/9.2-jre7/Dockerfile @@ -60,7 +60,7 @@ RUN set -xe \ && mkdir -p "$TMPDIR" \ && chown -R jetty:jetty "$TMPDIR" -COPY docker-entrypoint.sh / +COPY docker-entrypoint.sh generate-jetty-start.sh / EXPOSE 8080 ENTRYPOINT ["/docker-entrypoint.sh"] diff --git a/9.2-jre7/docker-entrypoint.sh b/9.2-jre7/docker-entrypoint.sh index ba65411..4e006da 100755 --- a/9.2-jre7/docker-entrypoint.sh +++ b/9.2-jre7/docker-entrypoint.sh @@ -38,4 +38,58 @@ if [ "$1" = "java" -a -n "$JAVA_OPTIONS" ] ; then set -- java $JAVA_OPTIONS "$@" fi +if expr "$*" : 'java .*/start\.jar.*$' >/dev/null ; then + # this is a command to run jetty + + # check if it is a terminating command + for A in "$@" ; do + case $A in + --add-to-start* |\ + --create-files |\ + --create-startd |\ + --download |\ + --dry-run |\ + --exec-print |\ + --help |\ + --info |\ + --list-all-modules |\ + --list-classpath |\ + --list-config |\ + --list-modules* |\ + --stop |\ + --update-ini |\ + --version |\ + -v )\ + # It is a terminating command, so exec directly + exec "$@" + esac + done + + if [ -f /jetty-start ] ; then + if [ $JETTY_BASE/start.d -nt /jetty-start ] ; then + cat >&2 <<- 'EOWARN' + ******************************************************************** + WARNING: The $JETTY_BASE/start.d directory has been modified since + the /jetty-start files was generated. Please either delete + the /jetty-start file or re-run /generate-jetty-start.sh + from a Dockerfile + ******************************************************************** + EOWARN + fi + echo $(date +'%Y-%m-%d %H:%M:%S.000'):INFO:docker-entrypoint:jetty start command from /jetty-start + set -- $(cat /jetty-start) + else + # Do a jetty dry run to set the final command + "$@" --dry-run > /jetty-start + if [ $(egrep -v '\\$' /jetty-start | wc -l ) -gt 1 ] ; then + # command was more than a dry-run + cat /jetty-start \ + | awk '/\\$/ { printf "%s", substr($0, 1, length($0)-1); next } 1' \ + | egrep -v '[^ ]*java .* org\.eclipse\.jetty\.xml\.XmlConfiguration ' + exit + fi + set -- $(sed 's/\\$//' /jetty-start) + fi +fi + exec "$@" diff --git a/9.2-jre7/generate-jetty-start.sh b/9.2-jre7/generate-jetty-start.sh new file mode 100755 index 0000000..0dbaba7 --- /dev/null +++ b/9.2-jre7/generate-jetty-start.sh @@ -0,0 +1,3 @@ +#!/bin/sh +rm -f /jetty-start +/docker-entrypoint.sh --dry-run | sed 's/\\$//' > /jetty-start diff --git a/9.2-jre8/Dockerfile b/9.2-jre8/Dockerfile index 133807d..6126db2 100644 --- a/9.2-jre8/Dockerfile +++ b/9.2-jre8/Dockerfile @@ -60,7 +60,7 @@ RUN set -xe \ && mkdir -p "$TMPDIR" \ && chown -R jetty:jetty "$TMPDIR" -COPY docker-entrypoint.sh / +COPY docker-entrypoint.sh generate-jetty-start.sh / EXPOSE 8080 ENTRYPOINT ["/docker-entrypoint.sh"] diff --git a/9.2-jre8/docker-entrypoint.sh b/9.2-jre8/docker-entrypoint.sh index ba65411..4e006da 100755 --- a/9.2-jre8/docker-entrypoint.sh +++ b/9.2-jre8/docker-entrypoint.sh @@ -38,4 +38,58 @@ if [ "$1" = "java" -a -n "$JAVA_OPTIONS" ] ; then set -- java $JAVA_OPTIONS "$@" fi +if expr "$*" : 'java .*/start\.jar.*$' >/dev/null ; then + # this is a command to run jetty + + # check if it is a terminating command + for A in "$@" ; do + case $A in + --add-to-start* |\ + --create-files |\ + --create-startd |\ + --download |\ + --dry-run |\ + --exec-print |\ + --help |\ + --info |\ + --list-all-modules |\ + --list-classpath |\ + --list-config |\ + --list-modules* |\ + --stop |\ + --update-ini |\ + --version |\ + -v )\ + # It is a terminating command, so exec directly + exec "$@" + esac + done + + if [ -f /jetty-start ] ; then + if [ $JETTY_BASE/start.d -nt /jetty-start ] ; then + cat >&2 <<- 'EOWARN' + ******************************************************************** + WARNING: The $JETTY_BASE/start.d directory has been modified since + the /jetty-start files was generated. Please either delete + the /jetty-start file or re-run /generate-jetty-start.sh + from a Dockerfile + ******************************************************************** + EOWARN + fi + echo $(date +'%Y-%m-%d %H:%M:%S.000'):INFO:docker-entrypoint:jetty start command from /jetty-start + set -- $(cat /jetty-start) + else + # Do a jetty dry run to set the final command + "$@" --dry-run > /jetty-start + if [ $(egrep -v '\\$' /jetty-start | wc -l ) -gt 1 ] ; then + # command was more than a dry-run + cat /jetty-start \ + | awk '/\\$/ { printf "%s", substr($0, 1, length($0)-1); next } 1' \ + | egrep -v '[^ ]*java .* org\.eclipse\.jetty\.xml\.XmlConfiguration ' + exit + fi + set -- $(sed 's/\\$//' /jetty-start) + fi +fi + exec "$@" diff --git a/9.2-jre8/generate-jetty-start.sh b/9.2-jre8/generate-jetty-start.sh new file mode 100755 index 0000000..0dbaba7 --- /dev/null +++ b/9.2-jre8/generate-jetty-start.sh @@ -0,0 +1,3 @@ +#!/bin/sh +rm -f /jetty-start +/docker-entrypoint.sh --dry-run | sed 's/\\$//' > /jetty-start diff --git a/9.3-jre8/Dockerfile b/9.3-jre8/Dockerfile index feafcde..697f1ad 100644 --- a/9.3-jre8/Dockerfile +++ b/9.3-jre8/Dockerfile @@ -60,7 +60,7 @@ RUN set -xe \ && mkdir -p "$TMPDIR" \ && chown -R jetty:jetty "$TMPDIR" -COPY docker-entrypoint.sh / +COPY docker-entrypoint.sh generate-jetty-start.sh / EXPOSE 8080 ENTRYPOINT ["/docker-entrypoint.sh"] diff --git a/9.3-jre8/alpine/docker-entrypoint.sh b/9.3-jre8/alpine/docker-entrypoint.sh index ba65411..4e006da 100755 --- a/9.3-jre8/alpine/docker-entrypoint.sh +++ b/9.3-jre8/alpine/docker-entrypoint.sh @@ -38,4 +38,58 @@ if [ "$1" = "java" -a -n "$JAVA_OPTIONS" ] ; then set -- java $JAVA_OPTIONS "$@" fi +if expr "$*" : 'java .*/start\.jar.*$' >/dev/null ; then + # this is a command to run jetty + + # check if it is a terminating command + for A in "$@" ; do + case $A in + --add-to-start* |\ + --create-files |\ + --create-startd |\ + --download |\ + --dry-run |\ + --exec-print |\ + --help |\ + --info |\ + --list-all-modules |\ + --list-classpath |\ + --list-config |\ + --list-modules* |\ + --stop |\ + --update-ini |\ + --version |\ + -v )\ + # It is a terminating command, so exec directly + exec "$@" + esac + done + + if [ -f /jetty-start ] ; then + if [ $JETTY_BASE/start.d -nt /jetty-start ] ; then + cat >&2 <<- 'EOWARN' + ******************************************************************** + WARNING: The $JETTY_BASE/start.d directory has been modified since + the /jetty-start files was generated. Please either delete + the /jetty-start file or re-run /generate-jetty-start.sh + from a Dockerfile + ******************************************************************** + EOWARN + fi + echo $(date +'%Y-%m-%d %H:%M:%S.000'):INFO:docker-entrypoint:jetty start command from /jetty-start + set -- $(cat /jetty-start) + else + # Do a jetty dry run to set the final command + "$@" --dry-run > /jetty-start + if [ $(egrep -v '\\$' /jetty-start | wc -l ) -gt 1 ] ; then + # command was more than a dry-run + cat /jetty-start \ + | awk '/\\$/ { printf "%s", substr($0, 1, length($0)-1); next } 1' \ + | egrep -v '[^ ]*java .* org\.eclipse\.jetty\.xml\.XmlConfiguration ' + exit + fi + set -- $(sed 's/\\$//' /jetty-start) + fi +fi + exec "$@" diff --git a/9.3-jre8/alpine/generate-jetty-start.sh b/9.3-jre8/alpine/generate-jetty-start.sh new file mode 100755 index 0000000..0dbaba7 --- /dev/null +++ b/9.3-jre8/alpine/generate-jetty-start.sh @@ -0,0 +1,3 @@ +#!/bin/sh +rm -f /jetty-start +/docker-entrypoint.sh --dry-run | sed 's/\\$//' > /jetty-start diff --git a/9.3-jre8/docker-entrypoint.sh b/9.3-jre8/docker-entrypoint.sh index ba65411..4e006da 100755 --- a/9.3-jre8/docker-entrypoint.sh +++ b/9.3-jre8/docker-entrypoint.sh @@ -38,4 +38,58 @@ if [ "$1" = "java" -a -n "$JAVA_OPTIONS" ] ; then set -- java $JAVA_OPTIONS "$@" fi +if expr "$*" : 'java .*/start\.jar.*$' >/dev/null ; then + # this is a command to run jetty + + # check if it is a terminating command + for A in "$@" ; do + case $A in + --add-to-start* |\ + --create-files |\ + --create-startd |\ + --download |\ + --dry-run |\ + --exec-print |\ + --help |\ + --info |\ + --list-all-modules |\ + --list-classpath |\ + --list-config |\ + --list-modules* |\ + --stop |\ + --update-ini |\ + --version |\ + -v )\ + # It is a terminating command, so exec directly + exec "$@" + esac + done + + if [ -f /jetty-start ] ; then + if [ $JETTY_BASE/start.d -nt /jetty-start ] ; then + cat >&2 <<- 'EOWARN' + ******************************************************************** + WARNING: The $JETTY_BASE/start.d directory has been modified since + the /jetty-start files was generated. Please either delete + the /jetty-start file or re-run /generate-jetty-start.sh + from a Dockerfile + ******************************************************************** + EOWARN + fi + echo $(date +'%Y-%m-%d %H:%M:%S.000'):INFO:docker-entrypoint:jetty start command from /jetty-start + set -- $(cat /jetty-start) + else + # Do a jetty dry run to set the final command + "$@" --dry-run > /jetty-start + if [ $(egrep -v '\\$' /jetty-start | wc -l ) -gt 1 ] ; then + # command was more than a dry-run + cat /jetty-start \ + | awk '/\\$/ { printf "%s", substr($0, 1, length($0)-1); next } 1' \ + | egrep -v '[^ ]*java .* org\.eclipse\.jetty\.xml\.XmlConfiguration ' + exit + fi + set -- $(sed 's/\\$//' /jetty-start) + fi +fi + exec "$@" diff --git a/9.3-jre8/generate-jetty-start.sh b/9.3-jre8/generate-jetty-start.sh new file mode 100755 index 0000000..0dbaba7 --- /dev/null +++ b/9.3-jre8/generate-jetty-start.sh @@ -0,0 +1,3 @@ +#!/bin/sh +rm -f /jetty-start +/docker-entrypoint.sh --dry-run | sed 's/\\$//' > /jetty-start diff --git a/9.4-jre8/Dockerfile b/9.4-jre8/Dockerfile index d0b8d9b..71b65bf 100644 --- a/9.4-jre8/Dockerfile +++ b/9.4-jre8/Dockerfile @@ -57,7 +57,7 @@ RUN set -xe \ && mkdir -p "$TMPDIR" \ && chown -R jetty:jetty "$TMPDIR" -COPY docker-entrypoint.sh / +COPY docker-entrypoint.sh generate-jetty-start.sh / EXPOSE 8080 ENTRYPOINT ["/docker-entrypoint.sh"] diff --git a/9.4-jre8/alpine/docker-entrypoint.sh b/9.4-jre8/alpine/docker-entrypoint.sh index ba65411..4e006da 100755 --- a/9.4-jre8/alpine/docker-entrypoint.sh +++ b/9.4-jre8/alpine/docker-entrypoint.sh @@ -38,4 +38,58 @@ if [ "$1" = "java" -a -n "$JAVA_OPTIONS" ] ; then set -- java $JAVA_OPTIONS "$@" fi +if expr "$*" : 'java .*/start\.jar.*$' >/dev/null ; then + # this is a command to run jetty + + # check if it is a terminating command + for A in "$@" ; do + case $A in + --add-to-start* |\ + --create-files |\ + --create-startd |\ + --download |\ + --dry-run |\ + --exec-print |\ + --help |\ + --info |\ + --list-all-modules |\ + --list-classpath |\ + --list-config |\ + --list-modules* |\ + --stop |\ + --update-ini |\ + --version |\ + -v )\ + # It is a terminating command, so exec directly + exec "$@" + esac + done + + if [ -f /jetty-start ] ; then + if [ $JETTY_BASE/start.d -nt /jetty-start ] ; then + cat >&2 <<- 'EOWARN' + ******************************************************************** + WARNING: The $JETTY_BASE/start.d directory has been modified since + the /jetty-start files was generated. Please either delete + the /jetty-start file or re-run /generate-jetty-start.sh + from a Dockerfile + ******************************************************************** + EOWARN + fi + echo $(date +'%Y-%m-%d %H:%M:%S.000'):INFO:docker-entrypoint:jetty start command from /jetty-start + set -- $(cat /jetty-start) + else + # Do a jetty dry run to set the final command + "$@" --dry-run > /jetty-start + if [ $(egrep -v '\\$' /jetty-start | wc -l ) -gt 1 ] ; then + # command was more than a dry-run + cat /jetty-start \ + | awk '/\\$/ { printf "%s", substr($0, 1, length($0)-1); next } 1' \ + | egrep -v '[^ ]*java .* org\.eclipse\.jetty\.xml\.XmlConfiguration ' + exit + fi + set -- $(sed 's/\\$//' /jetty-start) + fi +fi + exec "$@" diff --git a/9.4-jre8/alpine/generate-jetty-start.sh b/9.4-jre8/alpine/generate-jetty-start.sh new file mode 100755 index 0000000..0dbaba7 --- /dev/null +++ b/9.4-jre8/alpine/generate-jetty-start.sh @@ -0,0 +1,3 @@ +#!/bin/sh +rm -f /jetty-start +/docker-entrypoint.sh --dry-run | sed 's/\\$//' > /jetty-start diff --git a/9.4-jre8/docker-entrypoint.sh b/9.4-jre8/docker-entrypoint.sh index ba65411..4e006da 100755 --- a/9.4-jre8/docker-entrypoint.sh +++ b/9.4-jre8/docker-entrypoint.sh @@ -38,4 +38,58 @@ if [ "$1" = "java" -a -n "$JAVA_OPTIONS" ] ; then set -- java $JAVA_OPTIONS "$@" fi +if expr "$*" : 'java .*/start\.jar.*$' >/dev/null ; then + # this is a command to run jetty + + # check if it is a terminating command + for A in "$@" ; do + case $A in + --add-to-start* |\ + --create-files |\ + --create-startd |\ + --download |\ + --dry-run |\ + --exec-print |\ + --help |\ + --info |\ + --list-all-modules |\ + --list-classpath |\ + --list-config |\ + --list-modules* |\ + --stop |\ + --update-ini |\ + --version |\ + -v )\ + # It is a terminating command, so exec directly + exec "$@" + esac + done + + if [ -f /jetty-start ] ; then + if [ $JETTY_BASE/start.d -nt /jetty-start ] ; then + cat >&2 <<- 'EOWARN' + ******************************************************************** + WARNING: The $JETTY_BASE/start.d directory has been modified since + the /jetty-start files was generated. Please either delete + the /jetty-start file or re-run /generate-jetty-start.sh + from a Dockerfile + ******************************************************************** + EOWARN + fi + echo $(date +'%Y-%m-%d %H:%M:%S.000'):INFO:docker-entrypoint:jetty start command from /jetty-start + set -- $(cat /jetty-start) + else + # Do a jetty dry run to set the final command + "$@" --dry-run > /jetty-start + if [ $(egrep -v '\\$' /jetty-start | wc -l ) -gt 1 ] ; then + # command was more than a dry-run + cat /jetty-start \ + | awk '/\\$/ { printf "%s", substr($0, 1, length($0)-1); next } 1' \ + | egrep -v '[^ ]*java .* org\.eclipse\.jetty\.xml\.XmlConfiguration ' + exit + fi + set -- $(sed 's/\\$//' /jetty-start) + fi +fi + exec "$@" diff --git a/9.4-jre8/generate-jetty-start.sh b/9.4-jre8/generate-jetty-start.sh new file mode 100755 index 0000000..0dbaba7 --- /dev/null +++ b/9.4-jre8/generate-jetty-start.sh @@ -0,0 +1,3 @@ +#!/bin/sh +rm -f /jetty-start +/docker-entrypoint.sh --dry-run | sed 's/\\$//' > /jetty-start diff --git a/docker-entrypoint.sh b/docker-entrypoint.sh index ba65411..4e006da 100755 --- a/docker-entrypoint.sh +++ b/docker-entrypoint.sh @@ -38,4 +38,58 @@ if [ "$1" = "java" -a -n "$JAVA_OPTIONS" ] ; then set -- java $JAVA_OPTIONS "$@" fi +if expr "$*" : 'java .*/start\.jar.*$' >/dev/null ; then + # this is a command to run jetty + + # check if it is a terminating command + for A in "$@" ; do + case $A in + --add-to-start* |\ + --create-files |\ + --create-startd |\ + --download |\ + --dry-run |\ + --exec-print |\ + --help |\ + --info |\ + --list-all-modules |\ + --list-classpath |\ + --list-config |\ + --list-modules* |\ + --stop |\ + --update-ini |\ + --version |\ + -v )\ + # It is a terminating command, so exec directly + exec "$@" + esac + done + + if [ -f /jetty-start ] ; then + if [ $JETTY_BASE/start.d -nt /jetty-start ] ; then + cat >&2 <<- 'EOWARN' + ******************************************************************** + WARNING: The $JETTY_BASE/start.d directory has been modified since + the /jetty-start files was generated. Please either delete + the /jetty-start file or re-run /generate-jetty-start.sh + from a Dockerfile + ******************************************************************** + EOWARN + fi + echo $(date +'%Y-%m-%d %H:%M:%S.000'):INFO:docker-entrypoint:jetty start command from /jetty-start + set -- $(cat /jetty-start) + else + # Do a jetty dry run to set the final command + "$@" --dry-run > /jetty-start + if [ $(egrep -v '\\$' /jetty-start | wc -l ) -gt 1 ] ; then + # command was more than a dry-run + cat /jetty-start \ + | awk '/\\$/ { printf "%s", substr($0, 1, length($0)-1); next } 1' \ + | egrep -v '[^ ]*java .* org\.eclipse\.jetty\.xml\.XmlConfiguration ' + exit + fi + set -- $(sed 's/\\$//' /jetty-start) + fi +fi + exec "$@" diff --git a/generate-jetty-start.sh b/generate-jetty-start.sh new file mode 100755 index 0000000..0dbaba7 --- /dev/null +++ b/generate-jetty-start.sh @@ -0,0 +1,3 @@ +#!/bin/sh +rm -f /jetty-start +/docker-entrypoint.sh --dry-run | sed 's/\\$//' > /jetty-start diff --git a/update.sh b/update.sh index bbc31cc..33f9c52 100755 --- a/update.sh +++ b/update.sh @@ -58,7 +58,7 @@ for path in "${paths[@]}"; do [ -d "$path/$variant" ] || continue ( set -x - cp docker-entrypoint.sh "$path/$variant" + cp docker-entrypoint.sh generate-jetty-start.sh "$path/$variant" sed -ri ' s/^(FROM) .*/\1 '"$baseImage${variant:+-$variant}"'/; s/^(ENV JETTY_VERSION) .*/\1 '"$fullVersion"'/;