From 2cdce8d1aac1e2bf96016a7ccd51071c0e8f4767 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Fri, 27 May 2005 04:37:07 +0000 Subject: r7004: added support for exceptions generated in the esp library. If the OS supports setjmp/longjmp then the exception will generate a error in the web page and the Samba log. If the OS doesn't support setjmp then we will abort. (This used to be commit 2614ace175a51cfb4b1e0e3ca3db405a19f7ab18) --- source4/web_server/http.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) (limited to 'source4/web_server/http.c') diff --git a/source4/web_server/http.c b/source4/web_server/http.c index d9d441f765..6687ab7d16 100644 --- a/source4/web_server/http.c +++ b/source4/web_server/http.c @@ -455,6 +455,28 @@ static void http_setup_arrays(struct esp_state *esp) SETVAR(ESP_REQUEST_OBJ, "SCRIPT_FILENAME", web->input.url); } +#if HAVE_SETJMP_H +/* the esp scripting lirary generates exceptions when + it hits a major error. We need to catch these and + report a internal server error via http +*/ +#include +static jmp_buf http_exception_buf; +static const char *exception_reason; + +void http_exception(const char *reason) +{ + exception_reason = reason; + DEBUG(0,("%s", reason)); + longjmp(http_exception_buf, -1); +} +#else +void http_exception(const char *reason) +{ + DEBUG(0,("%s", reason)); + smb_panic(reason); +} +#endif /* process a esp request @@ -474,6 +496,12 @@ static void esp_request(struct esp_state *esp) return; } +#if HAVE_SETJMP_H + if (setjmp(http_exception_buf) != 0) { + http_error(web, 500, exception_reason); + return; + } +#endif res = espProcessRequest(esp->req, url, buf, &emsg); if (res != 0 && emsg) { http_writeBlock(web, emsg, strlen(emsg)); -- cgit