aboutsummaryrefslogtreecommitdiff
path: root/lib/reqsign.c
diff options
context:
space:
mode:
authorSergey Poznyakoff <gray@gnu.org.ua>2012-09-20 00:49:00 +0300
committerSergey Poznyakoff <gray@gnu.org.ua>2012-09-20 00:49:00 +0300
commitdf0d5f4df874bd47e5e47d08c67fea7ac17eec1e (patch)
tree2097591c3fd1a8e82bf6101c6d311fc9480917f1 /lib/reqsign.c
parent96871660d41c0130460f52057c0334cec46f7dd3 (diff)
downloadeclat-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.c36
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);
+*/
}

Return to:

Send suggestions and report system problems to the System administrator.