diff --git a/regress/usr.sbin/relayd/Makefile b/regress/usr.sbin/relayd/Makefile index a471c10eeb8..d8eee4778ca 100644 --- a/regress/usr.sbin/relayd/Makefile +++ b/regress/usr.sbin/relayd/Makefile @@ -1,4 +1,4 @@ -# $OpenBSD: Makefile,v 1.1 2011/09/01 17:33:17 bluhm Exp $ +# $OpenBSD: Makefile,v 1.2 2011/09/02 17:02:10 bluhm Exp $ # The following ports must be installed for the regression tests: # p5-IO-Socket-INET6 object interface for AF_INET and AF_INET6 domain sockets @@ -36,8 +36,7 @@ run-regress-$a: $a server-cert.pem: openssl req -batch -new -nodes -newkey rsa -keyout server-key.pem -subj /CN=localhost/ -x509 -out $@ -${REGRESS_TARGETS:M*ssl-client*}: /etc/ssl/127.0.0.1.crt - -${REGRESS_TARGETS:M*ssl-server*}: server-cert.pem +${REGRESS_TARGETS:M*ssl*} ${REGRESS_TARGETS:M*https*}: \ + /etc/ssl/127.0.0.1.crt server-cert.pem .include diff --git a/regress/usr.sbin/relayd/args-http-persistent.pl b/regress/usr.sbin/relayd/args-http-persistent.pl index 49bd34f7b51..08b644f6f31 100644 --- a/regress/usr.sbin/relayd/args-http-persistent.pl +++ b/regress/usr.sbin/relayd/args-http-persistent.pl @@ -3,7 +3,7 @@ use strict; use warnings; -my @lengths = (251, 65536, 0, 1, 2, 3, 4, 5); +my @lengths = (251, 16384, 0, 1, 2, 3, 4, 5); our %args = ( client => { func => \&http_client, diff --git a/regress/usr.sbin/relayd/args-http-put.pl b/regress/usr.sbin/relayd/args-http-put.pl new file mode 100644 index 00000000000..c33f4fb8562 --- /dev/null +++ b/regress/usr.sbin/relayd/args-http-put.pl @@ -0,0 +1,26 @@ +# test persistent http 1.1 put over http relay + +use strict; +use warnings; + +my @lengths = (251, 16384, 0, 1, 2, 3, 4, 5); +our %args = ( + client => { + func => \&http_client, + lengths => \@lengths, + method => "PUT", + }, + relay => { + protocol => [ "http", + "request header log foo", + "response header log bar", + ], + }, + server => { + func => \&http_server, + }, + lengths => \@lengths, + md5 => "bc3a3f39af35fe5b1687903da2b00c7f", +); + +1; diff --git a/regress/usr.sbin/relayd/args-https-persistent.pl b/regress/usr.sbin/relayd/args-https-persistent.pl new file mode 100644 index 00000000000..3cd869c33db --- /dev/null +++ b/regress/usr.sbin/relayd/args-https-persistent.pl @@ -0,0 +1,29 @@ +# test persistent http 1.1 connection over http relay + +use strict; +use warnings; + +my @lengths = (251, 16384, 0, 1, 2, 3, 4, 5); +our %args = ( + client => { + func => \&http_client, + lengths => \@lengths, + ssl => 1, + }, + relay => { + protocol => [ "http", + "request header log foo", + "response header log bar", + ], + forwardssl => 1, + listenssl => 1, + }, + server => { + func => \&http_server, + ssl => 1, + }, + lengths => \@lengths, + md5 => "bc3a3f39af35fe5b1687903da2b00c7f", +); + +1; diff --git a/regress/usr.sbin/relayd/args-https-put.pl b/regress/usr.sbin/relayd/args-https-put.pl new file mode 100644 index 00000000000..7284e0cbbfd --- /dev/null +++ b/regress/usr.sbin/relayd/args-https-put.pl @@ -0,0 +1,30 @@ +# test persistent https 1.1 put over http relay + +use strict; +use warnings; + +my @lengths = (251, 16384, 0, 1, 2, 3, 4, 5); +our %args = ( + client => { + func => \&http_client, + lengths => \@lengths, + method => "PUT", + ssl => 1, + }, + relay => { + protocol => [ "http", + "request header log foo", + "response header log bar", + ], + forwardssl => 1, + listenssl => 1, + }, + server => { + func => \&http_server, + ssl => 1, + }, + lengths => \@lengths, + md5 => "bc3a3f39af35fe5b1687903da2b00c7f", +); + +1; diff --git a/regress/usr.sbin/relayd/args-https.pl b/regress/usr.sbin/relayd/args-https.pl new file mode 100644 index 00000000000..65b1014c56d --- /dev/null +++ b/regress/usr.sbin/relayd/args-https.pl @@ -0,0 +1,28 @@ +# test https connection over http relay + +use strict; +use warnings; + +our %args = ( + client => { + func => \&http_client, + ssl => 1, + }, + relay => { + protocol => [ "http", + "request header log foo", + "response header log bar", + ], + forwardssl => 1, + listenssl => 1, + + }, + server => { + func => \&http_server, + ssl => 1, + }, + len => 251, + md5 => "bc3a3f39af35fe5b1687903da2b00c7f", +); + +1; diff --git a/regress/usr.sbin/relayd/funcs.pl b/regress/usr.sbin/relayd/funcs.pl index 397c1e92634..c928208c7fa 100644 --- a/regress/usr.sbin/relayd/funcs.pl +++ b/regress/usr.sbin/relayd/funcs.pl @@ -1,4 +1,4 @@ -# $OpenBSD: funcs.pl,v 1.2 2011/09/02 10:45:36 bluhm Exp $ +# $OpenBSD: funcs.pl,v 1.3 2011/09/02 17:02:10 bluhm Exp $ # Copyright (c) 2010,2011 Alexander Bluhm # @@ -87,14 +87,18 @@ sub http_client { my $self = shift; my @lengths = @{$self->{lengths} || [ shift // $self->{len} // 251 ]}; my $vers = $self->{lengths} ? "1.1" : "1.0"; + my $method = $self->{method} || "GET"; foreach my $len (@lengths) { { local $\ = "\r\n"; - print "GET /$len HTTP/$vers"; + print "$method /$len HTTP/$vers"; print "Host: foo.bar"; + print "Content-Length: $len" + if $vers eq "1.1" && $method eq "PUT"; print ""; } + write_char($self, $len) if $method eq "PUT"; IO::Handle::flush(\*STDOUT); { @@ -115,7 +119,8 @@ sub http_client { } } } - read_char($self, $vers eq "1.1" ? $len : undef); + read_char($self, $vers eq "1.1" ? $len : undef) + if $method eq "GET"; } } @@ -151,8 +156,9 @@ sub read_char { sub http_server { my $self = shift; - my($url, $vers); + my($method, $url, $vers); do { + my $len; { local $\ = "\n"; local $/ = "\r\n"; @@ -160,24 +166,32 @@ sub http_server { return unless defined $_; chomp; print STDERR; - ($url, $vers) = m{^GET (.*) HTTP/(1\.[01])$} + ($method, $url, $vers) = m{^(\w+) (.*) HTTP/(1\.[01])$} or die ref($self), " http request not ok"; + $method =~ /^(GET|PUT)$/ + or die ref($self), " unknown method: $method"; + ($len) = $url =~ /(\d+)$/; while () { chomp; last if /^$/; print STDERR; + if (/^Content-Length: (.*)/) { + $1 == $len or die ref($self), + " bad content length $1"; + } } } + read_char($self, $vers eq "1.1" ? $len : undef) + if $method eq "PUT"; - $url =~ /(\d+)$/; - my $len = $1; { local $\ = "\r\n"; print "HTTP/$vers 200 OK"; - print "Content-Length: $len" if $vers eq "1.1"; + print "Content-Length: $len" + if $vers eq "1.1" && $method eq "GET"; print ""; } - write_char($self, $len); + write_char($self, $len) if $method eq "GET"; IO::Handle::flush(\*STDOUT); } while ($vers eq "1.1"); }