/usr/share/usermin
NameSizeModeActions
at/-0755rm
authentic-theme/-0755rm
blue-theme/-0755rm
changepass/-0755rm
chfn/-0755rm
commands/-0755rm
cron/-0755rm
cshrc/-0755rm
fetchmail/-0755rm
filemin/-0755rm
filter/-0755rm
forward/-0755rm
gnupg/-0755rm
gray-theme/-0755rm
htaccess/-0755rm
htaccess-htpasswd/-0755rm
images/-0755rm
lang/-0755rm
language/-0755rm
mailbox/-0755rm
mailcap/-0755rm
man/-0755rm
mysql/-0755rm
plan/-0755rm
postgresql/-0755rm
proc/-0755rm
procmail/-0755rm
quota/-0755rm
schedule/-0755rm
shell/-0755rm
spam/-0755rm
ssh/-0755rm
theme/-0755rm
tunnel/-0755rm
twofactor/-0755rm
ulang/-0755rm
unauthenticated/-0755rm
updown/-0755rm
usermount/-0755rm
vendor_perl/-0755rm
xterm/-0755rm
acl_security.pl29590755editdlrm
chooser.cgi73870755editdlrm
config-aix2270644editdlrm
config-cobalt-linux2640644editdlrm
config-coherent-linux2640644editdlrm
config-corel-linux2640644editdlrm
config-debian-linux2640644editdlrm
config-freebsd2560644editdlrm
config-generic-linux2640644editdlrm
config-gentoo-linux2640644editdlrm
config-hpux2430644editdlrm
config-irix2840644editdlrm
config-lib.pl121200755editdlrm
config-macos2600644editdlrm
config-mandrake-linux2780644editdlrm
config-msc-linux2640644editdlrm
config-netbsd2830644editdlrm
config-open-linux2640644editdlrm
config-openbsd2410644editdlrm
config-openmamba-linux2640644editdlrm
config-openserver2360644editdlrm
config-osf12660644editdlrm
config-redhat-linux2640644editdlrm
config-slackware-linux2800644editdlrm
config-sol-linux2640644editdlrm
config-solaris4170644editdlrm
config-suse-linux2640644editdlrm
config-trustix-linux2640644editdlrm
config-turbo-linux2640644editdlrm
config-united-linux2640644editdlrm
config-unixware2860644editdlrm
copyconfig.pl44360755editdlrm
date_chooser.cgi22410755editdlrm
deb-name80644editdlrm
defaultacl980644editdlrm
defaulttheme160644editdlrm
entities_map.txt15010644editdlrm
favicon.ico150860644editdlrm
feedback.cgi65190755editdlrm
feedback_form.cgi35330755editdlrm
group_chooser.cgi76900755editdlrm
help.cgi23130755editdlrm
html-editor-lib.pl181470644editdlrm
index.cgi57810755editdlrm
install-module.pl13040755editdlrm
install-type40644editdlrm
javascript-lib.pl150420755editdlrm
lang_list.txt25700644editdlrm
LICENCE15160644editdlrm
LICENCE.ja16540644editdlrm
maketemp.pl4240755editdlrm
mime.types127130644editdlrm
miniserv.pem29690644editdlrm
miniserv.pl1894390755editdlrm
newmods.pl12800755editdlrm
oschooser.pl46550755editdlrm
os_list.txt358250644editdlrm
pam_login.cgi44290755editdlrm
password_change.cgi71920755editdlrm
password_form.cgi13270755editdlrm
perlpath.pl5710755editdlrm
README19720644editdlrm
robots.txt260644editdlrm
session_login.cgi52300755editdlrm
setup.sh268100755editdlrm
switch_user.cgi4040755editdlrm
thirdparty.pl17740755editdlrm
uconfig.cgi14280755editdlrm
uconfig_save.cgi14900755editdlrm
ui-lib.pl1159450755editdlrm
update-from-repo.sh151240755editdlrm
updateboot.pl24290755editdlrm
uptracker.cgi29560755editdlrm
usermin-init19270755editdlrm
usermin-pam1010644editdlrm
usermin-pam-osx2430644editdlrm
usermin-systemd4430644editdlrm
user_chooser.cgi75710755editdlrm
version60644editdlrm
web-lib-funcs.pl4051600755editdlrm
web-lib.pl9070755editdlrm
webmin-search-lib.pl96970755editdlrm
WebminCore.pm88730644editdlrm
webmin_search.cgi26970755editdlrm
Edit: /usr/share/usermin/copyconfig.pl (4436B)
#!/usr/bin/perl # copyconfig.pl # Copy the appropriate config file for each module into the webmin config # directory. If it is already there, merge in new directives. Called with # + @ARGV >= 4 || die "usage: copyconfig.pl [/real-os] [/real-version] [module ...]"; $os = $ARGV[0]; $ver = $ARGV[1]; $wadir = $ARGV[2]; $confdir = $ARGV[3]; ($os, $real_os) = split(/\//, $os); ($ver, $real_ver) = split(/\//, $ver); $real_os =~ s/ /-/g; $real_ver =~ s/ /-/g; # Find all clones opendir(DIR, $wadir); foreach $f (readdir(DIR)) { if (readlink("$wadir/$f")) { @st = stat("$wadir/$f"); push(@{$clone{$st[1]}}, $f); } } closedir(DIR); # For each module, copy its config to itself and all clones @mods = @ARGV[4..$#ARGV]; foreach $m (@mods) { # Find any range-number config files. Search first by real OS type # (ie Ubuntu 6.1), then by internal OS code (ie. debian-linux 3.1) $srcdir = "$wadir/$m"; $rangefile = $real_rangefile = undef; foreach $ov ([ $real_os, $real_ver, \$real_rangefile ], [ $os, $ver, \$rangefile ]) { my ($o, $v, $rf) = @$ov; opendir(DIR, $srcdir); while($f = readdir(DIR)) { if ($f =~ /^config\-\Q$o\E\-([0-9\.]+)\-([0-9\.]+)$/ && $v >= $1 && $v <= $2) { $$rf = "$srcdir/$f"; } elsif ($f =~ /^config\-\Q$o\E\-([0-9\.]+)\-(\*|ALL)$/ && $v >= $1) { $$rf = "$srcdir/$f"; } elsif ($f =~ /^config\-\Q$o\E\-(\*|ALL)\-([0-9\.]+)$/ && $v <= $2) { $$rf = "$srcdir/$f"; } } closedir(DIR); } # Find the best-matching config file. Search first by real OS type, # then by internal OS code # Check for real OS match by name and version, version range, or # name only if (-r "$srcdir/config-$real_os-$real_ver") { $conf = "$srcdir/config-$real_os-$real_ver"; } elsif ($real_rangefile) { $conf = $real_rangefile; } elsif (-r "$srcdir/config-$real_os") { $conf = "$srcdir/config-$real_os"; } # Check for OS code match by name and version, version range, or name elsif (-r "$srcdir/config-$os-$ver") { $conf = "$srcdir/config-$os-$ver"; } elsif ($rangefile) { $conf = $rangefile; } elsif (-r "$srcdir/config-$os") { $conf = "$srcdir/config-$os"; } # Check for config for an entire OS class, like *-linux elsif ($os =~ /^(\S+)-(\S+)$/ && -r "$srcdir/config-ALL-$2") { $conf = "$srcdir/config-ALL-$2"; } elsif ($os =~ /^(\S+)-(\S+)$/ && -r "$srcdir/config-*-$2") { $conf = "$srcdir/config-*-$2"; } # Use default config file, if it exists elsif (-r "$srcdir/config") { $conf = "$srcdir/config"; } else { $conf = "/dev/null"; } @st = stat($srcdir); @copyto = ( @{$clone{$st[1]}}, $m ); foreach $c (@copyto) { if (!-d "$confdir/$c") { # New module .. need to create config dir mkdir("$confdir/$c", 0755); push(@newmods, $c); } undef(%oldconf); undef(%newconf); &read_file("$confdir/$c/config", \%oldconf); &read_file($conf, \%newconf); foreach $k (keys %oldconf) { $newconf{$k} = $oldconf{$k}; } &write_file("$confdir/$c/config", \%newconf); } } print join(" ", @newmods),"\n"; # read_file(file, &hash, [&order], [lowercase], [split-char]) # Fill the given hash reference with name=value pairs from a file. sub read_file { my ($file, $hash, $order, $lowercase, $split) = @_; $split = "=" if (!defined($split)); open(ARFILE, $file) || return 0; local $_; while() { s/\r|\n//g; my $cmt = index($_, "#"); my $eq = index($_, $split); if ($cmt != 0 && $eq >= 0) { my $n = substr($_, 0, $eq); my $v = substr($_, $eq+1); chomp($v); $hash->{$lowercase ? lc($n) : $n} = $v; push(@$order, $n) if ($order); } } close(ARFILE); return 1; } # write_file(file, &data-hash, [join-char]) # Write out the contents of a hash as name=value lines. sub write_file { my ($file, $data_hash, $join_char) = @_; my (%old, @order); my $join = defined($join_char) ? $join_char : "="; &read_file($file, \%old, \@order); open(ARFILE, ">$file") || die "open of $file failed : $!"; my %done; foreach $k (@order) { if (exists($data_hash->{$k}) && !$done{$k}++) { (print ARFILE $k,$join,$data_hash->{$k},"\n") || die "write to $file failed : $!"; } } foreach $k (keys %{$data_hash}) { if (!exists($old{$k}) && !$done{$k}++) { (print ARFILE $k,$join,$data_hash->{$k},"\n") || die "write to $file failed : $!"; } } close(ARFILE); }