Add support for remote logging to syslogd via an install.cfg variable.

Approved by:	cperciva (mentor)
MFC after:	3 weeks
This commit is contained in:
Randi Harper 2010-07-07 22:53:58 +00:00
parent 092b5c88c5
commit e05c99755c
3 changed files with 82 additions and 6 deletions

View File

@ -17,6 +17,9 @@ ipaddr=204.216.27.230
netmask=255.255.255.240
################################
# Log to a remote syslogd server
syslogdServer=10.0.1.1
################################
# Which installation device to use - ftp is pointed directly at my local
# machine and the installation device is my WD8013 ethernet interface.

View File

@ -34,10 +34,18 @@
*
*/
#include "sysinstall.h"
#include <stdarg.h>
#include <sys/ioctl.h>
#include <sys/consio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <stdarg.h>
#include <syslog.h>
#include "sysinstall.h"
Boolean
isDebug(void)
@ -47,6 +55,50 @@ isDebug(void)
return (cp = variable_get(VAR_DEBUG)) && strcmp(cp, "no");
}
static Boolean
isNetworkUp(void)
{
if (!(RunningAsInit) ||
(variable_check("NETWORK_CONFIGURED=NO")) != TRUE) {
return TRUE;
}
return FALSE;
}
void
msgSyslog(const char *errstr)
{
struct sockaddr_in server;
struct hostent *hp;
char *host, *line;
int sock;
if (!isNetworkUp())
return;
if (!(host = variable_get(VAR_SYSLOG_SERVER)))
return;
if (!(hp = gethostbyname2(host, AF_INET)))
return;
if (!(sock = socket(AF_INET, SOCK_DGRAM, 0)))
return;
bzero(&server, sizeof(struct sockaddr_in));
server.sin_family = AF_INET;
server.sin_port = htons(514);
bcopy((char *)hp->h_addr, (char *)&server.sin_addr, hp->h_length);
asprintf(&line, "<%d>%s", LOG_NOTICE, errstr);
sendto(sock, line, strlen(line), 0, (struct sockaddr *)&server,
sizeof(struct sockaddr_in));
close(sock);
free(line);
}
/* Whack up an informational message on the status line, in stand-out */
void
msgYap(char *fmt, ...)
@ -99,6 +151,8 @@ msgInfo(char *fmt, ...)
attrset(attrs);
move(StatusLine, 79);
refresh();
msgSyslog(errstr);
}
/* Whack up a warning on the status line */
@ -120,8 +174,15 @@ msgWarn(char *fmt, ...)
mvaddstr(StatusLine, 0, errstr);
attrset(attrs);
refresh();
if (OnVTY && isDebug())
msgDebug("Warning message `%s'\n", errstr);
/* we don't want this hitting syslog twice */
if (isDebug()) {
if (OnVTY)
msgDebug("Warning message `%s'\n", errstr);
else
msgSyslog(errstr);
}
}
/* Whack up an error on the status line */
@ -143,8 +204,14 @@ msgError(char *fmt, ...)
mvaddstr(StatusLine, 0, errstr);
attrset(attrs);
refresh();
if (OnVTY && isDebug())
msgDebug("Error message `%s'\n", errstr);
/* we don't want this hitting syslog twice */
if (isDebug()) {
if (OnVTY)
msgDebug("Error message `%s'\n", errstr);
else
msgSyslog(errstr);
}
}
/* Whack up a fatal error on the status line */
@ -174,6 +241,8 @@ msgFatal(char *fmt, ...)
refresh();
if (OnVTY)
msgDebug("Fatal error `%s'!\n", errstr);
else
msgSyslog(errstr);
getch();
systemShutdown(1);
}
@ -316,6 +385,9 @@ msgDebug(char *fmt, ...)
va_start(args, fmt);
vsnprintf((char *)(dbg + strlen(dbg)), FILENAME_MAX, fmt, args);
va_end(args);
msgSyslog(dbg);
write(DebugFD, dbg, strlen(dbg));
}

View File

@ -183,6 +183,7 @@
#define VAR_SERIAL_SPEED "serialSpeed"
#define VAR_SLOW_ETHER "slowEthernetCard"
#define VAR_SWAP_SIZE "swapSize"
#define VAR_SYSLOG_SERVER "syslogdServer"
#define VAR_TRY_DHCP "tryDHCP"
#define VAR_TRY_RTSOL "tryRTSOL"
#define VAR_UFS_PATH "ufs"