ssh: Improve key lookup for many keys.
[gnupg.git] / dirmngr / dirmngr_ldap.c
index a0df499..1b513ea 100644 (file)
@@ -33,7 +33,7 @@
 #include <sys/time.h>
 #include <unistd.h>
 #ifndef USE_LDAPWRAPPER
-# include <pth.h>
+# include <npth.h>
 #endif
 
 #ifdef HAVE_W32_SYSTEM
 
 #include "i18n.h"
 #include "util.h"
+#include "../common/init.h"
 
-/* With the ldap wrapper, there is no need for the pth_enter and leave
+/* With the ldap wrapper, there is no need for the npth_unprotect and leave
    functions; thus we redefine them to nops.  If we are not using the
    ldap wrapper process we need to include the prototype for our
    module's main function.  */
 #ifdef USE_LDAPWRAPPER
-static void pth_enter (void) { }
-static void pth_leave (void) { }
+static void npth_unprotect (void) { }
+static void npth_protect (void) { }
 #else
 # include "./ldap-wrapper.h"
 #endif
@@ -100,7 +101,7 @@ static void pth_leave (void) { }
 
 
 /* Constants for the options.  */
-enum 
+enum
   {
     oQuiet       = 'q',
     oVerbose     = 'v',
@@ -187,7 +188,7 @@ static const char *
 my_strusage (int level)
 {
   const char *p;
-    
+
   switch(level)
     {
     case 11: p = "dirmngr_ldap (GnuPG)";
@@ -202,8 +203,8 @@ my_strusage (int level)
       break;
     case 41: p =
           _("Syntax: dirmngr_ldap [options] [URL]\n"
-            "Internal LDAP helper for Dirmngr.\n"
-            "Interface and options may change without notice.\n");
+            "Internal LDAP helper for Dirmngr\n"
+            "Interface and options may change without notice\n");
       break;
 
     default: p = NULL;
@@ -230,13 +231,13 @@ ldap_wrapper_main (char **argv, estream_t outstream)
   struct my_opt_s my_opt_buffer;
   my_opt_t myopt = &my_opt_buffer;
   char *malloced_buffer1 = NULL;
-  
+
   memset (&my_opt_buffer, 0, sizeof my_opt_buffer);
 
 #ifdef USE_LDAPWRAPPER
   set_strusage (my_strusage);
-  log_set_prefix ("dirmngr_ldap", JNLIB_LOG_WITH_PREFIX); 
-  
+  log_set_prefix ("dirmngr_ldap", JNLIB_LOG_WITH_PREFIX);
+
   /* Setup I18N and common subsystems. */
   i18n_init();
 
@@ -265,8 +266,8 @@ ldap_wrapper_main (char **argv, estream_t outstream)
         {
         case oVerbose: myopt->verbose++; break;
         case oQuiet: myopt->quiet++; break;
-       case oTimeout: 
-         myopt->timeout.tv_sec = pargs.r.ret_int; 
+       case oTimeout:
+         myopt->timeout.tv_sec = pargs.r.ret_int;
          myopt->timeout.tv_usec = 0;
           myopt->alarm_timeout = pargs.r.ret_int;
          break;
@@ -322,7 +323,7 @@ ldap_wrapper_main (char **argv, estream_t outstream)
       if (!myopt->port)
         myopt->port = 389;  /* make sure ports gets overridden.  */
     }
-        
+
   if (myopt->port < 0 || myopt->port > 65535)
     log_error (_("invalid port number %d\n"), myopt->port);
 
@@ -342,12 +343,12 @@ ldap_wrapper_main (char **argv, estream_t outstream)
 #ifndef HAVE_W32_SYSTEM
 # if defined(HAVE_SIGACTION) && defined(HAVE_STRUCT_SIGACTION)
       struct sigaction act;
-      
+
       act.sa_handler = catch_alarm;
       sigemptyset (&act.sa_mask);
       act.sa_flags = 0;
       if (sigaction (SIGALRM,&act,NULL))
-# else 
+# else
       if (signal (SIGALRM, catch_alarm) == SIG_ERR)
 # endif
           log_fatal ("unable to register timeout handler\n");
@@ -392,15 +393,15 @@ print_ldap_entries (my_opt_t myopt, LDAP *ld, LDAPMessage *msg, char *want_attr)
   LDAPMessage *item;
   int any = 0;
 
-  for (pth_enter (), item = ldap_first_entry (ld, msg), pth_leave ();
+  for (npth_unprotect (), item = ldap_first_entry (ld, msg), npth_protect ();
        item;
-       pth_enter (), item = ldap_next_entry (ld, item), pth_leave ())
+       npth_unprotect (), item = ldap_next_entry (ld, item), npth_protect ())
     {
       BerElement *berctx;
       char *attr;
 
       if (myopt->verbose > 1)
-        log_info (_("scanning result for attribute `%s'\n"),
+        log_info (_("scanning result for attribute '%s'\n"),
                   want_attr? want_attr : "[all]");
 
       if (myopt->multi)
@@ -413,19 +414,19 @@ print_ldap_entries (my_opt_t myopt, LDAP *ld, LDAPMessage *msg, char *want_attr)
             }
         }
 
-          
-      for (pth_enter (), attr = my_ldap_first_attribute (ld, item, &berctx),
-             pth_leave ();
+
+      for (npth_unprotect (), attr = my_ldap_first_attribute (ld, item, &berctx),
+             npth_protect ();
            attr;
-           pth_enter (), attr = my_ldap_next_attribute (ld, item, berctx),
-             pth_leave ())
+           npth_unprotect (), attr = my_ldap_next_attribute (ld, item, berctx),
+             npth_protect ())
         {
           struct berval **values;
           int idx;
 
           if (myopt->verbose > 1)
-            log_info (_("          available attribute `%s'\n"), attr);
-          
+            log_info (_("          available attribute '%s'\n"), attr);
+
           set_timeout (myopt);
 
           /* I case we want only one attribute we do a case
@@ -455,26 +456,26 @@ print_ldap_entries (my_opt_t myopt, LDAP *ld, LDAPMessage *msg, char *want_attr)
                 }
             }
 
-          pth_enter ();
+          npth_unprotect ();
           values = my_ldap_get_values_len (ld, item, attr);
-          pth_leave ();
+          npth_protect ();
 
           if (!values)
             {
               if (myopt->verbose)
-                log_info (_("attribute `%s' not found\n"), attr);
+                log_info (_("attribute '%s' not found\n"), attr);
               my_ldap_free_attr (attr);
               continue;
             }
 
           if (myopt->verbose)
             {
-              log_info (_("found attribute `%s'\n"), attr);
+              log_info (_("found attribute '%s'\n"), attr);
               if (myopt->verbose > 1)
                 for (idx=0; values[idx]; idx++)
                   log_info ("         length[%d]=%d\n",
                             idx, (int)values[0]->bv_len);
-              
+
             }
 
           if (myopt->multi)
@@ -487,7 +488,7 @@ print_ldap_entries (my_opt_t myopt, LDAP *ld, LDAPMessage *msg, char *want_attr)
               tmp[2] = (n >> 16);
               tmp[3] = (n >> 8);
               tmp[4] = (n);
-              if (es_fwrite (tmp, 5, 1, myopt->outstream) != 1 
+              if (es_fwrite (tmp, 5, 1, myopt->outstream) != 1
                   || es_fwrite (attr, n, 1, myopt->outstream) != 1)
                 {
                   log_error (_("error writing to stdout: %s\n"),
@@ -544,7 +545,7 @@ print_ldap_entries (my_opt_t myopt, LDAP *ld, LDAPMessage *msg, char *want_attr)
             break; /* We only want to return the first attribute.  */
         }
       ber_free (berctx, 0);
-    } 
+    }
 
   if (myopt->verbose > 1 && any)
     log_info ("result has been printed\n");
