This file is indexed.

/usr/lib/oar/Leon is in oar-server 2.5.4-2+deb8u1.

This file is owned by root:root, with mode 0o755.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
#!/usr/bin/perl
# $Id$
#

use English;
use OAR::IO;
#use Sys::Hostname;
use OAR::Conf qw(init_conf dump_conf get_conf is_conf);
#use IPC::Open2;
#use IPC::Open3;
#use Data::Dumper;
use OAR::Modules::Judas qw(oar_debug oar_warn oar_error set_current_log_category);
#use IO::Socket::INET;
use OAR::Tools;
use OAR::PingChecker qw(test_hosts);

# Log category
set_current_log_category('main');

init_conf($ENV{OARCONFFILE});
my $Server_hostname = get_conf("SERVER_HOSTNAME");
my $Server_port = get_conf("SERVER_PORT");

my $Deploy_hostname = get_conf("DEPLOY_HOSTNAME");
if (!defined($Deploy_hostname)){
    $Deploy_hostname = $Server_hostname;
}

my $Cosystem_hostname = get_conf("COSYSTEM_HOSTNAME");
if (!defined($Cosystem_hostname)){
    $Cosystem_hostname = $Server_hostname;
}

my $Server_epilogue = get_conf("SERVER_EPILOGUE_EXEC_FILE");

my $Openssh_cmd = get_conf("OPENSSH_CMD");
$Openssh_cmd = OAR::Tools::get_default_openssh_cmd() if (!defined($Openssh_cmd));

if (is_conf("OAR_SSH_CONNECTION_TIMEOUT")){
    OAR::Tools::set_ssh_timeout(get_conf("OAR_SSH_CONNECTION_TIMEOUT"));
}

if (is_conf("OAR_RUNTIME_DIRECTORY")){
    OAR::Tools::set_default_oarexec_directory(get_conf("OAR_RUNTIME_DIRECTORY"));
}

# Test if we must launch a finishing sequence on a specific job
if (defined($ARGV[0])){
    my $job_id = $ARGV[0];
    if ($job_id !~ m/^\d+$/m){
        oar_error("[Leon_exterminator] Leon was called to exterminate job \"$job_id\", which is not a correct job id\n");
    }
    my $base = OAR::IO::connect();
    my $frag_state = OAR::IO::get_job_frag_state($base, $job_id);
    if (defined($frag_state) and ($frag_state eq "LEON_EXTERMINATE")){
        $SIG{PIPE} = 'IGNORE';
        $SIG{USR1} = 'IGNORE';
        $SIG{INT}  = 'IGNORE';
        $SIG{TERM} = 'IGNORE';
        my $str = "[Leon] I exterminate the job $job_id";
        my @events; push(@events, {type => "EXTERMINATE_JOB", string => $str});
        oar_debug("[Leon_exterminator] Leon was called to exterminate job \"$job_id\"\n");
        OAR::IO::job_arm_leon_timer($base,$job_id);
        OAR::IO::job_finishing_sequence($base, $Server_epilogue, $Server_hostname, $Server_port, $job_id, \@events);
        OAR::Tools::notify_tcp_socket($Server_hostname, $Server_port, "ChState");
    }else{
        oar_error("[Leon_exterminator] Leon was called to exterminate job \"$job_id\" but its frag_state is not LEON_EXTERMINATE\n");
    }
    OAR::IO::disconnect($base);
    exit(0);
}

my $Exit_code = 0;

my $base = OAR::IO::connect();

#do it for all job in state LEON in the data base table fragJobs
OAR::IO::lock_table($base,["jobs","job_state_logs","resources","assigned_resources","frag_jobs","event_logs","moldable_job_descriptions","job_types","job_resource_descriptions","job_resource_groups","challenges","job_dependencies","gantt_jobs_predictions"]);

