Source code for univention.lib.license_tools
#!/usr/bin/python3
# SPDX-FileCopyrightText: 2015-2025 Univention GmbH
# SPDX-License-Identifier: AGPL-3.0-only
from __future__ import annotations
import datetime
import sys
from argparse import ArgumentParser, RawDescriptionHelpFormatter
import univention.uldap
[docs]
class LicenseCheckError(Exception):
"""Generic error during license check"""
[docs]
class LicenseExpired(LicenseCheckError):
"""The license is expired"""
[docs]
class LicenseNotFound(LicenseCheckError):
"""The license cannot be found in LDAP"""
[docs]
def is_CSP_license(lo: univention.uldap.access | None = None) -> bool:
"""
Function to detect if installed license is a cloud service provider license (CSP).
:param univention.uldap.access lo: Optional |LDAP| connection to re-use. Otherwise a new |LDAP| connection with machine credentials is created.
:returns: `True` if a valid CSP license has been found or `False` if a valid non-CSP license has been found.
:raises LicenseNotFound: if no license was found.
:raises LicenseExpired: if the license has expired.
"""
if not lo:
lo = univention.uldap.getMachineConnection()
result = lo.search(filter='(&(objectClass=univentionLicense)(cn=admin))', attr=['univentionLicenseEndDate', 'univentionLicenseOEMProduct'])
if not result:
raise LicenseNotFound()
attrs = result[0][1]
now = datetime.date.today()
enddate = attrs.get('univentionLicenseEndDate', [b'01.01.1970'])[0].decode('ASCII', 'replace')
if enddate != "unlimited":
(day, month, year) = enddate.split('.', 2)
then = datetime.date(int(year), int(month), int(day))
if now > then:
raise LicenseExpired('endDate = %s' % (enddate,))
return b'CSP' in attrs.get('univentionLicenseOEMProduct', [])
if __name__ == '__main__':
description = '''Checks the installed UCS license and returns an appropriate
exitcode depending on the license status and license type.
Possible exitcodes:
0: UCS license is valid and contains 'CSP' in the list of OEM products
10: UCS license is valid and does not contain 'CSP' in the list of OEM products
11: UCS license is expired
12: UCS license is invalid or not found'''
parser = ArgumentParser(
description=description,
formatter_class=RawDescriptionHelpFormatter,
)
parser.parse_args()
try:
result = is_CSP_license()
except LicenseExpired:
print('License expired')
sys.exit(11)
except LicenseNotFound:
print('License not found')
sys.exit(12)
except LicenseCheckError:
print('License verification error')
sys.exit(12)
print('CSP=%s' % (result,))
if not result:
sys.exit(10)
sys.exit(0)