https://metacpan.org/source/RCL/Varnish-CLI-0.03/lib%2FVarnish%2FCLI.pm
I don't know if I'm doing something wrong. I'm trying to use this CLI
against an upgraded Varnish server and it seems the new version is built
with a secret being required to connect remotely.
I think the relevant sections are below.
For #1, I couldn't find any examples online, but my guess is I can just
modify my like this:
my $varnish = Varnish::CLI->new( secret => 'ENTER_LONG_STRING_HERE' );
It asks for the contents of my secret (/etc/varnish/secret) file which is
GUID-like and I entered that directly in the line above. I tried with both
single quotes and none.
If I have #1 right, I think I've confirmed a "107" is being returned with a
telnet session, but it doesn't appear that #2 is working right as this
comes directly on the screen:
"Connection failed: authentication required, but no secret given\n"
I don't understand this syntax:
if( not $self->secret() ){
My guess is it evaluates if my secret variable is empty?
My next steps might be:
-Setup a network sniffer
-Try to figure out if this 0.03 version doesn't deal with the challenge
properly with the latest Varnish
#1
--------------
If you have started your Varnish CLI with a secret, you must will have to
pass the contents
of your secret file, otherwise authentication will fail... Makes sense!! :)
Remember - complete contents of the secret file (including a newline if it
exists!)
my $varnish = Varnish::CLI->new( secret => $secret );
--------------
#2
--------------
# A 107 response on connection means the Varnish CLI expects
authentication
if( $self->last_status() == 107 ){
if( not $self->secret() ){
croak( "Connection failed: authentication required, but no
secret given\n" );
}
my $challenge = substr( $self->last_lines()->[0], 0, 32 );
my $auth = sha256_hex( $challenge . "\n" . $self->secret() .
$challenge . "\n" );
$self->send( "auth $auth" );
if( $self->last_status != 200 ){
croak( "Authentication failed!\n" );
}
}
--------------
...