/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/feedback.cgi (6519B)
#!/usr/bin/perl # Send the webmin feedback form BEGIN { push(@INC, "."); }; use WebminCore; &init_config(); if (&get_product_name() eq 'usermin') { &switch_to_remote_user(); } &ReadParseMime(); &error_setup($text{'feedback_err'}); %access = &get_module_acl(); $access{'feedback'} || &error($text{'feedback_ecannot'}); # Construct the email body $in{'text'} =~ s/\r//g; $date = localtime(time()); $ver = &get_webmin_version(); if ($in{'name'} && $in{'email'}) { $from = "$in{'name'} <$in{'email'}>"; $email = $in{'email'}; } elsif ($in{'email'}) { $email = $from = $in{'email'}; } else { $email = $from = "feedback\@".&get_system_hostname(); } local $m = $in{'module'}; $m || !$in{'config'} || &error($text{'feedback_emodule'}); &check_os_support($m) && $m !~ /\.\./ || &error($text{'feedback_emodule2'}); if ($m) { %minfo = &get_module_info($m); $ver .= " (Module: $minfo{'version'})" if ($minfo{'version'}); $module = "$m ($minfo{'desc'})"; } else { $module = "None"; } if ($gconfig{'nofeedbackcc'}) { @tolist = ( $gconfig{'feedback_to'} || $minfo{'feedback'} || $webmin_feedback_address ); } else { @tolist = split(/\s+/, $in{'to'}); } @tolist || &error($text{'feedback_enoto'}); foreach $t (@tolist) { $headers .= "To: $t\n"; } $headers .= "From: $from\n"; $headers .= "Subject: $text{'feedback_title'}\n"; $attach[0] = <= 2 || &error($text{'feedback_ecannot2'}); local %uacl = &get_module_acl(undef, $m); local %defacl; local $mdir = &module_root_directory($m); &read_file("$mdir/defaultacl", \%defacl); if ($access{'feedback'} != 3) { foreach $k (keys %uacl) { if ($defacl{$k} ne $uacl{$k}) { &error($text{'feedback_econfig'}); } } } # Attach all the text file from the module's config local %mconfig = &foreign_config($m); if (keys %mconfig) { local $a; $a .= "Content-Type: text/plain; name=\"config\"\n"; $a .= "Content-Transfer-Encoding: 7bit\n"; $a .= "\n"; foreach $k (keys %mconfig) { $a .= "$k=$mconfig{$k}\n"; } push(@attach, $a); } # Find out what config files the module uses local @files; if (-r "$mdir/feedback_files.pl") { # Ask the module for it's files &foreign_require($m, "feedback_files.pl"); @files = &foreign_call($m, "feedback_files", $m); } # Use all the path in the config foreach $k (keys %mconfig) { push(@files, $mconfig{$k}) if ($mconfig{$k} =~ /^\//); } @files = &unique(@files); # Attach those config files that are plain text (less than 5% # non-ascii characters). Also skip logfiles. foreach $f (@files) { next if (!$f || -d $f); next if ($f =~ /\/var\/log\//); local $/ = undef; open(FILE, "<$f") || next; local $data = ; close(FILE); local $count = ($data =~ tr/[\000-\176]/[\000-\176]/); if (!length($data) || 100*$count / length($data) > 95) { # File is text local $a; local $sf = &short_name($f); $a .= "Content-Type: text/plain; name=\"$sf\"\n"; $a .= "Content-Transfer-Encoding: 7bit\n"; $a .= "\n"; $a .= $data; push(@attach, $a); } } } # Include uploaded attached files foreach $u ('attach0', 'attach1') { if ($in{$u} ne '') { local $a; local $name = &short_name($in{"${u}_filename"}); local $type = $in{"${u}_content_type"}; $type = &guess_mime_type($name) if (!$type); $a .= "Content-type: $type; name=\"$name\"\n"; $a .= "Content-Transfer-Encoding: base64\n"; $a .= "\n\n"; $a .= &encode_base64($in{$u}); push(@attach, $a); } } # Build the MIME email $bound = "bound".time(); $mail = $headers; $mail .= "Content-Type: multipart/mixed; boundary=\"$bound\"\n"; $mail .= "MIME-Version: 1.0\n"; $mail .= "\n"; $mail .= "This is a multi-part message in MIME format.\n"; foreach $a (@attach) { $mail .= "\n--".$bound."\n"; $mail .= $a; } $mail .= "\n--".$bound."--\n"; if (!$in{'mailserver_def'}) { $ok = &send_via_smtp($in{'mailserver'}); $sent = 3 if ($ok); } if (!$sent) { # Try to send the email by calling sendmail -t %sconfig = &foreign_config("sendmail"); $sendmail = $sconfig{'sendmail_path'} ? $sconfig{'sendmail_path'} : &has_command("sendmail"); if (-x $sendmail && open(MAIL, "| $sendmail -t")) { print MAIL $mail; if (close(MAIL)) { $sent = 2; } } } if (!$sent) { # Try to connect to a local SMTP server $ok = &send_via_smtp("localhost"); $sent = 1 if ($ok); } if ($sent) { # Tell the user that it was sent OK &ui_print_header(undef, $text{'feedback_title'}, "", undef, 0, 1); if ($sent == 3) { print &text('feedback_via', join(",", @tolist), "$in{'mailserver'}"),"\n"; } elsif ($sent == 2) { print &text('feedback_prog', join(",", @tolist), "$sendmail"),"\n"; } else { print &text('feedback_via', join(",", @tolist), "localhost"),"\n"; } print "

\n"; &ui_print_footer("/", $text{'index'}); # Save settings in config $gconfig{'feedback_name'} = $in{'name'}; $gconfig{'feedback_email'} = $in{'email'}; $gconfig{'feedback_mailserver'} = $in{'mailserver_def'} ? undef : $in{'mailserver'}; &write_file("$config_directory/config", \%gconfig); } else { # Give up! Tell the user .. &error($text{'feedback_esend'}); } sub send_via_smtp { local $error; &open_socket($_[0], 25, MAIL, \$error); return 0 if ($error); &smtp_command(MAIL) || return 0; &smtp_command(MAIL, "helo ".&get_system_hostname()."\r\n") || return 0; &smtp_command(MAIL, "mail from: <$email>\r\n") || return 0; foreach $t (@tolist) { &smtp_command(MAIL, "rcpt to: <$t>\r\n") || return 0; } &smtp_command(MAIL, "data\r\n"); $mail =~ s/\r//g; $mail =~ s/\n/\r\n/g; print MAIL $mail; &smtp_command(MAIL, ".\r\n"); &smtp_command(MAIL, "quit\r\n"); close(MAIL); return 1; } # smtp_command(handle, command) sub smtp_command { local ($m, $c) = @_; print $m $c; local $r = <$m>; return $r =~ /^[23]\d+/; } sub short_name { $_[0] =~ /([^\\\/]+)$/; return $1; }