[svn] GnuPG - r4021 - trunk/g10

svn author dshaw cvs at cvs.gnupg.org
Thu Feb 23 18:00:04 CET 2006


Author: dshaw
Date: 2006-02-23 18:00:02 +0100 (Thu, 23 Feb 2006)
New Revision: 4021

Modified:
   trunk/g10/ChangeLog
   trunk/g10/keyserver-internal.h
   trunk/g10/keyserver.c
   trunk/g10/options.h
Log:
* options.h, keyserver.c (add_canonical_option): New.
(parse_keyserver_options): Moved from here. (parse_keyserver_uri): Use it
here so each keyserver can have some private options in addition to the
main keyserver-options (e.g. per-keyserver auth).


Modified: trunk/g10/ChangeLog
===================================================================
--- trunk/g10/ChangeLog	2006-02-22 23:37:23 UTC (rev 4020)
+++ trunk/g10/ChangeLog	2006-02-23 17:00:02 UTC (rev 4021)
@@ -1,3 +1,11 @@
+2006-02-23  David Shaw  <dshaw at jabberwocky.com>
+
+	* options.h, keyserver.c (add_canonical_option): New.
+	(parse_keyserver_options): Moved from here.
+	(parse_keyserver_uri): Use it here so each keyserver can have some
+	private options in addition to the main keyserver-options
+	(e.g. per-keyserver auth).
+
 2006-02-22  David Shaw  <dshaw at jabberwocky.com>
 
 	* options.h, keyserver-internal.h, keyserver.c

Modified: trunk/g10/keyserver-internal.h
===================================================================
--- trunk/g10/keyserver-internal.h	2006-02-22 23:37:23 UTC (rev 4020)
+++ trunk/g10/keyserver-internal.h	2006-02-23 17:00:02 UTC (rev 4021)
@@ -29,7 +29,8 @@
 
 int parse_keyserver_options(char *options);
 void free_keyserver_spec(struct keyserver_spec *keyserver);
-struct keyserver_spec *parse_keyserver_uri(const char *uri,int require_scheme,
+struct keyserver_spec *parse_keyserver_uri(const char *string,
+					   int require_scheme,
 					   const char *configname,
 					   unsigned int configlineno);
 struct keyserver_spec *parse_preferred_keyserver(PKT_signature *sig);

Modified: trunk/g10/keyserver.c
===================================================================
--- trunk/g10/keyserver.c	2006-02-22 23:37:23 UTC (rev 4020)
+++ trunk/g10/keyserver.c	2006-02-23 17:00:02 UTC (rev 4021)
@@ -104,6 +104,27 @@
 
 static size_t max_cert_size=DEFAULT_MAX_CERT_SIZE;
 
+static void
+add_canonical_option(char *option,STRLIST *list)
+{
+  char *arg=argsplit(option);
+
+  if(arg)
+    {
+      char *joined;
+
+      joined=xmalloc(strlen(option)+1+strlen(arg)+1);
+      /* Make a canonical name=value form with no spaces */
+      strcpy(joined,option);
+      strcat(joined,"=");
+      strcat(joined,arg);
+      add_to_strlist(list,joined);
+      xfree(joined);
+    }
+  else
+    add_to_strlist(list,option);
+}
+
 int
 parse_keyserver_options(char *options)
 {
@@ -152,23 +173,7 @@
 	{
 	  /* All of the standard options have failed, so the option is
 	     destined for a keyserver plugin. */
-	  char *arg=argsplit(tok);
-
-	  if(arg)
-	    {
-	      char *joined;
-
-	      joined=xmalloc(strlen(tok)+1+strlen(arg)+1);
-	      /* Make a canonical name=value form with no
-		 spaces */
-	      strcpy(joined,tok);
-	      strcat(joined,"=");
-	      strcat(joined,arg);
-	      add_to_strlist(&opt.keyserver_options.other,joined);
-	      xfree(joined);
-	    }
-	  else
-	    add_to_strlist(&opt.keyserver_options.other,tok);
+	  add_canonical_option(tok,&opt.keyserver_options.other);
 	}
     }
 
@@ -193,6 +198,7 @@
   xfree(keyserver->port);
   xfree(keyserver->path);
   xfree(keyserver->opaque);
+  free_strlist(keyserver->options);
   xfree(keyserver);
 }
 
@@ -201,18 +207,33 @@
    keyserver/ksutil.c for limited use in gpgkeys_ldap or the like. */
 
 struct keyserver_spec *
-parse_keyserver_uri(const char *uri,int require_scheme,
+parse_keyserver_uri(const char *string,int require_scheme,
 		    const char *configname,unsigned int configlineno)
 {
   int assume_hkp=0;
   struct keyserver_spec *keyserver;
   const char *idx;
   int count;
+  char *uri,*options;
 
-  assert(uri!=NULL);
+  assert(string!=NULL);
 
   keyserver=xmalloc_clear(sizeof(struct keyserver_spec));
 
+  uri=xstrdup(string);
+
+  options=strchr(uri,' ');
+  if(options)
+    {
+      char *tok;
+
+      *options='\0';
+      options++;
+
+      while((tok=optsep(&options)))
+	add_canonical_option(tok,&keyserver->options);
+    }
+
   /* Get the scheme */
 
   for(idx=uri,count=0;*idx && *idx!=':';idx++)
@@ -1038,6 +1059,9 @@
   for(temp=opt.keyserver_options.other;temp;temp=temp->next)
     fprintf(spawn->tochild,"OPTION %s\n",temp->d);
 
+  for(temp=opt.keyserver->options;temp;temp=temp->next)
+    fprintf(spawn->tochild,"OPTION %s\n",temp->d);
+
   switch(action)
     {
     case KS_GET:

Modified: trunk/g10/options.h
===================================================================
--- trunk/g10/options.h	2006-02-22 23:37:23 UTC (rev 4020)
+++ trunk/g10/options.h	2006-02-23 17:00:02 UTC (rev 4021)
@@ -136,6 +136,7 @@
     char *port;
     char *path;
     char *opaque;
+    STRLIST options;
     struct
     {
       unsigned int direct_uri:1;




More information about the Gnupg-commits mailing list