Handle hostnames with upper-case letters
[webmin.git] / fdisk / edit_disk.cgi
1 #!/usr/local/bin/perl
2 # Show the partitions on a single disk
3
4 require './fdisk-lib.pl';
5 &ReadParse();
6 &can_edit_disk($in{'device'}) || &error($text{'disk_ecannot'});
7 $extwidth = 300;
8
9 # Get the disk
10 @disks = &list_disks_partitions();
11 ($d) = grep { $_->{'device'} eq $in{'device'} } @disks;
12 $d || &error($text{'disk_egone'});
13 @parts = @{$d->{'parts'}};
14 &ui_print_header($d->{'desc'}, $text{'disk_title'}, "");
15
16 # Work out links to add partitions
17 foreach $p (@parts) {
18         $usedpri++ if ($p->{'number'} <= 4);
19         $extended++ if ($p->{'extended'});
20         if ($p->{'end'} > $d->{'cylinders'}) {
21                 $d->{'cylinders'} = $p->{'end'};
22                 }
23         if (!$p->{'extended'} && $stat[2] &&
24             &indexof($p->{'type'}, @space_type) >= 0 &&
25             (@space = &disk_space($p->{'device'}, $stat[0])) &&
26             $space[0]) {
27                 $p->{'free'} = sprintf "%d %%\n", 100 * $space[1] / $space[0];
28                 $anyfree++;
29                 }
30         }
31 if ($usedpri != 4) {
32         push(@edlinks, "<a href=\"edit_part.cgi?disk=$d->{'index'}&new=1\">".
33                        $text{'index_addpri'}."</a>");
34         }
35 if ($extended) {
36         push(@edlinks, "<a href=\"edit_part.cgi?disk=$d->{'index'}&new=2\">".
37                        $text{'index_addlog'}."</a>");
38         }
39 elsif ($usedpri != 4 && &supports_extended()) {
40         push(@edlinks, "<a href=\"edit_part.cgi?disk=$d->{'index'}&new=3\">".
41                         $text{'index_addext'}."</a>");
42         }
43
44 # Show brief disk info
45 @info = ( );
46 if ($d->{'cylsize'}) {
47         push(@info, &text('disk_dsize', &nice_size($d->{'cylinders'}*$d->{'cylsize'})));
48         }
49 if ($d->{'model'}) {
50         push(@info, &text('disk_model', $d->{'model'}));
51         }
52 push(@info, &text('disk_cylinders', $d->{'cylinders'}));
53 if ($d->{'table'}) {
54         push(@info, &text('disk_table', uc($d->{'table'})));
55         }
56 print &ui_links_row(\@info),"<p>\n";
57
58 # Show table of partitions, if any
59 if (@parts) {
60         print &ui_links_row(\@edlinks);
61         @tds = ( "width=5%", "width=10%", "width=45%", "width=5%", "width=5%", "width=5%", "width=15%", "width=10%" );
62         @tds = map { "nowrap $_" } @tds;
63         print &ui_columns_start([ $text{'disk_no'},
64                                   $text{'disk_type'},
65                                   $text{'disk_extent'},
66                                   $text{'disk_size'},
67                                   $text{'disk_start'},
68                                   $text{'disk_end'},
69                                   $text{'disk_use'},
70                                   $anyfree ? ( $text{'disk_free'} ) : ( ),
71                                  ], 100, 0, \@tds);
72         foreach $p (@parts) {
73                 $url = "edit_part.cgi?disk=$d->{'index'}&part=$p->{'index'}";
74
75                 # Create extent images
76                 $ext = "";
77                 $ext .= sprintf "<img src=images/gap.gif height=10 width=%d>",
78                         $extwidth*($p->{'start'} - 1) /
79                         $d->{'cylinders'};
80                 $ext .= sprintf "<img src=images/%s.gif height=10 width=%d>",
81                         $p->{'extended'} ? "ext" : "use",
82                         $extwidth*($p->{'end'} - $p->{'start'}) /
83                         $d->{'cylinders'};
84                 $ext .= sprintf "<img src=images/gap.gif height=10 width=%d>",
85                   $extwidth*($d->{'cylinders'} - ($p->{'end'} - 1)) /
86                             $d->{'cylinders'};
87
88                 # Work out usage
89                 @stat = &device_status($p->{'device'});
90                 $stat = "";
91                 $statdesc = $stat[0] =~ /^swap/ ? "<i>$text{'disk_vm'}</i>"
92                                                 : "<tt>$stat[0]</tt>";
93                 if ($stat[1] eq 'raid') {
94                         $stat = $statdesc;
95                         }
96                 elsif ($stat[1] eq 'lvm') {
97                         if (&foreign_available("lvm")) {
98                                 $stat = "<a href='../lvm/'>".
99                                         "LVM VG $statdesc</a>";
100                                 }
101                         else {
102                                 $stat = "LVM VG $statdesc";
103                                 }
104                         }
105                 elsif ($stat[0] && !&foreign_available("mount")) {
106                         $stat = $statdesc;
107                         }
108                 elsif ($stat[0] && $stat[3] == -1) {
109                         $stat = "<a href='../mount/edit_mount.cgi?".
110                                 "index=$stat[4]&temp=1&return=/$module_name/'>".
111                                 "$statdesc</a>";
112                         }
113                 elsif ($stat[0]) {
114                         $stat = "<a href='../mount/edit_mount.cgi?".
115                                 "index=$stat[3]&return=/$module_name/'>".
116                                 "$statdesc</a>";
117                         }
118
119                 print &ui_columns_row([
120                         "<a href='$url'>$p->{'number'}</a>",
121                         "<a href='$url'>".($p->{'extended'} ?
122                           $text{'extended'} : &tag_name($p->{'type'}))."</a>",
123                         $ext,
124                         $d->{'cylsize'} ? &nice_size(($p->{'end'} - $p->{'start'} + 1) * $d->{'cylsize'}) : &text('edit_blocks', $p->{'blocks'}),
125                         $p->{'start'},
126                         $p->{'end'},
127                         $stat,
128                         $anyfree ? ( $p->{'free'} ) : ( ),
129                         ], \@tds);
130                         
131                 }
132         print &ui_columns_end();
133         }
134 else {
135         print "<b>$text{'disk_none'}</b><p>\n";
136         }
137 print &ui_links_row(\@edlinks);
138
139 # Buttons for IDE params and SMART
140 print &ui_hr();
141 print &ui_buttons_start();
142 if (&supports_hdparm($d)) {
143         print &ui_buttons_row("edit_hdparm.cgi", $text{'index_hdparm'},
144                               $text{'index_hdparmdesc'},
145                               &ui_hidden("disk", $d->{'index'}));
146         }
147 if (&supports_smart($d)) {
148         print &ui_buttons_row("../smart-status/index.cgi", $text{'index_smart'},
149                               $text{'index_smartdesc'},
150                               &ui_hidden("drive", $d->{'device'}));
151         }
152 if (&supports_relabel($d)) {
153         print &ui_buttons_row("edit_relabel.cgi", $text{'index_relabel'},
154                               $text{'index_relabeldesc'},
155                               &ui_hidden("device", $d->{'device'}));
156         }
157 print &ui_buttons_end();
158
159 &ui_print_footer("", $text{'index_return'});
160