Handle hostnames with upper-case letters
[webmin.git] / software / rpmfind.cgi
1 #!/usr/local/bin/perl
2 # rpmfind.cgi
3 # Display a search window for rpmfind.net
4
5 require './software-lib.pl';
6 &ReadParse();
7
8 $rpmfind_host = "rpmfind.net";
9 $rpmfind_port = 80;
10 $rpmfind_page = "/linux/rpm2html/search.php?query=";
11
12 &header();
13 print <<EOF;
14 <script>
15 function sel(m)
16 {
17 window.opener.ifield.value = m;
18 window.close();
19 return false;
20 }
21 </script>
22 EOF
23
24 # Search form
25 print &ui_form_start("rpmfind.cgi");
26 print &ui_submit($text{'rpm_search'});
27 print &ui_textbox("search", $in{'search'}, 20);
28 print &ui_form_end();
29
30 if ($in{'search'}) {
31         # Call the rpmfind.net website to get matches
32         print &ui_hr();
33         $out = "";
34         &http_download($rpmfind_host, $rpmfind_port,
35                        $rpmfind_page.&urlize($in{'search'}), \$out);
36         while($out =~ /<tr[^>]*>.*?<td[^>]*>([^<]*)<\/td>.*?<td[^>]*>([^<]*)<\/td>.*?((ftp|http|https):[^>]+\.rpm).*?<\/tr>([\000-\377]*)/i) {
37                 local $pkg = { 'url' => $3,
38                                'dist' => $2,
39                                'desc' => $1 };
40                 $out = $5;
41                 $pkg->{'source'}++ if ($pkg->{'url'} =~ /\.src\.rpm$/ ||
42                                        $pkg->{'url'} =~ /\.srpm$/);
43                 if ($pkg->{'url'} =~ /\/(([^\/]+)-([^\-\/]+)-([^-\/]+).([^-\/]+)\.rpm)$/) {
44                         $pkg->{'file'} = $1;
45                         $pkg->{'prefix'} = $2;
46                         $pkg->{'version'} = $3;
47                         $pkg->{'release'} = $4;
48                         $pkg->{'arch'} = $5;
49                         if ($pkg->{'version'} =~ /^(\d+)\.([0-9\.]+)$/){
50                                 local ($v1 = $1, $v2 = $2);
51                                 $v2 =~ s/\.//g;
52                                 $pkg->{'version'} = "$v1.$v2";
53                                 }
54                         }
55                 elsif ($pkg->{'file'} =~ /\/([^\/]+)$/) {
56                         $pkg->{'file'} = $1;
57                         }
58                 push(@rv, $pkg);
59                 }
60
61         # Show the search results
62         @rv = grep { !$_->{'source'} } @rv;
63         @rv = sort { local $vc = $b->{'version'} <=> $a->{'version'};
64                      local $rc = $b->{'version'} <=> $a->{'version'};
65                      return $vc ? $vc : $rc } @rv;
66         if (@rv) {
67                 print "<table width=100%>\n";
68                 print &ui_columns_start([ $text{'rpm_findrpm'},
69                                           $text{'rpm_finddistro'},
70                                           $text{'rpm_finddesc'} ], 100);
71                 foreach $r (@rv) {
72                         print &ui_columns_row([
73                                 "<a href='' onClick='sel(\"$r->{'url'}\")'>".
74                                  "$r->{'file'}</a>",
75                                 $r->{'dist'},
76                                 $r->{'desc'}
77                                 ]);
78                         }
79                 print &ui_columns_end();
80                 }
81         else {
82                 print "<b>$text{'rpm_none'}</b> <p>\n";
83                 }
84         }
85
86 &ui_print_footer();
87