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
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
|
#ifndef _PLUGINS_H
#define _PLUGINS_H
#include <rpm/rpmtypes.h>
#ifdef __cplusplus
extern "C" {
#endif
#define PLUGIN_HOOKS plugin_hooks
#define PLUGINHOOK_INIT_FUNC pluginhook_init
#define PLUGINHOOK_CLEANUP_FUNC pluginhook_cleanup
#define PLUGINHOOK_OPENTE_FUNC pluginhook_opente
#define PLUGINHOOK_COLL_POST_ADD_FUNC pluginhook_coll_post_add
#define PLUGINHOOK_COLL_POST_ANY_FUNC pluginhook_coll_post_any
#define PLUGINHOOK_COLL_PRE_REMOVE_FUNC pluginhook_coll_pre_remove
#define PLUGINHOOK_TSM_PRE_FUNC pluginhook_tsm_pre
#define PLUGINHOOK_TSM_POST_FUNC pluginhook_tsm_post
#define PLUGINHOOK_PSM_PRE_FUNC pluginhook_psm_pre
#define PLUGINHOOK_PSM_POST_FUNC pluginhook_psm_post
#define PLUGINHOOK_VERIFY_FUNC pluginhook_verify
#define PLUGINHOOK_SCRIPTLET_PRE_FUNC pluginhook_scriptlet_pre
#define PLUGINHOOK_SCRIPTLET_FORK_POST_FUNC pluginhook_scriptlet_fork_post
#define PLUGINHOOK_SCRIPTLET_POST_FUNC pluginhook_scriptlet_post
#define PLUGINHOOK_FSM_INIT_FUNC pluginhook_fsm_init
#define PLUGINHOOK_FSM_COMMIT_FUNC pluginhook_fsm_commit
#define PLUGINHOOK_FILE_CONFLICT pluginhook_file_conflict
enum rpmPluginHook_e {
PLUGINHOOK_NONE = 0,
PLUGINHOOK_INIT = 1 << 0,
PLUGINHOOK_CLEANUP = 1 << 1,
PLUGINHOOK_OPENTE = 1 << 2,
PLUGINHOOK_COLL_POST_ADD = 1 << 3,
PLUGINHOOK_COLL_POST_ANY = 1 << 4,
PLUGINHOOK_COLL_PRE_REMOVE = 1 << 5,
PLUGINHOOK_TSM_PRE = 1 << 6,
PLUGINHOOK_TSM_POST = 1 << 7,
PLUGINHOOK_PSM_PRE = 1 << 8,
PLUGINHOOK_PSM_POST = 1 << 9,
PLUGINHOOK_SCRIPTLET_PRE = 1 << 10,
PLUGINHOOK_SCRIPTLET_FORK_POST = 1 << 11,
PLUGINHOOK_SCRIPTLET_POST = 1 << 12,
PLUGINHOOK_VERIFY = 1 << 13,
PLUGINHOOK_FSM_INIT = 1 << 14,
PLUGINHOOK_FSM_COMMIT = 1 << 15,
PLUGINHOOK_FILE_CONFLICT = 1 << 16
};
/* indicates if a directory is part of rpm package or created by rpm itself */
typedef enum rpmPluginDirType_e {
DIR_TYPE_NONE = 0,
DIR_TYPE_NORMAL = 1 << 0,
DIR_TYPE_UNOWNED = 1 << 1
} rpmPluginDirType;
/* indicates the way the scriptlet is executed */
typedef enum rpmScriptletExecutionFlow_e {
RPMSCRIPTLET_NONE = 0,
RPMSCRIPTLET_FORK = 1 << 0,
RPMSCRIPTLET_EXEC = 1 << 1
} rpmScriptletExecutionFlow;
typedef rpmFlags rpmPluginHook;
/** \ingroup rpmplugins
* Create a new plugins structure
* @param ts transaction set
* @return new plugin structure
*/
rpmPlugins rpmpluginsNew(rpmts ts);
/** \ingroup rpmplugins
* Destroy a plugins structure
* @param plugins plugins structure to destroy
* @return NULL always
*/
rpmPlugins rpmpluginsFree(rpmPlugins plugins);
/** \ingroup rpmplugins
* Add and open a plugin
* @param plugins plugins structure to add a plugin to
* @param name name to access plugin
* @param path path of plugin to open
* @param opts options to pass to the plugin
* @return RPMRC_OK on success, RPMRC_FAIL otherwise
*/
rpmRC rpmpluginsAdd(rpmPlugins plugins, const char *name, const char *path, const char *opts);
/** \ingroup rpmplugins
* Add and open a rpm plugin
* @param plugins plugins structure to add a collection plugin to
* @param type type of plugin
* @param name name of plugin
* @return RPMRC_OK on success, RPMRC_FAIL otherwise
*/
rpmRC rpmpluginsAddPlugin(rpmPlugins plugins, const char *type, const char *name);
/** \ingroup rpmplugins
* Determine if a plugin has been added already
* @param plugins plugins structure
* @param name name of plugin to check
* @return 1 if plugin name has already been added, 0 otherwise
*/
int rpmpluginsPluginAdded(rpmPlugins plugins, const char *name);
/** \ingroup rpmplugins
* Call the init plugin hook
* @param plugins plugins structure
* @param name name of plugin
* @param opts plugin options
* @return RPMRC_OK on success, RPMRC_FAIL otherwise
*/
rpmRC rpmpluginsCallInit(rpmPlugins plugins, const char *name, const char *opts);
/** \ingroup rpmplugins
* Call the cleanup plugin hook
* @param plugins plugins structure
* @param name name of plugin
* @return RPMRC_OK on success, RPMRC_FAIL otherwise
*/
rpmRC rpmpluginsCallCleanup(rpmPlugins plugins, const char *name);
/** \ingroup rpmplugins
* Call the open te plugin hook
* @param plugins plugins structure
* @param name name of plugin
* @param te transaction element opened
* @return RPMRC_OK on success, RPMRC_FAIL otherwise
*/
rpmRC rpmpluginsCallOpenTE(rpmPlugins plugins, const char *name, rpmte te);
/** \ingroup rpmplugins
* Call the collection post add plugin hook
* @param plugins plugins structure
* @param name name of plugin
* @return RPMRC_OK on success, RPMRC_FAIL otherwise
*/
rpmRC rpmpluginsCallCollectionPostAdd(rpmPlugins plugins, const char *name);
/** \ingroup rpmplugins
* Call the collection post any plugin hook
* @param plugins plugins structure
* @param name name of plugin
* @return RPMRC_OK on success, RPMRC_FAIL otherwise
*/
rpmRC rpmpluginsCallCollectionPostAny(rpmPlugins plugins, const char *name);
/** \ingroup rpmplugins
* Call the collection pre remove plugin hook
* @param plugins plugins structure
* @param name name of plugin
* @return RPMRC_OK on success, RPMRC_FAIL otherwise
*/
rpmRC rpmpluginsCallCollectionPreRemove(rpmPlugins plugins, const char *name);
/** \ingroup rpmplugins
* Call the pre transaction plugin hook
* @param plugins plugins structure
* @param ts processed transaction
* @return RPMRC_OK on success, RPMRC_FAIL otherwise
*/
rpmRC rpmpluginsCallTsmPre(rpmPlugins plugins, rpmts ts);
/** \ingroup rpmplugins
* Call the post transaction plugin hook
* @param plugins plugins structure
* @param ts processed transaction
* @param res transaction result code
* @return RPMRC_OK on success, RPMRC_FAIL otherwise
*/
rpmRC rpmpluginsCallTsmPost(rpmPlugins plugins, rpmts ts, int res);
/** \ingroup rpmplugins
* Call the pre transaction element plugin hook
* @param plugins plugins structure
* @param te processed transaction element
* @return RPMRC_OK on success, RPMRC_FAIL otherwise
*/
rpmRC rpmpluginsCallPsmPre(rpmPlugins plugins, rpmte te);
/** \ingroup rpmplugins
* Call the post transaction element plugin hook
* @param plugins plugins structure
* @param te processed transaction element
* @param res transaction element result code
* @return RPMRC_OK on success, RPMRC_FAIL otherwise
*/
rpmRC rpmpluginsCallPsmPost(rpmPlugins plugins, rpmte te, int res);
/** \ingroup rpmplugins
* Call the pre scriptlet execution plugin hook
* @param plugins plugins structure
* @param s_name scriptlet name
* @param type indicates the scriptlet execution flow, see rpmScriptletExecutionFlow
* @return RPMRC_OK on success, RPMRC_FAIL otherwise
*/
rpmRC rpmpluginsCallScriptletPre(rpmPlugins plugins, const char *s_name, int type);
/** \ingroup rpmplugins
* Call the post fork scriptlet plugin hook.
* @param plugins plugins structure
* @param path scriptlet path
* @param type indicates the scriptlet execution flow, see rpmScriptletExecutionFlow
* @return RPMRC_OK on success, RPMRC_FAIL otherwise
*/
rpmRC rpmpluginsCallScriptletForkPost(rpmPlugins plugins, const char *path, int type);
/** \ingroup rpmplugins
* Call the post scriptlet execution plugin hook
* @param plugins plugins structure
* @param s_name scriptlet name
* @param type indicates the scriptlet execution flow, see rpmScriptletExecutionFlow
* @param res scriptlet execution result code
* @return RPMRC_OK on success, RPMRC_FAIL otherwise
*/
rpmRC rpmpluginsCallScriptletPost(rpmPlugins plugins, const char *s_name, int type, int res);
/** \ingroup rpmplugins
* Call the verify hook
* @param plugins plugins structure
* @param keyring RPM keyring
* @param sigtd signature tag
* @param sig OpenPGP signature parameters
* @param res scriptlet execution result code
* @return RPMRC_OK on success, RPMRC_FAIL otherwise
*/
rpmRC rpmpluginsCallVerify(rpmPlugins plugins, rpmKeyring keyring, rpmtd sigtd,
pgpDigParams sig, DIGEST_CTX ctx, int res);
/** \ingroup rpmplugins
* Call the fsm init hook
* @param plugins plugins structure
* @param path file full path
* @param mode file mode
* @return RPMRC_OK on success, RPMRC_FAIL otherwise
*/
rpmRC rpmpluginsCallFsmInit(rpmPlugins plugins, const char* path, mode_t mode);
/** \ingroup rpmplugins
* Call the fsm commit hook
* @param plugins plugins structure
* @param path file full path
* @param mode file mode
* @param type file type
* @return RPMRC_OK on success, RPMRC_FAIL otherwise
*/
rpmRC rpmpluginsCallFsmCommit(rpmPlugins plugins, const char* path, mode_t mode, int type);
/** \ingroup rpmplugins
* Call the fsm commit hook
* @param plugins plugins structure
* @param ts transaction set
* @param path new file path
* @param oldHeader old header
* @param oldFi old file
* @param res return code
* @return RPMRC_OK on success, RPMRC_FAIL otherwise
*/
rpmRC rpmpluginsCallFileConflict(rpmPlugins plugins, rpmts ts, char* path, Header oldHeader, rpmfi oldFi, int res);
#ifdef __cplusplus
}
#endif
#endif /* _PLUGINS_H */
|