Perl Query


 
Thread Tools Search this Thread
Top Forums Programming Perl Query
# 1  
Old 02-03-2013
Perl Query

Hi ,

Im using the below script to find the Good and Bad for the file permission.
Code:
      $rc=`find /etc/security/opasswd  -perm 0600 -print -ls`;
        if($rc == 1)
        {
                print "GOOD: AD.1.8.4.1: The file /etc/security/opasswd exists and had permission 0600\n\n";
        }
elsif($rc != 1)
        {
                print "BAD: AD.1.8.4.1: The file /etc/security/opasswd exists and do not have permission 0600\n\n";
}
                print `ls -l /etc/security/opasswd`;
                print "\n";

if I change the permission for the file /etc/security/opasswd, it has to show BAD, rather still it shows GOOD. If there any thing need to be changed on the rc value .

Last edited by Scott; 02-04-2013 at 01:11 AM.. Reason: Code tags
# 2  
Old 02-03-2013
Please use code tags for code and data samples.

Backticks capture the standard output from the external command. So, if your find command is successful (in your sense and not find's sense), the scalar $rc will contain the file-name and not the return code (which I am assuming you are expecting). So, the other branch of the conditional will always be executed.

Also, the return code of the find command can be deceiving. See the man page for details.

Why don't you use the stat built-in for this?
Code:
$mode = sprintf "%04o", (stat '/etc/security/opasswd')[2] & 07777;
if ($mode eq "0600") { ... } else { ... }


Last edited by elixir_sinari; 02-03-2013 at 10:58 PM..
# 3  
Old 02-03-2013
Hi Elixir,

Thanks for your info.
Please check with the below :
Code:
 $mode = sprintf "%040", (stat '/etc/security/opasswd') [2] & 07777;
        if ($mode eq "0600")
        {
                print "GOOD: AD.1.8.4.1: The file /etc/security/opasswd exists and had permission 0600\n\n";
        }
else
        {
                 print "BAD: AD.1.8.4.1: The file /etc/security/opasswd exists and do not have permission 0600\n\n";
        }

OUTPUT:
Code:
BAD: AD.1.8.4.1: The file /etc/security/opasswd exists and do not have permission 0600
ls -la /etc/security/opasswd
-rw-------    1 root     root         4300 Jan 14 13:22 /etc/security/opasswd

But, its giving the output has BAD, even the file permission is 0600.

Last edited by Scott; 02-04-2013 at 01:13 AM.. Reason: Code tags
# 4  
Old 02-03-2013
The format string should be %04o and not %040.
# 5  
Old 02-04-2013
Hi Exilir,

Same way, for the files under the directory is not getting the output properly.

Quote:
$mode = sprintf "%04o", (stat '/etc/rc.d/[rc]*.d') [2] & 07777;
if($mode eq "0755")
{
print "GOOD: AD.1.8.18: The file /etc/rc.d/[rc]*.d exists and had permission 0755\n\n";
}
else
{
print "BAD: AD.1.8.18: The file /etc/rc.d/[rc]*.d exists and does not have permission 0755\n\n";
}
print `ls -ld /etc/rc.d/[rc]*.d`;
print "\n";
OUTPUT:

BAD: AD.1.8.18: The file /etc/rc.d/[rc]*.d exists and does not have permission 0755

drwxr-xr-x 2 root root 4096 Oct 24 15:55 /etc/rc.d/rc0.d
drwxr-xr-x 2 root root 4096 Oct 24 15:55 /etc/rc.d/rc1.d
drwxr-xr-x 2 root root 4096 Jan 14 13:24 /etc/rc.d/rc2.d
drwxr-xr-x 2 root root 4096 Jan 14 13:24 /etc/rc.d/rc3.d
drwxr-xr-x 2 root root 4096 Oct 24 15:55 /etc/rc.d/rc4.d
drwxr-xr-x 2 root root 4096 Jan 14 13:24 /etc/rc.d/rc5.d
drwxr-xr-x 2 root root 4096 Oct 24 15:55 /etc/rc.d/rc6.d

The output should be GOOD.
# 6  
Old 02-04-2013
Quote:
Originally Posted by gsiva
...
Same way, for the files under the directory is not getting the output properly.
Code:
$mode = sprintf "%04o", (stat '/etc/rc.d/[rc]*.d') [2] & 07777;
if($mode eq "0755")
{
print "GOOD: AD.1.8.18: The file /etc/rc.d/[rc]*.d exists and had permission 0755\n\n";
}
else
{
print "BAD: AD.1.8.18: The file /etc/rc.d/[rc]*.d exists and does not have permission 0755\n\n";
}
print `ls -ld /etc/rc.d/[rc]*.d`;
print "\n";

OUTPUT:

BAD: AD.1.8.18: The file /etc/rc.d/[rc]*.d exists and does not have permission 0755

drwxr-xr-x 2 root root 4096 Oct 24 15:55 /etc/rc.d/rc0.d
drwxr-xr-x 2 root root 4096 Oct 24 15:55 /etc/rc.d/rc1.d
drwxr-xr-x 2 root root 4096 Jan 14 13:24 /etc/rc.d/rc2.d
drwxr-xr-x 2 root root 4096 Jan 14 13:24 /etc/rc.d/rc3.d
drwxr-xr-x 2 root root 4096 Oct 24 15:55 /etc/rc.d/rc4.d
drwxr-xr-x 2 root root 4096 Jan 14 13:24 /etc/rc.d/rc5.d
drwxr-xr-x 2 root root 4096 Oct 24 15:55 /etc/rc.d/rc6.d

The output should be GOOD.
That's because Perl looks for a file that is literally called "/etc/rc.d/[rc]*.d", and since it could not find it, "stat" returns an empty array and the value of $mode is "0000".
Since that is not equal to "0755", the control goes to the "else" branch and the message you see is printed. Notice that despite the fact that the message says "... file exists...", you are not testing the existence of the file.
The output of "ls" is printed correctly because you pass the "ls" command to the shell, which expands the regular expression and lists all files that match it.

- Use the glob function of Perl to loop through all files of interest.
- Add the following two lines at the beginning of your program:

Code:
use strict;
use warnings;

The "use warnings" would've thrown a warning in your case, if it had been set.

tyler_durden
# 7  
Old 02-07-2013
Thanks tyler,

the below scripts doesn't takes the output of the 90 days login : if the user doesn't or have more login days except 90 day, the alert should be BAD:
i am missing anything.

Code:
$rc=`fgrep PASS_MAX_DAYS /etc/login.defs | grep -v "#"`;
        if(checkValue(1,90,$rc))
        {
                print "BAD: /etc/login.defs $rc";
        }
        else
        {
                print "GOOD: /etc/login.defs $rc";
        }

Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

From perl program query is not executed.

I have tried executing one particular query through perl.But I am unable to get the result. When I tried to execute the sysdate query its working when I executed my perl code. The below query doesn't work. QUERY 1:my $sql ="select name from tab where rownum <6"; Received ora error... (23 Replies)
Discussion started by: ramkumar15
23 Replies

2. Shell Programming and Scripting

Formating of query variable in perl

Hi , I am facing error in perl when I assign a below query in a varibale $query because of new line charchters $query= SELECT XYZ , ABC , c2 , c3 , c4 FROM t1 how can i get rid of new line charchters with out changing the... (2 Replies)
Discussion started by: gvk25
2 Replies

3. Shell Programming and Scripting

perl- oracle sql query

Hi, I am new to perl.How to query oracle database with perl??? Thanks (1 Reply)
Discussion started by: tdev457
1 Replies

4. Shell Programming and Scripting

Perl - CAPTURE query

When i run script with option 1 it works, however if I assign path to variable $tmpfile and try to use that it writes to $tmpfile and not /var/tmp/abc.tmp, what am I missing? 1. open (CAPTURE, '>>tmpfile'); print CAPTURE "$T1,$T2,$T3"; close (CAPTURE); 2. my $tmpfile='/var/tmp/abc.tmp';... (10 Replies)
Discussion started by: gefa
10 Replies

5. Shell Programming and Scripting

Perl Query Regarding format

Hello people. I have got the following script QM=ARGV; open (CHS_OUT, "echo 'DISPLAY QSTATUS(SYSTEM.CLUSTER.MY.QUEUE) all'|runmqsc $qm|"); while (<CHS_OUT>) { if ( /QUEUE\(/ ) { $QueueName = ValueParser("QUEUE", 6); } if ( /IPPROCS\(/ ) { $InpProcs = ValueParser("IPPROCS", 8); #print... (3 Replies)
Discussion started by: King Nothing
3 Replies

6. UNIX and Linux Applications

Perl - PostGreSql query

Guys, I guess, I posted something in the wrong forum. Here it is - https://www.unix.com/shell-programming-scripting/67395-perl-postgrepsql-question.html Can you please help me with this? Regards, garric (0 Replies)
Discussion started by: garric
0 Replies

7. UNIX for Dummies Questions & Answers

Query in perl

can any1 give me line by line explanation for the following perl script as i dunno perl .. n i have searched in google .. but still thn i wanna confirm my findings fro perl experts :mad: perl -e 'while (<>) { print; $num = 2 if /fail_halt/i; $num = 1 if (/failure/i && ($num < 1)); }... (2 Replies)
Discussion started by: Dana Evans
2 Replies

8. Shell Programming and Scripting

perl query

a file test.dat has the following David Veterinarian John Orthopedist Jeff Dentist perl -p -e "s/\s*(\w+).*/$1/;" test.dat ......will print David Jonh Jeff how does the part in double quotes work out.... (1 Reply)
Discussion started by: bishweshwar
1 Replies

9. Shell Programming and Scripting

Perl CGI Query

Hi All, This is quite a high level question so I appologise as if it sounds a bit woolly! I'm running a script via apache's cgi-bin that calls another Perl script (from a browser): http://192.168.000.000/cgi-bin/run_script.pl?SCRIPT=test.pl&text=RANDOM+TEXT&INPUT1=444444444444 This... (4 Replies)
Discussion started by: pondlife
4 Replies

10. Shell Programming and Scripting

Incorrect SQL query in perl

I the the following perl script, however it does not return anything. Did i form my syantax wrongly? $sth=$dbh->prepare("select a.rowid,a.* from Table1 a where a.field1 = \'$Indicator1\' and a.schedule = \'$Indicator2\' and a.lastdate <= sysdate"); $sth->execute() ... (1 Reply)
Discussion started by: new2ss
1 Replies
Login or Register to Ask a Question