) {
+ if (/^(\S+):\s+<(.*)>/ && $1 eq $disk->{'short'}) {
+ $disk->{'model'} = $2;
+ }
+ elsif (/^(\S+):\s+(\d+)(\S+)\s+\((\d+)\s+(\d+)\s+byte\s+sectors/ &&
+ $1 eq $disk->{'short'}) {
+ $disk->{'sectorsize'} = $5;
+ $disk->{'size'} = &string_to_size("$2 $3");
+ }
+ }
+ close(DMESG);
+
+ # Get slices within partitions
+ # XXX
+ }
+
+return @rv;
+}
+
+# string_to_size(str)
+# Convert a string like 100 Meg to a number in bytes
+sub string_to_size
+{
+my ($str) = @_;
+my ($n, $pfx) = split(/\s+/, $str);
+if ($pfx =~ /^b/i) {
+ return $n;
+ }
+if ($pfx =~ /^k/i) {
+ return $n * 1024;
+ }
+if ($pfx =~ /^m/i) {
+ return $n * 1024 * 1024;
+ }
+if ($pfx =~ /^g/i) {
+ return $n * 1024 * 1024 * 1024;
+ }
+if ($pfx =~ /^t/i) {
+ return $n * 1024 * 1024 * 1024 * 1024;
+ }
+return undef;
+}
+
1;
diff --git a/bsdfdisk/index.cgi b/bsdfdisk/index.cgi
new file mode 100644
index 000000000..9336135df
--- /dev/null
+++ b/bsdfdisk/index.cgi
@@ -0,0 +1,38 @@
+#!/usr/local/bin/perl
+# Show a list of disks
+
+use strict;
+use warnings;
+require './bsdfdisk-lib.pl';
+our (%in, %text, %config, $module_name);
+
+&ui_print_header(undef, $text{'index_title'}, "", undef, 1, 1, 0);
+
+my $err = &check_fdisk();
+if ($err) {
+ &ui_print_endpage(&text('index_problem', $err));
+ }
+
+my @disks = &list_disks_partitions();
+@disks = sort { $a->{'device'} cmp $b->{'device'} } @disks;
+if (@disks) {
+ print &ui_columns_start([ $text{'index_dname'},
+ $text{'index_dsize'},
+ $text{'index_dmodel'},
+ $text{'index_dparts'} ]);
+ foreach my $d (@disks) {
+ print &ui_columns_row([
+ "".&html_escape($d->{'device'})."",
+ &nice_size($d->{'size'}),
+ $d->{'model'},
+ scalar(@{$d->{'parts'}}),
+ ]);
+ }
+ print &ui_columns_end();
+ }
+else {
+ print "$text{'index_none'} \n";
+ }
+
+&ui_print_footer("/", $text{'index'});
diff --git a/bsdfdisk/lang/en b/bsdfdisk/lang/en
index 62c24279f..01d963290 100644
--- a/bsdfdisk/lang/en
+++ b/bsdfdisk/lang/en
@@ -1 +1,8 @@
index_title=Partitions on Local Disks
+index_ecmd=The required command $1 is missing
+index_problem=This module cannot be used : $1
+index_none=No disks were found on this system!
+index_dname=Disk name
+index_dsize=Total size
+index_dmodel=Make and model
+index_dparts=Partitions
diff --git a/gray-theme/bsdfdisk b/gray-theme/bsdfdisk
new file mode 120000
index 000000000..7764e2b6b
--- /dev/null
+++ b/gray-theme/bsdfdisk
@@ -0,0 +1 @@
+../blue-theme/bsdfdisk
\ No newline at end of file
diff --git a/software/ports-lib.pl b/software/ports-lib.pl
index 761ab2a74..95e8eeb4a 100644
--- a/software/ports-lib.pl
+++ b/software/ports-lib.pl
@@ -111,6 +111,7 @@ return $name eq "apache" ? "apache22 ap22-mod_.*" :
$name eq "openssh" ? "openssh-portable" :
$name eq "postgresql" ? "postgresql-server" :
$name eq "openldap" ? "openldap-server openldap-client" :
+ $name eq "samba" ? "samba36 samba36-nmblookup samba36-smbclient" :
$name;
}