#!/usr/bin/perl # index.cgi # Display a list of all cron jobs, with the username and command for each one require './cron-lib.pl'; &ReadParse(); &ui_print_header(undef, $text{'index_title'}, "", undef, 1, 1); $max_jobs = $userconfig{'max_jobs'} || $config{'max_jobs'}; # Make sure cron is installed (very likely!) $err = &check_cron_config(); if ($err) { print $err,"<p>\n"; &ui_print_footer("/", $text{'index'}); exit; } # Work out which users can be viewed map { $ucan{$_}++ } split(/\s+/, $access{'users'}); @jobs = &list_cron_jobs(); @ulist = &unique(map { $_->{'user'} } @jobs); if ($access{'mode'} == 1) { @ulist = grep { $ucan{$_} } @ulist; } elsif ($access{'mode'} == 2) { @ulist = grep { !$ucan{$_} } @ulist; } elsif ($access{'mode'} == 3) { @ulist = ( $remote_user ); } elsif ($access{'mode'} == 4) { @ulist = grep { local @u = getpwnam($_); (!$access{'uidmin'} || $u[2] >= $access{'uidmin'}) && (!$access{'uidmax'} || $u[2] <= $access{'uidmax'}) } @ulist; } elsif ($access{'mode'} == 5) { @ulist = grep { local @u = getpwnam($_); $u[3] == $access{'users'} } @ulist; } if ($config{'show_run'}) { &foreign_require("proc", "proc-lib.pl"); @procs = &proc::list_processes(); } # Work out creation links @crlinks = ( ); if ($access{'create'}) { push(@crlinks, &ui_link("edit_cron.cgi?new=1&search=". &urlize($in{'search'}), $text{'index_create'}) ); push(@crlinks, &ui_link("edit_env.cgi?new=1&search=". &urlize($in{'search'}), $text{'index_ecreate'}) ) if ($env_support); } if ($config{cron_allow_file} && $config{cron_deny_file} && $access{'allow'}) { push(@crlinks, &ui_link("edit_allow.cgi", $text{'index_allow'}) ); } my @files = &list_cron_files(); if ($access{'mode'} == 0 && @files) { push(@crlinks, &ui_link("edit_manual.cgi", $text{'index_manual'})); } # Build a list of cron job rows to show $single_user = !&supports_users() || (@ulist == 1 && $access{'mode'}); @links = ( &select_all_link("d", 1), &select_invert_link("d", 1), @crlinks ); @rows = ( ); foreach $u (@ulist) { if (!$config{'single_file'}) { # Get the Unix user's real name if ((@uinfo = getpwnam($u)) && $uinfo[5] =~ /\S/) { $uname = "$u ($uinfo[5])"; } else { $uname = $u; } } @jlist = grep { $_->{'user'} eq $u } @jobs; @plist = (); for($i=0; $i<@jlist; $i++) { local $rpd = &is_run_parts($jlist[$i]->{'command'}); local @exp = $rpd ? &expand_run_parts($rpd) : (); if (!$rpd || @exp) { push(@plist, [ $jlist[$i], \@exp ]); } } for($i=0; $i<@plist; $i++) { local $job = $plist[$i]->[0]; &convert_range($job); &convert_comment($job); local @exp = @{$plist[$i]->[1]}; local $idx = $job->{'index'}; local @cols; push(@cols, $idx); $useridx = 0; $cmdidx = 0; if (!$single_user) { $useridx = scalar(@cols); push(@cols, &html_escape($uname)); } push(@cols, $job->{'active'} ? $text{'yes'} : "<font color=#ff0000>$text{'no'}</font>"); $donelink = 0; if ($job->{'name'}) { # An environment variable - show the name only $cmdidx = scalar(@cols); push(@cols, &ui_link("edit_env.cgi?idx=".$idx, "<i>$text{'index_env'}</i> ". "<tt>$job->{'name'} = $job->{'value'}</tt>") ); $donelink = 1; } elsif (@exp && $access{'command'}) { # A multi-part command $cmdidx = scalar(@cols); @exp = map { &html_escape($_) } @exp; push(@cols, &ui_link("edit_cron.cgi?idx=".$idx. "&search=".&urlize($in{'search'}), join("<br>",@exp)) ); $donelink = 1; } elsif ($access{'command'}) { # A simple command $cmdidx = scalar(@cols); local $max = $config{'max_len'} || 10000; local ($cmd, $input) = &extract_input($job->{'command'}); $cmd =~ s/\\%/%/g; $input =~ s/\\%/%/g; $cmd = length($cmd) > $max ? &html_escape(substr($cmd, 0, $max))." ..." : $cmd !~ /\S/ ? "BLANK" : &html_escape($cmd); push(@cols, &ui_link("edit_cron.cgi?idx=".$idx. "&search=".&urlize($in{'search'}), $cmd) ); $donelink = 1; } # Show cron time if (!$access{'command'} || $config{'show_time'} || $userconfig{'show_time'}) { $when = &when_text($job, 1); if ($job->{'name'}) { push(@cols, ""); } elsif ($donelink) { push(@cols, $when); } else { push(@cols, &ui_link( "edit_cron.cgi?idx=".$idx. "&search=".&urlize($in{'search'}), $when) ); } } # Show comment if ($config{'show_comment'} || $userconfig{'show_comment'}) { push(@cols, $job->{'comment'}); } # Show next run time if ($config{'show_next'} || $userconfig{'show_next'}) { my $n = &next_run($job); push(@cols, $n ? &make_date($n) : "<i>$text{'index_nunknown'}</i>"); } # Show running indicator if ($config{'show_run'}) { if ($job->{'name'}) { # An environment variable push(@cols, ""); } else { # Try to find the process local $proc = &find_cron_process($job, \@procs); $txt = $proc ? "<font color=#00aa00>$text{'yes'}</font>" : $text{'no'}; if ($config{'show_run'} == 2 && ($access{'kill'} || !$proc)) { $lnk = $proc ? "kill_cron.cgi?idx=$idx" : "exec_cron.cgi?idx=$idx&bg=1"; push(@cols, &ui_link($lnk, $txt) ); } else { push(@cols, $txt); } } } # Show mover buttons local $prv = $i > 0 ? $plist[$i-1]->[0] : undef; local $nxt = $i != $#plist ? $plist[$i+1]->[0] : undef; if ($access{'move'}) { local $canup = $prv && $prv->{'file'} eq $job->{'file'} && ($job->{'type'} == 0 || $job->{'type'} == 3); local $candown = $nxt && $nxt->{'file'} eq $job->{'file'} && ($job->{'type'} == 0 || $job->{'type'} == 3); local $mover = "move.cgi?search=". &urlize($in{'search'})."&idx=$idx"; push(@cols, &ui_up_down_arrows( "$mover&up=1", "$mover&down=1", $canup, $candown, )); push(@cols, &ui_up_down_arrows( "$mover&top=1", "$mover&bottom=1", $canup, $candown, "images/top.gif", "images/bottom.gif", )); } # Add search colume push(@cols, $job->{'command'}.' '.$job->{'name'}.' '. $job->{'comment'}); push(@rows, \@cols); } } # Limit to search if ($in{'search'}) { @rows = grep { $_->[@$_-1] =~ /\Q$in{'search'}\E/i || $_->[1] =~ /\Q$in{'search'}\E/i } @rows; } # Show search form print &ui_form_start("index.cgi"); print "$text{'index_search'}: \n"; print &ui_textbox("search", $in{'search'}, 20); print &ui_submit($text{'index_ok'}); print &ui_form_end(); # Check if we are over the display limit if ($max_jobs && @rows > $max_jobs && !$in{'search'}) { print "$text{'index_toomany2'}<p>\n"; print &ui_links_row(\@crlinks); } elsif (@rows) { # Show jobs if ($in{'search'}) { print &text('index_searchres', "<i>".&html_escape($in{'search'})."</i>"),"<p>\n"; push(@links, &ui_link("index.cgi", $text{'index_reset'}) ); } print &ui_form_start("delete_jobs.cgi", "post"); print &ui_links_row(\@links); @tds = ( "width=5" ); print &ui_columns_start([ "", $single_user ? ( ) : ( $text{'index_user'} ), $text{'index_active'}, $access{'command'} ? ( $text{'index_command'} ) : ( ), !$access{'command'} || $config{'show_time'} || $userconfig{'show_time'} ? ( $text{'index_when'} ) : ( ), $config{'show_comment'} || $userconfig{'show_comment'} ? ( $text{'index_comment'} ) : ( ), $config{'show_next'} ? ( $text{'index_next'} ) : ( ), $config{'show_run'} ? ( $text{'index_run'} ) : ( ), $access{'move'} ? ( $text{'index_move'}, "" ) : ( ), ], 100, 0, \@tds); foreach my $r (@rows) { print &ui_checked_columns_row([ @$r[1..(@$r-2)] ], \@tds, "d", $r->[0]); } print &ui_columns_end(); print &ui_links_row(\@links); print &ui_form_end([ [ "delete", $text{'index_delete'} ], [ "disable", $text{'index_disable'} ], [ "enable", $text{'index_enable'} ] ]); } else { # Show message if ($in{'search'}) { push(@crlinks, &ui_link("index.cgi", $text{'index_reset'}) ); } print $in{'search'} ? &text('index_esearch', "<i>".&html_escape($in{'search'})."</i>")."<p>" : $module_info{'usermin'} ? "$text{'index_none3'} <p>\n" : $access{'mode'} ? "$text{'index_none2'} <p>\n" : "$text{'index_none'} <p>\n"; print &ui_links_row(\@crlinks); } # If there is an init script that runs crond, show status if (&foreign_available("init")) { &foreign_require("init"); my $init = $config{'init_name'}; my $atboot; if ($access{'stop'} && $init && ($atboot = &init::action_status($init))) { print &ui_hr(); print &ui_buttons_start(); # Running now? my $r = &init::status_action($init); if ($r == 1) { print &ui_buttons_row("stop.cgi", $text{'index_stop'}, $text{'index_stopdesc'}); } elsif ($r == 0) { print &ui_buttons_row("start.cgi", $text{'index_start'}, $text{'index_startdesc'}); } # Start at boot? print &ui_buttons_row("bootup.cgi", $text{'index_boot'}, $text{'index_bootdesc'}, undef, &ui_radio("boot", $atboot == 2 ? 1 : 0, [ [ 1, $text{'yes'} ], [ 0, $text{'no'} ] ])); print &ui_buttons_end(); } } &ui_print_footer("/", $text{'index'});
Name | Type | Size | Permission | Actions |
---|---|---|---|---|
help | Folder | 0755 |
|
|
images | Folder | 0755 |
|
|
lang | Folder | 0755 |
|
|
CHANGELOG | File | 3.06 KB | 0644 |
|
acl_security.pl | File | 2.7 KB | 0755 |
|
backup_config.pl | File | 1.06 KB | 0755 |
|
bootup.cgi | File | 364 B | 0755 |
|
cgi_args.pl | File | 406 B | 0755 |
|
config-aix | File | 506 B | 0644 |
|
config-cobalt-linux | File | 544 B | 0644 |
|
config-coherent-linux | File | 544 B | 0644 |
|
config-corel-linux | File | 562 B | 0644 |
|
config-debian-linux | File | 526 B | 0644 |
|
config-debian-linux-2.1-ALL | File | 580 B | 0644 |
|
config-freebsd | File | 497 B | 0644 |
|
config-generic-linux | File | 544 B | 0644 |
|
config-gentoo-linux | File | 553 B | 0644 |
|
config-hpux | File | 506 B | 0644 |
|
config-irix | File | 513 B | 0644 |
|
config-macos | File | 497 B | 0644 |
|
config-macos-9.2-ALL | File | 501 B | 0644 |
|
config-mandrake-linux | File | 544 B | 0644 |
|
config-msc-linux | File | 544 B | 0644 |
|
config-netbsd | File | 497 B | 0644 |
|
config-open-linux | File | 586 B | 0644 |
|
config-openSUSE-Linux-15.0-ALL | File | 541 B | 0644 |
|
config-openbsd | File | 497 B | 0644 |
|
config-openmamba-linux | File | 544 B | 0644 |
|
config-openserver | File | 497 B | 0644 |
|
config-osf1 | File | 523 B | 0644 |
|
config-pardus-linux | File | 525 B | 0644 |
|
config-redhat-linux | File | 560 B | 0644 |
|
config-slackware-linux | File | 450 B | 0644 |
|
config-sol-linux | File | 541 B | 0644 |
|
config-solaris | File | 484 B | 0644 |
|
config-solaris-11-ALL | File | 486 B | 0644 |
|
config-suse-linux | File | 523 B | 0644 |
|
config-suse-linux-7.0-8.0 | File | 529 B | 0644 |
|
config-suse-linux-8.2-ALL | File | 541 B | 0644 |
|
config-syno-linux | File | 293 B | 0644 |
|
config-trustix-linux | File | 554 B | 0644 |
|
config-turbo-linux | File | 544 B | 0644 |
|
config-united-linux | File | 541 B | 0644 |
|
config-unixware | File | 484 B | 0644 |
|
config-windows | File | 201 B | 0644 |
|
config.info | File | 1.51 KB | 0644 |
|
config.info.bg | File | 2.67 KB | 0644 |
|
config.info.ca | File | 1.76 KB | 0644 |
|
config.info.cs | File | 1.57 KB | 0644 |
|
config.info.de | File | 1.63 KB | 0644 |
|
config.info.es | File | 1.53 KB | 0644 |
|
config.info.fa | File | 1.98 KB | 0644 |
|
config.info.fr | File | 1.52 KB | 0644 |
|
config.info.fr.UTF-8 | File | 1.77 KB | 0644 |
|
config.info.hr | File | 0 B | 0644 |
|
config.info.hu | File | 1.59 KB | 0644 |
|
config.info.hu.UTF-8 | File | 1.87 KB | 0755 |
|
config.info.it | File | 1.34 KB | 0644 |
|
config.info.ja | File | 1.9 KB | 0644 |
|
config.info.ms | File | 1.54 KB | 0644 |
|
config.info.nl | File | 1.61 KB | 0644 |
|
config.info.no | File | 1.52 KB | 0644 |
|
config.info.pl | File | 1.73 KB | 0644 |
|
config.info.pt_BR | File | 1.69 KB | 0644 |
|
config.info.ru | File | 1.37 KB | 0644 |
|
config.info.sk | File | 0 B | 0644 |
|
config.info.sv | File | 792 B | 0644 |
|
config.info.tr | File | 1.02 KB | 0644 |
|
config.info.uk | File | 1.38 KB | 0644 |
|
config.info.zh | File | 687 B | 0644 |
|
config.info.zh_TW | File | 852 B | 0644 |
|
cron-lib.pl | File | 46.19 KB | 0755 |
|
cron_editor.pl | File | 599 B | 0755 |
|
defaultacl | File | 91 B | 0644 |
|
delete_cron.cgi | File | 409 B | 0755 |
|
delete_env.cgi | File | 399 B | 0755 |
|
delete_jobs.cgi | File | 1.11 KB | 0755 |
|
edit_allow.cgi | File | 1.01 KB | 0755 |
|
edit_cron.cgi | File | 4.09 KB | 0755 |
|
edit_env.cgi | File | 1.87 KB | 0755 |
|
edit_manual.cgi | File | 1015 B | 0755 |
|
exec_cron.cgi | File | 2.05 KB | 0755 |
|
feedback_files.pl | File | 319 B | 0755 |
|
index.cgi | File | 9 KB | 0755 |
|
install_check.pl | File | 393 B | 0755 |
|
kill_cron.cgi | File | 1.04 KB | 0755 |
|
log_parser.pl | File | 1.25 KB | 0755 |
|
module.info | File | 251 B | 0644 |
|
module.info.af | File | 0 B | 0644 |
|
module.info.af.auto | File | 98 B | 0644 |
|
module.info.ar | File | 0 B | 0644 |
|
module.info.ar.auto | File | 133 B | 0644 |
|
module.info.be | File | 0 B | 0644 |
|
module.info.be.auto | File | 162 B | 0644 |
|
module.info.bg | File | 0 B | 0644 |
|
module.info.bg.auto | File | 183 B | 0644 |
|
module.info.ca | File | 85 B | 0644 |
|
module.info.ca.auto | File | 23 B | 0644 |
|
module.info.cs | File | 36 B | 0644 |
|
module.info.cs.auto | File | 85 B | 0644 |
|
module.info.da | File | 0 B | 0644 |
|
module.info.da.auto | File | 93 B | 0644 |
|
module.info.de | File | 105 B | 0644 |
|
module.info.de.auto | File | 21 B | 0644 |
|
module.info.el | File | 0 B | 0644 |
|
module.info.el.auto | File | 203 B | 0644 |
|
module.info.es | File | 35 B | 0644 |
|
module.info.es.auto | File | 76 B | 0644 |
|
module.info.eu | File | 0 B | 0644 |
|
module.info.eu.auto | File | 111 B | 0644 |
|
module.info.fa | File | 0 B | 0644 |
|
module.info.fa.auto | File | 149 B | 0644 |
|
module.info.fi | File | 0 B | 0644 |
|
module.info.fi.auto | File | 109 B | 0644 |
|
module.info.fr | File | 21 B | 0644 |
|
module.info.fr.auto | File | 81 B | 0644 |
|
module.info.he | File | 0 B | 0644 |
|
module.info.he.auto | File | 133 B | 0644 |
|
module.info.hr | File | 0 B | 0644 |
|
module.info.hr.auto | File | 112 B | 0644 |
|
module.info.hu | File | 140 B | 0644 |
|
module.info.hu.UTF-8 | File | 131 B | 0644 |
|
module.info.hu.auto | File | 23 B | 0644 |
|
module.info.it | File | 32 B | 0644 |
|
module.info.it.auto | File | 74 B | 0644 |
|
module.info.ja | File | 44 B | 0644 |
|
module.info.ja.auto | File | 86 B | 0644 |
|
module.info.ko | File | 30 B | 0644 |
|
module.info.ko.auto | File | 91 B | 0644 |
|
module.info.lt | File | 0 B | 0644 |
|
module.info.lt.auto | File | 133 B | 0644 |
|
module.info.lv | File | 0 B | 0644 |
|
module.info.lv.auto | File | 122 B | 0644 |
|
module.info.ms | File | 75 B | 0644 |
|
module.info.ms.auto | File | 22 B | 0644 |
|
module.info.mt | File | 0 B | 0644 |
|
module.info.mt.auto | File | 114 B | 0644 |
|
module.info.nl | File | 28 B | 0644 |
|
module.info.nl.auto | File | 76 B | 0644 |
|
module.info.no | File | 34 B | 0644 |
|
module.info.no.auto | File | 72 B | 0644 |
|
module.info.pl | File | 82 B | 0644 |
|
module.info.pl.auto | File | 23 B | 0644 |
|
module.info.pt | File | 33 B | 0644 |
|
module.info.pt.auto | File | 70 B | 0644 |
|
module.info.pt_BR | File | 0 B | 0644 |
|
module.info.pt_BR.auto | File | 112 B | 0644 |
|
module.info.ro | File | 0 B | 0644 |
|
module.info.ro.auto | File | 111 B | 0644 |
|
module.info.ru | File | 0 B | 0644 |
|
module.info.ru.auto | File | 170 B | 0644 |
|
module.info.sk | File | 36 B | 0644 |
|
module.info.sk.auto | File | 97 B | 0644 |
|
module.info.sl | File | 0 B | 0644 |
|
module.info.sl.auto | File | 111 B | 0644 |
|
module.info.sv | File | 29 B | 0644 |
|
module.info.sv.auto | File | 72 B | 0644 |
|
module.info.th | File | 0 B | 0644 |
|
module.info.th.auto | File | 156 B | 0644 |
|
module.info.tr | File | 49 B | 0644 |
|
module.info.tr.auto | File | 84 B | 0644 |
|
module.info.uk | File | 0 B | 0644 |
|
module.info.uk.auto | File | 171 B | 0644 |
|
module.info.ur | File | 0 B | 0644 |
|
module.info.ur.auto | File | 172 B | 0644 |
|
module.info.vi | File | 0 B | 0644 |
|
module.info.vi.auto | File | 143 B | 0644 |
|
module.info.zh | File | 28 B | 0644 |
|
module.info.zh.auto | File | 69 B | 0644 |
|
module.info.zh_TW | File | 37 B | 0644 |
|
module.info.zh_TW.auto | File | 75 B | 0644 |
|
move.cgi | File | 1.17 KB | 0755 |
|
negativeacl | File | 7 B | 0644 |
|
postinstall.pl | File | 429 B | 0755 |
|
prefs.info | File | 58 B | 0644 |
|
range.pl | File | 737 B | 0755 |
|
rbac-mapping | File | 118 B | 0644 |
|
safeacl | File | 66 B | 0644 |
|
save_allow.cgi | File | 556 B | 0755 |
|
save_cron.cgi | File | 2.81 KB | 0755 |
|
save_env.cgi | File | 1.95 KB | 0755 |
|
save_manual.cgi | File | 594 B | 0755 |
|
start.cgi | File | 308 B | 0755 |
|
stop.cgi | File | 303 B | 0755 |
|
uninstall.pl | File | 411 B | 0755 |
|
useradmin_update.pl | File | 1.25 KB | 0755 |
|