After some tests I created this updated patch.
With it squidguard is running with squid3 version 3.4.8.

Ciao,
Joo
Package:     squidguard
Subject:     fix for working (only) with squid 3.4 and higher
Author:      Joachim Wiedorn <joodebian at joonet.de>
Origin:      other, http://bugs.squid-cache.org/show_bug.cgi?id=3978
Bug-Debian:  https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=772831
Forwarded:   yes
Last-Update: 2014-12-22

Incorrectly use of Squid helper protocol (old squid-2.5 protocol).
This bugfix let it work together with squid3 v3.4 and higher. Pay
attention that with this patch squidguard don't work with squid 3.3
and lower anymore!
---

diff -urN s13/src/main.c s14/src/main.c
--- s13/src/main.c	2014-12-11 18:10:03.943372692 +0100
+++ s14/src/main.c	2014-12-23 23:07:49.583732080 +0100
@@ -185,7 +185,7 @@
 	sgReloadConfig();
       }
       if(failsafe_mode) {
-	puts("");
+	puts("ERR message=\"squidGuard failsafe mode\"");
 	fflush(stdout);
 	if(sig_hup){
           sgReloadConfig();
@@ -194,7 +194,7 @@
       }
       if(parseLine(buf,&squidInfo) != 1){
 	sgLogError("ERROR: Error parsing squid line: %s",buf);
-	puts("");
+	puts("BH message=\"squidGuard error parsing squid line\"");
       }
         else {
 	src = Source;
@@ -206,14 +206,14 @@
 	  acl = sgAclCheckSource(src);
 	  if((redirect = sgAclAccess(src,acl,&squidInfo)) == NULL){
 	    if(src == NULL || src->cont_search == 0){
-	      puts(""); 
+	      puts("ERR");
 	      break;
 	    } else
 	      if(src->next != NULL){
 		src = src->next;
 		continue;
 	      } else {
-		puts("");
+		puts("ERR");
 		break;
 	      }
 	  } else {
@@ -225,9 +225,11 @@
 	      squidInfo.ident[0] = '-';
 	      squidInfo.ident[1] = '\0';
 	    }
-	    fprintf(stdout,"%s %s/%s %s %s\n",redirect,squidInfo.src,
-		    squidInfo.srcDomain,squidInfo.ident,
-		    squidInfo.method);
+           if (isdigit(redirect[0]) && isdigit(redirect[1]) && isdigit(redirect[2]) && redirect[3]==':') {
+             fprintf(stdout,"OK status=%c%c%c url=\"%s\"\n", redirect[0], redirect[1], redirect[2], &redirect[4]);
+           } else
+             fprintf(stdout,"OK rewrite-url=\"%s\"\n",redirect);
+
             /* sgLogDebug("DEBUG: %s %s/%s %s %s\n",redirect,squidInfo.src,squidInfo.srcDomain,squidInfo.ident,squidInfo.method);  */
 	    break;
 	  }
diff -urN s13/src/main.c.in s14/src/main.c.in
--- s13/src/main.c.in	2011-10-01 20:49:00.000000000 +0200
+++ s14/src/main.c.in	2014-12-11 18:19:26.775347885 +0100
@@ -185,7 +185,7 @@
 	sgReloadConfig();
       }
       if(failsafe_mode) {
-	puts("");
+	puts("ERR message=\"squidGuard failsafe mode\"");
 	fflush(stdout);
 	if(sig_hup){
           sgReloadConfig();
@@ -194,7 +194,7 @@
       }
       if(parseLine(buf,&squidInfo) != 1){
 	sgLogError("ERROR: Error parsing squid line: %s",buf);
-	puts("");
+	puts("BH message=\"squidGuard error parsing squid line\"");
       }
         else {
 	src = Source;
@@ -206,14 +206,14 @@
 	  acl = sgAclCheckSource(src);
 	  if((redirect = sgAclAccess(src,acl,&squidInfo)) == NULL){
 	    if(src == NULL || src->cont_search == 0){
-	      puts(""); 
+	      puts("ERR");
 	      break;
 	    } else
 	      if(src->next != NULL){
 		src = src->next;
 		continue;
 	      } else {
-		puts("");
+		puts("ERR");
 		break;
 	      }
 	  } else {
@@ -225,9 +225,11 @@
 	      squidInfo.ident[0] = '-';
 	      squidInfo.ident[1] = '\0';
 	    }
-	    fprintf(stdout,"%s %s/%s %s %s\n",redirect,squidInfo.src,
-		    squidInfo.srcDomain,squidInfo.ident,
-		    squidInfo.method);
+           if (isdigit(redirect[0]) && isdigit(redirect[1]) && isdigit(redirect[2]) && redirect[3]==':') {
+             fprintf(stdout,"OK status=%c%c%c url=\"%s\"\n", redirect[0], redirect[1], redirect[2], &redirect[4]);
+           } else
+             fprintf(stdout,"OK rewrite-url=\"%s\"\n",redirect);
+
             /* sgLogDebug("DEBUG: %s %s/%s %s %s\n",redirect,squidInfo.src,squidInfo.srcDomain,squidInfo.ident,squidInfo.method);  */
 	    break;
 	  }
diff -urN s13/src/sgDiv.c s14/src/sgDiv.c
--- s13/src/sgDiv.c	2011-10-01 20:49:00.000000000 +0200
+++ s14/src/sgDiv.c	2014-12-11 18:19:26.775347885 +0100
@@ -782,7 +782,7 @@
   }
   sgLogError("ERROR: Going into emergency mode");
   while(fgets(buf, MAX_BUF, stdin) != NULL){
-    puts("");
+    puts("ERR");
     fflush(stdout);
   }
   sgLogError("ERROR: Ending emergency mode, stdin empty");
diff -urN s13/src/sgDiv.c.in s14/src/sgDiv.c.in
--- s13/src/sgDiv.c.in	2014-12-11 18:10:26.551870993 +0100
+++ s14/src/sgDiv.c.in	2014-12-11 18:19:26.775347885 +0100
@@ -784,7 +784,7 @@
   }
   sgLogError("ERROR: Going into emergency mode");
   while(fgets(buf, MAX_BUF, stdin) != NULL){
-    puts("");
+    puts("ERR");
     fflush(stdout);
   }
   sgLogError("ERROR: Ending emergency mode, stdin empty");

Attachment: signature.asc
Description: PGP signature

Reply via email to