Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:Ledest:erlang:23
erlang
0876-kernel-Fix-auth-get-set_cookie-for-dynamic...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 0876-kernel-Fix-auth-get-set_cookie-for-dynamic-node-name.patch of Package erlang
From 8689be8f37184653ff2cf92589fd86b7a1314418 Mon Sep 17 00:00:00 2001 From: Sverker Eriksson <sverker@erlang.org> Date: Thu, 16 Dec 2021 17:03:04 +0100 Subject: [PATCH] kernel: Fix auth:get/set_cookie for dynamic node name --- lib/kernel/src/auth.erl | 42 ++++++++++++++++------ lib/kernel/test/erl_distribution_SUITE.erl | 35 +++++++++++++----- 2 files changed, 58 insertions(+), 19 deletions(-) diff --git a/lib/kernel/src/auth.erl b/lib/kernel/src/auth.erl index 8298175f9f..f61ceb9461 100644 --- a/lib/kernel/src/auth.erl +++ b/lib/kernel/src/auth.erl @@ -104,32 +104,53 @@ node_cookie(Node, Cookie) -> -spec get_cookie() -> 'nocookie' | cookie(). get_cookie() -> - get_cookie(node()). + case whereis(auth) of + undefined -> + nocookie; + AuthPid -> + gen_server:call(AuthPid, get_our_cookie, infinity) + end. -spec get_cookie(Node :: node()) -> 'nocookie' | cookie(). -get_cookie(Node) when Node =:= nonode@nohost -> - nocookie; +get_cookie(Node) when Node =:= node() -> + get_cookie(); get_cookie(Node) -> - gen_server:call(auth, {get_cookie, Node}, infinity). + case whereis(auth) of + undefined -> + nocookie; + AuthPid -> + gen_server:call(AuthPid, {get_cookie, Node}, infinity) + end. -spec set_cookie(Cookie :: cookie()) -> 'true'. set_cookie(Cookie) -> - set_cookie(node(), Cookie). + case whereis(auth) of + undefined -> + erlang:error(distribution_not_started); + AuthPid -> + gen_server:call(AuthPid, {set_our_cookie, Cookie}, infinity) + end. -spec set_cookie(Node :: node(), Cookie :: cookie()) -> 'true'. -set_cookie(_Node, _Cookie) when node() =:= nonode@nohost -> - erlang:error(distribution_not_started); +set_cookie(Node, Cookie) when Node =:= node() -> + set_cookie(Cookie); set_cookie(Node, Cookie) -> - gen_server:call(auth, {set_cookie, Node, Cookie}, infinity). + case whereis(auth) of + undefined -> + erlang:error(distribution_not_started); + AuthPid -> + gen_server:call(AuthPid, {set_cookie, Node, Cookie}, infinity) + end. -spec sync_cookie() -> any(). sync_cookie() -> gen_server:call(auth, sync_cookie, infinity). + -spec print(Node :: node(), Format :: string(), Args :: [_]) -> 'ok'. print(Node, Format, Args) -> @@ -154,7 +175,7 @@ init([]) -> -spec handle_call(calls(), {pid(), term()}, state()) -> {'reply', 'hello' | 'true' | 'nocookie' | cookie(), state()}. -handle_call({get_cookie, Node}, {_From,_Tag}, State) when Node =:= node() -> +handle_call(get_our_cookie, {_From,_Tag}, State) -> {reply, State#state.our_cookie, State}; handle_call({get_cookie, Node}, {_From,_Tag}, State) -> case ets:lookup(State#state.other_cookies, Node) of @@ -163,8 +184,7 @@ handle_call({get_cookie, Node}, {_From,_Tag}, State) -> [] -> {reply, State#state.our_cookie, State} end; -handle_call({set_cookie, Node, Cookie}, {_From,_Tag}, State) - when Node =:= node() -> +handle_call({set_our_cookie, Cookie}, {_From,_Tag}, State) -> {reply, true, State#state{our_cookie = Cookie}}; %% -- 2.34.1
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor