summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGaurav Kumar Garg <garg.gaurav52@gmail.com>2015-10-13 14:40:55 +0530
committerNiels de Vos <ndevos@redhat.com>2015-10-14 13:42:30 -0700
commit816ca94f5dd49f34f395caf501de3c71f0ba113d (patch)
tree41033d508cb1433ccbb4ff4049b45a61d9a384b6
parent00eeb153f4ea473c6636147f6c72c04336128198 (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.c6
-rw-r--r--libglusterfs/src/store.h2
-rw-r--r--xlators/mgmt/glusterd/src/glusterd-store.c2
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) {