Landry Breuil
2016-01-31 08:39:52 UTC
Hi,
i'm tinkering with ldapd and writing regress tests for it, and to
allow running independent instances (with separate port/control
socket/etc) i needed to add the possibility to specify an alternative
datadir, which was so far #defined in the code.
Patch is pretty simple and works fine, i'm open to suggestions of course
on a better wording for the manpage and option choose (i went for -r..)
okays welcome too !
Landry
Index: ldapd.8
===================================================================
RCS file: /cvs/src/usr.sbin/ldapd/ldapd.8,v
retrieving revision 1.12
diff -u -r1.12 ldapd.8
--- ldapd.8 11 Aug 2014 08:21:55 -0000 1.12
+++ ldapd.8 23 Jan 2016 10:11:48 -0000
@@ -57,6 +57,11 @@
.Ar file
as the configuration file, instead of the default
.Pa /etc/ldapd.conf .
+.It Fl r Ar directory
+Store and read database files in
+.Ar directory
+, instead of the default
+.Pa /var/db/ldap .
.It Fl n
Configtest mode.
Only check the configuration file for validity.
Index: ldapd.c
===================================================================
RCS file: /cvs/src/usr.sbin/ldapd/ldapd.c,v
retrieving revision 1.16
diff -u -r1.16 ldapd.c
--- ldapd.c 17 Jan 2016 08:13:34 -0000 1.16
+++ ldapd.c 23 Jan 2016 10:11:48 -0000
@@ -50,6 +50,7 @@
struct ldapd_stats stats;
pid_t ldape_pid;
+char * datadir;
void
usage(void)
@@ -57,7 +58,7 @@
extern char *__progname;
fprintf(stderr, "usage: %s [-dnv] [-D macro=value] "
- "[-f file] [-s file]\n", __progname);
+ "[-f file] [-r directory] [-s file]\n", __progname);
exit(1);
}
@@ -117,9 +118,10 @@
struct event ev_sigchld;
struct event ev_sighup;
+ datadir = DATADIR;
log_init(1); /* log to stderr until daemonized */
- while ((c = getopt(argc, argv, "dhvD:f:ns:")) != -1) {
+ while ((c = getopt(argc, argv, "dhvD:f:nr:s:")) != -1) {
switch (c) {
case 'd':
debug = 1;
@@ -139,6 +141,9 @@
case 'n':
configtest = 1;
break;
+ case 'r':
+ datadir = optarg;
+ break;
case 's':
csockpath = optarg;
break;
@@ -366,7 +371,7 @@
/* make sure path is null-terminated */
oreq->path[PATH_MAX] = '\0';
- if (strncmp(oreq->path, DATADIR, strlen(DATADIR)) != 0) {
+ if (strncmp(oreq->path, datadir, strlen(datadir)) != 0) {
log_warnx("refusing to open file %s", oreq->path);
fatal("ldape sent invalid open request");
}
Index: namespace.c
===================================================================
RCS file: /cvs/src/usr.sbin/ldapd/namespace.c,v
retrieving revision 1.14
diff -u -r1.14 namespace.c
--- namespace.c 24 Dec 2015 17:47:57 -0000 1.14
+++ namespace.c 23 Jan 2016 10:11:48 -0000
@@ -38,6 +38,7 @@
static int namespace_set_fd(struct namespace *ns,
struct btree **bt, int fd, unsigned int flags);
+extern char *datadir;
int
namespace_begin_txn(struct namespace *ns, struct btree_txn **data_txn,
struct btree_txn **indx_txn, int rdonly)
@@ -115,7 +116,7 @@
if (ns->sync == 0)
db_flags |= BT_NOSYNC;
- if (asprintf(&ns->data_path, "%s/%s_data.db", DATADIR, ns->suffix) < 0)
+ if (asprintf(&ns->data_path, "%s/%s_data.db", datadir, ns->suffix) < 0)
return -1;
log_info("opening namespace %s", ns->suffix);
ns->data_db = btree_open(ns->data_path, db_flags | BT_REVERSEKEY, 0644);
@@ -124,7 +125,7 @@
btree_set_cache_size(ns->data_db, ns->cache_size);
- if (asprintf(&ns->indx_path, "%s/%s_indx.db", DATADIR, ns->suffix) < 0)
+ if (asprintf(&ns->indx_path, "%s/%s_indx.db", datadir, ns->suffix) < 0)
return -1;
ns->indx_db = btree_open(ns->indx_path, db_flags, 0644);
if (ns->indx_db == NULL)
i'm tinkering with ldapd and writing regress tests for it, and to
allow running independent instances (with separate port/control
socket/etc) i needed to add the possibility to specify an alternative
datadir, which was so far #defined in the code.
Patch is pretty simple and works fine, i'm open to suggestions of course
on a better wording for the manpage and option choose (i went for -r..)
okays welcome too !
Landry
Index: ldapd.8
===================================================================
RCS file: /cvs/src/usr.sbin/ldapd/ldapd.8,v
retrieving revision 1.12
diff -u -r1.12 ldapd.8
--- ldapd.8 11 Aug 2014 08:21:55 -0000 1.12
+++ ldapd.8 23 Jan 2016 10:11:48 -0000
@@ -57,6 +57,11 @@
.Ar file
as the configuration file, instead of the default
.Pa /etc/ldapd.conf .
+.It Fl r Ar directory
+Store and read database files in
+.Ar directory
+, instead of the default
+.Pa /var/db/ldap .
.It Fl n
Configtest mode.
Only check the configuration file for validity.
Index: ldapd.c
===================================================================
RCS file: /cvs/src/usr.sbin/ldapd/ldapd.c,v
retrieving revision 1.16
diff -u -r1.16 ldapd.c
--- ldapd.c 17 Jan 2016 08:13:34 -0000 1.16
+++ ldapd.c 23 Jan 2016 10:11:48 -0000
@@ -50,6 +50,7 @@
struct ldapd_stats stats;
pid_t ldape_pid;
+char * datadir;
void
usage(void)
@@ -57,7 +58,7 @@
extern char *__progname;
fprintf(stderr, "usage: %s [-dnv] [-D macro=value] "
- "[-f file] [-s file]\n", __progname);
+ "[-f file] [-r directory] [-s file]\n", __progname);
exit(1);
}
@@ -117,9 +118,10 @@
struct event ev_sigchld;
struct event ev_sighup;
+ datadir = DATADIR;
log_init(1); /* log to stderr until daemonized */
- while ((c = getopt(argc, argv, "dhvD:f:ns:")) != -1) {
+ while ((c = getopt(argc, argv, "dhvD:f:nr:s:")) != -1) {
switch (c) {
case 'd':
debug = 1;
@@ -139,6 +141,9 @@
case 'n':
configtest = 1;
break;
+ case 'r':
+ datadir = optarg;
+ break;
case 's':
csockpath = optarg;
break;
@@ -366,7 +371,7 @@
/* make sure path is null-terminated */
oreq->path[PATH_MAX] = '\0';
- if (strncmp(oreq->path, DATADIR, strlen(DATADIR)) != 0) {
+ if (strncmp(oreq->path, datadir, strlen(datadir)) != 0) {
log_warnx("refusing to open file %s", oreq->path);
fatal("ldape sent invalid open request");
}
Index: namespace.c
===================================================================
RCS file: /cvs/src/usr.sbin/ldapd/namespace.c,v
retrieving revision 1.14
diff -u -r1.14 namespace.c
--- namespace.c 24 Dec 2015 17:47:57 -0000 1.14
+++ namespace.c 23 Jan 2016 10:11:48 -0000
@@ -38,6 +38,7 @@
static int namespace_set_fd(struct namespace *ns,
struct btree **bt, int fd, unsigned int flags);
+extern char *datadir;
int
namespace_begin_txn(struct namespace *ns, struct btree_txn **data_txn,
struct btree_txn **indx_txn, int rdonly)
@@ -115,7 +116,7 @@
if (ns->sync == 0)
db_flags |= BT_NOSYNC;
- if (asprintf(&ns->data_path, "%s/%s_data.db", DATADIR, ns->suffix) < 0)
+ if (asprintf(&ns->data_path, "%s/%s_data.db", datadir, ns->suffix) < 0)
return -1;
log_info("opening namespace %s", ns->suffix);
ns->data_db = btree_open(ns->data_path, db_flags | BT_REVERSEKEY, 0644);
@@ -124,7 +125,7 @@
btree_set_cache_size(ns->data_db, ns->cache_size);
- if (asprintf(&ns->indx_path, "%s/%s_indx.db", DATADIR, ns->suffix) < 0)
+ if (asprintf(&ns->indx_path, "%s/%s_indx.db", datadir, ns->suffix) < 0)
return -1;
ns->indx_db = btree_open(ns->indx_path, db_flags, 0644);
if (ns->indx_db == NULL)