INtime SDK Help
syslog

Control system log.

#include <syslog.h>
#include <stdarg.h>

 void
 syslog(int priority, const char *message, ...);

 void
 vsyslog(int priority, const char *message, va_list args);

 void
 openlog(const char *ident, int logopt, int facility);

 void
 closelog(void);

 int
 setlogmask(int maskpri);

Description

syslog writes message to the system message logger. The message is then written to the system console, log files, logged-in users, or forwarded to other machines as appropriate.

The message is identical to a printf format string, except that '%m' is replaced by the current error message. (As denoted by the global variable errno,; see strerror().) A trailing newline is added if none is present.

vsyslog is an alternate form in which arguments are already captured using the variable-length argument facilities of stdarg.

The message is tagged with priority. Priorities are encoded as a facility and a level. The facility describes the part of the system generating the message. The level is selected from the following ordered (high to low) list:

LOG_EMERG A panic condition. This is normally broadcast to all users.
LOG_ALERT A condition that needs immediate correction, such as a corrupted system database.
LOG_CRIT Critical conditions, e.g., hard device errors.
LOG_ERR Errors.
LOG_WARNING Warning messages.
LOG_NOTICE Conditions that are not error conditions, but should possibly be handled specially.
LOG_INFO Informational messages.
LOG_DEBUG Messages that contain information normally of use only when debugging a program.

openlog() provides for more specialized processing of the messages sent by syslog and vsyslog. The ident argument is a string prepended to every message. The logopt argument is a bit field that specifies logging options, which is formed by OR'ing one or more of the following values:

LOG_CONS If syslog cannot pass the message to the system logger it tries to write the message to the console.
LOG_NDELAY Immediately opens a connection to the system logger.
LOG_PERROR Writes the message to standard error output as well to the system log.
LOG_PID Logs the process ID with each message. Useful for identifying instantiations of daemons.

The facility argument encodes a default facility to be assigned to all messages that do not have an explicit facility encoded:

LOG_AUTH The authorization system.
LOG_AUTHPRIV The same as LOG_AUTH, but logged to a file readable only by selected individuals.
LOG_CONSOLE Messages written to the console by the kernel console output driver.
LOG_CRON The cron daemon.
LOG_DAEMON System daemons that other facilities do not explicitly provide for.
LOG_FTP The file transfer protocol daemons.
LOG_KERN Messages generated by the kernel. User processes cannot generate these.
LOG_LPR The line printer spooling system.
LOG_MAIL The mail system.
LOG_NEWS The network news system.
LOG_NTP The network time protocol system
LOG_SECURITY Security subsystems, such as ipfw.
LOG_SYSLOG Messages internally generated by the system logger.
LOG_USER Messages generated by random user processes. If none is specified, this is the default facility identifier.
LOG_UUCP The uucp system.
LOG_LOCAL0 Reserved for local use. Similarly for LOG_LOCAL1 through LOG_LOCAL7.

You can use closelog to close the log file.

setlogmask sets the log priority mask to maskpri and returns the previous mask. Calls to syslog with a priority not set in maskpri are rejected. The mask for an individual priority pri is calculated by the macro LOG_MASK(pri); the mask for all priorities up to and including toppri is given by the macro LOG_UPTO(toppri);. The default allows all priorities to be logged.

Examples
syslog(LOG_ALERT, "who: internal error 23");
openlog("ftpd", LOG_PID | LOG_NDELAY, LOG_FTP);
setlogmask(LOG_UPTO(LOG_ERR));
syslog(LOG_INFO, "Connection from host %d", CallingHost);
syslog(LOG_INFO|LOG_LOCAL2, "foobar error: %m");
Bugs

Never pass a string with user-supplied data as a format without using '%s'. An attacker can put format specifiers in the string to mangle your stack, leading to a possible security hole. This holds true even if the string was built using a function like snprintf, as the resulting string may still contain user-supplied conversion specifiers for later interpolation by syslog.

Always use the proper secure idiom: syslog(LOG_INFO, "%s", string);

Return Values

closelog, openlog, syslog and vsyslog return no value.

setlogmask always returns the previous log mask level.

Requirements

Versions Link to
INtime 4.2 clib.lib