Handle hostnames with upper-case letters
[webmin.git] / ftelnet / index.cgi
1 #!/usr/local/bin/perl
2 # Starts the flash policy server on port 843, then outputs an HTML page that
3 # references the flash object
4
5 BEGIN { push(@INC, ".."); };
6 use WebminCore;
7 use Socket;
8 &init_config();
9
10 # Work out host and port
11 $host = $ENV{'HTTP_HOST'};
12 $host =~ s/\:\d+$//;
13 $telnetport = $config{'telnetport'} || 23;
14
15 # Check for telnet
16 &open_socket($host, $telnetport, TEST, \$err);
17 $err && &error(&text('index_etelnet', $telnetport));
18 close(TEST);
19
20 # Start the policy file server on port 843
21 $port = 843;
22 $proto = getprotobyname('tcp');
23 socket(MAIN, PF_INET, SOCK_STREAM, $proto) ||
24         &error(&text('index_esocket', "$!"));
25 setsockopt(MAIN, SOL_SOCKET, SO_REUSEADDR, pack("l", 1));
26 bind(MAIN, sockaddr_in($port, INADDR_ANY)) ||
27         &error(&text('index_eport', $port));
28 listen(MAIN, SOMAXCONN);
29
30 # Fork the process that will accept the connection
31 $pid = fork();
32 if (!$pid) {
33         $rmask = undef;
34         vec($rmask, fileno(MAIN), 1) = 1;
35         $sel = select($rmask, undef, undef, 10);
36         exit(1) if ($sel <= 0);
37         accept(SOCK, MAIN);
38         close(MAIN);
39         select(SOCK); $| = 1;
40         $header = "<policy-file-request/>\000";
41         read(SOCK, $buf, length($header));
42         $buf eq $header || die "Invalid message $buf";
43         print SOCK <<EOF;
44 <?xml version="1.0"?>
45 <!DOCTYPE cross-domain-policy SYSTEM "/xml/dtds/cross-domain-policy.dtd">
46 <cross-domain-policy>
47 <site-control permitted-cross-domain-policies="master-only"/>
48 <allow-access-from domain="$host" to-ports="$telnetport" />
49 </cross-domain-policy>
50 EOF
51         close(SOCK);
52         exit(0);
53         }
54 close(MAIN);
55
56 # Output HTML for the flash object
57 $rows = $config{'rows'} || 25;
58 $cols = $config{'cols'} || 80;
59 $headhtml = <<EOF;
60 <script type="text/javascript">
61 var flashvars = {};
62 flashvars.AutoConnect = 1;
63 flashvars.BitsPerSecond = 115200;
64 flashvars.Blink = 1;
65 flashvars.BorderStyle = "Ubuntu1004";
66 flashvars.CodePage = "437";
67 flashvars.Enter = "\\r";
68 flashvars.FontHeight = 16;
69 flashvars.FontWidth = 9;
70 flashvars.ScreenColumns = $cols;
71 flashvars.ScreenRows = $rows;
72 flashvars.SendOnConnect = "";
73 flashvars.ServerHostName = "$host";
74 flashvars.ServerName = "Webmin";
75 flashvars.ServerPort = $telnetport;
76 flashvars.SocketPolicyPort = $port;
77 </script>
78 <script type="text/javascript" src="swfobject.js"></script>
79 <script type="text/javascript" src="fTelnet.js"></script>
80 EOF
81
82 &ui_print_header(undef, $text{'index_title'}, "", undef, 1, 1, 0, undef, $headhtml);
83
84 print <<EOF;
85 <div id="divfTelnet">
86     <p>fTelnet is loading.  If you don't see it in a few seconds, you may need Adobe Flash Player version 10.0.0 or greater installed.</p>
87     <a href="http://get.adobe.com/flashplayer/"><img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash player" border="0" /></a> 
88 </div>
89 EOF
90
91 &ui_print_footer("/", $text{'index'});