]> granicus.if.org Git - pgbouncer/commitdiff
console: central syntax error handling
authorMarko Kreen <markokr@gmail.com>
Tue, 3 Aug 2010 15:43:20 +0000 (15:43 +0000)
committerMarko Kreen <markokr@gmail.com>
Wed, 4 Aug 2010 04:06:35 +0000 (07:06 +0300)
always show full query back to user

src/admin.c

index 4b38e538945a275b06a06f07ccba2a3212a0a43e..91f468210c49e12a484ea3a0f1eda49d33c0f459 100644 (file)
@@ -64,6 +64,15 @@ static regex_t rc_set_str;
 
 static PgPool *admin_pool;
 
+/* only valid during processing */
+static const char *current_query;
+
+static bool syntax_error(PgSocket *admin)
+{
+       return admin_error(admin, "invalid command '%s', use SHOW HELP;",
+                          current_query ? current_query : "<no query>");
+}
+
 static bool exec_cmd(struct cmd_lookup *lookup, PgSocket *admin,
                     const char *cmd, const char *arg)
 {
@@ -71,7 +80,7 @@ static bool exec_cmd(struct cmd_lookup *lookup, PgSocket *admin,
                if (strcasecmp(lookup->word, cmd) == 0)
                        return lookup->func(admin, arg);
        }
-       return admin_error(admin, "syntax error, use SHOW HELP");
+       return syntax_error(admin);
 }
 
 bool admin_error(PgSocket *admin, const char *fmt, ...)
@@ -780,7 +789,7 @@ static bool admin_show_config(PgSocket *admin, const char *arg)
 static bool admin_cmd_reload(PgSocket *admin, const char *arg)
 {
        if (arg && *arg)
-               return admin_error(admin, "syntax error");
+               return syntax_error(admin);
 
        if (!admin->admin_user)
                return admin_error(admin, "admin access needed");
@@ -794,7 +803,7 @@ static bool admin_cmd_reload(PgSocket *admin, const char *arg)
 static bool admin_cmd_shutdown(PgSocket *admin, const char *arg)
 {
        if (arg && *arg)
-               return admin_error(admin, "syntax error");
+               return syntax_error(admin);
 
        if (!admin->admin_user)
                return admin_error(admin, "admin access needed");
@@ -853,7 +862,7 @@ static bool admin_cmd_resume(PgSocket *admin, const char *arg)
 static bool admin_cmd_suspend(PgSocket *admin, const char *arg)
 {
        if (arg && *arg)
-               return admin_error(admin, "syntax error");
+               return syntax_error(admin);
 
        if (!admin->admin_user)
                return admin_error(admin, "admin access needed");
@@ -1029,6 +1038,8 @@ static bool admin_parse_query(PgSocket *admin, const char *q)
        char val[256];
        bool res;
 
+       current_query = q;
+
        if (regexec(&rc_cmd, q, MAX_GROUPS, grp, 0) == 0) {
                copy_arg(q, grp, CMD_NAME, cmd, sizeof(cmd));
                copy_arg(q, grp, CMD_ARG, arg, sizeof(arg));
@@ -1048,7 +1059,9 @@ static bool admin_parse_query(PgSocket *admin, const char *q)
                } else
                        res = admin_set(admin, arg, val);
        } else
-               res = admin_error(admin, "unknown cmd: %s", q);
+               res = syntax_error(admin);
+
+       current_query = NULL;
 
        if (!res)
                disconnect_client(admin, true, "failure");