Add a configuration field to change FQDN.

This commit is contained in:
James Valleroy 2014-12-20 12:15:27 -05:00 committed by Sunil Mohan Adapa
parent 01bea7808c
commit 87b860bff4
3 changed files with 70 additions and 0 deletions

27
actions/fqdn-change Executable file
View File

@ -0,0 +1,27 @@
#!/bin/sh
#
# This file is part of Plinth.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed 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
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
fqdn="$1"
hostname=$(hostname)
if grep -q 127.0.1.1 /etc/hosts ; then
sed -i "s/127.0.1.1.*/127.0.1.1 $fqdn $hostname/" /etc/hosts
else
sed -i "/127.0.0.1.*/a \
127.0.1.1 $fqdn $hostname" /etc/hosts
fi

View File

@ -32,6 +32,7 @@ import socket
from plinth import actions
from plinth import cfg
from plinth.signals import pre_hostname_change, post_hostname_change
from plinth.signals import fqdn_change
LOGGER = logging.getLogger(__name__)
@ -42,6 +43,11 @@ def get_hostname():
return socket.gethostname()
def get_fqdn():
"""Return the fully qualified domain name"""
return socket.getfqdn()
class TrimmedCharField(forms.CharField):
"""Trim the contents of a CharField"""
def clean(self, value):
@ -69,6 +75,15 @@ and must not be greater than 63 characters in length.'),
validators.RegexValidator(r'^[a-zA-Z][a-zA-Z0-9]{,62}$',
_('Invalid hostname'))])
fqdn = TrimmedCharField(
label=_('FQDN'),
help_text=_('Your FQDN is the global name by which other machines \
on the Internet can reach you. It must consist of alphanumeric words \
separated by dots.'),
validators=[
validators.RegexValidator(r'^[a-zA-Z][a-zA-Z0-9.]*$',
_('Invalid FQDN'))])
def __init__(self, *args, **kwargs):
# pylint: disable-msg=E1101, W0233
forms.Form.__init__(self, *args, **kwargs)
@ -125,6 +140,7 @@ def index(request):
def get_status():
"""Return the current status"""
return {'hostname': get_hostname(),
'fqdn': get_fqdn(),
'time_zone': open('/etc/timezone').read().rstrip()}
@ -141,6 +157,17 @@ def _apply_changes(request, old_status, new_status):
else:
messages.info(request, _('Hostname is unchanged'))
if old_status['fqdn'] != new_status['fqdn']:
try:
set_fqdn(new_status['fqdn'])
except Exception as exception:
messages.error(request, _('Error setting FQDN: %s') %
exception)
else:
messages.success(request, _('FQDN set'))
else:
messages.info(request, _('FQDN is unchanged'))
if old_status['time_zone'] != new_status['time_zone']:
try:
actions.superuser_run('timezone-change', [new_status['time_zone']])
@ -171,3 +198,18 @@ def set_hostname(hostname):
post_hostname_change.send_robust(sender='config',
old_hostname=old_hostname,
new_hostname=hostname)
def set_fqdn(fqdn):
"""Sets machine FQDN to fqdn"""
old_fqdn = get_fqdn()
# FQDN should be ASCII. If it's unicode, convert to ASCII.
fqdn = str(fqdn)
LOGGER.info('Changing FQDN to - %s', fqdn)
actions.superuser_run('fqdn-change', fqdn)
fqdn_change.send_robust(sender='config',
old_fqdn=old_fqdn,
new_fqdn=fqdn)

View File

@ -27,3 +27,4 @@ pre_module_loading = Signal()
post_module_loading = Signal()
pre_hostname_change = Signal(providing_args=['old_hostname', 'new_hostname'])
post_hostname_change = Signal(providing_args=['old_hostname', 'new_hostname'])
fqdn_change = Signal(providing_args=['old_fqdn', 'new_fqdn'])