Hello,

Move temporary files to /var/named/dyndb-ldap directory.

This should make RPM packaging easier.

This patch should go to master branch before 4.0 release.

--
Petr^2 Spacek
From 1811facb8c736ed4d6176c3524c0d56ce0c2b2f5 Mon Sep 17 00:00:00 2001
From: Petr Spacek <pspa...@redhat.com>
Date: Tue, 28 Jan 2014 16:30:09 +0100
Subject: [PATCH] Move temporary files to /var/named/dyndb-ldap directory.

This should make RPM packaging easier.
---
 README                       |  7 ++++---
 contrib/bind-dyndb-ldap.spec |  5 +++++
 src/fs.c                     | 27 +++++++++++++++++++++++++++
 src/fs.h                     |  2 +-
 src/ldap_helper.c            |  7 ++++---
 src/zone_register.c          |  2 +-
 6 files changed, 42 insertions(+), 8 deletions(-)

diff --git a/README b/README
index 25f516c9bed9aeea0c547666e75aec3afa5112c4..b2c3653ef3ae653e4454ec43e341a220a4968e8f 100644
--- a/README
+++ b/README
@@ -259,7 +259,8 @@ verbose_checks (default no)
 	debugging purposes. It could produce huge amount of log messages
 	on a loaded system!
 
-directory (default is current instance name from dynamic-db directive)
+directory (default is
+           "dyndb-ldap/<current instance name from dynamic-db directive>")
 	Specifies working directory for plug-in. The path has to be writeable
 	by named because plug-in will create sub-directory for each zone.
 	These sub-directories will contain temporary files like zone dump, zone
@@ -288,9 +289,9 @@ base for entries with object class idnsZone, for which the
 idnsZoneActive attribute is set to True. For each entry it will find, it
 will register a new zone with BIND. The LDAP back-end will keep each
 record it gets from LDAP in its memory.
-Working directory for the plug-in will be "/var/named/my_db_name/",
+Working directory for the plug-in will be "/var/named/dyndb-ldap/my_db_name/",
 so hypothetical zone "example.com" will use sub-directory
-"/var/named/my_db_name/example.com/".
+"/var/named/dyndb-ldap/my_db_name/example.com/".
 
 5.3 Configuration in LDAP
 -------------------------
diff --git a/contrib/bind-dyndb-ldap.spec b/contrib/bind-dyndb-ldap.spec
index e28bf5195cd6bb3bed24d71d7c834c93cdf2df41..4463c193027680c4a88eefd6b776cf44538ce3b4 100644
--- a/contrib/bind-dyndb-ldap.spec
+++ b/contrib/bind-dyndb-ldap.spec
@@ -48,9 +48,14 @@ rm -rf %{buildroot}
 %files
 %defattr(-,root,root,-)
 %doc NEWS README COPYING doc/{example.ldif,schema}
+%dir /var/named/dyndb-ldap
+%attr(770, root, named) /var/named/dyndb-ldap
 %{_libdir}/bind/ldap.so
 
 
 %changelog
+* Tue Jan 28 2014 Petr Spacek <pspacek redhat com>
+- package /var/named/dyndb-ldap directory
+
 * Mon Nov 14 2011 Adam Tkac <atkac redhat com>
 - specfile to build bind-dyndb-ldap
diff --git a/src/fs.c b/src/fs.c
index ba7003ced895e26b134421c055049e8b9f049fb3..44eebc141bb2a881c95c0f729271e6e1450c9cbe 100644
--- a/src/fs.c
+++ b/src/fs.c
@@ -28,6 +28,7 @@
 #include <isc/file.h>
 #include <isc/errno2result.h>
 #include <isc/result.h>
+#include <isc/string.h>
 #include <isc/util.h>
 
 #include "log.h"
@@ -70,6 +71,32 @@ fs_dir_create(const char *dir_name)
 	return result;
 }
 
