* options.h, keyserver.c (parse_keyserver_uri): Properly parse auth data
authorDavid Shaw <dshaw@jabberwocky.com>
Wed, 22 Dec 2004 18:09:41 +0000 (18:09 +0000)
committerDavid Shaw <dshaw@jabberwocky.com>
Wed, 22 Dec 2004 18:09:41 +0000 (18:09 +0000)
from URLs and pass to keyserver helpers.

g10/ChangeLog
g10/keyserver.c
g10/options.h

index beb9dec..3fda46d 100644 (file)
@@ -1,5 +1,8 @@
 2004-12-22  David Shaw  <dshaw@jabberwocky.com>
 
+       * options.h, keyserver.c (parse_keyserver_uri): Properly parse
+       auth data from URLs and pass to keyserver helpers.
+
        * keyserver.c (keyserver_typemap): New.  Map certain keyserver
        types to a common type (e.g. ldaps -> ldap).  If we are building
        with curl, map both http and ftp to curl.
index 854187f..815e784 100644 (file)
@@ -218,6 +218,23 @@ parse_keyserver_uri(const char *uri,int require_scheme,
       if(!assume_hkp)
        uri+=2;
 
+      /* Do we have userinfo auth data present? */
+      for(idx=uri,count=0;*idx && *idx!='@' && *idx!='/';idx++)
+       count++;
+
+      /* We found a @ before the slash, so that means everything
+        before the @ is auth data. */
+      if(*idx=='@')
+       {
+         if(count==0)
+           goto fail;
+
+         keyserver->auth=m_alloc(count+1);
+         strncpy(keyserver->auth,uri,count);
+         keyserver->auth[count]='\0';
+         uri+=count+1;
+       }
+
       for(idx=uri,count=0;*idx && *idx!=':' && *idx!='/';idx++)
        count++;
 
@@ -846,6 +863,9 @@ keyserver_spawn(int action,STRLIST list,KEYDB_SEARCH_DESC *desc,
     fprintf(spawn->tochild,"OPAQUE %s\n",keyserver->opaque);
   else
     {
+      if(keyserver->auth)
+       fprintf(spawn->tochild,"AUTH %s\n",keyserver->auth);
+
       if(keyserver->host)
        fprintf(spawn->tochild,"HOST %s\n",keyserver->host);
 
index 668b71f..1ad6b44 100644 (file)
@@ -129,6 +129,7 @@ struct
   {
     char *uri;
     char *scheme;
+    char *auth;
     char *host;
     char *port;
     char *path;