Amos Jeffries wrote:
This adds some demo/ debug url_rewrite helpers to the squid bundle.
Two fake helpers one in C++ format, one in shell script.

Neither perform re-write, but can be used to create debug logs of
traffic sent to the re-writer.

Best to attach it though.


Amos
=== modified file 'CREDITS'
--- CREDITS	2009-06-20 06:50:37 +0000
+++ CREDITS	2009-07-11 09:38:22 +0000
@@ -391,8 +391,9 @@
 include/IPAddress.h lib/IPAddress.cc:
 include/rfc3596.h lib/rfc3596.cc:
 src/ICMPv6.h src/ICMPv6.cc:
+helpers/url_rewrite/fake/ fake.h, fake.cc, url_fake_rewrite.sh:
 
- This code is copyright (C) 2007 by Treehouse Networks Ltd
+ This code is copyright (C) 2007-2009 by Treehouse Networks Ltd
  of New Zealand. It is published and Licensed as an extension of
  squid under the same conditions as the main squid application.
 

=== modified file 'compat/compat.h'
--- compat/compat.h	2009-04-07 13:51:57 +0000
+++ compat/compat.h	2009-07-11 03:23:11 +0000
@@ -74,10 +74,14 @@
 #include "compat/stdvarargs.h"
 #include "compat/assert.h"
 
+
 /*****************************************************/
 /* component-specific portabilities                  */
 /*****************************************************/
 
+/* helper debugging requires some hacks to be clean */
+#include "compat/helper_debug.h"
+
 /* Valgrind API macros changed between two versions squid supports */
 #include "compat/valgrind.h"
 

=== added file 'compat/helper_debug.h'
--- compat/helper_debug.h	1970-01-01 00:00:00 +0000
+++ compat/helper_debug.h	2009-07-11 05:17:46 +0000
@@ -0,0 +1,45 @@
+#ifndef SQUID_CONFIG_H
+#include "config.h"
+#endif
+
+#ifndef COMPAT_HELPER_DEBUG_H
+#define COMPAT_HELPER_DEBUG_H
+
+/*
+ * A debug method for use of external helpers.
+ * It shunts the debug messages down stderr for logging by Squid
+ * of display to the user instead of corrupting the stdout data stream.
+ */
+
+#if HAVE_STDIO_H
+#include <stdio.h>
+#endif
+#if HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+/* Debugging stuff */
+
+/* the macro overload style is really a gcc-ism */
+#ifdef __GNUC__
+
+SQUIDCEXTERN int debug_enabled;
+
+#define helper_debug(X...) \
+                     if (debug_enabled) { \
+                         fprintf(stderr, "%s(%d): pid=%ld :", __FILE__, __LINE__, (long)getpid() ); \
+                         fprintf(stderr,X); \
+                     }
+
+#else /* __GNUC__ */
+
+/* TODO: non-GCC compilers can't do the above macro define yet. */
+inline void
+helper_debug(char *format,...)
+{
+    ; // nothing to do.
+}
+#endif
+
+
+#endif /* COMPAT_HELPER_DEBUG_H */

=== modified file 'configure.in'
--- configure.in	2009-07-09 10:27:25 +0000
+++ configure.in	2009-07-11 04:32:04 +0000
@@ -1854,6 +1854,48 @@
 fi
 AC_SUBST(EXTERNAL_ACL_HELPERS)
 
