On Sun, Jan 31, 2016 at 09:39:52AM +0100, Landry Breuil wrote:
> 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 !
>
the diff looks good and it would permit to make regress tests, so OK semarie@ :)
>
> 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)
>
>
--
Sebastien Marie