tis 2012-04-10 klockan 13:33 +0530 skrev Vinayak Samak:
> Thanks Alex for quick replay.
> Definitely I would like to work on this part.
> Please provide me starting point for the same. 
> Whenever I will get time I will work on this and will be in touch with
> squid-dev team for problems/queries.

Another alternative is to add the header via the external acl interface.
Attached is a old forgotten squid-2 patch adding this, should be easy to
forward-port to Squid-3.

Regards
Henrik

diff -ruN squid-2.7.STABLE5/src/cf.data.pre squid-2.7.STABLE5-extaclheader/src/cf.data.pre
--- squid-2.7.STABLE5/src/cf.data.pre	2008-09-25 04:33:37.000000000 +0200
+++ squid-2.7.STABLE5-extaclheader/src/cf.data.pre	2008-12-12 15:38:20.000000000 +0100
@@ -457,6 +457,7 @@
 			(error also understood)
 	  log=		String to be logged in access.log. Available as
 			%ea in logformat specifications
+	  header=	Custom HTTP header(s) to add to the forwarded request.
 
 	If protocol=3.0 (the default) then URL escaping is used to protect
 	each value in both requests and responses.
diff -ruN squid-2.7.STABLE5/src/client_side_rewrite.c squid-2.7.STABLE5-extaclheader/src/client_side_rewrite.c
--- squid-2.7.STABLE5/src/client_side_rewrite.c	2008-07-21 22:18:50.000000000 +0200
+++ squid-2.7.STABLE5-extaclheader/src/client_side_rewrite.c	2008-12-12 15:40:00.000000000 +0100
@@ -137,6 +137,7 @@
 	    new_request->extacl_user = xstrdup(old_request->extacl_user);
 	if (old_request->extacl_passwd)
 	    new_request->extacl_passwd = xstrdup(old_request->extacl_passwd);
+	new_request->custom_header = stringDup(&old_request->custom_header);
 	requestUnlink(old_request);
 	http->request = requestLink(new_request);
     } else {
diff -ruN squid-2.7.STABLE5/src/external_acl.c squid-2.7.STABLE5-extaclheader/src/external_acl.c
--- squid-2.7.STABLE5/src/external_acl.c	2007-05-22 03:02:50.000000000 +0200
+++ squid-2.7.STABLE5-extaclheader/src/external_acl.c	2008-12-12 15:38:20.000000000 +0100
@@ -72,6 +72,7 @@
     char *passwd;
     char *message;
     char *log;
+    char *header;
     external_acl *def;
 };
 
@@ -582,6 +583,8 @@
     }
     if (entry->log)
 	stringReset(&ch->request->extacl_log, entry->log);
+    if (entry->header)
+	stringReset(&request->custom_header, entry->header);
     return result;
 }
 
@@ -813,10 +816,11 @@
     safe_free(entry->user);
     safe_free(entry->message);
     safe_free(entry->log);
+    safe_free(entry->header);
 }
 
 static external_acl_entry *
-external_acl_cache_add(external_acl * def, const char *key, int result, char *user, char *passwd, char *message, char *log)
+external_acl_cache_add(external_acl * def, const char *key, int result, char *user, char *passwd, char *message, char *log, char *header)
 {
     external_acl_entry *entry = hash_lookup(def->cache, key);
     debug(82, 2) ("external_acl_cache_add: Adding '%s' = %d\n", key, result);
@@ -836,6 +840,9 @@
 	safe_free(entry->log);
 	if (log)
 	    entry->log = xstrdup(log);
+	safe_free(entry->header);
+	if (header)
+	    entry->header = xstrdup(header);
 	external_acl_cache_touch(def, entry);
 	return entry;
     }
@@ -855,6 +862,8 @@
 	entry->message = xstrdup(message);
     if (log)
 	entry->log = xstrdup(log);
+    if (header)
+	entry->header = xstrdup(header);
     entry->def = def;
     hash_join(def->cache, &entry->hash);
     dlinkAdd(entry, &entry->lru, &def->lru_list);
@@ -908,6 +917,7 @@
  *   user=        The users name (login)
  *   message=     Message describing the reason
  *   log=         A string to be used in access logging
+ *   header=      Custom headers
  *
  * Other keywords may be added to the protocol later
  *
@@ -930,6 +940,7 @@
     char *passwd = NULL;
     char *message = NULL;
     char *log = NULL;
+    char *header = NULL;
     external_acl_entry *entry = NULL;
 
     debug(82, 2) ("externalAclHandleReply: reply=\"%s\"\n", reply);
@@ -955,6 +966,8 @@
 		    message = value;
 		else if (strcmp(token, "log") == 0)
 		    log = value;
+		else if (strcmp(token, "header") == 0)
+		    header = value;
 		else if (strcmp(token, "password") == 0)
 		    passwd = value;
 		else if (strcmp(token, "passwd") == 0)
@@ -965,7 +978,7 @@
     dlinkDelete(&state->list, &state->def->queue);
     if (cbdataValid(state->def)) {
 	if (reply)
-	    entry = external_acl_cache_add(state->def, state->key, result, user, passwd, message, log);
+	    entry = external_acl_cache_add(state->def, state->key, result, user, passwd, message, log, header);
 	else {
 	    external_acl_entry *oldentry = hash_lookup(state->def->cache, state->key);
 	    if (oldentry)
diff -ruN squid-2.7.STABLE5/src/http.c squid-2.7.STABLE5-extaclheader/src/http.c
--- squid-2.7.STABLE5/src/http.c	2008-09-25 04:33:37.000000000 +0200
+++ squid-2.7.STABLE5-extaclheader/src/http.c	2008-12-12 15:38:20.000000000 +0100
@@ -1415,6 +1415,9 @@
 	httpHeaderClean(&hdr);
 	packerClean(&p);
     }
+    /* append custom headers */
+    if (strLen(orig_request->custom_header))
+	memBufAppend(mb, strBuf(orig_request->custom_header), strLen(orig_request->custom_header));
     /* append header terminator */
     memBufAppend(mb, crlf, 2);
     return mb->size - offset;
diff -ruN squid-2.7.STABLE5/src/HttpRequest.c squid-2.7.STABLE5-extaclheader/src/HttpRequest.c
--- squid-2.7.STABLE5/src/HttpRequest.c	2007-12-13 02:20:48.000000000 +0100
+++ squid-2.7.STABLE5-extaclheader/src/HttpRequest.c	2008-12-12 15:38:20.000000000 +0100
@@ -74,6 +74,7 @@
     if (req->range)
 	httpHdrRangeDestroy(req->range);
     stringClean(&req->extacl_log);
+    stringClean(&req->custom_header);
     if (req->vary) {
 	if (req->etags == &req->vary->etags)
 	    req->etags = NULL;
diff -ruN squid-2.7.STABLE5/src/structs.h squid-2.7.STABLE5-extaclheader/src/structs.h
--- squid-2.7.STABLE5/src/structs.h	2008-09-25 04:33:37.000000000 +0200
+++ squid-2.7.STABLE5-extaclheader/src/structs.h	2008-12-12 15:38:20.000000000 +0100
@@ -1963,6 +1963,7 @@
     void *body_reader_data;
     struct in_addr out_ip;
     String extacl_log;		/* String to be used for access.log purposes */
+    String custom_header;	/* Custom headers to add to the request */
     const char *extacl_user;	/* User name returned by extacl lookup */
     const char *extacl_passwd;	/* Password returned by extacl lookup */
 #if FOLLOW_X_FORWARDED_FOR

Reply via email to