[SCM] Samba Shared Repository - branch master updated

Jelmer Vernooij jelmer at samba.org
Thu Dec 29 12:00:02 MST 2011


The branch, master has been updated
       via  a108eb4 pyregistry: Remove directory support.
       via  af1b7f5 Remove the 'dir' registry backend.
      from  c76ffcf s4-toture: Rename memory contexts in rpc.pac for greater clarity

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit a108eb4fdb565cc6580a15f3d9221f8b9f863fe6
Author: Jelmer Vernooij <jelmer at samba.org>
Date:   Thu Dec 29 18:24:49 2011 +0100

    pyregistry: Remove directory support.
    
    Autobuild-User: Jelmer Vernooij <jelmer at samba.org>
    Autobuild-Date: Thu Dec 29 19:59:57 CET 2011 on sn-devel-104

commit af1b7f55756b5957e0f4c9e30bfcb6baa0ecaadb
Author: Jelmer Vernooij <jelmer at samba.org>
Date:   Thu Dec 29 16:45:23 2011 +0100

    Remove the 'dir' registry backend.
    
    This backend was incomplete, and we already have plenty of other backends.

-----------------------------------------------------------------------

Summary of changes:
 source4/lib/registry/dir.c         |  446 ------------------------------------
 source4/lib/registry/hive.c        |    5 -
 source4/lib/registry/pyregistry.c  |   32 ---
 source4/lib/registry/tests/hive.c  |   39 ---
 source4/lib/registry/wscript_build |    2 +-
 5 files changed, 1 insertions(+), 523 deletions(-)
 delete mode 100644 source4/lib/registry/dir.c


Changeset truncated at 500 lines:

