diff options
author | Gaurav Kumar Garg <garg.gaurav52@gmail.com> | 2015-10-13 14:40:55 +0530 |
---|---|---|
committer | Niels de Vos <ndevos@redhat.com> | 2015-10-14 13:42:30 -0700 |
commit | 816ca94f5dd49f34f395caf501de3c71f0ba113d (patch) | |
tree | 41033d508cb1433ccbb4ff4049b45a61d9a384b6 | |
parent | 00eeb153f4ea473c6636147f6c72c04336128198 (diff) |
libglusterfs: pass buffer size to gf_store_read_and_tokenize function
Previously if user set an option where length of key=value goes beyond
PATH_MAX (4096) character then tokenzing the option at the time of
reading configuration file will fail.
This is because of the we was having restraction in fgets to read maximum
of PATH_MAX (4096) length of character.
Consequence of this is when user try to restart glusterd, after setting
key=value length beyond PATH_MAX (4096) character, glusterd will not restart.
With this fix instead of PATH_MAX, consumer of gf_store_read_and_tokenize
function will decide the size of the buffer length.
Change-Id: I655a8ce982effdfff8f3e785ea31f543dbe39301
BUG: 1271150
Signed-off-by: Gaurav Kumar Garg <ggarg@redhat.com>
Reviewed-on: http://review.gluster.org/12346
Tested-by: NetBSD Build System <jenkins@build.gluster.org>
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Anand Nekkunti <anekkunt@redhat.com>
Reviewed-by: Niels de Vos <ndevos@redhat.com>
-rw-r--r-- | libglusterfs/src/store.c | 6 | ||||
-rw-r--r-- | libglusterfs/src/store.h | 2 | ||||
-rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-store.c | 2 |
3 files changed, 6 insertions, 4 deletions
diff --git a/libglusterfs/src/store.c b/libglusterfs/src/store.c index daa57101a46..b44ee0a12d6 100644 --- a/libglusterfs/src/store.c +++ b/libglusterfs/src/store.c @@ -176,7 +176,7 @@ out: } int -gf_store_read_and_tokenize (FILE *file, char *str, char **iter_key, +gf_store_read_and_tokenize (FILE *file, char *str, int size, char **iter_key, char **iter_val, gf_store_op_errno_t *store_errno) { int32_t ret = -1; @@ -192,7 +192,7 @@ gf_store_read_and_tokenize (FILE *file, char *str, char **iter_key, GF_ASSERT (iter_val); GF_ASSERT (store_errno); - temp = fgets (str, PATH_MAX, file); + temp = fgets (str, size, file); if (temp == NULL || feof (file)) { ret = -1; *store_errno = GD_STORE_EOF; @@ -287,6 +287,7 @@ gf_store_retrieve_value (gf_store_handle_t *handle, char *key, char **value) do { ret = gf_store_read_and_tokenize (handle->read, scan_str, + st.st_size + 1, &iter_key, &iter_val, &store_errno); if (ret < 0) { @@ -569,6 +570,7 @@ gf_store_iter_get_next (gf_store_iter_t *iter, char **key, char **value, } ret = gf_store_read_and_tokenize (iter->file, scan_str, + st.st_size + 1, &iter_key, &iter_val, &store_errno); if (ret < 0) { diff --git a/libglusterfs/src/store.h b/libglusterfs/src/store.h index 4a726c6f00b..7ac307bf5ae 100644 --- a/libglusterfs/src/store.h +++ b/libglusterfs/src/store.h @@ -59,7 +59,7 @@ int32_t gf_store_unlink_tmppath (gf_store_handle_t *shandle); int -gf_store_read_and_tokenize (FILE *file, char *str, char **iter_key, +gf_store_read_and_tokenize (FILE *file, char *str, int size, char **iter_key, char **iter_val, gf_store_op_errno_t *store_errno); int32_t diff --git a/xlators/mgmt/glusterd/src/glusterd-store.c b/xlators/mgmt/glusterd/src/glusterd-store.c index 37d7d142118..73b1c696271 100644 --- a/xlators/mgmt/glusterd/src/glusterd-store.c +++ b/xlators/mgmt/glusterd/src/glusterd-store.c @@ -3464,7 +3464,7 @@ glusterd_store_retrieve_missed_snaps_list (xlator_t *this) } do { - ret = gf_store_read_and_tokenize (fp, buf, + ret = gf_store_read_and_tokenize (fp, buf, sizeof (buf), &missed_node_info, &value, &store_errno); if (ret) { |