diff -rubwBEN SQUID_3_2/helpers/external_acl/kerberos_ldap_group/kerberos_ldap_group.cc squid-3.2-mm/helpers/external_acl/kerberos_ldap_group/kerberos_ldap_group.cc
--- SQUID_3_2/helpers/external_acl/kerberos_ldap_group/kerberos_ldap_group.cc	2012-02-05 14:03:45.300209000 +0000
+++ squid-3.2-mm/helpers/external_acl/kerberos_ldap_group/kerberos_ldap_group.cc	2012-08-26 14:12:48.548554237 +0100
@@ -32,6 +32,7 @@
 #include "squid.h"
 #include "helpers/defines.h"
 #include "util.h"
+#include "rfc1738.h"
 
 #ifdef HAVE_LDAP
 
@@ -226,10 +227,11 @@
 main(int argc, char *const argv[])
 {
     char buf[6400];
-    char *user, *domain;
+    char *user, *domain, *group;
+    char *up=NULL, *dp=NULL, *np=NULL;
     char *nuser, *nuser8 = NULL, *netbios;
     char *c;
-    int opt;
+    int opt, gopt;
     struct main_args margs;
 
     setbuf(stdout, NULL);
@@ -335,10 +337,16 @@
 
     debug((char *) "%s| %s: INFO: Starting version %s\n", LogTime(), PROGRAM, KERBEROS_LDAP_GROUP_VERSION);
     if (create_gd(&margs)) {
+	gopt = 0;
+	if ( margs.glist != NULL ) {
         debug((char *) "%s| %s: FATAL: Error in group list: %s\n", LogTime(), PROGRAM, margs.glist ? margs.glist : "NULL");
         SEND_ERR("");
         clean_args(&margs);
         exit(1);
+        } else {
+            debug((char *) "%s| %s: INFO: no group list given expect it from stdin\n", LogTime(), PROGRAM);
+	    gopt = 1;
+	}
     }
     if (create_nd(&margs)) {
         debug((char *) "%s| %s: FATAL: Error in netbios list: %s\n", LogTime(), PROGRAM, margs.nlist ? margs.nlist : "NULL");
@@ -370,12 +378,18 @@
         if (c) {
             *c = '\0';
         } else {
-            SEND_ERR("");
+            SEND_ERR("Invalid input. CR missing");
             debug((char *) "%s| %s: ERR\n", LogTime(), PROGRAM);
             continue;
         }
 
-        user = buf;
+        user = strtok(buf, " \n");
+        if (!user) {
+                debug((char *) "%s| %s: INFO: No Username given\n", LogTime(), PROGRAM);
+		SEND_ERR("Invalid request. No Username");
+		continue;
+	}
+	rfc1738_unescape(user);
         nuser = strchr(user, '\\');
         if (!nuser)
             nuser8 = strstr(user, "%5C");
@@ -391,33 +405,62 @@
                 nuser = nuser8 + 3;
             }
             netbios = user;
+	    up = xstrdup(rfc1738_escape(nuser));
+	    np = xstrdup(rfc1738_escape(netbios));
             if (debug_enabled)
-                debug((char *) "%s| %s: INFO: Got User: %s Netbios Name: %s\n", LogTime(), PROGRAM, nuser, netbios);
+                debug((char *) "%s| %s: INFO: Got User: %s Netbios Name: %s\n", LogTime(), PROGRAM, up, np);
             else
-                log((char *) "%s| %s: INFO: Got User: %s Netbios Name: %s\n", LogTime(), PROGRAM, nuser, netbios);
+                log((char *) "%s| %s: INFO: Got User: %s Netbios Name: %s\n", LogTime(), PROGRAM, up, np);
             domain = get_netbios_name(&margs, netbios);
             user = nuser;
+	    xfree(up);
+	    xfree(np);
         } else if (domain) {
             strup(domain);
             *domain = '\0';
             domain++;
         }
+	up = xstrdup(rfc1738_escape(user));
+	if (domain)
+	    dp = xstrdup(rfc1738_escape(domain));
         if (!domain && margs.ddomain) {
             domain = xstrdup(margs.ddomain);
             if (debug_enabled)
-                debug((char *) "%s| %s: INFO: Got User: %s set default domain: %s\n", LogTime(), PROGRAM, user, domain);
+                debug((char *) "%s| %s: INFO: Got User: %s set default domain: %s\n", LogTime(), PROGRAM, up, dp);
             else
-                log((char *) "%s| %s: INFO: Got User: %s set default domain: %s\n", LogTime(), PROGRAM, user, domain);
+                log((char *) "%s| %s: INFO: Got User: %s set default domain: %s\n", LogTime(), PROGRAM, up, dp);
         }
         if (debug_enabled)
