#!/dcs/bin/python import string import sys import pwd import os import regex def main(): line=string.strip(sys.stdin.readline()) chopped=string.split(line) if len(chopped) == 0 or chopped[-1][0:1] == '/': show = 0 try: file = open('/var/adm/no-inspecific-finger') except: show = 1 if show == 1: run_finger('') else: show_file(file) sys.exit(0) else: user = chopped[-1] local = regex.compile('^[0-9a-zA-Z]*$') remote = 0 if local.match(user) == -1: remote = regex.compile('^[0-9a-zA-Z][0-9a-zA-Z-\.@]*$') if remote.match(user) == -1: sys.stdout.write(user+' does not look like a username\n') sys.exit(0) else: remote = 1 show = 1 if not remote: try: pwent = pwd.getpwnam(user) except: # this makes it too easy to tell when a specific username exists; # an invalid username says "user foo does not exist", while # a valid username with finger turned off says "" #sys.stdout.write('user '+user+' does not exist\n\r') sys.exit(0) have_home_dir=1 try: os.chdir(pwent[5]) except: have_home_dir=0 show = 0 if have_home_dir: try: file = open('.no-finger','r') except: show=1 else: show=1 if show == 1: sys.stdout.flush() run_finger(user) else: show_file(file) def show_file(file): while 1: line = file.readline() if not line: break sys.stdout.write(line+'\r') sys.exit(0) def run_finger(user): if sys.platform[0:4] == 'irix': path='/usr/bsd/finger' elif sys.platform[0:4] == 'sunos4': path='/usr/ucb/finger' else: # solaris, osf/1 and linux have it at /usr/bin. path='/usr/bin/finger' if user == '': sys.stdout.write('Some users may have chosen not to appear in this list.') sys.stdout.write('\n\n') pipe = os.popen(path,'r') while 1: line = pipe.readline() if not line: break chopped=string.split(line) if len(chopped) > 0: found=1 try: pwent = pwd.getpwnam(chopped[0]) except: found=0 have_home_dir=0 if found: try: os.chdir(pwent[5]) have_home_dir=1 except: pass if have_home_dir: show=0 try: file = open('.no-finger','r') except: show=1 else: show=1 if show: sys.stdout.write(line) else: os.execlp(path,'finger',user) main()