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

jiahuili430 pushed a commit to branch fix-remsh-cookie-reading
in repository https://gitbox.apache.org/repos/asf/couchdb.git

commit 2e861613116e09a7b4c9b66ae47cc0778c56eaf8
Author: Jiahui Li <[email protected]>
AuthorDate: Sun May 11 23:42:24 2025 -0500

    Extend `remsh` to read cookie from various sources
    
    We can set cookies using `./dev/run --erlang-cookie=crumbles` or
    `vm.args`: `-setcookie crumbles`.
    
    If neither of them is set or we set the cookie in both places, then
    the Erlang node will read the cookie from `~/.erlang.cookie`.
    
    Add this mechanism to the `remsh` script to extend flexibility.
    
    Related PR: https://github.com/apache/couchdb/pull/5531
---
 dev/remsh | 48 ++++++++++++++++++++++++++++++++++++++----------
 1 file changed, 38 insertions(+), 10 deletions(-)

diff --git a/dev/remsh b/dev/remsh
index 347a799d0..2630bdb96 100755
--- a/dev/remsh
+++ b/dev/remsh
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/usr/bin/env bash
 # Licensed under the Apache License, Version 2.0 (the "License"); you may not
 # use this file except in compliance with the License. You may obtain a copy of
 # the License at
@@ -11,18 +11,46 @@
 # License for the specific language governing permissions and limitations under
 # the License.
 
-if [ -z $NODE ]; then
-    if [ -z $1 ]; then
-        NODE=1
-    else
-        NODE=$1
-    fi
+# Cookies can be set in 3 different ways:
+# - Use `dev/run` script to pass cookies:
+#     `dev/run --erlang-cookie=crumbles`
+# - Use `vm.args` config file in rel/overlay/etc to set cookies:
+#     `-setcookie crumbles`
+# - Use cookies from the `.erlang.cookie` file in the user's home directory.
+
+# NOTE: If more than 2 cookies are passed to node, node will ignore them
+#       and use the default cookies from `~/.erlang.cookie`.
+
+if [ -z "$NODE" ]; then
+  if [ -z "$1" ]; then
+    NODE=1
+  else
+    NODE=$1
+  fi
 fi
 
-if [ -z $HOST ]; then
-    HOST="127.0.0.1"
+if [ -z "$HOST" ]; then
+  HOST="127.0.0.1"
 fi
 
 NAME="remsh$$@$HOST"
 NODE="node$NODE@$HOST"
-erl -name $NAME -remsh $NODE -hidden
+
+COOKIE_PY=$(ps ax |
+  grep -E "dev/run .* --erlang-cookie=" |
+  sed -n 
"s/.*--erlang-cookie=\([a-zA-Z0-9!@$%^&*()_+-=(){}<>,;.:?/|]*\).*/\1/p")
+
+DIR="$(
+  cd "${0%/*}" 2>/dev/null || exit
+  echo "$PWD"/../rel/overlay/etc/
+)"
+COOKIE_VM=$(grep "^-setcookie" "$DIR"/vm.args |
+  sed -n "s/-setcookie *\([a-zA-Z0-9!@$%^&*()_+-=(){}<>,;.:?/|]*\).*/\1/p")
+
+if [[ -n "$COOKIE_PY" && -z "$COOKIE_VM" ]]; then
+  erl -name "$NAME" -remsh "$NODE" -hidden -setcookie "$COOKIE_PY"
+elif [[ -z "$COOKIE_PY" && $(echo "$COOKIE_VM" | wc -l) -eq 1 ]]; then
+  erl -name "$NAME" -remsh "$NODE" -hidden -setcookie "$COOKIE_VM"
+else
+  erl -name "$NAME" -remsh "$NODE" -hidden
+fi

Reply via email to