71
73
res = getmsg(self->fd, &ctl, &data, &flags);
72
if ((res & (MORECTL+MOREDATA)) == 0)
76
else if ((res & (MORECTL+MOREDATA)) == 0)
74
78
len = g_snprintf(buf, buflen, "<%d>%.*s", lc.pri, data.len, data.buf);
75
79
return MIN(len, buflen);
87
streams_read_new(gint fd)
91
log_transport_streams_new(gint fd)
89
FDRead *self = g_new0(FDRead, 1);
93
LogTransport *self = g_new0(LogTransport, 1);
92
96
self->cond = G_IO_IN;
93
self->read = streams_read_read_method;
97
self->read = log_transport_streams_read;
98
self->free_fn = log_transport_free_method;
106
afstreams_sd_door_server_proc(void *cookie, char *argp, size_t arg_size, door_desc_t *dp, size_t n_desc)
111
afstreams_sd_door_server_proc(void *cookie, char *argp, size_t arg_size, door_desc_t *dp, uint_t n_desc)
108
113
door_return(NULL, 0, NULL, 0);
118
afstreams_init_door(int hook_type G_GNUC_UNUSED, gpointer user_data)
120
AFStreamsSourceDriver *self = (AFStreamsSourceDriver *) user_data;
124
if (stat(self->door_filename->str, &st) == -1)
126
/* file does not exist, create it */
127
fd = creat(self->door_filename->str, 0666);
130
msg_error("Error creating syslog door file",
131
evt_tag_str(EVT_TAG_FILENAME, self->door_filename->str),
132
evt_tag_errno(EVT_TAG_OSERROR, errno),
138
fdetach(self->door_filename->str);
139
self->door_fd = door_create(afstreams_sd_door_server_proc, NULL, 0);
140
if (self->door_fd == -1)
142
msg_error("Error creating syslog door",
143
evt_tag_str(EVT_TAG_FILENAME, self->door_filename->str),
144
evt_tag_errno(EVT_TAG_OSERROR, errno),
148
g_fd_set_cloexec(self->door_fd, TRUE);
149
if (fattach(self->door_fd, self->door_filename->str) == -1)
151
msg_error("Error attaching syslog door",
152
evt_tag_str(EVT_TAG_FILENAME, self->door_filename->str),
153
evt_tag_errno(EVT_TAG_OSERROR, errno),
155
close(self->door_fd);
113
afstreams_sd_init(LogPipe *s, GlobalConfig *cfg, PersistentConfig *persist)
162
afstreams_sd_init(LogPipe *s)
115
164
AFStreamsSourceDriver *self = (AFStreamsSourceDriver *) s;
165
GlobalConfig *cfg = log_pipe_get_config(s);
118
log_reader_options_init(&self->reader_options, cfg);
168
log_reader_options_init(&self->reader_options, cfg, self->super.group);
120
170
fd = open(self->dev_filename->str, O_RDONLY | O_NOCTTY | O_NONBLOCK);
137
self->reader = log_reader_new(streams_read_new(fd), LR_LOCAL | LR_NOMREAD | LR_PKTTERM, s, &self->reader_options);
187
g_fd_set_nonblock(fd, TRUE);
188
self->reader = log_reader_new(log_proto_plain_new_server(log_transport_streams_new(fd), 0, self->reader_options.msg_size, LPPF_PKTTERM), LR_LOCAL);
189
log_reader_set_options(self->reader, s, &self->reader_options, 1, SCS_SUN_STREAMS, self->super.id, self->dev_filename->str);
138
190
log_pipe_append(self->reader, s);
140
192
if (self->door_filename)
144
if (stat(self->door_filename->str, &st) == -1)
146
/* file does not exist, create it */
147
fd = creat(self->door_filename->str, 0666);
150
msg_error("Error creating syslog door file",
151
evt_tag_str(EVT_TAG_FILENAME, self->door_filename->str),
152
evt_tag_errno(EVT_TAG_OSERROR, errno),
158
fdetach(self->door_filename->str);
159
self->door_fd = door_create(afstreams_sd_door_server_proc, NULL, 0);
160
if (self->door_fd == -1)
162
msg_error("Error creating syslog door",
163
evt_tag_str(EVT_TAG_FILENAME, self->door_filename->str),
164
evt_tag_errno(EVT_TAG_OSERROR, errno),
166
close(self->door_fd);
169
g_fd_set_cloexec(self->door_fd, TRUE);
170
if (fattach(self->door_fd, self->door_filename->str) == -1)
172
msg_error("Error attaching syslog door",
173
evt_tag_str(EVT_TAG_FILENAME, self->door_filename->str),
174
evt_tag_errno(EVT_TAG_OSERROR, errno),
176
close(self->door_fd);
195
/* door creation is deferred, because it creates threads which is
196
* not inherited through forks, and syslog-ng forks during
197
* startup, but _after_ the configuration was initialized */
199
register_application_hook(AH_POST_DAEMONIZED, afstreams_init_door, self);
180
if (!log_pipe_init(self->reader, NULL, NULL))
201
if (!log_pipe_init(self->reader, NULL))
182
203
msg_error("Error initializing log_reader, closing fd",
183
204
evt_tag_int("fd", fd),
204
afstreams_sd_deinit(LogPipe *s, GlobalConfig *cfg, PersistentConfig *persist)
225
afstreams_sd_deinit(LogPipe *s)
206
227
AFStreamsSourceDriver *self = (AFStreamsSourceDriver *) s;
208
229
if (self->reader)
209
log_pipe_deinit(self->reader, NULL, NULL);
210
door_revoke(self->door_fd);
211
close(self->door_fd);
230
log_pipe_deinit(self->reader);
231
if (self->door_fd != -1)
233
door_revoke(self->door_fd);
234
close(self->door_fd);
218
242
AFStreamsSourceDriver *self = (AFStreamsSourceDriver *) s;
244
log_reader_options_destroy(&self->reader_options);
220
245
if (self->dev_filename)
221
246
g_string_free(self->dev_filename, TRUE);
222
247
if (self->door_filename)
223
248
g_string_free(self->door_filename, TRUE);
224
249
log_pipe_unref(self->reader);
226
log_drv_free_instance(&self->super);