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