-            debug((char *) "%s| %s: INFO: Got User: %s Domain: %s\n", LogTime(), PROGRAM, user, domain ? domain : "NULL");
+            debug((char *) "%s| %s: INFO: Got User: %s Domain: %s\n", LogTime(), PROGRAM, up, domain ? dp : "NULL");
         else
-            log((char *) "%s| %s: INFO: Got User: %s Domain: %s\n", LogTime(), PROGRAM, user, domain ? domain : "NULL");
+            log((char *) "%s| %s: INFO: Got User: %s Domain: %s\n", LogTime(), PROGRAM, up, domain ? dp : "NULL");
 
+	xfree(up);
+	xfree(dp);
         if (!strcmp(user, "QQ") && domain && !strcmp(domain, "QQ")) {
             clean_args(&margs);
             exit(-1);
         }
+	if ( gopt && user ) {
+	    if ((group = strtok(NULL, " \n")) != NULL) {
+                debug((char *) "%s| %s: INFO: Read group list %s from stdin\n", LogTime(), PROGRAM,group);
+	        rfc1738_unescape(group);
+	        if (margs.groups) {
+	            clean_gd(margs.groups);
+		    margs.groups = NULL;
+	        }
+	        margs.glist = xstrdup(group);
+	        if (create_gd(&margs)) {
+	            SEND_ERR("Error in group list");
+	            debug((char *) "%s| %s: FATAL: Error in group list: %s\n", LogTime(), PROGRAM, margs.glist ? margs.glist : "NULL");
+		    continue;
+	        }
+	    } else {
+                SEND_ERR("No group list received on stdin");
+                debug((char *) "%s| %s: FATAL: No group list received on stdin\n", LogTime(), PROGRAM);
+		continue;
+	    }
+	} 
         if (check_memberof(&margs, user, domain)) {
             SEND_OK("");
             debug((char *) "%s| %s: DEBUG: OK\n", LogTime(), PROGRAM);
diff -rubwBEN SQUID_3_2/helpers/external_acl/kerberos_ldap_group/Makefile.am squid-3.2-mm/helpers/external_acl/kerberos_ldap_group/Makefile.am
--- SQUID_3_2/helpers/external_acl/kerberos_ldap_group/Makefile.am	2012-01-21 21:17:56.000000000 +0000
+++ squid-3.2-mm/helpers/external_acl/kerberos_ldap_group/Makefile.am	2012-08-26 14:12:10.957554096 +0100
@@ -24,6 +24,7 @@
 
 ext_kerberos_ldap_group_acl_LDFLAGS =
 ext_kerberos_ldap_group_acl_LDADD = \
+	$(top_builddir)/lib/libmiscencoding.la \
 	$(COMPAT_LIB) \
 	$(LDAPLIB) \
 	$(LBERLIB) \
diff -rubwBEN SQUID_3_2/helpers/negotiate_auth/kerberos/negotiate_kerberos_auth.cc squid-3.2-mm/helpers/negotiate_auth/kerberos/negotiate_kerberos_auth.cc
--- SQUID_3_2/helpers/negotiate_auth/kerberos/negotiate_kerberos_auth.cc	2012-02-05 14:03:45.300209000 +0000
+++ squid-3.2-mm/helpers/negotiate_auth/kerberos/negotiate_kerberos_auth.cc	2012-08-26 14:13:39.255554748 +0100
@@ -30,6 +30,7 @@
  * Hosted at http://sourceforge.net/projects/squidkerbauth
  */
 #include "squid.h"
+#include "rfc1738.h"
 #include "compat/getaddrinfo.h"
 #include "compat/getnameinfo.h"
 
@@ -461,10 +462,10 @@
                 *p = '\0';
             }
             fprintf(stdout, "AF %s %s\n", token, user);
-            debug((char *) "%s| %s: DEBUG: AF %s %s\n", LogTime(), PROGRAM, token, user);
+            debug((char *) "%s| %s: DEBUG: AF %s %s\n", LogTime(), PROGRAM, token, rfc1738_escape(user));
             if (log)
                 fprintf(stderr, "%s| %s: INFO: User %s authenticated\n", LogTime(),
-                        PROGRAM, user);
+                        PROGRAM, rfc1738_escape(user));
             goto cleanup;
         } else {
             if (check_gss_err(major_status, minor_status, "gss_accept_sec_context()", log))
@@ -496,10 +497,10 @@
                 *p = '\0';
             }
             fprintf(stdout, "AF %s %s\n", "AA==", user);
-            debug((char *) "%s| %s: DEBUG: AF %s %s\n", LogTime(), PROGRAM, "AA==", user);
+            debug((char *) "%s| %s: DEBUG: AF %s %s\n", LogTime(), PROGRAM, "AA==", rfc1738_escape(user));
             if (log)
                 fprintf(stderr, "%s| %s: INFO: User %s authenticated\n", LogTime(),
-                        PROGRAM, user);
+                        PROGRAM, rfc1738_escape(user));
 
         }
 cleanup:
