syslog-ng source
file-opener.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2002-2013 Balabit
3  * Copyright (c) 1998-2012 Balázs Scheidler
4  *
5  * This program is free software; you can redistribute it and/or modify it
6  * under the terms of the GNU General Public License version 2 as published
7  * by the Free Software Foundation, or (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software
16  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
17  *
18  * As an additional exemption you are allowed to compile & link against the
19  * OpenSSL libraries as published by the OpenSSL project. See the file
20  * COPYING for details.
21  *
22  */
23 
24 #ifndef AFFILE_FILE_OPENER_H_INCLUDED
25 #define AFFILE_FILE_OPENER_H_INCLUDED
26 
27 /* portable largefile support for affile */
28 #include "compat/lfs.h"
29 
30 #include "file-perms.h"
31 #include "transport/logtransport.h"
34 #include "logproto-file-reader.h"
35 #include <string.h>
36 
37 typedef enum
38 {
42 
43 typedef struct _FileOpenerOptions
44 {
46  guint needs_privileges: 1;
49 
50 typedef enum
51 {
56 
57 typedef struct _FileOpener FileOpener;
59 {
61  gboolean (*prepare_open)(FileOpener *self, const gchar *name);
62  gint (*open)(FileOpener *self, const gchar *name, gint flags);
63  gint (*get_open_flags)(FileOpener *self, FileDirection dir);
64  LogTransport *(*construct_transport)(FileOpener *self, gint fd);
65  LogProtoServer *(*construct_src_proto)(FileOpener *self, LogTransport *transport,
66  LogProtoFileReaderOptionsStorage *proto_options);
67  LogProtoClient *(*construct_dst_proto)(FileOpener *self, LogTransport *transport,
68  LogProtoClientOptionsStorage *proto_options);
69 };
70 
71 static inline LogTransport *
72 file_opener_construct_transport(FileOpener *self, gint fd)
73 {
74  return self->construct_transport(self, fd);
75 }
76 
77 static inline LogProtoServer *
78 file_opener_construct_src_proto(FileOpener *self, LogTransport *transport,
79  LogProtoFileReaderOptionsStorage *proto_options)
80 {
81  return self->construct_src_proto(self, transport, proto_options);
82 }
83 
84 static inline LogProtoClient *
85 file_opener_construct_dst_proto(FileOpener *self, LogTransport *transport, LogProtoClientOptionsStorage *proto_options)
86 {
87  return self->construct_dst_proto(self, transport, proto_options);
88 }
89 
90 FileOpenerResult file_opener_open_fd(FileOpener *self, const gchar *name, FileDirection dir, gint *fd);
91 
92 void file_opener_symlink(FileOpener *self, const gchar *name, const gchar *target);
93 
94 void file_opener_set_options(FileOpener *self, FileOpenerOptions *options);
95 void file_opener_init_instance(FileOpener *self);
96 FileOpener *file_opener_new(void);
97 void file_opener_free(FileOpener *self);
98 
101 void file_opener_options_init(FileOpenerOptions *options, GlobalConfig *cfg);
103 
104 
105 #endif
const gchar * name
Definition: debugger.c:265
void file_opener_options_defaults(FileOpenerOptions *options)
Definition: file-opener.c:281
FileOpener * file_opener_new(void)
Definition: file-opener.c:266
void file_opener_options_deinit(FileOpenerOptions *options)
Definition: file-opener.c:304
void file_opener_init_instance(FileOpener *self)
Definition: file-opener.c:259
void file_opener_symlink(FileOpener *self, const gchar *name, const gchar *target)
Definition: file-opener.c:214
FileDirection
Definition: file-opener.h:38
@ AFFILE_DIR_READ
Definition: file-opener.h:39
@ AFFILE_DIR_WRITE
Definition: file-opener.h:40
FileOpenerResult file_opener_open_fd(FileOpener *self, const gchar *name, FileDirection dir, gint *fd)
Definition: file-opener.c:146
FileOpenerResult
Definition: file-opener.h:51
@ FILE_OPENER_RESULT_ERROR_TRANSIENT
Definition: file-opener.h:53
@ FILE_OPENER_RESULT_ERROR_PERMANENT
Definition: file-opener.h:54
@ FILE_OPENER_RESULT_SUCCESS
Definition: file-opener.h:52
void file_opener_free(FileOpener *self)
Definition: file-opener.c:275
void file_opener_set_options(FileOpener *self, FileOpenerOptions *options)
Definition: file-opener.c:253
void file_opener_options_init(FileOpenerOptions *options, GlobalConfig *cfg)
Definition: file-opener.c:296
void file_opener_options_defaults_dont_change_permissions(FileOpenerOptions *options)
Definition: file-opener.c:289
Definition: file-opener.h:44
guint needs_privileges
Definition: file-opener.h:46
FilePermOptions file_perm_options
Definition: file-opener.h:45
gint create_dirs
Definition: file-opener.h:47
Definition: file-perms.h:31
Definition: file-opener.h:59
gint(* open)(FileOpener *self, const gchar *name, gint flags)
Definition: file-opener.h:62
FileOpenerOptions * options
Definition: file-opener.h:60
gboolean(* prepare_open)(FileOpener *self, const gchar *name)
Definition: file-opener.h:61
gint(* get_open_flags)(FileOpener *self, FileDirection dir)
Definition: file-opener.h:63
GlobalConfig * cfg
Definition: test_batched_ack_tracker.c:34
Definition: logproto-client.h:42
Definition: logproto-file-reader.h:37