From 03beee66af61d613a208040d0ce05f91108cc580 Mon Sep 17 00:00:00 2001 From: Nils Philippsen Date: Wed, 31 Mar 2021 15:04:21 +0200 Subject: [PATCH] make-people-page: Catch some common problems Skip over home directories which are unowned or owned by someone else than the user, or if the user themselves is unknown, and report. Signed-off-by: Nils Philippsen --- roles/people/files/make-people-page.py | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/roles/people/files/make-people-page.py b/roles/people/files/make-people-page.py index 0f14999559..53916e5be0 100644 --- a/roles/people/files/make-people-page.py +++ b/roles/people/files/make-people-page.py @@ -19,6 +19,7 @@ import grp import hashlib +import logging import os import pwd import stat @@ -27,6 +28,8 @@ from pathlib import Path from jinja2 import Template +log = logging.getLogger(__name__) + page_jinja_template = """ @@ -152,10 +155,28 @@ homedirs = sorted(d for d in topdir.glob("*") if d.is_dir()) users = {} for hdir in homedirs: + if hdir.stat().st_uid == 0: + log.info("'%s' is owned by root. Skipping.", hdir.name) + continue + + try: + owner_name = hdir.owner() + except KeyError: + log.warning("'%s' is not owned by a named user. Skipping.", hdir.name) + continue + + if owner_name != hdir.name: + log.warning("'%s' is owned by '%s'. Skipping.", hdir.name, owner_name) + continue + username = hdir.name user = {} - pwentry = pwd.getpwnam(username) + try: + pwentry = pwd.getpwnam(username) + except KeyError: + log.warning("User not found: %s. Skipping.", username) + continue user["name"] = pwentry.pw_gecos user["has_public_html"] = (hdir / "public_html").is_dir()