section so we waste less memory for gigantic block lists
(and load them slightly faster). Reported by Franz Schwartau.
file modification timestamps. This makes life harder for attackers
who can leverage browser bugs to send fake Referers and intend to
brute-force edit URLs.
file modification timestamps. This makes life harder for attackers
who can leverage browser bugs to send fake Referers and intend to
brute-force edit URLs.
+- Action settings for multiple patterns in the same section are
+ shared in memory. As a result these sections take up less space
+ (and are loaded slightly faster). Problem reported by Franz Schwartau.
- Host information is gathered outside the main thread so it's less
likely to delay other incoming connections if the host is misconfigured.
- The CGI editor supports the "disable all filters of this type"
- Host information is gathered outside the main thread so it's less
likely to delay other incoming connections if the host is misconfigured.
- The CGI editor supports the "disable all filters of this type"
-const char actions_rcs[] = "$Id: actions.c,v 1.43 2008/03/01 14:00:43 fabiankeil Exp $";
+const char actions_rcs[] = "$Id: actions.c,v 1.44 2008/03/04 18:30:34 fabiankeil Exp $";
/*********************************************************************
*
* File : $Source: /cvsroot/ijbswa/current/actions.c,v $
/*********************************************************************
*
* File : $Source: /cvsroot/ijbswa/current/actions.c,v $
*
* Revisions :
* $Log: actions.c,v $
*
* Revisions :
* $Log: actions.c,v $
+ * Revision 1.44 2008/03/04 18:30:34 fabiankeil
+ * Remove the treat-forbidden-connects-like-blocks action. We now
+ * use the "blocked" page for forbidden CONNECT requests by default.
+ *
* Revision 1.43 2008/03/01 14:00:43 fabiankeil
* Let the block action take the reason for the block
* as argument and show it on the "blocked" page.
* Revision 1.43 2008/03/01 14:00:43 fabiankeil
* Let the block action take the reason for the block
* as argument and show it on the "blocked" page.
+/*********************************************************************
+ *
+ * Function : free_action_spec
+ *
+ * Description : Frees an action_spec and the memory used by it.
+ *
+ * Parameters :
+ * 1 : src = Source to free.
+ *
+ * Returns : N/A
+ *
+ *********************************************************************/
+void free_action_spec(struct action_spec *src)
+{
+ free_action(src);
+ freez(src);
+}
+
/*********************************************************************
*
/*********************************************************************
*
{
next = cur->next;
free_url_spec(cur->url);
{
next = cur->next;
free_url_spec(cur->url);
- free_action(cur->action);
+ if ((next == NULL) || (next->action != cur->action))
+ {
+ /*
+ * As the action settings might be shared,
+ * we can only free them if the current
+ * url pattern is the last one, or if the
+ * next one is using different settings.
+ */
+ free_action_spec(cur->action);
+ }
freez(cur);
cur = next;
}
freez(cur);
cur = next;
}
{
if (!cur_action_used)
{
{
if (!cur_action_used)
{
- free_action(cur_action);
- free(cur_action);
+ free_action_spec(cur_action);
return 1; /* never get here */
}
return 1; /* never get here */
}
- /* Save flags */
- copy_action (perm->action, cur_action);
+ perm->action = cur_action;
+ cur_action_used = 1;
/* Save the URL pattern */
if (create_url_spec(perm->url, buf))
/* Save the URL pattern */
if (create_url_spec(perm->url, buf))
- free_action(cur_action);
- freez(cur_action);
-
+ if (!cur_action_used)
+ {
+ free_action_spec(cur_action);
+ }
free_alias_list(alias_list);
/* the old one is now obsolete */
free_alias_list(alias_list);
/* the old one is now obsolete */
#ifndef PROJECT_H_INCLUDED
#define PROJECT_H_INCLUDED
/** Version string. */
#ifndef PROJECT_H_INCLUDED
#define PROJECT_H_INCLUDED
/** Version string. */
-#define PROJECT_H_VERSION "$Id: project.h,v 1.104 2008/03/04 18:30:40 fabiankeil Exp $"
+#define PROJECT_H_VERSION "$Id: project.h,v 1.105 2008/03/21 11:16:27 fabiankeil Exp $"
/*********************************************************************
*
* File : $Source: /cvsroot/ijbswa/current/project.h,v $
/*********************************************************************
*
* File : $Source: /cvsroot/ijbswa/current/project.h,v $
*
* Revisions :
* $Log: project.h,v $
*
* Revisions :
* $Log: project.h,v $
+ * Revision 1.105 2008/03/21 11:16:27 fabiankeil
+ * Garbage-collect csp->my_ip_addr_str and csp->my_hostname.
+ *
* Revision 1.104 2008/03/04 18:30:40 fabiankeil
* Remove the treat-forbidden-connects-like-blocks action. We now
* use the "blocked" page for forbidden CONNECT requests by default.
* Revision 1.104 2008/03/04 18:30:40 fabiankeil
* Remove the treat-forbidden-connects-like-blocks action. We now
* use the "blocked" page for forbidden CONNECT requests by default.
- * This structure is used to store the actions list.
+ * This structure is used to store action files.
- * It contains a URL pattern, and the chages to the actions.
- * It is a linked list.
+ * It contains an URL or tag pattern, and the changes to
+ * the actions. It's a linked list and should only be
+ * free'd through unload_actions_file() unless there's
+ * only a single entry.
- struct url_spec url[1]; /**< URL pattern. */
+ struct url_spec url[1]; /**< The URL or tag pattern. */
- struct action_spec action[1]; /**< Actions. */
+ struct action_spec *action; /**< Action settings that might be shared with
+ the list entry before or after the current
+ one and can't be free'd willy nilly. */
- struct url_actions * next; /**< Next action in file, or NULL. */
+ struct url_actions *next; /**< Next action section in file, or NULL. */