diff options
author | Allen Byrne <byrn@hdfgroup.org> | 2020-10-01 15:29:53 (GMT) |
---|---|---|
committer | Allen Byrne <byrn@hdfgroup.org> | 2020-10-01 15:29:53 (GMT) |
commit | ec8ad09125032c9c232878d02e90aa86df162841 (patch) | |
tree | 5d63105d3a0db7d5bbee41c5b74b097649a2115e /src/H5FDs3comms.c | |
parent | 453238e90e1574ef1c15e3c79f7fb3d77920e77c (diff) | |
download | hdf5-ec8ad09125032c9c232878d02e90aa86df162841.zip hdf5-ec8ad09125032c9c232878d02e90aa86df162841.tar.gz hdf5-ec8ad09125032c9c232878d02e90aa86df162841.tar.bz2 |
Source formatted
Diffstat (limited to 'src/H5FDs3comms.c')
-rw-r--r-- | src/H5FDs3comms.c | 1197 |
1 files changed, 546 insertions, 651 deletions
diff --git a/src/H5FDs3comms.c b/src/H5FDs3comms.c index 4c762d1..0745acf 100644 --- a/src/H5FDs3comms.c +++ b/src/H5FDs3comms.c @@ -67,7 +67,6 @@ */ #define S3COMMS_MAX_RANGE_STRING_SIZE 128 - /******************/ /* Local Typedefs */ /******************/ @@ -81,9 +80,9 @@ * pointer to data region and record of bytes written (offset) */ struct s3r_datastruct { - unsigned long magic; - char *data; - size_t size; + unsigned long magic; + char * data; + size_t size; }; #define S3COMMS_CALLBACK_DATASTRUCT_MAGIC 0x28c2b2ul @@ -91,10 +90,7 @@ struct s3r_datastruct { /* Local Prototypes */ /********************/ -size_t curlwritecallback(char *ptr, - size_t size, - size_t nmemb, - void *userdata); +size_t curlwritecallback(char *ptr, size_t size, size_t nmemb, void *userdata); herr_t H5FD_s3comms_s3r_getsize(s3r_t *handle); @@ -114,7 +110,6 @@ herr_t H5FD_s3comms_s3r_getsize(s3r_t *handle); /* Functions */ /*************/ - /*---------------------------------------------------------------------------- * * Function: curlwritecallback() @@ -139,16 +134,13 @@ herr_t H5FD_s3comms_s3r_getsize(s3r_t *handle); *---------------------------------------------------------------------------- */ size_t -curlwritecallback(char *ptr, - size_t size, - size_t nmemb, - void *userdata) +curlwritecallback(char *ptr, size_t size, size_t nmemb, void *userdata) { struct s3r_datastruct *sds = (struct s3r_datastruct *)userdata; size_t product = (size * nmemb); size_t written = 0; - if(sds->magic != S3COMMS_CALLBACK_DATASTRUCT_MAGIC) + if (sds->magic != S3COMMS_CALLBACK_DATASTRUCT_MAGIC) return written; if (size > 0) { @@ -160,7 +152,6 @@ curlwritecallback(char *ptr, return written; } /* end curlwritecallback() */ - /*---------------------------------------------------------------------------- * * Function: H5FD_s3comms_hrb_node_set() @@ -215,17 +206,14 @@ curlwritecallback(char *ptr, *---------------------------------------------------------------------------- */ herr_t -H5FD_s3comms_hrb_node_set( - hrb_node_t **L, - const char *name, - const char *value) +H5FD_s3comms_hrb_node_set(hrb_node_t **L, const char *name, const char *value) { size_t i = 0; - char *valuecpy = NULL; - char *namecpy = NULL; + char * valuecpy = NULL; + char * namecpy = NULL; size_t namelen = 0; - char *lowername = NULL; - char *nvcat = NULL; + char * lowername = NULL; + char * nvcat = NULL; hrb_node_t *node_ptr = NULL; hrb_node_t *new_node = NULL; hbool_t is_looking = TRUE; @@ -238,14 +226,14 @@ H5FD_s3comms_hrb_node_set( HDprintf("NAME: %s\n", name); HDprintf("VALUE: %s\n", value); HDprintf("LIST:\n->"); - for(node_ptr = (*L); node_ptr != NULL; node_ptr = node_ptr->next) + for (node_ptr = (*L); node_ptr != NULL; node_ptr = node_ptr->next) HDfprintf(stdout, "{%s}\n->", node_ptr->cat); HDprintf("(null)\n"); HDfflush(stdout); node_ptr = NULL; #endif - if(name == NULL) + if (name == NULL) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "unable to operate on null name"); namelen = HDstrlen(name); @@ -256,9 +244,9 @@ H5FD_s3comms_hrb_node_set( /* copy and lowercase name */ lowername = (char *)H5MM_malloc(sizeof(char) * (namelen + 1)); - if(lowername == NULL) + if (lowername == NULL) HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "cannot make space for lowercase name copy."); - for(i = 0; i < namelen; i++) + for (i = 0; i < namelen; i++) lowername[i] = (char)HDtolower((int)name[i]); lowername[namelen] = 0; @@ -266,35 +254,34 @@ H5FD_s3comms_hrb_node_set( * If NULL, we will be removing a node or doing nothing, so no need for * copies */ - if(value != NULL) { + if (value != NULL) { int ret = 0; size_t valuelen = HDstrlen(value); size_t catlen = namelen + valuelen + 2; /* +2 from ": " */ - size_t catwrite = catlen + 3; /* 3 not 1 to quiet compiler warning */ - + size_t catwrite = catlen + 3; /* 3 not 1 to quiet compiler warning */ namecpy = (char *)H5MM_malloc(sizeof(char) * (namelen + 1)); - if(namecpy == NULL) + if (namecpy == NULL) HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "cannot make space for name copy."); HDmemcpy(namecpy, name, (namelen + 1)); valuecpy = (char *)H5MM_malloc(sizeof(char) * (valuelen + 1)); - if(valuecpy == NULL) + if (valuecpy == NULL) HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "cannot make space for value copy."); HDmemcpy(valuecpy, value, (valuelen + 1)); nvcat = (char *)H5MM_malloc(sizeof(char) * catwrite); - if(nvcat == NULL) + if (nvcat == NULL) HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "cannot make space for concatenated string."); ret = HDsnprintf(nvcat, catwrite, "%s: %s", name, value); - if(ret < 0 || (size_t)ret > catlen) + if (ret < 0 || (size_t)ret > catlen) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "cannot concatenate `%s: %s", name, value); - HDassert( catlen == HDstrlen(nvcat) ); + HDassert(catlen == HDstrlen(nvcat)); /* create new_node, should we need it */ new_node = (hrb_node_t *)H5MM_malloc(sizeof(hrb_node_t)); - if(new_node == NULL) + if (new_node == NULL) HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "cannot make space for new set."); new_node->magic = S3COMMS_HRB_NODE_MAGIC; @@ -309,12 +296,13 @@ H5FD_s3comms_hrb_node_set( * ACT ON LIST * ***************/ - if(*L == NULL) { - if(value == NULL) + if (*L == NULL) { + if (value == NULL) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "trying to remove node from empty list") else { #if S3COMMS_DEBUG -HDprintf("CREATE NEW\n"); HDfflush(stdout); + HDprintf("CREATE NEW\n"); + HDfflush(stdout); #endif /******************* * CREATE NEW LIST * @@ -332,19 +320,20 @@ HDprintf("CREATE NEW\n"); HDfflush(stdout); /* sanity-check pointer passed in */ - HDassert( (*L) != NULL ); - HDassert( (*L)->magic == S3COMMS_HRB_NODE_MAGIC ); + HDassert((*L) != NULL); + HDassert((*L)->magic == S3COMMS_HRB_NODE_MAGIC); node_ptr = (*L); /* Check whether to modify/remove first node in list */ - if(HDstrcmp(lowername, node_ptr->lowername) == 0) { + if (HDstrcmp(lowername, node_ptr->lowername) == 0) { is_looking = FALSE; if (value == NULL) { #if S3COMMS_DEBUG -HDprintf("REMOVE HEAD\n"); HDfflush(stdout); + HDprintf("REMOVE HEAD\n"); + HDfflush(stdout); #endif /*************** * REMOVE HEAD * @@ -353,41 +342,48 @@ HDprintf("REMOVE HEAD\n"); HDfflush(stdout); *L = node_ptr->next; #if S3COMMS_DEBUG -HDprintf("FREEING CAT (node)\n"); HDfflush(stdout); + HDprintf("FREEING CAT (node)\n"); + HDfflush(stdout); #endif H5MM_xfree(node_ptr->cat); #if S3COMMS_DEBUG -HDprintf("FREEING LOWERNAME (node)\n"); HDfflush(stdout); + HDprintf("FREEING LOWERNAME (node)\n"); + HDfflush(stdout); #endif H5MM_xfree(node_ptr->lowername); #if S3COMMS_DEBUG -HDprintf("FREEING NAME (node)\n"); HDfflush(stdout); + HDprintf("FREEING NAME (node)\n"); + HDfflush(stdout); #endif H5MM_xfree(node_ptr->name); #if S3COMMS_DEBUG -HDprintf("FREEING VALUE (node)\n"); HDfflush(stdout); + HDprintf("FREEING VALUE (node)\n"); + HDfflush(stdout); #endif H5MM_xfree(node_ptr->value); #if S3COMMS_DEBUG -HDprintf("MAGIC OK? %s\n", - (node_ptr->magic == S3COMMS_HRB_NODE_MAGIC) ? "YES" : "NO"); -HDfflush(stdout); + HDprintf("MAGIC OK? %s\n", (node_ptr->magic == S3COMMS_HRB_NODE_MAGIC) ? "YES" : "NO"); + HDfflush(stdout); #endif - HDassert( node_ptr->magic == S3COMMS_HRB_NODE_MAGIC ); + HDassert(node_ptr->magic == S3COMMS_HRB_NODE_MAGIC); node_ptr->magic += 1ul; #if S3COMMS_DEBUG -HDprintf("FREEING POINTER\n"); HDfflush(stdout); + HDprintf("FREEING POINTER\n"); + HDfflush(stdout); #endif H5MM_xfree(node_ptr); #if S3COMMS_DEBUG -HDprintf("FREEING WORKING LOWERNAME\n"); HDfflush(stdout); + HDprintf("FREEING WORKING LOWERNAME\n"); + HDfflush(stdout); #endif - H5MM_xfree(lowername); lowername = NULL; + H5MM_xfree(lowername); + lowername = NULL; } else { #if S3COMMS_DEBUG -HDprintf("MODIFY HEAD\n"); HDfflush(stdout); + HDprintf("MODIFY HEAD\n"); + HDfflush(stdout); #endif /*************** * MODIFY HEAD * @@ -397,27 +393,27 @@ HDprintf("MODIFY HEAD\n"); HDfflush(stdout); H5MM_xfree(node_ptr->name); H5MM_xfree(node_ptr->value); - node_ptr->name = namecpy; + node_ptr->name = namecpy; node_ptr->value = valuecpy; - node_ptr->cat = nvcat; + node_ptr->cat = nvcat; H5MM_xfree(lowername); lowername = NULL; new_node->magic += 1ul; H5MM_xfree(new_node); - new_node = NULL; + new_node = NULL; } } - else - if (HDstrcmp(lowername, node_ptr->lowername) < 0) { + else if (HDstrcmp(lowername, node_ptr->lowername) < 0) { is_looking = FALSE; - if(value == NULL) + if (value == NULL) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "trying to remove a node 'before' head") else { #if S3COMMS_DEBUG -HDprintf("PREPEND NEW HEAD\n"); HDfflush(stdout); + HDprintf("PREPEND NEW HEAD\n"); + HDfflush(stdout); #endif /******************* * INSERT NEW HEAD * @@ -428,7 +424,7 @@ HDprintf("PREPEND NEW HEAD\n"); HDfflush(stdout); new_node->lowername = lowername; new_node->cat = nvcat; new_node->next = node_ptr; - *L = new_node; + *L = new_node; } } @@ -436,22 +432,23 @@ HDprintf("PREPEND NEW HEAD\n"); HDfflush(stdout); * SEARCH LIST * ***************/ - while(is_looking) { - if(node_ptr->next == NULL) { + while (is_looking) { + if (node_ptr->next == NULL) { is_looking = FALSE; - if(value == NULL) + if (value == NULL) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "trying to remove absent node") else { #if S3COMMS_DEBUG -HDprintf("APPEND A NODE\n"); HDfflush(stdout); + HDprintf("APPEND A NODE\n"); + HDfflush(stdout); #endif /******************* * APPEND NEW NODE * *******************/ - HDassert( HDstrcmp(lowername, node_ptr->lowername) > 0 ); + HDassert(HDstrcmp(lowername, node_ptr->lowername) > 0); new_node->name = namecpy; new_node->value = valuecpy; new_node->lowername = lowername; @@ -459,22 +456,22 @@ HDprintf("APPEND A NODE\n"); HDfflush(stdout); node_ptr->next = new_node; } } - else - if(HDstrcmp(lowername, node_ptr->next->lowername) < 0) { + else if (HDstrcmp(lowername, node_ptr->next->lowername) < 0) { is_looking = FALSE; - if(value == NULL) + if (value == NULL) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "trying to remove absent node") else { #if S3COMMS_DEBUG -HDprintf("INSERT A NODE\n"); HDfflush(stdout); + HDprintf("INSERT A NODE\n"); + HDfflush(stdout); #endif /******************* * INSERT NEW NODE * *******************/ - HDassert( HDstrcmp(lowername, node_ptr->lowername) > 0 ); + HDassert(HDstrcmp(lowername, node_ptr->lowername) > 0); new_node->name = namecpy; new_node->value = valuecpy; new_node->lowername = lowername; @@ -483,28 +480,28 @@ HDprintf("INSERT A NODE\n"); HDfflush(stdout); node_ptr->next = new_node; } } - else - if(HDstrcmp(lowername, node_ptr->next->lowername) == 0) { + else if (HDstrcmp(lowername, node_ptr->next->lowername) == 0) { is_looking = FALSE; - if(value == NULL) { + if (value == NULL) { /***************** * REMOVE A NODE * *****************/ hrb_node_t *tmp = node_ptr->next; - node_ptr->next = tmp->next; + node_ptr->next = tmp->next; #if S3COMMS_DEBUG -HDprintf("REMOVE A NODE\n"); HDfflush(stdout); + HDprintf("REMOVE A NODE\n"); + HDfflush(stdout); #endif H5MM_xfree(tmp->cat); H5MM_xfree(tmp->lowername); H5MM_xfree(tmp->name); H5MM_xfree(tmp->value); - HDassert( tmp->magic == S3COMMS_HRB_NODE_MAGIC ); + HDassert(tmp->magic == S3COMMS_HRB_NODE_MAGIC); tmp->magic += 1ul; H5MM_xfree(tmp); @@ -513,7 +510,8 @@ HDprintf("REMOVE A NODE\n"); HDfflush(stdout); } else { #if S3COMMS_DEBUG -HDprintf("MODIFY A NODE\n"); HDfflush(stdout); + HDprintf("MODIFY A NODE\n"); + HDfflush(stdout); #endif /***************** * MODIFY A NODE * @@ -524,7 +522,7 @@ HDprintf("MODIFY A NODE\n"); HDfflush(stdout); H5MM_xfree(node_ptr->value); H5MM_xfree(node_ptr->cat); - HDassert( new_node->magic == S3COMMS_HRB_NODE_MAGIC ); + HDassert(new_node->magic == S3COMMS_HRB_NODE_MAGIC); new_node->magic += 1ul; H5MM_xfree(new_node); H5MM_xfree(lowername); @@ -541,23 +539,23 @@ HDprintf("MODIFY A NODE\n"); HDfflush(stdout); * KEEP LOOKING * ****************/ - node_ptr = node_ptr->next; + node_ptr = node_ptr->next; } } /* end while is_looking */ done: - if(ret_value == FAIL) { + if (ret_value == FAIL) { /* clean up */ - if(nvcat != NULL) + if (nvcat != NULL) H5MM_xfree(nvcat); - if(namecpy != NULL) + if (namecpy != NULL) H5MM_xfree(namecpy); - if(lowername != NULL) + if (lowername != NULL) H5MM_xfree(lowername); - if(valuecpy != NULL) + if (valuecpy != NULL) H5MM_xfree(valuecpy); - if(new_node != NULL) { - HDassert( new_node->magic == S3COMMS_HRB_NODE_MAGIC ); + if (new_node != NULL) { + HDassert(new_node->magic == S3COMMS_HRB_NODE_MAGIC); new_node->magic += 1ul; H5MM_xfree(new_node); } @@ -566,7 +564,6 @@ done: FUNC_LEAVE_NOAPI(ret_value); } /* end H5FD_s3comms_hrb_node_set() */ - /*---------------------------------------------------------------------------- * * Function: H5FD_s3comms_hrb_destroy() @@ -606,8 +603,8 @@ done: herr_t H5FD_s3comms_hrb_destroy(hrb_t **_buf) { - hrb_t *buf = NULL; - herr_t ret_value = SUCCEED; + hrb_t *buf = NULL; + herr_t ret_value = SUCCEED; FUNC_ENTER_NOAPI_NOINIT @@ -615,9 +612,9 @@ H5FD_s3comms_hrb_destroy(hrb_t **_buf) HDfprintf(stdout, "called H5FD_s3comms_hrb_destroy.\n"); #endif - if(_buf != NULL && *_buf != NULL) { + if (_buf != NULL && *_buf != NULL) { buf = *_buf; - if(buf->magic != S3COMMS_HRB_MAGIC) + if (buf->magic != S3COMMS_HRB_MAGIC) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "pointer's magic does not match."); H5MM_xfree(buf->verb); @@ -632,7 +629,6 @@ done: FUNC_LEAVE_NOAPI(ret_value) } /* end H5FD_s3comms_hrb_destroy() */ - /*---------------------------------------------------------------------------- * * Function: H5FD_s3comms_hrb_init_request() @@ -663,18 +659,16 @@ done: *---------------------------------------------------------------------------- */ hrb_t * -H5FD_s3comms_hrb_init_request(const char *_verb, - const char *_resource, - const char *_http_version) +H5FD_s3comms_hrb_init_request(const char *_verb, const char *_resource, const char *_http_version) { - hrb_t *request = NULL; - char *res = NULL; - size_t reslen = 0; - hrb_t *ret_value = NULL; - char *verb = NULL; - size_t verblen = 0; - char *vrsn = NULL; - size_t vrsnlen = 0; + hrb_t *request = NULL; + char * res = NULL; + size_t reslen = 0; + hrb_t *ret_value = NULL; + char * verb = NULL; + size_t verblen = 0; + char * vrsn = NULL; + size_t vrsnlen = 0; FUNC_ENTER_NOAPI_NOINIT @@ -682,56 +676,54 @@ H5FD_s3comms_hrb_init_request(const char *_verb, HDfprintf(stdout, "called H5FD_s3comms_hrb_init_request.\n"); #endif - if(_resource == NULL) + if (_resource == NULL) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, NULL, "resource string cannot be null."); /* populate valid NULLs with defaults */ - if(_verb == NULL) + if (_verb == NULL) _verb = "GET"; - if(_http_version == NULL) + if (_http_version == NULL) _http_version = "HTTP/1.1"; /* malloc space for and prepare structure */ request = (hrb_t *)H5MM_malloc(sizeof(hrb_t)); - if(request == NULL) + if (request == NULL) HGOTO_ERROR(H5E_ARGS, H5E_CANTALLOC, NULL, "no space for request structure"); request->magic = S3COMMS_HRB_MAGIC; request->body = NULL; request->body_len = 0; request->first_header = NULL; - /* malloc and copy strings for the structure */ reslen = HDstrlen(_resource); if (_resource[0] == '/') { - res = (char *)H5MM_malloc(sizeof(char) * (reslen+1)); - if(res == NULL) + res = (char *)H5MM_malloc(sizeof(char) * (reslen + 1)); + if (res == NULL) HGOTO_ERROR(H5E_ARGS, H5E_CANTALLOC, NULL, "no space for resource string"); - HDmemcpy(res, _resource, (reslen+1)); + HDmemcpy(res, _resource, (reslen + 1)); } else { - res = (char *)H5MM_malloc(sizeof(char) * (reslen+2)); - if(res == NULL) + res = (char *)H5MM_malloc(sizeof(char) * (reslen + 2)); + if (res == NULL) HGOTO_ERROR(H5E_ARGS, H5E_CANTALLOC, NULL, "no space for resource string"); *res = '/'; - HDmemcpy((&res[1]), _resource, (reslen+1)); - HDassert( (reslen+1) == HDstrlen(res) ); + HDmemcpy((&res[1]), _resource, (reslen + 1)); + HDassert((reslen + 1) == HDstrlen(res)); } /* end if (else resource string not starting with '/') */ verblen = HDstrlen(_verb) + 1; - verb = (char *)H5MM_malloc(sizeof(char) * verblen); - if(verb == NULL) + verb = (char *)H5MM_malloc(sizeof(char) * verblen); + if (verb == NULL) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, NULL, "no space for verb string"); HDstrncpy(verb, _verb, verblen); vrsnlen = HDstrlen(_http_version) + 1; - vrsn = (char *)H5MM_malloc(sizeof(char) * vrsnlen); - if(vrsn == NULL) + vrsn = (char *)H5MM_malloc(sizeof(char) * vrsnlen); + if (vrsn == NULL) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, NULL, "no space for http-version string"); HDstrncpy(vrsn, _http_version, vrsnlen); - /* place new copies into structure */ request->resource = res; request->verb = verb; @@ -742,25 +734,23 @@ H5FD_s3comms_hrb_init_request(const char *_verb, done: /* if there is an error, clean up after ourselves */ if (ret_value == NULL) { - if(request != NULL) + if (request != NULL) H5MM_xfree(request); - if(vrsn != NULL) + if (vrsn != NULL) H5MM_xfree(vrsn); - if(verb != NULL) + if (verb != NULL) H5MM_xfree(verb); - if(res != NULL) + if (res != NULL) H5MM_xfree(res); } FUNC_LEAVE_NOAPI(ret_value) } /* end H5FD_s3comms_hrb_init_request() */ - /**************************************************************************** * S3R FUNCTIONS ****************************************************************************/ - /*---------------------------------------------------------------------------- * * Function: H5FD_s3comms_s3r_close() @@ -793,9 +783,9 @@ H5FD_s3comms_s3r_close(s3r_t *handle) HDfprintf(stdout, "called H5FD_s3comms_s3r_close.\n"); #endif - if(handle == NULL) + if (handle == NULL) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "handle cannot be null."); - if(handle->magic != S3COMMS_S3R_MAGIC) + if (handle->magic != S3COMMS_S3R_MAGIC) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "handle has invalid magic."); curl_easy_cleanup(handle->curlhandle); @@ -804,10 +794,10 @@ H5FD_s3comms_s3r_close(s3r_t *handle) H5MM_xfree(handle->region); H5MM_xfree(handle->signing_key); - HDassert( handle->httpverb != NULL ); + HDassert(handle->httpverb != NULL); H5MM_xfree(handle->httpverb); - if(FAIL == H5FD_s3comms_free_purl(handle->purl)) + if (FAIL == H5FD_s3comms_free_purl(handle->purl)) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "unable to release parsed url structure") H5MM_xfree(handle); @@ -816,7 +806,6 @@ done: FUNC_LEAVE_NOAPI(ret_value) } /* H5FD_s3comms_s3r_close */ - /*---------------------------------------------------------------------------- * * Function: H5FD_s3comms_s3r_get_filesize() @@ -844,13 +833,12 @@ H5FD_s3comms_s3r_get_filesize(s3r_t *handle) FUNC_ENTER_NOAPI_NOINIT_NOERR - if(handle != NULL) + if (handle != NULL) ret_value = handle->filesize; FUNC_LEAVE_NOAPI(ret_value) } /* H5FD_s3comms_s3r_get_filesize */ - /*---------------------------------------------------------------------------- * * Function: H5FD_s3comms_s3r_getsize() @@ -887,15 +875,12 @@ herr_t H5FD_s3comms_s3r_getsize(s3r_t *handle) { uintmax_t content_length = 0; - CURL *curlh = NULL; - char *end = NULL; - char *headerresponse = NULL; - struct s3r_datastruct sds = { - S3COMMS_CALLBACK_DATASTRUCT_MAGIC, - NULL, - 0 }; - char *start = NULL; - herr_t ret_value = SUCCEED; + CURL * curlh = NULL; + char * end = NULL; + char * headerresponse = NULL; + struct s3r_datastruct sds = {S3COMMS_CALLBACK_DATASTRUCT_MAGIC, NULL, 0}; + char * start = NULL; + herr_t ret_value = SUCCEED; FUNC_ENTER_NOAPI_NOINIT @@ -903,11 +888,11 @@ H5FD_s3comms_s3r_getsize(s3r_t *handle) HDfprintf(stdout, "called H5FD_s3comms_s3r_getsize.\n"); #endif - if(handle == NULL) + if (handle == NULL) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "handle cannot be null."); - if(handle->magic != S3COMMS_S3R_MAGIC) + if (handle->magic != S3COMMS_S3R_MAGIC) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "handle has invalid magic."); - if(handle->curlhandle == NULL) + if (handle->curlhandle == NULL) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "handle has bad (null) curlhandle.") /******************** @@ -915,20 +900,20 @@ H5FD_s3comms_s3r_getsize(s3r_t *handle) ********************/ curlh = handle->curlhandle; - if(CURLE_OK != curl_easy_setopt(curlh, CURLOPT_NOBODY, 1L)) + if (CURLE_OK != curl_easy_setopt(curlh, CURLOPT_NOBODY, 1L)) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "error while setting CURL option (CURLOPT_NOBODY)."); - if(CURLE_OK != curl_easy_setopt(curlh, CURLOPT_HEADERDATA, &sds)) + if (CURLE_OK != curl_easy_setopt(curlh, CURLOPT_HEADERDATA, &sds)) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "error while setting CURL option (CURLOPT_HEADERDATA)."); - HDassert( handle->httpverb == NULL ); + HDassert(handle->httpverb == NULL); handle->httpverb = (char *)H5MM_malloc(sizeof(char) * 16); - if(handle->httpverb == NULL) + if (handle->httpverb == NULL) HGOTO_ERROR(H5E_ARGS, H5E_CANTALLOC, FAIL, "unable to allocate space for S3 request HTTP verb"); HDmemcpy(handle->httpverb, "HEAD", 5); headerresponse = (char *)H5MM_malloc(sizeof(char) * CURL_MAX_HTTP_HEADER); - if(headerresponse == NULL) + if (headerresponse == NULL) HGOTO_ERROR(H5E_ARGS, H5E_CANTALLOC, FAIL, "unable to allocate space for curl header response"); sds.data = headerresponse; @@ -940,10 +925,10 @@ H5FD_s3comms_s3r_getsize(s3r_t *handle) * but, with a NULL destination and NOBODY and HEADERDATA supplied above, * only http metadata will be sent by server and recorded by s3comms */ - if(FAIL == H5FD_s3comms_s3r_read(handle, 0, 0, NULL)) + if (FAIL == H5FD_s3comms_s3r_read(handle, 0, 0, NULL)) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "problem in reading during getsize."); - if(sds.size > CURL_MAX_HTTP_HEADER) + if (sds.size > CURL_MAX_HTTP_HEADER) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "HTTP metadata buffer overrun") else if (sds.size == 0) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "No HTTP metadata") @@ -952,19 +937,18 @@ H5FD_s3comms_s3r_getsize(s3r_t *handle) HDfprintf(stderr, "GETSIZE: OK\n"); #endif - /****************** * PARSE RESPONSE * ******************/ start = HDstrstr(headerresponse, "\r\nContent-Length: "); - if(start == NULL) + if (start == NULL) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "could not find \"Content-Length\" in response."); /* move "start" to beginning of value in line; find end of line */ start = start + HDstrlen("\r\nContent-Length: "); - end = HDstrstr(start, "\r\n"); - if(end == NULL) + end = HDstrstr(start, "\r\n"); + if (end == NULL) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "could not find end of content length line"); /* place null terminator at end of numbers @@ -972,11 +956,13 @@ H5FD_s3comms_s3r_getsize(s3r_t *handle) *end = '\0'; content_length = HDstrtoumax((const char *)start, NULL, 0); - if(UINTMAX_MAX > SIZE_MAX && content_length > SIZE_MAX) + if (UINTMAX_MAX > SIZE_MAX && content_length > SIZE_MAX) HGOTO_ERROR(H5E_ARGS, H5E_OVERFLOW, FAIL, "content_length overflows size_t"); - if(content_length == 0 || errno == ERANGE) /* errno set by HDstrtoumax*/ - HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "could not convert found \"Content-Length\" response (\"%s\")", start); /* range is null-terminated, remember */ + if (content_length == 0 || errno == ERANGE) /* errno set by HDstrtoumax*/ + HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, + "could not convert found \"Content-Length\" response (\"%s\")", + start); /* range is null-terminated, remember */ handle->filesize = (size_t)content_length; @@ -984,10 +970,10 @@ H5FD_s3comms_s3r_getsize(s3r_t *handle) * UNDO HEAD SETTINGS * **********************/ - if(CURLE_OK != curl_easy_setopt(curlh, CURLOPT_NOBODY, NULL)) + if (CURLE_OK != curl_easy_setopt(curlh, CURLOPT_NOBODY, NULL)) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "error while setting CURL option (CURLOPT_NOBODY)."); - if(CURLE_OK != curl_easy_setopt(curlh, CURLOPT_HEADERDATA, NULL)) + if (CURLE_OK != curl_easy_setopt(curlh, CURLOPT_HEADERDATA, NULL)) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "error while setting CURL option (CURLOPT_HEADERDATA)."); done: @@ -997,7 +983,6 @@ done: FUNC_LEAVE_NOAPI(ret_value); } /* H5FD_s3comms_s3r_getsize */ - /*---------------------------------------------------------------------------- * * Function: H5FD_s3comms_s3r_open() @@ -1038,16 +1023,13 @@ done: *---------------------------------------------------------------------------- */ s3r_t * -H5FD_s3comms_s3r_open(const char *url, - const char *region, - const char *id, - const unsigned char *signing_key) +H5FD_s3comms_s3r_open(const char *url, const char *region, const char *id, const unsigned char *signing_key) { size_t tmplen = 0; - CURL *curlh = NULL; - s3r_t *handle = NULL; + CURL * curlh = NULL; + s3r_t * handle = NULL; parsed_url_t *purl = NULL; - s3r_t *ret_value = NULL; + s3r_t * ret_value = NULL; FUNC_ENTER_NOAPI_NOINIT @@ -1055,60 +1037,58 @@ H5FD_s3comms_s3r_open(const char *url, HDfprintf(stdout, "called H5FD_s3comms_s3r_open.\n"); #endif - if(url == NULL || url[0] == '\0') + if (url == NULL || url[0] == '\0') HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, NULL, "url cannot be null."); - if(FAIL == H5FD_s3comms_parse_url(url, &purl)) + if (FAIL == H5FD_s3comms_parse_url(url, &purl)) /* probably a malformed url, but could be internal error */ HGOTO_ERROR(H5E_ARGS, H5E_CANTCREATE, NULL, "unable to create parsed url structure"); - HDassert( purl != NULL ); /* if above passes, this must be true */ - HDassert( purl->magic == S3COMMS_PARSED_URL_MAGIC ); + HDassert(purl != NULL); /* if above passes, this must be true */ + HDassert(purl->magic == S3COMMS_PARSED_URL_MAGIC); handle = (s3r_t *)H5MM_malloc(sizeof(s3r_t)); - if(handle == NULL) + if (handle == NULL) HGOTO_ERROR(H5E_ARGS, H5E_CANTALLOC, NULL, "could not malloc space for handle."); - handle->magic = S3COMMS_S3R_MAGIC; - handle->purl = purl; - handle->filesize = 0; - handle->region = NULL; - handle->secret_id = NULL; - handle->signing_key = NULL; - handle->httpverb = NULL; + handle->magic = S3COMMS_S3R_MAGIC; + handle->purl = purl; + handle->filesize = 0; + handle->region = NULL; + handle->secret_id = NULL; + handle->signing_key = NULL; + handle->httpverb = NULL; /************************************* * RECORD AUTHENTICATION INFORMATION * *************************************/ - if((region != NULL && *region != '\0') || - (id != NULL && *id != '\0') || - (signing_key != NULL)) { + if ((region != NULL && *region != '\0') || (id != NULL && *id != '\0') || (signing_key != NULL)) { /* if one exists, all three must exist */ - if(region == NULL || region[0] == '\0') + if (region == NULL || region[0] == '\0') HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, NULL, "region cannot be null."); - if(id == NULL || id[0] == '\0') + if (id == NULL || id[0] == '\0') HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, NULL, "secret id cannot be null."); - if(signing_key == NULL) + if (signing_key == NULL) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, NULL, "signing key cannot be null."); /* copy strings */ - tmplen = HDstrlen(region) + 1; + tmplen = HDstrlen(region) + 1; handle->region = (char *)H5MM_malloc(sizeof(char) * tmplen); - if(handle->region == NULL) + if (handle->region == NULL) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, NULL, "could not malloc space for handle region copy."); HDmemcpy(handle->region, region, tmplen); - tmplen = HDstrlen(id) + 1; + tmplen = HDstrlen(id) + 1; handle->secret_id = (char *)H5MM_malloc(sizeof(char) * tmplen); - if(handle->secret_id == NULL) + if (handle->secret_id == NULL) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, NULL, "could not malloc space for handle ID copy."); HDmemcpy(handle->secret_id, id, tmplen); - tmplen = SHA256_DIGEST_LENGTH; + tmplen = SHA256_DIGEST_LENGTH; handle->signing_key = (unsigned char *)H5MM_malloc(sizeof(unsigned char) * tmplen); - if(handle->signing_key == NULL) + if (handle->signing_key == NULL) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, NULL, "could not malloc space for handle key copy."); HDmemcpy(handle->signing_key, signing_key, tmplen); } /* if authentication information provided */ @@ -1118,22 +1098,22 @@ H5FD_s3comms_s3r_open(const char *url, ************************/ curlh = curl_easy_init(); - if(curlh == NULL) + if (curlh == NULL) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, NULL, "problem creating curl easy handle!"); - if(CURLE_OK != curl_easy_setopt(curlh, CURLOPT_HTTPGET, 1L)) + if (CURLE_OK != curl_easy_setopt(curlh, CURLOPT_HTTPGET, 1L)) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, NULL, "error while setting CURL option (CURLOPT_HTTPGET)."); - if(CURLE_OK != curl_easy_setopt(curlh, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1)) + if (CURLE_OK != curl_easy_setopt(curlh, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1)) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, NULL, "error while setting CURL option (CURLOPT_HTTP_VERSION)."); - if(CURLE_OK != curl_easy_setopt(curlh, CURLOPT_FAILONERROR, 1L)) + if (CURLE_OK != curl_easy_setopt(curlh, CURLOPT_FAILONERROR, 1L)) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, NULL, "error while setting CURL option (CURLOPT_FAILONERROR)."); - if(CURLE_OK != curl_easy_setopt(curlh, CURLOPT_WRITEFUNCTION, curlwritecallback)) + if (CURLE_OK != curl_easy_setopt(curlh, CURLOPT_WRITEFUNCTION, curlwritecallback)) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, NULL, "error while setting CURL option (CURLOPT_WRITEFUNCTION)."); - if(CURLE_OK != curl_easy_setopt(curlh, CURLOPT_URL, url)) + if (CURLE_OK != curl_easy_setopt(curlh, CURLOPT_URL, url)) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, NULL, "error while setting CURL option (CURLOPT_URL)."); #if S3COMMS_CURL_VERBOSITY > 1 @@ -1150,29 +1130,29 @@ H5FD_s3comms_s3r_open(const char *url, * GET FILE SIZE * *******************/ - if(FAIL == H5FD_s3comms_s3r_getsize(handle)) + if (FAIL == H5FD_s3comms_s3r_getsize(handle)) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, NULL, "problem in H5FD_s3comms_s3r_getsize."); /********************* * FINAL PREPARATION * *********************/ - HDassert( handle->httpverb != NULL ); + HDassert(handle->httpverb != NULL); HDmemcpy(handle->httpverb, "GET", 4); ret_value = handle; done: - if(ret_value == NULL) { - if(curlh != NULL) + if (ret_value == NULL) { + if (curlh != NULL) curl_easy_cleanup(curlh); - if(FAIL == H5FD_s3comms_free_purl(purl)) + if (FAIL == H5FD_s3comms_free_purl(purl)) HDONE_ERROR(H5E_ARGS, H5E_BADVALUE, NULL, "unable to free parsed url structure") - if(handle != NULL) { + if (handle != NULL) { H5MM_xfree(handle->region); H5MM_xfree(handle->secret_id); H5MM_xfree(handle->signing_key); - if(handle->httpverb != NULL) + if (handle->httpverb != NULL) H5MM_xfree(handle->httpverb); H5MM_xfree(handle); } @@ -1181,7 +1161,6 @@ done: FUNC_LEAVE_NOAPI(ret_value) } /* H5FD_s3comms_s3r_open */ - /*---------------------------------------------------------------------------- * * Function: H5FD_s3comms_s3r_read() @@ -1224,23 +1203,20 @@ done: *---------------------------------------------------------------------------- */ herr_t -H5FD_s3comms_s3r_read(s3r_t *handle, - haddr_t offset, - size_t len, - void *dest) +H5FD_s3comms_s3r_read(s3r_t *handle, haddr_t offset, size_t len, void *dest) { - CURL *curlh = NULL; - CURLcode p_status = CURLE_OK; - struct curl_slist *curlheaders = NULL; - hrb_node_t *headers = NULL; - hrb_node_t *node = NULL; - struct tm *now = NULL; - char *rangebytesstr = NULL; - hrb_t *request = NULL; - int ret = 0; /* working variable to check */ - /* return value of HDsnprintf */ - struct s3r_datastruct *sds = NULL; - herr_t ret_value = SUCCEED; + CURL * curlh = NULL; + CURLcode p_status = CURLE_OK; + struct curl_slist *curlheaders = NULL; + hrb_node_t * headers = NULL; + hrb_node_t * node = NULL; + struct tm * now = NULL; + char * rangebytesstr = NULL; + hrb_t * request = NULL; + int ret = 0; /* working variable to check */ + /* return value of HDsnprintf */ + struct s3r_datastruct *sds = NULL; + herr_t ret_value = SUCCEED; FUNC_ENTER_NOAPI_NOINIT @@ -1252,16 +1228,16 @@ H5FD_s3comms_s3r_read(s3r_t *handle, * ABSOLUTELY NECESSARY SANITY-CHECKS * **************************************/ - if(handle == NULL) + if (handle == NULL) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "handle cannot be null."); - if(handle->magic != S3COMMS_S3R_MAGIC) + if (handle->magic != S3COMMS_S3R_MAGIC) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "handle has invalid magic."); - if(handle->curlhandle == NULL) + if (handle->curlhandle == NULL) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "handle has bad (null) curlhandle.") - if(handle->purl == NULL) + if (handle->purl == NULL) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "handle has bad (null) url.") - HDassert( handle->purl->magic == S3COMMS_PARSED_URL_MAGIC ); - if(offset > handle->filesize || (len + offset) > handle->filesize) + HDassert(handle->purl->magic == S3COMMS_PARSED_URL_MAGIC); + if (offset > handle->filesize || (len + offset) > handle->filesize) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "unable to read past EoF") curlh = handle->curlhandle; @@ -1270,16 +1246,17 @@ H5FD_s3comms_s3r_read(s3r_t *handle, * PREPARE WRITEDATA * *********************/ - if(dest != NULL) { + if (dest != NULL) { sds = (struct s3r_datastruct *)H5MM_malloc(sizeof(struct s3r_datastruct)); - if(sds == NULL) + if (sds == NULL) HGOTO_ERROR(H5E_ARGS, H5E_CANTALLOC, FAIL, "could not malloc destination datastructure."); sds->magic = S3COMMS_CALLBACK_DATASTRUCT_MAGIC; - sds->data = (char *)dest; - sds->size = 0; - if(CURLE_OK != curl_easy_setopt(curlh, CURLOPT_WRITEDATA, sds)) - HGOTO_ERROR(H5E_ARGS, H5E_UNINITIALIZED, FAIL, "error while setting CURL option (CURLOPT_WRITEDATA)."); + sds->data = (char *)dest; + sds->size = 0; + if (CURLE_OK != curl_easy_setopt(curlh, CURLOPT_WRITEDATA, sds)) + HGOTO_ERROR(H5E_ARGS, H5E_UNINITIALIZED, FAIL, + "error while setting CURL option (CURLOPT_WRITEDATA)."); } /********************* @@ -1287,21 +1264,21 @@ H5FD_s3comms_s3r_read(s3r_t *handle, *********************/ if (len > 0) { - rangebytesstr = (char *)H5MM_malloc(sizeof(char) * (S3COMMS_MAX_RANGE_STRING_SIZE+1) ); - if(rangebytesstr == NULL) + rangebytesstr = (char *)H5MM_malloc(sizeof(char) * (S3COMMS_MAX_RANGE_STRING_SIZE + 1)); + if (rangebytesstr == NULL) HGOTO_ERROR(H5E_ARGS, H5E_CANTALLOC, FAIL, "could not malloc range format string."); ret = HDsnprintf(rangebytesstr, (S3COMMS_MAX_RANGE_STRING_SIZE), - "bytes="H5_PRINTF_HADDR_FMT"-"H5_PRINTF_HADDR_FMT, - offset, offset + len - 1); - if(ret <= 0 || ret >= S3COMMS_MAX_RANGE_STRING_SIZE) + "bytes=" H5_PRINTF_HADDR_FMT "-" H5_PRINTF_HADDR_FMT, offset, offset + len - 1); + if (ret <= 0 || ret >= S3COMMS_MAX_RANGE_STRING_SIZE) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "unable to format HTTP Range value"); - } else if(offset > 0) { - rangebytesstr = (char *)H5MM_malloc(sizeof(char) * (S3COMMS_MAX_RANGE_STRING_SIZE+1)); - if(rangebytesstr == NULL) + } + else if (offset > 0) { + rangebytesstr = (char *)H5MM_malloc(sizeof(char) * (S3COMMS_MAX_RANGE_STRING_SIZE + 1)); + if (rangebytesstr == NULL) HGOTO_ERROR(H5E_ARGS, H5E_CANTALLOC, FAIL, "could not malloc range format string."); - ret = HDsnprintf(rangebytesstr, (S3COMMS_MAX_RANGE_STRING_SIZE), - "bytes="H5_PRINTF_HADDR_FMT"-", offset); - if(ret <= 0 || ret >= S3COMMS_MAX_RANGE_STRING_SIZE) + ret = HDsnprintf(rangebytesstr, (S3COMMS_MAX_RANGE_STRING_SIZE), "bytes=" H5_PRINTF_HADDR_FMT "-", + offset); + if (ret <= 0 || ret >= S3COMMS_MAX_RANGE_STRING_SIZE) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "unable to format HTTP Range value"); } @@ -1311,39 +1288,41 @@ H5FD_s3comms_s3r_read(s3r_t *handle, if (handle->signing_key == NULL) { /* Do not authenticate. */ - if(rangebytesstr != NULL) { + if (rangebytesstr != NULL) { /* Pass in range directly */ char *bytesrange_ptr = NULL; /* pointer past "bytes=" portion */ bytesrange_ptr = HDstrchr(rangebytesstr, '='); - HDassert( bytesrange_ptr != NULL ); + HDassert(bytesrange_ptr != NULL); bytesrange_ptr++; /* move to first char past '=' */ - HDassert( *bytesrange_ptr != '\0' ); + HDassert(*bytesrange_ptr != '\0'); - if(CURLE_OK != curl_easy_setopt(curlh, CURLOPT_RANGE, bytesrange_ptr)) - HGOTO_ERROR(H5E_VFL, H5E_UNINITIALIZED, FAIL, "error while setting CURL option (CURLOPT_RANGE). "); + if (CURLE_OK != curl_easy_setopt(curlh, CURLOPT_RANGE, bytesrange_ptr)) + HGOTO_ERROR(H5E_VFL, H5E_UNINITIALIZED, FAIL, + "error while setting CURL option (CURLOPT_RANGE). "); } - } else { + } + else { /* authenticate request */ - char authorization[512+1]; - /* 512 := approximate max length... - * 67 <len("AWS4-HMAC-SHA256 Credential=///s3/aws4_request," - * "SignedHeaders=,Signature=")> - * + 8 <yyyyMMDD> - * + 64 <hex(sha256())> - * + 128 <max? len(secret_id)> - * + 20 <max? len(region)> - * + 128 <max? len(signed_headers)> - */ - char buffer1[512+1]; /* -> Canonical Request -> Signature */ - char buffer2[256+1]; /* -> String To Sign -> Credential */ + char authorization[512 + 1]; + /* 512 := approximate max length... + * 67 <len("AWS4-HMAC-SHA256 Credential=///s3/aws4_request," + * "SignedHeaders=,Signature=")> + * + 8 <yyyyMMDD> + * + 64 <hex(sha256())> + * + 128 <max? len(secret_id)> + * + 20 <max? len(region)> + * + 128 <max? len(signed_headers)> + */ + char buffer1[512 + 1]; /* -> Canonical Request -> Signature */ + char buffer2[256 + 1]; /* -> String To Sign -> Credential */ char iso8601now[ISO8601_SIZE]; - char signed_headers[48+1]; - /* should be large enough for nominal listing: - * "host;range;x-amz-content-sha256;x-amz-date" - * + '\0', with "range;" possibly absent - */ + char signed_headers[48 + 1]; + /* should be large enough for nominal listing: + * "host;range;x-amz-content-sha256;x-amz-date" + * + '\0', with "range;" possibly absent + */ /* zero start of strings */ authorization[0] = 0; @@ -1354,88 +1333,86 @@ H5FD_s3comms_s3r_read(s3r_t *handle, /**** VERIFY INFORMATION EXISTS ****/ - if(handle->region == NULL) + if (handle->region == NULL) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "handle must have non-null region."); - if(handle->secret_id == NULL) + if (handle->secret_id == NULL) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "handle must have non-null secret_id."); - if(handle->signing_key == NULL) + if (handle->signing_key == NULL) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "handle must have non-null signing_key."); - if(handle->httpverb == NULL) + if (handle->httpverb == NULL) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "handle must have non-null httpverb."); - if(handle->purl->host == NULL) + if (handle->purl->host == NULL) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "handle must have non-null host."); - if(handle->purl->path == NULL) + if (handle->purl->path == NULL) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "handle must have non-null resource."); /**** CREATE HTTP REQUEST STRUCTURE (hrb_t) ****/ - request = H5FD_s3comms_hrb_init_request( - (const char *)handle->httpverb, - (const char *)handle->purl->path, - "HTTP/1.1"); - if(request == NULL) + request = H5FD_s3comms_hrb_init_request((const char *)handle->httpverb, + (const char *)handle->purl->path, "HTTP/1.1"); + if (request == NULL) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "could not allocate hrb_t request."); - HDassert( request->magic == S3COMMS_HRB_MAGIC ); + HDassert(request->magic == S3COMMS_HRB_MAGIC); now = gmnow(); - if(ISO8601NOW(iso8601now, now) != (ISO8601_SIZE - 1)) + if (ISO8601NOW(iso8601now, now) != (ISO8601_SIZE - 1)) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "could not format ISO8601 time."); - if(FAIL == H5FD_s3comms_hrb_node_set( &headers, "x-amz-date", (const char *)iso8601now)) + if (FAIL == H5FD_s3comms_hrb_node_set(&headers, "x-amz-date", (const char *)iso8601now)) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "unable to set x-amz-date header") - if(headers == NULL) + if (headers == NULL) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "problem building headers list."); - HDassert( headers->magic == S3COMMS_HRB_NODE_MAGIC ); + HDassert(headers->magic == S3COMMS_HRB_NODE_MAGIC); - if(FAIL == H5FD_s3comms_hrb_node_set(&headers, "x-amz-content-sha256", (const char *)EMPTY_SHA256)) + if (FAIL == H5FD_s3comms_hrb_node_set(&headers, "x-amz-content-sha256", (const char *)EMPTY_SHA256)) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "unable to set x-amz-content-sha256 header") - if(headers == NULL) + if (headers == NULL) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "problem building headers list."); - HDassert( headers->magic == S3COMMS_HRB_NODE_MAGIC ); + HDassert(headers->magic == S3COMMS_HRB_NODE_MAGIC); - if(rangebytesstr != NULL) { - if(FAIL == H5FD_s3comms_hrb_node_set( &headers, "Range", rangebytesstr)) + if (rangebytesstr != NULL) { + if (FAIL == H5FD_s3comms_hrb_node_set(&headers, "Range", rangebytesstr)) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "unable to set range header") - if(headers == NULL) + if (headers == NULL) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "problem building headers list."); - HDassert( headers->magic == S3COMMS_HRB_NODE_MAGIC ); + HDassert(headers->magic == S3COMMS_HRB_NODE_MAGIC); } - if(FAIL == H5FD_s3comms_hrb_node_set(&headers, "Host", handle->purl->host)) - HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "unable to set host header") - if(headers == NULL) - HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "problem building headers list."); - HDassert( headers->magic == S3COMMS_HRB_NODE_MAGIC ); + if (FAIL == H5FD_s3comms_hrb_node_set(&headers, "Host", handle->purl->host)) + HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "unable to set host header") + if (headers == NULL) + HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "problem building headers list."); + HDassert(headers->magic == S3COMMS_HRB_NODE_MAGIC); request->first_header = headers; /**** COMPUTE AUTHORIZATION ****/ /* buffer1 -> canonical request */ - if(FAIL == H5FD_s3comms_aws_canonical_request(buffer1, 512, signed_headers, 48, request)) + if (FAIL == H5FD_s3comms_aws_canonical_request(buffer1, 512, signed_headers, 48, request)) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "bad canonical request"); /* buffer2->string-to-sign */ - if(FAIL == H5FD_s3comms_tostringtosign(buffer2, buffer1, iso8601now, handle->region)) + if (FAIL == H5FD_s3comms_tostringtosign(buffer2, buffer1, iso8601now, handle->region)) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "bad string-to-sign"); /* buffer1 -> signature */ - if(FAIL == H5FD_s3comms_HMAC_SHA256(handle->signing_key, SHA256_DIGEST_LENGTH, buffer2, HDstrlen(buffer2), buffer1)) + if (FAIL == H5FD_s3comms_HMAC_SHA256(handle->signing_key, SHA256_DIGEST_LENGTH, buffer2, + HDstrlen(buffer2), buffer1)) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "bad signature"); iso8601now[8] = 0; /* trim to yyyyMMDD */ ret = S3COMMS_FORMAT_CREDENTIAL(buffer2, handle->secret_id, iso8601now, handle->region, "s3"); - if(ret == 0 || ret >= S3COMMS_MAX_CREDENTIAL_SIZE) + if (ret == 0 || ret >= S3COMMS_MAX_CREDENTIAL_SIZE) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "unable to format aws4 credential string"); - ret = HDsnprintf( authorization, 512, - "AWS4-HMAC-SHA256 Credential=%s,SignedHeaders=%s,Signature=%s", - buffer2, signed_headers, buffer1); - if(ret <= 0 || ret >= 512) + ret = HDsnprintf(authorization, 512, "AWS4-HMAC-SHA256 Credential=%s,SignedHeaders=%s,Signature=%s", + buffer2, signed_headers, buffer1); + if (ret <= 0 || ret >= 512) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "unable to format aws4 authorization string"); /* append authorization header to http request buffer */ - if(H5FD_s3comms_hrb_node_set(&headers, "Authorization", (const char *)authorization) == FAIL) + if (H5FD_s3comms_hrb_node_set(&headers, "Authorization", (const char *)authorization) == FAIL) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "unable to set Authorization header") - if(headers == NULL) + if (headers == NULL) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "problem building headers list."); /* update hrb's "first header" pointer */ @@ -1444,22 +1421,23 @@ H5FD_s3comms_s3r_read(s3r_t *handle, /**** SET CURLHANDLE HTTP HEADERS FROM GENERATED DATA ****/ node = request->first_header; - while(node != NULL) { - HDassert( node->magic == S3COMMS_HRB_NODE_MAGIC ); + while (node != NULL) { + HDassert(node->magic == S3COMMS_HRB_NODE_MAGIC); curlheaders = curl_slist_append(curlheaders, (const char *)node->cat); - if(curlheaders == NULL) + if (curlheaders == NULL) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "could not append header to curl slist."); node = node->next; } /* sanity-check */ - if(curlheaders == NULL) + if (curlheaders == NULL) /* above loop was probably never run */ HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "curlheaders was never populated."); /* finally, set http headers in curl handle */ - if(curl_easy_setopt(curlh, CURLOPT_HTTPHEADER, curlheaders) != CURLE_OK) - HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "error while setting CURL option (CURLOPT_HTTPHEADER)."); + if (curl_easy_setopt(curlh, CURLOPT_HTTPHEADER, curlheaders) != CURLE_OK) + HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, + "error while setting CURL option (CURLOPT_HTTPHEADER)."); } /* end if should authenticate (info provided) */ /******************* @@ -1475,39 +1453,38 @@ H5FD_s3comms_s3r_read(s3r_t *handle, char curlerrbuf[CURL_ERROR_SIZE]; curlerrbuf[0] = '\0'; - if(CURLE_OK != curl_easy_setopt(curlh, CURLOPT_ERRORBUFFER, curlerrbuf)) + if (CURLE_OK != curl_easy_setopt(curlh, CURLOPT_ERRORBUFFER, curlerrbuf)) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "problem setting error buffer") p_status = curl_easy_perform(curlh); - if(p_status != CURLE_OK) { - if(CURLE_OK != curl_easy_getinfo(curlh, CURLINFO_RESPONSE_CODE, &httpcode)) + if (p_status != CURLE_OK) { + if (CURLE_OK != curl_easy_getinfo(curlh, CURLINFO_RESPONSE_CODE, &httpcode)) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "problem getting response code") - HDfprintf(stderr, "CURL ERROR CODE: %d\nHTTP CODE: %d\n", - p_status, httpcode); + HDfprintf(stderr, "CURL ERROR CODE: %d\nHTTP CODE: %d\n", p_status, httpcode); HDfprintf(stderr, "%s\n", curl_easy_strerror(p_status)); HGOTO_ERROR(H5E_VFL, H5E_CANTOPENFILE, FAIL, "problem while performing request."); } - if(CURLE_OK != curl_easy_setopt(curlh, CURLOPT_ERRORBUFFER, NULL)) + if (CURLE_OK != curl_easy_setopt(curlh, CURLOPT_ERRORBUFFER, NULL)) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "problem unsetting error buffer") } /* verbose error reporting */ #else p_status = curl_easy_perform(curlh); - if(p_status != CURLE_OK) + if (p_status != CURLE_OK) HGOTO_ERROR(H5E_VFL, H5E_CANTOPENFILE, FAIL, "curl cannot perform request") #endif #if S3COMMS_DEBUG - if(dest != NULL) { + if (dest != NULL) { HDfprintf(stderr, "len: %d\n", (int)len); HDfprintf(stderr, "CHECKING FOR BUFFER OVERFLOW\n"); - if(sds == NULL) + if (sds == NULL) HDfprintf(stderr, "sds is NULL!\n"); else { HDfprintf(stderr, "sds: 0x%lx\n", (long long)sds); HDfprintf(stderr, "sds->size: %d\n", (int)sds->size); - if(len > sds->size) + if (len > sds->size) HDfprintf(stderr, "buffer overwrite\n"); } } @@ -1518,47 +1495,45 @@ H5FD_s3comms_s3r_read(s3r_t *handle, done: /* clean any malloc'd resources */ - if(curlheaders != NULL) { + if (curlheaders != NULL) { curl_slist_free_all(curlheaders); curlheaders = NULL; } - if(rangebytesstr != NULL) { + if (rangebytesstr != NULL) { H5MM_xfree(rangebytesstr); rangebytesstr = NULL; } - if(sds != NULL) { + if (sds != NULL) { H5MM_xfree(sds); sds = NULL; } - if(request != NULL) { - while(headers != NULL) - if(FAIL == H5FD_s3comms_hrb_node_set(&headers, headers->name, NULL)) + if (request != NULL) { + while (headers != NULL) + if (FAIL == H5FD_s3comms_hrb_node_set(&headers, headers->name, NULL)) HDONE_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "cannot release header node") - HDassert( NULL == headers ); - if(FAIL == H5FD_s3comms_hrb_destroy(&request)) + HDassert(NULL == headers); + if (FAIL == H5FD_s3comms_hrb_destroy(&request)) HDONE_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "cannot release header request structure") - HDassert( NULL == request ); + HDassert(NULL == request); } - if(curlh != NULL) { + if (curlh != NULL) { /* clear any Range */ - if(CURLE_OK != curl_easy_setopt(curlh, CURLOPT_RANGE, NULL)) + if (CURLE_OK != curl_easy_setopt(curlh, CURLOPT_RANGE, NULL)) HDONE_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "cannot unset CURLOPT_RANGE") /* clear headers */ - if(CURLE_OK != curl_easy_setopt(curlh, CURLOPT_HTTPHEADER, NULL)) + if (CURLE_OK != curl_easy_setopt(curlh, CURLOPT_HTTPHEADER, NULL)) HDONE_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "cannot unset CURLOPT_HTTPHEADER") } FUNC_LEAVE_NOAPI(ret_value); } /* H5FD_s3comms_s3r_read */ - /**************************************************************************** * MISCELLANEOUS FUNCTIONS ****************************************************************************/ - /*---------------------------------------------------------------------------- * * Function: gmnow() @@ -1581,19 +1556,18 @@ struct tm * gmnow(void) { time_t now; - time_t *now_ptr = &now; + time_t * now_ptr = &now; struct tm *ret_value = NULL; /* Doctor assert, checks against error in time() */ - if((time_t)(-1) != HDtime(now_ptr)) + if ((time_t)(-1) != HDtime(now_ptr)) ret_value = HDgmtime(now_ptr); - HDassert( ret_value != NULL ); + HDassert(ret_value != NULL); return ret_value; } /* end gmnow() */ - /*---------------------------------------------------------------------------- * * Function: H5FD_s3comms_aws_canonical_request() @@ -1634,12 +1608,8 @@ gmnow(void) *---------------------------------------------------------------------------- */ herr_t -H5FD_s3comms_aws_canonical_request( - char *canonical_request_dest, - int _cr_size, - char *signed_headers_dest, - int _sh_size, - hrb_t *http_request) +H5FD_s3comms_aws_canonical_request(char *canonical_request_dest, int _cr_size, char *signed_headers_dest, + int _sh_size, hrb_t *http_request) { hrb_node_t *node = NULL; const char *query_params = ""; /* unused at present */ @@ -1649,8 +1619,8 @@ H5FD_s3comms_aws_canonical_request( size_t sh_size = (size_t)_sh_size; size_t cr_len = 0; /* working length of canonical request str */ size_t sh_len = 0; /* working length of signed headers str */ - char tmpstr[256+1]; - tmpstr[256] = 0; /* terminating NULL */ + char tmpstr[256 + 1]; + tmpstr[256] = 0; /* terminating NULL */ /* "query params" refers to the optional element in the URL, e.g. * http://bucket.aws.com/myfile.txt?max-keys=2&prefix=J @@ -1668,49 +1638,48 @@ H5FD_s3comms_aws_canonical_request( HDfprintf(stdout, "called H5FD_s3comms_aws_canonical_request.\n"); #endif - if(http_request == NULL) + if (http_request == NULL) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "hrb object cannot be null."); - HDassert( http_request->magic == S3COMMS_HRB_MAGIC ); + HDassert(http_request->magic == S3COMMS_HRB_MAGIC); - if(canonical_request_dest == NULL) + if (canonical_request_dest == NULL) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "canonical request destination cannot be null."); - if(signed_headers_dest == NULL) + if (signed_headers_dest == NULL) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "signed headers destination cannot be null."); /* HTTP verb, resource path, and query string lines */ - cr_len = (HDstrlen(http_request->verb) + - HDstrlen(http_request->resource) + - HDstrlen(query_params) + - (size_t)3); /* three newline chars */ - if(cr_len >= cr_size) + cr_len = (HDstrlen(http_request->verb) + HDstrlen(http_request->resource) + HDstrlen(query_params) + + (size_t)3); /* three newline chars */ + if (cr_len >= cr_size) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "not enough space in canonical request"); /* TODO: compiler warning */ - ret = HDsnprintf(canonical_request_dest, (cr_size - 1), - "%s\n%s\n%s\n", - http_request->verb, http_request->resource, query_params); - if(ret < 0 || (size_t)ret >= cr_size) + ret = HDsnprintf(canonical_request_dest, (cr_size - 1), "%s\n%s\n%s\n", http_request->verb, + http_request->resource, query_params); + if (ret < 0 || (size_t)ret >= cr_size) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "unable to compose canonical request first line"); /* write in canonical headers, building signed headers concurrently */ node = http_request->first_header; /* assumed sorted */ - while(node != NULL) { + while (node != NULL) { HDassert(node->magic == S3COMMS_HRB_NODE_MAGIC); - ret = HDsnprintf( tmpstr, 256, "%s:%s\n", node->lowername, node->value); - if(ret < 0 || ret >= 256) - HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "unable to concatenate HTTP header %s:%s", node->lowername, node->value); + ret = HDsnprintf(tmpstr, 256, "%s:%s\n", node->lowername, node->value); + if (ret < 0 || ret >= 256) + HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "unable to concatenate HTTP header %s:%s", + node->lowername, node->value); cr_len += HDstrlen(tmpstr); - if(cr_len + 1 > cr_size) + if (cr_len + 1 > cr_size) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "not enough space in canonical request"); HDstrcat(canonical_request_dest, tmpstr); - ret = HDsnprintf( tmpstr, 256, "%s;", node->lowername); - if(ret < 0 || ret >= 256) - HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "unable to append semicolon to lowername %s", node->lowername); + ret = HDsnprintf(tmpstr, 256, "%s;", node->lowername); + if (ret < 0 || ret >= 256) + HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "unable to append semicolon to lowername %s", + node->lowername); sh_len += HDstrlen(tmpstr); - if(sh_len + 1 > sh_size) + if (sh_len + 1 > sh_size) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "not enough space in signed headers"); HDstrcat(signed_headers_dest, tmpstr); @@ -1733,7 +1702,6 @@ done: FUNC_LEAVE_NOAPI(ret_value); } /* end H5FD_s3comms_aws_canonical_request() */ - /*---------------------------------------------------------------------------- * * Function: H5FD_s3comms_bytes_to_hex() @@ -1766,11 +1734,7 @@ done: *---------------------------------------------------------------------------- */ herr_t -H5FD_s3comms_bytes_to_hex( - char *dest, - const unsigned char *msg, - size_t msg_len, - hbool_t lowercase) +H5FD_s3comms_bytes_to_hex(char *dest, const unsigned char *msg, size_t msg_len, hbool_t lowercase) { size_t i = 0; herr_t ret_value = SUCCEED; @@ -1781,15 +1745,15 @@ H5FD_s3comms_bytes_to_hex( HDfprintf(stdout, "called H5FD_s3comms_bytes_to_hex.\n"); #endif - if(dest == NULL) + if (dest == NULL) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "hex destination cannot be null.") - if(msg == NULL) - HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "bytes sequence cannot be null.") + if (msg == NULL) + HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "bytes sequence cannot be null.") for (i = 0; i < msg_len; i++) { int chars_written = HDsnprintf(&(dest[i * 2]), 3, /* 'X', 'X', '\n' */ - (lowercase == TRUE) ? "%02x" : "%02X", msg[i]); - if(chars_written != 2) + (lowercase == TRUE) ? "%02x" : "%02X", msg[i]); + if (chars_written != 2) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "problem while writing hex chars for %c", msg[i]); } @@ -1797,7 +1761,6 @@ done: FUNC_LEAVE_NOAPI(ret_value); } /* end H5FD_s3comms_bytes_to_hex() */ - /*---------------------------------------------------------------------------- * * Function: H5FD_s3comms_free_purl() @@ -1826,17 +1789,17 @@ H5FD_s3comms_free_purl(parsed_url_t *purl) HDprintf("called H5FD_s3comms_free_purl.\n"); #endif - if(purl != NULL) { - HDassert( purl->magic == S3COMMS_PARSED_URL_MAGIC ); - if(purl->scheme != NULL) + if (purl != NULL) { + HDassert(purl->magic == S3COMMS_PARSED_URL_MAGIC); + if (purl->scheme != NULL) H5MM_xfree(purl->scheme); - if(purl->host != NULL) + if (purl->host != NULL) H5MM_xfree(purl->host); - if(purl->port != NULL) + if (purl->port != NULL) H5MM_xfree(purl->port); - if(purl->path != NULL) + if (purl->path != NULL) H5MM_xfree(purl->path); - if(purl->query != NULL) + if (purl->query != NULL) H5MM_xfree(purl->query); purl->magic += 1ul; H5MM_xfree(purl); @@ -1845,7 +1808,6 @@ H5FD_s3comms_free_purl(parsed_url_t *purl) FUNC_LEAVE_NOAPI(SUCCEED) } /* end H5FD_s3comms_free_purl() */ - /*---------------------------------------------------------------------------- * * Function: H5FD_s3comms_HMAC_SHA256() @@ -1877,12 +1839,8 @@ H5FD_s3comms_free_purl(parsed_url_t *purl) *---------------------------------------------------------------------------- */ herr_t -H5FD_s3comms_HMAC_SHA256( - const unsigned char *key, - size_t key_len, - const char *msg, - size_t msg_len, - char *dest) +H5FD_s3comms_HMAC_SHA256(const unsigned char *key, size_t key_len, const char *msg, size_t msg_len, + char *dest) { unsigned char md[SHA256_DIGEST_LENGTH]; unsigned int md_len = SHA256_DIGEST_LENGTH; @@ -1894,20 +1852,18 @@ H5FD_s3comms_HMAC_SHA256( HDfprintf(stdout, "called H5FD_s3comms_HMAC_SHA256.\n"); #endif - if(dest == NULL) + if (dest == NULL) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "destination cannot be null."); - HMAC(EVP_sha256(), key, (int)key_len, (const unsigned char *)msg, - msg_len, md, &md_len); + HMAC(EVP_sha256(), key, (int)key_len, (const unsigned char *)msg, msg_len, md, &md_len); - if(H5FD_s3comms_bytes_to_hex(dest, (const unsigned char *)md, (size_t)md_len, true) == FAIL) + if (H5FD_s3comms_bytes_to_hex(dest, (const unsigned char *)md, (size_t)md_len, true) == FAIL) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "could not convert to hex string."); done: FUNC_LEAVE_NOAPI(ret_value); } /* H5FD_s3comms_HMAC_SHA256 */ - /*----------------------------------------------------------------------------- * * Function: H5FD__s3comms_load_aws_creds_from_file() @@ -1958,12 +1914,8 @@ done: *----------------------------------------------------------------------------- */ static herr_t -H5FD__s3comms_load_aws_creds_from_file( - FILE *file, - const char *profile_name, - char *key_id, - char *access_key, - char *aws_region) +H5FD__s3comms_load_aws_creds_from_file(FILE *file, const char *profile_name, char *key_id, char *access_key, + char *aws_region) { char profile_line[32]; char buffer[128]; @@ -1972,17 +1924,17 @@ H5FD__s3comms_load_aws_creds_from_file( "aws_access_key_id", "aws_secret_access_key", }; - char * const setting_pointers[] = { + char *const setting_pointers[] = { aws_region, key_id, access_key, }; - unsigned setting_count = 3; - herr_t ret_value = SUCCEED; - unsigned buffer_i = 0; - unsigned setting_i = 0; - int found_setting = 0; - char *line_buffer = &(buffer[0]); + unsigned setting_count = 3; + herr_t ret_value = SUCCEED; + unsigned buffer_i = 0; + unsigned setting_i = 0; + int found_setting = 0; + char * line_buffer = &(buffer[0]); FUNC_ENTER_STATIC @@ -1991,56 +1943,56 @@ H5FD__s3comms_load_aws_creds_from_file( #endif /* format target line for start of profile */ - if(32 < HDsnprintf(profile_line, 32, "[%s]", profile_name)) + if (32 < HDsnprintf(profile_line, 32, "[%s]", profile_name)) HGOTO_ERROR(H5E_ARGS, H5E_CANTCOPY, FAIL, "unable to format profile label") /* look for start of profile */ do { /* clear buffer */ - for(buffer_i=0; buffer_i < 128; buffer_i++) + for (buffer_i = 0; buffer_i < 128; buffer_i++) buffer[buffer_i] = 0; line_buffer = fgets(line_buffer, 128, file); - if(line_buffer == NULL) /* reached end of file */ + if (line_buffer == NULL) /* reached end of file */ goto done; } while (HDstrncmp(line_buffer, profile_line, HDstrlen(profile_line))); /* extract credentials from lines */ do { /* clear buffer */ - for(buffer_i=0; buffer_i < 128; buffer_i++) - buffer[buffer_i] = 0; + for (buffer_i = 0; buffer_i < 128; buffer_i++) + buffer[buffer_i] = 0; /* collect a line from file */ line_buffer = fgets(line_buffer, 128, file); - if(line_buffer == NULL) + if (line_buffer == NULL) goto done; /* end of file */ /* loop over names to see if line looks like assignment */ - for(setting_i = 0; setting_i < setting_count; setting_i++) { + for (setting_i = 0; setting_i < setting_count; setting_i++) { size_t setting_name_len = 0; const char *setting_name = NULL; char line_prefix[128]; - setting_name = setting_names[setting_i]; + setting_name = setting_names[setting_i]; setting_name_len = HDstrlen(setting_name); - if(HDsnprintf(line_prefix, 128, "%s=", setting_name) < 0) + if (HDsnprintf(line_prefix, 128, "%s=", setting_name) < 0) HGOTO_ERROR(H5E_ARGS, H5E_CANTCOPY, FAIL, "unable to format line prefix") /* found a matching name? */ - if(!HDstrncmp(line_buffer, line_prefix, setting_name_len + 1)) { + if (!HDstrncmp(line_buffer, line_prefix, setting_name_len + 1)) { found_setting = 1; /* skip NULL destination buffer */ - if(setting_pointers[setting_i] == NULL) - break; + if (setting_pointers[setting_i] == NULL) + break; /* advance to end of name in string */ do { line_buffer++; } while (*line_buffer != 0 && *line_buffer != '='); - if(*line_buffer == 0 || *(line_buffer+1) == 0) + if (*line_buffer == 0 || *(line_buffer + 1) == 0) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "incomplete assignment in file") line_buffer++; /* was pointing at '='; advance */ @@ -2049,20 +2001,19 @@ H5FD__s3comms_load_aws_creds_from_file( /* "trim" tailing whitespace by replacing with null terminator*/ buffer_i = 0; - while(!HDisspace(setting_pointers[setting_i][buffer_i])) + while (!HDisspace(setting_pointers[setting_i][buffer_i])) buffer_i++; setting_pointers[setting_i][buffer_i] = '\0'; break; /* have read setting; don't compare with others */ - } /* end if possible name match */ - } /* end for each setting name */ + } /* end if possible name match */ + } /* end for each setting name */ } while (found_setting); done: FUNC_LEAVE_NOAPI(ret_value); } /* end H5FD__s3comms_load_aws_creds_from_file() */ - /*---------------------------------------------------------------------------- * * Function: H5FD_s3comms_load_aws_profile() @@ -2096,16 +2047,14 @@ done: *---------------------------------------------------------------------------- */ herr_t -H5FD_s3comms_load_aws_profile(const char *profile_name, - char *key_id_out, - char *secret_access_key_out, - char *aws_region_out) +H5FD_s3comms_load_aws_profile(const char *profile_name, char *key_id_out, char *secret_access_key_out, + char *aws_region_out) { herr_t ret_value = SUCCEED; - FILE *credfile = NULL; - char awspath[117]; - char filepath[128]; - int ret = 0; + FILE * credfile = NULL; + char awspath[117]; + char filepath[128]; + int ret = 0; FUNC_ENTER_NOAPI_NOINIT @@ -2114,54 +2063,53 @@ H5FD_s3comms_load_aws_profile(const char *profile_name, #endif #ifdef H5_HAVE_WIN32_API - ret = HDsnprintf(awspath, 117, "%s/.aws/", getenv("USERPROFILE")) ; + ret = HDsnprintf(awspath, 117, "%s/.aws/", getenv("USERPROFILE")); #else - ret = HDsnprintf(awspath, 117, "%s/.aws/", getenv("HOME")) ; + ret = HDsnprintf(awspath, 117, "%s/.aws/", getenv("HOME")); #endif - if(ret < 0 || (size_t)ret >= 117) + if (ret < 0 || (size_t)ret >= 117) HGOTO_ERROR(H5E_ARGS, H5E_CANTCOPY, FAIL, "unable to format home-aws path") ret = HDsnprintf(filepath, 128, "%s%s", awspath, "credentials"); - if(ret < 0 || (size_t)ret >= 128) + if (ret < 0 || (size_t)ret >= 128) HGOTO_ERROR(H5E_ARGS, H5E_CANTCOPY, FAIL, "unable to format credentials path") credfile = HDfopen(filepath, "r"); - if(credfile != NULL) { - if(H5FD__s3comms_load_aws_creds_from_file(credfile, profile_name, key_id_out, - secret_access_key_out, aws_region_out) == FAIL) + if (credfile != NULL) { + if (H5FD__s3comms_load_aws_creds_from_file(credfile, profile_name, key_id_out, secret_access_key_out, + aws_region_out) == FAIL) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "unable to load from aws credentials") - if(HDfclose(credfile) == EOF) + if (HDfclose(credfile) == EOF) HGOTO_ERROR(H5E_FILE, H5E_CANTCLOSEFILE, FAIL, "unable to close credentials file") credfile = NULL; } /* end if credential file opened */ ret = HDsnprintf(filepath, 128, "%s%s", awspath, "config"); - if(ret < 0 || (size_t)ret >= 128) + if (ret < 0 || (size_t)ret >= 128) HGOTO_ERROR(H5E_ARGS, H5E_CANTCOPY, FAIL, "unable to format config path") credfile = HDfopen(filepath, "r"); - if(credfile != NULL) { - if(H5FD__s3comms_load_aws_creds_from_file( credfile, profile_name, - (*key_id_out == 0) ? key_id_out : NULL, + if (credfile != NULL) { + if (H5FD__s3comms_load_aws_creds_from_file( + credfile, profile_name, (*key_id_out == 0) ? key_id_out : NULL, (*secret_access_key_out == 0) ? secret_access_key_out : NULL, (*aws_region_out == 0) ? aws_region_out : NULL) == FAIL) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "unable to load from aws config") - if(HDfclose(credfile) == EOF) + if (HDfclose(credfile) == EOF) HGOTO_ERROR(H5E_FILE, H5E_CANTCLOSEFILE, FAIL, "unable to close config file") credfile = NULL; } /* end if credential file opened */ /* fail if not all three settings were loaded */ - if(*key_id_out == 0 || *secret_access_key_out == 0 || *aws_region_out == 0) + if (*key_id_out == 0 || *secret_access_key_out == 0 || *aws_region_out == 0) ret_value = FAIL; done: - if(credfile != NULL) - if(HDfclose(credfile) == EOF) + if (credfile != NULL) + if (HDfclose(credfile) == EOF) HDONE_ERROR(H5E_ARGS, H5E_ARGS, FAIL, "problem error-closing aws configuration file") FUNC_LEAVE_NOAPI(ret_value); } /* end H5FD_s3comms_load_aws_profile() */ - /*---------------------------------------------------------------------------- * * Function: H5FD_s3comms_nlowercase() @@ -2189,10 +2137,7 @@ done: *---------------------------------------------------------------------------- */ herr_t -H5FD_s3comms_nlowercase( - char *dest, - const char *s, - size_t len) +H5FD_s3comms_nlowercase(char *dest, const char *s, size_t len) { herr_t ret_value = SUCCEED; @@ -2202,10 +2147,10 @@ H5FD_s3comms_nlowercase( HDfprintf(stdout, "called H5FD_s3comms_nlowercase.\n"); #endif - if(dest == NULL) + if (dest == NULL) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "destination cannot be null."); - if(len > 0) { + if (len > 0) { HDmemcpy(dest, s, len); do { len--; @@ -2217,7 +2162,6 @@ done: FUNC_LEAVE_NOAPI(ret_value); } /* end H5FD_s3comms_nlowercase() */ - /*---------------------------------------------------------------------------- * * Function: H5FD_s3comms_parse_url() @@ -2250,17 +2194,15 @@ done: *---------------------------------------------------------------------------- */ herr_t -H5FD_s3comms_parse_url( - const char *str, - parsed_url_t **_purl) +H5FD_s3comms_parse_url(const char *str, parsed_url_t **_purl) { - parsed_url_t *purl = NULL; /* pointer to new structure */ - const char *tmpstr = NULL; /* working pointer in string */ - const char *curstr = str; /* "start" pointer in string */ - long int len = 0; /* substring length */ - long int urllen = 0; /* length of passed-in url string */ - unsigned int i = 0; - herr_t ret_value = FAIL; + parsed_url_t *purl = NULL; /* pointer to new structure */ + const char * tmpstr = NULL; /* working pointer in string */ + const char * curstr = str; /* "start" pointer in string */ + long int len = 0; /* substring length */ + long int urllen = 0; /* length of passed-in url string */ + unsigned int i = 0; + herr_t ret_value = FAIL; FUNC_ENTER_NOAPI_NOINIT; @@ -2268,13 +2210,13 @@ H5FD_s3comms_parse_url( HDprintf("called H5FD_s3comms_parse_url.\n"); #endif - if(str == NULL || *str == '\0') + if (str == NULL || *str == '\0') HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid url string"); urllen = (long int)HDstrlen(str); purl = (parsed_url_t *)H5MM_malloc(sizeof(parsed_url_t)); - if(purl == NULL) + if (purl == NULL) HGOTO_ERROR(H5E_ARGS, H5E_CANTALLOC, FAIL, "can't allocate space for parsed_url_t"); purl->magic = S3COMMS_PARSED_URL_MAGIC; purl->scheme = NULL; @@ -2288,26 +2230,25 @@ H5FD_s3comms_parse_url( ***************/ tmpstr = HDstrchr(curstr, ':'); - if(tmpstr == NULL) + if (tmpstr == NULL) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid SCHEME construction: probably not URL"); len = tmpstr - curstr; - HDassert( (0 <= len) && (len < urllen) ); + HDassert((0 <= len) && (len < urllen)); /* check for restrictions */ - for(i = 0; i < len; i++) { + for (i = 0; i < len; i++) { /* scheme = [a-zA-Z+-.]+ (terminated by ":") */ - if(!HDisalpha(curstr[i]) && '+' != curstr[i] && '-' != curstr[i] && - '.' != curstr[i]) + if (!HDisalpha(curstr[i]) && '+' != curstr[i] && '-' != curstr[i] && '.' != curstr[i]) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid SCHEME construction"); } /* copy lowercased scheme to structure */ purl->scheme = (char *)H5MM_malloc(sizeof(char) * (size_t)(len + 1)); - if(purl->scheme == NULL) + if (purl->scheme == NULL) HGOTO_ERROR(H5E_ARGS, H5E_CANTALLOC, FAIL, "can't allocate space for SCHEME"); HDstrncpy(purl->scheme, curstr, (size_t)len); purl->scheme[len] = '\0'; - for(i = 0; i < len; i++ ) + for (i = 0; i < len; i++) purl->scheme[i] = (char)HDtolower(purl->scheme[i]); /* Skip "://" */ @@ -2318,32 +2259,32 @@ H5FD_s3comms_parse_url( * READ HOST * *************/ - if(*curstr == '[') { + if (*curstr == '[') { /* IPv6 */ - while(']' != *tmpstr) { + while (']' != *tmpstr) { /* end of string reached! */ - if(tmpstr == 0) + if (tmpstr == 0) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "reached end of URL: incomplete IPv6 HOST"); tmpstr++; } tmpstr++; } /* end if (IPv6) */ else { - while(0 != *tmpstr) { - if(':' == *tmpstr || '/' == *tmpstr || '?' == *tmpstr) + while (0 != *tmpstr) { + if (':' == *tmpstr || '/' == *tmpstr || '?' == *tmpstr) break; tmpstr++; } } /* end else (IPv4) */ len = tmpstr - curstr; - if(len == 0) + if (len == 0) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "HOST substring cannot be empty") - else if(len > urllen) + else if (len > urllen) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "problem with length of HOST substring"); /* copy host */ purl->host = (char *)H5MM_malloc(sizeof(char) * (size_t)(len + 1)); - if(purl->host == NULL) + if (purl->host == NULL) HGOTO_ERROR(H5E_ARGS, H5E_CANTALLOC, FAIL, "can't allocate space for HOST"); HDstrncpy(purl->host, curstr, (size_t)len); purl->host[len] = 0; @@ -2352,23 +2293,23 @@ H5FD_s3comms_parse_url( * READ PORT * *************/ - if(':' == *tmpstr) { + if (':' == *tmpstr) { tmpstr += 1; /* advance past ':' */ curstr = tmpstr; - while((0 != *tmpstr) && ('/' != *tmpstr) && ('?' != *tmpstr)) + while ((0 != *tmpstr) && ('/' != *tmpstr) && ('?' != *tmpstr)) tmpstr++; len = tmpstr - curstr; - if(len == 0) + if (len == 0) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "PORT element cannot be empty") - else if(len > urllen) + else if (len > urllen) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "problem with length of PORT substring"); - for(i = 0; i < len; i ++) - if(!HDisdigit(curstr[i])) + for (i = 0; i < len; i++) + if (!HDisdigit(curstr[i])) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "PORT is not a decimal string"); /* copy port */ purl->port = (char *)H5MM_malloc(sizeof(char) * (size_t)(len + 1)); - if(purl->port == NULL) + if (purl->port == NULL) HGOTO_ERROR(H5E_ARGS, H5E_CANTALLOC, FAIL, "can't allocate space for PORT"); HDstrncpy(purl->port, curstr, (size_t)len); purl->port[len] = 0; @@ -2378,20 +2319,20 @@ H5FD_s3comms_parse_url( * READ PATH * *************/ - if('/' == *tmpstr) { + if ('/' == *tmpstr) { /* advance past '/' */ tmpstr += 1; curstr = tmpstr; /* seek end of PATH */ - while((0 != *tmpstr) && ('?' != *tmpstr)) + while ((0 != *tmpstr) && ('?' != *tmpstr)) tmpstr++; len = tmpstr - curstr; - if(len > urllen) + if (len > urllen) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "problem with length of PATH substring"); - if(len > 0) { + if (len > 0) { purl->path = (char *)H5MM_malloc(sizeof(char) * (size_t)(len + 1)); - if(purl->path == NULL) + if (purl->path == NULL) HGOTO_ERROR(H5E_ARGS, H5E_CANTALLOC, FAIL, "can't allocate space for PATH"); HDstrncpy(purl->path, curstr, (size_t)len); purl->path[len] = 0; @@ -2402,34 +2343,33 @@ H5FD_s3comms_parse_url( * READ QUERY * **************/ - if('?' == *tmpstr) { + if ('?' == *tmpstr) { tmpstr += 1; curstr = tmpstr; - while(0 != *tmpstr) + while (0 != *tmpstr) tmpstr++; len = tmpstr - curstr; - if(len == 0) + if (len == 0) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "QUERY cannot be empty") - else if(len > urllen) + else if (len > urllen) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "problem with length of QUERY substring"); purl->query = (char *)H5MM_malloc(sizeof(char) * (size_t)(len + 1)); - if(purl->query == NULL) + if (purl->query == NULL) HGOTO_ERROR(H5E_ARGS, H5E_CANTALLOC, FAIL, "can't allocate space for QUERY"); HDstrncpy(purl->query, curstr, (size_t)len); purl->query[len] = 0; } /* end if QUERY exists */ - *_purl = purl; - ret_value = SUCCEED; + *_purl = purl; + ret_value = SUCCEED; done: - if(ret_value == FAIL) + if (ret_value == FAIL) H5FD_s3comms_free_purl(purl); FUNC_LEAVE_NOAPI(ret_value); } /* end H5FD_s3comms_parse_url() */ - /*---------------------------------------------------------------------------- * * Function: H5FD_s3comms_percent_encode_char() @@ -2470,17 +2410,14 @@ done: *---------------------------------------------------------------------------- */ herr_t -H5FD_s3comms_percent_encode_char( - char *repr, - const unsigned char c, - size_t *repr_len) +H5FD_s3comms_percent_encode_char(char *repr, const unsigned char c, size_t *repr_len) { - unsigned int i = 0; - int chars_written = 0; - herr_t ret_value = SUCCEED; + unsigned int i = 0; + int chars_written = 0; + herr_t ret_value = SUCCEED; #if S3COMMS_DEBUG - unsigned char s[2] = {c, 0}; - unsigned char hex[3] = {0, 0, 0}; + unsigned char s[2] = {c, 0}; + unsigned char hex[3] = {0, 0, 0}; #endif FUNC_ENTER_NOAPI_NOINIT @@ -2489,8 +2426,8 @@ H5FD_s3comms_percent_encode_char( HDfprintf(stdout, "called H5FD_s3comms_percent_encode_char.\n"); #endif - if(repr == NULL) - HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no destination `repr`.") + if (repr == NULL) + HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no destination `repr`.") #if S3COMMS_DEBUG H5FD_s3comms_bytes_to_hex((char *)hex, s, 1, FALSE); @@ -2498,31 +2435,31 @@ H5FD_s3comms_percent_encode_char( HDfprintf(stdout, " CHAR-HEX: \"%s\"\n", hex); #endif - if(c <= (unsigned char)0x7f) { + if (c <= (unsigned char)0x7f) { /* character represented in a single "byte" * and single percent-code */ #if S3COMMS_DEBUG HDfprintf(stdout, " SINGLE-BYTE\n"); #endif - *repr_len = 3; + *repr_len = 3; chars_written = HDsnprintf(repr, 4, "%%%02X", c); - if(chars_written < 0) + if (chars_written < 0) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "cannot write char %c", c); } /* end if single-byte unicode char */ else { /* multi-byte, multi-percent representation */ - unsigned int acc = 0; /* byte accumulator */ - unsigned int k = 0; /* uint character representation */ - unsigned int stack_size = 0; - unsigned char stack[4] = {0, 0, 0, 0}; + unsigned int acc = 0; /* byte accumulator */ + unsigned int k = 0; /* uint character representation */ + unsigned int stack_size = 0; + unsigned char stack[4] = {0, 0, 0, 0}; #if S3COMMS_DEBUG HDfprintf(stdout, " MULTI-BYTE\n"); #endif stack_size = 0; - k = (unsigned int)c; - *repr_len = 0; + k = (unsigned int)c; + *repr_len = 0; do { /* push number onto stack in six-bit slices */ @@ -2530,7 +2467,7 @@ H5FD_s3comms_percent_encode_char( acc >>= 6; /* cull least */ acc <<= 6; /* six bits */ stack[stack_size++] = (unsigned char)(k - acc); - k = acc >> 6; + k = acc >> 6; } while (k > 0); /* `stack` now has two to four six-bit 'numbers' to be put into @@ -2540,11 +2477,7 @@ H5FD_s3comms_percent_encode_char( #if S3COMMS_DEBUG HDfprintf(stdout, " STACK:\n {\n"); for (i = 0; i < stack_size; i++) { - H5FD_s3comms_bytes_to_hex( - (char *)hex, - (&stack[i]), - 1, - FALSE); + H5FD_s3comms_bytes_to_hex((char *)hex, (&stack[i]), 1, FALSE); hex[2] = 0; HDfprintf(stdout, " %s,\n", hex); } @@ -2561,8 +2494,8 @@ H5FD_s3comms_percent_encode_char( acc += (stack_size > 2) ? 0x20 : 0; /* 0x00100000 */ acc += (stack_size > 3) ? 0x10 : 0; /* 0x00010000 */ stack_size--; - chars_written = HDsnprintf( repr, 4, "%%%02X", (unsigned char)(acc + stack[stack_size])); - if(chars_written < 0) + chars_written = HDsnprintf(repr, 4, "%%%02X", (unsigned char)(acc + stack[stack_size])); + if (chars_written < 0) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "cannot write char %c", c); *repr_len += 3; @@ -2571,14 +2504,14 @@ H5FD_s3comms_percent_encode_char( ************************/ /* 10xxxxxx */ - for(i = 0; i < stack_size; i++) { - chars_written = HDsnprintf( &repr[i*3 + 3], 4, - "%%%02X", (unsigned char)(0x80 + stack[stack_size - 1 - i])); - if(chars_written < 0) + for (i = 0; i < stack_size; i++) { + chars_written = + HDsnprintf(&repr[i * 3 + 3], 4, "%%%02X", (unsigned char)(0x80 + stack[stack_size - 1 - i])); + if (chars_written < 0) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "cannot write char %c", c); *repr_len += 3; } /* end for each continuation byte */ - } /* end else (multi-byte) */ + } /* end else (multi-byte) */ *(repr + *repr_len) = '\0'; @@ -2586,7 +2519,6 @@ done: FUNC_LEAVE_NOAPI(ret_value); } /* H5FD_s3comms_percent_encode_char */ - /*---------------------------------------------------------------------------- * * Function: H5FD_s3comms_signing_key() @@ -2626,19 +2558,15 @@ done: *---------------------------------------------------------------------------- */ herr_t -H5FD_s3comms_signing_key( - unsigned char *md, - const char *secret, - const char *region, - const char *iso8601now) +H5FD_s3comms_signing_key(unsigned char *md, const char *secret, const char *region, const char *iso8601now) { - char *AWS4_secret = NULL; - size_t AWS4_secret_len = 0; - unsigned char datekey[SHA256_DIGEST_LENGTH]; - unsigned char dateregionkey[SHA256_DIGEST_LENGTH]; - unsigned char dateregionservicekey[SHA256_DIGEST_LENGTH]; - int ret = 0; /* return value of HDsnprintf */ - herr_t ret_value = SUCCEED; + char * AWS4_secret = NULL; + size_t AWS4_secret_len = 0; + unsigned char datekey[SHA256_DIGEST_LENGTH]; + unsigned char dateregionkey[SHA256_DIGEST_LENGTH]; + unsigned char dateregionservicekey[SHA256_DIGEST_LENGTH]; + int ret = 0; /* return value of HDsnprintf */ + herr_t ret_value = SUCCEED; FUNC_ENTER_NOAPI_NOINIT @@ -2646,56 +2574,37 @@ H5FD_s3comms_signing_key( HDfprintf(stdout, "called H5FD_s3comms_signing_key.\n"); #endif - if(md == NULL) + if (md == NULL) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "Destination `md` cannot be NULL.") - if(secret == NULL) + if (secret == NULL) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "`secret` cannot be NULL.") - if(region == NULL) + if (region == NULL) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "`region` cannot be NULL.") - if(iso8601now == NULL) + if (iso8601now == NULL) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "`iso8601now` cannot be NULL.") AWS4_secret_len = 4 + HDstrlen(secret) + 1; - AWS4_secret = (char*)H5MM_malloc(sizeof(char *) * AWS4_secret_len); - if(AWS4_secret == NULL) + AWS4_secret = (char *)H5MM_malloc(sizeof(char *) * AWS4_secret_len); + if (AWS4_secret == NULL) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "Could not allocate space.") /* prepend "AWS4" to start of the secret key */ - ret = HDsnprintf(AWS4_secret, AWS4_secret_len,"%s%s", "AWS4", secret); - if((size_t)ret != (AWS4_secret_len - 1)) + ret = HDsnprintf(AWS4_secret, AWS4_secret_len, "%s%s", "AWS4", secret); + if ((size_t)ret != (AWS4_secret_len - 1)) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "problem writing AWS4+secret `%s`", secret); /* hash_func, key, len(key), msg, len(msg), digest_dest, digest_len_dest * we know digest length, so ignore via NULL */ - HMAC(EVP_sha256(), - (const unsigned char *)AWS4_secret, - (int)HDstrlen(AWS4_secret), - (const unsigned char*)iso8601now, - 8, /* 8 --> length of 8 --> "yyyyMMDD" */ - datekey, - NULL); - HMAC(EVP_sha256(), - (const unsigned char *)datekey, - SHA256_DIGEST_LENGTH, - (const unsigned char *)region, - HDstrlen(region), - dateregionkey, - NULL); - HMAC(EVP_sha256(), - (const unsigned char *)dateregionkey, - SHA256_DIGEST_LENGTH, - (const unsigned char *)"s3", - 2, - dateregionservicekey, - NULL); - HMAC(EVP_sha256(), - (const unsigned char *)dateregionservicekey, - SHA256_DIGEST_LENGTH, - (const unsigned char *)"aws4_request", - 12, - md, - NULL); + HMAC(EVP_sha256(), (const unsigned char *)AWS4_secret, (int)HDstrlen(AWS4_secret), + (const unsigned char *)iso8601now, 8, /* 8 --> length of 8 --> "yyyyMMDD" */ + datekey, NULL); + HMAC(EVP_sha256(), (const unsigned char *)datekey, SHA256_DIGEST_LENGTH, (const unsigned char *)region, + HDstrlen(region), dateregionkey, NULL); + HMAC(EVP_sha256(), (const unsigned char *)dateregionkey, SHA256_DIGEST_LENGTH, + (const unsigned char *)"s3", 2, dateregionservicekey, NULL); + HMAC(EVP_sha256(), (const unsigned char *)dateregionservicekey, SHA256_DIGEST_LENGTH, + (const unsigned char *)"aws4_request", 12, md, NULL); done: H5MM_xfree(AWS4_secret); @@ -2703,7 +2612,6 @@ done: FUNC_LEAVE_NOAPI(ret_value); } /* end H5FD_s3comms_signing_key() */ - /*---------------------------------------------------------------------------- * * Function: H5FD_s3comms_tostringtosign() @@ -2741,14 +2649,10 @@ done: *---------------------------------------------------------------------------- */ herr_t -H5FD_s3comms_tostringtosign( - char *dest, - const char *req, - const char *now, - const char *region) +H5FD_s3comms_tostringtosign(char *dest, const char *req, const char *now, const char *region) { unsigned char checksum[SHA256_DIGEST_LENGTH * 2 + 1]; - size_t d = 0; + size_t d = 0; char day[9]; char hexsum[SHA256_DIGEST_LENGTH * 2 + 1]; size_t i = 0; @@ -2762,31 +2666,31 @@ H5FD_s3comms_tostringtosign( HDfprintf(stdout, "called H5FD_s3comms_tostringtosign.\n"); #endif - if(dest == NULL) + if (dest == NULL) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "destination buffer cannot be null.") - if(req == NULL) + if (req == NULL) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "canonical request cannot be null.") - if(now == NULL) + if (now == NULL) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "Timestring cannot be NULL.") - if(region == NULL) + if (region == NULL) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "Region cannot be NULL.") - for(i = 0; i < 128; i++) + for (i = 0; i < 128; i++) tmp[i] = '\0'; - for(i = 0; i < SHA256_DIGEST_LENGTH * 2 + 1; i++) { + for (i = 0; i < SHA256_DIGEST_LENGTH * 2 + 1; i++) { checksum[i] = '\0'; - hexsum[i] = '\0'; + hexsum[i] = '\0'; } HDstrncpy(day, now, 8); day[8] = '\0'; - ret = HDsnprintf(tmp, 127, "%s/%s/s3/aws4_request", day, region); - if(ret <= 0 || ret >= 127) + ret = HDsnprintf(tmp, 127, "%s/%s/s3/aws4_request", day, region); + if (ret <= 0 || ret >= 127) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "problem adding day and region to string") HDmemcpy((dest + d), "AWS4-HMAC-SHA256\n", 17); d = 17; - HDmemcpy((dest+d), now, HDstrlen(now)); + HDmemcpy((dest + d), now, HDstrlen(now)); d += HDstrlen(now); dest[d++] = '\n'; @@ -2796,11 +2700,11 @@ H5FD_s3comms_tostringtosign( SHA256((const unsigned char *)req, HDstrlen(req), checksum); - if(H5FD_s3comms_bytes_to_hex(hexsum, (const unsigned char *)checksum, - SHA256_DIGEST_LENGTH, true) == FAIL) + if (H5FD_s3comms_bytes_to_hex(hexsum, (const unsigned char *)checksum, SHA256_DIGEST_LENGTH, true) == + FAIL) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "could not create hex string"); - for(i = 0; i < SHA256_DIGEST_LENGTH * 2; i++) + for (i = 0; i < SHA256_DIGEST_LENGTH * 2; i++) dest[d++] = hexsum[i]; dest[d] = '\0'; @@ -2809,7 +2713,6 @@ done: FUNC_LEAVE_NOAPI(ret_value) } /* end H5ros3_tostringtosign() */ - /*---------------------------------------------------------------------------- * * Function: H5FD_s3comms_trim() @@ -2840,10 +2743,7 @@ done: *---------------------------------------------------------------------------- */ herr_t -H5FD_s3comms_trim(char *dest, - char *s, - size_t s_len, - size_t *n_written) +H5FD_s3comms_trim(char *dest, char *s, size_t s_len, size_t *n_written) { herr_t ret_value = SUCCEED; @@ -2853,28 +2753,28 @@ H5FD_s3comms_trim(char *dest, HDfprintf(stdout, "called H5FD_s3comms_trim.\n"); #endif - if(dest == NULL) + if (dest == NULL) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "destination cannot be null.") - if(s == NULL) + if (s == NULL) s_len = 0; - if(s_len > 0) { + if (s_len > 0) { /* Find first non-whitespace character from start; * reduce total length per character. */ - while((s_len > 0) && HDisspace((unsigned char)s[0]) && s_len > 0) { - s++; - s_len--; + while ((s_len > 0) && HDisspace((unsigned char)s[0]) && s_len > 0) { + s++; + s_len--; } /* Find first non-whitespace character from tail; * reduce length per-character. * If length is 0 already, there is no non-whitespace character. */ - if(s_len > 0) { + if (s_len > 0) { do { s_len--; - } while(HDisspace((unsigned char)s[s_len])); + } while (HDisspace((unsigned char)s[s_len])); s_len++; /* write output into dest */ @@ -2888,7 +2788,6 @@ done: FUNC_LEAVE_NOAPI(ret_value) } /* end H5FD_s3comms_trim() */ - /*---------------------------------------------------------------------------- * * Function: H5FD_s3comms_uriencode() @@ -2928,15 +2827,10 @@ done: *---------------------------------------------------------------------------- */ herr_t -H5FD_s3comms_uriencode( - char *dest, - const char *s, - size_t s_len, - hbool_t encode_slash, - size_t *n_written) +H5FD_s3comms_uriencode(char *dest, const char *s, size_t s_len, hbool_t encode_slash, size_t *n_written) { - char c = 0; - size_t dest_off = 0; + char c = 0; + size_t dest_off = 0; char hex_buffer[13]; size_t hex_off = 0; size_t hex_len = 0; @@ -2949,35 +2843,37 @@ H5FD_s3comms_uriencode( HDfprintf(stdout, "H5FD_s3comms_uriencode called.\n"); #endif - if(s == NULL) + if (s == NULL) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "source string cannot be NULL"); - if(dest == NULL) + if (dest == NULL) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "destination cannot be NULL"); /* Write characters to destination, converting to percent-encoded * "hex-utf-8" strings if necessary. * e.g., '$' -> "%24" */ - for(s_off = 0; s_off < s_len; s_off++) { + for (s_off = 0; s_off < s_len; s_off++) { c = s[s_off]; - if(HDisalnum(c) || c == '.' || c == '-' || c == '_' || - c == '~' || (c == '/' && encode_slash == FALSE)) + if (HDisalnum(c) || c == '.' || c == '-' || c == '_' || c == '~' || + (c == '/' && encode_slash == FALSE)) dest[dest_off++] = c; else { hex_off = 0; - if(H5FD_s3comms_percent_encode_char(hex_buffer, (const unsigned char)c, - &hex_len) == FAIL) { + if (H5FD_s3comms_percent_encode_char(hex_buffer, (const unsigned char)c, &hex_len) == FAIL) { hex_buffer[0] = c; hex_buffer[1] = 0; - HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "unable to percent-encode character \'%s\' " "at %d in \"%s\"", hex_buffer, (int)s_off, s); + HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, + "unable to percent-encode character \'%s\' " + "at %d in \"%s\"", + hex_buffer, (int)s_off, s); } - for(hex_off = 0; hex_off < hex_len; hex_off++) + for (hex_off = 0; hex_off < hex_len; hex_off++) dest[dest_off++] = hex_buffer[hex_off]; } /* end else (not a regular character) */ - } /* end for each character */ + } /* end for each character */ - if(dest_off < s_len) + if (dest_off < s_len) HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "buffer overflow"); *n_written = dest_off; @@ -2987,4 +2883,3 @@ done: } /* H5FD_s3comms_uriencode */ #endif /* H5_HAVE_ROS3_VFD */ - |