@@ -578,37 +579,37 @@ fetch_ldap (my_opt_t myopt, const char *url, const LDAPURLDesc *ludp)
 
   if (myopt->verbose)
     {
-      log_info (_("processing url `%s'\n"), url);
+      log_info (_("processing url '%s'\n"), url);
       if (myopt->user)
-        log_info (_("          user `%s'\n"), myopt->user);
+        log_info (_("          user '%s'\n"), myopt->user);
       if (myopt->pass)
-        log_info (_("          pass `%s'\n"), *myopt->pass?"*****":"");
+        log_info (_("          pass '%s'\n"), *myopt->pass?"*****":"");
       if (host)
-        log_info (_("          host `%s'\n"), host);
+        log_info (_("          host '%s'\n"), host);
       log_info (_("          port %d\n"), port);
       if (dn)
-        log_info (_("            DN `%s'\n"), dn);
+        log_info (_("            DN '%s'\n"), dn);
       if (filter)
-        log_info (_("        filter `%s'\n"), filter);
+        log_info (_("        filter '%s'\n"), filter);
       if (myopt->multi && !myopt->attr && ludp->lud_attrs)
         {
           int i;
           for (i=0; ludp->lud_attrs[i]; i++)
-            log_info (_("          attr `%s'\n"), ludp->lud_attrs[i]);
+            log_info (_("          attr '%s'\n"), ludp->lud_attrs[i]);
         }
       else if (attr)
-        log_info (_("          attr `%s'\n"), attr);
+        log_info (_("          attr '%s'\n"), attr);
     }
 
 
   if (!host || !*host)
     {
-      log_error (_("no host name in `%s'\n"), url);
+      log_error (_("no host name in '%s'\n"), url);
       return -1;
     }
   if (!myopt->multi && !attr)
     {
-      log_error (_("no attribute given for query `%s'\n"), url);
+      log_error (_("no attribute given for query '%s'\n"), url);
       return -1;
     }
 
