Handle hostnames with upper-case letters
[webmin.git] / uptracker.cgi
index 3a76fc7..14d1ecf 100755 (executable)
@@ -1,21 +1,22 @@
 #!/usr/local/bin/perl
 # Output Javascript in a loop to track an upload
-# XXX add to more modules
 
-require './web-lib.pl';
+BEGIN { push(@INC, ".."); };
+use WebminCore;
+
+$trust_unknown_referers = 1;
 &init_config();
-do './ui-lib.pl';
 &ReadParse();
 $id = $in{'id'};
 $id || &error($text{'uptracker_eid'});
-$id !~ /\.\./ && $id !~ /\0/ || &error($text{'uptracker_eid2'});
+$id =~ /^[a-z0-9_]+$/i || &error($text{'uptracker_eid2'});
 
 &popup_header($text{'uptracker_title'}, undef,
              "onunload='if (!window.doneupload) { opener.stop() }'");
 $| = 1;
 
 # Output text boxes that get updated with filenames and progress
-$ff = "style='font-family: courier'";
+$ff = "style='font-family: courier,monospace'";
 print "<form>\n";
 print "<center><table>\n";
 print "<tr> <td><b>$text{'uptracker_file'}</b></td>\n";
@@ -41,9 +42,21 @@ else {
 print "<script>\n";
 print "window.doneupload = 1;\n";
 print "</script>\n";
+$start = time();
 while(1) {
        sleep(1);
-       open(UPFILE, $upfile) || next;
+       $now = time();
+       if (!open(UPFILE, $upfile)) {
+               # Doesn't exist yet
+               if ($now - $start > 60) {
+                       # Give up after 60 seconds
+                       print "<script>\n";
+                       print "document.forms[0].pc.value = \"Not started\";\n";
+                       print "</script>\n";
+                       last;
+                       }
+               next;
+               }
        @lines = <UPFILE>;
        chop(@lines);
        close(UPFILE);
@@ -58,7 +71,6 @@ while(1) {
                }
 
        # Check if there has been no activity for 60 seconds
-       $now = time();
        if ($size == $last_size) {
                if ($last_time && $last_time < $now-60) {
                        # Too slow! Give up