#!/usr/bin/env python from os import path from crypt import crypt from re import compile as compile_regex def check_auth(user, password): """Perform authentication against the local systme. This function will perform authentication against the local system's /etc/shadow or /etc/passwd database for a given user and password. :param user: The username to perform authentication with :type user: str :param password: The password (plain text) for the given user :type password: str :returns: True if successful, None otherwise. :rtype: True or None """ salt_pattern = compile_regex(r"\$.*\$.*\$") passwd = "/etc/shadow" if path.exists("/etc/shadow") else "/etc/passwd" with open(passwd, "r") as f: rows = (line.strip().split(":") for line in f) records = [row for row in rows if row[0] == user] hash = records and records[0][1] salt = salt_pattern.match(hash).group() return crypt(password, salt) == hash