#!/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] = <<EOF; Content-Type: text/plain Content-Transfer-Encoding: 7bit Name: $in{'name'} Email address: $in{'email'} Date: $date Webmin version: $ver Perl version: $] Module: $module Browser: $ENV{'HTTP_USER_AGENT'} EOF if ($in{'os'}) { $uname = `uname -a`; $attach[0] .= <<EOF; OS from webmin: $gconfig{'real_os_type'} $gconfig{'real_os_version'} OS code: $gconfig{'os_type'} $gconfig{'os_version'} Uname output: $uname EOF } $attach[0] .= "\n".$in{'text'}."\n"; if ($in{'config'} && !$gconfig{'nofeedbackconfig'}) { # Check if this user has full rights to the module $access{'feedback'} >= 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 = <FILE>; 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), "<tt>$in{'mailserver'}</tt>"),"\n"; } elsif ($sent == 2) { print &text('feedback_prog', join(",", @tolist), "<tt>$sendmail</tt>"),"\n"; } else { print &text('feedback_via', join(",", @tolist), "<tt>localhost</tt>"),"\n"; } print "<p>\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; }
Name | Type | Size | Permission | Actions |
---|---|---|---|---|
acl | Folder | 0755 |
|
|
adsl-client | Folder | 0755 |
|
|
apache | Folder | 0755 |
|
|
at | Folder | 0755 |
|
|
authentic-theme | Folder | 0755 |
|
|
backup-config | Folder | 0755 |
|
|
bacula-backup | Folder | 0755 |
|
|
bandwidth | Folder | 0755 |
|
|
bin | Folder | 0755 |
|
|
bind8 | Folder | 0755 |
|
|
blue-theme | Folder | 0755 |
|
|
change-user | Folder | 0755 |
|
|
cluster-copy | Folder | 0755 |
|
|
cluster-cron | Folder | 0755 |
|
|
cluster-passwd | Folder | 0755 |
|
|
cluster-shell | Folder | 0755 |
|
|
cluster-software | Folder | 0755 |
|
|
cluster-useradmin | Folder | 0755 |
|
|
cluster-usermin | Folder | 0755 |
|
|
cluster-webmin | Folder | 0755 |
|
|
cpan | Folder | 0755 |
|
|
cron | Folder | 0755 |
|
|
custom | Folder | 0755 |
|
|
dfsadmin | Folder | 0755 |
|
|
dhcpd | Folder | 0755 |
|
|
dovecot | Folder | 0755 |
|
|
exim | Folder | 0755 |
|
|
exports | Folder | 0755 |
|
|
fail2ban | Folder | 0755 |
|
|
fdisk | Folder | 0755 |
|
|
fetchmail | Folder | 0755 |
|
|
filemin | Folder | 0755 |
|
|
filter | Folder | 0755 |
|
|
firewall | Folder | 0755 |
|
|
firewall6 | Folder | 0755 |
|
|
firewalld | Folder | 0755 |
|
|
fsdump | Folder | 0755 |
|
|
gray-theme | Folder | 0755 |
|
|
grub | Folder | 0755 |
|
|
heartbeat | Folder | 0755 |
|
|
htaccess-htpasswd | Folder | 0755 |
|
|
idmapd | Folder | 0755 |
|
|
images | Folder | 0755 |
|
|
inetd | Folder | 0755 |
|
|
init | Folder | 0755 |
|
|
inittab | Folder | 0755 |
|
|
ipfilter | Folder | 0755 |
|
|
ipfw | Folder | 0755 |
|
|
ipsec | Folder | 0755 |
|
|
iscsi-client | Folder | 0755 |
|
|
iscsi-server | Folder | 0755 |
|
|
iscsi-target | Folder | 0755 |
|
|
iscsi-tgtd | Folder | 0755 |
|
|
jabber | Folder | 0755 |
|
|
krb5 | Folder | 0755 |
|
|
lang | Folder | 0755 |
|
|
ldap-client | Folder | 0755 |
|
|
ldap-server | Folder | 0755 |
|
|
ldap-useradmin | Folder | 0755 |
|
|
logrotate | Folder | 0755 |
|
|
logviewer | Folder | 0755 |
|
|
lpadmin | Folder | 0755 |
|
|
lvm | Folder | 0755 |
|
|
mailboxes | Folder | 0755 |
|
|
mailcap | Folder | 0755 |
|
|
man | Folder | 0755 |
|
|
mon | Folder | 0755 |
|
|
mount | Folder | 0755 |
|
|
mysql | Folder | 0755 |
|
|
net | Folder | 0755 |
|
|
nis | Folder | 0755 |
|
|
openslp | Folder | 0755 |
|
|
package-updates | Folder | 0755 |
|
|
pam | Folder | 0755 |
|
|
pap | Folder | 0755 |
|
|
passwd | Folder | 0755 |
|
|
phpini | Folder | 0755 |
|
|
postfix | Folder | 0755 |
|
|
postgresql | Folder | 0755 |
|
|
ppp-client | Folder | 0755 |
|
|
pptp-client | Folder | 0755 |
|
|
pptp-server | Folder | 0755 |
|
|
proc | Folder | 0755 |
|
|
procmail | Folder | 0755 |
|
|
proftpd | Folder | 0755 |
|
|
qmailadmin | Folder | 0755 |
|
|
quota | Folder | 0755 |
|
|
raid | Folder | 0755 |
|
|
samba | Folder | 0755 |
|
|
sarg | Folder | 0755 |
|
|
sendmail | Folder | 0755 |
|
|
servers | Folder | 0755 |
|
|
shell | Folder | 0755 |
|
|
shorewall | Folder | 0755 |
|
|
shorewall6 | Folder | 0755 |
|
|
smart-status | Folder | 0755 |
|
|
smf | Folder | 0755 |
|
|
software | Folder | 0755 |
|
|
spam | Folder | 0755 |
|
|
squid | Folder | 0755 |
|
|
sshd | Folder | 0755 |
|
|
status | Folder | 0755 |
|
|
stunnel | Folder | 0755 |
|
|
syslog | Folder | 0755 |
|
|
syslog-ng | Folder | 0755 |
|
|
system-status | Folder | 0755 |
|
|
tcpwrappers | Folder | 0755 |
|
|
time | Folder | 0755 |
|
|
tunnel | Folder | 0755 |
|
|
unauthenticated | Folder | 0755 |
|
|
updown | Folder | 0755 |
|
|
useradmin | Folder | 0755 |
|
|
usermin | Folder | 0755 |
|
|
vendor_perl | Folder | 0755 |
|
|
vgetty | Folder | 0755 |
|
|
webalizer | Folder | 0755 |
|
|
webmin | Folder | 0755 |
|
|
webmincron | Folder | 0755 |
|
|
webminlog | Folder | 0755 |
|
|
wuftpd | Folder | 0755 |
|
|
xinetd | Folder | 0755 |
|
|
xterm | Folder | 0755 |
|
|
LICENCE | File | 1.48 KB | 0644 |
|
LICENCE.ja | File | 1.62 KB | 0644 |
|
README.md | File | 4.25 KB | 0644 |
|
WebminCore.pm | File | 7.85 KB | 0644 |
|
acl_security.pl | File | 4.51 KB | 0755 |
|
changepass.pl | File | 868 B | 0755 |
|
chooser.cgi | File | 7.21 KB | 0755 |
|
config-aix | File | 227 B | 0644 |
|
config-cobalt-linux | File | 264 B | 0644 |
|
config-coherent-linux | File | 264 B | 0644 |
|
config-corel-linux | File | 264 B | 0644 |
|
config-debian-linux | File | 264 B | 0644 |
|
config-freebsd | File | 256 B | 0644 |
|
config-generic-linux | File | 264 B | 0644 |
|
config-gentoo-linux | File | 264 B | 0644 |
|
config-hpux | File | 243 B | 0644 |
|
config-irix | File | 284 B | 0644 |
|
config-lib.pl | File | 10.82 KB | 0755 |
|
config-macos | File | 260 B | 0644 |
|
config-mandrake-linux | File | 278 B | 0644 |
|
config-msc-linux | File | 264 B | 0644 |
|
config-netbsd | File | 283 B | 0644 |
|
config-open-linux | File | 264 B | 0644 |
|
config-openbsd | File | 241 B | 0644 |
|
config-openmamba-linux | File | 264 B | 0644 |
|
config-openserver | File | 236 B | 0644 |
|
config-osf1 | File | 266 B | 0644 |
|
config-pardus-linux | File | 264 B | 0644 |
|
config-redhat-linux | File | 264 B | 0644 |
|
config-slackware-linux | File | 280 B | 0644 |
|
config-sol-linux | File | 264 B | 0644 |
|
config-solaris | File | 417 B | 0644 |
|
config-suse-linux | File | 264 B | 0644 |
|
config-syno-linux | File | 364 B | 0644 |
|
config-trustix-linux | File | 264 B | 0644 |
|
config-turbo-linux | File | 264 B | 0644 |
|
config-united-linux | File | 264 B | 0644 |
|
config-unixware | File | 286 B | 0644 |
|
config-windows | File | 88 B | 0644 |
|
config.cgi | File | 1.55 KB | 0755 |
|
config_save.cgi | File | 1.64 KB | 0755 |
|
copyconfig.pl | File | 4.33 KB | 0755 |
|
create-module.pl | File | 3.82 KB | 0755 |
|
date_chooser.cgi | File | 2.19 KB | 0755 |
|
deb-name | File | 7 B | 0644 |
|
defaultacl | File | 98 B | 0644 |
|
defaulttheme | File | 16 B | 0644 |
|
entities_map.txt | File | 1.47 KB | 0644 |
|
fastrpc.cgi | File | 10.18 KB | 0755 |
|
favicon.ico | File | 14.73 KB | 0644 |
|
feedback.cgi | File | 6.37 KB | 0755 |
|
feedback_form.cgi | File | 3.45 KB | 0755 |
|
group_chooser.cgi | File | 7.36 KB | 0755 |
|
help.cgi | File | 2.94 KB | 0755 |
|
index.cgi | File | 5.61 KB | 0755 |
|
install-module.pl | File | 1.54 KB | 0755 |
|
install-type | File | 4 B | 0644 |
|
javascript-lib.pl | File | 14.69 KB | 0755 |
|
lang_list.txt | File | 3.41 KB | 0644 |
|
maketemp.pl | File | 424 B | 0755 |
|
mime.types | File | 12.42 KB | 0644 |
|
miniserv.pem | File | 2.9 KB | 0644 |
|
miniserv.pl | File | 179.71 KB | 0755 |
|
module_chooser.cgi | File | 4.14 KB | 0755 |
|
newmods.pl | File | 1.25 KB | 0755 |
|
os_list.txt | File | 34.18 KB | 0644 |
|
oschooser.pl | File | 4.55 KB | 0755 |
|
pam_login.cgi | File | 2.83 KB | 0755 |
|
password_change.cgi | File | 7 KB | 0755 |
|
password_form.cgi | File | 1.3 KB | 0755 |
|
perlpath.pl | File | 571 B | 0755 |
|
record-failed.pl | File | 503 B | 0755 |
|
record-login.pl | File | 513 B | 0755 |
|
record-logout.pl | File | 516 B | 0755 |
|
robots.txt | File | 26 B | 0644 |
|
rpc.cgi | File | 4 KB | 0755 |
|
run-postinstalls.pl | File | 1 KB | 0755 |
|
run-uninstalls.pl | File | 1004 B | 0755 |
|
safeacl | File | 44 B | 0644 |
|
session_login.cgi | File | 3.55 KB | 0755 |
|
setup-repos.sh | File | 4.66 KB | 0755 |
|
setup.bat | File | 3.09 KB | 0644 |
|
setup.pl | File | 30.33 KB | 0755 |
|
setup.sh | File | 32.06 KB | 0755 |
|
switch_skill.cgi | File | 293 B | 0755 |
|
switch_user.cgi | File | 404 B | 0755 |
|
thirdparty.pl | File | 1.73 KB | 0755 |
|
ui-lib.pl | File | 82.8 KB | 0755 |
|
update-from-repo.sh | File | 14.8 KB | 0755 |
|
uptracker.cgi | File | 2.88 KB | 0755 |
|
user_chooser.cgi | File | 7.29 KB | 0755 |
|
version | File | 6 B | 0644 |
|
web-lib-funcs.pl | File | 356.13 KB | 0755 |
|
web-lib.pl | File | 907 B | 0755 |
|
webmin-daemon | File | 80 B | 0644 |
|
webmin-init | File | 1.93 KB | 0755 |
|
webmin-pam | File | 101 B | 0644 |
|
webmin-search-lib.pl | File | 9.42 KB | 0755 |
|
webmin-systemd | File | 371 B | 0644 |
|
webmin_search.cgi | File | 2.63 KB | 0755 |
|
xmlrpc.cgi | File | 7.53 KB | 0755 |
|