diff options
author | Sergey Poznyakoff <gray@gnu.org.ua> | 2012-09-20 00:49:00 +0300 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org.ua> | 2012-09-20 00:49:00 +0300 |
commit | df0d5f4df874bd47e5e47d08c67fea7ac17eec1e (patch) | |
tree | 2097591c3fd1a8e82bf6101c6d311fc9480917f1 /lib/reqsign.c | |
parent | 96871660d41c0130460f52057c0334cec46f7dd3 (diff) | |
download | eclat-df0d5f4df874bd47e5e47d08c67fea7ac17eec1e.tar.gz eclat-df0d5f4df874bd47e5e47d08c67fea7ac17eec1e.tar.bz2 |
Implement start-instance.
* lib/qaddparm.c: New file.
* lib/qcreat.c: New file.
* lib/qencode.c: New file.
* lib/qfree.c: new file.
* lib/Makefile.am: Add new files.
* lib/libeclat.h (ec2_query) <https, verb>: Remove.
<flags>: New member.
(eclat_query_create, eclat_query_free)
(eclat_query_encode): New protos.
* lib/q2url.c (eclat_query_to_url): Fix.
* lib/reqsign.c (eclat_query_signature): Bugfixes.
* src/config.c (config_finish): Call grecs_tree_process.
* src/eclat.c (url_base): Remove.
(main): Install curl debugging function if required.
* src/eclat.h: Update.
* src/startinst.c (eclat_start_instance): Implement.
Diffstat (limited to 'lib/reqsign.c')
-rw-r--r-- | lib/reqsign.c | 36 |
1 files changed, 29 insertions, 7 deletions
diff --git a/lib/reqsign.c b/lib/reqsign.c index f8ad234..20c56a7 100644 --- a/lib/reqsign.c +++ b/lib/reqsign.c @@ -16,6 +16,7 @@ #include <config.h> #include <string.h> +#include <time.h> #include "libeclat.h" #include "grecs.h" @@ -51,9 +52,22 @@ eclat_query_signature(struct ec2_query *req, char *secret) char *str; char digest[20]; size_t siglen; + const char *verb; + char tsbuf[22]; + time_t t; acc = grecs_txtacc_create(); - + + /* Add default parameters */ + eclat_query_add_param(req, "SignatureMethod", "HmacSHA1"); + eclat_query_add_param(req, "SignatureVersion", "2"); + + time(&t); + strftime(tsbuf, sizeof(tsbuf), "%Y-%m-%dT%H:%M:%SZ", gmtime(&t)); + eclat_query_add_param(req, "Timestamp", tsbuf); + + eclat_query_encode(req); + /* Collect and sort parameter names */ n = grecs_symtab_count_entries(req->params); pnames = grecs_calloc(n, sizeof(pnames[0])); @@ -62,7 +76,8 @@ eclat_query_signature(struct ec2_query *req, char *secret) grecs_symtab_enumerate(req->params, get_param_name, &pn); qsort(pnames, n, sizeof(pnames[0]), compnames); - grecs_txtacc_grow(acc, req->verb, strlen(req->verb)); + verb = (req->flags & EC2_QF_POST) ? "POST" : "GET"; + grecs_txtacc_grow(acc, verb, strlen(verb)); grecs_txtacc_grow_char(acc, '\n'); grecs_txtacc_grow(acc, req->endpoint, strlen(req->endpoint)); grecs_txtacc_grow_char(acc, '\n'); @@ -71,9 +86,10 @@ eclat_query_signature(struct ec2_query *req, char *secret) /* Append a canonicalized query string */ for (i = 0; i < n; i++) { - struct ec2_param *p = - grecs_symtab_lookup_or_install(req->params, pnames[i], - NULL); + struct ec2_param *p, key; + + key.name = pnames[i]; + p = grecs_symtab_lookup_or_install(req->params, &key, NULL); if (!p) abort(); if (i != 0) @@ -89,8 +105,14 @@ eclat_query_signature(struct ec2_query *req, char *secret) hmac_sha1(str, strlen(str), secret, strlen(secret), digest); eclat_base64_encode(digest, sizeof(digest), - (unsigned char**) req->signature, &siglen); - + (unsigned char**) &req->signature, &siglen); + grecs_txtacc_free(acc); free(pnames); + +/*FIXME + t += req->ttl; + strftime(tsbuf, sizeof(tsbuf), "%Y-%m-%dT%H:%M:%SZ", gmtime(&t)); + eclat_query_add_param(req, "Expires", tsbuf); +*/ } |