[repo.or.cz] iwhd.git branch master updated: v0.0-127-g94932e1
by Jeff Darcy
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project iwhd.git.
The branch, master has been updated
via 94932e139d8d58cab65114d340dcf0c201eab125 (commit)
via 1a876712ef22c1b70dc11401884e2ba30c0c90a9 (commit)
from 10d05a999d53191bc01e82b6a34840ffefef8d95 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
http://repo.or.cz/w/iwhd.git/commit/94932e139d8d58cab65114d340dcf0c201eab125
commit 94932e139d8d58cab65114d340dcf0c201eab125
Author: Jeff Darcy <jdarcy(a)redhat.com>
Date: Tue Sep 28 21:03:43 2010 -0400
Fix leak when deleting nonexistent file.
diff --git a/backend.c b/backend.c
index e76a469..25c2814 100644
--- a/backend.c
+++ b/backend.c
@@ -121,7 +121,7 @@ bad_delete (const char *bucket, const char *key, const char *url)
(void)url;
DPRINTF("*** bad call to %sn",__func__);
- return MHD_NO;
+ return MHD_HTTP_BAD_REQUEST;
}
int
@@ -274,7 +274,7 @@ s3_delete (const char *bucket, const char *key, const char *url)
hstor_del(hstor,bucket,key);
/* TBD: check return value */
- return MHD_YES;
+ return MHD_HTTP_OK;
}
int
@@ -682,7 +682,7 @@ curl_delete (const char *bucket, const char *key, const char *url)
curl = curl_easy_init();
if (!curl) {
- return MHD_NO;
+ return MHD_HTTP_INTERNAL_SERVER_ERROR;
}
sprintf(fixed,"http://%s:%u%s",proxy_host,proxy_port,url);
@@ -691,7 +691,7 @@ curl_delete (const char *bucket, const char *key, const char *url)
curl_easy_perform(curl);
curl_easy_cleanup(curl);
- return MHD_YES;
+ return MHD_HTTP_OK;
}
int
@@ -866,10 +866,10 @@ fs_delete (const char *bucket, const char *key, const char *url)
if (unlink(url+1) < 0) {
error (0, errno, "%s: failed to unlink", url+1);
- return MHD_NO;
+ return MHD_HTTP_NOT_FOUND;
}
- return MHD_YES;
+ return MHD_HTTP_OK;
}
int
diff --git a/rest.c b/rest.c
index 66f91bb..2172b31 100644
--- a/rest.c
+++ b/rest.c
@@ -823,7 +823,6 @@ proxy_query (void *cctx, struct MHD_Connection *conn, const char *url,
simple_closer(ms);
return MHD_NO;
}
- MHD_add_response_header(resp,"Content-Type","text/xml");
MHD_queue_response(conn,MHD_HTTP_OK,resp);
MHD_destroy_response(resp);
free_ms(ms);
@@ -885,26 +884,23 @@ proxy_delete (void *cctx, struct MHD_Connection *conn, const char *url,
DPRINTF("PROXY DELETE %sn",url);
rc = main_func_tbl->delete_func(ms->bucket,ms->key,(char *)url);
- if (rc != MHD_YES) {
- return rc;
+ if (rc == MHD_HTTP_OK) {
+ copied_url = strdup(url);
+ assert (copied_url);
+ bucket = strtok_r(copied_url,"/",&stctx);
+ key = strtok_r(NULL,"/",&stctx);
+ meta_delete(bucket,key);
+ free(copied_url);
+ replicate_delete((char *)url);
}
- copied_url = strdup(url);
- assert (copied_url);
- bucket = strtok_r(copied_url,"/",&stctx);
- key = strtok_r(NULL,"/",&stctx);
- meta_delete(bucket,key);
- free(copied_url);
-
resp = MHD_create_response_from_data(0,NULL,MHD_NO,MHD_NO);
if (!resp) {
return MHD_NO;
}
- MHD_add_response_header(resp,"Content-Type","text/xml");
- MHD_queue_response(conn,MHD_HTTP_OK,resp);
+ MHD_queue_response(conn,rc,resp);
MHD_destroy_response(resp);
- replicate_delete((char *)url);
free_ms(ms);
return MHD_YES;
}
@@ -1026,7 +1022,6 @@ proxy_api_root (void *cctx, struct MHD_Connection *conn, const char *url,
if (!resp) {
return MHD_NO;
}
- MHD_add_response_header(resp,"Content-Type","text/xml");
MHD_queue_response(conn,rc,resp);
MHD_destroy_response(resp);
http://repo.or.cz/w/iwhd.git/commit/1a876712ef22c1b70dc11401884e2ba30c0c90a9
commit 1a876712ef22c1b70dc11401884e2ba30c0c90a9
Author: Jeff Darcy <jdarcy(a)redhat.com>
Date: Tue Sep 28 14:30:00 2010 -0400
Fix ms leaks when object not found, deleted.
diff --git a/rest.c b/rest.c
index a2fffc3..66f91bb 100644
--- a/rest.c
+++ b/rest.c
@@ -304,6 +304,7 @@ proxy_get_data (void *cctx, struct MHD_Connection *conn, const char *url,
MHD_NO,MHD_NO);
MHD_queue_response(conn,MHD_HTTP_NOT_FOUND,resp);
MHD_destroy_response(resp);
+ free_ms(ms);
return MHD_YES;
}
DPRINTF(" will fetch from %s:%un", master_host,master_port);
@@ -904,6 +905,7 @@ proxy_delete (void *cctx, struct MHD_Connection *conn, const char *url,
MHD_destroy_response(resp);
replicate_delete((char *)url);
+ free_ms(ms);
return MHD_YES;
}
-----------------------------------------------------------------------
Summary of changes:
backend.c | 12 ++++++------
rest.c | 25 +++++++++++--------------
2 files changed, 17 insertions(+), 20 deletions(-)
repo.or.cz automatic notification. Contact project admin jim(a)meyering.net
if you want to unsubscribe, or site admin admin(a)repo.or.cz if you receive
no reply.
--
iwhd.git ("image warehouse daemon")
13 years, 7 months
[repo.or.cz] iwhd.git branch master updated: v0.0-125-g10d05a9
by Jim Meyering
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project iwhd.git.
The branch, master has been updated
via 10d05a999d53191bc01e82b6a34840ffefef8d95 (commit)
from 2214d5b9c6adb68baabcaffabc73dd02239096b1 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
http://repo.or.cz/w/iwhd.git/commit/10d05a999d53191bc01e82b6a34840ffefef8d95
commit 10d05a999d53191bc01e82b6a34840ffefef8d95
Author: Jim Meyering <meyering(a)redhat.com>
Date: Tue Sep 28 21:31:23 2010 +0200
tests: exercise object deletion
diff --git a/t/basic b/t/basic
index 3d36c2f..bd44a03 100644
--- a/t/basic
+++ b/t/basic
@@ -110,6 +110,13 @@ compare root root.xml || fail=1
curl -H 'Accept: */json' http://localhost:$port > root || fail=1
compare root root.json || fail=1
+# Delete an object and ensure that it's gone from the file system.
+curl -X DELETE http://localhost:$port/b1/f1
+test -f FS/b1/f1 && fail=1
+
+# Try to delete a nonexistent object.
+curl -X DELETE http://localhost:$port/b1/no-such-obj
+
# ################## Providers
p_name=primary
-----------------------------------------------------------------------
Summary of changes:
t/basic | 7 +++++++
1 files changed, 7 insertions(+), 0 deletions(-)
repo.or.cz automatic notification. Contact project admin jim(a)meyering.net
if you want to unsubscribe, or site admin admin(a)repo.or.cz if you receive
no reply.
--
iwhd.git ("image warehouse daemon")
13 years, 7 months
[repo.or.cz] iwhd.git branch master updated: v0.0-124-g2214d5b
by Jim Meyering
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project iwhd.git.
The branch, master has been updated
via 2214d5b9c6adb68baabcaffabc73dd02239096b1 (commit)
from 5f1095727aeb9a484c46c3586485e1b89468b06a (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
http://repo.or.cz/w/iwhd.git/commit/2214d5b9c6adb68baabcaffabc73dd02239096b1
commit 2214d5b9c6adb68baabcaffabc73dd02239096b1
Author: Jim Meyering <meyering(a)redhat.com>
Date: Tue Sep 28 15:12:33 2010 +0200
plug a nasty leak and 3 others like it
* rest.c (proxy_update_prov): Don't leak the state buffer
allocated in access_handler. I confirmed that this does plug
an actual leak.
(proxy_query, proxy_bucket_post, proxy_object_post):
These are in the same vein, but were fixed by inspection,
since tests don't yet exercise these.
diff --git a/rest.c b/rest.c
index 475adc1..a2fffc3 100644
--- a/rest.c
+++ b/rest.c
@@ -825,6 +825,7 @@ proxy_query (void *cctx, struct MHD_Connection *conn, const char *url,
MHD_add_response_header(resp,"Content-Type","text/xml");
MHD_queue_response(conn,MHD_HTTP_OK,resp);
MHD_destroy_response(resp);
+ free_ms(ms);
}
return MHD_YES;
@@ -1191,6 +1192,7 @@ proxy_bucket_post (void *cctx, struct MHD_Connection *conn, const char *url,
}
MHD_queue_response(conn,rc,resp);
MHD_destroy_response(resp);
+ free_ms(ms);
}
return MHD_YES;
@@ -1308,6 +1310,7 @@ proxy_object_post (void *cctx, struct MHD_Connection *conn, const char *url,
}
MHD_queue_response(conn,rc,resp);
MHD_destroy_response(resp);
+ free_ms(ms);
}
return MHD_YES;
@@ -1471,6 +1474,7 @@ proxy_update_prov (void *cctx, struct MHD_Connection *conn, const char *url,
}
MHD_queue_response(conn,rc,resp);
MHD_destroy_response(resp);
+ free_ms(ms);
}
return MHD_YES;
-----------------------------------------------------------------------
Summary of changes:
rest.c | 4 ++++
1 files changed, 4 insertions(+), 0 deletions(-)
repo.or.cz automatic notification. Contact project admin jim(a)meyering.net
if you want to unsubscribe, or site admin admin(a)repo.or.cz if you receive
no reply.
--
iwhd.git ("image warehouse daemon")
13 years, 7 months
[repo.or.cz] iwhd.git branch master updated: v0.0-123-g5f10957
by Jim Meyering
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project iwhd.git.
The branch, master has been updated
via 5f1095727aeb9a484c46c3586485e1b89468b06a (commit)
via c46547610682271c08d970fb927c83e523491b41 (commit)
via bc81e99ff8ea7f910ee48be11c4aca485794ec6f (commit)
via fe98d54da3f5f78667d2ca1a766fd9d8a3f31aa1 (commit)
from 32c6ca985e228c7db3968a8bdcd4f33006a6f854 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
http://repo.or.cz/w/iwhd.git/commit/5f1095727aeb9a484c46c3586485e1b89468b06a
commit 5f1095727aeb9a484c46c3586485e1b89468b06a
Author: Jim Meyering <meyering(a)redhat.com>
Date: Tue Sep 28 14:07:09 2010 +0200
don't leak json_strings on username/password update
* proxy.c (update_provider): Avoid leaks exposed by new test.
Valgrind reported this:
78 (72 direct, 6 indirect) bytes in 3 blocks are definitely lost in loss record 246 of 317
at 0x4A0515D: malloc (vg_replace_malloc.c:195)
by 0x4C35BD9: json_string_nocheck (in /usr/lib64/libjansson.so.0.2.0)
by 0x420DA7: update_provider (proxy.c:1042)
by 0x425856: proxy_update_prov (rest.c:1461)
by 0x4E3BB38: ??? (in /usr/lib64/libmicrohttpd.so.5.2.1)
by 0x4E3CD27: ??? (in /usr/lib64/libmicrohttpd.so.5.2.1)
by 0x4E3F9F9: ??? (in /usr/lib64/libmicrohttpd.so.5.2.1)
by 0x31BB407760: start_thread (pthread_create.c:301)
by 0x31BA8E151C: clone (clone.S:115)
78 (72 direct, 6 indirect) bytes in 3 blocks are definitely lost in loss record 247 of 317
at 0x4A0515D: malloc (vg_replace_malloc.c:195)
by 0x4C35BD9: json_string_nocheck (in /usr/lib64/libjansson.so.0.2.0)
by 0x420DDA: update_provider (proxy.c:1043)
by 0x425856: proxy_update_prov (rest.c:1461)
by 0x4E3BB38: ??? (in /usr/lib64/libmicrohttpd.so.5.2.1)
by 0x4E3CD27: ??? (in /usr/lib64/libmicrohttpd.so.5.2.1)
by 0x4E3F9F9: ??? (in /usr/lib64/libmicrohttpd.so.5.2.1)
by 0x31BB407760: start_thread (pthread_create.c:301)
by 0x31BA8E151C: clone (clone.S:115)
diff --git a/proxy.c b/proxy.c
index 5138fc6..b2f3a6b 100644
--- a/proxy.c
+++ b/proxy.c
@@ -1039,8 +1039,9 @@ update_provider (const char *provider, const char *username, const char *passwor
s_name = json_string_value(json_object_get(server,"name"));
DPRINTF(" checking %sn",s_name);
if (s_name && !strcmp(s_name,provider)) {
- json_object_set(server,"key",json_string(username));
- json_object_set(server,"secret",json_string(password));
+ json_object_set_new(server,"key",json_string(username));
+ json_object_set_new(server,"secret",
+ json_string(password));
break;
}
}
http://repo.or.cz/w/iwhd.git/commit/c46547610682271c08d970fb927c83e523491b41
commit c46547610682271c08d970fb927c83e523491b41
Author: Jim Meyering <meyering(a)redhat.com>
Date: Tue Sep 28 13:49:32 2010 +0200
tests: exercise basic providers_ functionality
diff --git a/t/basic b/t/basic
index 62065ff..3d36c2f 100644
--- a/t/basic
+++ b/t/basic
@@ -45,6 +45,41 @@ cat <<EOF > root.json || framework_failure_
}
EOF
+emit_provider()
+{
+ local xml_or_json=$1
+ case $# in 7);; *) echo "emit_provider: wrong # args" 1>&2; exit 1;; esac
+ case $xml_or_json in xml|json);;
+ *) echo "invalid xml_or_json $xml_or_json" 1>&2; exit 1;; esac
+
+ if test $xml_or_json = xml; then
+ printf +'<providers>
+t<provider name="%s">
+tt<type>%s</type>
+tt<host>%s</host>
+tt<port>%s</port>
+tt<username>%s</username>
+tt<password>%s</password>
+t</provider>
+</providers>
+' $2 $3 $4 $5 $6 $7
+ else
+ printf +'[
+t{
+tt"name": "%s",
+tt"type": "%s",
+tt"host": "%s",
+tt"port": %s,
+tt"username": "%s",
+tt"password": "%s"
+t}
+]
+' $2 $3 $4 $5 $6 $7
+ fi
+}
+
printf '[{"path": "FS", "type": "fs", "name": "primary"}]n' > iwhd.cfg || fail=1
@@ -75,4 +110,48 @@ compare root root.xml || fail=1
curl -H 'Accept: */json' http://localhost:$port > root || fail=1
compare root root.json || fail=1
+# ################## Providers
+
+p_name=primary
+host='(null)'
+
+# Verify that default providers information is as expected.
+curl http://localhost:$port/_providers > p || fail=1
+emit_provider xml "$p_name" fs "$host" 0 '' '' > p.exp || fail=1
+compare p.exp p || fail=1
+
+for i in xml json; do
+
+ curl_H() { curl -H "Accept: */$i" "$@"; }
+
+ # Change username and password; ensure that is reflected in providers output.
+ curl_H -d provider="$p_name" -d username=u -d password=p + http://localhost:$port/_providers || fail=1
+ curl_H http://localhost:$port/_providers > p || fail=1
+ emit_provider $i "$p_name" fs "$host" 0 u p > p.xml || fail=1
+ compare p.xml p || fail=1
+
+ # Try to change just one of username and password, not specifying the other.
+ # Ensure that the attempt fails.
+ curl_H -d provider="$p_name" -d username=u + http://localhost:$port/_providers || fail=1
+ curl_H http://localhost:$port/_providers > p || fail=1
+ emit_provider $i "$p_name" fs "$host" 0 u p > p.exp || fail=1
+ compare p.exp p || fail=1
+
+ curl_H -d provider="$p_name" -d password=p + http://localhost:$port/_providers || fail=1
+ curl_H http://localhost:$port/_providers > p || fail=1
+ emit_provider $i "$p_name" fs "$host" 0 u p > p.exp || fail=1
+ compare p.exp p || fail=1
+
+ # Try to change both username and password. Now, it must succeed.
+ curl_H -d provider="$p_name" -d username=v -d password=q + http://localhost:$port/_providers || fail=1
+ curl_H http://localhost:$port/_providers > p || fail=1
+ emit_provider $i "$p_name" fs "$host" 0 v q > p.exp || fail=1
+ compare p.exp p || fail=1
+
+done
+
Exit $fail
http://repo.or.cz/w/iwhd.git/commit/bc81e99ff8ea7f910ee48be11c4aca485794ec6f
commit bc81e99ff8ea7f910ee48be11c4aca485794ec6f
Author: Jim Meyering <meyering(a)redhat.com>
Date: Tue Sep 28 10:32:45 2010 +0200
don't end "error(..." diagnostic with "n"
Fix them all by running this command:
git grep -l 'error.*\n'|xargs perl -pi -e 's/(berror ?(.*)\n"/$1"/'
diff --git a/backend.c b/backend.c
index fce5bb9..e76a469 100644
--- a/backend.c
+++ b/backend.c
@@ -249,7 +249,7 @@ s3_put_child (void * ctx)
llen = strtoll(clen,NULL,10);
}
else {
- error (0, 0, "missing Content-Lengthn");
+ error (0, 0, "missing Content-Length");
llen = (curl_off_t)MHD_SIZE_UNKNOWN;
}
@@ -320,7 +320,7 @@ s3_init_tmpfile (char *value)
}
else {
error (0, errno,
- "invalid write length %zd in %sn",
+ "invalid write length %zd in %s",
written, __func__);
}
unlink(path);
@@ -378,7 +378,7 @@ s3_register (my_state *ms, const provider_t *prov, const char *next,
if (!api_key) {
api_key = (char *)prov->username;
if (!api_key) {
- error (0, 0, "missing EC2 API keyn");
+ error (0, 0, "missing EC2 API key");
goto cleanup;
}
}
@@ -387,7 +387,7 @@ s3_register (my_state *ms, const provider_t *prov, const char *next,
if (!api_secret) {
api_secret = (char *)prov->password;
if (!prov->password) {
- error (0, 0, "missing EC2 API keyn");
+ error (0, 0, "missing EC2 API key");
goto cleanup;
}
}
@@ -402,7 +402,7 @@ s3_register (my_state *ms, const provider_t *prov, const char *next,
else {
ami_cert = get_provider_value(prov->index,"ami-cert");
if (!ami_cert) {
- error (0, 0, "missing EC2 AMI certn");
+ error (0, 0, "missing EC2 AMI cert");
goto cleanup;
}
}
@@ -417,7 +417,7 @@ s3_register (my_state *ms, const provider_t *prov, const char *next,
else {
ami_key = get_provider_value(prov->index,"ami-key");
if (!ami_key) {
- error (0, 0, "missing EC2 AMI keyn");
+ error (0, 0, "missing EC2 AMI key");
goto cleanup;
}
}
@@ -426,7 +426,7 @@ s3_register (my_state *ms, const provider_t *prov, const char *next,
if (!ami_uid) {
ami_uid = get_provider_value(prov->index,"ami-uid");
if (!ami_uid) {
- error (0, 0, "missing EC2 AMI uidn");
+ error (0, 0, "missing EC2 AMI uid");
goto cleanup;
}
}
@@ -604,7 +604,7 @@ curl_put_child (void * ctx)
llen = strtoll(clen,NULL,10);
}
else {
- error (0, 0, "missing Content-Lengthn");
+ error (0, 0, "missing Content-Length");
llen = (curl_off_t)MHD_SIZE_UNKNOWN;
}
@@ -773,7 +773,7 @@ fs_init (void)
{
DPRINTF("changing directory to %sn",local_path);
if (chdir(local_path) < 0) {
- error(0,errno,"chdir failed, unsafe to continuen");
+ error(0,errno,"chdir failed, unsafe to continue");
exit(!0); /* Value doesn't matter, as long as it's not zero. */
}
}
diff --git a/proxy.c b/proxy.c
index 5aebcae..5138fc6 100644
--- a/proxy.c
+++ b/proxy.c
@@ -114,20 +114,20 @@ validate_server (unsigned int i)
server = json_array_get(config,i);
if (!json_is_object(server)) {
- error(0,0,"config elem %u: missing objectn",i);
+ error(0,0,"config elem %u: missing object",i);
return 0;
}
elem = json_object_get(server,"name");
if (!json_is_string(elem)) {
- error(0,0,"config elem %u: missing namen",i);
+ error(0,0,"config elem %u: missing name",i);
return 0;
}
name = json_string_value(elem);
elem = json_object_get(server,"type");
if (!json_is_string(elem)) {
- error(0,0,"config elem %u (%s): missing typen",i,name);
+ error(0,0,"config elem %u (%s): missing type",i,name);
return 0;
}
type = json_string_value(elem);
@@ -142,20 +142,20 @@ validate_server (unsigned int i)
needs = NEED_PATH;
}
else {
- error(0,0,"config elem %u (%s): bad typen",i,name);
+ error(0,0,"config elem %u (%s): bad type",i,name);
return 0;
}
if (needs & NEED_SERVER) {
elem = json_object_get(server,"host");
if (!json_is_string(elem)) {
- error(0,0,"config elem %u (%s): missing hostn",
+ error(0,0,"config elem %u (%s): missing host",
i,name);
return 0;
}
elem = json_object_get(server,"port");
if (!json_is_integer(elem)) {
- error(0,0,"config elem %u (%s): missing portn",
+ error(0,0,"config elem %u (%s): missing port",
i,name);
return 0;
}
@@ -164,15 +164,14 @@ validate_server (unsigned int i)
if (needs & NEED_CREDS) {
elem = json_object_get(server,"key");
if (!json_is_string(elem)) {
- error(0,0,"config elem %u (%s): missing keyn",
- i, name);
+ error(0,0,"config elem %u (%s): missing key",
+ i, name);
return 0;
}
elem = json_object_get(server,"secret");
if (!json_is_string(elem)) {
- error(0,0,
- "config elem %u (%s): missing secretn",
- i, name);
+ error(0,0, "config elem %u (%s): missing secret",
+ i, name);
return 0;
}
}
@@ -180,8 +179,8 @@ validate_server (unsigned int i)
if (needs & NEED_PATH) {
elem = json_object_get(server,"path");
if (!json_is_string(elem)) {
- error(0,0,"config elem %u (%s): missing pathn",
- i, name);
+ error(0,0,"config elem %u (%s): missing path",
+ i, name);
return 0;
}
}
@@ -236,12 +235,12 @@ parse_config (void)
config = json_load_file(cfg_file,&err);
if (!config) {
- error(0,0,"JSON error on line %d: %sn",err.line,err.text);
+ error(0,0,"JSON error on line %d: %s",err.line,err.text);
return NULL;
}
if (json_typeof(config) != JSON_ARRAY) {
- error(0,0,"config should be a JSON arrayn");
+ error(0,0,"config should be a JSON array");
goto err;
}
@@ -357,7 +356,7 @@ proxy_repl_prod (void *ctx)
chars = snprintf(addr,ADDR_SIZE,
"http://%s:%u/%s",proxy_host,proxy_port,item->path);
if (chars >= ADDR_SIZE) {
- error(0,0,"path too long in %sn",__func__);
+ error(0,0,"path too long in %s",__func__);
goto done;
}
DPRINTF("replicating from %sn",addr);
@@ -366,7 +365,7 @@ proxy_repl_prod (void *ctx)
chars = snprintf(svc_acc,SVC_ACC_SIZE,"%s:%u",
proxy_host,proxy_port);
if (chars >= SVC_ACC_SIZE) {
- error(0,0,"svc_acc too long in %sn",__func__);
+ error(0,0,"svc_acc too long in %s",__func__);
goto done;
}
hstor = hstor_new(svc_acc,proxy_host,
@@ -464,19 +463,19 @@ get_cloudfiles_token (json_t *server, const char *host, unsigned int port,
chars = snprintf(addr,ADDR_SIZE,"https://%s:%u/v1.0",host,port);
if (chars >= ADDR_SIZE) {
- error(0,0,"API URL too long in %sn",__func__);
+ error(0,0,"API URL too long in %s",__func__);
return NULL;
}
chars = snprintf(auth_user,HEADER_SIZE,"X-Auth-User: %s",user);
if (chars >= HEADER_SIZE) {
- error(0,0,"auth_user too long in %sn",__func__);
+ error(0,0,"auth_user too long in %s",__func__);
return NULL;
}
chars = snprintf(auth_key,HEADER_SIZE,"X-Auth-Key: %s",key);
if (chars >= HEADER_SIZE) {
- error(0,0,"auth_key too long in %sn",__func__);
+ error(0,0,"auth_key too long in %s",__func__);
return NULL;
}
@@ -543,7 +542,7 @@ proxy_repl_cons (void *ctx)
item->path);
chars = snprintf(svc_acc,SVC_ACC_SIZE,"%s:%u",s_host,s_port);
if (chars >= SVC_ACC_SIZE) {
- error(0,0,"svc_acc too long in %sn",__func__);
+ error(0,0,"svc_acc too long in %s",__func__);
return THREAD_FAILED;
}
hstor = hstor_new(svc_acc,s_host,s_key,s_secret);
@@ -567,7 +566,7 @@ proxy_repl_cons (void *ctx)
chars = snprintf(addr,ADDR_SIZE,"%s/%s",
s_host,item->path);
if (chars >= ADDR_SIZE) {
- error(0,0,"CF path too long in %sn",__func__);
+ error(0,0,"CF path too long in %s",__func__);
return THREAD_FAILED;
}
DPRINTF("replicating %zu to %s (CF)n",item->size,
@@ -577,7 +576,7 @@ proxy_repl_cons (void *ctx)
chars = snprintf(addr,ADDR_SIZE,"http://%s:%u/%s",
s_host,s_port,item->path);
if (chars >= ADDR_SIZE) {
- error(0,0,"HTTP path too long in %sn",
+ error(0,0,"HTTP path too long in %s",
__func__);
return THREAD_FAILED;
}
@@ -594,7 +593,7 @@ proxy_repl_cons (void *ctx)
chars = snprintf(auth_hdr,HEADER_SIZE,
"X-Auth-Token: %s",token_str);
if (chars >= HEADER_SIZE) {
- error(0,0,"auth_token too long in %sn",
+ error(0,0,"auth_token too long in %s",
__func__);
return THREAD_FAILED;
}
@@ -654,7 +653,7 @@ repl_worker_del (const repl_item *item)
item->path, s_host, s_port);
chars = snprintf(svc_acc,SVC_ACC_SIZE,"%s:%u",s_host,s_port);
if (chars >= SVC_ACC_SIZE) {
- error(0,0,"svc_acc too long in %sn",__func__);
+ error(0,0,"svc_acc too long in %s",__func__);
return;
}
/* TBD: check return */
@@ -671,7 +670,7 @@ repl_worker_del (const repl_item *item)
chars = snprintf(addr,ADDR_SIZE,"http://%s:%d%s",
s_host,s_port,item->path);
if (chars >= ADDR_SIZE) {
- error(0,0,"path too long in %sn",__func__);
+ error(0,0,"path too long in %s",__func__);
return;
}
curl = curl_easy_init();
@@ -711,14 +710,14 @@ repl_worker_bcreate (repl_item *item)
__func__, item->path, s_host, s_port);
chars = snprintf(svc_acc,SVC_ACC_SIZE,"%s:%u",s_host,s_port);
if (chars >= SVC_ACC_SIZE) {
- error(0,0,"svc_acc too long in %sn",__func__);
+ error(0,0,"svc_acc too long in %s",__func__);
return;
}
/* TBD: check return */
hstor = hstor_new(svc_acc,s_host,s_key,s_secret);
assert (item->path);
if (!hstor_add_bucket(hstor,item->path)) {
- error(0,0,"bucket create failed for %sn",
+ error(0,0,"bucket create failed for %s",
item->path);
}
hstor_free(hstor);
@@ -729,7 +728,7 @@ repl_worker_bcreate (repl_item *item)
chars = snprintf(addr,ADDR_SIZE,"http://%s:%d/%s",
s_host,s_port,item->path);
if (chars >= ADDR_SIZE) {
- error(0,0,"path too long in %sn",__func__);
+ error(0,0,"path too long in %s",__func__);
return;
}
curl = curl_easy_init();
@@ -785,7 +784,7 @@ repl_worker (void *notused ATTRIBUTE_UNUSED)
repl_worker_bcreate(item);
break;
default:
- error(0,0,"bad repl type %d (url=%s) skippedn",
+ error(0,0,"bad repl type %d (url=%s) skipped",
item->type, item->path);
}
free(item->path);
@@ -838,7 +837,7 @@ replicate (const char *url, size_t size, const char *policy)
url2 = strdup(url);
if (!url2) {
- error(0,0,"could not parse url %sn",url);
+ error(0,0,"could not parse url %s",url);
return;
}
qctx.cur_bucket = strtok_r(url2,"/",&stctx);
@@ -877,14 +876,14 @@ replicate (const char *url, size_t size, const char *policy)
DPRINTF("REPLICATING %s to %un",url,i);
item = malloc(sizeof(*item));
if (!item) {
- error(0,errno,"could not create repl_item for %sn",
+ error(0,errno,"could not create repl_item for %s",
url);
break;
}
item->type = REPL_PUT;
item->path = strdup(url);
if (!item->path) {
- error(0,errno,"could not create repl_item for %sn",
+ error(0,errno,"could not create repl_item for %s",
url);
break;
}
@@ -920,7 +919,7 @@ replicate_namespace_action (const char *name, repl_t action)
DPRINTF("replicating delete(%s) on %un",name,i);
item = malloc(sizeof(*item));
if (!item) {
- error(0,errno,"could not create repl_item for %sn",
+ error(0,errno,"could not create repl_item for %s",
name);
return;
}
http://repo.or.cz/w/iwhd.git/commit/fe98d54da3f5f78667d2ca1a766fd9d8a3f31aa1
commit fe98d54da3f5f78667d2ca1a766fd9d8a3f31aa1
Author: Jim Meyering <meyering(a)redhat.com>
Date: Mon Sep 27 18:29:35 2010 +0200
tests: don't let ~/.curlrc settings perturb these tests
Quiet the wait_for use of curl.
diff --git a/t/basic b/t/basic
index e4bc0bb..62065ff 100644
--- a/t/basic
+++ b/t/basic
@@ -53,7 +53,7 @@ iwhd_pid=$!
cleanup_() { kill $mongo_pid $iwhd_pid; }
# Wait for up to 3 seconds for iwhd to begin listening on $port.
-wait_for .1 30 "curl http://localhost:$port" +wait_for .1 30 "curl -s http://localhost:$port" || { echo iwhd failed to listen; Exit 1; }
# Create an empty bucket.
diff --git a/t/init.cfg b/t/init.cfg
index 9b8a9fa..f0301d4 100644
--- a/t/init.cfg
+++ b/t/init.cfg
@@ -4,6 +4,10 @@
# TESTS_ENVIRONMENT definition.
stderr_fileno_=9
+# Always use curl's -q option, so that a user's .rc settings
+# cannot perturb these tests.
+curl() { env curl -q "$@"; }
+
wait_for()
{
local sleep_seconds=$1
-----------------------------------------------------------------------
Summary of changes:
backend.c | 18 ++++++------
proxy.c | 72 ++++++++++++++++++++++++++--------------------------
t/basic | 81 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
t/init.cfg | 4 +++
4 files changed, 129 insertions(+), 46 deletions(-)
repo.or.cz automatic notification. Contact project admin jim(a)meyering.net
if you want to unsubscribe, or site admin admin(a)repo.or.cz if you receive
no reply.
--
iwhd.git ("image warehouse daemon")
13 years, 7 months
[repo.or.cz] iwhd.git branch master updated: v0.0-119-g32c6ca9
by Jim Meyering
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project iwhd.git.
The branch, master has been updated
via 32c6ca985e228c7db3968a8bdcd4f33006a6f854 (commit)
via ca56bd601ea8e0544c1830ac0ba95c7c76332b05 (commit)
via 9724d076a990c61f39578f1ff828507e0ba195ad (commit)
from a65eb158f5ade6b5e1dda87ba0495612a13d5f36 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
http://repo.or.cz/w/iwhd.git/commit/32c6ca985e228c7db3968a8bdcd4f33006a6f854
commit 32c6ca985e228c7db3968a8bdcd4f33006a6f854
Author: Jim Meyering <meyering(a)redhat.com>
Date: Mon Sep 27 18:29:35 2010 +0200
tests: check for root xml and json
Adjust test not to "cd FS".
diff --git a/t/basic b/t/basic
index 2901229..e4bc0bb 100644
--- a/t/basic
+++ b/t/basic
@@ -15,10 +15,39 @@ cleanup_() { kill $mongo_pid; }
wait_for .1 30 'mongo < /dev/null' || framework_failure_ mongod failed to start
+port=9091
+cat <<EOF > root.xml || framework_failure_
+<api service="image_warehouse" version="$VERSION">
+ <link rel="bucket_factory" href="http://localhost:$port/_new"/>
+ <link rel="provider_list" href="http://localhost:$port/_providers"/>
+ <link rel="bucket" href="http://localhost:$port/b1"/>
+</api>
+EOF
+
+cat <<EOF > root.json || framework_failure_
+{
+ "service": "image_warehouse",
+ "version": "$VERSION",
+ [
+ {
+ "rel": "bucket_factory",
+ "link": "http://localhost:$port/_new"
+ },
+ {
+ "rel": "provider_list",
+ "link": "http://localhost:$port/_providers"
+ },
+ {
+ "rel": "bucket",
+ "link": "http://localhost:$port/b1"
+ }
+ ]
+}
+EOF
+
printf '[{"path": "FS", "type": "fs", "name": "primary"}]n' > iwhd.cfg || fail=1
-port=9091
iwhd -v -p $port -c iwhd.cfg &
iwhd_pid=$!
cleanup_() { kill $mongo_pid $iwhd_pid; }
@@ -27,15 +56,23 @@ cleanup_() { kill $mongo_pid $iwhd_pid; }
wait_for .1 30 "curl http://localhost:$port" || { echo iwhd failed to listen; Exit 1; }
-cd FS || fail=1
-
# Create an empty bucket.
curl -X PUT http://localhost:$port/b1 || fail=1
-test -d b1 || fail=1
+test -d FS/b1 || fail=1
# Create a file in that bucket.
echo foo | curl -T - http://localhost:$port/b1/f1 || fail=1
-test -f b1/f1 || fail=1
-test "$(cat b1/f1)" = foo || fail=1
+test -f FS/b1/f1 || fail=1
+test "$(cat FS/b1/f1)" = foo || fail=1
+
+# Get root; default, then Accept: XML & JSON:
+curl http://localhost:$port > root || fail=1
+compare root root.xml || fail=1
+
+curl -H 'Accept: */xml' http://localhost:$port > root || fail=1
+compare root root.xml || fail=1
+
+curl -H 'Accept: */json' http://localhost:$port > root || fail=1
+compare root root.json || fail=1
Exit $fail
http://repo.or.cz/w/iwhd.git/commit/ca56bd601ea8e0544c1830ac0ba95c7c76332b05
commit ca56bd601ea8e0544c1830ac0ba95c7c76332b05
Author: Jim Meyering <meyering(a)redhat.com>
Date: Mon Sep 27 18:24:11 2010 +0200
tests: remove unnecessary "kill..." stmt, now it's done via trap
diff --git a/t/basic b/t/basic
index 55cd8fc..2901229 100644
--- a/t/basic
+++ b/t/basic
@@ -29,13 +29,13 @@ wait_for .1 30 "curl http://localhost:$port"
cd FS || fail=1
+# Create an empty bucket.
curl -X PUT http://localhost:$port/b1 || fail=1
test -d b1 || fail=1
+# Create a file in that bucket.
echo foo | curl -T - http://localhost:$port/b1/f1 || fail=1
test -f b1/f1 || fail=1
test "$(cat b1/f1)" = foo || fail=1
-kill $mongo_pid $iwhd_pid
-
Exit $fail
http://repo.or.cz/w/iwhd.git/commit/9724d076a990c61f39578f1ff828507e0ba195ad
commit 9724d076a990c61f39578f1ff828507e0ba195ad
Author: Jim Meyering <meyering(a)redhat.com>
Date: Mon Sep 27 16:57:57 2010 +0200
don't deref NULL on fdopen failure; plug a FILE-sized leak
* proxy.c (proxy_repl_cons, proxy_repl_prod): Handle fdopen failure
and don't leak a FILE buffer.
diff --git a/proxy.c b/proxy.c
index 0a0d964..5aebcae 100644
--- a/proxy.c
+++ b/proxy.c
@@ -349,6 +349,11 @@ proxy_repl_prod (void *ctx)
char *myurl;
int chars;
+ if (fp == NULL) {
+ error(0, errno, "%s: fdopen failed", __func__);
+ return NULL;
+ }
+
chars = snprintf(addr,ADDR_SIZE,
"http://%s:%u/%s",proxy_host,proxy_port,item->path);
if (chars >= ADDR_SIZE) {
@@ -389,7 +394,7 @@ proxy_repl_prod (void *ctx)
done:
DPRINTF("%s returningn",__func__);
/* Closing should signal to the consumer that we're finished. */
- close(item->pipes[1]);
+ fclose(fp);
return NULL;
}
@@ -515,6 +520,11 @@ proxy_repl_cons (void *ctx)
char *myurl;
int chars;
+ if (fp == NULL) {
+ error(0, errno, "%s: fdopen failed", __func__);
+ return THREAD_FAILED;
+ }
+
server = json_array_get(config,item->server);
s_host = json_string_value(json_object_get(server,"host"));
s_port = json_integer_value(json_object_get(server,"port"));
@@ -608,7 +618,7 @@ proxy_repl_cons (void *ctx)
}
DPRINTF("%s returningn",__func__);
- close(item->pipes[0]);
+ fclose(fp);
meta_got_copy(bucket,key,s_name);
free(myurl);
return NULL;
-----------------------------------------------------------------------
Summary of changes:
proxy.c | 14 ++++++++++++--
t/basic | 51 ++++++++++++++++++++++++++++++++++++++++++++-------
2 files changed, 56 insertions(+), 9 deletions(-)
repo.or.cz automatic notification. Contact project admin jim(a)meyering.net
if you want to unsubscribe, or site admin admin(a)repo.or.cz if you receive
no reply.
--
iwhd.git ("image warehouse daemon")
13 years, 7 months
[repo.or.cz] iwhd.git branch master updated: v0.0-116-ga65eb15
by Jim Meyering
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project iwhd.git.
The branch, master has been updated
via a65eb158f5ade6b5e1dda87ba0495612a13d5f36 (commit)
from ab3e12cc1a3946af2cc1e0f9bde39d73f01c4c24 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
http://repo.or.cz/w/iwhd.git/commit/a65eb158f5ade6b5e1dda87ba0495612a13d5f36
commit a65eb158f5ade6b5e1dda87ba0495612a13d5f36
Author: Jim Meyering <meyering(a)redhat.com>
Date: Mon Sep 27 18:24:11 2010 +0200
tests: specify "path", now that it's required
Adjust test, now that buckets are created under ./FS
diff --git a/t/basic b/t/basic
index 58f5297..55cd8fc 100644
--- a/t/basic
+++ b/t/basic
@@ -15,12 +15,8 @@ cleanup_() { kill $mongo_pid; }
wait_for .1 30 'mongo < /dev/null' || framework_failure_ mongod failed to start
-# FIXME: currently iwhd creates buckets in the working dir.
-# Once that is fixed, we won't need this "cd".
-cd iwhd
-
-# "path": "FS"
-printf '[ { "type": "fs", "name": "primary" } ]n' > iwhd.cfg || fail=1
+printf '[{"path": "FS", "type": "fs", "name": "primary"}]n' + > iwhd.cfg || fail=1
port=9091
iwhd -v -p $port -c iwhd.cfg &
@@ -31,6 +27,8 @@ cleanup_() { kill $mongo_pid $iwhd_pid; }
wait_for .1 30 "curl http://localhost:$port" || { echo iwhd failed to listen; Exit 1; }
+cd FS || fail=1
+
curl -X PUT http://localhost:$port/b1 || fail=1
test -d b1 || fail=1
-----------------------------------------------------------------------
Summary of changes:
t/basic | 10 ++++------
1 files changed, 4 insertions(+), 6 deletions(-)
repo.or.cz automatic notification. Contact project admin jim(a)meyering.net
if you want to unsubscribe, or site admin admin(a)repo.or.cz if you receive
no reply.
--
iwhd.git ("image warehouse daemon")
13 years, 7 months
[repo.or.cz] iwhd.git branch master updated: v0.0-115-gab3e12c
by Jeff Darcy
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project iwhd.git.
The branch, master has been updated
via ab3e12cc1a3946af2cc1e0f9bde39d73f01c4c24 (commit)
via 2b2804d90e7837718303b3e119f00d5e00eb9217 (commit)
via 53982480742f385905cb80eaccd06722d0f202c4 (commit)
from 00fb9bc78433a89a3869c274e959d8728c6e1b37 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
http://repo.or.cz/w/iwhd.git/commit/ab3e12cc1a3946af2cc1e0f9bde39d73f01c4c24
commit ab3e12cc1a3946af2cc1e0f9bde39d73f01c4c24
Author: Jeff Darcy <jdarcy(a)redhat.com>
Date: Mon Sep 27 20:35:03 2010 -0400
Just use chdir instead of chroot+chdir, per email convo.
diff --git a/backend.c b/backend.c
index a8e82bd..fce5bb9 100644
--- a/backend.c
+++ b/backend.c
@@ -772,10 +772,6 @@ void
fs_init (void)
{
DPRINTF("changing directory to %sn",local_path);
- if (chroot(local_path) < 0) {
- error(0,errno,"chroot failed, unsafe to continuen");
- exit(!0); /* Value doesn't matter, as long as it's not zero. */
- }
if (chdir(local_path) < 0) {
error(0,errno,"chdir failed, unsafe to continuen");
exit(!0); /* Value doesn't matter, as long as it's not zero. */
http://repo.or.cz/w/iwhd.git/commit/2b2804d90e7837718303b3e119f00d5e00eb9217
commit 2b2804d90e7837718303b3e119f00d5e00eb9217
Merge: 5398248 00fb9bc
Author: Jeff Darcy <jdarcy(a)redhat.com>
Date: Mon Sep 27 20:24:23 2010 -0400
Merge branch 'master' of ssh://orcz/srv/git/iwhd
http://repo.or.cz/w/iwhd.git/commit/53982480742f385905cb80eaccd06722d0f202c4
commit 53982480742f385905cb80eaccd06722d0f202c4
Author: Jeff Darcy <jdarcy(a)redhat.com>
Date: Mon Sep 27 11:17:03 2010 -0400
Require a "path" parameter for filesystem back ends.
This includes checking for existence of the parameter, doing a chroot/chdir
in fs_init, and disallowing sneaky "../" escapes. The path can be relative
(handy for development) but you shouldn't be able to traverse out of it.
diff --git a/backend.c b/backend.c
index b35cac2..a8e82bd 100644
--- a/backend.c
+++ b/backend.c
@@ -771,6 +771,15 @@ curl_register (my_state *ms, const provider_t *prov, const char *next,
void
fs_init (void)
{
+ DPRINTF("changing directory to %sn",local_path);
+ if (chroot(local_path) < 0) {
+ error(0,errno,"chroot failed, unsafe to continuen");
+ exit(!0); /* Value doesn't matter, as long as it's not zero. */
+ }
+ if (chdir(local_path) < 0) {
+ error(0,errno,"chdir failed, unsafe to continuen");
+ exit(!0); /* Value doesn't matter, as long as it's not zero. */
+ }
}
/* Start an FS _producer_. */
diff --git a/iwh.h b/iwh.h
index 910d85c..05c0586 100644
--- a/iwh.h
+++ b/iwh.h
@@ -39,13 +39,14 @@
GLOBAL(int, verbose, 0);
GLOBAL(char *, cfg_file, NULL);
-GLOBAL(const char *, proxy_host, NULL); /* always */
+GLOBAL(const char *, proxy_host, NULL); /* repod/S3 */
GLOBAL(unsigned short, proxy_port, MY_PORT+1); /* repod/S3 */
GLOBAL(const char *, proxy_key, "foo"); /* S3 only */
GLOBAL(const char *, proxy_secret, "bar"); /* S3 only */
GLOBAL(const char *, master_host, NULL);
GLOBAL(unsigned short, master_port, MY_PORT);
GLOBAL(unsigned int, s3mode, 0); /* repod/S3 */
+GLOBAL(const char *, local_path, "/tmp"); /* FS */
GLOBAL(const char *, db_host, "localhost");
GLOBAL(unsigned short, db_port, 27017);
GLOBAL(char *, me, "here");
diff --git a/proxy.c b/proxy.c
index ba34b8e..0a0d964 100644
--- a/proxy.c
+++ b/proxy.c
@@ -63,6 +63,13 @@
#define SVC_ACC_SIZE 128
#define HEADER_SIZE 64
+/* Bitfield for things to check in validate_server */
+#define NEED_NONE 0
+#define NEED_SERVER 0x00000001
+#define NEED_CREDS 0x00000002
+#define NEED_PATH 0x00000004
+#define NEED_ALL ~0
+
extern backend_func_tbl bad_func_tbl;
extern backend_func_tbl s3_func_tbl;
extern backend_func_tbl curl_func_tbl;
@@ -103,7 +110,7 @@ validate_server (unsigned int i)
json_t *elem;
const char *name;
const char *type;
- enum { NEED_NONE, NEED_SERVER, NEED_ALL } needs = NEED_ALL;
+ unsigned int needs = NEED_ALL;
server = json_array_get(config,i);
if (!json_is_object(server)) {
@@ -126,20 +133,20 @@ validate_server (unsigned int i)
type = json_string_value(elem);
if (!strcasecmp(type,"s3") || !strcasecmp(type,"cf")) {
- needs = NEED_ALL;
+ needs = NEED_SERVER | NEED_CREDS;
}
else if (!strcasecmp(type,"http")) {
needs = NEED_SERVER;
}
else if (!strcasecmp(type,"fs")) {
- needs = NEED_NONE;
+ needs = NEED_PATH;
}
else {
error(0,0,"config elem %u (%s): bad typen",i,name);
return 0;
}
- if (needs != NEED_NONE) {
+ if (needs & NEED_SERVER) {
elem = json_object_get(server,"host");
if (!json_is_string(elem)) {
error(0,0,"config elem %u (%s): missing hostn",
@@ -154,17 +161,26 @@ validate_server (unsigned int i)
}
}
- if (needs == NEED_ALL) {
+ if (needs & NEED_CREDS) {
elem = json_object_get(server,"key");
if (!json_is_string(elem)) {
- error(0,0,"config elem %u (%s): missing S3 keyn",
+ error(0,0,"config elem %u (%s): missing keyn",
i, name);
return 0;
}
elem = json_object_get(server,"secret");
if (!json_is_string(elem)) {
error(0,0,
- "config elem %u (%s): missing S3 secretn",
+ "config elem %u (%s): missing secretn",
+ i, name);
+ return 0;
+ }
+ }
+
+ if (needs & NEED_PATH) {
+ elem = json_object_get(server,"path");
+ if (!json_is_string(elem)) {
+ error(0,0,"config elem %u (%s): missing pathn",
i, name);
return 0;
}
@@ -198,6 +214,10 @@ set_config (void)
s3mode = 0;
}
}
+ else {
+ local_path = json_string_value(
+ json_object_get(server,"path"));
+ }
return (char *)json_string_value(json_object_get(server,"name"));
}
@@ -947,6 +967,7 @@ get_provider (int i, provider_t *out)
/* TBD: change key/secret field names to username/password */
out->username = json_string_value(json_object_get(server,"key"));
out->password = json_string_value(json_object_get(server,"secret"));
+ out->path = json_string_value(json_object_get(server,"path"));
/* Use empty strings instead of NULL. */
if (!out->username) out->username = "";
diff --git a/proxy.h b/proxy.h
index 0ff5f52..3004758 100644
--- a/proxy.h
+++ b/proxy.h
@@ -26,6 +26,7 @@ typedef struct _provider {
int port;
const char *username;
const char *password;
+ const char *path;
backend_func_tbl *func_tbl;
} provider_t;
diff --git a/rest.c b/rest.c
index 498c8da..8e0602a 100644
--- a/rest.c
+++ b/rest.c
@@ -1545,6 +1545,12 @@ parse_url (const char *url, my_state *ms)
unsigned short eindex;
char *parts[URL_INVAL];
+ if (strstr(url,"../")) {
+ /* Naughty, naughty. Never a good reason to allow this. */
+ DPRINTF("Rejecting ../ in path.n");
+ return URL_INVAL;
+ }
+
eindex = URL_ROOT;
parts[URL_BUCKET] = ms->bucket;
parts[URL_OBJECT] = ms->key;
-----------------------------------------------------------------------
Summary of changes:
backend.c | 5 +++++
iwh.h | 3 ++-
proxy.c | 35 ++++++++++++++++++++++++++++-------
proxy.h | 1 +
rest.c | 6 ++++++
5 files changed, 42 insertions(+), 8 deletions(-)
repo.or.cz automatic notification. Contact project admin jim(a)meyering.net
if you want to unsubscribe, or site admin admin(a)repo.or.cz if you receive
no reply.
--
iwhd.git ("image warehouse daemon")
13 years, 7 months
[repo.or.cz] iwhd.git branch master updated: v0.0-112-g00fb9bc
by Jim Meyering
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project iwhd.git.
The branch, master has been updated
via 00fb9bc78433a89a3869c274e959d8728c6e1b37 (commit)
from bba237a9d3d15caf36736a28ec0669329bace040 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
http://repo.or.cz/w/iwhd.git/commit/00fb9bc78433a89a3869c274e959d8728c6e1b37
commit 00fb9bc78433a89a3869c274e959d8728c6e1b37
Author: Jim Meyering <meyering(a)redhat.com>
Date: Mon Sep 27 16:12:27 2010 +0200
rest.c: plug a leak
* rest.c (proxy_create_bucket): Free "ms" here, too, so as not to
leak the state buffer allocated and dispatched in access_handler.
496 bytes in 1 blocks are definitely lost in loss record 270 of 288
at 0x4A0515D: malloc (vg_replace_malloc.c:195)
by 0x42700C: access_handler (rest.c:1603)
by 0x4E3BB38: ??? (in /usr/lib64/libmicrohttpd.so.5.2.1)
by 0x4E3D087: ??? (in /usr/lib64/libmicrohttpd.so.5.2.1)
by 0x4E3F9F9: ??? (in /usr/lib64/libmicrohttpd.so.5.2.1)
by 0x31BB407760: start_thread (pthread_create.c:301)
by 0x31BA8E151C: clone (clone.S:115)
diff --git a/rest.c b/rest.c
index 498c8da..4e784fc 100644
--- a/rest.c
+++ b/rest.c
@@ -1503,6 +1503,7 @@ proxy_create_bucket (void *cctx, struct MHD_Connection *conn, const char *url,
MHD_queue_response(conn,rc,resp);
MHD_destroy_response(resp);
+ free_ms(ms);
return MHD_YES;
}
-----------------------------------------------------------------------
Summary of changes:
rest.c | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
repo.or.cz automatic notification. Contact project admin jim(a)meyering.net
if you want to unsubscribe, or site admin admin(a)repo.or.cz if you receive
no reply.
--
iwhd.git ("image warehouse daemon")
13 years, 7 months
[repo.or.cz] iwhd.git branch master updated: v0.0-111-gbba237a
by Jim Meyering
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project iwhd.git.
The branch, master has been updated
via bba237a9d3d15caf36736a28ec0669329bace040 (commit)
via 349f72d5faab412250d83d8c0bca5e7d620c46f3 (commit)
from 94430296b2b7a2c5722e1290fd05e7e494d63baf (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
http://repo.or.cz/w/iwhd.git/commit/bba237a9d3d15caf36736a28ec0669329bace040
commit bba237a9d3d15caf36736a28ec0669329bace040
Author: Jim Meyering <meyering(a)redhat.com>
Date: Mon Sep 27 15:52:06 2010 +0200
use calloc in place of malloc+memset-0
diff --git a/rest.c b/rest.c
index 36c318f..498c8da 100644
--- a/rest.c
+++ b/rest.c
@@ -1600,11 +1600,10 @@ access_handler (void *cctx, struct MHD_Connection *conn, const char *url,
data,data_size,rctx);
}
- ms = malloc(sizeof(my_state));
+ ms = calloc(sizeof(*ms), 1);
if (!ms) {
return MHD_NO;
}
- memset(ms,0,sizeof(*ms));
utype = parse_url(url,ms);
http://repo.or.cz/w/iwhd.git/commit/349f72d5faab412250d83d8c0bca5e7d620c46f3
commit 349f72d5faab412250d83d8c0bca5e7d620c46f3
Author: Jim Meyering <meyering(a)redhat.com>
Date: Tue Sep 21 20:57:36 2010 +0200
tests: add test framework and first test
diff --git a/Makefile.am b/Makefile.am
index 6a22e11..20f941e 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -18,6 +18,7 @@ AM_CFLAGS = -W -Wall -Wextra -Wno-unused -Wformat-security
AM_CPPFLAGS = -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include
+SUBDIRS = t
ACLOCAL_AMFLAGS = -I ax
bin_PROGRAMS = iwhd
diff --git a/configure.ac b/configure.ac
index 8f5a0ac..59d76fe 100644
--- a/configure.ac
+++ b/configure.ac
@@ -90,5 +90,5 @@ AC_FUNC_MALLOC
AC_FUNC_REALLOC
AC_CHECK_FUNCS([gettimeofday memmove memset strcasecmp strdup strndup strtoul])
-AC_CONFIG_FILES([Makefile])
+AC_CONFIG_FILES([Makefile t/Makefile])
AC_OUTPUT
diff --git a/t/Makefile.am b/t/Makefile.am
new file mode 100644
index 0000000..239d635
--- /dev/null
+++ b/t/Makefile.am
@@ -0,0 +1,63 @@
+## Process this file with automake to create Makefile.in
+# Copyright 2010 Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+TESTS = + basic
+
+EXTRA_DIST = + $(TESTS) + init.cfg + init.sh
+
+TESTS_ENVIRONMENT = + tmp__=$$TMPDIR; test -d "$$tmp__" || tmp__=.; + TMPDIR=$$tmp__; export TMPDIR; + exec 9>&2; + shell_or_perl_() { + if grep '^#!/usr/bin/perl' "$$1" > /dev/null; then + if $(PERL) -e 'use warnings' > /dev/null 2>&1; then + grep '^#!/usr/bin/perl -T' "$$1" > /dev/null && T_=T || T_=; + $(PERL) -w$$T_ -I$(srcdir) -MCoreutils + -M"CuTmpdir qw($$f)" -- "$$1"; + else + echo 1>&2 "$$tst: configure did not find a usable version of Perl," + "so skipping this test"; + (exit 77); + fi; + else + $(SHELL) "$$1"; + fi; + }; + export + LC_ALL=C + VERSION=$(VERSION) + abs_top_builddir='$(abs_top_builddir)' + abs_top_srcdir='$(abs_top_srcdir)' + abs_srcdir='$(abs_srcdir)' + built_programs='$(built_programs)' + srcdir='$(srcdir)' + top_srcdir='$(top_srcdir)' + CC='$(CC)' + IWHD_TEST_NAME=`echo $$tst|sed 's,^./,,;s,/,-,g'` + MALLOC_PERTURB_=$(MALLOC_
PERTURB_); export MALLOC_PERTURB_ + PACKAGE_BUGREPORT='$(PACKAGE_BUGREPORT)' + PACKAGE_VERSION=$(PACKAGE_VERSION) + PERL='$(PERL)' + SHELL='$(SHELL)' + PATH='$(abs_top_builddir)$(PATH_SEPARATOR)'"$$PATH" + ; shell_or_perl_
+
+VERBOSE = yes
diff --git a/t/basic b/t/basic
new file mode 100644
index 0000000..58f5297
--- /dev/null
+++ b/t/basic
@@ -0,0 +1,43 @@
+#!/bin/sh
+# Test basic functionality.
+
+. "${srcdir=.}/init.sh"; path_prepend_ ..
+
+mkdir FS mongod iwhd || framework_failure_ mkdir failed
+
+# FIXME: start this only if there's not a working one already running, or
+# probably better, start this one unconditionally and make iwhd use it.
+mongod --pidfilepath mongod/pid --dbpath mongod > mongod.log 2>&1 &
+mongo_pid=$!
+cleanup_() { kill $mongo_pid; }
+
+# Wait for up to 3 seconds for mongod to begin listening.
+wait_for .1 30 'mongo < /dev/null' + || framework_failure_ mongod failed to start
+
+# FIXME: currently iwhd creates buckets in the working dir.
+# Once that is fixed, we won't need this "cd".
+cd iwhd
+
+# "path": "FS"
+printf '[ { "type": "fs", "name": "primary" } ]n' > iwhd.cfg || fail=1
+
+port=9091
+iwhd -v -p $port -c iwhd.cfg &
+iwhd_pid=$!
+cleanup_() { kill $mongo_pid $iwhd_pid; }
+
+# Wait for up to 3 seconds for iwhd to begin listening on $port.
+wait_for .1 30 "curl http://localhost:$port" + || { echo iwhd failed to listen; Exit 1; }
+
+curl -X PUT http://localhost:$port/b1 || fail=1
+test -d b1 || fail=1
+
+echo foo | curl -T - http://localhost:$port/b1/f1 || fail=1
+test -f b1/f1 || fail=1
+test "$(cat b1/f1)" = foo || fail=1
+
+kill $mongo_pid $iwhd_pid
+
+Exit $fail
diff --git a/t/init.cfg b/t/init.cfg
new file mode 100644
index 0000000..9b8a9fa
--- /dev/null
+++ b/t/init.cfg
@@ -0,0 +1,25 @@
+# This file is sourced by init.sh, *before* its initialization.
+
+# This goes hand in hand with the "exec 9>&2;" in Makefile.am's
+# TESTS_ENVIRONMENT definition.
+stderr_fileno_=9
+
+wait_for()
+{
+ local sleep_seconds=$1
+ local max_n_sleeps=$2
+ local cmd=$3
+ case $max_n_sleeps in
+ [0-9]*);; *) echo invalid max_n_sleeps $max_n_sleeps 1>&2; exit 1;;
+ esac
+ case $sleep_seconds in
+ [0-9]*|.[0-9]*);; *) echo invalid sleep interval $sleep_seconds 1>&2; exit 1;;
+ esac
+ local i=0
+ while :; do
+ eval "$cmd" && return 0
+ sleep $sleep_seconds
+ i=$(expr $i + 1)
+ test $i = $max_n_sleeps && return 1
+ done
+}
diff --git a/t/init.sh b/t/init.sh
new file mode 100644
index 0000000..a57de77
--- /dev/null
+++ b/t/init.sh
@@ -0,0 +1,465 @@
+# source this file; set up for tests
+
+# Copyright (C) 2009, 2010 Free Software Foundation, Inc.
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# Using this file in a test
+# =========================
+#
+# The typical skeleton of a test looks like this:
+#
+# #!/bin/sh
+# . "${srcdir=.}/init.sh"; path_prepend_ .
+# Execute some commands.
+# Note that these commands are executed in a subdirectory, therefore you
+# need to prepend "../" to relative filenames in the build directory.
+# Note that the "path_prepend_ ." is useful only if the body of your
+# test invokes programs residing in the initial directory.
+# For example, if the programs you want to test are in src/, and this test
+# script is named tests/test-1, then you would use "path_prepend_ ../src",
+# or perhaps export PATH='$(abs_top_builddir)/src$(PATH_SEPARATOR)'"$$PATH"
+# to all tests via automake's TESTS_ENVIRONMENT.
+# Set the exit code 0 for success, 77 for skipped, or 1 or other for failure.
+# Use the skip_ and fail_ functions to print a diagnostic and then exit
+# with the corresponding exit code.
+# Exit $?
+
+# Executing a test that uses this file
+# ====================================
+#
+# Running a single test:
+# $ make check TESTS=test-foo.sh
+#
+# Running a single test, with verbose output:
+# $ make check TESTS=test-foo.sh VERBOSE=yes
+#
+# Running a single test, with single-stepping:
+# 1. Go into a sub-shell:
+# $ bash
+# 2. Set relevant environment variables from TESTS_ENVIRONMENT in the
+# Makefile:
+# $ export srcdir=../../tests # this is an example
+# 3. Execute the commands from the test, copy&pasting them one by one:
+# $ . "$srcdir/init.sh"; path_prepend_ .
+# ...
+# 4. Finally
+# $ exit
+
+ME_=`expr "./$0" : '.*/(.*)$'`
+
+# We use a trap below for cleanup. This requires us to go through
+# hoops to get the right exit status transported through the handler.
+# So use `Exit STATUS' instead of `exit STATUS' inside of the tests.
+# Turn off errexit here so that we don't trip the bug with OSF1/Tru64
+# sh inside this function.
+Exit () { set +e; (exit $1); exit $1; }
+
+# Print warnings (e.g., about skipped and failed tests) to this file number.
+# Override by defining to say, 9, in init.cfg, and putting say,
+# "export ...ENVVAR_SETTINGS...; exec 9>&2; $(SHELL)" in the definition
+# of TESTS_ENVIRONMENT in your tests/Makefile.am file.
+# This is useful when using automake's parallel tests mode, to print
+# the reason for skip/failure to console, rather than to the .log files.
+: ${stderr_fileno_=2}
+
+warn_() { echo "$@" 1>&$stderr_fileno_; }
+fail_() { warn_ "$ME_: failed test: $@"; Exit 1; }
+skip_() { warn_ "$ME_: skipped test: $@"; Exit 77; }
+framework_failure_() { warn_ "$ME_: set-up failure: $@"; Exit 99; }
+
+# Sanitize this shell to POSIX mode, if possible.
+DUALCASE=1; export DUALCASE
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+ emulate sh
+ NULLCMD=:
+ alias -g '${1+"$@"}'='"$@"'
+ setopt NO_GLOB_SUBST
+else
+ case `(set -o) 2>/dev/null` in
+ *posix*) set -o posix ;;
+ esac
+fi
+
+# We require $(...) support unconditionally.
+# We require a few additional shell features only when $EXEEXT is nonempty,
+# in order to support automatic $EXEEXT emulation:
+# - hyphen-containing alias names
+# - we prefer to use ${var#...} substitution, rather than having
+# to work around lack of support for that feature.
+# The following code attempts to find a shell with support for these features.
+# If the current shell passes the test, we're done. Otherwise, test other
+# shells until we find one that passes. If one is found, re-exec it.
+# If no acceptable shell is found, skip the current test.
+#
+# The "...set -x; P=1 true 2>err..." test is to disqualify any shell that
+# emits "P=1" into err, as /bin/sh from SunOS 5.11 and OpenBSD 4.7 do.
+#
+# Use "9" to indicate success (rather than 0), in case some shell acts
+# like Solaris 10's /bin/sh but exits successfully instead of with status 2.
+
+# Eval this code in a subshell to determine a shell's suitability.
+# 10 - passes all tests; ok to use
+# 9 - ok, but enabling "set -x" corrupts application stderr; prefer higher score
+# ? - not ok
+gl_shell_test_script_='
+test $(echo y) = y || exit 1
+score_=10
+if test "$VERBOSE" = yes; then
+ test -n "$( (exec 3>&1; set -x; P=1 true 2>&3) 2> /dev/null)" && score_=9
+fi
+test -z "$EXEEXT" && exit $score_
+shopt -s expand_aliases
+alias a-b="echo zoo"
+v=abx
+ test ${v%x} = ab + && test ${v#a} = bx + && test $(a-b) = zoo + && exit $score_
+'
+
+if test "x$1" = "x--no-reexec"; then
+ shift
+else
+ # Assume a working shell. Export to subshells (setup_ needs this).
+ gl_set_x_corrupts_stderr_=false
+ export gl_set_x_corrupts_stderr_
+
+ # Record the first marginally acceptable shell.
+ marginal_=
+
+ # Search for a shell that meets our requirements.
+ for re_shell_ in __current__ "${CONFIG_SHELL:-no_shell}" + /bin/sh bash dash zsh pdksh fail
+ do
+ test "$re_shell_" = no_shell && continue
+
+ # If we've made it all the way to the sentinel, "fail" without
+ # finding even a marginal shell, skip this test.
+ if test "$re_shell_" = fail; then
+ test -z "$marginal_" && skip_ failed to find an adequate shell
+ re_shell_=$marginal_
+ break
+ fi
+
+ # When testing the current shell, simply "eval" the test code.
+ # Otherwise, run it via $re_shell_ -c ...
+ if test "$re_shell_" = __current__; then
+ # 'eval'ing this code makes Solaris 10's /bin/sh exit with
+ # $? set to 2. It does not evaluate any of the code after the
+ # "unexpected" first `('. Thus, we must run it in a subshell.
+ ( eval "$gl_shell_test_script_" ) > /dev/null 2>&1
+ else
+ "$re_shell_" -c "$gl_shell_test_script_" 2>/dev/null
+ fi
+
+ st_=$?
+
+ # $re_shell_ works just fine. Use it.
+ test $st_ = 10 && break
+
+ # If this is our first marginally acceptable shell, remember it.
+ if test "$st_:$marginal_" = 9: ; then
+ marginal_="$re_shell_"
+ gl_set_x_corrupts_stderr_=true
+ fi
+ done
+
+ if test "$re_shell_" != __current__; then
+ # Found a usable shell. Preserve -v and -x.
+ case $- in
+ *v*x* | *x*v*) opts_=-vx ;;
+ *v*) opts_=-v ;;
+ *x*) opts_=-x ;;
+ *) opts_= ;;
+ esac
+ exec "$re_shell_" $opts_ "$0" --no-reexec "$@"
+ echo "$ME_: exec failed" 1>&2
+ exit 127
+ fi
+fi
+
+test -n "$EXEEXT" && shopt -s expand_aliases
+
+# Enable glibc's malloc-perturbing option.
+# This is cheap and useful for exposing code that depends on the fact that
+# malloc-related functions often return memory that is mostly zeroed.
+# If you have the time and cycles, use valgrind to do an even better job.
+: ${MALLOC_PERTURB_=87}
+export MALLOC_PERTURB_
+
+# This is a stub function that is run upon trap (upon regular exit and
+# interrupt). Override it with a per-test function, e.g., to unmount
+# a partition, or to undo any other global state changes.
+cleanup_() { :; }
+
+if ( diff --version < /dev/null 2>&1 | grep GNU ) > /dev/null 2>&1; then
+ compare() { diff -u "$@"; }
+elif ( cmp --version < /dev/null 2>&1 | grep GNU ) > /dev/null 2>&1; then
+ compare() { cmp -s "$@"; }
+else
+ compare() { cmp "$@"; }
+fi
+
+# An arbitrary prefix to help distinguish test directories.
+testdir_prefix_() { printf gt; }
+
+# Run the user-overridable cleanup_ function, remove the temporary
+# directory and exit with the incoming value of $?.
+remove_tmp_()
+{
+ __st=$?
+ cleanup_
+ # cd out of the directory we're about to remove
+ cd "$initial_cwd_" || cd / || cd /tmp
+ chmod -R u+rwx "$test_dir_"
+ # If removal fails and exit status was to be 0, then change it to 1.
+ rm -rf "$test_dir_" || { test $__st = 0 && __st=1; }
+ exit $__st
+}
+
+# Given a directory name, DIR, if every entry in it that matches *.exe
+# contains only the specified bytes (see the case stmt below), then print
+# a space-separated list of those names and return 0. Otherwise, don't
+# print anything and return 1. Naming constraints apply also to DIR.
+find_exe_basenames_()
+{
+ feb_dir_=$1
+ feb_fail_=0
+ feb_result_=
+ feb_sp_=
+ for feb_file_ in $feb_dir_/*.exe; do
+ # If there was no *.exe file, or there existed a file named "*.exe" that
+ # was deleted between the above glob expansion and the existence test
+ # below, just skip it.
+ test "x$feb_file_" = "x$feb_dir_/*.exe" && test ! -f "$feb_file_" + && continue
+ case $feb_file_ in
+ *[!-a-zA-Z/0-9_.+]*) feb_fail_=1; break;;
+ *) # Remove leading file name components as well as the .exe suffix.
+ feb_file_=${feb_file_##*/}
+ feb_file_=${feb_file_%.exe}
+ feb_result_="$feb_result_$feb_sp_$feb_file_";;
+ esac
+ feb_sp_=' '
+ done
+ test $feb_fail_ = 0 && printf %s "$feb_result_"
+ return $feb_fail_
+}
+
+# Consider the files in directory, $1.
+# For each file name of the form PROG.exe, create an alias named
+# PROG that simply invokes PROG.exe, then return 0. If any selected
+# file name or the directory name, $1, contains an unexpected character,
+# define no alias and return 1.
+create_exe_shims_()
+{
+ case $EXEEXT in
+ '') return 0 ;;
+ .exe) ;;
+ *) echo "$0: unexpected $EXEEXT value: $EXEEXT" 1>&2; return 1 ;;
+ esac
+
+ base_names_=`find_exe_basenames_ $1` + || { echo "$0 (exe_shim): skipping directory: $1" 1>&2; return 1; }
+
+ if test -n "$base_names_"; then
+ for base_ in $base_names_; do
+ alias "$base_"="$base_$EXEEXT"
+ done
+ fi
+
+ return 0
+}
+
+# Use this function to prepend to PATH an absolute name for each
+# specified, possibly-$initial_cwd_-relative, directory.
+path_prepend_()
+{
+ while test $# != 0; do
+ path_dir_=$1
+ case $path_dir_ in
+ '') fail_ "invalid path dir: '$1'";;
+ /*) abs_path_dir_=$path_dir_;;
+ *) abs_path_dir_=`cd "$initial_cwd_/$path_dir_" && echo "$PWD"` + || fail_ "invalid path dir: $path_dir_";;
+ esac
+ case $abs_path_dir_ in
+ *:*) fail_ "invalid path dir: '$abs_path_dir_'";;
+ esac
+ PATH="$abs_path_dir_:$PATH"
+
+ # Create an alias, FOO, for each FOO.exe in this directory.
+ create_exe_shims_ "$abs_path_dir_" + || fail_ "something failed (above): $abs_path_dir_"
+ shift
+ done
+ export PATH
+}
+
+setup_()
+{
+ if test "$VERBOSE" = yes; then
+ # Test whether set -x may cause the selected shell to corrupt an
+ # application's stderr. Many do, including zsh-4.3.10 and the /bin/sh
+ # from SunOS 5.11, OpenBSD 4.7 and Irix 5.x and 6.5.
+ # If enabling verbose output this way would cause trouble, simply
+ # issue a warning and refrain.
+ if $gl_set_x_corrupts_stderr_; then
+ warn_ "using SHELL=$SHELL with 'set -x' corrupts stderr"
+ else
+ set -x
+ fi
+ fi
+
+ initial_cwd_=$PWD
+
+ pfx_=`testdir_prefix_`
+ test_dir_=`mktempd_ "$initial_cwd_" "$pfx_-$ME_.XXXX"` + || fail_ "failed to create temporary directory in $initial_cwd_"
+ cd "$test_dir_"
+
+ # This trap statement, along with a trap on 0 below, ensure that the
+ # temporary directory, $test_dir_, is removed upon exit as well as
+ # upon receipt of any of the listed signals.
+ for sig_ in 1 2 3 13 15; do
+ eval "trap 'Exit $(expr $sig_ + 128)' $sig_"
+ done
+}
+
+# Create a temporary directory, much like mktemp -d does.
+# Written by Jim Meyering.
+#
+# Usage: mktempd_ /tmp phoey.XXXXXXXXXX
+#
+# First, try to use the mktemp program.
+# Failing that, we'll roll our own mktemp-like function:
+# - try to get random bytes from /dev/urandom
+# - failing that, generate output from a combination of quickly-varying
+# sources and gzip. Ignore non-varying gzip header, and extract
+# "random" bits from there.
+# - given those bits, map to file-name bytes using tr, and try to create
+# the desired directory.
+# - make only $MAX_TRIES_ attempts
+
+# Helper function. Print $N pseudo-random bytes from a-zA-Z0-9.
+rand_bytes_()
+{
+ n_=$1
+
+ # Maybe try openssl rand -base64 $n_prime_|tr '+/=012' abcd first?
+ # But if they have openssl, they probably have mktemp, too.
+
+ chars_=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
+ dev_rand_=/dev/urandom
+ if test -r "$dev_rand_"; then
+ # Note: 256-length($chars_) == 194; 3 copies of $chars_ is 186 + 8 = 194.
+ dd ibs=$n_ count=1 if=$dev_rand_ 2>/dev/null + | LC_ALL=C tr -c $chars_ 01234567$chars_$chars_$chars_
+ return
+ fi
+
+ n_plus_50_=`expr $n_ + 50`
+ cmds_='date; date +%N; free; who -a; w; ps auxww; ps ef; netstat -n'
+ data_=` (eval "$cmds_") 2>&1 | gzip `
+
+ # Ensure that $data_ has length at least 50+$n_
+ while :; do
+ len_=`echo "$data_"|wc -c`
+ test $n_plus_50_ -le $len_ && break;
+ data_=` (echo "$data_"; eval "$cmds_") 2>&1 | gzip `
+ done
+
+ echo "$data_" + | dd bs=1 skip=50 count=$n_ 2>/dev/null + | LC_ALL=C tr -c $chars_ 01234567$chars_$chars_$chars_
+}
+
+mktempd_()
+{
+ case $# in
+ 2);;
+ *) fail_ "Usage: $ME DIR TEMPLATE";;
+ esac
+
+ destdir_=$1
+ template_=$2
+
+ MAX_TRIES_=4
+
+ # Disallow any trailing slash on specified destdir:
+ # it would subvert the post-mktemp "case"-based destdir test.
+ case $destdir_ in
+ /) ;;
+ */) fail_ "invalid destination dir: remove trailing slash(es)";;
+ esac
+
+ case $template_ in
+ *XXXX) ;;
+ *) fail_ "invalid template: $template_ (must have a suffix of at least 4 X's)";;
+ esac
+
+ fail=0
+
+ # First, try to use mktemp.
+ d=`unset TMPDIR; mktemp -d -t -p "$destdir_" "$template_" 2>/dev/null` + || fail=1
+
+ # The resulting name must be in the specified directory.
+ case $d in "$destdir_"*);; *) fail=1;; esac
+
+ # It must have created the directory.
+ test -d "$d" || fail=1
+
+ # It must have 0700 permissions. Handle sticky "S" bits.
+ perms=`ls -dgo "$d" 2>/dev/null|tr S -` || fail=1
+ case $perms in drwx------*) ;; *) fail=1;; esac
+
+ test $fail = 0 && {
+ echo "$d"
+ return
+ }
+
+ # If we reach this point, we'll have to create a directory manually.
+
+ # Get a copy of the template without its suffix of X's.
+ base_template_=`echo "$template_"|sed 's/XX*$//'`
+
+ # Calculate how many X's we've just removed.
+ template_length_=`echo "$template_" | wc -c`
+ nx_=`echo "$base_template_" | wc -c`
+ nx_=`expr $template_length_ - $nx_`
+
+ err_=
+ i_=1
+ while :; do
+ X_=`rand_bytes_ $nx_`
+ candidate_dir_="$destdir_/$base_template_$X_"
+ err_=`mkdir -m 0700 "$candidate_dir_" 2>&1` + && { echo "$candidate_dir_"; return; }
+ test $MAX_TRIES_ -le $i_ && break;
+ i_=`expr $i_ + 1`
+ done
+ fail_ "$err_"
+}
+
+# If you want to override the testdir_prefix_ function,
+# or to add more utility functions, use this file.
+test -f "$srcdir/init.cfg" + && . "$srcdir/init.cfg"
+
+setup_ "$@"
+# This trap is here, rather than in the setup_ function, because some
+# shells run the exit trap at shell function exit, rather than script exit.
+trap remove_tmp_ 0
-----------------------------------------------------------------------
Summary of changes:
Makefile.am | 1 +
configure.ac | 2 +-
rest.c | 3 +-
t/Makefile.am | 63 ++++++++
t/basic | 43 ++++++
t/init.cfg | 25 +++
t/init.sh | 465 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
7 files changed, 599 insertions(+), 3 deletions(-)
create mode 100644 t/Makefile.am
create mode 100644 t/basic
create mode 100644 t/init.cfg
create mode 100644 t/init.sh
repo.or.cz automatic notification. Contact project admin jim(a)meyering.net
if you want to unsubscribe, or site admin admin(a)repo.or.cz if you receive
no reply.
--
iwhd.git ("image warehouse daemon")
13 years, 7 months
[repo.or.cz] iwhd.git branch master updated: v0.0-109-g9443029
by Jim Meyering
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project iwhd.git.
The branch, master has been updated
via 94430296b2b7a2c5722e1290fd05e7e494d63baf (commit)
via 4e714bbe7007b5bacecec4dca34dde36fe9c73fc (commit)
from bedf9e129597380eb865de17abe3245d90076158 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
http://repo.or.cz/w/iwhd.git/commit/94430296b2b7a2c5722e1290fd05e7e494d63baf
commit 94430296b2b7a2c5722e1290fd05e7e494d63baf
Author: Jim Meyering <meyering(a)redhat.com>
Date: Wed Sep 22 23:19:58 2010 +0200
hoist definition of cmd to remove one more hard-coded "dc-register-image"
diff --git a/backend.c b/backend.c
index d4be66e..b35cac2 100644
--- a/backend.c
+++ b/backend.c
@@ -448,7 +448,8 @@ s3_register (my_state *ms, const provider_t *prov, const char *next,
(void)meta_set_value(ms->bucket,ms->key,"ami-id",ami_id_buf);
rc = MHD_HTTP_INTERNAL_SERVER_ERROR;
- argv[argc++] = "dc-register-image";
+ const char *cmd = "dc-register-image";
+ argv[argc++] = cmd;
argv[argc++] = ms->bucket;
argv[argc++] = ms->key;
argv[argc++] = api_key;
@@ -482,7 +483,6 @@ s3_register (my_state *ms, const provider_t *prov, const char *next,
}
if (pid == 0) {
- const char *cmd = "dc-register-image";
(void)dup2(organ[1],STDOUT_FILENO);
(void)dup2(organ[1],STDERR_FILENO);
execvp(cmd, (char* const*)argv);
http://repo.or.cz/w/iwhd.git/commit/4e714bbe7007b5bacecec4dca34dde36fe9c73fc
commit 4e714bbe7007b5bacecec4dca34dde36fe9c73fc
Author: Jim Meyering <meyering(a)redhat.com>
Date: Mon Sep 27 11:28:25 2010 +0200
maint: use new iwhd-devel address as bug-reporting addr
* configure.ac (AC_INIT): Now that we have an email address,
use it as the package bug-reporting address.
diff --git a/configure.ac b/configure.ac
index 1fce0d0..8f5a0ac 100644
--- a/configure.ac
+++ b/configure.ac
@@ -17,7 +17,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
AC_PREREQ([2.65])
-AC_INIT([iwhd], [1.0], [FIXME(a)example.com])
+AC_INIT([iwhd], [1.0], [iwhd-devel(a)fedorahosted.org])
AC_CONFIG_AUX_DIR([build-aux])
AC_CONFIG_HEADERS([config.h:config.hin])
-----------------------------------------------------------------------
Summary of changes:
backend.c | 4 ++--
configure.ac | 2 +-
2 files changed, 3 insertions(+), 3 deletions(-)
repo.or.cz automatic notification. Contact project admin jim(a)meyering.net
if you want to unsubscribe, or site admin admin(a)repo.or.cz if you receive
no reply.
--
iwhd.git ("image warehouse daemon")
13 years, 7 months