the-bastion/bin/other/check-active-account-simple.pl
Stéphane Lesimple fde20136ef
Initial commit
2020-10-20 14:30:27 +00:00

54 lines
1.6 KiB
Perl
Executable file

#! /usr/bin/env perl
# vim: set filetype=perl ts=4 sw=4 sts=4 et:
use common::sense;
# This is an basic script to check whether an account is active or not.
# It serves as an example of what such a script can look like, but can also be used
# as is in production if it matches your use case.
# See the 'accountExternalValidationProgram' option in bastion.conf for more information
use constant {
EXIT_ACTIVE => 0,
EXIT_INACTIVE => 1,
EXIT_UNKNOWN => 2,
EXIT_UNKNOWN_SILENT_ERROR => 3,
EXIT_UNKNOWN_NOISY_ERROR => 4,
};
my $sysaccount = shift;
if (!$sysaccount) {
print STDERR "No account name to check. Report this to sysadmin!\n";
exit EXIT_UNKNOWN_NOISY_ERROR;
}
# This file should be a simple plaintext file containing one account name per line
# It should be populated by e.g. a cron script that queries some external directory
# such as an LDAP for example.
# Ensure that this file is readable at least by the bastion-users system group!
my $file = '/home/allowkeeper/active_accounts.txt';
if (!(-e $file)) {
print STDERR "Active accounts file is not present. Report this to sysadmin!\n";
exit EXIT_UNKNOWN_NOISY_ERROR;
}
# Load file
my $f;
if (!(open $f, '<', $file)) {
print STDERR "Active logins file is unreadable ($!). Report this to sysadmin!\n";
exit EXIT_UNKNOWN_NOISY_ERROR;
}
# check that the account is present in the file
while (<$f>) {
chomp;
if ($_ eq $sysaccount) {
close($f);
exit EXIT_ACTIVE;
}
}
close($f);
# If not, account is inactive
exit EXIT_INACTIVE;