forked from webmin/webmin
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathinstall-module.pl
executable file
·70 lines (65 loc) · 1.54 KB
/
install-module.pl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#!/usr/local/bin/perl
# install-module.pl
# Install a single module file
# Check arguments
$nodeps = 0;
if ($ARGV[0] eq "--nodeps") {
shift(@ARGV);
$nodeps = 1;
}
while($ARGV[0] eq "--acl") {
shift(@ARGV);
push(@grant, shift(@ARGV));
}
if (@ARGV > 2 || !@ARGV) {
die "usage: install-module.pl [--nodeps] [--acl user]* <module.wbm> [config_directory]";
}
$file = $ARGV[0];
$config = $ARGV[1] ? $ARGV[1] : "/etc/webmin";
-r $file || die "$file does not exist";
open(CONF, "$config/miniserv.conf") ||
die "Failed to read $config/miniserv.conf - maybe $config is not a Webmin config directory";
while(<CONF>) {
s/\r|\n//g;
if (/^root=(.*)/) {
$root = $1;
}
}
close(CONF);
-d $root || die "Webmin directory $root does not exist";
chop($var = `cat $config/var-path`);
if ($file !~ /^\//) {
chop($pwd = `pwd`);
$file = "$pwd/$file";
}
# Set up webmin environment
push(@INC, ".", $root);
$ENV{'WEBMIN_CONFIG'} = $config;
$ENV{'WEBMIN_VAR'} = $var;
$no_acl_check++;
chdir($root);
$0 = "$root/install-module.pl";
eval "use WebminCore;";
&init_config();
# Install it, using the standard function
&foreign_require("webmin", "webmin-lib.pl");
if (@grant) {
$newusers = \@grant;
}
else {
$newusers = &webmin::get_newmodule_users();
$newusers ||= [ "root", "admin" ];
}
$rv = &webmin::install_webmin_module($file, 0, $nodeps, $newusers);
if (ref($rv)) {
for($i=0; $i<@{$rv->[0]}; $i++) {
printf "Installed %s in %s (%d kb)\n",
$rv->[0]->[$i],
$rv->[1]->[$i],
$rv->[2]->[$i];
}
}
else {
$rv =~ s/<[^>]+>//g;
print STDERR "Install failed : $rv\n";
}