#undef LINELEN
}
+
+/*
+ * Check password type is md5 hashed or not. recovery_password and
+ * wd_lifecheck_password are not allowed to be md5 hashed format.
+ * The kind of returns of this function is follow;
+ * 0: password is not md5 hashed
+ * -1: password is md5 hashed
+ * -2: password is not found
+ */
+int
+chceck_password_type_is_not_md5(char *username, char *password_in_config)
+{
+ PasswordType passwordType = PASSWORD_TYPE_UNKNOWN;
+ PasswordMapping *password_mapping = NULL;
+
+ /*
+ * if the password specified in config is empty string or NULL look for the
+ * password in pool_passwd file
+ */
+ if (password_in_config == NULL || strlen(password_in_config) == 0)
+ {
+ password_mapping = pool_get_user_credentials(username);
+ if (password_mapping == NULL)
+ {
+ return -2;
+ }
+ passwordType = password_mapping->pgpoolUser.passwordType;
+ }
+ else
+ {
+ passwordType = get_password_type(password_in_config);
+ }
+
+ /* if the password type is MD5 hash return -1*/
+ if (passwordType == PASSWORD_TYPE_MD5)
+ {
+ return -1;
+ }
+
+ return 0;
+}
\ No newline at end of file
extern char *read_pool_key(char *key_file_path);
extern char *get_pgpool_config_user_password(char *username, char *password_in_config);
extern void delete_passwordMapping(PasswordMapping * pwdMapping);
+extern int chceck_password_type_is_not_md5(char *username, char *password_in_config);
#endif /* POOL_PASSWD_H */
conn = connect_backend_libpq(backend);
if (conn == NULL)
+ {
+ if(chceck_password_type_is_not_md5(pool_config->recovery_user, pool_config->recovery_password) == -1)
+ {
+ ereport(ERROR,
+ (errmsg("the password of recovery_user %s is invalid format",
+ pool_config->recovery_user),
+ errdetail("recovery_password is not allowed to be md5 hashed format")));
+ }
ereport(ERROR,
(errmsg("node recovery failed, unable to connect to main node: %d ", node_id)));
+ }
+
PG_TRY();
{
conn = create_conn(node->hostName, node->pgpoolPort, password);
if (conn == NULL)
+ {
+ if(chceck_password_type_is_not_md5(pool_config->wd_lifecheck_user, pool_config->wd_lifecheck_password) == -1)
+ {
+ ereport(ERROR,
+ (errmsg("the password of wd_lifecheck_user %s is invalid format",
+ pool_config->recovery_user),
+ errdetail("wd_lifecheck_password is not allowed to be md5 hashed format")));
+ }
return WD_NG;
+ }
return ping_pgpool(conn);
}