--- trunk/Estraier.pm 2006/05/09 12:21:26 134 +++ trunk/Estraier.pm 2006/05/09 12:42:39 135 @@ -1725,32 +1725,32 @@ }, userlist => { status => 200, - returns => qw/name passwd flags fname misc/, + returns => [ qw/name passwd flags fname misc/ ], }, useradd => { - required => qw/name passwd flags/, - optional => qw/fname misc/, + required => [ qw/name passwd flags/ ], + optional => [ qw/fname misc/ ], status => 200, }, userdel => { - required => qw/name/, + required => [ qw/name/ ], status => 200, }, nodelist => { status => 200, - returns => qw/name label doc_num word_num size/, + returns => [ qw/name label doc_num word_num size/ ], }, nodeadd => { - required => qw/name/, - optional => qw/label/, + required => [ qw/name/ ], + optional => [ qw/label/ ], status => 200, }, nodedel => { - required => qw/name/, + required => [ qw/name/ ], status => 200, }, nodeclr => { - required => qw/name/, + required => [ qw/name/ ], status => 200, }, nodertt => { @@ -1793,33 +1793,40 @@ my $resbody; - if ($self->shuttle_url( + my $status = $self->shuttle_url( 'http://' . $uri->host_port . '/master?action=' . $action , 'application/x-www-form-urlencoded', join('&', @args), \$resbody, 1, - ) == $rest->{status}) { - return 0E0 unless ($rest->{returns}); + ) or confess "shuttle_url failed"; - if (wantarray) { + if ($status == $rest->{status}) { + if ($rest->{returns} && wantarray) { my @results; + my $fields = $#{$rest->{returns}}; foreach my $line ( split(/[\r\n]/,$resbody) ) { - my @e = split(/\t/, $line); + my @e = split(/\t/, $line, $fields + 1); my $row; - map { $row->{$_} = shift @e; } @{ $rest->{returns} }; + foreach my $i ( 0 .. $fields) { + $row->{ $rest->{returns}->[$i] } = $e[ $i ]; + } push @results, $row; } return @results; - } else { - carp "calling master action '$action', but not expecting array back, returning whole body"; + } elsif ($resbody) { return $resbody; + } else { + return 0E0; } } + + carp "expected status $rest->{status}, but got $status"; + return undef; } =head1 PRIVATE METHODS