X7ROOT File Manager
Current Path:
/usr/libexec/usermin/fetchmail
usr
/
libexec
/
usermin
/
fetchmail
/
📁
..
📄
CHANGELOG
(298 B)
📄
check.cgi
(1.54 KB)
📄
check.pl
(2.47 KB)
📄
config
(49 B)
📄
config.info
(218 B)
📄
config.info.ca
(249 B)
📄
config.info.cs
(103 B)
📄
config.info.de
(119 B)
📄
config.info.nl
(238 B)
📄
config.info.no
(231 B)
📄
defaultacl
(7 B)
📄
edit_cron.cgi
(1.95 KB)
📄
edit_global.cgi
(2.72 KB)
📄
edit_poll.cgi
(7.16 KB)
📄
fetchmail-lib.pl
(8.02 KB)
📁
images
📄
index.cgi
(1.57 KB)
📁
lang
📄
module.info
(198 B)
📄
module.info.af
(0 B)
📄
module.info.af.auto
(165 B)
📄
module.info.ar
(0 B)
📄
module.info.ar.auto
(212 B)
📄
module.info.be
(0 B)
📄
module.info.be.auto
(255 B)
📄
module.info.bg
(0 B)
📄
module.info.bg.auto
(242 B)
📄
module.info.ca
(39 B)
📄
module.info.ca.auto
(147 B)
📄
module.info.cs
(39 B)
📄
module.info.cs.auto
(147 B)
📄
module.info.da
(0 B)
📄
module.info.da.auto
(166 B)
📄
module.info.de
(152 B)
📄
module.info.el
(0 B)
📄
module.info.el.auto
(357 B)
📄
module.info.es
(0 B)
📄
module.info.es.auto
(194 B)
📄
module.info.eu
(0 B)
📄
module.info.eu.auto
(188 B)
📄
module.info.fa
(0 B)
📄
module.info.fa.auto
(230 B)
📄
module.info.fi
(0 B)
📄
module.info.fi.auto
(165 B)
📄
module.info.fr
(0 B)
📄
module.info.fr.auto
(187 B)
📄
module.info.he
(0 B)
📄
module.info.he.auto
(193 B)
📄
module.info.hr
(0 B)
📄
module.info.hr.auto
(183 B)
📄
module.info.hu
(42 B)
📄
module.info.hu.auto
(150 B)
📄
module.info.it
(0 B)
📄
module.info.it.auto
(173 B)
📄
module.info.ja
(30 B)
📄
module.info.ja.auto
(186 B)
📄
module.info.ko
(0 B)
📄
module.info.ko.auto
(192 B)
📄
module.info.lt
(0 B)
📄
module.info.lt.auto
(200 B)
📄
module.info.lv
(0 B)
📄
module.info.lv.auto
(168 B)
📄
module.info.ms
(0 B)
📄
module.info.ms.auto
(166 B)
📄
module.info.mt
(0 B)
📄
module.info.mt.auto
(165 B)
📄
module.info.nl
(34 B)
📄
module.info.no
(30 B)
📄
module.info.no.auto
(136 B)
📄
module.info.pl
(38 B)
📄
module.info.pl.auto
(138 B)
📄
module.info.pt
(0 B)
📄
module.info.pt.auto
(176 B)
📄
module.info.pt_BR
(0 B)
📄
module.info.pt_BR.auto
(185 B)
📄
module.info.ro
(0 B)
📄
module.info.ro.auto
(170 B)
📄
module.info.ru
(0 B)
📄
module.info.ru.auto
(242 B)
📄
module.info.sk
(0 B)
📄
module.info.sk.auto
(184 B)
📄
module.info.sl
(0 B)
📄
module.info.sl.auto
(170 B)
📄
module.info.sv
(0 B)
📄
module.info.sv.auto
(179 B)
📄
module.info.th
(0 B)
📄
module.info.th.auto
(306 B)
📄
module.info.tr
(0 B)
📄
module.info.tr.auto
(172 B)
📄
module.info.uk
(0 B)
📄
module.info.uk.auto
(282 B)
📄
module.info.ur
(0 B)
📄
module.info.ur.auto
(264 B)
📄
module.info.vi
(0 B)
📄
module.info.vi.auto
(196 B)
📄
module.info.zh
(0 B)
📄
module.info.zh.auto
(150 B)
📄
module.info.zh_TW
(0 B)
📄
module.info.zh_TW.auto
(159 B)
📄
save_cron.cgi
(1.73 KB)
📄
save_global.cgi
(1.53 KB)
📄
save_poll.cgi
(3.33 KB)
📄
start.cgi
(1015 B)
📄
stop.cgi
(730 B)
📁
ulang
Editing: fetchmail-lib.pl
# fetchmail-lib.pl # Functions for parsing fetchmail config files BEGIN { push(@INC, ".."); }; use WebminCore; &init_config(); %access = &get_module_acl(); if ($module_info{'usermin'}) { if ($no_switch_user) { @remote_user_info = getpwnam($remote_user); } else { &switch_to_remote_user(); &create_user_config_dirs(); } $cron_cmd = "$user_module_config_directory/check.pl"; $cron_user = $remote_user; $fetchmail_config = "$remote_user_info[7]/.fetchmailrc"; $can_cron = $config{'can_cron'}; $can_daemon = $config{'can_daemon'}; } else { $cron_cmd = "$module_config_directory/check.pl"; $cron_user = "root"; $fetchmail_config = $config{'config_file'}; $can_cron = $access{'cron'}; $can_daemon = $access{'daemon'}; } # parse_config_file(file, [&global]) # Parses a fetchmail config file into a list of hashes, each representing # one mail server to poll sub parse_config_file { local $lnum = 0; local ($line, @rv, @toks); # Tokenize the file open(FILE, "<".$_[0]); while($line = <FILE>) { $line =~ s/\r|\n//g; $line =~ s/^\s*#.*$//; while($line =~ /^[\s:;,]*"([^"]*)"(.*)$/ || $line =~ /^[\s:;,]*'([^"]*)'(.*)$/ || $line =~ /^[\s:;,]*([^\s:;,]+)(.*)$/) { push(@toks, [ $1, $lnum ]); $line = $2; } $lnum++; } close(FILE); # Split into poll sections @toks = grep { $_->[0] !~ /^(and|with|has|wants|options|here)$/i } @toks; local ($poll, $user, $i); for($i=0; $i<@toks; $i++) { local $t = $toks[$i]; # Server options if ($t->[0] eq 'poll' || $t->[0] eq 'server' || $t->[0] eq 'skip' || $t->[0] eq 'defaults') { # Start of a new poll $poll = { 'line' => $t->[1], 'file' => $_[0], 'index' => scalar(@rv), 'skip' => ($t->[0] eq 'skip'), 'defaults' => ($t->[0] eq 'defaults') }; $poll->{'poll'} = $toks[++$i]->[0] if (!$poll->{'defaults'}); undef($user); push(@rv, $poll); } elsif ($t->[0] eq 'proto' || $t->[0] eq 'protocol') { $poll->{'proto'} = $toks[++$i]->[0]; } elsif ($t->[0] eq 'via') { $poll->{'via'} = $toks[++$i]->[0]; } elsif ($t->[0] eq 'port') { $poll->{'port'} = $toks[++$i]->[0]; } elsif ($t->[0] eq 'timeout') { $poll->{'timeout'} = $toks[++$i]->[0]; } elsif ($t->[0] eq 'interface') { $poll->{'interface'} = $toks[++$i]->[0]; } elsif ($t->[0] eq 'monitor') { $poll->{'monitor'} = $toks[++$i]->[0]; } elsif ($t->[0] eq 'auth' || $t->[0] eq 'authenticate') { $poll->{'auth'} = $toks[++$i]->[0]; } # User options elsif ($t->[0] eq 'user' || $t->[0] eq 'username') { $user = { 'user' => $toks[++$i]->[0] }; push(@{$poll->{'users'}}, $user); } elsif ($t->[0] eq 'pass' || $t->[0] eq 'password') { $user->{'pass'} = $toks[++$i]->[0]; } elsif ($t->[0] eq 'is' || $t->[0] eq 'to') { $i++; while($i < @toks && $toks[$i]->[1] == $t->[1]) { push(@{$user->{'is'}}, $toks[$i]->[0]); $i++; } $i--; } elsif ($t->[0] eq 'folder') { $user->{'folder'} = $toks[++$i]->[0]; } elsif ($t->[0] eq 'keep') { $user->{'keep'} = 1; } elsif ($t->[0] eq 'nokeep') { $user->{'keep'} = 0; } elsif ($t->[0] eq 'no' && $toks[$i+1]->[0] eq 'keep') { $user->{'keep'} = 0; $i++; } elsif ($t->[0] eq 'fetchall') { $user->{'fetchall'} = 1; } elsif ($t->[0] eq 'nofetchall') { $user->{'fetchall'} = 0; } elsif ($t->[0] eq 'no' && $toks[$i+1]->[0] eq 'fetchall') { $user->{'fetchall'} = 0; $i++; } elsif ($t->[0] eq 'ssl') { $user->{'ssl'} = 1; } elsif ($t->[0] eq 'nossl') { $user->{'ssl'} = 0; } elsif ($t->[0] eq 'no' && $toks[$i+1]->[0] eq 'ssl') { $user->{'ssl'} = 0; $i++; } elsif ($t->[0] eq 'preconnect') { $user->{'preconnect'} = $toks[++$i]->[0]; } elsif ($t->[0] eq 'postconnect') { $user->{'postconnect'} = $toks[++$i]->[0]; } else { # Found an unknown option! if ($user) { push(@{$user->{'unknown'}}, $t->[0]); } elsif ($poll) { push(@{$poll->{'unknown'}}, $t->[0]); } } if ($poll) { if ($i<@toks) { $poll->{'eline'} = $toks[$i]->[1]; } else { $poll->{'eline'} = $toks[$#toks]->[1]; } } } return @rv; } # create_poll(&poll, file) # Add a new poll section to a fetchmail config file sub create_poll { local $lref = &read_file_lines($_[1]); if ($_[0]->{'defaults'}) { # Put a new defaults section at the top splice(@$lref, 0, 0, &poll_lines($_[0])); } else { push(@$lref, &poll_lines($_[0])); } &flush_file_lines(); } # delete_poll(&poll, file) # Delete a poll section from a fetchmail config file sub delete_poll { local $lref = &read_file_lines($_[1]); splice(@$lref, $_[0]->{'line'}, $_[0]->{'eline'} - $_[0]->{'line'} + 1); &flush_file_lines(); } # modify_poll(&poll, file) # Modify a poll section in a fetchmail config file sub modify_poll { local $lref = &read_file_lines($_[1]); splice(@$lref, $_[0]->{'line'}, $_[0]->{'eline'} - $_[0]->{'line'} + 1, &poll_lines($_[0])); &flush_file_lines(); } sub poll_lines { local @rv; local $name = $_[0]->{'poll'}; $name = "\"$name\"" if ($name =~ /[\s:;,]/); if ($_[0]->{'skip'}) { push(@rv, "skip $name"); } elsif ($_[0]->{'defaults'}) { push(@rv, "defaults $name"); } else { push(@rv, "poll $name"); } push(@rv, "\tproto $_[0]->{'proto'}") if ($_[0]->{'proto'}); push(@rv, "\tauth $_[0]->{'auth'}") if ($_[0]->{'auth'}); push(@rv, "\tvia $_[0]->{'via'}") if ($_[0]->{'via'}); push(@rv, "\tport $_[0]->{'port'}") if ($_[0]->{'port'}); push(@rv, "\ttimeout $_[0]->{'timeout'}") if ($_[0]->{'timeout'}); push(@rv, "\tinterface \"$_[0]->{'interface'}\"") if ($_[0]->{'interface'}); push(@rv, "\tmonitor $_[0]->{'monitor'}") if ($_[0]->{'monitor'}); push(@rv, "\t".join(" ", map { /^\S+$/ ? $_ : "\"$_\"" } @{$_[0]->{'unknown'}})) if (@{$_[0]->{'unknown'}}); foreach $u (@{$_[0]->{'users'}}) { push(@rv, "\tuser \"$u->{'user'}\""); push(@rv, "\tpass \"$u->{'pass'}\"") if ($u->{'pass'}); push(@rv, "\tis ".join(" ", @{$u->{'is'}})) if (@{$u->{'is'}}); push(@rv, "\tfolder $u->{'folder'}") if ($u->{'folder'}); push(@rv, "\tkeep") if ($u->{'keep'} eq '1'); push(@rv, "\tnokeep") if ($u->{'keep'} eq '0'); push(@rv, "\tfetchall") if ($u->{'fetchall'} eq '1'); push(@rv, "\tno fetchall") if ($u->{'fetchall'} eq '0'); push(@rv, "\tssl") if ($u->{'ssl'} eq '1'); push(@rv, "\tno ssl") if ($u->{'ssl'} eq '0'); push(@rv, "\tpreconnect \"$u->{'preconnect'}\"") if ($u->{'preconnect'}); push(@rv, "\tpostconnect \"$u->{'postconnect'}\"") if ($u->{'postconnect'}); push(@rv, "\t".join(" ", map { /^\S+$/ ? $_ : "\"$_\"" } @{$u->{'unknown'}})) if (@{$u->{'unknown'}}); } return @rv; } # can_edit_user(user) sub can_edit_user { local %umap; map { $umap{$_}++; } split(/\s+/, $access{'users'}); if ($access{'mode'} == 1 && !$umap{$_[0]} || $access{'mode'} == 2 && $umap{$_[0]}) { return 0; } elsif ($access{'mode'} == 3) { return $remote_user eq $_[0]; } else { return 1; } } # get_fetchmail_version([&out]) sub get_fetchmail_version { local $out = &backquote_command("$config{'fetchmail_path'} -V 2>&1 </dev/null"); ${$_[0]} = $out if ($_[0]); return $out =~ /fetchmail\s+release\s+(\S+)/ ? $1 : undef; } # show_polls(&polls, file, user) sub show_polls { if (@{$_[0]}) { print &ui_columns_start([ $text{'index_poll'}, $text{'index_active'}, $text{'index_proto'}, $text{'index_users'} ], 100); foreach $p (@{$_[0]}) { local @cols; push(@cols, "<a href='edit_poll.cgi?file=$_[1]&". "idx=$p->{'index'}&user=$_[2]'>". &html_escape($p->{'poll'})."</a>"); push(@cols, $p->{'skip'} ? "<font color=#ff0000>$text{'no'}</font>" : $text{'yes'}); push(@cols, $p->{'proto'} ? &html_escape(uc($p->{'proto'})) : $text{'default'}); local $ulist; foreach $u (@{$p->{'users'}}) { $ulist .= sprintf "%s -> %s<br>\n", &html_escape($u->{'user'}), &html_escape(@{$u->{'is'}} ? join(" ", @{$u->{'is'}}) : $_[2]); } push(@cols, $ulist); print &ui_columns_row(\@cols); } print &ui_columns_end(); } local @links = ( &ui_link("edit_poll.cgi?new=1&file=$_[1]&user=$_[2]",$text{'index_add'}), &ui_link("edit_global.cgi?file=$_[1]&user=$_[2]",$text{'index_global'}) ); if (@{$_[0]}) { push(@links, &ui_link("check.cgi?file=$_[1]&user=$_[2]",$text{'index_run'})); } print &ui_links_row(\@links); } 1;
Upload File
Create Folder