From: Mike Taylor Date: Wed, 7 Dec 2005 16:15:15 +0000 (+0000) Subject: ZOOM_connection_connect() now understands authentication parameters X-Git-Tag: YAZ.2.1.12~54 X-Git-Url: http://sru.miketaylor.org.uk/cgi-bin?a=commitdiff_plain;h=72009188eda06296bb8839ef16de1470ecc2d240;p=yaz-moved-to-github.git ZOOM_connection_connect() now understands authentication parameters embedded in the host string, like this: admin:secretpw%localhost:9999/gils i.e. if there is a "%" sign, then what comes before is taken as a ":"-separated user/password pair. This is a bit hacky, but necessary to run zoomtst9 against secured databases, and it's much more general than just adding authentication parameters to that one program. --- diff --git a/src/zoom-c.c b/src/zoom-c.c index b7709e4..1c67d1d 100644 --- a/src/zoom-c.c +++ b/src/zoom-c.c @@ -2,7 +2,7 @@ * Copyright (C) 1995-2005, Index Data ApS * See the file LICENSE for details. * - * $Id: zoom-c.c,v 1.52 2005-11-16 16:07:52 mike Exp $ + * $Id: zoom-c.c,v 1.53 2005-12-07 16:15:15 mike Exp $ */ /** * \file zoom-c.c @@ -388,6 +388,24 @@ ZOOM_connection_connect(ZOOM_connection c, else c->host_port = xstrdup(host); + if ((val = strchr(c->host_port, '%')) != 0) { + /* We recognise :% for embedded + * authentication. This is slightly hacky syntax, but it's + * hard to get into the comstack code in a + * protocol-independent way. + */ + *(char*)val = '\0'; + char *remainder = xstrdup(val+1); + char *pass = strchr(c->host_port, ':'); + if (pass != 0) { + *pass++ = '\0'; + ZOOM_connection_option_set(c, "user", c->host_port); + ZOOM_connection_option_set(c, "password", pass); + } + xfree(c->host_port); + c->host_port = remainder; + } + ZOOM_options_set(c->options, "host", c->host_port); val = ZOOM_options_get (c->options, "cookie"); @@ -1063,7 +1081,7 @@ static zoom_ret ZOOM_connection_send_init (ZOOM_connection c) ZOOM_options_get(c->options, "implementationName"), odr_prepend(c->odr_out, "ZOOM-C", ireq->implementationName)); - version = odr_strdup(c->odr_out, "$Revision: 1.52 $"); + version = odr_strdup(c->odr_out, "$Revision: 1.53 $"); if (strlen(version) > 10) /* check for unexpanded CVS strings */ version[strlen(version)-2] = '\0'; ireq->implementationVersion = odr_prepend(c->odr_out,