From d70912a26af49db468af7ec88e9689b8176e0576 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Thu, 26 May 2005 01:06:32 +0000 Subject: r6981: first version of the builtin web server for Samba4 This includes an embedded server side scripting system called 'esp' (see http://www.appwebserver.org/products/esp/esp.html) and javascript based scripting language called 'esj' (see http://www.appwebserver.org/products/ejs/ejs.html) The justification for including this scripting language is that it should make it much easier to write a high quality web interface for Samba4. The scripting language can call into any Samba4 library code (so for example it will be able to make ldb and loadparm calls), plus it provides easy support for forms, cookies, sessions etc. There is still quite a bit more work to do on the web server, but there is enough here now for people to look at and comment. I will be committing some sample web pages that test esp functionality shortly. (This used to be commit 26f0ba92c0c565ac9e4cb5a079d795d4262497dd) --- source4/web_server/web_server.c | 252 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 252 insertions(+) create mode 100644 source4/web_server/web_server.c (limited to 'source4/web_server/web_server.c') diff --git a/source4/web_server/web_server.c b/source4/web_server/web_server.c new file mode 100644 index 0000000000..9d161bdd8a --- /dev/null +++ b/source4/web_server/web_server.c @@ -0,0 +1,252 @@ +/* + Unix SMB/CIFS implementation. + + web server startup + + Copyright (C) Andrew Tridgell 2005 + + 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 + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + +#include "includes.h" +#include "smbd/service_task.h" +#include "smbd/service_stream.h" +#include "web_server/web_server.h" +#include "lib/events/events.h" +#include "system/filesys.h" + +/* don't allow connections to hang around forever */ +#define HTTP_TIMEOUT 30 + +/* + destroy a web connection +*/ +static int websrv_destructor(void *ptr) +{ + struct websrv_context *web = talloc_get_type(ptr, struct websrv_context); + if (web->output.fd != -1) { + close(web->output.fd); + } + return 0; +} + +/* + called when a connection times out. This prevents a stuck connection + from hanging around forever +*/ +static void websrv_timeout(struct event_context *event_context, + struct timed_event *te, + struct timeval t, void *private) +{ + struct websrv_context *web = talloc_get_type(private, struct websrv_context); + stream_terminate_connection(web->conn, "websrv_context: timeout"); +} + +/* + called when a web connection becomes readable +*/ +static void websrv_recv(struct stream_connection *conn, uint16_t flags) +{ + struct websrv_context *web = talloc_get_type(conn->private, + struct websrv_context); + NTSTATUS status; + uint8_t buf[1024]; + size_t nread; + uint8_t *p; + DATA_BLOB b; + + /* not the most efficient http parser ever, but good enough for us */ + status = socket_recv(conn->socket, buf, sizeof(buf), &nread, 0); + if (NT_STATUS_IS_ERR(status)) goto failed; + if (!NT_STATUS_IS_OK(status)) return; + + status = data_blob_append(web, &web->input.partial, buf, nread); + if (!NT_STATUS_IS_OK(status)) goto failed; + + /* parse any lines that are available */ + b = web->input.partial; + while (!web->input.end_of_headers && + (p=memchr(b.data, '\n', b.length))) { + const char *line = b.data; + *p = 0; + if (p != b.data && p[-1] == '\r') { + p[-1] = 0; + } + status = http_parse_header(web, line); + if (!NT_STATUS_IS_OK(status)) return; + b.length -= (p - b.data) + 1; + b.data = p+1; + } + + /* keep any remaining bytes in web->input.partial */ + if (b.length == 0) { + b.data = NULL; + } + b = data_blob_talloc(web, b.data, b.length); + data_blob_free(&web->input.partial); + web->input.partial = b; + + /* we finish when we have both the full headers (terminated by + a blank line) and any post data, as indicated by the + content_length */ + if (web->input.end_of_headers && + web->input.partial.length == web->input.content_length) { + EVENT_FD_NOT_READABLE(web->conn->event.fde); + http_process_input(web); + } + return; + +failed: + stream_terminate_connection(conn, "websrv_recv: failed\n"); +} + + +/* + called when a web connection becomes writable +*/ +static void websrv_send(struct stream_connection *conn, uint16_t flags) +{ + struct websrv_context *web = talloc_get_type(conn->private, + struct websrv_context); + NTSTATUS status; + size_t nsent; + DATA_BLOB b; + + b = web->output.content; + b.data += web->output.nsent; + b.length -= web->output.nsent; + + status = socket_send(conn->socket, &b, &nsent, 0); + if (NT_STATUS_IS_ERR(status)) { + stream_terminate_connection(web->conn, "socket_send: failed"); + return; + } + if (!NT_STATUS_IS_OK(status)) { + return; + } + + web->output.nsent += nsent; + + /* possibly read some more raw data from a file */ + if (web->output.content.length == web->output.nsent && + web->output.fd != -1) { + uint8_t buf[2048]; + ssize_t nread; + + data_blob_free(&web->output.content); + web->output.nsent = 0; + + nread = read(web->output.fd, buf, sizeof(buf)); + if (nread == 0) { + close(web->output.fd); + web->output.fd = -1; + } + if (nread == -1 && errno == EINTR) { + return; + } + web->output.content = data_blob_talloc(web, buf, nread); + } + + if (web->output.content.length == web->output.nsent) { + stream_terminate_connection(web->conn, NULL); + } +} + +/* + establish a new connection to the web server +*/ +static void websrv_accept(struct stream_connection *conn) +{ + struct websrv_context *web; + + web = talloc_zero(conn, struct websrv_context); + if (web == NULL) goto failed; + + web->conn = conn; + conn->private = web; + web->output.fd = -1; + talloc_set_destructor(web, websrv_destructor); + + event_add_timed(conn->event.ctx, web, + timeval_current_ofs(HTTP_TIMEOUT, 0), + websrv_timeout, web); + return; + +failed: + talloc_free(conn); +} + + +static const struct stream_server_ops web_stream_ops = { + .name = "web", + .accept_connection = websrv_accept, + .recv_handler = websrv_recv, + .send_handler = websrv_send, +}; + +/* + startup the web server task +*/ +static void websrv_task_init(struct task_server *task) +{ + NTSTATUS status; + uint16_t port = lp_swat_port(); + const struct model_ops *model_ops; + + /* run the web server as a single process */ + model_ops = process_model_byname("single"); + if (!model_ops) goto failed; + + if (lp_interfaces() && lp_bind_interfaces_only()) { + int num_interfaces = iface_count(); + int i; + for(i = 0; i < num_interfaces; i++) { + const char *address = iface_n_ip(i); + status = stream_setup_socket(task->event_ctx, model_ops, + &web_stream_ops, + "ipv4", address, + &port, task); + if (!NT_STATUS_IS_OK(status)) goto failed; + } + } else { + status = stream_setup_socket(task->event_ctx, model_ops, + &web_stream_ops, + "ipv4", lp_socket_address(), + &port, task); + if (!NT_STATUS_IS_OK(status)) goto failed; + } + + return; + +failed: + task_terminate(task, "Failed to startup web server task"); +} + + +/* + called on startup of the web server service It's job is to start + listening on all configured sockets +*/ +static NTSTATUS websrv_init(struct event_context *event_context, + const struct model_ops *model_ops) +{ + return task_server_startup(event_context, model_ops, websrv_task_init); +} + +/* called at smbd startup - register ourselves as a server service */ +NTSTATUS server_service_web_init(void) +{ + return register_server_service("web", websrv_init); +} -- cgit From 7e582319528b674d5f7603409e357138194a0ab1 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Thu, 26 May 2005 02:06:33 +0000 Subject: r6982: install the swat pages with 'make installswat' (This used to be commit 31543e1eae03d22343ea8c970494af36eb07b41f) --- source4/web_server/web_server.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'source4/web_server/web_server.c') diff --git a/source4/web_server/web_server.c b/source4/web_server/web_server.c index 9d161bdd8a..656e101c11 100644 --- a/source4/web_server/web_server.c +++ b/source4/web_server/web_server.c @@ -202,7 +202,7 @@ static const struct stream_server_ops web_stream_ops = { static void websrv_task_init(struct task_server *task) { NTSTATUS status; - uint16_t port = lp_swat_port(); + uint16_t port = lp_web_port(); const struct model_ops *model_ops; /* run the web server as a single process */ -- cgit From fc45b63e478f6f891f0d04bf49423be30a63617d Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Fri, 27 May 2005 00:29:58 +0000 Subject: r6998: - added support for application[] data, which is global to all clients using the web server. This allows for things like application['state'] = "shuttting down" and then every web client can see that the server is going down - added support for session[] data. This allows web pages to store long term data specific to this client. It relies on cookies. Sessions auto timeout (default timeout 5 minutes). The timeout can be set in the scripts. - changed from processing all .html files as esp, to only processing .esp files as esp. This makes it easier to compare the samba web server to appWeb as a reference implementation. - expanded the number of standard variables setup by esp. See the showvars.esp example page for all variables. (This used to be commit c418b23c2ea383da8fad21b62213ec01fd135ebb) --- source4/web_server/web_server.c | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'source4/web_server/web_server.c') diff --git a/source4/web_server/web_server.c b/source4/web_server/web_server.c index 656e101c11..9bbf423d29 100644 --- a/source4/web_server/web_server.c +++ b/source4/web_server/web_server.c @@ -169,11 +169,13 @@ static void websrv_send(struct stream_connection *conn, uint16_t flags) */ static void websrv_accept(struct stream_connection *conn) { + struct task_server *task = talloc_get_type(conn->private, struct task_server); struct websrv_context *web; web = talloc_zero(conn, struct websrv_context); if (web == NULL) goto failed; + web->task = task; web->conn = conn; conn->private = web; web->output.fd = -1; @@ -228,6 +230,11 @@ static void websrv_task_init(struct task_server *task) if (!NT_STATUS_IS_OK(status)) goto failed; } + /* startup the esp processor - unfortunately we can't do this + per connection as that wouldn't allow for session variables */ + status = http_setup_esp(task); + if (!NT_STATUS_IS_OK(status)) goto failed; + return; failed: -- cgit From ebb0b35242f5c2967afdba9e746679bc87c5b745 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Fri, 27 May 2005 11:57:14 +0000 Subject: r7013: added tls support to the builtin web server. It auto-detects if the client is using tls by looking at the first byte on the connection. This allows both https and http services to be on the same port (This used to be commit 6369dfb6585ce4d4e3028c557395f2d73c290c92) --- source4/web_server/web_server.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) (limited to 'source4/web_server/web_server.c') diff --git a/source4/web_server/web_server.c b/source4/web_server/web_server.c index 9bbf423d29..faa30fc55f 100644 --- a/source4/web_server/web_server.c +++ b/source4/web_server/web_server.c @@ -68,7 +68,7 @@ static void websrv_recv(struct stream_connection *conn, uint16_t flags) DATA_BLOB b; /* not the most efficient http parser ever, but good enough for us */ - status = socket_recv(conn->socket, buf, sizeof(buf), &nread, 0); + status = tls_socket_recv(web, buf, sizeof(buf), &nread); if (NT_STATUS_IS_ERR(status)) goto failed; if (!NT_STATUS_IS_OK(status)) return; @@ -128,7 +128,7 @@ static void websrv_send(struct stream_connection *conn, uint16_t flags) b.data += web->output.nsent; b.length -= web->output.nsent; - status = socket_send(conn->socket, &b, &nsent, 0); + status = tls_socket_send(web, &b, &nsent); if (NT_STATUS_IS_ERR(status)) { stream_terminate_connection(web->conn, "socket_send: failed"); return; @@ -159,7 +159,8 @@ static void websrv_send(struct stream_connection *conn, uint16_t flags) web->output.content = data_blob_talloc(web, buf, nread); } - if (web->output.content.length == web->output.nsent) { + if (web->output.content.length == web->output.nsent && + web->output.fd == -1) { stream_terminate_connection(web->conn, NULL); } } @@ -171,6 +172,7 @@ static void websrv_accept(struct stream_connection *conn) { struct task_server *task = talloc_get_type(conn->private, struct task_server); struct websrv_context *web; + NTSTATUS status; web = talloc_zero(conn, struct websrv_context); if (web == NULL) goto failed; @@ -184,6 +186,10 @@ static void websrv_accept(struct stream_connection *conn) event_add_timed(conn->event.ctx, web, timeval_current_ofs(HTTP_TIMEOUT, 0), websrv_timeout, web); + + status = tls_init_connection(web); + if (!NT_STATUS_IS_OK(status)) goto failed; + return; failed: @@ -235,6 +241,8 @@ static void websrv_task_init(struct task_server *task) status = http_setup_esp(task); if (!NT_STATUS_IS_OK(status)) goto failed; + tls_initialise(task); + return; failed: -- cgit From 822498b7f536e4c4e552c524b14d6cb691ec5b62 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Sun, 19 Jun 2005 04:21:45 +0000 Subject: r7744: converted the web server to use the lib/tls/ generic tls code (This used to be commit 023fc567badba38b87895ea73515b2ce0b703a8c) --- source4/web_server/web_server.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) (limited to 'source4/web_server/web_server.c') diff --git a/source4/web_server/web_server.c b/source4/web_server/web_server.c index faa30fc55f..e54c0b6e9f 100644 --- a/source4/web_server/web_server.c +++ b/source4/web_server/web_server.c @@ -26,6 +26,7 @@ #include "web_server/web_server.h" #include "lib/events/events.h" #include "system/filesys.h" +#include "lib/tls/tls.h" /* don't allow connections to hang around forever */ #define HTTP_TIMEOUT 30 @@ -68,7 +69,7 @@ static void websrv_recv(struct stream_connection *conn, uint16_t flags) DATA_BLOB b; /* not the most efficient http parser ever, but good enough for us */ - status = tls_socket_recv(web, buf, sizeof(buf), &nread); + status = tls_socket_recv(web->tls, buf, sizeof(buf), &nread); if (NT_STATUS_IS_ERR(status)) goto failed; if (!NT_STATUS_IS_OK(status)) return; @@ -128,7 +129,7 @@ static void websrv_send(struct stream_connection *conn, uint16_t flags) b.data += web->output.nsent; b.length -= web->output.nsent; - status = tls_socket_send(web, &b, &nsent); + status = tls_socket_send(web->tls, &b, &nsent); if (NT_STATUS_IS_ERR(status)) { stream_terminate_connection(web->conn, "socket_send: failed"); return; @@ -161,6 +162,8 @@ static void websrv_send(struct stream_connection *conn, uint16_t flags) if (web->output.content.length == web->output.nsent && web->output.fd == -1) { + talloc_free(web->tls); + web->tls = NULL; stream_terminate_connection(web->conn, NULL); } } @@ -171,8 +174,8 @@ static void websrv_send(struct stream_connection *conn, uint16_t flags) static void websrv_accept(struct stream_connection *conn) { struct task_server *task = talloc_get_type(conn->private, struct task_server); + struct esp_data *edata = talloc_get_type(task->private, struct esp_data); struct websrv_context *web; - NTSTATUS status; web = talloc_zero(conn, struct websrv_context); if (web == NULL) goto failed; @@ -187,8 +190,9 @@ static void websrv_accept(struct stream_connection *conn) timeval_current_ofs(HTTP_TIMEOUT, 0), websrv_timeout, web); - status = tls_init_connection(web); - if (!NT_STATUS_IS_OK(status)) goto failed; + web->tls = tls_init_server(edata->tls_params, conn->socket, + conn->event.fde, "GPHO"); + if (web->tls == NULL) goto failed; return; @@ -241,8 +245,6 @@ static void websrv_task_init(struct task_server *task) status = http_setup_esp(task); if (!NT_STATUS_IS_OK(status)) goto failed; - tls_initialise(task); - return; failed: -- cgit From 7a17da2186c628f0d8e8a43ca34320b0f10d9d8f Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Sun, 19 Jun 2005 11:10:15 +0000 Subject: r7751: only enable tls on the ldaps port in ldap server, and reject non-tls connections on that port (This used to be commit 30da6a1cc41308a16a486111887f45bcf598f064) --- source4/web_server/web_server.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'source4/web_server/web_server.c') diff --git a/source4/web_server/web_server.c b/source4/web_server/web_server.c index e54c0b6e9f..5ccf059b49 100644 --- a/source4/web_server/web_server.c +++ b/source4/web_server/web_server.c @@ -191,7 +191,7 @@ static void websrv_accept(struct stream_connection *conn) websrv_timeout, web); web->tls = tls_init_server(edata->tls_params, conn->socket, - conn->event.fde, "GPHO"); + conn->event.fde, "GPHO", True); if (web->tls == NULL) goto failed; return; -- cgit From b3e493470f3465cfe5cfa958b019ac8cfb8f12f2 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Sat, 25 Jun 2005 23:53:14 +0000 Subject: r7911: task_terminate() is defined in the macosx headers, so change the name to task_server_terminate() (This used to be commit a7447e25ac203f0ee09ffdf72df1094eb70e7c0c) --- source4/web_server/web_server.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'source4/web_server/web_server.c') diff --git a/source4/web_server/web_server.c b/source4/web_server/web_server.c index 5ccf059b49..71bdc8f646 100644 --- a/source4/web_server/web_server.c +++ b/source4/web_server/web_server.c @@ -248,7 +248,7 @@ static void websrv_task_init(struct task_server *task) return; failed: - task_terminate(task, "Failed to startup web server task"); + task_server_terminate(task, "Failed to startup web server task"); } -- cgit From 9d70babef12ba2971d73622b9c3cd7248deeac16 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Tue, 12 Jul 2005 06:17:19 +0000 Subject: r8351: When finished sending call stream_terminate_connection() with a nice message instead of NULL. Fix up some other terminate messgages to be consistent. (This used to be commit c0428ef3376e439cdc04fea046738cecb7a01560) --- source4/web_server/web_server.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'source4/web_server/web_server.c') diff --git a/source4/web_server/web_server.c b/source4/web_server/web_server.c index 71bdc8f646..50a01db3d4 100644 --- a/source4/web_server/web_server.c +++ b/source4/web_server/web_server.c @@ -52,7 +52,7 @@ static void websrv_timeout(struct event_context *event_context, struct timeval t, void *private) { struct websrv_context *web = talloc_get_type(private, struct websrv_context); - stream_terminate_connection(web->conn, "websrv_context: timeout"); + stream_terminate_connection(web->conn, "websrv_timeout: timed out"); } /* @@ -110,7 +110,7 @@ static void websrv_recv(struct stream_connection *conn, uint16_t flags) return; failed: - stream_terminate_connection(conn, "websrv_recv: failed\n"); + stream_terminate_connection(conn, "websrv_recv: failed"); } @@ -164,7 +164,7 @@ static void websrv_send(struct stream_connection *conn, uint16_t flags) web->output.fd == -1) { talloc_free(web->tls); web->tls = NULL; - stream_terminate_connection(web->conn, NULL); + stream_terminate_connection(web->conn, "websrv_send: finished sending"); } } @@ -248,7 +248,7 @@ static void websrv_task_init(struct task_server *task) return; failed: - task_server_terminate(task, "Failed to startup web server task"); + task_server_terminate(task, "websrv_task_init: failed to startup web server task"); } -- cgit From 71f8de6bb3306f2d6b63f3b1c1551af473caa483 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Fri, 5 Aug 2005 15:34:31 +0000 Subject: r9122: cope with trailing garbage in POST contents in the web server (This used to be commit de0ac6a9d6f38f9c8067f974e3bdc1c9a164d638) --- source4/web_server/web_server.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'source4/web_server/web_server.c') diff --git a/source4/web_server/web_server.c b/source4/web_server/web_server.c index 50a01db3d4..80e479d8a7 100644 --- a/source4/web_server/web_server.c +++ b/source4/web_server/web_server.c @@ -103,7 +103,10 @@ static void websrv_recv(struct stream_connection *conn, uint16_t flags) a blank line) and any post data, as indicated by the content_length */ if (web->input.end_of_headers && - web->input.partial.length == web->input.content_length) { + web->input.partial.length >= web->input.content_length) { + if (web->input.partial.length > web->input.content_length) { + web->input.partial.data[web->input.content_length] = 0; + } EVENT_FD_NOT_READABLE(web->conn->event.fde); http_process_input(web); } -- cgit From b60ef4ee096d471992aac806fb67485ee26d657f Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Thu, 18 Aug 2005 12:19:16 +0000 Subject: r9389: handle errors reading from files in web server bug found by coverity (This used to be commit 1a3229777adf12f8148267af7b33689ebe880ed8) --- source4/web_server/web_server.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) (limited to 'source4/web_server/web_server.c') diff --git a/source4/web_server/web_server.c b/source4/web_server/web_server.c index 80e479d8a7..4962185526 100644 --- a/source4/web_server/web_server.c +++ b/source4/web_server/web_server.c @@ -153,13 +153,14 @@ static void websrv_send(struct stream_connection *conn, uint16_t flags) web->output.nsent = 0; nread = read(web->output.fd, buf, sizeof(buf)); - if (nread == 0) { - close(web->output.fd); - web->output.fd = -1; - } if (nread == -1 && errno == EINTR) { return; } + if (nread <= 0) { + close(web->output.fd); + web->output.fd = -1; + nread = 0; + } web->output.content = data_blob_talloc(web, buf, nread); } -- cgit From fd74e3e1f5eb1a20be773627864415676b0cec21 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Sat, 20 Aug 2005 04:38:35 +0000 Subject: r9409: fix a problem that volker noticed with web page timeouts causing smbd to crash. This is one of the downsides of the fact that the ejs engine is not event driven, resulting in the rendering of each web page being 'semi-async'. We need to protect the web context from the timeout processing until we have unwound the stack back to the point that the 'web' variable representing the page rendering logic won't be used any more. (This used to be commit 97e3c9eaf1a917eb504a2c3414c5d2b64cd4539a) --- source4/web_server/web_server.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) (limited to 'source4/web_server/web_server.c') diff --git a/source4/web_server/web_server.c b/source4/web_server/web_server.c index 4962185526..e85c4f20c7 100644 --- a/source4/web_server/web_server.c +++ b/source4/web_server/web_server.c @@ -52,7 +52,11 @@ static void websrv_timeout(struct event_context *event_context, struct timeval t, void *private) { struct websrv_context *web = talloc_get_type(private, struct websrv_context); - stream_terminate_connection(web->conn, "websrv_timeout: timed out"); + struct stream_connection *conn = web->conn; + web->conn = NULL; + /* TODO: send a message to any running esp context on this connection + to stop running */ + stream_terminate_connection(conn, "websrv_timeout: timed out"); } /* @@ -108,7 +112,17 @@ static void websrv_recv(struct stream_connection *conn, uint16_t flags) web->input.partial.data[web->input.content_length] = 0; } EVENT_FD_NOT_READABLE(web->conn->event.fde); + + /* the reference/unlink code here is quite subtle. It + is needed because the rendering of the web-pages, and + in particular the esp/ejs backend, is semi-async. So + we could well end up in the connection timeout code + while inside http_process_input(), but we must not + destroy the stack variables being used by that + rendering process when we handle the timeout. */ + talloc_reference(web->task, web); http_process_input(web); + talloc_unlink(web->task, web); } return; -- cgit From a599edf04cbdeef9014923ba0d3713b8ff84f266 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Wed, 12 Oct 2005 06:10:23 +0000 Subject: r10913: This patch isn't as big as it looks ... most of the changes are fixes to make all the ldb code compile without warnings on gcc4. Unfortunately That required a lot of casts :-( I have also added the start of an 'operational' module, which will replace the timestamp module, plus add support for some other operational attributes In ldb_msg_*() I added some new utility functions to make the operational module sane, and remove the 'ldb' argument from the ldb_msg_add_*() functions. That argument was only needed back in the early days of ldb when we didn't use the hierarchical talloc and thus needed a place to get the allocation function from. Now its just a pain to pass around everywhere. Also added a ldb_debug_set() function that calls ldb_debug() plus sets the result using ldb_set_errstring(). That saves on some awkward coding in a few places. (This used to be commit f6818daecca95760c12f79fd307770cbe3346f57) --- source4/web_server/web_server.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'source4/web_server/web_server.c') diff --git a/source4/web_server/web_server.c b/source4/web_server/web_server.c index e85c4f20c7..57bb5c62b1 100644 --- a/source4/web_server/web_server.c +++ b/source4/web_server/web_server.c @@ -84,7 +84,7 @@ static void websrv_recv(struct stream_connection *conn, uint16_t flags) b = web->input.partial; while (!web->input.end_of_headers && (p=memchr(b.data, '\n', b.length))) { - const char *line = b.data; + const char *line = (const char *)b.data; *p = 0; if (p != b.data && p[-1] == '\r') { p[-1] = 0; -- cgit From 4ac2be99588b48b0652a524bf12fb1aa9c3f5fbb Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Tue, 7 Mar 2006 11:07:23 +0000 Subject: r13924: Split more prototypes out of include/proto.h + initial work on header file dependencies (This used to be commit 122835876748a3eaf5e8d31ad1abddab9acb8781) --- source4/web_server/web_server.c | 2 ++ 1 file changed, 2 insertions(+) (limited to 'source4/web_server/web_server.c') diff --git a/source4/web_server/web_server.c b/source4/web_server/web_server.c index 57bb5c62b1..e1d418a682 100644 --- a/source4/web_server/web_server.c +++ b/source4/web_server/web_server.c @@ -26,6 +26,8 @@ #include "web_server/web_server.h" #include "lib/events/events.h" #include "system/filesys.h" +#include "system/network.h" +#include "netif/netif.h" #include "lib/tls/tls.h" /* don't allow connections to hang around forever */ -- cgit From 9bd7dd912124d8ffda6f9967d6ba358c16be2aa0 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Tue, 7 Mar 2006 12:08:58 +0000 Subject: r13926: More header splitups. (This used to be commit 930daa9f416ecba1d75b8ad46bb42e336545672f) --- source4/web_server/web_server.c | 1 + 1 file changed, 1 insertion(+) (limited to 'source4/web_server/web_server.c') diff --git a/source4/web_server/web_server.c b/source4/web_server/web_server.c index e1d418a682..bf981ceccf 100644 --- a/source4/web_server/web_server.c +++ b/source4/web_server/web_server.c @@ -23,6 +23,7 @@ #include "includes.h" #include "smbd/service_task.h" #include "smbd/service_stream.h" +#include "smbd/proto.h" #include "web_server/web_server.h" #include "lib/events/events.h" #include "system/filesys.h" -- cgit From c9e5d884fcc7b83f8b15ae2e690d0c3b4be7dea6 Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Tue, 7 Mar 2006 14:13:38 +0000 Subject: r13941: fix the build metze (This used to be commit d9da948b0f7f9698decc140a0a549d27675d14e4) --- source4/web_server/web_server.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'source4/web_server/web_server.c') diff --git a/source4/web_server/web_server.c b/source4/web_server/web_server.c index bf981ceccf..d8e41a1ff1 100644 --- a/source4/web_server/web_server.c +++ b/source4/web_server/web_server.c @@ -23,7 +23,7 @@ #include "includes.h" #include "smbd/service_task.h" #include "smbd/service_stream.h" -#include "smbd/proto.h" +#include "smbd/service.h" #include "web_server/web_server.h" #include "lib/events/events.h" #include "system/filesys.h" -- cgit From 651ca6553edadb2b97339fd3c112fdb6ef6c08bc Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Thu, 9 Mar 2006 17:48:41 +0000 Subject: r14079: I just found the setproctitle library from alt linux:-) - add set_title hook to the process models - use setproctitle library in process_model standard if available - the the title for the task servers and on connections metze (This used to be commit 526f20bbecc9bbd607595637c15fc4001d3f0c70) --- source4/web_server/web_server.c | 2 ++ 1 file changed, 2 insertions(+) (limited to 'source4/web_server/web_server.c') diff --git a/source4/web_server/web_server.c b/source4/web_server/web_server.c index d8e41a1ff1..05c315e4fa 100644 --- a/source4/web_server/web_server.c +++ b/source4/web_server/web_server.c @@ -238,6 +238,8 @@ static void websrv_task_init(struct task_server *task) uint16_t port = lp_web_port(); const struct model_ops *model_ops; + task_server_set_title(task, "task[websrv]"); + /* run the web server as a single process */ model_ops = process_model_byname("single"); if (!model_ops) goto failed; -- cgit From 742c110cd67f4995639822981e8bfcb1f652f2c4 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Tue, 2 May 2006 20:15:47 +0000 Subject: r15400: Move the TLS code behind the socket interface. This reduces caller complexity, because the TLS code is now called just like any other socket. (A new socket context is returned by the tls_init_server and tls_init_client routines). When TLS is not available, the original socket is returned. Andrew Bartlett (This used to be commit 09b2f30dfa7a640f5187b4933204e9680be61497) --- source4/web_server/web_server.c | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) (limited to 'source4/web_server/web_server.c') diff --git a/source4/web_server/web_server.c b/source4/web_server/web_server.c index 05c315e4fa..93d59cc47a 100644 --- a/source4/web_server/web_server.c +++ b/source4/web_server/web_server.c @@ -76,7 +76,7 @@ static void websrv_recv(struct stream_connection *conn, uint16_t flags) DATA_BLOB b; /* not the most efficient http parser ever, but good enough for us */ - status = tls_socket_recv(web->tls, buf, sizeof(buf), &nread); + status = socket_recv(conn->socket, buf, sizeof(buf), &nread); if (NT_STATUS_IS_ERR(status)) goto failed; if (!NT_STATUS_IS_OK(status)) return; @@ -149,7 +149,7 @@ static void websrv_send(struct stream_connection *conn, uint16_t flags) b.data += web->output.nsent; b.length -= web->output.nsent; - status = tls_socket_send(web->tls, &b, &nsent); + status = socket_send(conn->socket, &b, &nsent); if (NT_STATUS_IS_ERR(status)) { stream_terminate_connection(web->conn, "socket_send: failed"); return; @@ -183,8 +183,6 @@ static void websrv_send(struct stream_connection *conn, uint16_t flags) if (web->output.content.length == web->output.nsent && web->output.fd == -1) { - talloc_free(web->tls); - web->tls = NULL; stream_terminate_connection(web->conn, "websrv_send: finished sending"); } } @@ -211,9 +209,10 @@ static void websrv_accept(struct stream_connection *conn) timeval_current_ofs(HTTP_TIMEOUT, 0), websrv_timeout, web); - web->tls = tls_init_server(edata->tls_params, conn->socket, - conn->event.fde, "GPHO", True); - if (web->tls == NULL) goto failed; + /* Overwrite the socket with a (possibly) TLS socket */ + conn->socket = tls_init_server(edata->tls_params, conn->socket, + conn->event.fde, "GPHO"); + if (conn->socket == NULL) goto failed; return; -- cgit From 92acfc07998da1546182579ad12a063f025c9286 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Wed, 24 May 2006 07:35:06 +0000 Subject: r15855: more talloc_set_destructor() typesafe fixes. nearly done ... (This used to be commit 396d82a231b6e3a91178db08b706626d4d4b420c) --- source4/web_server/web_server.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'source4/web_server/web_server.c') diff --git a/source4/web_server/web_server.c b/source4/web_server/web_server.c index 93d59cc47a..7596ca40fc 100644 --- a/source4/web_server/web_server.c +++ b/source4/web_server/web_server.c @@ -37,9 +37,8 @@ /* destroy a web connection */ -static int websrv_destructor(void *ptr) +static int websrv_destructor(struct websrv_context *web) { - struct websrv_context *web = talloc_get_type(ptr, struct websrv_context); if (web->output.fd != -1) { close(web->output.fd); } -- cgit From 84b0eb6a57226b49dc835dda1fa4ed56ebe00037 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Fri, 28 Jul 2006 03:51:20 +0000 Subject: r17286: Simply fail the tls_initialise if we don't have TLS compiled in. Adjust the web_server code to cope with this. Andrew Bartlett (This used to be commit 3043969708edbdab58ee57e2fbffa293b6406813) --- source4/web_server/web_server.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) (limited to 'source4/web_server/web_server.c') diff --git a/source4/web_server/web_server.c b/source4/web_server/web_server.c index 7596ca40fc..5329880d8d 100644 --- a/source4/web_server/web_server.c +++ b/source4/web_server/web_server.c @@ -194,6 +194,7 @@ static void websrv_accept(struct stream_connection *conn) struct task_server *task = talloc_get_type(conn->private, struct task_server); struct esp_data *edata = talloc_get_type(task->private, struct esp_data); struct websrv_context *web; + struct socket_context *tls_socket; web = talloc_zero(conn, struct websrv_context); if (web == NULL) goto failed; @@ -209,9 +210,16 @@ static void websrv_accept(struct stream_connection *conn) websrv_timeout, web); /* Overwrite the socket with a (possibly) TLS socket */ - conn->socket = tls_init_server(edata->tls_params, conn->socket, - conn->event.fde, "GPHO"); - if (conn->socket == NULL) goto failed; + tls_socket = tls_init_server(edata->tls_params, conn->socket, + conn->event.fde, "GPHO"); + /* We might not have TLS, or it might not have initilised */ + if (tls_socket) { + talloc_unlink(conn, conn->socket); + talloc_steal(conn, tls_socket); + conn->socket = tls_socket; + } else { + DEBUG(3, ("TLS not available for web_server connections\n")); + } return; -- cgit From a2eca9174c7803732658a1e6f7e8ed873c4fb6fd Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Thu, 17 Aug 2006 13:37:04 +0000 Subject: r17586: merge lib/netif into lib/socket and use -lnsl -lsocket on the configure check for the interfaces. should fix the build on some old sun boxes metze (This used to be commit f20e251bfd9f1eb7ce5c00739631b1625a2aa467) --- source4/web_server/web_server.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'source4/web_server/web_server.c') diff --git a/source4/web_server/web_server.c b/source4/web_server/web_server.c index 5329880d8d..6264b67e0c 100644 --- a/source4/web_server/web_server.c +++ b/source4/web_server/web_server.c @@ -28,7 +28,7 @@ #include "lib/events/events.h" #include "system/filesys.h" #include "system/network.h" -#include "netif/netif.h" +#include "lib/socket/netif.h" #include "lib/tls/tls.h" /* don't allow connections to hang around forever */ -- cgit From 315f04caa87f64260b2ed6b29bc61de5e6cc1d2a Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Wed, 27 Sep 2006 06:39:56 +0000 Subject: r18944: talloc_reference() can fail... (remove compiler warning) metze (This used to be commit 515f4eb1cef11d8f942aeffc72c9da1bbd4d78cd) --- source4/web_server/web_server.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'source4/web_server/web_server.c') diff --git a/source4/web_server/web_server.c b/source4/web_server/web_server.c index 6264b67e0c..762806c84f 100644 --- a/source4/web_server/web_server.c +++ b/source4/web_server/web_server.c @@ -122,7 +122,7 @@ static void websrv_recv(struct stream_connection *conn, uint16_t flags) while inside http_process_input(), but we must not destroy the stack variables being used by that rendering process when we handle the timeout. */ - talloc_reference(web->task, web); + if (!talloc_reference(web->task, web)) goto failed; http_process_input(web); talloc_unlink(web->task, web); } -- cgit From 46aa292ecff685120b7764cdffa2f7e1e2fd6066 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Tue, 10 Oct 2006 08:55:44 +0000 Subject: r19225: 30 seconds is too short for a Samba4 provision to finish. Make the timeout longer. Andrew Bartlett (This used to be commit cc03ffd0e97f82e4af3f80dc760c5297e2f93d79) --- source4/web_server/web_server.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'source4/web_server/web_server.c') diff --git a/source4/web_server/web_server.c b/source4/web_server/web_server.c index 762806c84f..879256e3a0 100644 --- a/source4/web_server/web_server.c +++ b/source4/web_server/web_server.c @@ -32,7 +32,7 @@ #include "lib/tls/tls.h" /* don't allow connections to hang around forever */ -#define HTTP_TIMEOUT 30 +#define HTTP_TIMEOUT 120 /* destroy a web connection -- cgit From 0479a2f1cbae51fcd8dbdc3c148c808421fb4d25 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Tue, 10 Jul 2007 02:07:03 +0000 Subject: r23792: convert Samba4 to GPLv3 There are still a few tidyups of old FSF addresses to come (in both s3 and s4). More commits soon. (This used to be commit fcf38a38ac691abd0fa51b89dc951a08e89fdafa) --- source4/web_server/web_server.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'source4/web_server/web_server.c') diff --git a/source4/web_server/web_server.c b/source4/web_server/web_server.c index 879256e3a0..a5402a77f7 100644 --- a/source4/web_server/web_server.c +++ b/source4/web_server/web_server.c @@ -7,7 +7,7 @@ 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 - the Free Software Foundation; either version 2 of the License, or + the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, @@ -16,8 +16,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + along with this program. If not, see . */ #include "includes.h" -- cgit From 0b91f3916430d0271eab867675d44c5439de40c2 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Wed, 29 Aug 2007 13:07:03 +0000 Subject: r24780: More work allowing libutil to be used by external users. (This used to be commit 31993cf67b816a184a4a4e92ef8ca2532c797190) --- source4/web_server/web_server.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'source4/web_server/web_server.c') diff --git a/source4/web_server/web_server.c b/source4/web_server/web_server.c index a5402a77f7..f9031433d3 100644 --- a/source4/web_server/web_server.c +++ b/source4/web_server/web_server.c @@ -78,8 +78,8 @@ static void websrv_recv(struct stream_connection *conn, uint16_t flags) if (NT_STATUS_IS_ERR(status)) goto failed; if (!NT_STATUS_IS_OK(status)) return; - status = data_blob_append(web, &web->input.partial, buf, nread); - if (!NT_STATUS_IS_OK(status)) goto failed; + if (!data_blob_append(web, &web->input.partial, buf, nread)) + goto failed; /* parse any lines that are available */ b = web->input.partial; -- cgit From ffeee68e4b72dd94fee57366bd8d38b8c284c3d4 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Sat, 8 Sep 2007 12:42:09 +0000 Subject: r25026: Move param/param.h out of includes.h (This used to be commit abe8349f9b4387961ff3665d8c589d61cd2edf31) --- source4/web_server/web_server.c | 1 + 1 file changed, 1 insertion(+) (limited to 'source4/web_server/web_server.c') diff --git a/source4/web_server/web_server.c b/source4/web_server/web_server.c index f9031433d3..efad8b6512 100644 --- a/source4/web_server/web_server.c +++ b/source4/web_server/web_server.c @@ -29,6 +29,7 @@ #include "system/network.h" #include "lib/socket/netif.h" #include "lib/tls/tls.h" +#include "param/param.h" /* don't allow connections to hang around forever */ #define HTTP_TIMEOUT 120 -- cgit From 98b57d5eb61094a9c88e2f7d90d3e21b7e74e9d8 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Sat, 8 Sep 2007 16:46:30 +0000 Subject: r25035: Fix some more warnings, use service pointer rather than service number in more places. (This used to be commit df9cebcb97e20564359097148665bd519f31bc6f) --- source4/web_server/web_server.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'source4/web_server/web_server.c') diff --git a/source4/web_server/web_server.c b/source4/web_server/web_server.c index efad8b6512..221c792f14 100644 --- a/source4/web_server/web_server.c +++ b/source4/web_server/web_server.c @@ -85,7 +85,7 @@ static void websrv_recv(struct stream_connection *conn, uint16_t flags) /* parse any lines that are available */ b = web->input.partial; while (!web->input.end_of_headers && - (p=memchr(b.data, '\n', b.length))) { + (p=(uint8_t *)memchr(b.data, '\n', b.length))) { const char *line = (const char *)b.data; *p = 0; if (p != b.data && p[-1] == '\r') { -- cgit From 37d53832a4623653f706e77985a79d84bd7c6694 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Fri, 28 Sep 2007 01:17:46 +0000 Subject: r25398: Parse loadparm context to all lp_*() functions. (This used to be commit 3fcc960839c6e5ca4de2c3c042f12f369ac5f238) --- source4/web_server/web_server.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'source4/web_server/web_server.c') diff --git a/source4/web_server/web_server.c b/source4/web_server/web_server.c index 221c792f14..2e80339871 100644 --- a/source4/web_server/web_server.c +++ b/source4/web_server/web_server.c @@ -241,7 +241,7 @@ static const struct stream_server_ops web_stream_ops = { static void websrv_task_init(struct task_server *task) { NTSTATUS status; - uint16_t port = lp_web_port(); + uint16_t port = lp_web_port(global_loadparm); const struct model_ops *model_ops; task_server_set_title(task, "task[websrv]"); @@ -250,7 +250,7 @@ static void websrv_task_init(struct task_server *task) model_ops = process_model_byname("single"); if (!model_ops) goto failed; - if (lp_interfaces() && lp_bind_interfaces_only()) { + if (lp_interfaces(global_loadparm) && lp_bind_interfaces_only(global_loadparm)) { int num_interfaces = iface_count(); int i; for(i = 0; i < num_interfaces; i++) { @@ -264,7 +264,7 @@ static void websrv_task_init(struct task_server *task) } else { status = stream_setup_socket(task->event_ctx, model_ops, &web_stream_ops, - "ipv4", lp_socket_address(), + "ipv4", lp_socket_address(global_loadparm), &port, task); if (!NT_STATUS_IS_OK(status)) goto failed; } -- cgit From f4a1083cf9f64b4d2b65b68942e93861409ea90f Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Sun, 2 Dec 2007 17:09:52 +0100 Subject: r26227: Make loadparm_context part of a server task, move loadparm_contexts further up the call stack. (This used to be commit 0721a07aada6a1fae6dcbd610b8783df57d7bbad) --- source4/web_server/web_server.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'source4/web_server/web_server.c') diff --git a/source4/web_server/web_server.c b/source4/web_server/web_server.c index 2e80339871..3926993334 100644 --- a/source4/web_server/web_server.c +++ b/source4/web_server/web_server.c @@ -241,7 +241,7 @@ static const struct stream_server_ops web_stream_ops = { static void websrv_task_init(struct task_server *task) { NTSTATUS status; - uint16_t port = lp_web_port(global_loadparm); + uint16_t port = lp_web_port(task->lp_ctx); const struct model_ops *model_ops; task_server_set_title(task, "task[websrv]"); @@ -250,7 +250,7 @@ static void websrv_task_init(struct task_server *task) model_ops = process_model_byname("single"); if (!model_ops) goto failed; - if (lp_interfaces(global_loadparm) && lp_bind_interfaces_only(global_loadparm)) { + if (lp_interfaces(task->lp_ctx) && lp_bind_interfaces_only(task->lp_ctx)) { int num_interfaces = iface_count(); int i; for(i = 0; i < num_interfaces; i++) { @@ -264,7 +264,7 @@ static void websrv_task_init(struct task_server *task) } else { status = stream_setup_socket(task->event_ctx, model_ops, &web_stream_ops, - "ipv4", lp_socket_address(global_loadparm), + "ipv4", lp_socket_address(task->lp_ctx), &port, task); if (!NT_STATUS_IS_OK(status)) goto failed; } -- cgit From 291ddf433685ee5c25e172885045a4b60d7bb1ee Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Mon, 3 Dec 2007 00:28:07 +0100 Subject: r26237: Add loadparm context to the server service interface. (This used to be commit 1386c5c92505a950c65411b8af74d703ce023f95) --- source4/web_server/web_server.c | 1 + 1 file changed, 1 insertion(+) (limited to 'source4/web_server/web_server.c') diff --git a/source4/web_server/web_server.c b/source4/web_server/web_server.c index 3926993334..be7b6aabdf 100644 --- a/source4/web_server/web_server.c +++ b/source4/web_server/web_server.c @@ -286,6 +286,7 @@ failed: listening on all configured sockets */ static NTSTATUS websrv_init(struct event_context *event_context, + struct loadparm_context *lp_ctx, const struct model_ops *model_ops) { return task_server_startup(event_context, model_ops, websrv_task_init); -- cgit From 2f5ca872a80ad872ab864061f0c6982d8605393f Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Thu, 6 Dec 2007 16:54:34 +0100 Subject: r26313: Fix more uses of static loadparm. (This used to be commit 6fd0d9d3b75546d08c24c513e05b1843d5777608) --- source4/web_server/web_server.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'source4/web_server/web_server.c') diff --git a/source4/web_server/web_server.c b/source4/web_server/web_server.c index be7b6aabdf..e68b967dfd 100644 --- a/source4/web_server/web_server.c +++ b/source4/web_server/web_server.c @@ -258,14 +258,15 @@ static void websrv_task_init(struct task_server *task) status = stream_setup_socket(task->event_ctx, model_ops, &web_stream_ops, "ipv4", address, - &port, task); + &port, lp_socket_options(task->lp_ctx), + task); if (!NT_STATUS_IS_OK(status)) goto failed; } } else { status = stream_setup_socket(task->event_ctx, model_ops, &web_stream_ops, "ipv4", lp_socket_address(task->lp_ctx), - &port, task); + &port, lp_socket_options(task->lp_ctx), task); if (!NT_STATUS_IS_OK(status)) goto failed; } -- cgit From c5bf20c5fe7eaa04cd11a7ce4f365aa6ffd7b124 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Thu, 6 Dec 2007 23:57:22 +0100 Subject: r26325: Remove use of global_loadparm in netif. (This used to be commit e452cb28594f23add7c00247ed39e8323aea78a6) --- source4/web_server/web_server.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'source4/web_server/web_server.c') diff --git a/source4/web_server/web_server.c b/source4/web_server/web_server.c index e68b967dfd..a8fd9234ae 100644 --- a/source4/web_server/web_server.c +++ b/source4/web_server/web_server.c @@ -251,10 +251,10 @@ static void websrv_task_init(struct task_server *task) if (!model_ops) goto failed; if (lp_interfaces(task->lp_ctx) && lp_bind_interfaces_only(task->lp_ctx)) { - int num_interfaces = iface_count(); + int num_interfaces = iface_count(task->lp_ctx); int i; for(i = 0; i < num_interfaces; i++) { - const char *address = iface_n_ip(i); + const char *address = iface_n_ip(task->lp_ctx, i); status = stream_setup_socket(task->event_ctx, model_ops, &web_stream_ops, "ipv4", address, -- cgit From 6f2252dace1629d7b5c5637b103caa28d2c89b07 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Tue, 11 Dec 2007 22:23:14 +0100 Subject: r26401: Don't cache interfaces context in libnetif. (This used to be commit 9f975417cc66bfd4589da38bfd23731dbe0e6153) --- source4/web_server/web_server.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'source4/web_server/web_server.c') diff --git a/source4/web_server/web_server.c b/source4/web_server/web_server.c index a8fd9234ae..0fdb0bfb4f 100644 --- a/source4/web_server/web_server.c +++ b/source4/web_server/web_server.c @@ -251,10 +251,15 @@ static void websrv_task_init(struct task_server *task) if (!model_ops) goto failed; if (lp_interfaces(task->lp_ctx) && lp_bind_interfaces_only(task->lp_ctx)) { - int num_interfaces = iface_count(task->lp_ctx); + int num_interfaces; int i; + struct interface *ifaces; + + load_interfaces(lp_interfaces(task->lp_ctx), &ifaces); + + num_interfaces = iface_count(ifaces); for(i = 0; i < num_interfaces; i++) { - const char *address = iface_n_ip(task->lp_ctx, i); + const char *address = iface_n_ip(ifaces, i); status = stream_setup_socket(task->event_ctx, model_ops, &web_stream_ops, "ipv4", address, -- cgit From 70f1f33af8e6e82506d0ee9ff6cc7e0923a7d0a1 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Tue, 11 Dec 2007 22:23:20 +0100 Subject: r26402: Require a talloc context in libnetif. (This used to be commit a35e51871bbf1ab33fc316fa59e597b722769c50) --- source4/web_server/web_server.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'source4/web_server/web_server.c') diff --git a/source4/web_server/web_server.c b/source4/web_server/web_server.c index 0fdb0bfb4f..87cab2cc92 100644 --- a/source4/web_server/web_server.c +++ b/source4/web_server/web_server.c @@ -255,7 +255,7 @@ static void websrv_task_init(struct task_server *task) int i; struct interface *ifaces; - load_interfaces(lp_interfaces(task->lp_ctx), &ifaces); + load_interfaces(NULL, lp_interfaces(task->lp_ctx), &ifaces); num_interfaces = iface_count(ifaces); for(i = 0; i < num_interfaces; i++) { @@ -267,6 +267,8 @@ static void websrv_task_init(struct task_server *task) task); if (!NT_STATUS_IS_OK(status)) goto failed; } + + talloc_free(ifaces); } else { status = stream_setup_socket(task->event_ctx, model_ops, &web_stream_ops, -- cgit From df408d056ec03f2abe08ce0ea487e1875b90e7bf Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Sat, 5 Jan 2008 19:03:43 -0600 Subject: r26672: Janitorial: Remove uses of global_loadparm. (This used to be commit 18cd08623eaad7d2cd63b82ea5275d4dfd21cf00) --- source4/web_server/web_server.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'source4/web_server/web_server.c') diff --git a/source4/web_server/web_server.c b/source4/web_server/web_server.c index 87cab2cc92..9ff67f78f3 100644 --- a/source4/web_server/web_server.c +++ b/source4/web_server/web_server.c @@ -260,7 +260,8 @@ static void websrv_task_init(struct task_server *task) num_interfaces = iface_count(ifaces); for(i = 0; i < num_interfaces; i++) { const char *address = iface_n_ip(ifaces, i); - status = stream_setup_socket(task->event_ctx, model_ops, + status = stream_setup_socket(task->event_ctx, + task->lp_ctx, model_ops, &web_stream_ops, "ipv4", address, &port, lp_socket_options(task->lp_ctx), @@ -270,8 +271,8 @@ static void websrv_task_init(struct task_server *task) talloc_free(ifaces); } else { - status = stream_setup_socket(task->event_ctx, model_ops, - &web_stream_ops, + status = stream_setup_socket(task->event_ctx, task->lp_ctx, + model_ops, &web_stream_ops, "ipv4", lp_socket_address(task->lp_ctx), &port, lp_socket_options(task->lp_ctx), task); if (!NT_STATUS_IS_OK(status)) goto failed; @@ -297,7 +298,8 @@ static NTSTATUS websrv_init(struct event_context *event_context, struct loadparm_context *lp_ctx, const struct model_ops *model_ops) { - return task_server_startup(event_context, model_ops, websrv_task_init); + return task_server_startup(event_context, lp_ctx, + model_ops, websrv_task_init); } /* called at smbd startup - register ourselves as a server service */ -- cgit From 23d681caf9c1186999ac676d70a1eb0e8a43e358 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Mon, 4 Feb 2008 17:48:51 +1100 Subject: Rework service init functions to pass down service name. This is needed to change prefork behaviour based on what service is being started. Andrew Bartlett and David Disseldorp (This used to be commit 0d830580e3539c96da3aa6c72fafe6eacd7a74a0) --- source4/web_server/web_server.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'source4/web_server/web_server.c') diff --git a/source4/web_server/web_server.c b/source4/web_server/web_server.c index 9ff67f78f3..bd212cff7d 100644 --- a/source4/web_server/web_server.c +++ b/source4/web_server/web_server.c @@ -298,7 +298,7 @@ static NTSTATUS websrv_init(struct event_context *event_context, struct loadparm_context *lp_ctx, const struct model_ops *model_ops) { - return task_server_startup(event_context, lp_ctx, + return task_server_startup(event_context, lp_ctx, "web", model_ops, websrv_task_init); } -- cgit From 0f8eeb81ec109cde681961614fb690f8373fa9c6 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Mon, 4 Feb 2008 21:58:29 +1100 Subject: Remove useless layer of indirection, where every service called task_service_init() manually. Now this is called from service.c for all services. Andrew Bartlett (This used to be commit 9c9a4731cafd0dcf6c8523a7b06759cd4f14e4db) --- source4/web_server/web_server.c | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) (limited to 'source4/web_server/web_server.c') diff --git a/source4/web_server/web_server.c b/source4/web_server/web_server.c index bd212cff7d..ac83a3384d 100644 --- a/source4/web_server/web_server.c +++ b/source4/web_server/web_server.c @@ -290,20 +290,8 @@ failed: } -/* - called on startup of the web server service It's job is to start - listening on all configured sockets -*/ -static NTSTATUS websrv_init(struct event_context *event_context, - struct loadparm_context *lp_ctx, - const struct model_ops *model_ops) -{ - return task_server_startup(event_context, lp_ctx, "web", - model_ops, websrv_task_init); -} - /* called at smbd startup - register ourselves as a server service */ NTSTATUS server_service_web_init(void) { - return register_server_service("web", websrv_init); + return register_server_service("web", websrv_task_init); } -- cgit