1
2
3
4
5
6
7
8
9
10
11 #ifndef PCMK__SERVICES_SERVICES_PRIVATE__H
12 #define PCMK__SERVICES_SERVICES_PRIVATE__H
13
14 #include <unistd.h>
15
16 #include <glib.h>
17 #if HAVE_DBUS
18 #include <dbus/dbus.h>
19 #endif
20
21 #include <crm/common/mainloop.h>
22 #include <crm/services.h>
23
24 #ifdef __cplusplus
25 extern "C" {
26 #endif
27
28 #define MAX_ARGC 255
29 struct svc_action_private_s {
30 char *exec;
31 char *exit_reason;
32 char *args[MAX_ARGC];
33
34 uid_t uid;
35 gid_t gid;
36
37 guint repeat_timer;
38 void (*callback) (svc_action_t * op);
39 void (*fork_callback) (svc_action_t * op);
40
41 int stderr_fd;
42 mainloop_io_t *stderr_gsource;
43
44 int stdout_fd;
45 mainloop_io_t *stdout_gsource;
46
47 int stdin_fd;
48 #if HAVE_DBUS
49 DBusPendingCall* pending;
50 unsigned timerid;
51 #endif
52 };
53
54 G_GNUC_INTERNAL
55 const char *services__action_kind(const svc_action_t *action);
56
57 G_GNUC_INTERNAL
58 GList *services_os_get_single_directory_list(const char *root, gboolean files,
59 gboolean executable);
60
61 G_GNUC_INTERNAL
62 GList *services_os_get_directory_list(const char *root, gboolean files, gboolean executable);
63
64 G_GNUC_INTERNAL
65 int services__execute_file(svc_action_t *op);
66
67 G_GNUC_INTERNAL
68 gboolean cancel_recurring_action(svc_action_t * op);
69
70 G_GNUC_INTERNAL
71 gboolean recurring_action_timer(gpointer data);
72
73 G_GNUC_INTERNAL
74 int services__finalize_async_op(svc_action_t *op);
75
76 G_GNUC_INTERNAL
77 int services__generic_error(const svc_action_t *op);
78
79 G_GNUC_INTERNAL
80 int services__not_installed_error(const svc_action_t *op);
81
82 G_GNUC_INTERNAL
83 int services__authorization_error(const svc_action_t *op);
84
85 G_GNUC_INTERNAL
86 int services__configuration_error(const svc_action_t *op, bool is_fatal);
87
88 G_GNUC_INTERNAL
89 void services__handle_exec_error(svc_action_t * op, int error);
90
91 G_GNUC_INTERNAL
92 void services__set_cancelled(svc_action_t *action);
93
94 G_GNUC_INTERNAL
95 void services_add_inflight_op(svc_action_t *op);
96
97 G_GNUC_INTERNAL
98 void services_untrack_op(const svc_action_t *op);
99
100 G_GNUC_INTERNAL
101 gboolean is_op_blocked(const char *rsc);
102
103 #if HAVE_DBUS
104 G_GNUC_INTERNAL
105 void services_set_op_pending(svc_action_t *op, DBusPendingCall *pending);
106 #endif
107
108 #ifdef __cplusplus
109 }
110 #endif
111
112 #endif