syslogio.c revision 261194
1/* 2 * Copyright (c) 2000-2001 Proofpoint, Inc. and its suppliers. 3 * All rights reserved. 4 * 5 * By using this file, you agree to the terms and conditions set 6 * forth in the LICENSE file which can be found at the top level of 7 * the sendmail distribution. 8 */ 9 10#include <sm/gen.h> 11SM_RCSID("@(#)$Id: syslogio.c,v 1.30 2013/11/22 20:51:43 ca Exp $") 12#include <stdlib.h> 13#include <unistd.h> 14#include <fcntl.h> 15#include <syslog.h> 16#include <errno.h> 17#ifdef SM_RPOOL 18# include <sm/rpool.h> 19#endif /* SM_RPOOL */ 20#include <sm/io.h> 21#include "local.h" 22 23/* 24** Overall: 25** This is a output file type that copies its output to the syslog daemon. 26** Each line of output is written as a separate syslog message. 27** The client is responsible for calling openlog() before writing to 28** any syslog file, and calling closelog() after all syslog output is complete. 29** The only state associated with a syslog file is 'int priority', 30** which we store in fp->f_ival. 31*/ 32 33/* 34** SM_SYSLOGOPEN -- open a file pointer to syslog 35** 36** Parameters: 37** fp -- file pointer assigned for the open 38** info -- priority level of the syslog messages 39** flags -- not used 40** rpool -- ignored 41** 42** Returns: 43** 0 (zero) success always (see Overall) 44*/ 45 46int 47sm_syslogopen(fp, info, flags, rpool) 48 SM_FILE_T *fp; 49 const void *info; 50 int flags; 51 const void *rpool; 52{ 53 int *priority = (int *)info; 54 55 fp->f_ival = *priority; 56 return 0; 57} 58 59/* 60** SM_SYSLOGREAD -- read function for syslog 61** 62** This is a "stub" function (placeholder) that always returns an error. 63** It is an error to read syslog. 64** 65** Parameters: 66** fp -- the file pointer 67** buf -- buffer to place the data read 68** n -- number of bytes to read 69** 70** Returns: 71** -1 (error) always and sets errno 72*/ 73 74ssize_t 75sm_syslogread(fp, buf, n) 76 SM_FILE_T *fp; 77 char *buf; 78 size_t n; 79{ 80 /* an error to read */ 81 errno = ENODEV; 82 return -1; 83} 84 85/* 86** SM_SYSLOGWRITE -- write function for syslog 87** 88** Send output to syslog. 89** 90** Parameters: 91** fp -- the file pointer 92** buf -- buffer that the write data comes from 93** n -- number of bytes to write 94** 95** Returns: 96** 0 (zero) for success always 97*/ 98 99/* 100** XXX TODO: more work needs to be done to ensure that each line of output 101** XXX written to a syslog file is mapped to exactly one syslog message. 102*/ 103ssize_t 104sm_syslogwrite(fp, buf, n) 105 SM_FILE_T *fp; 106 char const *buf; 107 size_t n; 108{ 109 syslog(fp->f_ival, "%s", buf); 110 return 0; 111} 112 113/* 114** SM_SYSLOGSEEK -- position the syslog file offset 115** 116** This is a "stub" function (placeholder) that always returns an error. 117** It is an error to seek syslog. 118** 119** Parameters: 120** fp -- the file pointer 121** offset -- the new offset position relative to 'whence' 122** whence -- flag indicating start of 'offset' 123** 124** Returns: 125** -1 (error) always. 126*/ 127 128off_t 129sm_syslogseek(fp, offset, whence) 130 SM_FILE_T *fp; 131 off_t offset; 132 int whence; 133{ 134 errno = ENODEV; 135 return -1; 136} 137 138/* 139** SM_SYSLOGCLOSE -- close the syslog file pointer 140** 141** Parameters: 142** fp -- the file pointer 143** 144** Returns: 145** 0 (zero) success always (see Overall) 146** 147*/ 148 149int 150sm_syslogclose(fp) 151 SM_FILE_T *fp; 152{ 153 return 0; 154} 155 156/* 157** SM_SYSLOGSETINFO -- set information for the file pointer 158** 159** Parameters: 160** fp -- the file pointer being set 161** what -- what information is being set 162** valp -- information content being set to 163** 164** Returns: 165** -1 on failure 166** 0 (zero) on success 167** 168** Side Effects: 169** Sets internal file pointer data 170*/ 171 172int 173sm_syslogsetinfo(fp, what, valp) 174 SM_FILE_T *fp; 175 int what; 176 void *valp; 177{ 178 switch (what) 179 { 180 case SM_IO_SL_PRIO: 181 fp->f_ival = *((int *)(valp)); 182 return 0; 183 default: 184 errno = EINVAL; 185 return -1; 186 } 187} 188 189/* 190** SM_SYSLOGGETINFO -- get information relating to the file pointer 191** 192** Parameters: 193** fp -- the file pointer being queried 194** what -- the information type being queried 195** valp -- location to placed queried information 196** 197** Returns: 198** 0 (zero) on success 199** -1 on failure 200** 201** Side Effects: 202** Fills in 'valp' with data. 203*/ 204 205int 206sm_sysloggetinfo(fp, what, valp) 207 SM_FILE_T *fp; 208 int what; 209 void *valp; 210{ 211 switch (what) 212 { 213 case SM_IO_SL_PRIO: 214 *((int *)(valp)) = fp->f_ival; 215 return 0; 216 default: 217 errno = EINVAL; 218 return -1; 219 } 220} 221