php IHDR w Q )Ba pHYs sRGB gAMA a IDATxMk\U s&uo,mD )Xw+e?tw.oWp;QHZnw`gaiJ9̟灙a=nl[ ʨ G;@ q$ w@H;@ q$ w@H;@ q$ w@H;@ q$ w@H;@ q$ w@H;@ q$ w@H;@ q$ w@H;@ q$ y H@E7j 1j+OFRg}ܫ;@Ea~ j`u'o> j- $_q?qS XzG'ay
files >> /usr/libexec/webmin/virtual-server/ |
files >> //usr/libexec/webmin/virtual-server/list-resellers.pl |
#!/usr/bin/perl =head1 list-resellers.pl List existing resellers When run with no parameters, this program simply displays a reader-friendly table of existing Virtualmin resellers. The only supported options are C<--multiline>, which causes it to show more details about each reseller in a format suitable for reading by other programs, and C<--name-only> to dump just a list of reseller usernames. =cut package virtual_server; if (!$module_name) { $main::no_acl_check++; $ENV{'WEBMIN_CONFIG'} ||= "/etc/webmin"; $ENV{'WEBMIN_VAR'} ||= "/var/webmin"; if ($0 =~ /^(.*)\/[^\/]+$/) { chdir($pwd = $1); } else { chop($pwd = `pwd`); } $0 = "$pwd/list-resellers.pl"; require './virtual-server-lib.pl'; $< == 0 || die "list-resellers.pl must be run as root"; } use POSIX; # Parse command-line args $owner = 1; while(@ARGV > 0) { local $a = shift(@ARGV); if ($a eq "--multiline") { $multi = 1; } elsif ($a eq "--name-only") { $nameonly = 1; } elsif ($a eq "--name") { $name = shift(@ARGV); } else { &usage("Unknown parameter $a"); } } # Get all resellers @resels = &list_resellers(); @resels = sort { $a->{'name'} cmp $b->{'name'} } @resels; if ($name) { @resels = grep { $_->{'name'} eq $name } @resels; @resels || &usage("No reseller named $name exists"); } # Get counts for each foreach $r (@resels) { my @rdoms = &get_reseller_domains($r); $quota = 0; foreach $d (@rdoms) { $quota += $d->{'quota'}; } $r->{'doms'} = \@rdoms; $r->{'quota'} = $quota; } if ($multi) { # Show attributes on multiple lines $home_bsize = &has_home_quotas() ? "a_bsize("home") : 0; foreach $r (@resels) { $acl = $r->{'acl'}; print "$r->{'name'}\n"; print " Description: $r->{'acl'}->{'desc'}\n"; if ($r->{'acl'}->{'email'}) { print " Email: $r->{'acl'}->{'email'}\n"; } print " Login: ", ($r->{'pass'} =~ /^\!/ ? "Disabled" : "Enabled"),"\n"; foreach $m (@reseller_maxes) { $got = &count_domain_feature($m, @{$r->{'doms'}}); $desc = $m eq "doms" ? "domains" : $m eq "aliasdoms" ? "alias domains" : $m eq "realdoms" ? "real domains" : $m eq "quota" ? "disk quota" : $m eq "mailboxes" ? "mailboxes" : $m eq "bw" ? "bandwidth" : $m eq "dbs" ? "databases" : $m; next if ($m eq "quota" && !$home_bsize); if ($m eq "quota") { $max = $acl->{'max_'.$m}; print " Maximum $desc: ", ($max eq "" ? "Unlimited" : "a_show($max, "home")),"\n"; print " Current $desc: ", ($got < 0 ? "Unlimited" : "a_show($got, "home")),"\n"; print " Maximum byte $desc: ", ($max eq "" ? "Unlimited" : $max * $home_bsize),"\n"; print " Current byte $desc: ", ($got < 0 ? "Unlimited" : $got * $home_bsize),"\n"; } else { print " Maximum $desc: ". ($acl->{'max_'.$m} eq "" ? "Unlimited" : $acl->{'max_'.$m})."\n"; print " Current $desc: $got\n"; } } print " Allowed features: ",join(" ", grep { $acl->{'feature_'.$_} } &list_allowable_features()),"\n"; print " Owned servers: ",join(" ", map { $_->{'dom'} } @{$r->{'doms'}}),"\n"; print " Read-only mode: ",($acl->{'readonly'} ? "Yes" : "No"),"\n"; print " Hide limits from server admins: ",($acl->{'hide'} ? "Yes" : "No"),"\n"; if ($acl->{'subdom'}) { print " Limit virtual servers to domain: ", $acl->{'subdom'},"\n"; } if ($acl->{'logo'}) { print " Logo URL: $acl->{'logo'}\n"; if ($acl->{'link'}) { print " Logo link: $acl->{'link'}\n"; } } if ($acl->{'defip'}) { print " Name-based IP address: $acl->{'defip'}\n"; } if ($acl->{'defip6'}) { print " Name-based IPv6 address: $acl->{'defip6'}\n"; } print " Can select shared IPs: ", ($acl->{'nosharedips'} ? "No" : "Yes"),"\n"; if ($acl->{'defdnsip'}) { print " External IP address: $acl->{'defdnsip'}\n"; } if ($acl->{'defns'}) { print " Custom nameservers: $acl->{'defns'}\n"; } print " Can create plans: ", $acl->{'noplans'} ? "No" : "Yes","\n"; print " Can create and edit resellers: ", $acl->{'createresellers'} ? "Yes" : "No","\n"; print " Can create backups: ", $acl->{'backups'} == 2 ? "Schedule and make" : $acl->{'backups'} == 1 ? "Make only" : "No","\n"; if ($acl->{'ranges'}) { foreach $r (&parse_ip_ranges($acl->{'ranges'})) { print " IPv4 allocation range: ". $r->[0]."-".$r->[1]. ($r->[2] ? "/".$r->[2] : "")."\n"; } } if ($acl->{'ranges6'}) { foreach $r (&parse_ip_ranges($acl->{'ranges6'})) { print " IPv6 allocation range: ". $r->[0]."-".$r->[1]. ($r->[2] ? "/".$r->[2] : "")."\n"; } } } } elsif ($nameonly) { # Just reseller usernames foreach $r (@resels) { print $r->{'name'},"\n"; } } else { # Just show summary table $fmt = "%-15.15s %-30.30s %-15.15s %-15.15s\n"; printf $fmt, "Name", "Description", "Domains", "Quota"; printf $fmt, ("-" x 15), ("-" x 30), ("-" x 15), ("-" x 15); foreach $r (@resels) { $domsmax = $r->{'acl'}->{'max_doms'} ne "" ? "Max ".$r->{'acl'}->{'max_doms'} : "No limit"; $quotamax = $r->{'acl'}->{'max_quota'} ? "Max "."a_show($r->{'acl'}->{'max_quota'}, "home") : "No limit"; printf $fmt, $r->{'name'}, $r->{'acl'}->{'desc'}, scalar(@{$r->{'doms'}})." ($domsmax)", "a_show($r->{'quota'}, "home")." ($quotamax)"; } } sub usage { print "$_[0]\n\n" if ($_[0]); print "Lists the resellers on this system.\n"; print "\n"; print "virtualmin list-resellers [--multiline | --name-only]\n"; print " [--name username]\n"; exit(1); }y~or5J={Eeu磝Qk ᯘG{?+]ן?wM3X^歌>{7پK>on\jy Rg/=fOroNVv~Y+ NGuÝHWyw[eQʨSb> >}Gmx[o[<{Ϯ_qFvM IENDB`