Roxen.git / server / modules / misc / pathinfo.pike

version» Context lines:

Roxen.git/server/modules/misc/pathinfo.pike:1:   // This is a roxen module. Copyright © 1998 - 2004, Roxen IS.    + #include <module.h>   inherit "module";    - constant cvs_version = "$Id: pathinfo.pike,v 1.19 2004/06/30 16:59:16 mast Exp $"; + constant cvs_version = "$Id: pathinfo.pike,v 1.20 2007/05/16 15:23:41 stewa Exp $";   constant thread_safe = 1;      #ifdef PATHINFO_DEBUG   # define PATHINFO_WERR(X) werror("PATHINFO: "+X+"\n");   #else   # define PATHINFO_WERR(X)   #endif      constant module_type = MODULE_LAST;   constant module_name = "Scripting: Path info support";   constant module_doc = #"\   Support for \"path info\" style URLs, e.g. URLs that got a path like   <tt>/index.html/a/b</tt>, where <tt>/index.html</tt> is an existing   file, but <tt>/index.html/a</tt> and <tt>/index.html/a/b</tt> aren't.   In this case <tt>/index.html</tt> will be fetched, and the rest,   <tt>/a/b</tt> is made available in the RXML variable page.pathinfo.";      /* #define PATHINFO_LINEAR */    -  + array pathlimit = ({ }); +  + void create(Configuration c) { +  defvar("pathlimit", ({ }), "Limit to paths", +  TYPE_STRING_LIST, +  "If specified, path info support will only be active for patsh matching globs provided in this list."); + } +  + void start() { +  pathlimit = query("pathlimit"); + } +    mapping|int last_resort(object id)   { -  +  if(sizeof(pathlimit)) { +  int found_match = 0; +  foreach(pathlimit, string s) { +  if(glob(s, id->not_query)) { +  found_match = 1; +  break; +  } +  } +  if(!found_match) +  return 0; +  }    PATHINFO_WERR(sprintf("Checking %O...", id->not_query));      #if 0    // This kind of recursion detection doesn't work with internal    // redirects. We leave it to the generic loop prevention in    // handle_request et al.    if (id->misc->path_info) {    // Already been here...    PATHINFO_WERR(sprintf("Been here, done that."));    return 0;