grml-hostname: improve regex for hostname matching [Closes: issue1005]
[grml-scripts.git] / usr_sbin / grml-hostname
1 #!/bin/sh
2 # Filename:      grml-hostname
3 # Purpose:       simple frontend to set hostname
4 # Authors:       (c) Michael Prokop <mika@grml.org>
5 # Bug-Reports:   see http://grml.org/bugs/
6 # License:       This file is licensed under the GPL v2.
7 ################################################################################
8
9 . /etc/grml/script-functions
10
11 check4root || exit 1
12
13 [ -n "$SUDO_USER" ] && RUNASUSER=$SUDO_USER || RUNASUSER=grml
14
15 PN='grml-hostname'
16 OLDHOSTNAME="$(hostname)"
17
18 case "$1" in -h|--help) echo "Usage: $0 [hostname]">&2; exit 1 ;; esac
19
20 if [ -n "$1" ] ; then
21    NEW_HOSTNAME="$1"
22    NONINTERACTIVE=1
23 else
24    if [ -x /usr/bin/random-hostname ] ; then
25       NEW_HOSTNAME="$(/usr/bin/random-hostname)"
26    else
27       NEW_HOSTNAME="$(hostname)"
28    fi
29 fi
30
31 if [ -z "$NONINTERACTIVE" ] ; then
32    NEW_HOSTNAME="$(dialog --stdout --title "${PN}" --extra-button --extra-label "Propose hostname" \
33    --inputbox "Set hostname (/etc/hostname, /etc/hosts and /etc/postfix/main.cf will be adjusted)\
34 \n\nTip: press 'Propose hostname' for another proposal" 14 70 $NEW_HOSTNAME)"
35   retval=$?
36 else
37   retval=0
38 fi
39
40 case $retval in
41   0)
42      echo "$NEW_HOSTNAME" > /etc/hostname
43      echo "$NEW_HOSTNAME" > /etc/mailname
44      sed -ir "s/^\(127.0.0.1\s*\).*localhost.*/\1$NEW_HOSTNAME localhost/" /etc/hosts
45      sed -ir "s/^\(::1\s*\).*ip6-localhost.*/\1ip6-localhost ip6-loopback $NEW_HOSTNAME/" /etc/hosts
46
47      POSTFIX=''
48      if [ -r /etc/postfix/main.cf ] ; then
49        sed -i "s/^mydestination = .*/mydestination = $NEW_HOSTNAME, localhost, localhost.localdomain/" /etc/postfix/main.cf && \
50        sed -i "s/^myhostname = .*/myhostname = $NEW_HOSTNAME/" /etc/postfix/main.cf && POSTFIX='
51 Configuration of myhostname in /etc/postfix/main.cf has been adjusted as well. Do not forget to restart postfix if necessary.'
52      fi
53
54      if [ -n "$DISPLAY" ] ; then
55        if sudo -u $RUNASUSER xauth add $(xauth -n list | grep "${OLDHOSTNAME}/unix:0" | sed "s|${OLDHOSTNAME}/unix:0|${NEW_HOSTNAME}/unix:0|") ; then
56           sudo -u $RUNASUSER xauth remove "${OLDHOSTNAME}/unix:0"
57        fi
58      fi
59
60      /etc/init.d/hostname.sh
61
62      if [ -z "$NONINTERACTIVE" ] ; then
63         dialog --stdout --title "${PN}" --msgbox "Setting hostname to $NEW_HOSTNAME was successful.$POSTFIX" 0 0
64      else
65         echo "Setting hostname to $NEW_HOSTNAME: done"
66      fi
67      exit 0
68      ;;
69   1)
70      echo "Cancel pressed."
71      ;;
72   3)
73      $0 ;;
74   255)
75      echo "ESC pressed."
76      ;;
77 esac
78
79 ## END OF FILE #################################################################