ZOOM_connection_connect() now understands authentication parameters
authorMike Taylor <mike@indexdata.com>
Wed, 7 Dec 2005 16:15:15 +0000 (16:15 +0000)
committerMike Taylor <mike@indexdata.com>
Wed, 7 Dec 2005 16:15:15 +0000 (16:15 +0000)
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.

src/zoom-c.c

index b7709e4..1c67d1d 100644 (file)
@@ -2,7 +2,7 @@
  * Copyright (C) 1995-2005, Index Data ApS
  * See the file LICENSE for details.
  *
  * 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
  */
 /**
  * \file zoom-c.c
@@ -388,6 +388,24 @@ ZOOM_connection_connect(ZOOM_connection c,
     else
         c->host_port = xstrdup(host);
 
     else
         c->host_port = xstrdup(host);
 
+    if ((val = strchr(c->host_port, '%')) != 0) {
+        /* We recognise <username>:<password>%<string> 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");
     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));
 
         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,
     if (strlen(version) > 10)   /* check for unexpanded CVS strings */
         version[strlen(version)-2] = '\0';
     ireq->implementationVersion = odr_prepend(c->odr_out,