- char *url_param;
- char *host = NULL;
- struct map * exports = default_exports(csp, "show-url-info");
-
- if (NULL == (url_param = strdup(lookup(parameters, "url"))) || *url_param == '\0')
- {
- map_block_killer(exports, "url-given");
- map(exports, "url", 1, "", 1);
- }
- else
- {
- char *matches = NULL;
- char *path;
- char *s;
- int port = 80;
- int hits = 0;
- struct file_list *fl;
- struct url_actions *b;
- struct url_spec url[1];
- struct current_action_spec action[1];
-
- host = url_param;
- host += (strncmp(url_param, "http://", 7)) ? 0 : 7;
-
- map(exports, "url", 1, host, 1);
- map(exports, "url-html", 1, html_encode(host), 0);
-
- init_current_action(action);
-
- s = current_action_to_text(action);
- map(exports, "default", 1, s , 0);
-
- if (((fl = csp->actions_list) == NULL) || ((b = fl->f) == NULL))
- {
- map(exports, "matches", 1, "none" , 1);
- map(exports, "final", 1, lookup(exports, "default"), 1);
-
- freez(url_param);
- free_current_action(action);
-
- rsp->body = fill_template(csp, "show-url-info", exports);
- free_map(exports);
-
- return 0;
- }
-
- s = strchr(host, '/');
- if (s != NULL)
- {
- path = strdup(s);
- *s = '\0';
- }
- else
- {
- path = strdup("");
- }
- s = strchr(host, ':');
- if (s != NULL)
- {
- *s++ = '\0';
- port = atoi(s);
- s = NULL;
- }
-
- *url = dsplit(host);
-
- /* if splitting the domain fails, punt */
- if (url->dbuf == NULL)
- {
- map(exports, "matches", 1, "none" , 1);
- map(exports, "final", 1, lookup(exports, "default"), 1);
-
- freez(url_param);
- freez(path);
- free_current_action(action);
-
- rsp->body = fill_template(csp, "show-url-info", exports);
- free_map(exports);
-
- return 0;
- }
-
- for (b = b->next; NULL != b; b = b->next)
- {
- if ((b->url->port == 0) || (b->url->port == port))
- {
- if ((b->url->domain[0] == '\0') || (domaincmp(b->url, url) == 0))
- {
- if ((b->url->path == NULL) ||
-#ifdef REGEX
- (regexec(b->url->preg, path, 0, NULL, 0) == 0)
-#else
- (strncmp(b->url->path, path, b->url->pathlen) == 0)
-#endif
- )
- {
- s = actions_to_text(b->action);
- matches = strsav(matches, "<b>{");
- matches = strsav(matches, s);
- matches = strsav(matches, " }</b><br>\n<code>");
- matches = strsav(matches, b->url->spec);
- matches = strsav(matches, "</code><br>\n<br>\n");
- freez(s);
-
- merge_current_action(action, b->action);
- hits++;
- }
- }
- }
- }