[PATCH] Allow tagging requests with server address and/or port
[email protected] Sun, 24 Apr 2016 19:48:15 +0200
| Newsgroups | gmane.comp.web.privoxy.devel |
|---|---|
| Message-ID | <[email protected]> |
This is a message in Mime Format. If you see this, your mail reader does not support this format.
--=_31baa9857ada06e268bee3d7d3c4c713
Content-Type: multipart/alternative;
boundary="=_427b82f7a7cf68848c2dec3b6b64cf8f"
Content-Transfer-Encoding: 7bit
--=_427b82f7a7cf68848c2dec3b6b64cf8f
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
Hi,Please find attached (in-line and as attachment) a patch which allows=
totag a client's request with the port and/or the ip-address of the pri=
voxyserver which handles the request.Example use case:privoxy listens on=
two addresses, e.g. localhost:8118 and localhost:9119.By tagging the re=
quest withThis is for example useful to distinguish request made through=
differenthosts/ports.Example:---- user.filter ----CLIENT-HEADER-TAGGER:=
tag-server-ports@^\w*\s+.*\s+HTTP/\d\.\d\s*@TAG-SERVERPORT: $serverport=
@DCLIENT-HEADER-TAGGER: tag-server-addrs@^\w*\s+.*\s+HTTP/\d\.\d\s*@TAG-=
SERVERADDR: $serveraddr@D---- user.filter -------- user.action ----# Tag=
every request with the server port{+client-header-tagger{tag-server-por=
t}}/# Fun only for those connections through 9119{+filter{fun}}TAG:TAG-S=
ERVERPORT: 9119---- user.action ----While we are at it. I propose adding=
CLIENT-HEADER-TAGGER for all'special' substitutions ($origin, $url, $ho=
st, $path), not only for$origin.The patches, sure, needs some polishing=
(and I'm willing to help, note I'm not subscribed). In particular the s=
pots marked with FIXME. I alsotried to find all spots where the ne=
w introduced variablesserver_port_str, ... have to be freed, but I might=
have missed some.The naming of the newly introduced variables is up to=
discussion. Feelfree to change them.The patch itself is tested only on=
a Linux box, but with bothconfigurations: with and without HAVE_RFC2553=
defined.Finally, in case it matters:Patch released under GNU General Pu=
blic License as published by the FreeSoftware Foundation; either version=
2 of the License, or (at youroption) any later version.Kind regardsdiff=
--git a/filters.c b/filters.cindex 245a9ce..e8b395b 100644--- a/filters=
.c+++ b/filters.c@@ -926,6 +926,8 @@ pcrs_job *compile_dynamic_pcrs_job_=
list(const struct client_state *csp, const st &nb=
sp; {"path", csp->http->path, 1}, &nb=
sp; {"host", csp->http->host,&=
nbsp; 1}, {"origin", csp->ip_addr=
_str, 1},+ {"serverport", csp->se=
rver_port_str, 1},+ {"serveraddr", c=
sp->server_ip_addr_str, 1}, {NULL=
, NULL,  =
; 1} };@@ -1762,6 +1764,=
8 @@ static void set_privoxy_variables(const struct client_state *csp)&n=
bsp; { "PRIVOXY_PATH", csp->=
;http->path }, { "PRIVOXY_H=
OST", csp->http->host }, =
{ "PRIVOXY_ORIGIN", csp->ip_addr_str },+ &nbs=
p; { "PRIVOXY_SERVERPORT", csp->server_port_str, 1}=
,+ { "PRIVOXY_SERVERADDR", csp->s=
erver_ip_addr_str, 1}, }; for (i =3D=
0; i < SZ(env); i++)diff --git a/jbsockets.c b/jbsockets.cindex 2338=
423..7e7be77 100644--- a/jbsockets.c+++ b/jbsockets.c@@ -1348,6 +1348,78=
@@ int accept_connection(struct client_state * csp, jb_socket fds[])&nb=
sp; csp->ip_addr_long =3D ntohl(client.sin_addr.s_addr);&=
nbsp;#endif /* def HAVE_RFC2553 */++ /* Get the name/IP of t=
he server which accepted the client and+ * store these=
in client_state.+ */+#ifdef HAVE_RFC2553+ =
struct sockaddr_storage server_sin;+#else+ struct sockaddr_=
in server_sin;+#endif /* def HAVE_RFC2553 */+#if defined(_WIN32) || defi=
ned(__OS2__) || defined(AMIGA)+ /* Wierdness - fix a warning=
. */+ int s_length;+#else+ socklen_t s_length;+#=
endif+ s_length =3D sizeof(server_sin);++ /* Res=
olve socket (a file descriptor) to sockaddr_* */+ if (getsoc=
kname(fd, (struct sockaddr *)&server_sin, &s_length) =3D=3D -1)+=
{+ log_error(LOG_LEVEL_ERROR,=
"Can not determine server socket for "+ &n=
bsp; "accepted connection.");+ =
/* FIXME free csp->ip_addr_str? */+ }+ else+=
else+ {+ /* get t=
he server port as number and as string */+ =
struct sockaddr_in *server_sin_in =3D (struct sockaddr_in *)&server=
_sin;+#ifndef _WIN32+ if (sizeof(server_si=
n_in->sin_port) =3D=3D sizeof(short))+#endif /* ndef _WIN32 */+ =
{+ &nb=
sp; /* FIXME: Unnecessary conversation of integers? */+  =
; csp->server_port_num =3D (int) ntohs(=
server_sin_in->sin_port);+ }+#ifndef _W=
IN32+ else+ =
{+ /* FIXME: Unnecessar=
y conversation of integers? */+  =
; csp->server_port_num =3D (int) ntohl(server_sin_in->sin_po=
rt);+ }+#endif /* ndef _WIN32 */+ &nb=
sp; char servnam[6];+ re=
tval =3D snprintf(servnam, sizeof(servnam), "%d", csp->server_port_nu=
m);+ if ((-1 =3D=3D retval) || (sizeof(ser=
vnam) <=3D retval))+ {+ &nbs=
p; log_error(LOG_LEVEL_ERROR,+ =
"Port number (%d)=
ASCII decimal representation doesn't fit into 6 bytes",+ &nb=
sp; csp->server_port_=
num);+ /* FIXME free csp->i=
p_addr_str? */+ }+ =
/* FIXME unecessary copying? */+ cs=
p->server_port_str =3D strdup(servnam);++ &nbs=
p; /* Get the server name or IP as string and as sockaddr_storage/long.=
*/+#ifdef HAVE_RFC2553+ csp->server_tc=
p_addr =3D server_sin;+ csp->server_ip_=
addr_str =3D malloc_or_die(NI_MAXHOST);+ r=
etval =3D getnameinfo((struct sockaddr *) &server_sin, s_length,+&nb=
sp; csp->=
server_ip_addr_str, NI_MAXHOST, NULL, 0, NI_NUMERICHOST);+ &n=
bsp; if (!csp->server_ip_addr_str || retval)+ =
{+ lo=
g_error(LOG_LEVEL_ERROR, "Can not save csp->server_ip_addr_str: %s",+=
(csp-=
>server_ip_addr_str) ? gai_strerror(retval) : "Insuffcient memory");+=
freez(csp->server_ip=
_addr_str);+ }+#else+ &nb=
sp; csp->server_ip_addr_str =3D strdup(inet_ntoa(server_s=
in.sin_addr));+ csp->server_ip_addr_lon=
g =3D ntohl(server_sin.sin_addr.s_addr);+#endif /* def HAVE_RFC2553 */+&=
nbsp; } /* -END- if (getsockname(...) =3D=3D -1) */+ &n=
bsp; return 1; }diff --git a/jcc.c b/jcc.cindex d8e785a..b97cc0b 10=
0644--- a/jcc.c+++ b/jcc.c@@ -4038,6 +4038,8 @@ static void listen_loop(=
void) &=
nbsp; "Connection from %s on socket %d dropped due to ACL", csp->ip_a=
ddr_str, csp->cfd); &n=
bsp; close_socket(csp->cfd);  =
; freez(csp->ip_addr_str);+ =
freez(csp->server_port_str);+ &nb=
sp; freez(csp->server_ip_addr_str); &nbs=
p; freez(csp_list);  =
; continue; &=
nbsp; }@@ -4053,6 +4055,8 @@ static void listen_loop(void)&n=
bsp; s=
trlen(TOO_MANY_CONNECTIONS_RESPONSE)); &nbs=
p; close_socket(csp->cfd); &=
nbsp; freez(csp->ip_addr_str);+ &n=
bsp; freez(csp->server_port_str);+ =
; freez(csp->server_ip_addr=
_str); freez(csp_l=
ist); continue;&nb=
sp; }diff --git a/loaders.c b/loaders.cind=
ex fd3db36..8968895 100644--- a/loaders.c+++ b/loaders.c@@ -182,6 +182,8=
@@ unsigned int sweep(void) &n=
bsp; last_active->next =3D client_list->next; &nb=
sp; freez(csp->ip_addr_str);+&nbs=
p; freez(csp->server_port_s=
tr);+ freez(csp->serv=
er_ip_addr_str); f=
reez(csp->client_iob->buf); &nb=
sp; freez(csp->iob->buf);  =
; freez(csp->error_message);diff --git a/proj=
ect.h b/project.hindex 0d23ef3..6daf178 100644--- a/project.h+++ b/proje=
ct.h@@ -924,6 +924,31 @@ struct client_state unsigned=
long ip_addr_long; #endif /* def HAVE_RFC2553 */+ /**=
The port on which the privoxy server which accepted the+ &nb=
sp; client's connection.+  =
; As a number. */+ int server_port_num;+ /=
** The port on which the privoxy server which accepted the+ &=
nbsp; client's connection.+ &nb=
sp; As a string. */+ char *server_port_str;+ &nbs=
p; /** The IP address oft he privoxy server which accepted the+ &nb=
sp; client's connection.+  =
; As a string. */+ char *server_ip_addr_str;+#if=
def HAVE_RFC2553+ /** The TCP address oft he privoxy server=
which accepted the+ client's connec=
tion.+ As a sockaddr. */+  =
; struct sockaddr_storage server_tcp_addr;+#else+ /** The IP=
address oft he privoxy server which accepted the+ &nbs=
p; client's connection.+ =
As a number. */+ unsigned long server_ip_addr_long;+#endif=
/* def HAVE_RFC2553 */++ /** The URL that was request=
ed */ struct http_request http[1];
--=_427b82f7a7cf68848c2dec3b6b64cf8f
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
Hi,<br><br>Please find attached (in-line and as attachment) a patch whic=
h allows to<br>tag a client's request with the port and/or the ip-addres=
s of the privoxy<br>server which handles the request.<br><br>Example use=
case:<br><br>privoxy listens on two addresses, e.g. localhost:8118 and=
localhost:9119.<br>By tagging the request with<br><br>This is for examp=
le useful to distinguish request made through different<br>hosts/ports.<=
br><br>Example:<br><br>---- user.filter ----<br>CLIENT-HEADER-TAGGER: ta=
g-server-port<br><br>s@^\w*\s+.*\s+HTTP/\d\.\d\s*@TAG-SERVERPORT: $serve=
rport@D<br><br>CLIENT-HEADER-TAGGER: tag-server-addr<br><br>s@^\w*\s+.*\=
s+HTTP/\d\.\d\s*@TAG-SERVERADDR: $serveraddr@D<br>---- user.filter ----<=
br><br>---- user.action ----<br># Tag every request with the server port=
<br>{+client-header-tagger{tag-server-port}}<br>/<br><br># Fun only for=
those connections through 9119<br>{+filter{fun}}<br>TAG:TAG-SERVERPORT:=
9119<br>---- user.action ----<br><br>While we are at it. I propose addi=
ng CLIENT-HEADER-TAGGER for all<br>'special' substitutions ($origin, $ur=
l, $host, $path), not only for<br>$origin.<br><br>The patches, sure, nee=
ds some polishing (and I'm willing to help, note <br>I'm not subscribed)=
. In particular the spots marked with FIXME. I also<br>tried to fi=
nd all spots where the new introduced variables<br>server_port_str, ...=
have to be freed, but I might have missed some.<br><br><br>The naming o=
f the newly introduced variables is up to discussion. Feel<br>free to ch=
ange them.<br><br>The patch itself is tested only on a Linux box, but wi=
th both<br>configurations: with and without HAVE_RFC2553 defined.<br><br=
><br>Finally, in case it matters:<br>Patch released under GNU General Pu=
blic License as published by the Free<br>Software Foundation; either ver=
sion 2 of the License, or (at your<br>option) any later version.<br><br>=
Kind regards<br><br><br>diff --git a/filters.c b/filters.c<br>index 245a=
9ce..e8b395b 100644<br>--- a/filters.c<br>+++ b/filters.c<br>@@ -926,6 +=
926,8 @@ pcrs_job *compile_dynamic_pcrs_job_list(const struct client_sta=
te *csp, const st<br> {"path", =
csp->http->path, 1},<br>  =
; {"host", csp->http->host, 1},<br> &=
nbsp; {"origin", csp->ip_addr_str, 1},<br>+&n=
bsp; {"serverport", csp->server_port_st=
r, 1},<br>+ {"serveraddr", csp->s=
erver_ip_addr_str, 1},<br> {NULL,&nb=
sp; NULL, &nb=
sp; 1}<br> };<br><br>@@ -1762,=
6 +1764,8 @@ static void set_privoxy_variables(const struct client_state=
*csp)<br> { "PRIVOXY_PATH", &n=
bsp; csp->http->path },<br> &nb=
sp; { "PRIVOXY_HOST", csp->http->host },<br>&nbs=
p; { "PRIVOXY_ORIGIN", csp->ip_addr_str=
},<br>+ { "PRIVOXY_SERVERPORT", csp=
->server_port_str, 1},<br>+ { "PRIVOXY_=
SERVERADDR", csp->server_ip_addr_str, 1},<br> =
};<br><br> for (i =3D 0; i < SZ(env); i++)<br>diff=
--git a/jbsockets.c b/jbsockets.c<br>index 2338423..7e7be77 100644<br>-=
-- a/jbsockets.c<br>+++ b/jbsockets.c<br>@@ -1348,6 +1348,78 @@ int acce=
pt_connection(struct client_state * csp, jb_socket fds[])<br>  =
; csp->ip_addr_long =3D ntohl(client.sin_addr.s_addr);<br> =
;#endif /* def HAVE_RFC2553 */<br><br>+<br>+ /* Get the name=
/IP of the server which accepted the client and<br>+ *=
store these in client_state.<br>+ */<br>+#ifdef HAVE_=
RFC2553<br>+ struct sockaddr_storage server_sin;<br>+#else<b=
r>+ struct sockaddr_in server_sin;<br>+#endif /* def HAVE_RF=
C2553 */<br>+#if defined(_WIN32) || defined(__OS2__) || defined(AMIGA)<b=
r>+ /* Wierdness - fix a warning. */<br>+ int s_=
length;<br>+#else<br>+ socklen_t s_length;<br>+#endif<br>+&n=
bsp; s_length =3D sizeof(server_sin);<br>+<br>+ /* Res=
olve socket (a file descriptor) to sockaddr_* */<br>+ if (ge=
tsockname(fd, (struct sockaddr *)&server_sin, &s_length) =3D=3D=
-1)<br>+ {<br>+ log_error(LOG=
_LEVEL_ERROR, "Can not determine server socket for "<br>+ &nb=
sp; "accepted connection.");<br>+ &nb=
sp; /* FIXME free csp->ip_addr_str? */<br>+ &n=
bsp; }<br>+ else<br>+ else<br>+ {<br=
>+ /* get the server port as number and as=
string */<br>+ struct sockaddr_in *server=
_sin_in =3D (struct sockaddr_in *)&server_sin;<br>+#ifndef _WIN32<br=
>+ if (sizeof(server_sin_in->sin_port)=
=3D=3D sizeof(short))<br>+#endif /* ndef _WIN32 */<br>+ &nbs=
p; {<br>+ /*=
FIXME: Unnecessary conversation of integers? */<br>+ &=
nbsp; csp->server_port_num =3D (int) ntohs(se=
rver_sin_in->sin_port);<br>+ }<br>+#ifn=
def _WIN32<br>+ else<br>+  =
; {<br>+ /*=
FIXME: Unnecessary conversation of integers? */<br>+ &=
nbsp; csp->server_port_num =3D (int) ntohl(se=
rver_sin_in->sin_port);<br>+ }<br>+#end=
if /* ndef _WIN32 */<br>+ char servnam[6];=
<br>+ retval =3D snprintf(servnam, sizeof(=
servnam), "%d", csp->server_port_num);<br>+ &n=
bsp; if ((-1 =3D=3D retval) || (sizeof(servnam) <=3D retval))<br>+&nb=
sp; {<br>+ &n=
bsp; log_error(LOG_LEVEL_ERROR,<br>+ =
"Port number (%d) ASCII decimal rep=
resentation doesn't fit into 6 bytes",<br>+  =
; csp->server_port_num);<br>+&nbs=
p; /* FIXME free csp->ip_addr_str=
? */<br>+ }<br>+ &n=
bsp; /* FIXME unecessary copying? */<br>+ =
csp->server_port_str =3D strdup(servnam);<br>+<br>+  =
; /* Get the server name or IP as string and as sockaddr_sto=
rage/long. */<br>+#ifdef HAVE_RFC2553<br>+ =
csp->server_tcp_addr =3D server_sin;<br>+ &nb=
sp; csp->server_ip_addr_str =3D malloc_or_die(NI_MAXHOST);<br>+ =
retval =3D getnameinfo((struct sockaddr *) &=
;server_sin, s_length,<br>+ &nb=
sp; csp->server_ip_addr_str, NI_MAXHOST, NULL, 0, N=
I_NUMERICHOST);<br>+ if (!csp->server_i=
p_addr_str || retval)<br>+ {<br>+ &nb=
sp; log_error(LOG_LEVEL_ERROR, "Can=
not save csp->server_ip_addr_str: %s",<br>+ &=
nbsp; (csp->server_ip_addr_str) ?=
gai_strerror(retval) : "Insuffcient memory");<br>+ &nb=
sp; freez(csp->server_ip_addr_str);<br>+ =
; }<br>+#else<br>+ =
csp->server_ip_addr_str =3D strdup(inet_ntoa(server_sin.sin_ad=
dr));<br>+ csp->server_ip_addr_long =3D=
ntohl(server_sin.sin_addr.s_addr);<br>+#endif /* def HAVE_RFC2553 */<br=
>+ } /* -END- if (getsockname(...) =3D=3D -1) */<br>+<br>&nb=
sp; return 1;<br><br> }<br>diff --git a/jcc.c b/jcc.c<b=
r>index d8e785a..b97cc0b 100644<br>--- a/jcc.c<br>+++ b/jcc.c<br>@@ -403=
8,6 +4038,8 @@ static void listen_loop(void)<br> =
"Connection from %s on=
socket %d dropped due to ACL", csp->ip_addr_str, csp->cfd);<br>&n=
bsp; close_socket(csp-&g=
t;cfd);<br> freez(=
csp->ip_addr_str);<br>+ &nbs=
p; freez(csp->server_port_str);<br>+ &nb=
sp; freez(csp->server_ip_addr_str);<br> =
freez(csp_list);<br> &nb=
sp; continue;<br> &=
nbsp; }<br>@@ -4053,6 +4055,8 @@ static void listen_loop(voi=
d)<br> =
strlen(TOO_MANY_CONNECTIONS_RESPONSE));<br> &nbs=
p; close_socket(csp->cfd);<br> &nb=
sp; freez(csp->ip_addr_str)=
;<br>+ freez(csp->ser=
ver_port_str);<br>+ free=
z(csp->server_ip_addr_str);<br> &n=
bsp; freez(csp_list);<br>  =
; continue;<br> }<=
br>diff --git a/loaders.c b/loaders.c<br>index fd3db36..8968895 100644<b=
r>--- a/loaders.c<br>+++ b/loaders.c<br>@@ -182,6 +182,8 @@ unsigned int=
sweep(void)<br> l=
ast_active->next =3D client_list->next;<br><br> &=
nbsp; freez(csp->ip_addr_str);<br>+&nbs=
p; freez(csp->server_port_s=
tr);<br>+ freez(csp->=
server_ip_addr_str);<br> =
freez(csp->client_iob->buf);<br> &nb=
sp; freez(csp->iob->buf);<br> &=
nbsp; freez(csp->error_message);<=
br>diff --git a/project.h b/project.h<br>index 0d23ef3..6daf178 100644<b=
r>--- a/project.h<br>+++ b/project.h<br>@@ -924,6 +924,31 @@ struct clie=
nt_state<br> unsigned long ip_addr_long;<br> #end=
if /* def HAVE_RFC2553 */<br><br>+ /** The port on which the=
privoxy server which accepted the<br>+ &nb=
sp; client's connection.<br>+ As a n=
umber. */<br>+ int server_port_num;<br>+ /** The=
port on which the privoxy server which accepted the<br>+ &nb=
sp; client's connection.<br>+ &=
nbsp; As a string. */<br>+ char *server_port_str;<br>+=
/** The IP address oft he privoxy server which accepted the=
<br>+ client's connection.<br>+ =
; As a string. */<br>+ char *s=
erver_ip_addr_str;<br>+#ifdef HAVE_RFC2553<br>+ /** The TCP=
address oft he privoxy server which accepted the<br>+ =
client's connection.<br>+ &nbs=
p; As a sockaddr. */<br>+ struct sockaddr_storage serv=
er_tcp_addr;<br>+#else<br>+ /** The IP address oft he privox=
y server which accepted the<br>+ cli=
ent's connection.<br>+ As a number.=
*/<br>+ unsigned long server_ip_addr_long;<br>+#endif /* de=
f HAVE_RFC2553 */<br>+<br>+<br> /** The URL that was r=
equested */<br> struct http_request http[1];<br><br><b=
r><br>
--=_427b82f7a7cf68848c2dec3b6b64cf8f--
--=_31baa9857ada06e268bee3d7d3c4c713
Content-Type: text/x-diff
Content-Transfer-Encoding: base64
Content-Disposition: inline; filename="FEATURE_REQUEST_privoxy.patch"
ZGlmZiAtLWdpdCBhL2ZpbHRlcnMuYyBiL2ZpbHRlcnMuYwppbmRleCAyNDVhOWNlLi5lOGIz
OTViIDEwMDY0NAotLS0gYS9maWx0ZXJzLmMKKysrIGIvZmlsdGVycy5jCkBAIC05MjYsNiAr
OTI2LDggQEAgcGNyc19qb2IgKmNvbXBpbGVfZHluYW1pY19wY3JzX2pvYl9saXN0KGNvbnN0
IHN0cnVjdCBjbGllbnRfc3RhdGUgKmNzcCwgY29uc3Qgc3QKICAgICAgIHsicGF0aCIsICAg
Y3NwLT5odHRwLT5wYXRoLCAgMX0sCiAgICAgICB7Imhvc3QiLCAgIGNzcC0+aHR0cC0+aG9z
dCwgIDF9LAogICAgICAgeyJvcmlnaW4iLCBjc3AtPmlwX2FkZHJfc3RyLCAxfSwKKyAgICAg
IHsic2VydmVycG9ydCIsICBjc3AtPnNlcnZlcl9wb3J0X3N0ciwgMX0sCisgICAgICB7InNl
cnZlcmFkZHIiLCAgY3NwLT5zZXJ2ZXJfaXBfYWRkcl9zdHIsIDF9LAogICAgICAge05VTEws
ICAgICBOVUxMLCAgICAgICAgICAgICAxfQogICAgfTsKIApAQCAtMTc2Miw2ICsxNzY0LDgg
QEAgc3RhdGljIHZvaWQgc2V0X3ByaXZveHlfdmFyaWFibGVzKGNvbnN0IHN0cnVjdCBjbGll
bnRfc3RhdGUgKmNzcCkKICAgICAgIHsgIlBSSVZPWFlfUEFUSCIsICAgY3NwLT5odHRwLT5w
YXRoICB9LAogICAgICAgeyAiUFJJVk9YWV9IT1NUIiwgICBjc3AtPmh0dHAtPmhvc3QgIH0s
CiAgICAgICB7ICJQUklWT1hZX09SSUdJTiIsIGNzcC0+aXBfYWRkcl9zdHIgfSwKKyAgICAg
IHsgIlBSSVZPWFlfU0VSVkVSUE9SVCIsICBjc3AtPnNlcnZlcl9wb3J0X3N0ciwgMX0sCisg
ICAgICB7ICJQUklWT1hZX1NFUlZFUkFERFIiLCAgY3NwLT5zZXJ2ZXJfaXBfYWRkcl9zdHIs
IDF9LAogICAgfTsKIAogICAgZm9yIChpID0gMDsgaSA8IFNaKGVudik7IGkrKykKZGlmZiAt
LWdpdCBhL2pic29ja2V0cy5jIGIvamJzb2NrZXRzLmMKaW5kZXggMjMzODQyMy4uN2U3YmU3
NyAxMDA2NDQKLS0tIGEvamJzb2NrZXRzLmMKKysrIGIvamJzb2NrZXRzLmMKQEAgLTEzNDgs
NiArMTM0OCw3OCBAQCBpbnQgYWNjZXB0X2Nvbm5lY3Rpb24oc3RydWN0IGNsaWVudF9zdGF0
ZSAqIGNzcCwgamJfc29ja2V0IGZkc1tdKQogICAgY3NwLT5pcF9hZGRyX2xvbmcgPSBudG9o
bChjbGllbnQuc2luX2FkZHIuc19hZGRyKTsKICNlbmRpZiAvKiBkZWYgSEFWRV9SRkMyNTUz
ICovCiAKKworICAgLyogR2V0IHRoZSBuYW1lL0lQIG9mIHRoZSBzZXJ2ZXIgd2hpY2ggYWNj
ZXB0ZWQgdGhlIGNsaWVudCBhbmQKKyAgICAqIHN0b3JlIHRoZXNlIGluIGNsaWVudF9zdGF0
ZS4KKyAgICAqLworI2lmZGVmIEhBVkVfUkZDMjU1MworICAgc3RydWN0IHNvY2thZGRyX3N0
b3JhZ2Ugc2VydmVyX3NpbjsKKyNlbHNlCisgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gc2VydmVy
X3NpbjsKKyNlbmRpZiAvKiBkZWYgSEFWRV9SRkMyNTUzICovCisjaWYgZGVmaW5lZChfV0lO
MzIpIHx8IGRlZmluZWQoX19PUzJfXykgfHwgZGVmaW5lZChBTUlHQSkKKyAgIC8qIFdpZXJk
bmVzcyAtIGZpeCBhIHdhcm5pbmcuICovCisgICBpbnQgc19sZW5ndGg7CisjZWxzZQorICAg
c29ja2xlbl90IHNfbGVuZ3RoOworI2VuZGlmCisgICBzX2xlbmd0aCA9IHNpemVvZihzZXJ2
ZXJfc2luKTsKKworICAgLyogUmVzb2x2ZSBzb2NrZXQgKGEgZmlsZSBkZXNjcmlwdG9yKSB0
byBzb2NrYWRkcl8qICovCisgICBpZiAoZ2V0c29ja25hbWUoZmQsIChzdHJ1Y3Qgc29ja2Fk
ZHIgKikmc2VydmVyX3NpbiwgJnNfbGVuZ3RoKSA9PSAtMSkKKyAgIHsKKyAgICAgIGxvZ19l
cnJvcihMT0dfTEVWRUxfRVJST1IsICJDYW4gbm90IGRldGVybWluZSBzZXJ2ZXIgc29ja2V0
IGZvciAiCisgICAgICAgICAiYWNjZXB0ZWQgY29ubmVjdGlvbi4iKTsKKyAgICAgIC8qIEZJ
WE1FIGZyZWUgY3NwLT5pcF9hZGRyX3N0cj8gKi8KKyAgIH0KKyAgIGVsc2UKKyAgIHsKKyAg
ICAgIC8qIGdldCB0aGUgc2VydmVyIHBvcnQgYXMgbnVtYmVyIGFuZCBhcyBzdHJpbmcgKi8K
KyAgICAgIHN0cnVjdCBzb2NrYWRkcl9pbiAqc2VydmVyX3Npbl9pbiA9IChzdHJ1Y3Qgc29j
a2FkZHJfaW4gKikmc2VydmVyX3NpbjsKKyNpZm5kZWYgX1dJTjMyCisgICAgICBpZiAoc2l6
ZW9mKHNlcnZlcl9zaW5faW4tPnNpbl9wb3J0KSA9PSBzaXplb2Yoc2hvcnQpKQorI2VuZGlm
IC8qIG5kZWYgX1dJTjMyICovCisgICAgICB7CisgICAgICAgICAvKiBGSVhNRTogVW5uZWNl
c3NhcnkgY29udmVyc2F0aW9uIG9mIGludGVnZXJzPyAqLworICAgICAgICAgY3NwLT5zZXJ2
ZXJfcG9ydF9udW0gPSAoaW50KSBudG9ocyhzZXJ2ZXJfc2luX2luLT5zaW5fcG9ydCk7Cisg
ICAgICB9CisjaWZuZGVmIF9XSU4zMgorICAgICAgZWxzZQorICAgICAgeworICAgICAgICAg
LyogRklYTUU6IFVubmVjZXNzYXJ5IGNvbnZlcnNhdGlvbiBvZiBpbnRlZ2Vycz8gKi8KKyAg
ICAgICAgIGNzcC0+c2VydmVyX3BvcnRfbnVtID0gKGludCkgbnRvaGwoc2VydmVyX3Npbl9p
bi0+c2luX3BvcnQpOworICAgICAgfQorI2VuZGlmIC8qIG5kZWYgX1dJTjMyICovCisgICAg
ICBjaGFyIHNlcnZuYW1bNl07CisgICAgICByZXR2YWwgPSBzbnByaW50ZihzZXJ2bmFtLCBz
aXplb2Yoc2Vydm5hbSksICIlZCIsIGNzcC0+c2VydmVyX3BvcnRfbnVtKTsKKyAgICAgIGlm
ICgoLTEgPT0gcmV0dmFsKSB8fCAoc2l6ZW9mKHNlcnZuYW0pIDw9IHJldHZhbCkpCisgICAg
ICB7CisgICAgICAgICBsb2dfZXJyb3IoTE9HX0xFVkVMX0VSUk9SLAorICAgICAgICAgICAg
IlBvcnQgbnVtYmVyICglZCkgQVNDSUkgZGVjaW1hbCByZXByZXNlbnRhdGlvbiBkb2Vzbid0
IGZpdCBpbnRvIDYgYnl0ZXMiLAorICAgICAgICAgICAgY3NwLT5zZXJ2ZXJfcG9ydF9udW0p
OworICAgICAgICAvKiBGSVhNRSBmcmVlIGNzcC0+aXBfYWRkcl9zdHI/ICovCisgICAgICB9
CisgICAgICAvKiBGSVhNRSB1bmVjZXNzYXJ5IGNvcHlpbmc/ICovCisgICAgICBjc3AtPnNl
cnZlcl9wb3J0X3N0ciA9IHN0cmR1cChzZXJ2bmFtKTsKKworICAgICAgLyogR2V0IHRoZSBz
ZXJ2ZXIgbmFtZSBvciBJUCBhcyBzdHJpbmcgYW5kIGFzIHNvY2thZGRyX3N0b3JhZ2UvbG9u
Zy4gKi8KKyNpZmRlZiBIQVZFX1JGQzI1NTMKKyAgICAgIGNzcC0+c2VydmVyX3RjcF9hZGRy
ID0gc2VydmVyX3NpbjsKKyAgICAgIGNzcC0+c2VydmVyX2lwX2FkZHJfc3RyID0gbWFsbG9j
X29yX2RpZShOSV9NQVhIT1NUKTsKKyAgICAgIHJldHZhbCA9IGdldG5hbWVpbmZvKChzdHJ1
Y3Qgc29ja2FkZHIgKikgJnNlcnZlcl9zaW4sIHNfbGVuZ3RoLAorICAgICAgICAgICAgY3Nw
LT5zZXJ2ZXJfaXBfYWRkcl9zdHIsIE5JX01BWEhPU1QsIE5VTEwsIDAsIE5JX05VTUVSSUNI
T1NUKTsKKyAgICAgIGlmICghY3NwLT5zZXJ2ZXJfaXBfYWRkcl9zdHIgfHwgcmV0dmFsKQor
ICAgICAgeworICAgICAgICAgbG9nX2Vycm9yKExPR19MRVZFTF9FUlJPUiwgIkNhbiBub3Qg
c2F2ZSBjc3AtPnNlcnZlcl9pcF9hZGRyX3N0cjogJXMiLAorICAgICAgICAgICAgKGNzcC0+
c2VydmVyX2lwX2FkZHJfc3RyKSA/IGdhaV9zdHJlcnJvcihyZXR2YWwpIDogIkluc3VmZmNp
ZW50IG1lbW9yeSIpOworICAgICAgICAgZnJlZXooY3NwLT5zZXJ2ZXJfaXBfYWRkcl9zdHIp
OworICAgICAgfQorI2Vsc2UKKyAgICAgIGNzcC0+c2VydmVyX2lwX2FkZHJfc3RyICA9IHN0
cmR1cChpbmV0X250b2Eoc2VydmVyX3Npbi5zaW5fYWRkcikpOworICAgICAgY3NwLT5zZXJ2
ZXJfaXBfYWRkcl9sb25nID0gbnRvaGwoc2VydmVyX3Npbi5zaW5fYWRkci5zX2FkZHIpOwor
I2VuZGlmIC8qIGRlZiBIQVZFX1JGQzI1NTMgKi8KKyAgIH0gLyogLUVORC0gaWYgKGdldHNv
Y2tuYW1lKC4uLikgPT0gLTEpICovCisKICAgIHJldHVybiAxOwogCiB9CmRpZmYgLS1naXQg
YS9qY2MuYyBiL2pjYy5jCmluZGV4IGQ4ZTc4NWEuLmI5N2NjMGIgMTAwNjQ0Ci0tLSBhL2pj
Yy5jCisrKyBiL2pjYy5jCkBAIC00MDM4LDYgKzQwMzgsOCBAQCBzdGF0aWMgdm9pZCBsaXN0
ZW5fbG9vcCh2b2lkKQogICAgICAgICAgICAgIkNvbm5lY3Rpb24gZnJvbSAlcyBvbiBzb2Nr
ZXQgJWQgZHJvcHBlZCBkdWUgdG8gQUNMIiwgY3NwLT5pcF9hZGRyX3N0ciwgY3NwLT5jZmQp
OwogICAgICAgICAgY2xvc2Vfc29ja2V0KGNzcC0+Y2ZkKTsKICAgICAgICAgIGZyZWV6KGNz
cC0+aXBfYWRkcl9zdHIpOworICAgICAgICAgZnJlZXooY3NwLT5zZXJ2ZXJfcG9ydF9zdHIp
OworICAgICAgICAgZnJlZXooY3NwLT5zZXJ2ZXJfaXBfYWRkcl9zdHIpOwogICAgICAgICAg
ZnJlZXooY3NwX2xpc3QpOwogICAgICAgICAgY29udGludWU7CiAgICAgICB9CkBAIC00MDUz
LDYgKzQwNTUsOCBAQCBzdGF0aWMgdm9pZCBsaXN0ZW5fbG9vcCh2b2lkKQogICAgICAgICAg
ICAgc3RybGVuKFRPT19NQU5ZX0NPTk5FQ1RJT05TX1JFU1BPTlNFKSk7CiAgICAgICAgICBj
bG9zZV9zb2NrZXQoY3NwLT5jZmQpOwogICAgICAgICAgZnJlZXooY3NwLT5pcF9hZGRyX3N0
cik7CisgICAgICAgICBmcmVleihjc3AtPnNlcnZlcl9wb3J0X3N0cik7CisgICAgICAgICBm
cmVleihjc3AtPnNlcnZlcl9pcF9hZGRyX3N0cik7CiAgICAgICAgICBmcmVleihjc3BfbGlz
dCk7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgIH0KZGlmZiAtLWdpdCBhL2xvYWRlcnMu
YyBiL2xvYWRlcnMuYwppbmRleCBmZDNkYjM2Li44OTY4ODk1IDEwMDY0NAotLS0gYS9sb2Fk
ZXJzLmMKKysrIGIvbG9hZGVycy5jCkBAIC0xODIsNiArMTgyLDggQEAgdW5zaWduZWQgaW50
IHN3ZWVwKHZvaWQpCiAgICAgICAgICBsYXN0X2FjdGl2ZS0+bmV4dCA9IGNsaWVudF9saXN0
LT5uZXh0OwogCiAgICAgICAgICBmcmVleihjc3AtPmlwX2FkZHJfc3RyKTsKKyAgICAgICAg
IGZyZWV6KGNzcC0+c2VydmVyX3BvcnRfc3RyKTsKKyAgICAgICAgIGZyZWV6KGNzcC0+c2Vy
dmVyX2lwX2FkZHJfc3RyKTsKICAgICAgICAgIGZyZWV6KGNzcC0+Y2xpZW50X2lvYi0+YnVm
KTsKICAgICAgICAgIGZyZWV6KGNzcC0+aW9iLT5idWYpOwogICAgICAgICAgZnJlZXooY3Nw
LT5lcnJvcl9tZXNzYWdlKTsKZGlmZiAtLWdpdCBhL3Byb2plY3QuaCBiL3Byb2plY3QuaApp
bmRleCAwZDIzZWYzLi42ZGFmMTc4IDEwMDY0NAotLS0gYS9wcm9qZWN0LmgKKysrIGIvcHJv
amVjdC5oCkBAIC05MjQsNiArOTI0LDMxIEBAIHN0cnVjdCBjbGllbnRfc3RhdGUKICAgIHVu
c2lnbmVkIGxvbmcgaXBfYWRkcl9sb25nOwogI2VuZGlmIC8qIGRlZiBIQVZFX1JGQzI1NTMg
Ki8KIAorICAgLyoqIFRoZSBwb3J0IG9uIHdoaWNoIHRoZSBwcml2b3h5IHNlcnZlciB3aGlj
aCBhY2NlcHRlZCB0aGUKKyAgICAgICBjbGllbnQncyBjb25uZWN0aW9uLgorICAgICAgIEFz
IGEgbnVtYmVyLiAqLworICAgaW50IHNlcnZlcl9wb3J0X251bTsKKyAgIC8qKiBUaGUgcG9y
dCBvbiB3aGljaCB0aGUgcHJpdm94eSBzZXJ2ZXIgd2hpY2ggYWNjZXB0ZWQgdGhlCisgICAg
ICAgY2xpZW50J3MgY29ubmVjdGlvbi4KKyAgICAgICBBcyBhIHN0cmluZy4gKi8KKyAgIGNo
YXIgKnNlcnZlcl9wb3J0X3N0cjsKKyAgIC8qKiBUaGUgSVAgYWRkcmVzcyBvZnQgaGUgcHJp
dm94eSBzZXJ2ZXIgd2hpY2ggYWNjZXB0ZWQgdGhlCisgICAgICAgY2xpZW50J3MgY29ubmVj
dGlvbi4KKyAgICAgICBBcyBhIHN0cmluZy4gKi8KKyAgIGNoYXIgKnNlcnZlcl9pcF9hZGRy
X3N0cjsKKyNpZmRlZiBIQVZFX1JGQzI1NTMKKyAgIC8qKiBUaGUgVENQIGFkZHJlc3Mgb2Z0
IGhlIHByaXZveHkgc2VydmVyIHdoaWNoIGFjY2VwdGVkIHRoZQorICAgICAgIGNsaWVudCdz
IGNvbm5lY3Rpb24uCisgICAgICAgQXMgYSBzb2NrYWRkci4gKi8KKyAgIHN0cnVjdCBzb2Nr
YWRkcl9zdG9yYWdlIHNlcnZlcl90Y3BfYWRkcjsKKyNlbHNlCisgICAvKiogVGhlIElQIGFk
ZHJlc3Mgb2Z0IGhlIHByaXZveHkgc2VydmVyIHdoaWNoIGFjY2VwdGVkIHRoZQorICAgICAg
IGNsaWVudCdzIGNvbm5lY3Rpb24uCisgICAgICAgQXMgYSBudW1iZXIuICovCisgICB1bnNp
Z25lZCBsb25nIHNlcnZlcl9pcF9hZGRyX2xvbmc7CisjZW5kaWYgLyogZGVmIEhBVkVfUkZD
MjU1MyAqLworCisKICAgIC8qKiBUaGUgVVJMIHRoYXQgd2FzIHJlcXVlc3RlZCAqLwogICAg
c3RydWN0IGh0dHBfcmVxdWVzdCBodHRwWzFdOwogCg==
--=_31baa9857ada06e268bee3d7d3c4c713
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline
------------------------------------------------------------------------------
Find and fix application performance issues faster with Applications Manager
Applications Manager provides deep performance insights into multiple tiers of
your business applications. It resolves application problems quickly and
reduces your MTTR. Get your free trial!
https://ad.doubleclick.net/ddm/clk/302982198;130105516;z
--=_31baa9857ada06e268bee3d7d3c4c713
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline
_______________________________________________
Ijbswa-developers mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ijbswa-developers
--=_31baa9857ada06e268bee3d7d3c4c713--