summaryrefslogtreecommitdiffstats
path: root/usr.sbin/ldapd/namespace.c
diff options
context:
space:
mode:
authormartinh <martinh@openbsd.org>2010-06-15 19:30:26 +0000
committermartinh <martinh@openbsd.org>2010-06-15 19:30:26 +0000
commitf5f15bc0e84a27b819dc9523a6e8b9cc145894b4 (patch)
tree31a299c222990f0c415607c6389228d4be147f3b /usr.sbin/ldapd/namespace.c
parentVerify that a transaction passed to btree_tnx_{put,del} is not readonly. (diff)
downloadwireguard-openbsd-f5f15bc0e84a27b819dc9523a6e8b9cc145894b4.tar.xz
wireguard-openbsd-f5f15bc0e84a27b819dc9523a6e8b9cc145894b4.zip
Move around some functions to ease re-use from ldapctl.
Diffstat (limited to 'usr.sbin/ldapd/namespace.c')
-rw-r--r--usr.sbin/ldapd/namespace.c118
1 files changed, 3 insertions, 115 deletions
diff --git a/usr.sbin/ldapd/namespace.c b/usr.sbin/ldapd/namespace.c
index cb50b0e5405..4b8c56a61e8 100644
--- a/usr.sbin/ldapd/namespace.c
+++ b/usr.sbin/ldapd/namespace.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: namespace.c,v 1.6 2010/06/15 15:47:56 martinh Exp $ */
+/* $OpenBSD: namespace.c,v 1.7 2010/06/15 19:30:26 martinh Exp $ */
/*
* Copyright (c) 2009, 2010 Martin Hedenfalk <martin@bzero.se>
@@ -38,27 +38,6 @@ static void namespace_queue_replay(int fd, short event, void *arg);
static int namespace_set_fd(struct namespace *ns,
struct btree **bt, int fd, unsigned int flags);
-struct namespace *
-namespace_new(const char *suffix)
-{
- struct namespace *ns;
-
- if ((ns = calloc(1, sizeof(*ns))) == NULL)
- return NULL;
- ns->suffix = strdup(suffix);
- ns->sync = 1;
- if (ns->suffix == NULL) {
- free(ns->suffix);
- free(ns);
- return NULL;
- }
- TAILQ_INIT(&ns->indices);
- TAILQ_INIT(&ns->request_queue);
- SIMPLEQ_INIT(&ns->acl);
-
- return ns;
-}
-
int
namespace_begin_txn(struct namespace *ns, struct btree_txn **data_txn,
struct btree_txn **indx_txn, int rdonly)
@@ -327,104 +306,13 @@ int
namespace_ber2db(struct namespace *ns, struct ber_element *root,
struct btval *val)
{
- int rc;
- ssize_t len;
- uLongf destlen;
- Bytef *dest;
- void *buf;
- struct ber ber;
-
- bzero(val, sizeof(*val));
-
- bzero(&ber, sizeof(ber));
- ber.fd = -1;
- ber_write_elements(&ber, root);
-
- if ((len = ber_get_writebuf(&ber, &buf)) == -1)
- return -1;
-
- if (ns->compression_level > 0) {
- val->size = compressBound(len);
- val->data = malloc(val->size + sizeof(uint32_t));
- if (val->data == NULL) {
- log_warn("malloc(%u)", val->size + sizeof(uint32_t));
- ber_free(&ber);
- return -1;
- }
- dest = (char *)val->data + sizeof(uint32_t);
- destlen = val->size - sizeof(uint32_t);
- if ((rc = compress2(dest, &destlen, buf, len,
- ns->compression_level)) != Z_OK) {
- log_warn("compress returned %i", rc);
- free(val->data);
- ber_free(&ber);
- return -1;
- }
- log_debug("compressed entry from %u -> %u byte",
- len, destlen + sizeof(uint32_t));
-
- *(uint32_t *)val->data = len;
- val->size = destlen + sizeof(uint32_t);
- val->free_data = 1;
- } else {
- val->data = buf;
- val->size = len;
- val->free_data = 1; /* XXX: take over internal br_wbuf */
- ber.br_wbuf = NULL;
- }
-
- ber_free(&ber);
-
- return 0;
+ return ber2db(root, val, ns->compression_level);
}
struct ber_element *
namespace_db2ber(struct namespace *ns, struct btval *val)
{
- int rc;
- uLongf len;
- void *buf;
- Bytef *src;
- uLong srclen;
- struct ber_element *elm;
- struct ber ber;
-
- assert(ns != NULL);
- assert(val != NULL);
-
- bzero(&ber, sizeof(ber));
- ber.fd = -1;
-
- if (ns->compression_level > 0) {
- if (val->size < sizeof(uint32_t))
- return NULL;
-
- len = *(uint32_t *)val->data;
- if ((buf = malloc(len)) == NULL) {
- log_warn("malloc(%u)", len);
- return NULL;
- }
-
- src = (char *)val->data + sizeof(uint32_t);
- srclen = val->size - sizeof(uint32_t);
- rc = uncompress(buf, &len, src, srclen);
- if (rc != Z_OK) {
- log_warnx("dbt_to_ber: uncompress returned %i", rc);
- free(buf);
- return NULL;
- }
-
- log_debug("uncompressed entry from %u -> %u byte",
- val->size, len);
-
- ber_set_readbuf(&ber, buf, len);
- elm = ber_read_elements(&ber, NULL);
- free(buf);
- return elm;
- } else {
- ber_set_readbuf(&ber, val->data, val->size);
- return ber_read_elements(&ber, NULL);
- }
+ return db2ber(val, ns->compression_level);
}
static int