summaryrefslogtreecommitdiffhomepage
path: root/src/htmlerror.c
diff options
context:
space:
mode:
authorRobert James Kaes <rjkaes@users.sourceforge.net>2005-08-15 03:54:31 +0000
committerRobert James Kaes <rjkaes@users.sourceforge.net>2005-08-15 03:54:31 +0000
commitc0299e1868312e623c9b2ec6646cc7d1a5fe0f69 (patch)
tree83ea37f76e53ce502bbd813f7f93ed99d4df9efa /src/htmlerror.c
parent38f0b3a10354cd2297ae173a07ade3acd1aebd9a (diff)
* [Indent] Ran Source Through indent
I re-indented the source code using indent with the following options: indent -kr -bad -bap -nut -i8 -l80 -psl -sob -ss -ncs There are now _no_ tabs in the source files, and all indentation is eight spaces. Lines are 80 characters long, and the procedure type is on it's own line. Read the indent manual for more information about what each option means.
Diffstat (limited to 'src/htmlerror.c')
-rw-r--r--src/htmlerror.c342
1 files changed, 179 insertions, 163 deletions
diff --git a/src/htmlerror.c b/src/htmlerror.c
index d02eae8..afc1e63 100644
--- a/src/htmlerror.c
+++ b/src/htmlerror.c
@@ -1,4 +1,4 @@
-/* $Id: htmlerror.c,v 1.7 2003-08-01 00:14:34 rjkaes Exp $
+/* $Id: htmlerror.c,v 1.8 2005-08-15 03:54:31 rjkaes Exp $
*
* This file contains source code for the handling and display of
* HTML error pages with variable substitution.
@@ -29,73 +29,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) {
- char errornbuf[ERRORNUM_BUFSIZE];
+add_new_errorpage(char *filepath, unsigned int errornum)
+{
+ 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) {
- hashmap_iter result_iter;
- char errornbuf[ERRORNUM_BUFSIZE];
- char *key;
- static char *val;
+static char *
+get_html_file(unsigned int errornum)
+{
+ 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) {
- hashmap_iter result_iter;
- char *key;
- static char *data;
+static char *
+lookup_variable(struct conn_s *connptr, char *varname)
+{
+ 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
@@ -104,66 +108,75 @@ 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) {
- 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);
+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);
}
int
-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";
-
- return(write_message(connptr->client_fd, headers,
- code, message,
- PACKAGE, VERSION));
+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";
+
+ return (write_message(connptr->client_fd, headers,
+ code, message, PACKAGE, VERSION));
}
/*
@@ -172,33 +185,32 @@ send_http_headers(struct conn_s *connptr, int code, char *message) {
int
send_http_error_message(struct conn_s *connptr)
{
- char *error_file;
- FILE *infile;
- int ret;
- char *fallback_error = \
- "<html><head><title>%s</title></head>" \
- "<body><blockquote><i>%s %s</i><br>" \
- "The page you requested was unavailable. The error code is listed " \
- "below. In addition, the HTML file which has been configured as the " \
- "page to be displayed when an error of this type was unavailable, " \
- "with the error code %d (%s). Please contact your administrator." \
- "<center>%s</center>" \
- "</body></html>" \
- "\r\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")))
- return(write_message(connptr->client_fd, fallback_error,
- connptr->error_string,
- PACKAGE, VERSION,
- errno, strerror(errno),
- connptr->error_string));
-
- ret = send_html_file(infile, connptr);
- fclose(infile);
- return(ret);
+ char *error_file;
+ FILE *infile;
+ int ret;
+ char *fallback_error =
+ "<html><head><title>%s</title></head>"
+ "<body><blockquote><i>%s %s</i><br>"
+ "The page you requested was unavailable. The error code is listed "
+ "below. In addition, the HTML file which has been configured as the "
+ "page to be displayed when an error of this type was unavailable, "
+ "with the error code %d (%s). Please contact your administrator."
+ "<center>%s</center>" "</body></html>" "\r\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")))
+ return (write_message(connptr->client_fd, fallback_error,
+ connptr->error_string,
+ PACKAGE, VERSION,
+ errno, strerror(errno),
+ connptr->error_string));
+
+ ret = send_html_file(infile, connptr);
+ fclose(infile);
+ return (ret);
}
/*
@@ -207,18 +219,20 @@ send_http_error_message(struct conn_s *connptr)
#define ERRVAR_BUCKETCOUNT 16
-int
-add_error_variable(struct conn_s *connptr, char *key, char *val)
+int
+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);
+ if (!connptr->error_variables)
+ if (!
+ (connptr->error_variables =
+ hashmap_create(ERRVAR_BUCKETCOUNT)))
+ return (-1);
- if (hashmap_insert(connptr->error_variables, key, val,
- strlen(val) + 1) < 0)
- return(-1);
+ if (hashmap_insert(connptr->error_variables, key, val,
+ strlen(val) + 1) < 0)
+ return (-1);
- return(0);
+ return (0);
}
#define ADD_VAR_RET(x, y) if(y) { if(add_error_variable(connptr, x, y) == -1) return(-1); }
@@ -227,46 +241,48 @@ 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) {
- char timebuf[30];
- time_t global_time = time(NULL);
-
- strftime(timebuf, sizeof(timebuf), "%a, %d %b %Y %H:%M:%S GMT",
- gmtime(&global_time));
-
- ADD_VAR_RET("request", connptr->request_line);
- ADD_VAR_RET("cause", connptr->error_string);
- ADD_VAR_RET("clientip", connptr->client_ip_addr);
- ADD_VAR_RET("clienthost", connptr->client_string_addr);
- ADD_VAR_RET("version", VERSION);
- ADD_VAR_RET("package", PACKAGE);
- ADD_VAR_RET("date", timebuf);
- return(0);
+add_standard_vars(struct conn_s *connptr)
+{
+ char timebuf[30];
+ time_t global_time = time(NULL);
+
+ strftime(timebuf, sizeof(timebuf), "%a, %d %b %Y %H:%M:%S GMT",
+ gmtime(&global_time));
+
+ ADD_VAR_RET("request", connptr->request_line);
+ ADD_VAR_RET("cause", connptr->error_string);
+ ADD_VAR_RET("clientip", connptr->client_ip_addr);
+ ADD_VAR_RET("clienthost", connptr->client_string_addr);
+ ADD_VAR_RET("version", VERSION);
+ ADD_VAR_RET("package", PACKAGE);
+ ADD_VAR_RET("date", timebuf);
+ 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));
}