preauthuserdbcommon.c: Move token-getting code to below callback.
[hcoop/debian/courier-authlib.git] / bdbobj / bdbobj2.c
CommitLineData
d9898ee8 1/*
2** Copyright 1998 - 1999 Double Precision, Inc. See COPYING for
3** distribution information.
4*/
5
6#include <string.h>
7#include <stdlib.h>
8#include "bdbobj.h"
9
10char *bdbobj_firstkey(struct bdbobj *obj, size_t *keylen, char **val,
11 size_t *vallen)
12{
13DBT key, value;
14
15 if (!obj->has_dbf) return (0);
16
17 memset(&key, 0, sizeof(key));
18 memset(&value, 0, sizeof(value));
19
20#if DB_VERSION_MAJOR < 2
21 if ((*obj->dbf->seq)(obj->dbf, &key, &value, R_FIRST)) return (0);
22#else
23 if (obj->has_dbc)
24 {
25 (*obj->dbc->c_close)(obj->dbc);
26 obj->has_dbc=0;
27 }
28
29#if DB_VERSION_MAJOR > 2
30 if ((*obj->dbf->cursor)(obj->dbf, 0, &obj->dbc, 0)) return (0);
31#else
32#if DB_VERSION_MINOR >= 5
33 if ((*obj->dbf->cursor)(obj->dbf, 0, &obj->dbc, 0)) return (0);
34#else
35 if ((*obj->dbf->cursor)(obj->dbf, 0, &obj->dbc)) return (0);
36#endif
37#endif
38 obj->has_dbc=1;
39
40 if ((*obj->dbc->c_get)(obj->dbc, &key, &value, DB_FIRST)) return (0);
41#endif
42 *keylen=key.size;
43 *vallen=value.size;
44 if ((*val=(char *)malloc(*vallen)) == 0) return (0);
45
46 memcpy(*val, value.data, *vallen);
47 return ((char *)key.data);
48}
49
50char *bdbobj_nextkey(struct bdbobj *obj, size_t *keylen, char **val,
51 size_t *vallen)
52{
53DBT key, value;
54
55 if (!obj->has_dbf) return (0);
56
57 memset(&key, 0, sizeof(key));
58 memset(&value, 0, sizeof(value));
59
60#if DB_VERSION_MAJOR < 2
61 if ((*obj->dbf->seq)(obj->dbf, &key, &value, R_NEXT)) return (0);
62#else
63 if (!obj->has_dbc) return (0);
64
65 if ((*obj->dbc->c_get)(obj->dbc, &key, &value, DB_NEXT))
66 {
67 (*obj->dbc->c_close)(obj->dbc);
68 obj->has_dbc=0;
69 }
70#endif
71
72 *keylen=key.size;
73 *vallen=value.size;
74 if ((*val=(char *)malloc(*vallen + 1)) == 0) return (0);
75
76 memcpy(*val, value.data, *vallen);
77 (*val)[*vallen]=0;
78
79 return ((char *)key.data);
80}