runv-server

server tooling for runv.club
Log | Files | Refs | README

netrc_password.py (948B)


      1 #!/usr/bin/env python3
      2 """
      3 Lê a palavra-passe SMTP de /root/.netrc para a máquina indicada (argv[1]).
      4 
      5 Usado por msmtp passwordeval. Executar apenas como root; saída só na stdout.
      6 Código de saída != 0 se não encontrar entrada.
      7 """
      8 from __future__ import annotations
      9 
     10 import netrc
     11 import sys
     12 from pathlib import Path
     13 
     14 NETRC_PATH = Path("/root/.netrc")
     15 
     16 
     17 def main() -> int:
     18     if len(sys.argv) != 2:
     19         return 2
     20     host = sys.argv[1].strip()
     21     if not host:
     22         return 2
     23     if not NETRC_PATH.is_file():
     24         return 1
     25     try:
     26         n = netrc.netrc(str(NETRC_PATH))
     27         tup = n.authenticators(host)
     28         if not tup:
     29             return 1
     30         _login, _account, password = tup
     31         if not password:
     32             return 1
     33         sys.stdout.write(password)
     34         sys.stdout.flush()
     35     except (netrc.NetrcParseError, OSError):
     36         return 1
     37     return 0
     38 
     39 
     40 if __name__ == "__main__":
     41     raise SystemExit(main())