#define __LOG_FILE "/var/log/messages"
/* Path to the unix socket */
-static char lfile[BUFSIZ] = "";
+static char lfile[BUFSIZ];
static char *logFilePath = __LOG_FILE;
*/
static inline void sem_down(int semid)
{
- if ( semop(semid, SMwdn, 2) == -1 )
+ if ( semop(semid, SMwdn, 3) == -1 )
perror_msg_and_die("semop[SMwdn]");
}
struct iovec iov[IOV_COUNT];
struct iovec *v = iov;
- bzero(&res, sizeof(res));
+ memset(&res, 0, sizeof(res));
snprintf(res, sizeof(res), "<%d>", pri);
v->iov_base = res ;
v->iov_len = strlen(res);
static void quit_signal(int sig)
{
- logMessage(0, "System log daemon exiting.");
+ logMessage(LOG_SYSLOG | LOG_INFO, "System log daemon exiting.");
unlink(lfile);
#ifdef BB_FEATURE_IPC_SYSLOG
ipcsyslog_cleanup();
}
}
-static const int BUFSIZE = 1023;
+/* This must be a #define, since when DODEBUG and BUFFERS_GO_IN_BSS are
+ * enabled, we otherwise get a "storage size isn't constant error. */
+#define BUFSIZE 1023
static int serveConnection (int conn)
{
RESERVE_BB_BUFFER(tmpbuf, BUFSIZE + 1);
int n_read;
+ char *p = tmpbuf;
n_read = read (conn, tmpbuf, BUFSIZE );
- if (n_read > 0) {
+ while (p < tmpbuf + n_read) {
int pri = (LOG_USER | LOG_NOTICE);
char line[ BUFSIZE + 1 ];
unsigned char c;
- char *p = tmpbuf, *q = line;
+ char *q = line;
tmpbuf[ n_read - 1 ] = '\0';
p++;
}
*q = '\0';
+ p++;
/* Now log it */
logMessage (pri, line);
}
+ RELEASE_BB_BUFFER (tmpbuf);
return n_read;
}
struct hostent *hostinfo;
int len = sizeof(remoteaddr);
- bzero(&remoteaddr, len);
+ memset(&remoteaddr, 0, len);
remotefd = socket(AF_INET, SOCK_DGRAM, 0);
error_msg_and_die("syslogd: cannot create socket");
}
- hostinfo = (struct hostent *) gethostbyname(RemoteHost);
-
- if (!hostinfo) {
- error_msg_and_die("syslogd: cannot resolve remote host name [%s]", RemoteHost);
- }
+ hostinfo = xgethostbyname(RemoteHost);
remoteaddr.sin_family = AF_INET;
remoteaddr.sin_addr = *(struct in_addr *) *hostinfo->h_addr_list;
alarm (MarkInterval);
/* Create the syslog file so realpath() can work. */
- close (open (_PATH_LOG, O_RDWR | O_CREAT, 0644));
- if (realpath (_PATH_LOG, lfile) == NULL)
- perror_msg_and_die ("Could not resolve path to " _PATH_LOG);
-
- unlink (lfile);
+ if (realpath (_PATH_LOG, lfile) != NULL)
+ unlink (lfile);
memset (&sunx, 0, sizeof (sunx));
sunx.sun_family = AF_UNIX;
strncpy (sunx.sun_path, lfile, sizeof (sunx.sun_path));
if ((sock_fd = socket (AF_UNIX, SOCK_STREAM, 0)) < 0)
- perror_msg_and_die ("Couldn't obtain descriptor for socket " _PATH_LOG);
+ perror_msg_and_die ("Couldn't get file descriptor for socket " _PATH_LOG);
addrLength = sizeof (sunx.sun_family) + strlen (sunx.sun_path);
if ((bind (sock_fd, (struct sockaddr *) &sunx, addrLength)) || (listen (sock_fd, 5)))
FD_ZERO (&fds);
FD_SET (sock_fd, &fds);
+#ifdef BB_FEATURE_IPC_SYSLOG
+ if (circular_logging == TRUE ){
+ ipcsyslog_init();
+ }
+#endif
+
#ifdef BB_FEATURE_REMOTE_LOG
if (doRemoteLog == TRUE){
init_RemoteLog();
}
#endif
- logMessage (0, "syslogd started: BusyBox v" BB_VER " (" BB_BT ")");
+ logMessage (LOG_SYSLOG | LOG_INFO, "syslogd started: " BB_BANNER);
for (;;) {
} /* for main loop */
}
-static void daemon_init (char **argv, char *dz, void fn (void))
-{
- setsid();
- chdir ("/");
- strncpy(argv[0], dz, strlen(argv[0]));
- fn();
- exit(0);
-}
-
extern int syslogd_main(int argc, char **argv)
{
- int opt, pid;
+ int opt;
int doFork = TRUE;
char *p;
umask(0);
-#ifdef BB_FEATURE_IPC_SYSLOG
- if (circular_logging == TRUE ){
- ipcsyslog_init();
- }
-#endif
-
if (doFork == TRUE) {
- pid = fork();
- if (pid < 0)
- exit(pid);
- else if (pid == 0) {
- daemon_init (argv, "syslogd", doSyslogd);
- }
- } else {
- doSyslogd();
+ if (daemon(0, 1) < 0)
+ perror_msg_and_die("daemon");
}
+ doSyslogd();
return EXIT_SUCCESS;
}