In article <[EMAIL PROTECTED]>,
[EMAIL PROTECTED] (Daniel Falkenberg) wrote:
> Hey all,
>
> I have a problem here that I don't really know how to go about.
>
> Basically I want to be able to find a user in the /etc/passwd with only
> a GID of 45 and a username of what I type the user name to be.
>
> test5:x:503:503::/home/tunnel:/bin/bash
> test:x:504:45:Test Account:/home/test:/bin/false
> test4:x:506:505:test Account:/home/test4:/bin/false
> test2:x:507:45:Test Account:/home/test2:/bin/false
> daniel:x:508:45:Daniel Merritt:/home/daniel:/bin/false
>
> As we all know the Unix /etc/passwd file looks like the above...
>
> Now with the following I want to be able to only find the user name that
> has a GID of 45 and make sure the username exists in /etc/passd in the
> first place.
>
> #!/usr/bin/perl -w
>
> $user = "daneilson";
> $file = '/etc/passwd';
>
> open PASSSWD, "$file" or die "Cannot open $file for reading :$!";
> #Store /etc/passwd as a file
> while ( $lines = <PASSWD>) {
> #split the /etc/passwd file at every colon and store it as an
> array.
> @lines = split (/:/, $lines);
> }
>
> #Now for the fun part...
> #Here I need to be able to search through @lines for the username I
> enter $lines[0]
> #if $user is not found then I need to report an error
> #else if $user is found then I need it to check that it has a GID of 45
> and if it doesn't
> #then I need to report another error.
try this for starters (tested)
#!/usr/bin/perl
require 5.006;
use warnings;
use strict;
my $usrname = $ARGV[0] || 'daneilson';
open(PASSWD, '<', '/etc/passwd')
or die "Unable to open /etc/passwd: $!";
#dunno how big it is so let's line-by-line it
my $found = 0;
while (<PASSWD>)
{
chomp;
my @line = split /:/;
if ( (lc($line[0]) eq lc($usrname)) && ($line[3] == 45) )
{
++$found;
print "Found [$found]:\n\t", join("\n\t", @line), "\n";
}
}
if ($found)
{
print "Total records found = [$found]\n";
}
else
{
print "No records were found that matched\n";
}
__END__
=pod
delete the use warnings; line and use the simple -w switch as in
#!/usr/bin/perl -w
if you don't have 5.6.0 or later on your system, and also change the
open line to the 2-argument version like so:
open(PASSWD, '< /etc/passwd')
or die "Unable to open /etc/passwd: $!";
you do realise, of course, that you could get similar results with
cat /etc/passwd |grep "username" |grep ":45:"
right?
=cut
The problem with sharks is that they are too large to get to the shallow end of the
gene pool :P
--
Scott R. Godin | e-mail : [EMAIL PROTECTED]
Laughing Dragon Services | web : http://www.webdragon.net/
It is not necessary to cc: me via e-mail unless you mean to speak off-group.
I read these via nntp.perl.org, so as to get the stuff OUT of my mailbox. :-)
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]