def get_machine_connection():
	# TODO: find out and make a comment why ldap_master is False
	try:
		# get LDAP connection with machine account
		return udm_uldap.getMachineConnection(ldap_master=False)
	except (LDAPError, IOError) as exc:
		# problems connection to LDAP server or the server is not joined (machine.secret is missing)
		CORE.warn('An error occurred connecting to the LDAP server: %s' % exc)
		return None, None
def get_userdn_by_username(username):
	lo, po = get_machine_connection()
	if lo:
		# get the LDAP DN of the authorized user
		ldap_dn = lo.searchDn('(&(uid=%s)(objectClass=posixAccount))' % escape_filter_chars(username))
		if not ldap_dn:
			CORE.info('The LDAP DN for user %s could not be found' % (username))
			return
		CORE.info('The LDAP DN for user %s is %s' % (username, ldap_dn))
		return ldap_dn[0]
def __set_users_module():
	global users_module
	if users_module:
		return
	try:
		# get the users/user UDM module
		udm_modules.update()
		users_module = udm_modules.get('users/user')
	except udm_errors.base as e:
		# UDM error, user module coule not be initiated
		CORE.warn('An error occurred getting the UDM users/user module: %s' % e)
def get_user_object(userdn, password):
	lo, po = get_user_connection(userdn, password)
	if not lo:
		return
	try:
		# try to open the user object
		user = udm_objects.get(users_module, None, lo, po, userdn)
		if not user:
			raise udm_errors.noObject()
		user.open()
		return user
	except (udm_errors.base, LDAPError) as exc:
		CORE.warn('Failed to open UDM user object %s: %s' % (userdn, exc))
	def set_language(self, language):
		success = True
		for language in [language, 'C']:
			CORE.info('Setting language: %s' % (language,))
			try:
				self.core_i18n.set_language(language)
				self.i18n.set_locale(language)
			except (I18N_Error, AttributeError, TypeError):
				CORE.warn('Setting locale to specified locale failed (%s)' % (language,))
				success = False
			else:
				break
		return success
def __init_users_module():
	__set_users_module()
	try:
		# make sure that the UDM users/user module could be initiated
		if not users_module:
			raise udm_errors.base('UDM module users/user could not be initiated')

		global __udm_users_module_initialised
		if not __udm_users_module_initialised:
			# initiate the users/user UDM module
			lo, po = get_machine_connection()
			udm_modules.init(lo, po, users_module)
			__udm_users_module_initialised = True
	except (udm_errors.base, LDAPError) as exc:
		CORE.warn('%s' % (exc,))
def get_user_connection(userdn, password):
	__init_users_module()
	ucr.load()

	try:
		# open an LDAP connection with the user password and credentials
		return udm_uldap.access(
			host=ucr.get('ldap/server/name'),
			base=ucr.get('ldap/base'),
			port=int(ucr.get('ldap/server/port', 7389)),
			binddn=userdn,
			bindpw=password,
			follow_referral=True
		), udm_uldap.position(ucr.get('ldap/base'))
	except (udm_errors.base, LDAPError) as exc:
		CORE.warn('Failed to get ldap connection for UDM user object %s: %s' % (userdn, exc))
		return None, None
def set_locale(locale):
	try:
		locale = str(Locale(locale))
		setlocale(LC_MESSAGES, locale)
		CORE.info("Successful load specified locale (%s)" % (locale,))
	except LocaleError:
		CORE.warn("Specified locale is not available (%s)" % (locale,))
		CORE.warn("Falling back to C")
		setlocale(LC_MESSAGES, 'C')
		return False
	else:
		return True