source: trunk/third/sendmail/libsm/syslogio.c @ 19204

Revision 19204, 4.1 KB checked in by zacheiss, 22 years ago (diff)
This commit was generated by cvs2svn to compensate for changes in r19203, which included commits to RCS files with non-trunk default branches.
Line 
1/*
2 * Copyright (c) 2000-2001 Sendmail, 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.1.1.1 2003-04-08 15:06:05 zacheiss 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}
Note: See TracBrowser for help on using the repository browser.