-const char parsers_rcs[] = "$Id: parsers.c,v 1.8 2001/05/27 22:17:04 oes Exp $";
+const char parsers_rcs[] = "$Id: parsers.c,v 1.10 2001/05/29 09:50:24 jongfoster Exp $";
/*********************************************************************
*
* File : $Source: /cvsroot/ijbswa/current/parsers.c,v $
*
* Revisions :
* $Log: parsers.c,v $
+ * Revision 1.10 2001/05/29 09:50:24 jongfoster
+ * Unified blocklist/imagelist/permissionslist.
+ * File format is still under discussion, but the internal changes
+ * are (mostly) done.
+ *
+ * Also modified interceptor behaviour:
+ * - We now intercept all URLs beginning with one of the following
+ * prefixes (and *only* these prefixes):
+ * * http://i.j.b/
+ * * http://ijbswa.sf.net/config/
+ * * http://ijbswa.sourceforge.net/config/
+ * - New interceptors "home page" - go to http://i.j.b/ to see it.
+ * - Internal changes so that intercepted and fast redirect pages
+ * are not replaced with an image.
+ * - Interceptors now have the option to send a binary page direct
+ * to the client. (i.e. ijb-send-banner uses this)
+ * - Implemented show-url-info interceptor. (Which is why I needed
+ * the above interceptors changes - a typical URL is
+ * "http://i.j.b/show-url-info?url=www.somesite.com/banner.gif".
+ * The previous mechanism would not have intercepted that, and
+ * if it had been intercepted then it then it would have replaced
+ * it with an image.)
+ *
+ * Revision 1.9 2001/05/28 17:26:33 jongfoster
+ * Fixing segfault if last header was crunched.
+ * Fixing Windows build (snprintf() is _snprintf() under Win32, but we
+ * can use the cross-platform sprintf() instead.)
+ *
* Revision 1.8 2001/05/27 22:17:04 oes
*
* - re_process_buffer no longer writes the modified buffer
#ifdef TRUST_FILES
{ "ij-untrusted-url", 15, ij_untrusted_url },
#endif /* def TRUST_FILES */
+ { "show-url-info", 13, ijb_show_url_info },
{ NULL, 0, NULL }
};
*
* Function : content_type
*
- * Description : Is this a text/* or javascript MIME Type?
+ * Description : Is this a text/.* or javascript MIME Type?
*
* Parameters :
* 1 : v = ignored
strclean(s, FORCE_PREFIX);
#endif /* def FORCE_LOAD */
+#ifdef TRUST_FILES\r
csp->referrer = strdup(s);
+#endif /* def TRUST_FILES */\r
+
+ /*
+ * Check permissionsfile. If we have allowed this site to get the
+ * referer, then send it and we're done.
+ */
+ if (csp->permissions & PERMIT_REFERER)
+ {
+ return(strdup(s));
+ }
- if (csp->config->referrer == NULL)
+ /*
+ * Check configfile. Are we blocking referer?
+ */
+ if ( (csp->config->referrer == NULL)
+ || (*csp->config->referrer == '@') )
{
log_error(LOG_LEVEL_HEADER, "crunch!");
return(NULL);
}
+ /*
+ * Check configfile. Are we always sending referer?
+ */
if (*csp->config->referrer == '.')
{
return(strdup(s));
}
- if (*csp->config->referrer == '@')
- {
- if (csp->permissions & PERMIT_COOKIE_READ)
- {
- return(strdup(s));
- }
- else
- {
- log_error(LOG_LEVEL_HEADER, "crunch!");
- return(NULL);
- }
- }
-
/*
* New option § or L: Forge a referer as http://[hostname:port of REQUEST]/
* to fool stupid checks for in-site links
*/
-
if (*csp->config->referrer == '§' || *csp->config->referrer == 'L')
{
- if (csp->permissions & PERMIT_COOKIE_READ)
- {
- return(strdup(s));
- }
- else
- {
- log_error(LOG_LEVEL_HEADER, "crunch+forge!");
- s = strsav(NULL, "Referer: ");
- s = strsav(s, "http://");
- s = strsav(s, csp->http->hostport);
- s = strsav(s, "/");
- return(s);
- }
+ log_error(LOG_LEVEL_HEADER, "crunch+forge!");
+ s = strsav(NULL, "Referer: ");
+ s = strsav(s, "http://");
+ s = strsav(s, csp->http->hostport);
+ s = strsav(s, "/");
+ return(s);
}
+ /*
+ * We have a specific (fixed) referer we want to send.
+ */
+
log_error(LOG_LEVEL_HEADER, "modified");
s = strsav( NULL, "Referer: " );
if (*csp->config->uagent == '@')
{
- if (csp->permissions & PERMIT_COOKIE_READ)
+ if (csp->permissions & PERMIT_USER_AGENT)
{
return(strdup(s));
}
if (*csp->config->uagent == '@')
{
- if (csp->permissions & PERMIT_COOKIE_READ)
+ if (csp->permissions & PERMIT_USER_AGENT)
{
return(strdup(s));
}