gwenhywfar 5.14.1
configmgr.c
Go to the documentation of this file.
1/***************************************************************************
2 begin : Mon Aug 11 2008
3 copyright : (C) 2008,2017 by Martin Preuss
4 email : martin@libchipcard.de
5
6 ***************************************************************************
7 * *
8 * This library is free software; you can redistribute it and/or *
9 * modify it under the terms of the GNU Lesser General Public *
10 * License as published by the Free Software Foundation; either *
11 * version 2.1 of the License, or (at your option) any later version. *
12 * *
13 * This library is distributed in the hope that it will be useful, *
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
16 * Lesser General Public License for more details. *
17 * *
18 * You should have received a copy of the GNU Lesser General Public *
19 * License along with this library; if not, write to the Free Software *
20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, *
21 * MA 02111-1307 USA *
22 * *
23 ***************************************************************************/
24
25
26#ifdef HAVE_CONFIG_H
27# include <config.h>
28#endif
29
30#define DISABLE_DEBUGLOG
31
32
33#include "configmgr_p.h"
34
35#include <gwenhywfar/gwenhywfar.h>
36#include <gwenhywfar/misc.h>
37#include <gwenhywfar/url.h>
38#include <gwenhywfar/debug.h>
39
40
41#include <stdlib.h>
42#include <assert.h>
43#include <string.h>
44#include <errno.h>
45#include <ctype.h>
46
47
48
50
51GWEN_INHERIT(GWEN_PLUGIN, GWEN_CONFIGMGR_PLUGIN)
52
53
54
56{
58 int err;
60
63 if (err) {
64 DBG_ERROR(GWEN_LOGDOMAIN, "Could not register ConfigMgr plugin manager");
65 return err;
66 }
67
68 /* create plugin paths */
70 if (sl) {
72 GWEN_BUFFER *pbuf;
73
74 pbuf=GWEN_Buffer_new(0, 256, 0, 1);
75
77 while (se) {
80 DBG_INFO(GWEN_LOGDOMAIN, "Adding plugin path [%s]",
86 }
87 GWEN_Buffer_free(pbuf);
89 }
90
91 return 0;
92}
93
94
95
97{
99
101 if (pm) {
102 int rv;
103
105 if (rv) {
107 "Could not unregister ConfigMgr plugin manager (%d)", rv);
108 return rv;
109 }
110 else
112 }
113
114 return 0;
115}
116
117
118
119
121{
122 GWEN_CONFIGMGR *mgr;
123
126
127 if (url)
128 mgr->url=strdup(url);
129
130 return mgr;
131}
132
133
134
136{
137 if (mgr) {
139 free(mgr->url);
140 GWEN_FREE_OBJECT(mgr);
141 }
142}
143
144
145
148{
150
151 assert(mgr);
152 of=mgr->getGroupFn;
153 mgr->getGroupFn=f;
154
155 return of;
156}
157
158
159
162{
164
165 assert(mgr);
166 of=mgr->setGroupFn;
167 mgr->setGroupFn=f;
168
169 return of;
170}
171
172
173
176{
178
179 assert(mgr);
180 of=mgr->hasGroupFn;
181 mgr->hasGroupFn=f;
182
183 return of;
184
185}
186
187
188
191{
193
194 assert(mgr);
195 of=mgr->lockGroupFn;
196 mgr->lockGroupFn=f;
197
198 return of;
199}
200
201
202
205{
207
208 assert(mgr);
209 of=mgr->unlockGroupFn;
210 mgr->unlockGroupFn=f;
211
212 return of;
213}
214
215
216
219{
221
222 assert(mgr);
223 of=mgr->getUniqueIdFn;
224 mgr->getUniqueIdFn=f;
225
226 return of;
227}
228
229
230
233{
235
236 assert(mgr);
237 of=mgr->mkUniqueIdFromIdFn;
238 mgr->mkUniqueIdFromIdFn=f;
239
240 return of;
241}
242
243
244
247{
249
250 assert(mgr);
251 of=mgr->deleteGroupFn;
252 mgr->deleteGroupFn=f;
253
254 return of;
255}
256
257
258
261{
263
264 assert(mgr);
265 of=mgr->listGroupsFn;
266 mgr->listGroupsFn=f;
267
268 return of;
269}
270
271
272
275{
277
278 assert(mgr);
279 of=mgr->listSubGroupsFn;
280 mgr->listSubGroupsFn=f;
281
282 return of;
283}
284
285
286
288 const char *groupName,
289 const char *subGroupName,
290 GWEN_DB_NODE **pDb)
291{
292 assert(mgr);
293 if (mgr->getGroupFn)
294 return mgr->getGroupFn(mgr, groupName, subGroupName, pDb);
295 else
297}
298
299
300
302 const char *groupName,
303 const char *subGroupName,
304 GWEN_DB_NODE *db)
305{
306 assert(mgr);
307 if (mgr->setGroupFn)
308 return mgr->setGroupFn(mgr, groupName, subGroupName, db);
309 else
311}
312
313
314
316 const char *groupName,
317 const char *subGroupName)
318{
319 assert(mgr);
320 if (mgr->hasGroupFn)
321 return mgr->hasGroupFn(mgr, groupName, subGroupName);
322 else
324}
325
326
327
329 const char *groupName,
330 const char *subGroupName)
331{
332 assert(mgr);
333 if (mgr->lockGroupFn)
334 return mgr->lockGroupFn(mgr, groupName, subGroupName);
335 else
337}
338
339
340
342 const char *groupName,
343 const char *subGroupName)
344{
345 assert(mgr);
346 if (mgr->unlockGroupFn)
347 return mgr->unlockGroupFn(mgr, groupName, subGroupName);
348 else
350}
351
352
353
355 const char *groupName,
356 char *buffer,
357 uint32_t bufferLen)
358{
359 assert(mgr);
360 if (mgr->getUniqueIdFn)
361 return mgr->getUniqueIdFn(mgr, groupName, buffer, bufferLen);
362 else
364}
365
366
367
369 const char *groupName,
370 uint32_t uid,
371 int doCheck,
372 char *buffer,
373 uint32_t bufferLen)
374{
375 assert(mgr);
376 if (mgr->mkUniqueIdFromIdFn)
377 return mgr->mkUniqueIdFromIdFn(mgr, groupName, uid, doCheck, buffer, bufferLen);
378 else
380}
381
382
383
385 const char *groupName,
386 const char *subGroupName)
387{
388 assert(mgr);
389 if (mgr->deleteGroupFn)
390 return mgr->deleteGroupFn(mgr, groupName, subGroupName);
391 else
393}
394
395
396
398 GWEN_STRINGLIST *sl)
399{
400 assert(mgr);
401 if (mgr->listGroupsFn)
402 return mgr->listGroupsFn(mgr, sl);
403 else
405}
406
407
409 const char *groupName,
410 GWEN_STRINGLIST *sl)
411{
412 assert(mgr);
413 if (mgr->listSubGroupsFn)
414 return mgr->listSubGroupsFn(mgr, groupName, sl);
415 else
417}
418
419
420
421
422
423
424
425
426
428 const char *name,
429 const char *fileName)
430{
431 GWEN_PLUGIN *pl;
432 GWEN_CONFIGMGR_PLUGIN *xpl;
433
434 pl=GWEN_Plugin_new(pm, name, fileName);
435 GWEN_NEW_OBJECT(GWEN_CONFIGMGR_PLUGIN, xpl);
436 GWEN_INHERIT_SETDATA(GWEN_PLUGIN, GWEN_CONFIGMGR_PLUGIN, pl, xpl,
438
439 return pl;
440}
441
442
443
445{
446 GWEN_CONFIGMGR_PLUGIN *xpl;
447
448 xpl=(GWEN_CONFIGMGR_PLUGIN *)p;
449 GWEN_FREE_OBJECT(xpl);
450}
451
452
453
456{
457 GWEN_CONFIGMGR_PLUGIN *xpl;
458
459 assert(pl);
460 xpl=GWEN_INHERIT_GETDATA(GWEN_PLUGIN, GWEN_CONFIGMGR_PLUGIN, pl);
461 assert(xpl);
462
463 xpl->factoryFn=f;
464}
465
466
467
469 const char *url)
470{
471 GWEN_CONFIGMGR_PLUGIN *xpl;
472
473 assert(pl);
474 xpl=GWEN_INHERIT_GETDATA(GWEN_PLUGIN, GWEN_CONFIGMGR_PLUGIN, pl);
475 assert(xpl);
476
477 assert(xpl->factoryFn);
478 return xpl->factoryFn(pl, url);
479}
480
481
482
484{
486 GWEN_PLUGIN *pl;
487 GWEN_CONFIGMGR *mgr=NULL;
488 GWEN_URL *purl;
489 const char *modname;
490
492 if (!pm) {
493 DBG_ERROR(GWEN_LOGDOMAIN, "No plugin manager for \"ConfigMgr\" found");
494 return 0;
495 }
496
497 purl=GWEN_Url_fromString(url);
498 if (purl==NULL) {
499 DBG_INFO(GWEN_LOGDOMAIN, "Invalid url [%s]", url);
500 return NULL;
501 }
502
503 modname=GWEN_Url_GetProtocol(purl);
504 if (modname==NULL)
505 modname="file";
506
507 pl=GWEN_PluginManager_GetPlugin(pm, modname);
508 if (!pl) {
509 DBG_INFO(GWEN_LOGDOMAIN, "ConfigMgr-Plugin \"%s\" not found", modname);
510 GWEN_Url_free(purl);
511 return 0;
512 }
513 GWEN_Url_free(purl);
514
516 if (mgr==NULL) {
518 "Plugin did not create a GWEN_CONFIGMGR");
519 }
520
521 return mgr;
522}
523
524
525
526
527
528
529
530
531
#define NULL
Definition binreloc.c:300
GWEN_BUFFER * GWEN_Buffer_new(char *buffer, uint32_t size, uint32_t used, int take)
Definition buffer.c:42
void GWEN_Buffer_Reset(GWEN_BUFFER *bf)
Definition buffer.c:653
void GWEN_Buffer_free(GWEN_BUFFER *bf)
Definition buffer.c:89
int GWEN_Buffer_AppendString(GWEN_BUFFER *bf, const char *buffer)
Definition buffer.c:992
char * GWEN_Buffer_GetStart(const GWEN_BUFFER *bf)
Definition buffer.c:235
GWEN_CONFIGMGR_UNLOCKGROUP_FN GWEN_ConfigMgr_SetUnlockGroupFn(GWEN_CONFIGMGR *mgr, GWEN_CONFIGMGR_UNLOCKGROUP_FN f)
Definition configmgr.c:203
GWEN_CONFIGMGR_DELETEGROUP_FN GWEN_ConfigMgr_SetDeleteGroupFn(GWEN_CONFIGMGR *mgr, GWEN_CONFIGMGR_DELETEGROUP_FN f)
Definition configmgr.c:245
int GWEN_ConfigMgr_SetGroup(GWEN_CONFIGMGR *mgr, const char *groupName, const char *subGroupName, GWEN_DB_NODE *db)
Definition configmgr.c:301
int GWEN_ConfigMgr_HasGroup(GWEN_CONFIGMGR *mgr, const char *groupName, const char *subGroupName)
Definition configmgr.c:315
int GWEN_ConfigMgr_DeleteGroup(GWEN_CONFIGMGR *mgr, const char *groupName, const char *subGroupName)
Definition configmgr.c:384
void GWEN_ConfigMgr_free(GWEN_CONFIGMGR *mgr)
Definition configmgr.c:135
GWEN_CONFIGMGR_HASGROUP_FN GWEN_ConfigMgr_SetHasGroupFn(GWEN_CONFIGMGR *mgr, GWEN_CONFIGMGR_HASGROUP_FN f)
Definition configmgr.c:174
GWEN_CONFIGMGR_GETGROUP_FN GWEN_ConfigMgr_SetGetGroupFn(GWEN_CONFIGMGR *mgr, GWEN_CONFIGMGR_GETGROUP_FN f)
Definition configmgr.c:146
GWEN_CONFIGMGR_LOCKGROUP_FN GWEN_ConfigMgr_SetLockGroupFn(GWEN_CONFIGMGR *mgr, GWEN_CONFIGMGR_LOCKGROUP_FN f)
Definition configmgr.c:189
GWEN_CONFIGMGR_LISTGROUPS_FN GWEN_ConfigMgr_SetListGroupsFn(GWEN_CONFIGMGR *mgr, GWEN_CONFIGMGR_LISTGROUPS_FN f)
Definition configmgr.c:259
GWEN_CONFIGMGR_SETGROUP_FN GWEN_ConfigMgr_SetSetGroupFn(GWEN_CONFIGMGR *mgr, GWEN_CONFIGMGR_SETGROUP_FN f)
Definition configmgr.c:160
int GWEN_ConfigMgr_ModuleInit(void)
Definition configmgr.c:55
GWEN_CONFIGMGR * GWEN_ConfigMgr_Plugin_Factory(GWEN_PLUGIN *pl, const char *url)
Definition configmgr.c:468
GWEN_CONFIGMGR * GWEN_ConfigMgr_Factory(const char *url)
Definition configmgr.c:483
GWEN_CONFIGMGR_MKUNIQUEIDFROMID_FN GWEN_ConfigMgr_SetMkUniqueIdFromIdFn(GWEN_CONFIGMGR *mgr, GWEN_CONFIGMGR_MKUNIQUEIDFROMID_FN f)
Definition configmgr.c:231
void GWENHYWFAR_CB GWEN_ConfigMgr_Plugin_FreeData(GWEN_UNUSED void *bp, void *p)
Definition configmgr.c:444
GWEN_CONFIGMGR_GETUNIQUEID_FN GWEN_ConfigMgr_SetGetUniqueIdFn(GWEN_CONFIGMGR *mgr, GWEN_CONFIGMGR_GETUNIQUEID_FN f)
Definition configmgr.c:217
GWEN_PLUGIN * GWEN_ConfigMgr_Plugin_new(GWEN_PLUGIN_MANAGER *pm, const char *name, const char *fileName)
Definition configmgr.c:427
int GWEN_ConfigMgr_ModuleFini(void)
Definition configmgr.c:96
int GWEN_ConfigMgr_GetUniqueId(GWEN_CONFIGMGR *mgr, const char *groupName, char *buffer, uint32_t bufferLen)
Definition configmgr.c:354
int GWEN_ConfigMgr_UnlockGroup(GWEN_CONFIGMGR *mgr, const char *groupName, const char *subGroupName)
Definition configmgr.c:341
int GWEN_ConfigMgr_ListSubGroups(GWEN_CONFIGMGR *mgr, const char *groupName, GWEN_STRINGLIST *sl)
Definition configmgr.c:408
int GWEN_ConfigMgr_MkUniqueIdFromId(GWEN_CONFIGMGR *mgr, const char *groupName, uint32_t uid, int doCheck, char *buffer, uint32_t bufferLen)
Definition configmgr.c:368
GWEN_CONFIGMGR * GWEN_ConfigMgr_new(const char *url)
Definition configmgr.c:120
int GWEN_ConfigMgr_LockGroup(GWEN_CONFIGMGR *mgr, const char *groupName, const char *subGroupName)
Definition configmgr.c:328
int GWEN_ConfigMgr_ListGroups(GWEN_CONFIGMGR *mgr, GWEN_STRINGLIST *sl)
Definition configmgr.c:397
void GWEN_ConfigMgr_Plugin_SetFactoryFn(GWEN_PLUGIN *pl, GWEN_CONFIGMGR_PLUGIN_FACTORYFN f)
Definition configmgr.c:454
GWEN_CONFIGMGR_LISTSUBGROUPS_FN GWEN_ConfigMgr_SetListSubGroupsFn(GWEN_CONFIGMGR *mgr, GWEN_CONFIGMGR_LISTSUBGROUPS_FN f)
Definition configmgr.c:273
int GWEN_ConfigMgr_GetGroup(GWEN_CONFIGMGR *mgr, const char *groupName, const char *subGroupName, GWEN_DB_NODE **pDb)
Definition configmgr.c:287
struct GWEN_CONFIGMGR GWEN_CONFIGMGR
Definition configmgr.h:36
#define GWEN_CONFIGMGR_FOLDER
Definition configmgr.h:40
#define GWEN_CONFIGMGR_PLUGIN_NAME
Definition configmgr.h:39
int GWENHYWFAR_CB(* GWEN_CONFIGMGR_GETUNIQUEID_FN)(GWEN_CONFIGMGR *mgr, const char *groupName, char *buffer, uint32_t bufferLen)
int GWENHYWFAR_CB(* GWEN_CONFIGMGR_DELETEGROUP_FN)(GWEN_CONFIGMGR *mgr, const char *groupName, const char *subGroupName)
int GWENHYWFAR_CB(* GWEN_CONFIGMGR_GETGROUP_FN)(GWEN_CONFIGMGR *mgr, const char *groupName, const char *subGroupName, GWEN_DB_NODE **pDb)
int GWENHYWFAR_CB(* GWEN_CONFIGMGR_SETGROUP_FN)(GWEN_CONFIGMGR *mgr, const char *groupName, const char *subGroupName, GWEN_DB_NODE *db)
int GWENHYWFAR_CB(* GWEN_CONFIGMGR_MKUNIQUEIDFROMID_FN)(GWEN_CONFIGMGR *mgr, const char *groupName, uint32_t uid, int doCheck, char *buffer, uint32_t bufferLen)
int GWENHYWFAR_CB(* GWEN_CONFIGMGR_LOCKGROUP_FN)(GWEN_CONFIGMGR *mgr, const char *groupName, const char *subGroupName)
int GWENHYWFAR_CB(* GWEN_CONFIGMGR_LISTGROUPS_FN)(GWEN_CONFIGMGR *mgr, GWEN_STRINGLIST *sl)
int GWENHYWFAR_CB(* GWEN_CONFIGMGR_UNLOCKGROUP_FN)(GWEN_CONFIGMGR *mgr, const char *groupName, const char *subGroupName)
GWEN_CONFIGMGR *(* GWEN_CONFIGMGR_PLUGIN_FACTORYFN)(GWEN_PLUGIN *pl, const char *url)
int GWENHYWFAR_CB(* GWEN_CONFIGMGR_LISTSUBGROUPS_FN)(GWEN_CONFIGMGR *mgr, const char *groupName, GWEN_STRINGLIST *sl)
int GWENHYWFAR_CB(* GWEN_CONFIGMGR_HASGROUP_FN)(GWEN_CONFIGMGR *mgr, const char *groupName, const char *subGroupName)
struct GWEN_DB_NODE GWEN_DB_NODE
Definition db.h:228
#define DBG_INFO(dbg_logger, format,...)
Definition debug.h:181
#define DBG_ERROR(dbg_logger, format,...)
Definition debug.h:97
#define GWEN_ERROR_NOT_IMPLEMENTED
Definition error.h:108
struct GWEN_BUFFER GWEN_BUFFER
A dynamically resizeable text buffer.
Definition buffer.h:38
#define GWEN_PM_PLUGINDIR
Definition gwenhywfar.h:53
#define GWEN_PM_LIBNAME
Definition gwenhywfar.h:42
#define GWEN_UNUSED
#define GWEN_DIR_SEPARATOR_S
#define GWENHYWFAR_CB
#define GWEN_INHERIT_FUNCTIONS(t)
Definition inherit.h:163
#define GWEN_INHERIT_INIT(t, element)
Definition inherit.h:223
#define GWEN_INHERIT_FINI(t, element)
Definition inherit.h:238
#define GWEN_INHERIT_SETDATA(bt, t, element, data, fn)
Definition inherit.h:300
#define GWEN_INHERIT(bt, t)
Definition inherit.h:264
#define GWEN_INHERIT_GETDATA(bt, t, element)
Definition inherit.h:279
#define GWEN_LOGDOMAIN
Definition logger.h:32
#define GWEN_FREE_OBJECT(varname)
Definition memory.h:61
#define GWEN_NEW_OBJECT(typ, varname)
Definition memory.h:55
GWEN_STRINGLIST * GWEN_PathManager_GetPaths(const char *destLib, const char *pathName)
GWEN_PLUGIN_MANAGER * GWEN_PluginManager_new(const char *name, const char *destLib)
Definition plugin.c:192
void GWEN_PluginManager_free(GWEN_PLUGIN_MANAGER *pm)
Definition plugin.c:211
int GWEN_PluginManager_AddPath(GWEN_PLUGIN_MANAGER *pm, const char *callingLib, const char *s)
Definition plugin.c:234
GWEN_PLUGIN_MANAGER * GWEN_PluginManager_FindPluginManager(const char *s)
Definition plugin.c:545
int GWEN_PluginManager_Unregister(GWEN_PLUGIN_MANAGER *pm)
Definition plugin.c:592
GWEN_PLUGIN * GWEN_PluginManager_GetPlugin(GWEN_PLUGIN_MANAGER *pm, const char *s)
Definition plugin.c:522
GWEN_PLUGIN * GWEN_Plugin_new(GWEN_PLUGIN_MANAGER *pm, const char *name, const char *fileName)
Definition plugin.c:77
int GWEN_PluginManager_Register(GWEN_PLUGIN_MANAGER *pm)
Definition plugin.c:561
struct GWEN_PLUGIN_MANAGER GWEN_PLUGIN_MANAGER
Definition plugin.h:37
struct GWEN_PLUGIN GWEN_PLUGIN
Definition plugin.h:36
void GWEN_StringList_free(GWEN_STRINGLIST *sl)
Definition stringlist.c:62
const char * GWEN_StringListEntry_Data(const GWEN_STRINGLISTENTRY *se)
Definition stringlist.c:406
GWEN_STRINGLISTENTRY * GWEN_StringListEntry_Next(const GWEN_STRINGLISTENTRY *se)
Definition stringlist.c:398
GWEN_STRINGLISTENTRY * GWEN_StringList_FirstEntry(const GWEN_STRINGLIST *sl)
Definition stringlist.c:390
struct GWEN_STRINGLISTENTRYSTRUCT GWEN_STRINGLISTENTRY
Definition stringlist.h:53
struct GWEN_STRINGLISTSTRUCT GWEN_STRINGLIST
Definition stringlist.h:56
void GWEN_Url_free(GWEN_URL *st)
Definition url.c:40
const char * GWEN_Url_GetProtocol(const GWEN_URL *st)
Definition url.c:164
struct GWEN_URL GWEN_URL
Definition url.h:77
GWEN_URL * GWEN_Url_fromString(const char *str)
Definition urlfns.c:24