Logo Search packages:      
Sourcecode: batv-milter version File versions  Download package

syslogio.c

/*
 * 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;
      }
}

Generated by  Doxygen 1.6.0   Back to index