summaryrefslogtreecommitdiffstats
path: root/admin
diff options
context:
space:
mode:
authorJavier Sánchez Parra <jsanchez@soleta.eu>2020-04-06 11:24:19 +0200
committerOpenGnSys Support Team <soporte-og@soleta.eu>2020-04-06 16:35:20 +0200
commit4d7fd58c8542c8db5309b3ba69c7bdeb2c82878b (patch)
treee03dbb5ed9e21a451f275ba0f74672aaac838f30 /admin
parent1d9d93c7e9029c9ed8766002d3fc43ea7147c581 (diff)
#915: Reply 413 status code when no payload is too large
If the payload is too long, then the API returns a 413 status code (following RFC 7231) instead of the resetting the communication without replying. This way it should be more clear when this problem is happening. The other commit I did related to the issue of the payload size (1d9d93c) said that ogAdmServer do not log anything when it receives a payload of a bigger size than supported, this is false. ogAdmServer prints the next message to the syslog when this happens: ogAdmServer[6824]: client request from 127.0.0.1:43552 is too long
Diffstat (limited to 'admin')
-rw-r--r--admin/Sources/Services/ogAdmServer/sources/ogAdmServer.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/admin/Sources/Services/ogAdmServer/sources/ogAdmServer.c b/admin/Sources/Services/ogAdmServer/sources/ogAdmServer.c
index 0984cdbd..c465ffec 100644
--- a/admin/Sources/Services/ogAdmServer/sources/ogAdmServer.c
+++ b/admin/Sources/Services/ogAdmServer/sources/ogAdmServer.c
@@ -4358,6 +4358,16 @@ static int og_server_internal_error(struct og_client *cli)
return -1;
}
+static int og_client_payload_too_large(struct og_client *cli)
+{
+ char buf[] = "HTTP/1.1 413 Payload Too Large\r\n"
+ "Content-Length: 0\r\n\r\n";
+
+ send(og_client_socket(cli), buf, strlen(buf), 0);
+
+ return -1;
+}
+
#define OG_MSG_RESPONSE_MAXLEN 65536
static int og_client_ok(struct og_client *cli, char *buf_reply)
@@ -4688,6 +4698,7 @@ static void og_client_read_cb(struct ev_loop *loop, struct ev_io *io, int events
if (cli->buf_len >= sizeof(cli->buf)) {
syslog(LOG_ERR, "client request from %s:%hu is too long\n",
inet_ntoa(cli->addr.sin_addr), ntohs(cli->addr.sin_port));
+ og_client_payload_too_large(cli);
goto close;
}