You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by va...@apache.org on 2023/04/13 21:29:40 UTC
[couchdb] 01/02: Make remsh work with quoted cookie
This is an automated email from the ASF dual-hosted git repository.
vatamane pushed a commit to branch 3.2.x
in repository https://gitbox.apache.org/repos/asf/couchdb.git
commit 7a50d0330a22c13f6d8016ffca3814f883f2350e
Author: jiahuili <Ji...@ibm.com>
AuthorDate: Mon Mar 27 20:16:47 2023 -0500
Make remsh work with quoted cookie
Allow space and other special characters in cookies.
Test:
First set the cookie in `vm.args`, then run the script below
e.g.: `-setcookie 'a b\n\t\xd#{}()[]$&^!-=+?|//c\\d\\\e\\\\f'`
or `-setcookie "a b\n\t\xd#{}()[]$&^!-=+?|//c\\d\\\e\\\\f"`
```
make release
cd rel/couchdb
./bin/couchdb
./bin/remsh
```
---
rel/overlay/bin/remsh | 19 ++++++++++++++-----
1 file changed, 14 insertions(+), 5 deletions(-)
diff --git a/rel/overlay/bin/remsh b/rel/overlay/bin/remsh
index de37d6cc2..1804336b5 100755
--- a/rel/overlay/bin/remsh
+++ b/rel/overlay/bin/remsh
@@ -49,10 +49,14 @@ NODE="${NODE:-$DEFAULT_NODE}"
# If present, extract cookie from ERL_FLAGS
# This is used by the CouchDB Dockerfile and Helm chart
-COOKIE=$(echo "$ERL_FLAGS" | sed 's/^.*setcookie \([^ ][^ ]*\).*$/\1/g')
+COOKIE=$(echo "$ERL_FLAGS" | sed -r '
+ s/.*-setcookie[ ]*['\''](.*)['\''].*/\1/
+ s/.*-setcookie[ ]*["](.*)["].*/\1/
+ s/.*-setcookie[ ]*([^ ]*).*/\1/
+')
if test -f "$ARGS_FILE"; then
# else attempt to extract from vm.args
- ARGS_FILE_COOKIE=$(awk '$1=="-setcookie"{print $2}' "$ARGS_FILE")
+ ARGS_FILE_COOKIE=$(awk '$1=="-setcookie"{st=index($0," "); print substr($0,st+1)}' "$ARGS_FILE" | tr -d \" | tr -d \')
COOKIE="${COOKIE:-$ARGS_FILE_COOKIE}"
fi
@@ -111,7 +115,12 @@ fi
# If present, strip -name or -setcookie from ERL_FLAGS
# to avoid conflicts with the cli parameters
-ERL_FLAGS_CLEAN=$(echo "$ERL_FLAGS" | sed 's/-setcookie \([^ ][^ ]*\)//g' | sed 's/-name \([^ ][^ ]*\)//g')
+ERL_FLAGS_CLEAN=$(echo "$ERL_FLAGS" | sed -r '
+ s/-setcookie[ ]*['\''].*['\'']//
+ s/-setcookie[ ]*["].*["]//
+ s/-setcookie[ ]*[^ ]*//
+ s/-name[ ]*[^ ]*//
+')
if [ -z "${COOKIE}" ]; then
echo "No Erlang cookie could be found, please specify with -c" >&2
@@ -120,11 +129,11 @@ fi
if [ -z "$TLSCONF" ]; then
exec env ERL_FLAGS="$ERL_FLAGS_CLEAN" "$BINDIR/erl" -boot "$ROOTDIR/releases/$APP_VSN/start_clean" \
- -name remsh$$@$LHOST -remsh $NODE -hidden -setcookie $COOKIE \
+ -name remsh$$@$LHOST -remsh $NODE -hidden -setcookie "$COOKIE" \
"$@"
else
exec env ERL_FLAGS="$ERL_FLAGS_CLEAN" "$BINDIR/erl" -boot "$ROOTDIR/releases/$APP_VSN/start_clean" \
- -name remsh$$@$LHOST -remsh $NODE -hidden -setcookie $COOKIE \
+ -name remsh$$@$LHOST -remsh $NODE -hidden -setcookie "$COOKIE" \
-proto_dist inet_tls -ssl_dist_optfile $TLSCONF \
"$@"
fi