-const char cgi_rcs[] = "$Id: cgi.c,v 1.59 2002/04/05 15:51:51 oes Exp $";
+const char cgi_rcs[] = "$Id: cgi.c,v 1.60 2002/04/08 20:50:25 swa Exp $";
/*********************************************************************
*
* File : $Source: /cvsroot/ijbswa/current/cgi.c,v $
*
* Revisions :
* $Log: cgi.c,v $
+ * Revision 1.60 2002/04/08 20:50:25 swa
+ * fixed JB spelling
+ *
* Revision 1.59 2002/04/05 15:51:51 oes
* - added send-stylesheet CGI
* - bugfix: error-pages now get correct request protocol
"<p>Privoxy encountered an error while processing your request:</p>\r\n"
"<p><b>Could not load template file <code>";
static const char body_suffix[] =
- "</code></b></p>\r\n"
+ "</code> or one of it's included components.</b></p>\r\n"
"<p>Please contact your proxy administrator.</p>\r\n"
- "<p>If you are the proxy administrator, please put the required file "
+ "<p>If you are the proxy administrator, please put the required file(s)"
"in the <code><i>(confdir)</i>/templates</code> directory. The "
"location of the <code><i>(confdir)</i></code> directory "
"is specified in the main Privoxy <code>config</code> "
*
* Description : CGI support function that loads a given HTML
* template from the confdir, ignoring comment
- * lines.
+ * lines and following #include statements up to
+ * a depth of 1.
*
* Parameters :
* 1 : csp = Current client state (buffers, headers, etc...)
* 2 : template_ptr = Destination for pointer to loaded
* template text.
* 3 : template = name of the HTML template to be used
+ * 4 : recursive = Flag set if this function calls itself
+ * following an #include statament
*
* Returns : JB_ERR_OK on success
* JB_ERR_MEMORY on out-of-memory error.
*
*********************************************************************/
jb_err template_load(struct client_state *csp, char **template_ptr,
- const char *templatename)
+ const char *templatename, int recursive)
{
+ jb_err err;
char *templates_dir_path;
char *full_path;
char *file_buffer;
+ char *included_module;
FILE *fp;
char buf[BUFFER_SIZE];
free(full_path);
/*
- * Read the file, ignoring comments.
+ * Read the file, ignoring comments, and honring #include
+ * statements, unless we're already called recursively.
*
* FIXME: The comment handling could break with lines >BUFFER_SIZE long.
* This is unlikely in practise.
*/
while (fgets(buf, BUFFER_SIZE, fp))
{
+ if (!recursive && !strncmp(buf, "#include ", 9))
+ {
+ if (JB_ERR_OK != (err = template_load(csp, &included_module, chomp(buf + 9), 1)))
+ {
+ free(file_buffer);
+ return err;
+ }
+
+ if (string_append(&file_buffer, included_module))
+ {
+ fclose(fp);
+ free(included_module);
+ return JB_ERR_MEMORY;
+ }
+
+ free(included_module);
+ continue;
+ }
+
/* skip lines starting with '#' */
- if(*buf == '#')
+ if (*buf == '#')
{
continue;
}
assert(exports);
assert(rsp);
- err = template_load(csp, &rsp->body, templatename);
+ err = template_load(csp, &rsp->body, templatename, 0);
if (err == JB_ERR_FILE)
{
free_map(exports);