Handle hostnames with upper-case letters
[webmin.git] / fastrpc.cgi
index a583055..c00cb39 100755 (executable)
@@ -4,7 +4,8 @@
 # client. From then on, direct TCP connections can be made to this port
 # to send requests and get replies.
 
-do './web-lib.pl';
+BEGIN { push(@INC, ".."); };
+use WebminCore;
 use POSIX;
 use Socket;
 $force_lang = $default_lang;
@@ -54,7 +55,9 @@ untie(*STDOUT);
 # Accept the TCP connection
 $acptaddr = accept(SOCK, MAIN);
 die "accept failed!" if (!$acptaddr);
-select(SOCK); $| = 1;
+$oldsel = select(SOCK);
+$| = 1;
+select($oldsel);
 
 $rcount = 0;
 while(1) {
@@ -231,8 +234,8 @@ while(1) {
                # execute a function
                print STDERR "fastrpc: call $arg->{'module'}::$arg->{'func'}(",join(",", @{$arg->{'args'}}),")\n" if ($gconfig{'rpcdebug'});
                local @rv;
-               local $main::error_must_die = 1;
                eval {
+                       local $main::error_must_die = 1;
                        @rv = &foreign_call($arg->{'module'},
                                            $arg->{'func'},
                                            @{$arg->{'args'}});
@@ -266,8 +269,14 @@ while(1) {
                        $rv = eval $arg->{'code'};
                        }
                print STDERR "fastrpc: eval $arg->{'module'} $arg->{'code'} done = $rv error = $@\n" if ($gconfig{'rpcdebug'});
-               $rawrv = &serialise_variable(
-                       { 'status' => 1, 'rv' => $rv } );
+               if ($@) {
+                       $rawrv = &serialise_variable(
+                               { 'status' => 0, 'rv' => $@ } );
+                       }
+               else {
+                       $rawrv = &serialise_variable(
+                               { 'status' => 1, 'rv' => $rv } );
+                       }
                }
        elsif ($arg->{'action'} eq 'quit') {
                print STDERR "fastrpc: quit\n" if ($gconfig{'rpcdebug'});