+dnl Select url_rewrite helpers to build
+URL_REWRITE_HELPERS=all
+AC_ARG_ENABLE(url-rewrite-helpers,
+  AC_HELP_STRING([--enable-url-rewrite-helpers="list of helpers"],
+                 [This option selects which url_rewrite helpers to
+                  build and install as part of the normal build
+                  process. For a list of available helpers see the
+                  helpers/url_rewrite directory.]),
+[ case "$enableval" in
+  yes)
+	URL_REWRITE_HELPERS=all
+	;;
+  no)
+	URL_REWRITE_HELPERS=""
+	;;
+  *)
+ 	URL_REWRITE_HELPERS="`echo $enableval| sed -e 's/,/ /g;s/  */ /g'`"
+	;;
+  esac
+])
+if test "$URL_REWRITE_HELPERS" = "all" ; then
+	URL_REWRITE_HELPERS=""
+	for dir in $srcdir/helpers/url_rewrite/*; do
+	    helper="`basename $dir`"
+	    if test -f $dir/config.test && sh $dir/config.test "$@"; then
+		URL_REWRITE_HELPERS="$URL_REWRITE_HELPERS $helper"
+	    fi
+	done
+fi
+if test -n "$URL_REWRITE_HELPERS"; then
+    for helper in $URL_REWRITE_HELPERS; do
+	if test -f $srcdir/helpers/url_rewrite/$helper/Makefile.in; then
+		:
+	else
+		AC_MSG_ERROR(url_rewrite helper $helper does not exist)
+	fi
+    done
+    AC_MSG_NOTICE([url_rewrite helpers built: $URL_REWRITE_HELPERS])
+fi
+AC_SUBST(URL_REWRITE_HELPERS)
+
+
 AC_ARG_WITH(valgrind-debug,
   AC_HELP_STRING([--with-valgrind-debug],
                  [Include debug instrumentation for use with valgrind]),
@@ -3915,6 +3957,8 @@
 	helpers/external_acl/wbinfo_group/Makefile \
 	helpers/external_acl/mswin_ad_group/Makefile \
 	helpers/external_acl/mswin_lm_group/Makefile \
+	helpers/url_rewrite/Makefile \
+	helpers/url_rewrite/fake/Makefile \
 	tools/Makefile
 ])
 

=== modified file 'helpers/ntlm_auth/smb_lm/ntlm_smb_lm_auth.c'
--- helpers/ntlm_auth/smb_lm/ntlm_smb_lm_auth.c	2009-04-27 12:05:38 +0000
+++ helpers/ntlm_auth/smb_lm/ntlm_smb_lm_auth.c	2009-07-11 09:16:21 +0000
@@ -155,7 +155,7 @@
             my_program_name, my_program_name);
 }
 
-char debug_enabled=0;
+int debug_enabled=0;
 
 void
 process_options(int argc, char *argv[])

=== modified file 'helpers/ntlm_auth/smb_lm/ntlm_smb_lm_auth.h'
--- helpers/ntlm_auth/smb_lm/ntlm_smb_lm_auth.h	2008-10-26 12:49:21 +0000
+++ helpers/ntlm_auth/smb_lm/ntlm_smb_lm_auth.h	2009-07-11 09:14:59 +0000
@@ -45,13 +45,13 @@
 
 
 /* Debugging stuff */
-
+#ifndef debug /* already provided */
 #ifdef __GNUC__			/* this is really a gcc-ism */
 #ifdef DEBUG
 #include <stdio.h>
 #include <unistd.h>
 static const char *__foo;
