[SCM] Samba Shared Repository - branch master updated

Stefan Metzmacher metze at samba.org
Thu Feb 24 04:30:01 MST 2011


The branch, master has been updated
       via  e253281 s4:dynconfig: fix segfault in the set_dyn_*() functions
       via  9bf1032 s4:dynconfig: add prototypes for *dyn_LOCALEDIR
      from  1f13d51 s3:rpc_client: we need to pass a non-blocking socket to tstream_bsd_existing_socket()

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


- Log -----------------------------------------------------------------
commit e2532816400f005574c7452e5c4e30a3a8067771
Author: Stefan Metzmacher <metze at samba.org>
Date:   Thu Feb 24 11:15:06 2011 +0100

    s4:dynconfig: fix segfault in the set_dyn_*() functions
    
    We should not try to call free on a const string (the default one).
    Now we make sure that the dyn_* variable is never NULL
    and only allocated if it's not the default value.
    
    metze
    
    Autobuild-User: Stefan Metzmacher <metze at samba.org>
    Autobuild-Date: Thu Feb 24 12:29:56 CET 2011 on sn-devel-104

commit 9bf1032cb773a3eda90d0c6d379c5938690209e8
Author: Stefan Metzmacher <metze at samba.org>
Date:   Thu Feb 24 11:13:53 2011 +0100

    s4:dynconfig: add prototypes for *dyn_LOCALEDIR
    
    metze

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

Summary of changes:
 source4/dynconfig/dynconfig.c |   37 +++++++++++++++++++++++++------------
 source4/dynconfig/dynconfig.h |    1 +
 2 files changed, 26 insertions(+), 12 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source4/dynconfig/dynconfig.c b/source4/dynconfig/dynconfig.c
index 45b7b73..65e57e0 100644
--- a/source4/dynconfig/dynconfig.c
+++ b/source4/dynconfig/dynconfig.c
@@ -45,25 +45,38 @@
 #define DEFINE_DYN_CONFIG_PARAM(name) \
 const char *dyn_##name = name; \
 \
- const char *get_dyn_##name(void) \
+bool is_default_dyn_##name(void) \
 {\
-	if (dyn_##name == NULL) {\
-		return name;\
-	}\
-	return dyn_##name;\
+	if (strcmp(name, dyn_##name) == 0) { \
+		return true; \
+	} \
+	return false; \
 }\
 \
- const char *set_dyn_##name(const char *newpath) \
+const char *get_dyn_##name(void) \
 {\
-	if (dyn_##name) {\
-		free(discard_const(dyn_##name));	\
-	}\
-	dyn_##name = strdup(newpath);\
 	return dyn_##name;\
 }\
- bool is_default_dyn_##name(void) \
+\
+const char *set_dyn_##name(const char *newpath) \
 {\
-	return (dyn_##name == NULL);\
+	if (newpath == NULL) { \
+		return NULL; \
+	} \
+	if (strcmp(name, newpath) == 0) { \
+		return dyn_##name; \
+	} \
+	newpath = strdup(newpath);\
+	if (newpath == NULL) { \
+		return NULL; \
+	} \
+	if (is_default_dyn_##name()) { \
+		/* do not free a static string */ \
+	} else if (dyn_##name) {\
+		free(discard_const(dyn_##name)); \
+	}\
+	dyn_##name = newpath; \
+	return dyn_##name;\
 }
 
 /* these are in common with s3 */
diff --git a/source4/dynconfig/dynconfig.h b/source4/dynconfig/dynconfig.h
index 64d3991..ee710f3 100644
--- a/source4/dynconfig/dynconfig.h
+++ b/source4/dynconfig/dynconfig.h
@@ -48,6 +48,7 @@ DEFINE_DYN_CONFIG_PROTO(PIDDIR)
 DEFINE_DYN_CONFIG_PROTO(NCALRPCDIR)
 DEFINE_DYN_CONFIG_PROTO(SMB_PASSWD_FILE)
 DEFINE_DYN_CONFIG_PROTO(PRIVATE_DIR)
+DEFINE_DYN_CONFIG_PROTO(LOCALEDIR)
 DEFINE_DYN_CONFIG_PROTO(NMBDSOCKETDIR)
 
 /* these are not in s3 */


-- 
Samba Shared Repository


More information about the samba-cvs mailing list