Handle hostnames with upper-case letters
[webmin.git] / grub / save_title.cgi
1 #!/usr/local/bin/perl
2 # save_title.cgi
3 # Save a boot menu option
4
5 require './grub-lib.pl';
6 &ReadParse();
7 &lock_file($config{'menu_file'});
8 $conf = &get_menu_config();
9 if (!$in{'new'}) {
10         $old = $title = $conf->[$in{'idx'}];
11         }
12 &error_setup($text{'title_err'});
13
14 if ($in{'delete'}) {
15         # Just delete the title
16         &save_directive($conf, $title, undef);
17         }
18 else {
19         # validate inputs
20         $in{'title'} =~ /\S/ || &error($text{'title_etitle'});
21         $in{'root_mode'} != 1 || $in{'other'} =~ /^\S+$/ ||
22                 &error($text{'title_eroot'});
23         $in{'boot_mode'} != 2 || $in{'kernel'} =~ /\S/ ||
24                 &error($text{'title_ekernel'});
25         $in{'boot_mode'} != 1 || $in{'chain_def'} || $in{'chain'} =~ /\S/ ||
26                 &error($text{'title_echain'});
27         $in{'initrd_def'} || $in{'initrd'} =~ /\S/ ||
28                 &error($text{'title_einitrd'});
29
30         # store inputs in title structure
31         $title->{'name'} = 'title';
32         $title->{'value'} = $in{'title'};
33         local $r = $in{'noverify'} ? "rootnoverify" : "root";
34         delete($title->{'root'});
35         delete($title->{'rootnoverify'});
36         if ($in{'root_mode'} == 1) {
37                 $title->{$r} = $in{'other'};
38                 }
39         elsif ($in{'root_mode'} == 2) {
40                 $root = &linux_to_bios($in{'root'});
41                 $root || &error(&text('title_edev', $in{'root'}));
42                 $title->{$r} = $root;
43                 }
44         delete($title->{'kernel'});
45         delete($title->{'chainloader'});
46         delete($title->{'initrd'});
47         delete($title->{'module'});
48         if ($in{'boot_mode'} == 2) {
49                 $title->{'kernel'} = $in{'kernel'};
50                 $title->{'kernel'} .= " $in{'args'}" if ($in{'args'});
51                 $title->{'initrd'} = $in{'initrd'} if (!$in{'initrd_def'});
52                 if ($in{'module'} =~ /\S/) {
53                         $title->{'module'} =
54                                 join("\0", split(/\r?\n/, $in{'module'}));
55                         }
56                 }
57         elsif ($in{'boot_mode'} == 1) {
58                 $title->{'chainloader'} = $in{'chain_def'} ? '+1'
59                                                            : $in{'chain'};
60                 }
61         if ($in{'makeactive'}) {
62                 $title->{'makeactive'} = "";
63                 }
64         else {
65                 delete($title->{'makeactive'});
66                 }
67         if ($in{'lock'}) {
68                 $title->{'lock'} = "";
69                 }
70         else {
71                 delete($title->{'lock'});
72                 }
73
74         # create or update the title
75         &save_directive($conf, $old, $title);
76         }
77
78 &flush_file_lines($config{'menu_file'});
79 &unlock_file($config{'menu_file'});
80 &webmin_log($in{'new'} ? 'create' : $in{'delete'} ? 'delete' : 'modify',
81             'title', undef, $title);
82 &redirect("");
83