Consolidate code for establishing a superuser connection

This commit is contained in:
Ian Barwick
2020-03-25 11:01:41 +09:00
parent 325e3ea541
commit 2e9bc31c8c
3 changed files with 62 additions and 30 deletions

View File

@@ -236,6 +236,46 @@ establish_db_connection_quiet(const char *conninfo)
}
PGconn *
establish_db_connection_with_replacement_param(const char *conninfo,
const char *param,
const char *value,
const bool exit_on_error)
{
t_conninfo_param_list node_conninfo = T_CONNINFO_PARAM_LIST_INITIALIZER;
char *errmsg = NULL;
bool parse_success = false;
PGconn *conn = NULL;
initialize_conninfo_params(&node_conninfo, false);
parse_success = parse_conninfo_string(conninfo,
&node_conninfo,
&errmsg, false);
if (parse_success == false)
{
log_error(_("unable to parse conninfo string \"%s\" for local node"),
conninfo);
log_detail("%s", errmsg);
if (exit_on_error == true)
exit(ERR_BAD_CONFIG);
return NULL;
}
param_set(&node_conninfo,
param,
value);
conn = establish_db_connection_by_params(&node_conninfo, exit_on_error);
free_conninfo_params(&node_conninfo);
return conn;
}
PGconn *
establish_primary_db_connection(PGconn *conn,
const bool exit_on_error)

View File

@@ -388,6 +388,10 @@ PGconn *establish_db_connection(const char *conninfo,
PGconn *establish_db_connection_quiet(const char *conninfo);
PGconn *establish_db_connection_by_params(t_conninfo_param_list *param_list,
const bool exit_on_error);
PGconn *establish_db_connection_with_replacement_param(const char *conninfo,
const char *param,
const char *value,
const bool exit_on_error);
PGconn *establish_replication_connection_from_conn(PGconn *conn, const char *repluser);
PGconn *establish_replication_connection_from_conninfo(const char *conninfo, const char *repluser);

View File

@@ -744,12 +744,16 @@ do_node_check(void)
if (runtime_options.superuser[0] != '\0')
{
param_set(&node_conninfo,
"user",
runtime_options.superuser);
conn = establish_db_connection_with_replacement_param(
config_file_options.conninfo,
"user",
runtime_options.superuser,
true);
}
else
{
conn = establish_db_connection_by_params(&node_conninfo, true);
}
conn = establish_db_connection_by_params(&node_conninfo, true);
}
else
{
@@ -2030,37 +2034,21 @@ do_node_service(void)
if (config_file_options.conninfo[0] != '\0')
{
t_conninfo_param_list node_conninfo = T_CONNINFO_PARAM_LIST_INITIALIZER;
char *errmsg = NULL;
bool parse_success = false;
initialize_conninfo_params(&node_conninfo, false);
parse_success = parse_conninfo_string(config_file_options.conninfo,
&node_conninfo,
&errmsg, false);
if (parse_success == false)
{
log_error(_("unable to parse conninfo string \"%s\" for local node"),
config_file_options.conninfo);
log_detail("%s", errmsg);
exit(ERR_BAD_CONFIG);
}
/*
* If --superuser option provided, attempt to connect as the specified user
*/
if (runtime_options.superuser[0] != '\0')
{
param_set(&node_conninfo,
"user",
runtime_options.superuser);
conn = establish_db_connection_with_replacement_param(
config_file_options.conninfo,
"user",
runtime_options.superuser,
true);
}
else
{
conn = establish_db_connection(config_file_options.conninfo, true);
}
conn = establish_db_connection_by_params(&node_conninfo, true);
}
else
{