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 16:47:42 UTC

[couchdb] 01/01: Make remsh work with quoted cookie

This is an automated email from the ASF dual-hosted git repository.

vatamane pushed a commit to branch backport-issues-from-main-to-3.2.x
in repository https://gitbox.apache.org/repos/asf/couchdb.git

commit c3029453c8ca749754e4f45fcd7e0ef0afebcf6b
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