@@ -618,35 +619,35 @@ fetch_ldap (my_opt_t myopt, const char *url, const LDAPURLDesc *ludp)
 
 
   set_timeout (myopt);
-  pth_enter ();
+  npth_unprotect ();
   ld = my_ldap_init (host, port);
-  pth_leave ();
+  npth_protect ();
   if (!ld)
     {
-      log_error (_("LDAP init to `%s:%d' failed: %s\n"), 
+      log_error (_("LDAP init to '%s:%d' failed: %s\n"),
                  host, port, strerror (errno));
       return -1;
     }
-  pth_enter ();
+  npth_unprotect ();
   /* Fixme:  Can we use MYOPT->user or is it shared with other theeads?.  */
   ret = my_ldap_simple_bind_s (ld, myopt->user, myopt->pass);
-  pth_leave ();
+  npth_protect ();
   if (ret)
     {
-      log_error (_("binding to `%s:%d' failed: %s\n"), 
+      log_error (_("binding to '%s:%d' failed: %s\n"),
                  host, port, strerror (errno));
       ldap_unbind (ld);
       return -1;
     }
 
   set_timeout (myopt);
-  pth_enter ();
+  npth_unprotect ();
   rc = my_ldap_search_st (ld, dn, ludp->lud_scope, filter,
                           myopt->multi && !myopt->attr && ludp->lud_attrs?
                           ludp->lud_attrs:attrs,
                           0,
                           &myopt->timeout, &msg);
-  pth_leave ();
+  npth_protect ();
   if (rc == LDAP_SIZELIMIT_EXCEEDED && myopt->multi)
     {
       if (es_fwrite ("E\0\0\0\x09truncated", 14, 1, myopt->outstream) != 1)
@@ -658,9 +659,9 @@ fetch_ldap (my_opt_t myopt, const char *url, const LDAPURLDesc *ludp)
   else if (rc)
     {
 #ifdef HAVE_W32CE_SYSTEM
-      log_error ("searching `%s' failed: %d\n", url, rc);
+      log_error ("searching '%s' failed: %d\n", url, rc);
 #else
-      log_error (_("searching `%s' failed: %s\n"), 
+      log_error (_("searching '%s' failed: %s\n"),
                  url, ldap_err2string (rc));
 #endif
       if (rc != LDAP_NO_SUCH_OBJECT)
@@ -692,13 +693,13 @@ process_url (my_opt_t myopt, const char *url)
 
   if (!ldap_is_ldap_url (url))
     {
-      log_error (_("`%s' is not an LDAP URL\n"), url);
+      log_error (_("'%s' is not an LDAP URL\n"), url);
       return -1;
     }
 
   if (ldap_url_parse (url, &ludp))
     {
-      log_error (_("`%s' is an invalid LDAP URL\n"), url);
+      log_error (_("'%s' is an invalid LDAP URL\n"), url);
       return -1;
     }
 
@@ -707,4 +708,3 @@ process_url (my_opt_t myopt, const char *url)
   ldap_free_urldesc (ludp);
   return rc;
 }
-