def reset_locale(self, locale):
        locale = Locale(locale)
        locale.codeset = self.locale.codeset
        MODULE.info('Switching language to: %s' % locale)
        os.putenv('LANG', str(self.locale))
        try:
            _locale.setlocale(_locale.LC_ALL, str(locale))
        except _locale.Error:
            MODULE.warn(
                'Locale %s is not supported, using fallback locale "C" instead.'
                % locale)
            _locale.setlocale(_locale.LC_ALL, 'C')
        self.locale = locale

        # dynamically change the translation methods
        _translation.set_language(str(self.locale))
        i18nXKeyboard.set_language(str(self.locale))
        network._translation.set_language(str(self.locale))
        AppCache().clear_cache()
Esempio n. 2
0
	def run(self, args):
		# locale must be set before importing UDM!
		log_init('/dev/stdout', args.debug)
		language = str(Locale(args.language))
		locale.setlocale(locale.LC_MESSAGES, language)
		os.umask(0o077)  # FIXME: should probably be changed, this is what UMC sets

		# The UMC-Server and module processes are clearing environment variables
		os.environ.clear()
		os.environ['PATH'] = '/bin:/sbin:/usr/bin:/usr/sbin'
		os.environ['LANG'] = language

		import univention.admin.modules as udm_modules
		udm_modules.update()

		from univention.admin.rest.module import Application
		application = Application(serve_traceback=ucr.is_true('directory/manager/rest/show-tracebacks', True))

		server = HTTPServer(application)
		if args.port:
			server.bind(args.port)
		server.start(args.cpus)

		if args.unix_socket:
			socket = bind_unix_socket(args.unix_socket)
			server.add_socket(socket)
		signal.signal(signal.SIGTERM, partial(self.signal_handler_stop, server))
		signal.signal(signal.SIGINT, partial(self.signal_handler_stop, server))
		signal.signal(signal.SIGHUP, self.signal_handler_reload)

		channel = logging.StreamHandler()
		channel.setFormatter(tornado.log.LogFormatter(fmt='%(color)s%(asctime)s  %(levelname)10s      (%(process)9d) :%(end_color)s %(message)s', datefmt='%d.%m.%y %H:%M:%S'))
		logger = logging.getLogger()
		logger.setLevel(logging.INFO)
		logger.addHandler(channel)

		try:
			tornado.ioloop.IOLoop.current().start()
		except Exception:
			CORE.error(traceback.format_exc())
			raise
Esempio n. 3
0
    def run(self, args):
        # locale must be set before importing UDM!
        log_init('/dev/stdout', args.debug)
        language = str(Locale(args.language))
        locale.setlocale(locale.LC_MESSAGES, language)
        os.umask(
            0o077)  # FIXME: should probably be changed, this is what UMC sets

        # The UMC-Server and module processes are clearing environment variables
        os.environ.clear()
        os.environ['PATH'] = '/bin:/sbin:/usr/bin:/usr/sbin'
        os.environ['LANG'] = language

        import univention.admin.modules as udm_modules
        udm_modules.update()

        from univention.admin.rest.module import Application
        application = Application(serve_traceback=ucr.is_true(
            'directory/manager/rest/show-tracebacks', True))

        server = HTTPServer(application)
        server.start(args.cpus)

        if args.port:
            server.listen(args.port)
        if args.unix_socket:
            socket = bind_unix_socket(args.unix_socket)
            server.add_socket(socket)
        signal.signal(signal.SIGTERM, partial(self.signal_handler_stop,
                                              server))
        signal.signal(signal.SIGINT, partial(self.signal_handler_stop, server))
        signal.signal(signal.SIGHUP, self.signal_handler_reload)
        tornado.log.enable_pretty_logging()

        try:
            tornado.ioloop.IOLoop.current().start()
        except (SystemExit, KeyboardInterrupt):
            raise
        except:
            CORE.error(traceback.format_exc())
            raise
Esempio n. 4
0
	def update_language(self, locales):
		for _locale in locales:
			language = None
			try:
				CORE.info("Setting locale %r" % (_locale,))
				_locale = Locale(_locale)
				language = '%s-%s' % (_locale.language, _locale.territory) if _locale.territory else '%s' % (_locale.language,)
				if language != self.__current_language:
					self.set_locale(str(_locale))
				self.__current_language = language
				return
			except (locale.Error, I18N_Error) as exc:
				if language in ('en', 'en-US'):  # the system is missing english locale
					self.set_locale('C')
					if not self.__current_language:  # only log once!
						CORE.error('Missing "en_US.UTF-8:UTF-8" in UCR variable "locale"')
					self.__current_language = language
					return
				CORE.warn("Locale %r is not available: %s" % (str(_locale), exc))
		CORE.warn('Could not set language. Resetting locale.')
		self.set_locale('C')
		self.__current_language = None
		raise NotAcceptable(self._('Specified locale is not available'))
 def set_locale(self, _locale):
     self.set_language(_locale)
     _locale = str(Locale(_locale))
     locale.setlocale(locale.LC_MESSAGES, _locale)
     locale.setlocale(locale.LC_CTYPE, _locale)
