diff --git a/src/mod_trigger_b4_dl.c b/src/mod_trigger_b4_dl.c index 33c6c85e..9526be57 100644 --- a/src/mod_trigger_b4_dl.c +++ b/src/mod_trigger_b4_dl.c @@ -104,14 +104,10 @@ FREE_FUNC(mod_trigger_b4_dl_free) { if (s->download_regex) pcre_free(s->download_regex); #endif #if defined(HAVE_GDBM_H) - if (s->db) { - gdbm_close(s->db); - } + if (s->db) gdbm_close(s->db); #endif #if defined(HAVE_MEMCACHE_H) - if (s->mc) { - mc_free(s->mc); - } + if (s->mc) mc_free(s->mc); #endif free(s); @@ -162,6 +158,7 @@ SETDEFAULTS_FUNC(mod_trigger_b4_dl_set_defaults) { s->trigger_url = buffer_init(); s->deny_url = buffer_init(); s->mc_hosts = array_init(); + s->mc_namespace = buffer_init(); cv[0].destination = s->db_filename; cv[1].destination = s->trigger_url; @@ -332,7 +329,22 @@ URIHANDLER_FUNC(mod_trigger_b4_dl_uri_handler) { mod_trigger_b4_dl_patch_connection(srv, con, p, CONST_BUF_LEN(patch)); } - if (!p->conf.trigger_regex || !p->conf.download_regex || (!p->conf.db && !p->conf.mc)) return HANDLER_GO_ON; + if (!p->conf.trigger_regex || !p->conf.download_regex) return HANDLER_GO_ON; + +# if !defined(HAVE_GDBM_H) && !defined(HAVE_MEMCACHE_H) + return HANDLER_GO_ON; +# elif defined(HAVE_GDBM_H) && defined(HAVE_MEMCACHE_H) + if (!p->conf.db && !p->conf.mc) return HANDLER_GO_ON; + if (p->conf.db && p->conf.mc) { + /* can't decide which one */ + + return HANDLER_GO_ON; + } +# elif defined(HAVE_GDBM_H) + if (!p->conf.db) return HANDLER_GO; +# else + if (!p->conf.mc) return HANDLER_GO; +# endif if (NULL != (ds = (data_string *)array_get_element(con->request.headers, "X-Forwarded-For"))) { /* X-Forwarded-For contains the ip behind the proxy */ @@ -351,8 +363,8 @@ URIHANDLER_FUNC(mod_trigger_b4_dl_uri_handler) { return HANDLER_ERROR; } } else { - if (p->conf.db) { # if defined(HAVE_GDBM_H) + if (p->conf.db) { /* the trigger matched */ datum key, val; @@ -366,9 +378,10 @@ URIHANDLER_FUNC(mod_trigger_b4_dl_uri_handler) { log_error_write(srv, __FILE__, __LINE__, "s", "insert failed"); } + } # endif - } else if (p->conf.mc) { -# if defined(HAVE_MEMCACHE_H) +# if defined(HAVE_MEMCACHE_H) + if (p->conf.mc) { buffer_copy_string_buffer(p->tmp_buf, p->conf.mc_namespace); buffer_append_string(p->tmp_buf, remote_ip); @@ -379,8 +392,8 @@ URIHANDLER_FUNC(mod_trigger_b4_dl_uri_handler) { log_error_write(srv, __FILE__, __LINE__, "s", "insert failed"); } -# endif } +# endif } /* check if URL is a download -> check IP in DB, update timestamp */ @@ -392,11 +405,10 @@ URIHANDLER_FUNC(mod_trigger_b4_dl_uri_handler) { } } else { /* the download uri matched */ - time_t last_hit; - +# if defined(HAVE_GDBM_H) if (p->conf.db) { -# if defined(HAVE_GDBM_H) datum key, val; + time_t last_hit; key.dptr = (char *)remote_ip; key.dsize = strlen(remote_ip); @@ -447,9 +459,11 @@ URIHANDLER_FUNC(mod_trigger_b4_dl_uri_handler) { log_error_write(srv, __FILE__, __LINE__, "s", "insert failed"); } + } # endif - } else if (p->conf.mc) { -# if defined(HAVE_MEMCACHE_H) + +# if defined(HAVE_MEMCACHE_H) + if (p->conf.mc) { void *r; buffer_copy_string_buffer(p->tmp_buf, p->conf.mc_namespace); @@ -482,8 +496,8 @@ URIHANDLER_FUNC(mod_trigger_b4_dl_uri_handler) { log_error_write(srv, __FILE__, __LINE__, "s", "insert failed"); } -# endif } +# endif } #else