preauthuserdbcommon.c: Move token-getting code to below callback.
[hcoop/debian/courier-authlib.git] / bdbobj / bdbobj2.c
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
10 char *bdbobj_firstkey(struct bdbobj *obj, size_t *keylen, char **val,
11 size_t *vallen)
12 {
13 DBT 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
50 char *bdbobj_nextkey(struct bdbobj *obj, size_t *keylen, char **val,
51 size_t *vallen)
52 {
53 DBT 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 }