summaryrefslogtreecommitdiff
path: root/source4/web_server/web_server.c
diff options
context:
space:
mode:
authorJelmer Vernooij <jelmer@samba.org>2008-09-21 16:53:29 +0200
committerJelmer Vernooij <jelmer@samba.org>2008-09-21 16:53:29 +0200
commit1271066234fed0e5f0e28a1e75420482abd20887 (patch)
treefb5e46a971fa5bef6259f0efa617eb30b6691be2 /source4/web_server/web_server.c
parentfda85985e91179f8e03538581335326f54456f4f (diff)
downloadsamba-1271066234fed0e5f0e28a1e75420482abd20887.tar.gz
samba-1271066234fed0e5f0e28a1e75420482abd20887.tar.bz2
samba-1271066234fed0e5f0e28a1e75420482abd20887.zip
Remove support for ESP in the web server.
Diffstat (limited to 'source4/web_server/web_server.c')
-rw-r--r--source4/web_server/web_server.c63
1 files changed, 59 insertions, 4 deletions
diff --git a/source4/web_server/web_server.c b/source4/web_server/web_server.c
index 6d8b2a2758..20924ff0dc 100644
--- a/source4/web_server/web_server.c
+++ b/source4/web_server/web_server.c
@@ -4,6 +4,7 @@
web server startup
Copyright (C) Andrew Tridgell 2005
+ Copyright (C) Jelmer Vernooij 2008
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -29,6 +30,7 @@
#include "system/network.h"
#include "lib/socket/netif.h"
#include "lib/tls/tls.h"
+#include "lib/util/dlinklist.h"
#include "param/param.h"
/* don't allow connections to hang around forever */
@@ -62,6 +64,62 @@ static void websrv_timeout(struct event_context *event_context,
}
/*
+ setup for a raw http level error
+*/
+void http_error(struct websrv_context *web, int code, const char *info)
+{
+ char *s;
+ s = talloc_asprintf(web,"<HTML><HEAD><TITLE>Error %u</TITLE></HEAD><BODY><H1>Error %u</H1><pre>%s</pre><p></BODY></HTML>\r\n\r\n",
+ code, code, info);
+ if (s == NULL) {
+ stream_terminate_connection(web->conn, "http_error: out of memory");
+ return;
+ }
+ /* FIXME:
+ http_writeBlock(web, s, strlen(s));
+ http_setResponseCode(web, code);
+ http_output_headers(web); */
+ EVENT_FD_NOT_READABLE(web->conn->event.fde);
+ EVENT_FD_WRITEABLE(web->conn->event.fde);
+ web->output.output_pending = true;
+}
+
+
+/*
+ parse one line of header input
+*/
+NTSTATUS http_parse_header(struct websrv_context *web, const char *line)
+{
+ if (line[0] == 0) {
+ web->input.end_of_headers = true;
+ } else if (strncasecmp(line,"GET ", 4)==0) {
+ web->input.url = talloc_strndup(web, &line[4], strcspn(&line[4], " \t"));
+ } else if (strncasecmp(line,"POST ", 5)==0) {
+ web->input.post_request = true;
+ web->input.url = talloc_strndup(web, &line[5], strcspn(&line[5], " \t"));
+ } else if (strchr(line, ':') == NULL) {
+ http_error(web, 400, "This server only accepts GET and POST requests");
+ return NT_STATUS_INVALID_PARAMETER;
+ } else if (strncasecmp(line, "Content-Length: ", 16)==0) {
+ web->input.content_length = strtoul(&line[16], NULL, 10);
+ } else {
+ struct http_header *hdr = talloc_zero(web, struct http_header);
+ char *colon = strchr(line, ':');
+ if (colon == NULL) {
+ http_error(web, 500, "invalidly formatted header");
+ return NT_STATUS_INVALID_PARAMETER;
+ }
+
+ hdr->name = talloc_strndup(hdr, line, colon-line);
+ hdr->value = talloc_strdup(hdr, colon+1);
+ DLIST_ADD(web->input.headers, hdr);
+ }
+
+ /* ignore all other headers for now */
+ return NT_STATUS_OK;
+}
+
+/*
called when a web connection becomes readable
*/
static void websrv_recv(struct stream_connection *conn, uint16_t flags)
@@ -199,7 +257,7 @@ static void websrv_accept(struct stream_connection *conn)
web = talloc_zero(conn, struct websrv_context);
if (web == NULL) goto failed;
- web->http_process_input = esp_process_http_input;
+ web->http_process_input = wsgi_process_http_input;
web->task = task;
web->conn = conn;
conn->private = web;
@@ -290,9 +348,6 @@ static void websrv_task_init(struct task_server *task)
wdata->tls_params = tls_initialise(wdata, task->lp_ctx);
if (wdata->tls_params == NULL) goto failed;
- wdata->private = http_setup_esp(task, task->lp_ctx);
- if (wdata->private == NULL) goto failed;
-
return;
failed: