From: Jim Meyering <[email protected]>

* include/corosync/confdb.h (confdb_callbacks_t):
* lib/confdb.c (confdb_reload):
* lib/sa-confdb.c (confdb_sa_reload):
* lib/sa-confdb.h:
* test/testconfdb.c (main):
---
 include/corosync/confdb.h |    3 ++-
 lib/confdb.c              |   14 ++++++++++----
 lib/sa-confdb.c           |   10 +++++++---
 lib/sa-confdb.h           |    2 +-
 test/testconfdb.c         |    4 ++--
 5 files changed, 22 insertions(+), 11 deletions(-)

diff --git a/include/corosync/confdb.h b/include/corosync/confdb.h
index ca52ae8..c8563ad 100644
--- a/include/corosync/confdb.h
+++ b/include/corosync/confdb.h
@@ -118,7 +118,8 @@ cs_error_t confdb_write (
 cs_error_t confdb_reload (
        confdb_handle_t handle,
        int flush,
-       char *error_text);
+       char *error_text,
+       size_t errbuf_len);

 /*
  * Get a file descriptor on which to poll.  confdb_handle_t is NOT a
diff --git a/lib/confdb.c b/lib/confdb.c
index 77e32ce..2184280 100644
--- a/lib/confdb.c
+++ b/lib/confdb.c
@@ -1460,7 +1460,8 @@ error_exit:
 cs_error_t confdb_reload (
        confdb_handle_t handle,
        int flush,
-       char *error_text)
+       char *error_text,
+       size_t errbuf_len)
 {
        cs_error_t error;
        struct confdb_inst *confdb_inst;
@@ -1470,13 +1471,14 @@ cs_error_t confdb_reload (

        error = saHandleInstanceGet (&confdb_handle_t_db, handle, (void 
*)&confdb_inst);
        if (error != CS_OK) {
+               /* FIXME: set error_text */
                return (error);
        }

        if (confdb_inst->standalone) {
                error = CS_OK;

-               if (confdb_sa_reload(flush, error_text))
+               if (confdb_sa_reload(flush, error_text, errbuf_len))
                        error = CS_ERR_ACCESS;
                goto error_exit;
        }
@@ -1500,12 +1502,16 @@ cs_error_t confdb_reload (
        pthread_mutex_unlock (&confdb_inst->response_mutex);

        if (error != CS_OK) {
+               /* FIXME: set error_text */
                goto error_exit;
        }

        error = res_lib_confdb_reload.header.error;
-       if(res_lib_confdb_reload.error.length)
-               memcpy(error_text, res_lib_confdb_reload.error.value, 
res_lib_confdb_reload.error.length);
+       if(res_lib_confdb_reload.error.length) {
+               memcpy(error_text, res_lib_confdb_reload.error.value,
+                      MIN(res_lib_confdb_reload.error.length,errbuf_len));
+               error_text[errbuf_len-1] = '\0';
+       }

 error_exit:
        (void)saHandleInstancePut (&confdb_handle_t_db, handle);
diff --git a/lib/sa-confdb.c b/lib/sa-confdb.c
index 6a65dad..8ace104 100644
--- a/lib/sa-confdb.c
+++ b/lib/sa-confdb.c
@@ -319,14 +319,18 @@ int confdb_sa_write (char *error_text, size_t errbuf_len)

 int confdb_sa_reload (
        int flush,
-       char *error_text)
+       char *error_text,
+       size_t errbuf_len)
 {
        char *errtext;
        int ret;

        ret = objdb->object_reload_config(flush, (const char **) &errtext);
-       if (!ret)
-               strcpy(error_text, errtext);
+       if (!ret) {
+               strncpy(error_text, errtext, errbuf_len);
+               if (errbuf_len > 0)
+                       error_text[errbuf_len-1] = '\0';
+       }

        return ret;
 }
diff --git a/lib/sa-confdb.h b/lib/sa-confdb.h
index bd11177..402740a 100644
--- a/lib/sa-confdb.h
+++ b/lib/sa-confdb.h
@@ -47,4 +47,4 @@ extern int confdb_sa_key_increment(hdb_handle_t 
parent_object_handle, const void
 extern int confdb_sa_key_decrement(hdb_handle_t parent_object_handle, const 
void *key_name, int key_name_len, unsigned int *value);
 extern int confdb_sa_find_destroy(hdb_handle_t find_handle);
 extern int confdb_sa_write(char *error_text, size_t errbuf_len);
-extern int confdb_sa_reload(int flush, char *error_text);
+extern int confdb_sa_reload(int flush, char *error_text, size_t errbuf_len);
diff --git a/test/testconfdb.c b/test/testconfdb.c
index 436dd69..a9949e1 100644
--- a/test/testconfdb.c
+++ b/test/testconfdb.c
@@ -211,10 +211,10 @@ int main (int argc, char *argv[]) {

        if (argv[1] && strcmp(argv[1], "reload")==0) {
                /* Test reload interface */
-               result = confdb_reload(handle, 0, key_value);
+               result = confdb_reload(handle, 0, key_value, sizeof key_value);
                printf ("Try to reload the config (noflush): %d (should be 
1)\n", result);

-               result = confdb_reload(handle, 1, key_value);
+               result = confdb_reload(handle, 1, key_value, sizeof key_value);
                printf ("Try to reload the config (flush): %d (should be 1)\n", 
result);
        }

-- 
1.6.2.rc1.285.gc5f54

_______________________________________________
Openais mailing list
[email protected]
https://lists.linux-foundation.org/mailman/listinfo/openais

Reply via email to