From owner-freebsd-current Sat Jan 20 1:26:21 2001 Delivered-To: freebsd-current@freebsd.org Received: from gratis.grondar.za (grouter.grondar.za [196.7.18.65]) by hub.freebsd.org (Postfix) with ESMTP id 477F337B400; Sat, 20 Jan 2001 01:25:57 -0800 (PST) Received: from grondar.za (root@gratis.grondar.za [196.7.18.133]) by gratis.grondar.za (8.11.1/8.11.1) with ESMTP id f0K9O8I52405; Sat, 20 Jan 2001 11:24:27 +0200 (SAST) (envelope-from mark@grondar.za) Message-Id: <200101200924.f0K9O8I52405@gratis.grondar.za> To: cjclark@alum.mit.edu Cc: FreeBSD-gnats-submit@FreeBSD.ORG, current@FreeBSD.ORG Subject: Re: syslogd(8) does not update hostname References: <200101190330.f0J3UPa75677@rfx-216-196-73-168.users.reflexcom.com> In-Reply-To: <200101190330.f0J3UPa75677@rfx-216-196-73-168.users.reflexcom.com> ; from cjclark@reflexcom.com "Thu, 18 Jan 2001 19:30:25 PST." Date: Sat, 20 Jan 2001 11:24:16 +0200 From: Mark Murray Sender: owner-freebsd-current@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.ORG I don't agree with this change. hostname != name-that-IP-address-resolves-to. I can see how loggin the IP address (or some manifestation thereof) to a central logger, but this is too strong. Example: My laptop has a hostname set for my home network, and I connect it to my work network and DHCP an IP address there. I would be HOPPING mad if that caused my hostname and VPN to break. M > >Submitter-Id: current-users > >Originator: Crist J. Clark > >Organization: > >Confidential: no > >Synopsis: syslogd(8) does not update hostname > >Severity: non-critical > >Priority: medium > >Category: bin > >Release: FreeBSD 5.0-CURRENT i386 > >Class: sw-bug > >Environment: > > All standard FreeBSD distributions. The code discussed is from > 5.0-CURRENT, but should trivially merge back to -STABLE. > > >Description: > > Many tools and progams within FreeBSD date back to a time when > it was expected that a machines IP and hostname seldom, if ever, > changed. Even when a IP and hostname were received at boot, it rarely > changed until shutdown. With many users using protocols like DHCP > where IP and hostname change with time, many tools do not deal well > with this behavior. > > One of these tools is syslogd(8). syslogd(8) is typically > started at boot time and runs until shutdown. However, syslogd(8) > loads the hostname at startup and syslogd(8)'s idea of the hostname > can never change while it is running. > > One might expect that a SIGHUP would cause syslogd(8) to load > the new hostname since a SIGHUP can cause syslogd(8) to re-read its > configuration file and re-open the log files, but it does not. > > The fact that the hostname does not change can cause confusion > in the log files. It could be especially troublesome when a machine is > logging to a central loghost. At any given time, the names in the log > files may not have any correspondence to the names the hosts currently > have. There are even issues on a host that gets its IP and hostname > via DHCP at boot and the name never changes. syslogd(8) is started > before any network services are initialized in /etc/rc. > > I propose that syslogd(8) should reload the hostname with a > SIGHUP. I cannot think of any reason that one should not update the > hostname, but as I pointed out, there are reasons why one would want > that behavior. > > >How-To-Repeat: > > # hostname -s > bubbles > # hostname bubbles-test.domain.org > # kill -HUP `cat /var/run/syslog.pid` > # logger -p user.notice "hostname test" > # tail -4 /var/log/messages > Jan 17 21:45:00 bubbles /boot/kernel/kernel: acd0: CDROM at ata0-slave using BIOSPIO > Jan 17 21:45:00 bubbles /boot/kernel/kernel: Mounting root from ufs:/dev/ad0s1a > Jan 18 00:41:14 bubbles su: cjc to root on /dev/ttyp0 > Jan 18 00:58:34 bubbles cjc: hostname test > > >Fix: > > I do not see any reason we cannot move the code that gets the > hostname from the main() function into init(). init() is called when > to "reload" settings. The hostname is never used in main() before > init() is called. The patch is against -CURRENT and my box has not > exploded yet. > > Here is what the above test looks like with the change in > place. > > # hostname -s > bubbles > # hostname bubbles-test.cjclark.org > # kill -HUP `cat /var/run/syslog.pid ` > # logger -p user.notice "syslogd hostname test" > # hostname bubbles.cjclark.org > # kill -HUP `cat /var/run/syslog.pid ` > # logger -p user.notice "syslogd hostname test" > # tail -4 /var/log/messages > Jan 18 13:36:58 bubbles su: BAD SU cjc to root on /dev/ttyp0 > Jan 18 13:37:03 bubbles su: cjc to root on /dev/ttyp0 > Jan 18 13:38:40 bubbles-test cjc: syslogd hostname test > Jan 18 13:39:11 bubbles cjc: syslogd hostname test > > > --- syslogd.c 2001/01/18 08:06:34 > +++ syslogd.c 2001/01/18 08:09:23 > @@ -395,12 +395,6 @@ > > consfile.f_type = F_CONSOLE; > (void)strcpy(consfile.f_un.f_fname, ctty + sizeof _PATH_DEV - 1); > - (void)gethostname(LocalHostName, sizeof(LocalHostName)); > - if ((p = strchr(LocalHostName, '.')) != NULL) { > - *p++ = '\0'; > - LocalDomain = p; > - } else > - LocalDomain = ""; > (void)strcpy(bootfile, getbootfile()); > (void)signal(SIGTERM, die); > (void)signal(SIGINT, Debug ? die : SIG_IGN); > @@ -1342,6 +1336,16 @@ > char host[MAXHOSTNAMELEN+1]; > > dprintf("init\n"); > + > + /* > + * Load hostname (may have changed) > + */ > + (void)gethostname(LocalHostName, sizeof(LocalHostName)); > + if ((p = strchr(LocalHostName, '.')) != NULL) { > + *p++ = '\0'; > + LocalDomain = p; > + } else > + LocalDomain = ""; > > /* > * Close all open log files. > > > To Unsubscribe: send mail to majordomo@FreeBSD.org > with "unsubscribe freebsd-current" in the body of the message > -- Mark Murray Warning: this .sig is umop ap!sdn To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-current" in the body of the message