Changeset 849
- Timestamp:
- 02/11/09 21:57:01 (10 months ago)
- Location:
- trunk/DJabberd
- Files:
-
- 3 modified
-
lib/DJabberd/IQ.pm (modified) (2 diffs)
-
t/lib/djabberd-test.pl (modified) (2 diffs)
-
t/sasl-login.t (modified) (7 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/DJabberd/lib/DJabberd/IQ.pm
r841 r849 4 4 use DJabberd::Util qw(exml); 5 5 use DJabberd::Roster; 6 use Digest::SHA1; 6 7 7 8 use DJabberd::Log; … … 626 627 }; 627 628 628 my $resource = $get->("resource") || ""; 629 my $resource = $get->("resource") 630 || Digest::SHA1::sha1_hex(rand() . rand() . rand()); 629 631 630 632 my $vhost = $conn->vhost; -
trunk/DJabberd/t/lib/djabberd-test.pl
r841 r849 566 566 my $self = shift; 567 567 my $sasl = shift; 568 my $res = shift; 568 569 my $sec = shift; 569 570 … … 623 624 die "no session" unless $features =~ /session\b/sm; 624 625 625 $self->bind_resource; 626 return 1; 626 return $self->bind_resource($res); 627 627 } 628 628 629 629 sub bind_resource { 630 630 my $self = shift; 631 my $res = shift; 631 632 my $sock = $self->{sock}; 632 633 633 634 print $sock <<EOB; 634 <iq type='set' id='purple81e4b57b'><bind xmlns='urn:ietf:params:xml:ns:xmpp-bind'><resource> yann</resource></bind></iq>635 <iq type='set' id='purple81e4b57b'><bind xmlns='urn:ietf:params:xml:ns:xmpp-bind'><resource>$res</resource></bind></iq> 635 636 EOB 636 637 my $iq = $self->recv_xml_obj; 637 638 die "invalid bind response" unless $iq->element_name eq 'iq'; 638 639 my $bind = $iq->first_element; 639 die "invalid bind response " unless $bind->element_name eq 'bind';640 die "invalid bind response " unless $bind->element_name eq 'bind'; 640 641 my $jid_el = $bind ->first_element or die "no jid elt..."; 641 642 my $jid = $jid_el->first_child or die "no jid..."; 643 return $jid; 642 644 } 643 645 -
trunk/DJabberd/t/sasl-login.t
r841 r849 2 2 use strict; 3 3 use warnings; 4 use Test::More tests => 26;4 use Test::More tests => 46; 5 5 use lib 't/lib'; 6 6 … … 10 10 11 11 my $login_and_be = sub { 12 my ($pa, $pb, $sasl ) = @_;12 my ($pa, $pb, $sasl, $res) = @_; 13 13 14 $pa->sasl_login($sasl);14 my $jid = $pa->sasl_login($sasl, $res); 15 15 $pb->login; 16 16 $pa->send_xml("<presence/>"); … … 21 21 $pb->send_xml("<iq type='get' id='pb1' to='$pa'><x/></iq>"); 22 22 like($pa->recv_xml, qr/id=.pb./, "pb got pa's iq"); 23 return $jid; 23 24 }; 24 25 … … 37 38 ); 38 39 39 $login_and_be->($pa, $pb, $sasl); 40 my $jid = $login_and_be->($pa, $pb, $sasl, "yann"); 41 like $jid, qr/yann/, "resource assigned accordingly"; 40 42 }); 41 43 } 44 } 45 46 ## resource not provided by the client 47 { 48 two_parties(sub { 49 my ($pa, $pb) = @_; 50 51 my $sasl = Authen::SASL->new( 52 mechanism => "DIGEST-MD5", 53 callback => { 54 pass => sub { $pa->password }, 55 user => sub { $pa->{name} }, 56 }, 57 ); 58 59 my $jid = $login_and_be->($pa, $pb, $sasl, undef); # << no resource 60 ok $jid, "got jid"; 61 like $jid, qr{/\w+$}, "assigned resource $jid"; 62 }); 63 } 64 65 ## resource conflict, resource reassigned 66 { 67 two_parties(sub { 68 my ($pa, $pb) = @_; 69 70 my $sasl = Authen::SASL->new( 71 mechanism => "DIGEST-MD5", 72 callback => { 73 pass => sub { $pa->password }, 74 user => sub { $pa->{name} }, 75 }, 76 ); 77 my $pa_jid = $pa->sasl_login($sasl, "yann"); 78 my $pb_jid = $pb->sasl_login($sasl, "yann"); 79 my ($pa_res) = $pa_jid =~ m{/(\w+)$}; 80 my ($pb_res) = $pb_jid =~ m{/(\w+)$}; 81 cmp_ok $pa_res, 'ne', $pb_res, "resources are different"; 82 is $pa_res, "yann", "first got what it wanted"; 83 isnt $pb_res, "yann", "second didn't"; 84 }); 42 85 } 43 86 … … 58 101 59 102 my $pa = Test::DJabberd::Client->new(server => $server, name => "partya"); 60 eval { $pa->sasl_login($sasl ) };103 eval { $pa->sasl_login($sasl, "yann") }; 61 104 my $err = $@; 62 105 ok $err, "login failure"; … … 76 119 77 120 my $pa = Test::DJabberd::Client->new(server => $server, name => "partya"); 78 my $response = $pa->abort_sasl_login($sasl );121 my $response = $pa->abort_sasl_login($sasl, "yann"); 79 122 like $response, qr{failure.*<aborted/>}; 80 123 } … … 100 143 101 144 my $pa = Test::DJabberd::Client->new(server => $strong_server, name => "partya"); 102 eval { $pa->sasl_login($sasl ) };145 eval { $pa->sasl_login($sasl, "yann") }; 103 146 my $err = $@; 104 147 like $err, qr{failure.*<invalid-mechanism/>};
