From c1c89e196c7ecbc91dd1f3237cd546ef633490c4 Mon Sep 17 00:00:00 2001 From: Roberto Hueso Gómez Date: Thu, 19 Sep 2019 15:49:39 +0200 Subject: #915: Return 400 status code in POST methods when no payload is attached If no payload is attached to method that requires a payload, then the API returns a 400 status code (following RFC 7231) instead of the previous 404. test_0001_get_clients.py is also modified to fit the new status code. --- sources/ogAdmServer.cpp | 31 ++++++++++++++++++++----------- 1 file changed, 20 insertions(+), 11 deletions(-) (limited to 'sources/ogAdmServer.cpp') diff --git a/sources/ogAdmServer.cpp b/sources/ogAdmServer.cpp index 357bf01..6401fe1 100644 --- a/sources/ogAdmServer.cpp +++ b/sources/ogAdmServer.cpp @@ -3933,6 +3933,15 @@ static int og_client_method_not_found(struct og_client *cli) return -1; } +static int og_client_bad_request(struct og_client *cli) +{ + char buf[] = "HTTP/1.1 400 Bad Request\r\nContent-Length: 0\r\n\r\n"; + + send(og_client_socket(cli), buf, strlen(buf), 0); + + return -1; +} + static int og_client_not_found(struct og_client *cli) { char buf[] = "HTTP/1.1 404 Not Found\r\nContent-Length: 0\r\n\r\n"; @@ -4032,7 +4041,7 @@ static int og_client_state_process_payload_rest(struct og_client *cli) if (method == OG_METHOD_POST && !root) { syslog(LOG_ERR, "command clients with no payload\n"); - return og_client_not_found(cli); + return og_client_bad_request(cli); } switch (method) { case OG_METHOD_POST: @@ -4048,7 +4057,7 @@ static int og_client_state_process_payload_rest(struct og_client *cli) if (!root) { syslog(LOG_ERR, "command wol with no payload\n"); - return og_client_not_found(cli); + return og_client_bad_request(cli); } err = og_cmd_wol(root, ¶ms); } else if (!strncmp(cmd, "shell/run", strlen("shell/run"))) { @@ -4057,7 +4066,7 @@ static int og_client_state_process_payload_rest(struct og_client *cli) if (!root) { syslog(LOG_ERR, "command run with no payload\n"); - return og_client_not_found(cli); + return og_client_bad_request(cli); } err = og_cmd_run_post(root, ¶ms); } else if (!strncmp(cmd, "shell/output", strlen("shell/output"))) { @@ -4066,7 +4075,7 @@ static int og_client_state_process_payload_rest(struct og_client *cli) if (!root) { syslog(LOG_ERR, "command output with no payload\n"); - return og_client_not_found(cli); + return og_client_bad_request(cli); } err = og_cmd_run_get(root, ¶ms, buf_reply); @@ -4076,7 +4085,7 @@ static int og_client_state_process_payload_rest(struct og_client *cli) if (!root) { syslog(LOG_ERR, "command session with no payload\n"); - return og_client_not_found(cli); + return og_client_bad_request(cli); } err = og_cmd_session(root, ¶ms); } else if (!strncmp(cmd, "poweroff", strlen("poweroff"))) { @@ -4085,7 +4094,7 @@ static int og_client_state_process_payload_rest(struct og_client *cli) if (!root) { syslog(LOG_ERR, "command poweroff with no payload\n"); - return og_client_not_found(cli); + return og_client_bad_request(cli); } err = og_cmd_poweroff(root, ¶ms); } else if (!strncmp(cmd, "reboot", strlen("reboot"))) { @@ -4094,7 +4103,7 @@ static int og_client_state_process_payload_rest(struct og_client *cli) if (!root) { syslog(LOG_ERR, "command reboot with no payload\n"); - return og_client_not_found(cli); + return og_client_bad_request(cli); } err = og_cmd_reboot(root, ¶ms); } else if (!strncmp(cmd, "stop", strlen("stop"))) { @@ -4103,7 +4112,7 @@ static int og_client_state_process_payload_rest(struct og_client *cli) if (!root) { syslog(LOG_ERR, "command stop with no payload\n"); - return og_client_not_found(cli); + return og_client_bad_request(cli); } err = og_cmd_stop(root, ¶ms); } else if (!strncmp(cmd, "refresh", strlen("refresh"))) { @@ -4112,7 +4121,7 @@ static int og_client_state_process_payload_rest(struct og_client *cli) if (!root) { syslog(LOG_ERR, "command refresh with no payload\n"); - return og_client_not_found(cli); + return og_client_bad_request(cli); } err = og_cmd_refresh(root, ¶ms); } else if (!strncmp(cmd, "hardware", strlen("hardware"))) { @@ -4121,7 +4130,7 @@ static int og_client_state_process_payload_rest(struct og_client *cli) if (!root) { syslog(LOG_ERR, "command hardware with no payload\n"); - return og_client_not_found(cli); + return og_client_bad_request(cli); } err = og_cmd_hardware(root, ¶ms); } else if (!strncmp(cmd, "software", strlen("software"))) { @@ -4130,7 +4139,7 @@ static int og_client_state_process_payload_rest(struct og_client *cli) if (!root) { syslog(LOG_ERR, "command software with no payload\n"); - return og_client_not_found(cli); + return og_client_bad_request(cli); } err = og_cmd_software(root, ¶ms); } else { -- cgit v1.2.3-18-g5258