Пример #1
0
 def addUTMPEntry(self, loggedIn=1):
     if not utmp:
         return
     ipAddress = self.avatar.conn.transport.transport.getPeer().host
     (packedIp, ) = struct.unpack("L", socket.inet_aton(ipAddress))
     ttyName = self.ptyTuple[2][5:]
     t = time.time()
     t1 = int(t)
     t2 = int((t - t1) * 1e6)
     entry = utmp.UtmpEntry()
     entry.ut_type = loggedIn and utmp.USER_PROCESS or utmp.DEAD_PROCESS
     entry.ut_pid = self.pty.pid
     entry.ut_line = ttyName
     entry.ut_id = ttyName[-4:]
     entry.ut_tv = (t1, t2)
     if loggedIn:
         entry.ut_user = self.avatar.username
         entry.ut_host = socket.gethostbyaddr(ipAddress)[0]
         entry.ut_addr_v6 = (packedIp, 0, 0, 0)
     a = utmp.UtmpRecord(utmp.UTMP_FILE)
     a.pututline(entry)
     a.endutent()
     b = utmp.UtmpRecord(utmp.WTMP_FILE)
     b.pututline(entry)
     b.endutent()
#!/usr/bin/python
# python utmp doesn't work on all releases
import utmp
from UTMPCONST import USER_PROCESS
# "touch"
file('/tmp/utmp.bogus', 'w').close()
# add record...
a = utmp.UtmpRecord('/tmp/utmp.bogus')
b = utmp.UtmpEntry()
b.ut_type = USER_PROCESS
b.ut_pid = 10000
b.ut_user = "******"
b.ut_line = '/tmp/evil'
b.ut_host = 'localhost'
b.ut_tv = (0, 0)
a.pututline(b)