def auto_complete_values_for_join(newValues, current_locale=None):
    # try to automatically determine the domain, except on a dcmaster and basesystem
    if newValues[
            'server/role'] != 'domaincontroller_master' and not newValues.get(
                'domainname') and newValues['server/role'] != 'basesystem':
        ucr.load()
        for nameserver in ('nameserver1', 'nameserver2', 'nameserver3'):
            if newValues.get('domainname'):
                break
            newValues['domainname'] = get_ucs_domain(
                newValues.get(nameserver, ucr.get(nameserver)))
        if not newValues['domainname']:
            raise Exception(
                _('Cannot automatically determine the domain. Please specify the server\'s fully qualified domain name.'
                  ))

    # The check "and 'domainname' in newValues" is solely for basesystems
    isAdMember = 'ad/member' in newValues and 'ad/address' in newValues
    if 'windows/domain' not in newValues:
        if isAdMember:
            MODULE.process('Searching for NETBIOS domain in AD')
            for nameserver in ('nameserver1', 'nameserver2', 'nameserver3'):
                ns = newValues.get(nameserver, ucr.get(nameserver))
                if ns:
                    try:
                        ad_domain_info = lookup_adds_dc(
                            newValues.get('ad/address'),
                            ucr={'nameserver1': ns})
                    except failedADConnect:
                        pass
                    else:
                        newValues['windows/domain'] = ad_domain_info[
                            'Netbios Domain']
                        MODULE.process(
                            'Setting NETBIOS domain to AD value: %s' %
                            newValues['windows/domain'])
                        break

    if 'windows/domain' not in newValues and 'domainname' in newValues:
        newValues['windows/domain'] = domain2windowdomain(
            newValues.get('domainname'))
        MODULE.process('Setting NETBIOS domain to default: %s' %
                       newValues['windows/domain'])

    # make sure that AD connector package is installed if AD member mode is chosen
    selectedComponents = set(newValues.get('components', []))
    if isAdMember and newValues['server/role'] == 'domaincontroller_master':
        selectedComponents.add('univention-ad-connector')

    # make sure to install the memberof overlay if it is installed on the DC Master
    if newValues['server/role'] not in ('domaincontroller_master',
                                        'basesystem', 'memberserver'):
        if newValues.pop('install_memberof_overlay', None):
            selectedComponents.add('univention-ldap-overlay-memberof')

    # add lists with all packages that should be removed/installed on the system
    if selectedComponents:
        currentComponents = set()
        for iapp in get_apps():
            if iapp['is_installed']:
                for ipackages in (iapp['default_packages'],
                                  iapp['default_packages_master']):
                    currentComponents = currentComponents.union(ipackages)

        # set of all available software packages
        allComponents = set(['univention-ldap-overlay-memberof'])
        for iapp in get_apps():
            for ipackages in (iapp['default_packages'],
                              iapp['default_packages_master']):
                allComponents = allComponents.union(ipackages)

        # get all packages that shall be removed
        removeComponents = list(allComponents
                                & (currentComponents - selectedComponents))
        newValues['packages_remove'] = ' '.join(removeComponents)

        # get all packages that shall be installed
        installComponents = list(allComponents
                                 & (selectedComponents - currentComponents))
        newValues['packages_install'] = ' '.join(installComponents)

    current_locale = Locale(ucr.get('locale/default', 'en_US.UTF-8:UTF-8'))
    if newValues['server/role'] == 'domaincontroller_master':
        # add newValues for SSL UCR variables
        default_locale = current_locale
        if 'locale/default' in newValues:
            default_locale = Locale(newValues['locale/default'])
        newValues['ssl/state'] = default_locale.territory
        newValues['ssl/locality'] = default_locale.territory
        newValues['ssl/organization'] = newValues.get('organization',
                                                      default_locale.territory)
        newValues['ssl/organizationalunit'] = 'Univention Corporate Server'
        newValues['ssl/email'] = 'ssl@{domainname}'.format(**newValues)

    # make sure that the locale of the current session is also supported
    # ... otherwise the setup scripts will fail after regenerating the
    # locale data (in 20_language/10language) with some strange python
    # exceptions about unsupported locale strings...
    if 'locale' not in newValues:
        newValues['locale'] = newValues.get('locale/default', '')
    forcedLocales = ['en_US.UTF-8:UTF-8', 'de_DE.UTF-8:UTF-8'
                     ]  # we need en_US and de_DE locale as default language
    if current_locale:
        current_locale = '{0}:{1}'.format(str(current_locale),
                                          current_locale.codeset)
        forcedLocales.append(current_locale)
    for ilocale in forcedLocales:
        if ilocale not in newValues['locale']:
            newValues['locale'] = '%s %s' % (newValues['locale'], ilocale)

    return newValues
 def __init__(self):
     lang, codeset = getdefaultlocale()
     if lang is None:
         lang = 'C'
     self.locale = Locale(lang)