From be8e5b45fab1d6a90c660559bba710ada2ae4d0d Mon Sep 17 00:00:00 2001 From: Ian Barwick Date: Tue, 5 May 2020 11:15:33 +0900 Subject: [PATCH] Add utility function validate_conninfo_string() --- dbutils.c | 27 ++++++++++++++++++++++++++- dbutils.h | 1 + 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/dbutils.c b/dbutils.c index 5094a87b..61e70b6f 100644 --- a/dbutils.c +++ b/dbutils.c @@ -705,10 +705,35 @@ param_get(t_conninfo_param_list *param_list, const char *param) } +/* + * Validate a conninfo string by attempting to parse it. + * + * "errmsg": passed to PQconninfoParse(), may be NULL + * + * NOTE: PQconninfoParse() verifies the string format and checks for + * valid options but does not sanity check values. + */ + +bool +validate_conninfo_string(const char *conninfo_str, char **errmsg) +{ + PQconninfoOption *connOptions = NULL; + + connOptions = PQconninfoParse(conninfo_str, errmsg); + + if (connOptions == NULL) + return false; + + return true; +} + + /* * Parse a conninfo string into a t_conninfo_param_list * - * See conn_to_param_list() to do the same for a PGconn + * See conn_to_param_list() to do the same for a PGconn. + * + * "errmsg": passed to PQconninfoParse(), may be NULL * * "ignore_local_params": ignores those parameters specific * to a local installation, i.e. when parsing an upstream diff --git a/dbutils.h b/dbutils.h index 017b9271..3d48b0f8 100644 --- a/dbutils.h +++ b/dbutils.h @@ -413,6 +413,7 @@ void conn_to_param_list(PGconn *conn, t_conninfo_param_list *param_list); void param_set(t_conninfo_param_list *param_list, const char *param, const char *value); void param_set_ine(t_conninfo_param_list *param_list, const char *param, const char *value); char *param_get(t_conninfo_param_list *param_list, const char *param); +bool validate_conninfo_string(const char *conninfo_str, char **errmsg); bool parse_conninfo_string(const char *conninfo_str, t_conninfo_param_list *param_list, char **errmsg, bool ignore_local_params); char *param_list_to_string(t_conninfo_param_list *param_list); char *normalize_conninfo_string(const char *conninfo_str);