Handle hostnames with upper-case letters
[webmin.git] / usermin / clone_mod.cgi
1 #!/usr/local/bin/perl
2 # clone_mod.cgi
3 # Clone an existing usermin module under a new name
4
5 require './usermin-lib.pl';
6 &ReadParse();
7 &error_setup($text{'clone_err'});
8 $access{'umods'} || &error($text{'acl_ecannot'});
9
10 # Symlink the code directory
11 &get_usermin_miniserv_config(\%miniserv);
12 $src = $in{'mod'};
13 %minfo = &get_usermin_module_info($src);
14 $count = 2;
15 do {
16         $dst = $src.$count;
17         $count++;
18         } while(-d "$miniserv{'root'}/$dst");
19 &symlink_logged($src, "$miniserv{'root'}/$dst") ||
20         &error(&text('clone_elink', $!));
21
22 # Copy the config directory
23 mkdir("$config{'usermin_dir'}/$dst", 0755);
24 $out = &backquote_logged("( (cd $config{'usermin_dir'}/$src ; tar cf - .) | (cd $config{'usermin_dir'}/$dst ; tar xpf -) ) 2>&1");
25 if ($?) {
26         &error(&text('clone_ecopy', $out));
27         }
28 $in{'desc'} = &text('clone_desc', $minfo{'desc'}) if (!$in{'desc'});
29 &open_tempfile(CLONE, ">$config{'usermin_dir'}/$dst/clone");
30 &print_tempfile(CLONE, "desc=$in{'desc'}\n");
31 &close_tempfile(CLONE);
32
33 # Grant access to the clone to this user
34 &read_usermin_acl(undef, \%acl);
35 @mods = &unique(@{$acl{"user"}}, $dst);
36 &save_usermin_acl("user", \@mods);
37
38 if ($in{'cat'} ne '*') {
39         # Assign to category
40         &lock_file("$config{'usermin_dir'}/webmin.cats");
41         &read_file("$config{'usermin_dir'}/webmin.cats", \%cats);
42         $cats{$dst} = $in{'cat'};
43         &write_file("$config{'usermin_dir'}/webmin.cats", \%cats);
44         &unlock_file("$config{'usermin_dir'}/webmin.cats");
45         }
46
47 &webmin_log("clone", undef, $in{'mod'}, { 'desc' => $minfo{'desc'},
48                                           'dst' => $dst,
49                                           'dstdesc' => $in{'desc'} });
50 &redirect("");
51