httpd-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Rob Hartill <r...@imdb.com>
Subject Re: [PATCH]: request for harmless mod_include.c patch (fwd)
Date Thu, 15 May 1997 21:48:27 GMT

Doug wrote:
 
> "Roy T. Fielding" <fielding@kiwi.ICS.UCI.EDU> wrote:
> 
> > I would expect it to be disabled on IncludesNoExec.  It doesn't seem
> > to be in the patch.
> 
> Agreed, here's another pseudo patch (Rob!)
> 
> + if (!(allow_options (r) & OPT_INCLUDES)) return DECLINED;


Wasn't sure precisely where you wanted to add that..

   if (!(allow_options (r) & OPT_INCLUDES)) {
       log_printf(r->server,
           "httpd: #perl SSI disallowed by IncludesNoExec in %s", r->filename);
       return DECLINED;
   }

I put it at the start of 'handle_perl' and added some logging info.


The complete patch (including the other earlier changes) is:


Index: mod_include.c
===================================================================
RCS file: /imdb/cvs/apache/src/mod_include.c,v
retrieving revision 1.10
diff -u -r1.10 mod_include.c
--- mod_include.c	1997/05/11 20:40:26	1.10
+++ mod_include.c	1997/05/15 21:45:31
@@ -57,7 +57,24 @@
  * incorporated into the Apache module framework by rst.
  * 
  */
+/* to enable <!--#perl, 
+ * add -DUSE_PERL -I./ and -I$Config{archlibexp}/CORE to EXTRA_CFLAGS
+ *
+ * sub key may be anything a Perl*Handler can be:
+ * subroutine name, package name (defaults to package::handler),
+ * Class->method call or anoymous sub {}
+ *
+ * Child <!--#perl sub="sub {print $$}" --> accessed
+ * <!--#perl sub="sub {print ++$Access::Cnt }" --> times. <br>
+ *
+ * <!--#perl arg="one" sub="mymod::includer" -->
+ *
+ * -Doug MacEachern
+ */
 
+#ifdef USE_PERL
+#include "modules/perl/mod_perl.h"
+#else
 #include "httpd.h"
 #include "http_config.h"
 #include "http_request.h"
@@ -66,6 +83,7 @@
 #include "http_log.h"
 #include "http_main.h"
 #include "util_script.h"
+#endif
 
 #define STARTING_SEQUENCE "<!--#"
 #define ENDING_SEQUENCE "-->"
@@ -710,6 +728,32 @@
         }
     }
 }
+#ifdef USE_PERL
+int handle_perl (FILE *in, request_rec *r, char *error) {
+    char tag[MAX_STRING_LEN];
+    char *tag_val;
+    SV *sub = Nullsv;
+    AV *av  = newAV();
+
+    if (!(allow_options (r) & OPT_INCLUDES)) {
+        log_printf(r->server,
+            "httpd: #perl SSI disallowed by IncludesNoExec in %s", r->filename);
+	return DECLINED;
+    }
+    while(1) {
+	if(!(tag_val = get_tag (r->pool, in, tag, MAX_STRING_LEN, 1))) 
+	    break;
+	if(strnEQ(tag, "sub", 3)) 
+	    sub = newSVpv(tag_val,0);
+	else if(strnEQ(tag, "arg", 3)) 
+	    av_push(av, newSVpv(tag_val,0));	
+	else if(strnEQ(tag,"done", 4))
+	    break;
+    }
+    perl_call_handler(sub, r, av);
+    return OK;
+}
+#endif
 
 /* error and tf must point to a string with room for at 
  * least MAX_STRING_LEN characters 
@@ -1674,6 +1718,10 @@
                 ret=handle_flastmod(f, r, error, timefmt);
             else if(!strcmp(directive,"printenv"))
                 ret=handle_printenv(f, r, error);
+#ifdef USE_PERL
+            else if(!strcmp(directive,"perl")) 
+                ret=handle_perl(f, r, error);
+#endif
             else {
                 log_printf(r->server,
                         "httpd: unknown directive %s in parsed doc %s",



Mime
View raw message