summaryrefslogtreecommitdiff
path: root/src/html-error.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/html-error.c')
-rw-r--r--src/html-error.c359
1 files changed, 178 insertions, 181 deletions
diff --git a/src/html-error.c b/src/html-error.c
index 1802cde..ac4531b 100644
--- a/src/html-error.c
+++ b/src/html-error.c
@@ -33,77 +33,77 @@
/*
* Add an error number -> filename mapping to the errorpages list.
*/
-#define ERRORNUM_BUFSIZE 8 /* this is more than required */
+#define ERRORNUM_BUFSIZE 8 /* this is more than required */
#define ERRPAGES_BUCKETCOUNT 16
int
-add_new_errorpage(char *filepath, unsigned int errornum)
+add_new_errorpage (char *filepath, unsigned int errornum)
{
- char errornbuf[ERRORNUM_BUFSIZE];
+ char errornbuf[ERRORNUM_BUFSIZE];
- config.errorpages = hashmap_create(ERRPAGES_BUCKETCOUNT);
- if (!config.errorpages)
- return (-1);
+ config.errorpages = hashmap_create (ERRPAGES_BUCKETCOUNT);
+ if (!config.errorpages)
+ return (-1);
- snprintf(errornbuf, ERRORNUM_BUFSIZE, "%u", errornum);
+ snprintf (errornbuf, ERRORNUM_BUFSIZE, "%u", errornum);
- if (hashmap_insert(config.errorpages, errornbuf,
- filepath, strlen(filepath) + 1) < 0)
- return (-1);
+ if (hashmap_insert (config.errorpages, errornbuf,
+ filepath, strlen (filepath) + 1) < 0)
+ return (-1);
- return (0);
+ return (0);
}
/*
* Get the file appropriate for a given error.
*/
static char *
-get_html_file(unsigned int errornum)
+get_html_file (unsigned int errornum)
{
- hashmap_iter result_iter;
- char errornbuf[ERRORNUM_BUFSIZE];
- char *key;
- static char *val;
+ hashmap_iter result_iter;
+ char errornbuf[ERRORNUM_BUFSIZE];
+ char *key;
+ static char *val;
- assert(errornum >= 100 && errornum < 1000);
+ assert (errornum >= 100 && errornum < 1000);
- if (!config.errorpages)
- return (config.errorpage_undef);
+ if (!config.errorpages)
+ return (config.errorpage_undef);
- snprintf(errornbuf, ERRORNUM_BUFSIZE, "%u", errornum);
+ snprintf (errornbuf, ERRORNUM_BUFSIZE, "%u", errornum);
- result_iter = hashmap_find(config.errorpages, errornbuf);
+ result_iter = hashmap_find (config.errorpages, errornbuf);
- if (hashmap_is_end(config.errorpages, result_iter))
- return (config.errorpage_undef);
+ if (hashmap_is_end (config.errorpages, result_iter))
+ return (config.errorpage_undef);
- if (hashmap_return_entry(config.errorpages, result_iter,
- &key, (void **)&val) < 0)
- return (config.errorpage_undef);
+ if (hashmap_return_entry (config.errorpages, result_iter,
+ &key, (void **) &val) < 0)
+ return (config.errorpage_undef);
- return (val);
+ return (val);
}
/*
* Look up the value for a variable.
*/
static char *
-lookup_variable(struct conn_s *connptr, char *varname)
+lookup_variable (struct conn_s *connptr, char *varname)
{
- hashmap_iter result_iter;
- char *key;
- static char *data;
+ hashmap_iter result_iter;
+ char *key;
+ static char *data;
- result_iter = hashmap_find(connptr->error_variables, varname);
+ result_iter = hashmap_find (connptr->error_variables, varname);
- if (hashmap_is_end(connptr->error_variables, result_iter))
- return (NULL);
+ if (hashmap_is_end (connptr->error_variables, result_iter))
+ return (NULL);
- if (hashmap_return_entry(connptr->error_variables, result_iter,
- &key, (void **)&data) < 0)
- return (NULL);
+ if (hashmap_return_entry (connptr->error_variables, result_iter,
+ &key, (void **) &data) < 0)
+ return (NULL);
- return (data);
+ return (data);
}
#define HTML_BUFSIZE 4096
@@ -112,116 +112,113 @@ lookup_variable(struct conn_s *connptr, char *varname)
* Send an already-opened file to the client with variable substitution.
*/
int
-send_html_file(FILE * infile, struct conn_s *connptr)
+send_html_file (FILE * infile, struct conn_s *connptr)
{
- char inbuf[HTML_BUFSIZE], *varstart = NULL, *p;
- char *varval;
- int in_variable = 0, writeret;
-
- while (fgets(inbuf, HTML_BUFSIZE, infile) != NULL) {
- for (p = inbuf; *p; p++) {
- switch (*p) {
- case '}':
- if (in_variable) {
- *p = '\0';
- if (!
- (varval =
- lookup_variable(connptr,
- varstart)))
- varval = "(unknown)";
- writeret =
- write_message(connptr->client_fd,
- "%s", varval);
- if (writeret)
- return (writeret);
- in_variable = 0;
- } else {
- writeret =
- write_message(connptr->client_fd,
- "%c", *p);
- if (writeret)
- return (writeret);
- }
- break;
- case '{':
- /* a {{ will print a single {. If we are NOT
- * already in a { variable, then proceed with
- * setup. If we ARE already in a { variable,
- * this code will fallthrough to the code that
- * just dumps a character to the client fd.
- */
- if (!in_variable) {
- varstart = p + 1;
- in_variable++;
- } else
- in_variable = 0;
- default:
- if (!in_variable) {
- writeret =
- write_message(connptr->client_fd,
- "%c", *p);
- if (writeret)
- return (writeret);
- }
-
- }
- }
- in_variable = 0;
- }
- return (0);
+ char inbuf[HTML_BUFSIZE], *varstart = NULL, *p;
+ char *varval;
+ int in_variable = 0, writeret;
+
+ while (fgets (inbuf, HTML_BUFSIZE, infile) != NULL)
+ {
+ for (p = inbuf; *p; p++)
+ {
+ switch (*p)
+ {
+ case '}':
+ if (in_variable)
+ {
+ *p = '\0';
+ if (!(varval = lookup_variable (connptr, varstart)))
+ varval = "(unknown)";
+ writeret = write_message (connptr->client_fd, "%s", varval);
+ if (writeret)
+ return (writeret);
+ in_variable = 0;
+ }
+ else
+ {
+ writeret = write_message (connptr->client_fd, "%c", *p);
+ if (writeret)
+ return (writeret);
+ }
+ break;
+ case '{':
+ /* a {{ will print a single {. If we are NOT
+ * already in a { variable, then proceed with
+ * setup. If we ARE already in a { variable,
+ * this code will fallthrough to the code that
+ * just dumps a character to the client fd.
+ */
+ if (!in_variable)
+ {
+ varstart = p + 1;
+ in_variable++;
+ }
+ else
+ in_variable = 0;
+ default:
+ if (!in_variable)
+ {
+ writeret = write_message (connptr->client_fd, "%c", *p);
+ if (writeret)
+ return (writeret);
+ }
+
+ }
+ }
+ in_variable = 0;
+ }
+ return (0);
}
int
-send_http_headers(struct conn_s *connptr, int code, char *message)
+send_http_headers (struct conn_s *connptr, int code, char *message)
{
- char *headers =
- "HTTP/1.0 %d %s\r\n"
- "Server: %s/%s\r\n"
- "Content-Type: text/html\r\n" "Connection: close\r\n" "\r\n";
+ char *headers =
+ "HTTP/1.0 %d %s\r\n"
+ "Server: %s/%s\r\n"
+ "Content-Type: text/html\r\n" "Connection: close\r\n" "\r\n";
- return (write_message(connptr->client_fd, headers,
- code, message, PACKAGE, VERSION));
+ return (write_message (connptr->client_fd, headers,
+ code, message, PACKAGE, VERSION));
}
/*
* Display an error to the client.
*/
int
-send_http_error_message(struct conn_s *connptr)
+send_http_error_message (struct conn_s *connptr)
{
- char *error_file;
- FILE *infile;
- int ret;
- char *fallback_error =
- "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n"
- "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1//EN\" \"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\">\n"
- "<html>\n"
- "<head><title>%d %s</title></head>\n"
- "<body>\n"
- "<h1>%s</h1>\n"
- "<p>%s</p>\n"
- "<hr />\n"
- "<p><em>Generated by %s version %s.</em></p>\n"
- "</body>\n"
- "</html>\n";
-
- send_http_headers(connptr, connptr->error_number,
- connptr->error_string);
-
- error_file = get_html_file(connptr->error_number);
- if (!(infile = fopen(error_file, "r"))) {
- char *detail = lookup_variable(connptr, "detail");
- return (write_message(connptr->client_fd, fallback_error,
- connptr->error_number,
- connptr->error_string,
- connptr->error_string,
- detail,
- PACKAGE, VERSION));
- }
-
- ret = send_html_file(infile, connptr);
- fclose(infile);
- return (ret);
+ char *error_file;
+ FILE *infile;
+ int ret;
+ char *fallback_error =
+ "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n"
+ "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1//EN\" \"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\">\n"
+ "<html>\n"
+ "<head><title>%d %s</title></head>\n"
+ "<body>\n"
+ "<h1>%s</h1>\n"
+ "<p>%s</p>\n"
+ "<hr />\n"
+ "<p><em>Generated by %s version %s.</em></p>\n" "</body>\n" "</html>\n";
+
+ send_http_headers (connptr, connptr->error_number, connptr->error_string);
+
+ error_file = get_html_file (connptr->error_number);
+ if (!(infile = fopen (error_file, "r")))
+ {
+ char *detail = lookup_variable (connptr, "detail");
+ return (write_message (connptr->client_fd, fallback_error,
+ connptr->error_number,
+ connptr->error_string,
+ connptr->error_string,
+ detail, PACKAGE, VERSION));
+ }
+
+ ret = send_html_file (infile, connptr);
+ fclose (infile);
+ return (ret);
}
/*
@@ -231,16 +228,14 @@ send_http_error_message(struct conn_s *connptr)
#define ERRVAR_BUCKETCOUNT 16
int
-add_error_variable(struct conn_s *connptr, char *key, char *val)
+add_error_variable (struct conn_s *connptr, char *key, char *val)
{
- if (!connptr->error_variables)
- if (!
- (connptr->error_variables =
- hashmap_create(ERRVAR_BUCKETCOUNT)))
- return (-1);
-
- return hashmap_insert(connptr->error_variables, key, val,
- strlen(val) + 1);
+ if (!connptr->error_variables)
+ if (!(connptr->error_variables = hashmap_create (ERRVAR_BUCKETCOUNT)))
+ return (-1);
+
+ return hashmap_insert (connptr->error_variables, key, val,
+ strlen (val) + 1);
}
#define ADD_VAR_RET(x, y) \
@@ -255,61 +250,63 @@ add_error_variable(struct conn_s *connptr, char *key, char *val)
* Set some standard variables used by all HTML pages
*/
int
-add_standard_vars(struct conn_s *connptr)
+add_standard_vars (struct conn_s *connptr)
{
- char errnobuf[16];
- char timebuf[30];
- time_t global_time;
+ char errnobuf[16];
+ char timebuf[30];
+ time_t global_time;
- snprintf(errnobuf, sizeof errnobuf, "%d", connptr->error_number);
- ADD_VAR_RET("errno", errnobuf);
+ snprintf (errnobuf, sizeof errnobuf, "%d", connptr->error_number);
+ ADD_VAR_RET ("errno", errnobuf);
- ADD_VAR_RET("cause", connptr->error_string);
- ADD_VAR_RET("request", connptr->request_line);
- ADD_VAR_RET("clientip", connptr->client_ip_addr);
- ADD_VAR_RET("clienthost", connptr->client_string_addr);
+ ADD_VAR_RET ("cause", connptr->error_string);
+ ADD_VAR_RET ("request", connptr->request_line);
+ ADD_VAR_RET ("clientip", connptr->client_ip_addr);
+ ADD_VAR_RET ("clienthost", connptr->client_string_addr);
- /* The following value parts are all non-NULL and will
- * trigger warnings in ADD_VAR_RET(), so we use
- * add_error_variable() directly.
- */
+ /* The following value parts are all non-NULL and will
+ * trigger warnings in ADD_VAR_RET(), so we use
+ * add_error_variable() directly.
+ */
- global_time = time(NULL);
- strftime(timebuf, sizeof(timebuf), "%a, %d %b %Y %H:%M:%S GMT",
- gmtime(&global_time));
- add_error_variable(connptr, "date", timebuf);
+ global_time = time (NULL);
+ strftime (timebuf, sizeof (timebuf), "%a, %d %b %Y %H:%M:%S GMT",
+ gmtime (&global_time));
+ add_error_variable (connptr, "date", timebuf);
- add_error_variable(connptr, "website", "http://tinyproxy.banu.com/");
- add_error_variable(connptr, "version", VERSION);
- add_error_variable(connptr, "package", PACKAGE);
+ add_error_variable (connptr, "website", "http://tinyproxy.banu.com/");
+ add_error_variable (connptr, "version", VERSION);
+ add_error_variable (connptr, "package", PACKAGE);
- return (0);
+ return (0);
}
/*
* Add the error information to the conn structure.
*/
int
-indicate_http_error(struct conn_s *connptr, int number, char *message, ...)
+indicate_http_error (struct conn_s *connptr, int number, char *message, ...)
{
- va_list ap;
- char *key, *val;
+ va_list ap;
+ char *key, *val;
- va_start(ap, message);
+ va_start (ap, message);
- while ((key = va_arg(ap, char *))) {
- val = va_arg(ap, char *);
+ while ((key = va_arg (ap, char *)))
+ {
+ val = va_arg (ap, char *);
- if (add_error_variable(connptr, key, val) == -1) {
- va_end(ap);
- return (-1);
- }
- }
+ if (add_error_variable (connptr, key, val) == -1)
+ {
+ va_end (ap);
+ return (-1);
+ }
+ }
- connptr->error_number = number;
- connptr->error_string = safestrdup(message);
+ connptr->error_number = number;
+ connptr->error_string = safestrdup (message);
- va_end(ap);
+ va_end (ap);
- return (add_standard_vars(connptr));
+ return (add_standard_vars (connptr));
}