-extern char debug_enabled;
+extern int debug_enabled;
 #define debug(X...) if (debug_enabled) { \
                     fprintf(stderr,"ntlm-auth[%ld](%s:%d): ", (long)getpid(), \
                     ((__foo=strrchr(__FILE__,'/'))==NULL?__FILE__:__foo+1),\
@@ -65,9 +65,8 @@
 debug(char *format,...)
 {
 }
-
 #endif
-
+#endif /* debug already defined */
 
 /* A couple of harmless helper macros */
 #define SEND(X) debug("sending '%s' to squid\n",X); printf(X "\n");

=== added directory 'helpers/url_rewrite'
=== added file 'helpers/url_rewrite/Makefile.am'
--- helpers/url_rewrite/Makefile.am	1970-01-01 00:00:00 +0000
+++ helpers/url_rewrite/Makefile.am	2009-07-11 02:47:12 +0000
@@ -0,0 +1,3 @@
+
+DIST_SUBDIRS	= fake
+SUBDIRS		= @URL_REWRITE_HELPERS@

=== added directory 'helpers/url_rewrite/fake'
=== added file 'helpers/url_rewrite/fake/Makefile.am'
--- helpers/url_rewrite/fake/Makefile.am	1970-01-01 00:00:00 +0000
+++ helpers/url_rewrite/fake/Makefile.am	2009-07-11 03:56:47 +0000
@@ -0,0 +1,6 @@
+include $(top_srcdir)/src/Common.am
+ 
+libexec_PROGRAMS = url_fake_rewrite url_fake_rewrite.sh
+
+url_fake_rewrite_SOURCES = fake.cc
+url_fake_rewrite_LDADD = $(COMPAT_LIBS)

=== added file 'helpers/url_rewrite/fake/config.test'
--- helpers/url_rewrite/fake/config.test	1970-01-01 00:00:00 +0000
+++ helpers/url_rewrite/fake/config.test	2009-07-11 02:43:38 +0000
@@ -0,0 +1,2 @@
+#!/bin/sh
+exit 0

=== added file 'helpers/url_rewrite/fake/fake.cc'
--- helpers/url_rewrite/fake/fake.cc	1970-01-01 00:00:00 +0000
+++ helpers/url_rewrite/fake/fake.cc	2009-07-11 09:38:04 +0000
@@ -0,0 +1,109 @@
+/*
+ * AUTHOR: Amos Jeffries <[email protected]>
+ *
+ * Example url re-writer program for Squid.
+ *
+ * This code gets the url and returns it. No re-writing is done.
+ * It is intended for testing use and as a base for further implementation.
+ *
+ *
+ * This code is copyright (C) 2009 by Treehouse Networks Ltd
+ * of New Zealand. It is published and Licensed as an extension of
+ * squid under the same conditions as the main squid application.
+ */
+
+#include "config.h"
+
+#define BUFFER_SIZE 10240
+
+/**
+ * options:
+ * -d enable debugging.
+ * -h interface help.
+ */
+char *my_program_name = NULL;
+int concurrent_detected = -1;
+
+
+static void
+usage(void)
+{
+    fprintf(stderr,
+            "Usage: %s [-d] [-v] [-h]\n"
+            " -d  enable debugging.\n"
+            " -h  this message\n\n",
+            my_program_name);
+}
+
+static void
+process_options(int argc, char *argv[])
+{
+    int opt, had_error = 0;
+
+    opterr = 0;
+    while (-1 != (opt = getopt(argc, argv, "hd"))) {
+        switch (opt) {
+        case 'd':
+            debug_enabled = 1;
+            break;
+        case 'h':
+            usage();
+            exit(0);
+        case '?':
+            opt = optopt;
+            /* fall thru to default */
+        default:
+            fprintf(stderr, "unknown option: -%c. Exiting\n", opt);
+            usage();
+            had_error = 1;
+        }
+    }
+    if (had_error)
+        exit(1);
+}
+
+bool
+detect_concurrent(const char *)
+{
+    // TODO: scan the char* input and see if it is 100% numeric.
+    //   if so, enable concurrent support IDs.
+}
+
+int
+main(int argc, char *argv[])
+{
+    char buf[BUFFER_SIZE];
+    int buflen = 0;
+    char helper_command[3];
+
+    setbuf(stdout, NULL);
+    setbuf(stderr, NULL);
+
+    my_program_name = argv[0];
+
+    process_options(argc, argv);
+
+    helper_debug("%s build " __DATE__ ", " __TIME__ " starting up...\n", my_program_name);
+
+    while (fgets(buf, BUFFER_SIZE, stdin) != NULL) {
+
+        if ((p = strchr(buf, '\n')) != NULL) {
+            *p = '\0';		/* strip \n */
+            buflen = p - buf;   /* length is known already */
+        }
+        else
+            buflen = strlen(buf);   /* keep this so we only scan the buffer for \0 once per loop */
+
+/* TODO: later.
+        if (concurrent_detected < 0)
+            detect_concurrent(buf);
+// */
+
+        helper_debug("Got %d bytes '%s' from Squid\n", buflen, buf);
+
+        /* send 'no-change' result back to Squid */
+        fprintf(stdout,"\n");
+    }
+    helper_debug("%s build " __DATE__ ", " __TIME__ " shutting down...\n", my_program_name);
+    exit(0);
+}

=== added file 'helpers/url_rewrite/fake/fake.h'
=== added file 'helpers/url_rewrite/fake/url_fake_rewrite.sh'
--- helpers/url_rewrite/fake/url_fake_rewrite.sh	1970-01-01 00:00:00 +0000
+++ helpers/url_rewrite/fake/url_fake_rewrite.sh	2009-07-11 09:37:53 +0000
@@ -0,0 +1,28 @@
+#!/bin/sh
+#
+# Author: Amos Jeffries <[email protected]>
+#
+# This code is copyright (C) 2009 by Treehouse Networks Ltd
+# of New Zealand. It is published and Licensed as an extension of
+# squid under the same conditions as the main squid application.
+#
+
+if test "${1}" = "-d" ; then
+	echo "Usage: $0 [-h] [-d logfile]"
+	echo "  -h           Help: this help text"
+	echo "  -d logfile   Debug: log all data received to the named file"
+	exit 1
+fi
+
+DEBUG=0
+if test "${1}" = "-d" ; then
+	DEBUG=1
+	LOG="${2}"
+fi
+
+while read url rest; do
+	if test ${DEBUG} ; then
+		echo "$url $rest" >>${LOG}
+	fi
+	echo  # blank line for no change, or replace with another URL.
+done

=== modified file 'src/Common.am'
--- src/Common.am	2009-02-19 20:28:48 +0000
+++ src/Common.am	2009-07-11 02:46:33 +0000
@@ -23,3 +23,7 @@
 ## make all compiled sources depend on generated files
 ## XXX: Do we really need this? Does auto-dependency tracking work?
 $(OBJS): $(top_srcdir)/include/version.h $(top_builddir)/include/autoconf.h
+
+COMPAT_LIBS = \
+	-L$(top_builddir)/lib -lmiscutil \
+	$(top_builddir)/compat/libcompat.la

Reply via email to