diff --git a/source4/lib/registry/dir.c b/source4/lib/registry/dir.c
deleted file mode 100644
index b1f0965..0000000
--- a/source4/lib/registry/dir.c
+++ /dev/null
@@ -1,446 +0,0 @@
-/*
-   Unix SMB/CIFS implementation.
-   Registry interface
-   Copyright (C) Jelmer Vernooij				  2004-2007.
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include "includes.h"
-#include "registry.h"
-#include "system/dir.h"
-#include "system/filesys.h"
-
-struct dir_key {
-	struct hive_key key;
-	const char *path;
-};
-
-static struct hive_operations reg_backend_dir;
-
-static WERROR reg_dir_add_key(TALLOC_CTX *mem_ctx,
-			      const struct hive_key *parent,
-			      const char *name, const char *classname,
-			      struct security_descriptor *desc,
-			      struct hive_key **result)
-{
-	struct dir_key *dk = talloc_get_type(parent, struct dir_key);
-	char *path;
-	int ret;
-
-	path = talloc_asprintf(mem_ctx, "%s/%s", dk->path, name);
-	W_ERROR_HAVE_NO_MEMORY(path);
-	ret = mkdir(path, 0700);
-	if (ret == 0) {
-		struct dir_key *key = talloc(mem_ctx, struct dir_key);
-		W_ERROR_HAVE_NO_MEMORY(key);
-		key->key.ops = &reg_backend_dir;
-		key->path = talloc_steal(key, path);
-		*result = (struct hive_key *)key;
-		return WERR_OK;
-	}
-
-	if (errno == EEXIST)
-		return WERR_ALREADY_EXISTS;
-	printf("FAILED %s BECAUSE: %s\n", path, strerror(errno));
-	return WERR_GENERAL_FAILURE;
-}
-
-static WERROR reg_dir_delete_recursive(const char *name)
-{
-	DIR *d;
-	struct dirent *e;
-	WERROR werr;
-
-	d = opendir(name);
-	if (d == NULL) {
-		DEBUG(3,("Unable to open '%s': %s\n", name,
-		      strerror(errno)));
-		return WERR_BADFILE;
-	}
-
-	while((e = readdir(d))) {
-		char *path;
-		struct stat stbuf;
-
-		if (ISDOT(e->d_name) || ISDOTDOT(e->d_name))
-			continue;
-
-		path = talloc_asprintf(name, "%s/%s", name, e->d_name);
-		W_ERROR_HAVE_NO_MEMORY(path);
-
-		stat(path, &stbuf);
-
-		if (!S_ISDIR(stbuf.st_mode)) {
-			if (unlink(path) < 0) {
-				talloc_free(path);
-				closedir(d);
-				return WERR_GENERAL_FAILURE;
-			}
-		} else {
-			werr = reg_dir_delete_recursive(path);
-			if (!W_ERROR_IS_OK(werr)) {
-				talloc_free(path);
-				closedir(d);
-				return werr;
-			}
-		}
-
-		talloc_free(path);
-	}
-	closedir(d);
-
-	if (rmdir(name) == 0)
-		return WERR_OK;
-	else if (errno == ENOENT)
-		return WERR_BADFILE;
-	else
-		return WERR_GENERAL_FAILURE;
-}
-
-static WERROR reg_dir_del_key(TALLOC_CTX *mem_ctx, const struct hive_key *k,
-			      const char *name)
-{
-	struct dir_key *dk = talloc_get_type(k, struct dir_key);
-	char *child;
-	WERROR ret;
-
-	child = talloc_asprintf(mem_ctx, "%s/%s", dk->path, name);
-	W_ERROR_HAVE_NO_MEMORY(child);
-
-	ret = reg_dir_delete_recursive(child);
-
-	talloc_free(child);
-
-	return ret;
-}
-
-static WERROR reg_dir_open_key(TALLOC_CTX *mem_ctx,
-			       const struct hive_key *parent,
-			       const char *name, struct hive_key **subkey)
-{
-	DIR *d;
-	char *fullpath;
-	const struct dir_key *p = talloc_get_type(parent, struct dir_key);
-	struct dir_key *ret;
-
-	if (name == NULL) {
-		DEBUG(0, ("NULL pointer passed as directory name!"));
-		return WERR_INVALID_PARAM;
-	}
-
-	fullpath = talloc_asprintf(mem_ctx, "%s/%s", p->path, name);
-	W_ERROR_HAVE_NO_MEMORY(fullpath);
-
-	d = opendir(fullpath);
-	if (d == NULL) {
-		DEBUG(3,("Unable to open '%s': %s\n", fullpath,
-			strerror(errno)));
-		talloc_free(fullpath);
-		return WERR_BADFILE;
-	}
-	closedir(d);
-	ret = talloc(mem_ctx, struct dir_key);
-	ret->key.ops = &reg_backend_dir;
-	ret->path = talloc_steal(ret, fullpath);
-	*subkey = (struct hive_key *)ret;
-	return WERR_OK;
-}
-
-static WERROR reg_dir_key_by_index(TALLOC_CTX *mem_ctx,
-				   const struct hive_key *k, uint32_t idx,
-				   const char **name,
-				   const char **classname,
-				   NTTIME *last_mod_time)
-{
-	struct dirent *e;
-	const struct dir_key *dk = talloc_get_type(k, struct dir_key);
-	unsigned int i = 0;
-	DIR *d;
-
-	d = opendir(dk->path);
-
-	if (d == NULL)
-		return WERR_INVALID_PARAM;
-
-	while((e = readdir(d))) {
-		if(!ISDOT(e->d_name) && !ISDOTDOT(e->d_name)) {
-			struct stat stbuf;
-			char *thispath;
-
-			/* Check if file is a directory */
-			thispath = talloc_asprintf(mem_ctx, "%s/%s", dk->path,
-						   e->d_name);
-			W_ERROR_HAVE_NO_MEMORY(thispath);
-			stat(thispath, &stbuf);
-
-			if (!S_ISDIR(stbuf.st_mode)) {
-				talloc_free(thispath);
-				continue;
-			}
-
-			if (i == idx) {
-				struct stat st;
-				*name = talloc_strdup(mem_ctx, e->d_name);
-				W_ERROR_HAVE_NO_MEMORY(*name);
-				*classname = NULL;
-				stat(thispath, &st);
-				unix_to_nt_time(last_mod_time, st.st_mtime);
-				talloc_free(thispath);
-				closedir(d);
-				return WERR_OK;
-			}
-			i++;
-
-			talloc_free(thispath);
-		}
-	}
-
-	closedir(d);
-
-	return WERR_NO_MORE_ITEMS;
-}
-
-WERROR reg_open_directory(TALLOC_CTX *parent_ctx,
-			  const char *location, struct hive_key **key)
-{
-	struct dir_key *dk;
-
-	if (location == NULL)
-		return WERR_INVALID_PARAM;
-
-	dk = talloc(parent_ctx, struct dir_key);
-	W_ERROR_HAVE_NO_MEMORY(dk);
-	dk->key.ops = &reg_backend_dir;
-	dk->path = talloc_strdup(dk, location);
-	*key = (struct hive_key *)dk;
-	return WERR_OK;
-}
-
-WERROR reg_create_directory(TALLOC_CTX *parent_ctx,
-			    const char *location, struct hive_key **key)
-{
-	if (mkdir(location, 0700) != 0) {
-		*key = NULL;
-		return WERR_GENERAL_FAILURE;
-	}
-
-	return reg_open_directory(parent_ctx, location, key);
-}
-
-static WERROR reg_dir_get_info(TALLOC_CTX *ctx, const struct hive_key *key,
-			       const char **classname,
-			       uint32_t *num_subkeys,
-			       uint32_t *num_values,
-			       NTTIME *lastmod,
-			       uint32_t *max_subkeynamelen,
-			       uint32_t *max_valnamelen,
-			       uint32_t *max_valbufsize)
-{
-	DIR *d;
-	const struct dir_key *dk = talloc_get_type(key, struct dir_key);
-	struct dirent *e;
-	struct stat st;
-
-	SMB_ASSERT(key != NULL);
-
-	if (classname != NULL)
-		*classname = NULL;
-
-	d = opendir(dk->path);
-	if (d == NULL)
-		return WERR_INVALID_PARAM;
-
-	if (num_subkeys != NULL)
-		*num_subkeys = 0;
-
-	if (num_values != NULL)
-		*num_values = 0;
-
-	if (max_subkeynamelen != NULL)
-		*max_subkeynamelen = 0;
-
-	if (max_valnamelen != NULL)
-		*max_valnamelen = 0;
-
-	if (max_valbufsize != NULL)
-		*max_valbufsize = 0;
-
-	while((e = readdir(d))) {
-		if(!ISDOT(e->d_name) && !ISDOTDOT(e->d_name)) {
-			char *path = talloc_asprintf(ctx, "%s/%s",
-						     dk->path, e->d_name);
-			W_ERROR_HAVE_NO_MEMORY(path);
-
-			if (stat(path, &st) < 0) {
-				DEBUG(0, ("Error statting %s: %s\n", path,
-					strerror(errno)));
-				talloc_free(path);
-				continue;
-			}
-
-			if (S_ISDIR(st.st_mode)) {
-				if (num_subkeys != NULL)
-					(*num_subkeys)++;
-				if (max_subkeynamelen != NULL)
-					*max_subkeynamelen = MAX(*max_subkeynamelen, strlen(e->d_name));
-			}
-
-			if (!S_ISDIR(st.st_mode)) {
-				if (num_values != NULL)
-					(*num_values)++;
-				if (max_valnamelen != NULL)
-					*max_valnamelen = MAX(*max_valnamelen, strlen(e->d_name));
-				if (max_valbufsize != NULL)
-					*max_valbufsize = MAX(*max_valbufsize, st.st_size);
-			}
-
-			talloc_free(path);
-		}
-	}
-
-	closedir(d);
-
-	if (lastmod != NULL)
-		*lastmod = 0;
-	return WERR_OK;
-}
-
-static WERROR reg_dir_set_value(struct hive_key *key, const char *name,
-				uint32_t type, const DATA_BLOB data)
-{
-	const struct dir_key *dk = talloc_get_type(key, struct dir_key);
-	char *path;
-	bool ret;
-
-	path = talloc_asprintf(dk, "%s/%s", dk->path, name);
-	W_ERROR_HAVE_NO_MEMORY(path);
-
-	ret = file_save(path, data.data, data.length);
-
-	talloc_free(path);
-
-	if (!ret) {
-		return WERR_GENERAL_FAILURE;
-	}
-
-	/* FIXME: Type */
-
-	return WERR_OK;
-}
-
-static WERROR reg_dir_get_value(TALLOC_CTX *mem_ctx,
-				struct hive_key *key, const char *name,
-				uint32_t *type, DATA_BLOB *data)
-{
-	const struct dir_key *dk = talloc_get_type(key, struct dir_key);
-	char *path;
-	size_t size;
-	char *contents;
-
-	path = talloc_asprintf(mem_ctx, "%s/%s", dk->path, name);
-	W_ERROR_HAVE_NO_MEMORY(path);
-
-	contents = file_load(path, &size, 0, mem_ctx);
-
-	talloc_free(path);
-
-	if (contents == NULL)
-		return WERR_BADFILE;
-
-	if (type != NULL)
-		*type = 4; /* FIXME */
-
-	data->data = (uint8_t *)contents;
-	data->length = size;
-
-	return WERR_OK;
-}
-
-static WERROR reg_dir_enum_value(TALLOC_CTX *mem_ctx,
-				 struct hive_key *key, uint32_t idx,
-				 const char **name,
-				 uint32_t *type, DATA_BLOB *data)
-{
-	const struct dir_key *dk = talloc_get_type(key, struct dir_key);
-	DIR *d;
-	struct dirent *e;
-	unsigned int i;
-
-	d = opendir(dk->path);
-	if (d == NULL) {
-		DEBUG(3,("Unable to open '%s': %s\n", dk->path,
-			strerror(errno)));
-		return WERR_BADFILE;
-	}
-
-	i = 0;
-	while((e = readdir(d))) {
-		if (ISDOT(e->d_name) || ISDOTDOT(e->d_name))
-			continue;
-
-		if (i == idx) {
-			if (name != NULL) {
-				*name = talloc_strdup(mem_ctx, e->d_name);
-				W_ERROR_HAVE_NO_MEMORY(*name);
-			}
-			W_ERROR_NOT_OK_RETURN(reg_dir_get_value(mem_ctx, key,
-								*name, type,
-								data));
-			return WERR_OK;
-		}
-
-		i++;
-	}
-	closedir(d);
-
-	return WERR_NO_MORE_ITEMS;
-}
-
-
-static WERROR reg_dir_del_value(TALLOC_CTX *mem_ctx,
-				struct hive_key *key, const char *name)
-{
-	const struct dir_key *dk = talloc_get_type(key, struct dir_key);
-	char *path;
-	int ret;
-
-	path = talloc_asprintf(mem_ctx, "%s/%s", dk->path, name);
-	W_ERROR_HAVE_NO_MEMORY(path);
-
-	ret = unlink(path);
-
-	talloc_free(path);
-
-	if (ret < 0) {
-		if (errno == ENOENT)
-			return WERR_BADFILE;
-		return WERR_GENERAL_FAILURE;
-	}
-
-	return WERR_OK;
-}
-
-static struct hive_operations reg_backend_dir = {
-	.name = "dir",
-	.get_key_by_name = reg_dir_open_key,
-	.get_key_info = reg_dir_get_info,
-	.add_key = reg_dir_add_key,
-	.del_key = reg_dir_del_key,
-	.enum_key = reg_dir_key_by_index,
-	.set_value = reg_dir_set_value,
-	.get_value_by_name = reg_dir_get_value,
-	.enum_value = reg_dir_enum_value,
-	.delete_value = reg_dir_del_value,
-};
diff --git a/source4/lib/registry/hive.c b/source4/lib/registry/hive.c
index 5763dff..dc38fc8 100644
--- a/source4/lib/registry/hive.c
+++ b/source4/lib/registry/hive.c
@@ -35,11 +35,6 @@ _PUBLIC_ WERROR reg_open_hive(TALLOC_CTX *parent_ctx, const char *location,
 	int fd, num;
 	char peek[20];
 
-	/* Check for directory */
-	if (directory_exist(location)) {
-		return reg_open_directory(parent_ctx, location, root);
-	}
-
 	fd = open(location, O_RDWR);
 	if (fd == -1) {
 		if (errno == ENOENT)
diff --git a/source4/lib/registry/pyregistry.c b/source4/lib/registry/pyregistry.c
index ff62279..2e8b95f 100644
--- a/source4/lib/registry/pyregistry.c
+++ b/source4/lib/registry/pyregistry.c
@@ -360,36 +360,6 @@ static PyObject *py_open_samba(PyObject *self, PyObject *args, PyObject *kwargs)
 	return pytalloc_steal(&PyRegistry, reg_ctx);
 }
 
-static PyObject *py_open_directory(PyObject *self, PyObject *args)
-{
-	char *location;
-	WERROR result;
-	struct hive_key *key;
-
-	if (!PyArg_ParseTuple(args, "s", &location))
-		return NULL;
-
-	result = reg_open_directory(NULL, location, &key);
-	PyErr_WERROR_IS_ERR_RAISE(result);
-
-	return pytalloc_steal(&PyHiveKey, key);
-}
-
-static PyObject *py_create_directory(PyObject *self, PyObject *args)
-{
-	char *location;
-	WERROR result;
-	struct hive_key *key;
-
-	if (!PyArg_ParseTuple(args, "s", &location))
-		return NULL;
-


-- 
Samba Shared Repository


More information about the samba-cvs mailing list