Files
vulncheck/tests/test_eol_teams_classic.py
T
vulncheck 4df65352ba feat(eol): flag Microsoft Teams classic as EOL since 2024-07-01
The lifecycle export does carry the classic client ("Microsoft Teams" /
release "Classic Teams Client", ends 2024-07-01), but Teams follows the
Modern policy: that date lives in "Release End Date" while the parser
reads the Extended/Retirement columns, which are empty on every Modern
row. So the row is dropped and a host still running classic Teams
produced no finding at all.

Reading Release End Date instead is not an option — for a supported
product it marks the end of a superseded release (every Windows 10
version row has one), which would report supported products as EOL.

So the date is fixed in code and matched on the two inventory names that
mean classic: "Microsoft Teams classic", and "Teams Machine-Wide
Installer" only at version 1.x, since the new client's bootstrapper
writes an entry of the same name with a 5-digit build.

The new client lists as plain "Microsoft Teams" and is now refused by
the export matcher outright: that string is the listing name for BOTH
releases, so the day Microsoft fills a retirement date on the classic
row, a current Teams would have read as CRITICAL EOL.
2026-08-17 10:24:40 +02:00

59 lines
2.3 KiB
Python

"""Microsoft Teams classic is EOL since 2024-07-01 — the new client is not.
The lifecycle export carries the classic client ("Microsoft Teams" / release
"Classic Teams Client"), but Teams follows the Modern policy, so its end date
sits in "Release End Date" while the parser reads Extended/Retirement. Every
Modern row is therefore dropped and a host still running classic Teams showed
nothing at all. Fixed date instead, matched on the two names that mean classic.
Both entries in the tester's software list are that product:
Teams Machine-Wide Installer 1.5.0.31168
Microsoft Teams classic 1.8.00.18356
while the current client lists as plain "Microsoft Teams" 26198.304.4946.9672
— and so does a machine-wide installer belonging to it, which is why the
installer needs its 1.x version to count.
Run: python tests/test_eol_teams_classic.py
"""
import os
import sys
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from app.services import ms_lifecycle_service as MSL # noqa: E402
def _resolve(name, version):
"""Resolver with the export stubbed to empty — no network, and it proves
the Teams answer comes from the fixed date, not from a matched row."""
orig = MSL.fetch_lifecycle_data
MSL.fetch_lifecycle_data = lambda db, force_refresh=False: []
try:
return MSL.resolve_ms_lifecycle_eol(
None, name, version, vendor="Microsoft Corporation")
finally:
MSL.fetch_lifecycle_data = orig
def test_classic_is_eol():
for name, version in (
("Microsoft Teams classic", "1.8.00.18356"),
("Teams Machine-Wide Installer", "1.5.0.31168"),
):
st = _resolve(name, version)
assert st is not None, f"{name}: no EOL finding"
assert st.is_eol, f"{name}: not flagged EOL"
assert st.eol_date == "2024-07-01", f"{name}: {st.eol_date}"
def test_current_teams_is_not_eol():
assert _resolve("Microsoft Teams", "26198.304.4946.9672") is None
# New client's own machine-wide installer — same name, 5-digit build.
assert _resolve("Teams Machine-Wide Installer", "26198.304.4946.9672") is None
if __name__ == "__main__":
test_classic_is_eol()
test_current_teams_is_not_eol()
print("OK — Teams classic EOL 2024-07-01, current Teams clean")