diff options
Diffstat (limited to 'sendmail/libsm/syslogio.c')
-rw-r--r-- | sendmail/libsm/syslogio.c | 220 |
1 files changed, 220 insertions, 0 deletions
diff --git a/sendmail/libsm/syslogio.c b/sendmail/libsm/syslogio.c new file mode 100644 index 0000000..24fa3a2 --- /dev/null +++ b/sendmail/libsm/syslogio.c @@ -0,0 +1,220 @@ +/* + * Copyright (c) 2000-2001 Sendmail, Inc. and its suppliers. + * All rights reserved. + * + * By using this file, you agree to the terms and conditions set + * forth in the LICENSE file which can be found at the top level of + * the sendmail distribution. + */ + +#include <sm/gen.h> +SM_RCSID("@(#)$Id: syslogio.c,v 1.29 2001/09/11 04:04:49 gshapiro Exp $") +#include <stdlib.h> +#include <unistd.h> +#include <fcntl.h> +#include <syslog.h> +#include <errno.h> +#ifdef SM_RPOOL +# include <sm/rpool.h> +#endif /* SM_RPOOL */ +#include <sm/io.h> +#include "local.h" + +/* +** Overall: +** This is a output file type that copies its output to the syslog daemon. +** Each line of output is written as a separate syslog message. +** The client is responsible for calling openlog() before writing to +** any syslog file, and calling closelog() after all syslog output is complete. +** The only state associated with a syslog file is 'int priority', +** which we store in fp->f_ival. +*/ + +/* +** SM_SYSLOGOPEN -- open a file pointer to syslog +** +** Parameters: +** fp -- file pointer assigned for the open +** info -- priority level of the syslog messages +** flags -- not used +** rpool -- ignored +** +** Returns: +** 0 (zero) success always (see Overall) +*/ + +int +sm_syslogopen(fp, info, flags, rpool) + SM_FILE_T *fp; + const void *info; + int flags; + const void *rpool; +{ + int *priority = (int *)info; + + fp->f_ival = *priority; + return 0; +} + +/* +** SM_SYSLOGREAD -- read function for syslog +** +** This is a "stub" function (placeholder) that always returns an error. +** It is an error to read syslog. +** +** Parameters: +** fp -- the file pointer +** buf -- buffer to place the data read +** n -- number of bytes to read +** +** Returns: +** -1 (error) always and sets errno +*/ + +ssize_t +sm_syslogread(fp, buf, n) + SM_FILE_T *fp; + char *buf; + size_t n; +{ + /* an error to read */ + errno = ENODEV; + return -1; +} + +/* +** SM_SYSLOGWRITE -- write function for syslog +** +** Send output to syslog. +** +** Parameters: +** fp -- the file pointer +** buf -- buffer that the write data comes from +** n -- number of bytes to write +** +** Returns: +** 0 (zero) for success always +*/ + +/* +** XXX TODO: more work needs to be done to ensure that each line of output +** XXX written to a syslog file is mapped to exactly one syslog message. +*/ +ssize_t +sm_syslogwrite(fp, buf, n) + SM_FILE_T *fp; + char const *buf; + size_t n; +{ + syslog(fp->f_ival, "%s", buf); + return 0; +} + +/* +** SM_SYSLOGSEEK -- position the syslog file offset +** +** This is a "stub" function (placeholder) that always returns an error. +** It is an error to seek syslog. +** +** Parameters: +** fp -- the file pointer +** offset -- the new offset position relative to 'whence' +** whence -- flag indicating start of 'offset' +** +** Returns: +** -1 (error) always. +*/ + +off_t +sm_syslogseek(fp, offset, whence) + SM_FILE_T *fp; + off_t offset; + int whence; +{ + errno = ENODEV; + return -1; +} + +/* +** SM_SYSLOGCLOSE -- close the syslog file pointer +** +** Parameters: +** fp -- the file pointer +** +** Returns: +** 0 (zero) success always (see Overall) +** +*/ + +int +sm_syslogclose(fp) + SM_FILE_T *fp; +{ + return 0; +} + +/* +** SM_SYSLOGSETINFO -- set information for the file pointer +** +** Parameters: +** fp -- the file pointer being set +** what -- what information is being set +** valp -- information content being set to +** +** Returns: +** -1 on failure +** 0 (zero) on success +** +** Side Effects: +** Sets internal file pointer data +*/ + +int +sm_syslogsetinfo(fp, what, valp) + SM_FILE_T *fp; + int what; + void *valp; +{ + switch (what) + { + case SM_IO_SL_PRIO: + fp->f_ival = *((int *)(valp)); + return 0; + default: + errno = EINVAL; + return -1; + } +} + +/* +** SM_SYSLOGGETINFO -- get information relating to the file pointer +** +** Parameters: +** fp -- the file pointer being queried +** what -- the information type being queried +** valp -- location to placed queried information +** +** Returns: +** 0 (zero) on success +** -1 on failure +** +** Side Effects: +** Fills in 'valp' with data. +*/ + +int +sm_sysloggetinfo(fp, what, valp) + SM_FILE_T *fp; + int what; + void *valp; +{ + switch (what) + { + case SM_IO_SL_PRIO: + *((int *)(valp)) = fp->f_ival; + return 0; + default: + errno = EINVAL; + return -1; + } +} |