
234
|
Chapter 10: Scripting
Python has an equivalent to Perl’s getpwent function that enables us to restrict the
search to the field that contains names. Save the following script as finduser.py:
#!/usr/bin/python
import re, sys, pwd
pattern = "(?i)" + sys.argv[1]
for line in pwd.getpwall( ):
if re.search(pattern, line.pw_gecos):
print line
Now let’s see how it works:
admin@server1:~$ ./finduser.py alf
('adedarc', 'x', 501, 501, 'Alfredo de Darc', '/home/adedarc', '/bin/bash')
In this script, the line we printed was a Python list rather than a string, and it was
pretty-printed. To print the line in its original format, use this:
#!/usr/bin/python
import re, sys, pwd
pattern = "(?i)" + sys.argv[1]
for line in pwd.getpwall( ):
if re.search(pattern line.pw_gecos):
print ":".join(["%s" % v for v in line])
The last line is needed to turn each field into a string (pw_uid and pw_gid are inte-
gers) before joining them into one long, colon-separated string. Although Perl and
PHP let you treat a variable as a string or a number, Python is stricter.
The final step is to restrict the searches to accounts with uid > 500:
#!/usr/bin/python
import re, sys, pwd
pattern = "(?i)" + sys.argv[1]
for line in pwd.getpwall( ):
if line.pw_uid > 500 and re.search(pattern line.pw_gecos):
print ":".join(["%s" % v for v in line])
Choosing a Scripting Language
The choice of a programming language, like the choice of a text editor ...