Simple Ways To Be A Better Programmer (OSCON 2007)
pts_ldap
1. #!/usr/bin/perl -w
############################################################################
##
## Netezza an IBM Company Copyright 2011
##
## Name: nz-ldap-tools.pl
##
## Author: Adam Currier
##
## Description:
## ------------
## This script is used for NPS LDAP diagnostics
## It is not written well - only to work. Putting checks into subroutines
## and splitting into modules should be done in the future ;)
##
############################################################################
system $^O eq 'MSWin32' ? 'cls' : 'clear';
$? = 1; # print out buffered text
my $REV = "1.0b"; # script revision
use Term::ANSIColor;
use Cwd;
# include list
use lib "../install_modules";
use get_system;
use print_color;
# directories
my $DIR = getcwd;
# global
my $SPACER = 55;
#
# add time base to file name
#
my $time = `date`;
my ($dummy, $mon, $day, $year);
($dummy, $mon, $day, $time, $dummy, $year) = split(/s+/, $time);
my $FINAL_RESULTS_FILE = "../pts_logs/ldap_check_".$mon."_".$day."_".$time."_".
$year.".txt";
#
# Check user for root
#
my $user = `whoami`;
if ($user !~ /^root$/)
{
$print = "Check user is root ";
print("You must be root to run this script!n");
exit;
} else {
# print banner
my $print = "-------------------------BASE CHECK";
my $line = ("-" x (($SPACER + 6) - length($print)));
$print = $print.$line."n";
print_color::color_change_yellow($print, $FINAL_RESULTS_FILE);
$print = "Check user is root ";
print_color::printout($print, $FINAL_RESULTS_FILE);
2. print_color::print_space($print, $FINAL_RESULTS_FILE, $SPACER);
print_color::color_change_green("[PASS]n", $FINAL_RESULTS_FILE)
}
$nz_file="/nz/lost+found";
if (-e $nz_file)
{
$print = "Check for active host ";
print_color::printout($print, $FINAL_RESULTS_FILE);
print_color::print_space($print, $FINAL_RESULTS_FILE, $SPACER);
print_color::color_change_green("[PASS]n",
$FINAL_RESULTS_FILE);
}else {
$print = "Check for active host ";
print_color::printout($print, $FINAL_RESULTS_FILE);
print_color::print_space($print, $FINAL_RESULTS_FILE,
$SPACER);
print_color::color_change_red("[FAIL]n",
$FINAL_RESULTS_FILE);
$print = "-" x ($SPACER + 6);
print_color::color_change_yellow("$printn",
$FINAL_RESULTS_FILE);
print("You must run this from the active host!nnn");
exit;
}
$print = "Check NPS is Online";
print_color::printout($print, $FINAL_RESULTS_FILE);
# check to see if online or not
my $state = `su - nz -c "nzstate" 2>&1`;
if ($state =~ /Online/i || $state =~ /paused/i)
{
print_color::print_space($print, $FINAL_RESULTS_FILE, $SPACER);
print_color::color_change_green("[PASS]n", $FINAL_RESULTS_FILE);
}
else
{
print_color::print_space($print, $FINAL_RESULTS_FILE, $SPACER);
print_color::color_change_yellow("[WARN]n", $FINAL_RESULTS_FILE);
}
# check if we have FTP access:
my $ftp = '1';
if ($ftp ne '') {
$print = "Check FTP access ";
print_color::printout($print, $FINAL_RESULTS_FILE);
print_color::print_space($print, $FINAL_RESULTS_FILE, $SPACER);
print_color::color_change_green("[PASS]n",
$FINAL_RESULTS_FILE);
} else {
$print = "Check FTP access ";
print_color::printout($print, $FINAL_RESULTS_FILE);
print_color::print_space($print, $FINAL_RESULTS_FILE, $SPACER);
print_color::color_change_red("[FAIL]n", $FINAL_RESULTS_FILE);
}
$print = "Check LDAP tools installed";
3. print_color::printout($print, $FINAL_RESULTS_FILE);
# check to see if openldap-clients installed or not
my $ldap_tools = `rpm -qa | grep openldap-clients`;
if ($ldap_tools ne '')
{
print_color::print_space($print, $FINAL_RESULTS_FILE, $SPACER);
print_color::color_change_green("[PASS]n", $FINAL_RESULTS_FILE);
}
else
{
print_color::print_space($print, $FINAL_RESULTS_FILE, $SPACER);
print_color::color_change_yellow("[WARN]n", $FINAL_RESULTS_FILE);
}
#check if we have strace installed:
my $ftp = `rpm -qa | grep -i strace`;
if ($ftp ne '') {
$print = "Check STRACE installed ";
print_color::printout($print, $FINAL_RESULTS_FILE);
print_color::print_space($print, $FINAL_RESULTS_FILE, $SPACER);
print_color::color_change_green("[PASS]n",
$FINAL_RESULTS_FILE);
} else {
$print = "Check STRACE installed ";
print_color::printout($print, $FINAL_RESULTS_FILE);
print_color::print_space($print, $FINAL_RESULTS_FILE, $SPACER);
print_color::color_change_yellow("[WARN]n",
$FINAL_RESULTS_FILE);
}
# remove the file
system("rm -rf $FINAL_RESULTS_FILE");
# global for failed
my $FAIL = 0;
# begin
main();
#
# Function: put the base functionality checks here
#
sub main
{
# print banner
my $print = "-----------------------SYSTEM CHECK";
my $line = ("-" x (($SPACER + 6) - length($print)));
$print = $print.$line."n";
print_color::color_change_yellow($print, $FINAL_RESULTS_FILE);
# check /nz/data/pg_hba.conf file for value lowercase
my $pghba = `egrep -v '^(#|$)' /nz/data/pg_hba.conf 2>/dev/null | grep
lowercase`;
if ($pghba eq '') {
$print = "Check pg_hba.conf ";
print_color::printout($print, $FINAL_RESULTS_FILE);
print_color::print_space($print, $FINAL_RESULTS_FILE, $SPACER);
4. print_color::color_change_green("[PASS]n",
$FINAL_RESULTS_FILE);
} else {
$print = "Check pg_hba.conf ";
print_color::printout($print, $FINAL_RESULTS_FILE);
print_color::print_space($print, $FINAL_RESULTS_FILE, $SPACER);
print_color::color_change_red("[FAIL]n", $FINAL_RESULTS_FILE);
}
# check /nz/data/config/ldap.conf' ownership and permissions:
my $permission = `ls -al /nz/data/config/ldap.conf 2>/dev/null | egrep
'^(-rw).*nz.*nz'`;
if ($permission ne '') {
$print = "Check ownership and permissions ";
print_color::printout($print, $FINAL_RESULTS_FILE);
print_color::print_space($print, $FINAL_RESULTS_FILE, $SPACER);
print_color::color_change_green("[PASS]n",
$FINAL_RESULTS_FILE);
} else {
$print = "Check ownership and permissions";
print_color::printout($print, $FINAL_RESULTS_FILE);
print_color::print_space($print, $FINAL_RESULTS_FILE, $SPACER);
print_color::color_change_red("[FAIL]n", $FINAL_RESULTS_FILE);
}
# check that the libssl.so.4 symlink points to libssl.so.0.9.7a like it's
supposed to
my $libssl4 = `ls -l /lib/libssl.so.4 | grep "libssl.so.6"`;
if ($libssl4 ne '') {
$print = "Check libssl.so.4 ";
print_color::printout($print, $FINAL_RESULTS_FILE);
print_color::print_space($print, $FINAL_RESULTS_FILE, $SPACER);
print_color::color_change_green("[PASS]n",
$FINAL_RESULTS_FILE);
} else {
$print = "Check libssl.so.4";
print_color::printout($print, $FINAL_RESULTS_FILE);
print_color::print_space($print, $FINAL_RESULTS_FILE, $SPACER);
print_color::color_change_red("[FAIL]n", $FINAL_RESULTS_FILE);
}
# check that the libssl.so.6 symlink points to libssl.so.0.9.8e like it's
supposed to
my $libssl6 = `ls -l /lib/libssl.so.6 | grep "libssl.so.0.9.8e"`;
if ($libssl6 ne '') {
$print = "Check libssl.so.6";
print_color::printout($print, $FINAL_RESULTS_FILE);
print_color::print_space($print, $FINAL_RESULTS_FILE, $SPACER);
print_color::color_change_green("[PASS]n",
$FINAL_RESULTS_FILE);
} else {
$print = "Check libssl.so.6";
print_color::printout($print, $FINAL_RESULTS_FILE);
print_color::print_space($print, $FINAL_RESULTS_FILE, $SPACER);
print_color::color_change_red("[FAIL]n", $FINAL_RESULTS_FILE);
}
# check that the libcrypto.so.4 symlink points to libcrypto.so.0.9.7a like it's
supposed to
my $libcrypto4 = `ls -l /lib/libcrypto.so.4 | grep "libcrypto.so.6"`;
if ($libcrypto4 ne '') {
5. $print = "Check libcrypto.so.4 ";
print_color::printout($print, $FINAL_RESULTS_FILE);
print_color::print_space($print, $FINAL_RESULTS_FILE, $SPACER);
print_color::color_change_green("[PASS]n",
$FINAL_RESULTS_FILE);
} else {
$print = "Check libcrypto.so.4";
print_color::printout($print, $FINAL_RESULTS_FILE);
print_color::print_space($print, $FINAL_RESULTS_FILE, $SPACER);
print_color::color_change_red("[FAIL]n", $FINAL_RESULTS_FILE);
}
# check that the libcrypto.so.6 symlink points to libcrypto.so.0.9.8e like it's
supposed to
my $libcrypto6 = `ls -l /lib/libcrypto.so.6 | grep
"libcrypto.so.0.9.8e"`;
if ($libcrypto6 ne '') {
$print = "Check libcrypto.so.6";
print_color::printout($print, $FINAL_RESULTS_FILE);
print_color::print_space($print, $FINAL_RESULTS_FILE, $SPACER);
print_color::color_change_green("[PASS]n",
$FINAL_RESULTS_FILE);
} else {
$print = "Check libcrypto.so.6";
print_color::printout($print, $FINAL_RESULTS_FILE);
print_color::print_space($print, $FINAL_RESULTS_FILE, $SPACER);
print_color::color_change_red("[FAIL]n", $FINAL_RESULTS_FILE);
}
network_check();
nps_check();
final_out_file(1);
# give a total status
$FAIL = final_status();
exit($FAIL);
}
#
# Function: put all network checks here
#
sub network_check
{
# print banner
my $print = "----------------------NETWORK CHECK";
my $line = ("-" x (($SPACER + 6) - length($print)));
$print = $print.$line."n";
print_color::color_change_yellow($print, $FINAL_RESULTS_FILE);
# Check ping to ldap host
# Need to programmatically get the host name
my $host = `egrep '^host' /etc/ldap.conf | awk '{ print $2 }'`;
$host =~ s/^s+//;
$host =~ s/s+$//;
# add some exception handling here
if ($host eq '') {
$host = "fail.localhost.com";
}