Source code for univention.lib.misc

#!/usr/bin/python3
# -*- coding: utf-8 -*-
"""
Univention Common Python Library
"""
# Copyright 2012-2022 Univention GmbH
#
# https://www.univention.de/
#
# All rights reserved.
#
# The source code of this program is made available
# under the terms of the GNU Affero General Public License version 3
# (GNU AGPL V3) as published by the Free Software Foundation.
#
# Binary versions of this program provided by Univention to you as
# well as other copyrighted, protected or trademarked materials like
# Logos, graphics, fonts, specific documentations and configurations,
# cryptographic keys etc. are subject to a license agreement between
# you and Univention and not subject to the GNU AGPL V3.
#
# In the case you use this program under the terms of the GNU AGPL V3,
# the program is provided in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public
# License with the Debian GNU/Linux or Univention distribution in file
# /usr/share/common-licenses/AGPL-3; if not, see
# <https://www.gnu.org/licenses/>.

import subprocess
from typing import Optional  # noqa: F401

from univention.config_registry import ConfigRegistry


[docs]def createMachinePassword(): # type: () -> str """ Returns a $(pwgen) generated password according to the requirements in |UCR| variables `machine/password/length` and `machine/password/complexity`. :returns: A password. :rtype: str """ ucr = ConfigRegistry() ucr.load() length = ucr.get('machine/password/length', '20') compl = ucr.get('machine/password/complexity', 'scn') p = subprocess.Popen(["pwgen", "-1", "-" + compl, length], stdout=subprocess.PIPE, stderr=subprocess.PIPE) (stdout, stderr) = p.communicate() if not isinstance(stdout, str): # Python 3 return stdout.decode('ASCII', 'replace').strip() return stdout.strip()
[docs]def getLDAPURIs(ucr=None): # type: (Optional[ConfigRegistry]) -> str """ Returns a space separated list of all configured |LDAP| servers, according to |UCR| variables `ldap/server/name` and `ldap/server/addition`. :param ConfigRegistry ucr: An optional |UCR| instance. :returns: A space separated list of |LDAP| |URI|. :rtype: str """ if ucr is None: ucr = ConfigRegistry() ucr.load() uri_string = '' ldaphosts = [] port = ucr.get('ldap/server/port', '7389') ldap_server_name = ucr.get('ldap/server/name') ldap_server_addition = ucr.get('ldap/server/addition') if ldap_server_name: ldaphosts.append(ldap_server_name) if ldap_server_addition: ldaphosts.extend(ldap_server_addition.split()) if ldaphosts: urilist = ["ldap://%s:%s" % (host, port) for host in ldaphosts] uri_string = ' '.join(urilist) return uri_string
[docs]def getLDAPServersCommaList(ucr=None): # type: (Optional[ConfigRegistry]) -> str """ Returns a comma-separated string with all configured |LDAP| servers, `ldap/server/name` and `ldap/server/addition`. :param ConfigRegistry ucr: An optional |UCR| instance. :returns: A space separated list of |LDAP| host names. :rtype: str """ if ucr is None: ucr = ConfigRegistry() ucr.load() ldap_servers = '' ldaphosts = [] ldap_server_name = ucr.get('ldap/server/name') ldap_server_addition = ucr.get('ldap/server/addition') if ldap_server_name: ldaphosts.append(ldap_server_name) if ldap_server_addition: ldaphosts.extend(ldap_server_addition.split()) if ldaphosts: ldap_servers = ','.join(ldaphosts) return ldap_servers
[docs]def custom_username(name, ucr=None): # type: (str, Optional[ConfigRegistry]) -> str """ Returns the customized user name configured via |UCR| `users/default/*`. :param str name: A user name. :param ConfigRegistry ucr: An optional |UCR| instance. :returns: The translated user name. :rtype: str :raises ValueError: if no name is given. """ if not name: raise ValueError() if ucr is None: ucr = ConfigRegistry() ucr.load() return ucr.get("users/default/" + name.lower().replace(" ", ""), name)
[docs]def custom_groupname(name, ucr=None): # type: (str, Optional[ConfigRegistry]) -> str """ Returns the customized group name configured via |UCR| `groups/default/*`. :param str name: A group name. :param ConfigRegistry ucr: An optional |UCR| instance. :returns: The translated group name. :rtype: str :raises ValueError: if no name is given. """ if not name: raise ValueError() if ucr is None: ucr = ConfigRegistry() ucr.load() return ucr.get("groups/default/" + name.lower().replace(" ", ""), name)