diff options
author | cjc <cjc@FreeBSD.org> | 2001-08-27 21:37:15 +0000 |
---|---|---|
committer | cjc <cjc@FreeBSD.org> | 2001-08-27 21:37:15 +0000 |
commit | e19dd0c5938bb188e794359189cd55a5961e77b2 (patch) | |
tree | b4ef55f985360ed190f86cbb22cd9e683dbf85d7 /usr.sbin/syslogd | |
parent | 8375ce85c2b31a7d940f0679d1e289ba5fee680e (diff) | |
download | FreeBSD-src-e19dd0c5938bb188e794359189cd55a5961e77b2.zip FreeBSD-src-e19dd0c5938bb188e794359189cd55a5961e77b2.tar.gz |
Gives syslogd(8) the ability to refresh its idea of the hostname of
the system on which it is running. The hostname is reloaded when
'HUPped' and a log message generated to note a change (before anyone
points it out, this is not an added security feature).
PR: bin/24444
Reviewed by: freebsd-audit
Approved by: ru
MFC after: 2 weeks
Diffstat (limited to 'usr.sbin/syslogd')
-rw-r--r-- | usr.sbin/syslogd/syslogd.c | 34 |
1 files changed, 27 insertions, 7 deletions
diff --git a/usr.sbin/syslogd/syslogd.c b/usr.sbin/syslogd/syslogd.c index 3866d73..d300c84 100644 --- a/usr.sbin/syslogd/syslogd.c +++ b/usr.sbin/syslogd/syslogd.c @@ -318,7 +318,7 @@ main(argc, argv) struct sockaddr_un sunx, fromunix; struct sockaddr_storage frominet; FILE *fp; - char *p, *hname, line[MAXLINE + 1]; + char *hname, line[MAXLINE + 1]; struct timeval tv, *tvp; struct sigaction sact; sigset_t mask; @@ -398,12 +398,6 @@ main(argc, argv) 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); @@ -1346,10 +1340,26 @@ init(signo) char cline[LINE_MAX]; char prog[NAME_MAX+1]; char host[MAXHOSTNAMELEN]; + char oldLocalHostName[MAXHOSTNAMELEN]; + char hostMsg[2*MAXHOSTNAMELEN+40]; dprintf("init\n"); /* + * Load hostname (may have changed). + */ + if (signo != 0) + (void)strlcpy(oldLocalHostName, LocalHostName, + sizeof(oldLocalHostName)); + if (gethostname(LocalHostName, sizeof(LocalHostName))) + err(EX_OSERR, "gethostname() failed"); + if ((p = strchr(LocalHostName, '.')) != NULL) { + *p++ = '\0'; + LocalDomain = p; + } else + LocalDomain = ""; + + /* * Close all open log files. */ Initialized = 0; @@ -1498,6 +1508,16 @@ init(signo) logmsg(LOG_SYSLOG|LOG_INFO, "syslogd: restart", LocalHostName, ADDDATE); dprintf("syslogd: restarted\n"); + /* + * Log a change in hostname, but only on a restart. + */ + if (signo != 0 && strcmp(oldLocalHostName, LocalHostName) != 0) { + (void)snprintf(hostMsg, sizeof(hostMsg), + "syslogd: hostname changed, \"%s\" to \"%s\"", + oldLocalHostName, LocalHostName); + logmsg(LOG_SYSLOG|LOG_INFO, hostMsg, LocalHostName, ADDDATE); + dprintf("%s\n", hostMsg); + } } /* |