+/**
+ * Create directories specified by path (including all parents).
+ */
+isc_result_t
+fs_dirs_create(const char *path) {
+	isc_result_t result = ISC_R_SUCCESS;
+	char curr_path[PATH_MAX + 1];
+	char *end = NULL;
+
+	CHECK(isc_string_copy(curr_path, PATH_MAX, path));
+
+	for (end = strchr(curr_path, '/');
+	     end != NULL;
+	     end = strchr(end + 1, '/')) {
+		*end = '\0';
+		if (strcmp(curr_path, "") != 0)
+			/* Absolute paths would have first component empty. */
+			CHECK(fs_dir_create(curr_path));
+		*end = '/';
+	}
+
+
+cleanup:
+	return result;
+}
+
 isc_result_t
 fs_file_remove(const char *file_name) {
 	isc_result_t result;
diff --git a/src/fs.h b/src/fs.h
index b583d3be57b7e1582b61b2bf3554c5d5be805e18..341222dac1ce08e4d37bd10edb9a3838632a8c58 100644
--- a/src/fs.h
+++ b/src/fs.h
@@ -24,7 +24,7 @@
 #include "util.h"
 
 isc_result_t ATTR_NONNULLS
-fs_dir_create(const char *dir_name);
+fs_dirs_create(const char *path);
 
 isc_result_t ATTR_NONNULLS
 fs_file_remove(const char *file_name);
diff --git a/src/ldap_helper.c b/src/ldap_helper.c
index 8e8bf4bdb4072e414f5212c6b5df429203e582de..b0dd3391f4dca88992ac7869b34d943a381d51be 100644
--- a/src/ldap_helper.c
+++ b/src/ldap_helper.c
@@ -372,9 +372,10 @@ validate_local_instance_settings(ldap_instance_t *inst, settings_set_t *set) {
 	CHECK(str_new(inst->mctx, &buff));
 	CHECK(setting_get_str("directory", inst->local_settings, &dir_name));
 	dir_default = (strcmp(dir_name, "") == 0);
-	if (dir_default == ISC_TRUE)
+	if (dir_default == ISC_TRUE) {
+		CHECK(str_cat_char(buff, "dyndb-ldap/"));
 		CHECK(str_cat_char(buff, inst->db_name));
-	else
+	} else
 		CHECK(str_cat_char(buff, dir_name));
 
 	if (str_buf(buff)[str_len(buff) - 1] != '/')
@@ -388,7 +389,7 @@ validate_local_instance_settings(ldap_instance_t *inst, settings_set_t *set) {
 	CHECK(setting_get_str("directory", inst->local_settings, &dir_name));
 
 	/* Make sure that working directory exists */
-	CHECK(fs_dir_create(dir_name));
+	CHECK(fs_dirs_create(dir_name));
 
 	/* Set timer for deadlock detection inside semaphore_wait_timed . */
 	CHECK(setting_get_uint("timeout", set, &uint));
diff --git a/src/zone_register.c b/src/zone_register.c
index 6a5bade031660b7fc567a36a074aff1c5fda2689..d58159c3104f2624bfaa05de4515db5b2598d51f 100644
--- a/src/zone_register.c
+++ b/src/zone_register.c
@@ -260,7 +260,7 @@ create_zone_info(isc_mem_t *mctx, dns_zone_t *zone, const char *dn,
 	/* Prepate a directory for this zone */
 	CHECK(zr_get_zone_path(mctx, global_settings, dns_zone_getorigin(zone),
 			       NULL, &zone_dir));
-	CHECK(fs_dir_create(str_buf(zone_dir)));
+	CHECK(fs_dirs_create(str_buf(zone_dir)));
 
 	DE_CONST(db_name, argv[0]);
 	CHECK(ldapdb_create(mctx, dns_zone_getorigin(zone), LDAP_DB_TYPE,
-- 
1.8.3.1

_______________________________________________
Freeipa-devel mailing list
Freeipa-devel@redhat.com
https://www.redhat.com/mailman/listinfo/freeipa-devel

Reply via email to