From 8d93c5ec4a200c19d9fde7c02f5434617328e5d2 Mon Sep 17 00:00:00 2001 From: jbjohnso Date: Mon, 6 Aug 2012 21:04:24 +0000 Subject: [PATCH] Fixes for xcatws git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/trunk@13440 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd --- xCAT-server/xCAT-wsapi/xcatws.cgi | 77 ++++++++++++++++++++++--------- 1 file changed, 56 insertions(+), 21 deletions(-) diff --git a/xCAT-server/xCAT-wsapi/xcatws.cgi b/xCAT-server/xCAT-wsapi/xcatws.cgi index 22d95ff33..638bef793 100755 --- a/xCAT-server/xCAT-wsapi/xcatws.cgi +++ b/xCAT-server/xCAT-wsapi/xcatws.cgi @@ -166,7 +166,7 @@ sub fetchParameter { my @pairs = split(/&/, $parstr); foreach my $pair (@pairs) { - my ($key, $value) = split(/=/, $pair); + my ($key, $value) = split(/=/, $pair, 2); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/chr(hex($1))/eg; push @{$queryhash{$key}}, $value; @@ -796,7 +796,7 @@ sub nodesHandler { } elsif (isPut()) { my $subResource; - my $entries; + my @entries; if (defined $path[2]) { $subResource = $path[2]; @@ -807,19 +807,32 @@ sub nodesHandler { $request->{noderange} = $noderange; unless ($q->param('PUTDATA')) { - addPageContent("No set attribute was supplied."); - sendResponseMsg($STATUS_BAD_REQUEST); + #temporary allowance for the put data to be contained in the queryString + unless ($queryhash{'putData'}) { + addPageContent("No set attribute was supplied."); + sendResponseMsg($STATUS_BAD_REQUEST); + } + else { + foreach my $put (@{$queryhash{'putData'}}) { + my ($key, $value) = split(/=/, $put, 2); + if ($key eq 'field' && $value) { + push @entries, $value; + } + } + } + + } else { - $entries = decode_json $q->param('PUTDATA'); - if (scalar(@$entries) < 1) { + @entries = decode_json $q->param('PUTDATA'); + if (scalar(@entries) < 1) { addPageContent("No set attribute was supplied."); sendResponseMsg($STATUS_BAD_REQUEST); } } if (($subResource ne "dsh") && ($subResource ne "dcp")) { - foreach (@$entries) { + foreach (@entries) { push @args, $_; } } @@ -841,7 +854,7 @@ sub nodesHandler { elsif ($subResource eq "dsh") { $request->{command} = "xdsh"; my %elements; - extractData(\%elements, $entries); + extractData(\%elements, @entries); if (defined($elements{'devicetype'})) { push @args, '--devicetype'; push @args, $elements{'devicetype'}; @@ -908,7 +921,7 @@ sub nodesHandler { elsif ($subResource eq "dcp") { $request->{command} = "xdcp"; my %elements; - extractData(\%elements, $entries); + extractData(\%elements, @entries); if (defined($elements{'fanout'})) { push @args, '-f'; push @args, $elements{'fanout'}; @@ -954,7 +967,8 @@ sub nodesHandler { } } else { - sendErrorMessage($STATUS_BAD_REQUEST, "The subResource \'$request->{subResource}\' does not exist"); + #sendErrorMessage($STATUS_BAD_REQUEST, "The subResource \'$request->{subResource}\' does not exist"); + sendResponseMsg($STATUS_BAD_REQUEST, "The subResource \'$request->{subResource}\' does not exist"); } } elsif (isPost()) { @@ -1204,16 +1218,32 @@ sub siteHandler { elsif (isPut()) { $request->{command} = 'chdef'; push @{$request->{arg}}, '-t', 'site', '-o', 'clustersite'; - if ($q->param('PUTDATA')) { - my $entries = decode_json $q->param('PUTDATA'); - foreach (@$entries) { - push @{$request->{arg}}, $_; - } - } - else { - addPageContent("No Field and Value map was supplied."); - sendResponseMsg($STATUS_BAD_REQUEST); - } + unless ($q->param('PUTDATA')) { + #temporary allowance for the put data to be contained in the queryString + unless ($queryhash{'putData'}) { + addPageContent("No set attribute was supplied."); + sendResponseMsg($STATUS_BAD_REQUEST); + } + else { + foreach my $put (@{$queryhash{'putData'}}) { + my ($key, $value) = split(/=/, $put, 2); + if ($key eq 'field' && $value) { + push @{$request->{arg}}, $value; + } + } + } + } else { + if ($q->param('PUTDATA')) { + my $entries = decode_json $q->param('PUTDATA'); + foreach (@$entries) { + push @{$request->{arg}}, $_; + } + } + else { + addPageContent("No Field and Value map was supplied."); + sendResponseMsg($STATUS_BAD_REQUEST); + } + } } else { unsupportedRequestType(); @@ -1756,7 +1786,10 @@ sub wrapData { } #all information were add into the global varibale, call the response funcion - if (isPost()) { + if (exists $data->[0]->{info} && $data->[0]->{info}->[0] =~ /Could not find an object/) { + sendResponseMsg($STATUS_NOT_FOUND); + } + elsif (isPost()) { sendResponseMsg($STATUS_CREATED); } else { @@ -2035,3 +2068,5 @@ sub isAuthenticUser { addPageContent($responses[0]->{error}[0]); sendResponseMsg($STATUS_UNAUTH); } + +