#!/usr/bin/python import SocketServer, string, os, socket class Finger(SocketServer.StreamRequestHandler): def handle(self): """ get username requested, return lookup results """ # drop privs os.setregid(65534, 65534) os.setreuid(65534, 65534) # do lookup username = self.rfile.readline(512).strip() self.wfile.write( self.find_user( username ) ) def find_user(self, userid): """ grep user on system """ ret = [] f = os.popen("who | grep %s" % userid) for line in f: ret.extend( [ line.strip(), "\r\n" ] ) f.close() if len(ret) == 0: ret.append("Sorry, they are not logged in.\r\n") return ''.join(ret) class ReusableTCPServer(SocketServer.ForkingTCPServer): def server_bind(self): self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) self.socket.bind(self.server_address) if __name__ == '__main__': server = ReusableTCPServer( ('', 79), Finger) server.serve_forever()