~xnox/ubuntu/vivid/upstart/fix-rotate-logs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
/* upstart
 *
 * Copyright © 2009-2011 Canonical Ltd.
 * Author: Scott James Remnant <scott@netsplit.com>.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2, as
 * published by the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License along
 * with this program; if not, write to the Free Software Foundation, Inc.,
 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 */

#ifndef INIT_CONTROL_H
#define INIT_CONTROL_H

#include <dbus/dbus.h>

#include <nih/macros.h>
#include <nih/list.h>

#include <nih-dbus/dbus_connection.h>
#include <nih-dbus/dbus_message.h>

#include <json.h>

#include "event.h"
#include "quiesce.h"

/**
 * USE_SESSION_BUS_ENV:
 *
 * If this environment variable is set to any value, connect to
 * D-Bus session bus rather than the system bus.
 *
 * Used for testing.
 **/
#ifndef USE_SESSION_BUS_ENV
#define USE_SESSION_BUS_ENV "UPSTART_USE_SESSION_BUS"
#endif

/**
 * control_get_job:
 * 
 * @session: session,
 * @job: job that will be set,
 * @job_name: name of job to search for,
 * @instance: instance of @job_name to search for.
 *
 * Determine the Job associated with @job_name and @instance and set it
 * to @job.
 *
 * Returns: -1 on raised error, or nothing on success.
 **/
#define control_get_job(session, job, job_name, instance)             \
{                                                                     \
	if (job_name) {                                               \
		JobClass *class;                                      \
                                                                      \
		class = job_class_get_registered (job_name, session); \
		if (! class) {                                        \
			nih_dbus_error_raise_printf (                 \
				DBUS_INTERFACE_UPSTART                \
				".Error.UnknownJob",                  \
				_("Unknown job: %s"),                 \
				job_name);                            \
			return -1;                                    \
		}                                                     \
								      \
		job = job_find (session, class, job_name, instance);  \
		if (! job) {                                          \
			nih_dbus_error_raise_printf (                 \
				DBUS_INTERFACE_UPSTART                \
				".Error.UnknownJobInstance",          \
				_("Unknown instance: %s of job %s"),  \
				instance ? instance : "(null)",       \
				job_name);                            \
			return -1;                                    \
		}                                                     \
	}                                                             \
}

NIH_BEGIN_EXTERN

extern DBusServer     *control_server;
extern DBusConnection *control_bus;

extern NihList        *control_conns;


void control_init                 (void);
void control_cleanup              (void);

int  control_server_open          (void)
	__attribute__ ((warn_unused_result));
void control_server_close         (void);

int  control_bus_open             (void)
	__attribute__ ((warn_unused_result));
void control_bus_close            (void);

int  control_reload_configuration (void *data, NihDBusMessage *message)
	__attribute__ ((warn_unused_result));

int  control_get_job_by_name      (void *data, NihDBusMessage *message,
				   const char *name, char **job)
	__attribute__ ((warn_unused_result));
int  control_get_all_jobs         (void *data, NihDBusMessage *message,
				   char ***jobs)
	__attribute__ ((warn_unused_result));

int  control_emit_event           (void *data, NihDBusMessage *message,
				   const char *name, char * const *env,
				   int wait)
	__attribute__ ((warn_unused_result));
int  control_emit_event_with_file (void *data, NihDBusMessage *message,
				   const char *name, char * const *env,
				   int wait, int file)
	__attribute__ ((warn_unused_result));

int  control_get_version          (void *data, NihDBusMessage *message,
				   char **version)
	__attribute__ ((warn_unused_result));

int  control_get_log_priority     (void *data, NihDBusMessage *message,
				   char **log_priority)
	__attribute__ ((warn_unused_result));
int  control_set_log_priority     (void *data, NihDBusMessage *message,
				   const char *log_priority)
	__attribute__ ((warn_unused_result));

DBusBusType control_get_bus_type (void)
	__attribute__ ((warn_unused_result));

void control_prepare_reexec       (void);

int control_conn_to_index (const DBusConnection *connection)
	__attribute__ ((warn_unused_result));

DBusConnection *control_conn_from_index (int conn_index)
	__attribute__ ((warn_unused_result));

int control_bus_release_name (void)
	__attribute__ ((warn_unused_result));

int control_get_state (void           *data,
		   NihDBusMessage  *message,
		   char           **state)
	__attribute__ ((warn_unused_result));

int  control_restart (void *data, NihDBusMessage *message)
	__attribute__ ((warn_unused_result));

void control_notify_event_emitted (Event *event);

void control_notify_restarted (void);

int control_notify_disk_writeable (void   *data,
		     NihDBusMessage *message)
	__attribute__ ((warn_unused_result));

int control_notify_dbus_address (void   *data,
		     NihDBusMessage *message,
		     const char *address)
	__attribute__ ((warn_unused_result));

int control_set_env_multi (void           *data,
		 NihDBusMessage *message,
		 char * const    *job_details,
		 char * const    *vars,
		 int             replace)
	__attribute__ ((warn_unused_result));

int control_set_env (void           *data,
		 NihDBusMessage *message,
		 char * const    *job_details,
		 const char     *var,
		 int             replace)
	__attribute__ ((warn_unused_result));

int control_get_env (void             *data,
		 NihDBusMessage   *message,
		 char * const     *job_details,
		 const char       *name,
		 char            **value)
	__attribute__ ((warn_unused_result));

int control_list_env (void             *data,
		 NihDBusMessage   *message,
		 char * const     *job_details,
		 char           ***env)
	__attribute__ ((warn_unused_result));

int control_reset_env (void           *data,
		 NihDBusMessage   *message,
		 char * const    *job_details)
	__attribute__ ((warn_unused_result));

int control_unset_env_multi (void            *data,
		   NihDBusMessage  *message,
		   char * const    *job_details,
		   char * const    *names)
	__attribute__ ((warn_unused_result));

int control_unset_env (void            *data,
		   NihDBusMessage  *message,
		   char * const    *job_details,
		   const char      *name)
	__attribute__ ((warn_unused_result));

json_object *control_serialise_bus_address (void)
	__attribute__ ((warn_unused_result));

int control_deserialise_bus_address (json_object *json)
	__attribute__ ((warn_unused_result));

NIH_END_EXTERN

#endif /* INIT_CONTROL_H */