Ported changes from 1.4.
[gnupg.git] / keyserver / gpgkeys_ldap.c
index df107ff..0186ce5 100644 (file)
@@ -1,5 +1,6 @@
 /* gpgkeys_ldap.c - talk to a LDAP keyserver
- * Copyright (C) 2001, 2002, 2004, 2005, 2006 Free Software Foundation, Inc.
+ * Copyright (C) 2001, 2002, 2004, 2005, 2006
+ *               2007  Free Software Foundation, Inc.
  *
  * This file is part of GnuPG.
  *
@@ -1288,18 +1289,25 @@ printquoted(FILE *stream,char *string,char delim)
 static int
 search_key(const char *searchkey)
 {
-  char **vals;
+  char **vals,*search;
   LDAPMessage *res,*each;
   int err,count=0;
   struct keylist *dupelist=NULL;
   /* The maximum size of the search, including the optional stuff and
      the trailing \0 */
-  char search[2+1+9+1+3+(MAX_LINE*3)+3+1+15+14+1+1+20];
   char *attrs[]={"pgpcertid","pgpuserid","pgprevoked","pgpdisabled",
                 "pgpkeycreatetime","pgpkeyexpiretime","modifytimestamp",
                 "pgpkeysize","pgpkeytype",NULL};
   enum ks_search_type search_type;
 
+  search=malloc(2+1+9+1+3+strlen(searchkey)+3+1+15+14+1+1+20);
+  if(!search)
+    {
+      fprintf(console,"gpgkeys: out of memory when building search list\n");
+      fprintf(output,"SEARCH %s FAILED %d\n",searchkey,KEYSERVER_NO_MEMORY);
+      return KEYSERVER_NO_MEMORY;
+    }
+
   fprintf(output,"SEARCH %s BEGIN\n",searchkey);
 
   search_type=classify_ks_search(&searchkey);
@@ -1354,7 +1362,7 @@ search_key(const char *searchkey)
       break;
     }
 
-  ldap_quote(search,searchkey);
+  strcat(search,searchkey);
 
   switch(search_type)
     {
@@ -1392,6 +1400,7 @@ search_key(const char *searchkey)
 
   err=ldap_search_s(ldap,basekeyspacedn,
                    LDAP_SCOPE_SUBTREE,search,attrs,0,&res);
+  free(search);
   if(err!=LDAP_SUCCESS && err!=LDAP_SIZELIMIT_EXCEEDED)
     {
       int errtag=ldap_err_to_gpg_err(err);
@@ -2172,7 +2181,7 @@ main(int argc,char *argv[])
              else
                ver=LDAP_OPT_X_TLS_NEVER;
 
-             err=ldap_set_option(ldap,LDAP_OPT_X_TLS_REQUIRE_CERT,&ver);
+             err=ldap_set_option(NULL,LDAP_OPT_X_TLS_REQUIRE_CERT,&ver);
            }
 #endif
 
@@ -2308,7 +2317,7 @@ main(int argc,char *argv[])
          keyptr=keyptr->next;
        }
 
-      searchkey=malloc(len+1);
+      searchkey=malloc((len*3)+1);
       if(searchkey==NULL)
        {
          ret=KEYSERVER_NO_MEMORY;
@@ -2321,7 +2330,7 @@ main(int argc,char *argv[])
       keyptr=keylist;
       while(keyptr!=NULL)
        {
-         strcat(searchkey,keyptr->str);
+         ldap_quote(searchkey,keyptr->str);
          strcat(searchkey,"*");
          keyptr=keyptr->next;
        }