# Do not over notify Almighty
OAR::Tools::inhibit_notify_tcp_socket();
foreach my $j (OAR::IO::get_to_kill_jobs($base)){
    if (OAR::IO::is_job_desktop_computing($base,$j->{job_id})) {
        oar_debug("[Leon] Job $j->{job_id} is affected to a DesktopComputing resource, I do not handle it\n");
        next;
    }

    oar_debug("[Leon] Normal kill: treates job $j->{job_id}\n");
    if (($j->{state} eq "Waiting") || ($j->{state} eq "Hold")){
        oar_debug("[Leon] Job is not launched\n");
        OAR::IO::set_job_state($base,$j->{job_id},"Error");
        OAR::IO::set_job_message($base,$j->{job_id},"Job killed by Leon directly");
        if ($j->{job_type} eq "INTERACTIVE"){
            oar_debug("[Leon] I notify oarsub in waiting mode\n");
            #answer($Jid,$refJob->{'infoType'},"JOB KILLED");
            OAR::Tools::enable_notify_tcp_socket();
            my ($addr,$port) = split(/:/,$j->{info_type});
            if (!defined(OAR::Tools::notify_tcp_socket($addr, $port, "JOB KILLED"))){
                oar_debug("[Leon] Notification done\n");
            }else{
                oar_debug("[Leon] Cannot open connection to oarsub client for job $j->{job_id}, it is normal if user typed Ctrl-C !!!!!!\n");
            }
            OAR::Tools::inhibit_notify_tcp_socket();
        }
        $Exit_code = 1;
    }elsif (($j->{state} eq "Terminated") || ($j->{state} eq "Error") || ($j->{state} eq "Finishing")){
        oar_debug("[Leon] Job is terminated or is terminating I do nothing\n");
    }else{
        my $types = OAR::IO::get_job_types_hash($base,$j->{job_id});
        if (defined($types->{noop})){
            oar_debug("[Leon] Kill the NOOP job $j->{job_id}\n");
            OAR::IO::set_finish_date($base,$j->{job_id});
            OAR::IO::set_job_state($base,$j->{job_id},"Terminated");
            OAR::IO::set_job_message($base,$j->{job_id},"NOOP job killed by Leon");
            OAR::IO::job_finishing_sequence($base, $Server_epilogue, $Server_hostname, $Server_port, $j->{job_id}, []);
            $Exit_code = 1;
        }else{
            my @hosts = OAR::IO::get_job_current_hostnames($base,$j->{job_id});
            my $host_to_connect_via_ssh = $hosts[0];
            #deploy, cosystem and no host part
            if ((defined($types->{cosystem})) or ($#hosts < 0)){
                $host_to_connect_via_ssh = $Cosystem_hostname;
            }elsif (defined($types->{deploy})){
                $host_to_connect_via_ssh = $Deploy_hostname;
            }
            #deploy, cosystem and no host part
            if (defined($host_to_connect_via_ssh)){
                OAR::IO::add_new_event($base,"SEND_KILL_JOB",$j->{job_id},"[Leon] Send the kill signal to oarexec on $host_to_connect_via_ssh for job $j->{job_id}");
                OAR::Tools::signal_oarexec($host_to_connect_via_ssh, $j->{job_id}, "TERM", 0, $base, $Openssh_cmd, '');
            }
        }
    }
    OAR::IO::job_arm_leon_timer($base,$j->{job_id});
}
OAR::Tools::enable_notify_tcp_socket();

#I treate jobs in state EXTERMINATED in the table fragJobs
foreach my $j (OAR::IO::get_to_exterminate_jobs($base)){
    oar_debug("[Leon] EXTERMINATE the job $j->{job_id}\n");
    OAR::IO::set_job_state($base,$j->{job_id},"Finishing");
    if ($j->{start_time} == 0){
        OAR::IO::set_running_date($base,$j->{job_id});
    }
    OAR::IO::set_finish_date($base,$j->{job_id});
    OAR::IO::set_job_message($base,$j->{job_id},"Job exterminated by Leon");
    OAR::Tools::notify_tcp_socket($Server_hostname, $Server_port, "LEONEXTERMINATE_$j->{job_id}");
}
OAR::IO::unlock_table($base);

OAR::IO::disconnect($base);

exit($Exit_code);