Varnish 3.0.2 req.hash

Hugues Alary hugues.alary at gmail.com
Sun Feb 12 03:48:26 CET 2012


Thanks everybody for your answers.

Syohei's solution is exactly what I was looking for! Thanks Syohei.

-Hugues

On Sat, Feb 11, 2012 at 6:38 PM, gau at gprj.net <gau at gprj.net> wrote:

> Hi,
>
> Hash is stored in the sp->digest(created after the vcl_hash has been
> called.The current version)
> To access it is necessary for VMOD
>
>
> sample(""this code is no guarantee. no error check"")
>
> VCC:
>   Function STRING gethash()
> C:
>   const char * vmod_gethash(struct sess *sp){
>     int u = WS_Reserve(sp->wrk->ws, 0);
>     char *tmp = (char *)sp->wrk->ws->f;
>     for(int i = 0; i < DIGEST_LEN; i++)
>       sprintf(tmp + 2 * i, "%02x",sp->digest[i]);
>     WS_Release(sp->wrk->ws, DIGEST_LEN*2+1);
>     return tmp;
>   }
>
> include list(It includes those that do not need)
>   #include <stdlib.h>
>   #include "vcl.h"
>   #include "vrt.h"
>   #include "bin/varnishd/cache.h"
>   #include "bin/varnishd/cache_backend.h"
>   #include "sys/socket.h"
>   #include "vcc_if.h"
>   #include <stdio.h>
>   #include <syslog.h>
>   #include "vsha256.h"
>
> VCL:
>   import example2;// my test vmod
>   sub vcl_deliver{
>     set resp.http.X-HASH=example2.gethash();
>   }
>
> TEST:
>   wget  -d http://192.168.1.199:6081/test -O - > /dev/null
>     X-HASH:
> 4c77debfa66306c3b9d4ed17389bca9b4b0780ca2ebbef67104c28cb77c5995a
>   wget  -d http://192.168.1.199:6081/test2 -O - > /dev/null
>     X-HASH:
> 759b213ba3e86f899a55243d31028240d3ee4680583f18356bfe6d37d43dff20
>   wget  -d http://192.168.1.199:6081/test2XXXXXXXXXXXXXXXXXXXXXXXXXX
> -O - > /dev/null
>     X-HASH:
> c79b81e7d55154585e80c03e954a7ccd8dcc067c8bd5d6b7d40d35276fd54a6d
>
> about VMOD:
>   https://www.varnish-cache.org/docs/trunk/reference/vmod.html
>   and
>   https://github.com/varnish/libvmod-example
>
>
> Hope this helps,
>
> --
> Syohei Tanaka(@xcir)
> http://xcir.net/
>
> (:3[__])
>
> 2012/2/12 Hugues Alary <hugues.alary at gmail.com>:
> > Hi Syohey,
> >
> > Thanks for your answer.
> >
> > My final goal is to get the hash calculated by Varnish. In the
> documentation
> > of the 3.0.2 version it is written that req.hash contains this hash. I
> guess
> > they just forgot to remove it and that req.hash doesn't exist anymore.
> >
> > However, is there a mean to get the final hash calculated by varnish, the
> > result of hash_data()?
> >
> > Here:
> https://www.varnish-cache.org/docs/trunk/phk/varnish_does_not_hash.html it
> > is written:
> >
> >
> > "All the strings hash_data() are fed, are pushed through a cryptographic
> > hash algorithm called SHA256, which, as the name says, always spits out
> 256
> > bits (= 32 bytes), no matter how many bits you feed it."
> >
> > And that's what I am looking for, the final value of the hash. I guess I
> > could do it myself with a bit of C, but I would think that it is
> possible to
> > get this value from somewhere since Varnish already does the calculation.
> >
> > -Hugues
> >
> > On Fri, Feb 10, 2012 at 5:22 PM, gau at gprj.net <gau at gprj.net> wrote:
> >>
> >> Hugues,
> >>
> >> req.hash is the original write-only.(If my memory serves me)
> >> and, VCL is a notation has changed Varnish3.
> >> req.hash is replaced to hash_data();
> >>
> >>
> >>  vcl:
> >>  sub vcl_hash {
> >>     hash_data(req.url);
> >>     set req.http.X-TEST = req.url; //add
> >>     if (req.http.host) {
> >>         hash_data(req.http.host);
> >>         set req.http.X-TEST = req.http.X-TEST + " + "  + req.http.host;
> >> //add
> >>     } else {
> >>        hash_data(server.ip);
> >>        set req.http.X-TEST = req.http.X-TEST + " + " + server.ip; //add
> >>     }
> >>     return (hash);
> >>  }
> >>
> >>
> >>  sub vcl_deliver{
> >>      set resp.http.X-TEST = req.http.X-TEST;
> >>  }
> >>
> >>  test:
> >>  wget  -d http://192.168.1.199:6081/test -O - > /dev/null
> >>
> >>  X-TEST: /test + 192.168.1.199:6081
> >>
> >> Is not a very smart.
> >> (Is not a hash, but understood what anything was used)
> >>
> >>
> >> Can not think only about making the other VMOD.
> >>
> >>
> >> --
> >> Syohei Tanaka(@xcir)
> >> http://xcir.net/
> >>
> >>
> >>
> >> 2012/2/11 Hugues Alary <hugues.alary at gmail.com>:
> >> > 2012/2/10 Roberto O. Fernández Crisial
> >> > <roberto.fernandezcrisial at gmail.com>
> >> >>
> >> >> Hugues,
> >> >
> >> >
> >> > Hi Roberto,
> >> >
> >> > Thank you for your answer.
> >> >
> >> >>
> >> >>
> >> >> Try this:
> >> >>
> >> >> set req.http.X-TEST = req.hash;
> >> >> set req.http.TEST = req.http.X-TEST;
> >> >>
> >> >> It should work.
> >> >
> >> >
> >> >
> >> > Unfortunately the problem doesn't come from the syntax of
> >> > "req.http.TEST"
> >> > but from req.hash. Here is the message:
> >> >
> >> > Message from VCC-compiler:
> >> > Symbol not found: 'req.hash' (expected type STRING_LIST):
> >> > ('input' Line 219 Pos 31)
> >> >         set req.http.X-TEST = req.hash;
> >> > ------------------------------########-
> >> >
> >> > Running VCC-compiler failed, exit 1
> >> >
> >> > VCL compilation failed
> >> >
> >> >
> >> > I also tried to put that in my configuration:
> >> >
> >> > set req.http.X-TEST = {""} + req.hash;
> >> >
> >> >
> >> > And, same error:
> >> >
> >> > Message from VCC-compiler:
> >> > Symbol not found: 'req.hash' (expected type STRING):
> >> > ('input' Line 219 Pos 38)
> >> >         set req.http.X-TEST = {""} + req.hash;
> >> > -------------------------------------########-
> >> >
> >> > Running VCC-compiler failed, exit 1
> >> >
> >> > VCL compilation failed
> >> >
> >> >
> >> > Do you have any other idea ?
> >> >
> >> >>
> >> >> Good  luck,
> >> >>
> >> >> Roberto (@rofc)
> >> >>
> >> >
> >> > Thanks!
> >> > -Hugues
> >> >
> >> > _______________________________________________
> >> > varnish-misc mailing list
> >> > varnish-misc at varnish-cache.org
> >> > https://www.varnish-cache.org/lists/mailman/listinfo/varnish-misc
> >
> >
> >
> >
> > --
> > Hugues ALARY
> >
> > _______________________________________________
> > varnish-misc mailing list
> > varnish-misc at varnish-cache.org
> > https://www.varnish-cache.org/lists/mailman/listinfo/varnish-misc
>



-- 
Hugues ALARY
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://www.varnish-cache.org/lists/pipermail/varnish-misc/attachments/20120211/5edee32c/attachment.html>


More information about the varnish-misc mailing list