gpgscm: Simplify hash tables.
[gnupg.git] / dirmngr / ks-engine-ldap.c
index c6fa5eb..f50ba50 100644 (file)
@@ -16,7 +16,7 @@
  * GNU General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License
- * along with this program; if not, see <http://www.gnu.org/licenses/>.
+ * along with this program; if not, see <https://www.gnu.org/licenses/>.
  */
 
 #include <config.h>
@@ -45,7 +45,7 @@
 
 #include "dirmngr.h"
 #include "misc.h"
-#include "userids.h"
+#include "../common/userids.h"
 #include "ks-engine.h"
 #include "ldap-parse-uri.h"
 
@@ -289,7 +289,7 @@ epoch2ldaptime (time_t stamp)
 gpg_error_t
 ks_ldap_help (ctrl_t ctrl, parsed_uri_t uri)
 {
-  const char const data[] =
+  const char data[] =
     "Handler for LDAP URLs:\n"
     "  ldap://host:port/[BASEDN]???[bindname=BINDNAME,password=PASSWORD]\n"
     "\n"
@@ -433,10 +433,10 @@ keyspec_to_ldap_filter (const char *keyspec, char **filter, int only_exact)
 
    If this function successfully interrogated the server, it returns
    0.  If there was an LDAP error, it returns the LDAP error code.  If
-   an error occured, *basednp, etc., are undefined (and don't need to
+   an error occurred, *basednp, etc., are undefined (and don't need to
    be freed.)
 
-   If no LDAP error occured, you still need to check that *basednp is
+   If no LDAP error occurred, you still need to check that *basednp is
    valid.  If it is NULL, then the server does not appear to be an
    OpenPGP Keyserver.  In this case, you also do not need to xfree
    *pgpkeyattrp.  */
@@ -513,12 +513,13 @@ my_ldap_connect (parsed_uri_t uri, LDAP **ldap_connp,
 #endif /* LDAP_OPT_X_TLS_CACERTFILE && HAVE_LDAP_SET_OPTION */
 #endif
 
-#ifndef HAVE_LDAP_START_TLS_S
+#ifdef HAVE_LDAP_START_TLS_S
   if (uri->use_tls)
     {
       /* XXX: We need an option to determine whether to abort if the
         certificate is bad or not.  Right now we conservatively
         default to checking the certificate and aborting.  */
+#ifndef HAVE_W32_SYSTEM
       int check_cert = LDAP_OPT_X_TLS_HARD; /* LDAP_OPT_X_TLS_NEVER */
 
       err = ldap_set_option (ldap_conn,
@@ -528,8 +529,21 @@ my_ldap_connect (parsed_uri_t uri, LDAP **ldap_connp,
          log_error ("Failed to set TLS option on LDAP connection.\n");
          goto out;
        }
+#else
+      /* On Windows, the certificates are checked by default.  If the
+        option to disable checking mentioned above is ever
+        implemented, the way to do that on Windows is to install a
+        callback routine using ldap_set_option (..,
+        LDAP_OPT_SERVER_CERTIFICATE, ..); */
+#endif
 
-      err = ldap_start_tls_s (ldap_conn, NULL, NULL);
+      err = ldap_start_tls_s (ldap_conn,
+#ifdef HAVE_W32_SYSTEM
+                             /* ServerReturnValue, result */
+                             NULL, NULL,
+#endif
+                             /* ServerControls, ClientControls */
+                             NULL, NULL);
       if (err)
        {
          log_error ("Failed to connect to LDAP server with TLS.\n");
@@ -836,10 +850,10 @@ ks_ldap_get (ctrl_t ctrl, parsed_uri_t uri, const char *keyspec,
 
   (void) ctrl;
 
-  if (opt.use_tor)
+  if (dirmngr_use_tor ())
     {
-      /* For now we do not support LDAP over TOR.  */
-      log_error (_("LDAP access not possible due to TOR mode\n"));
+      /* For now we do not support LDAP over Tor.  */
+      log_error (_("LDAP access not possible due to Tor mode\n"));
       return gpg_error (GPG_ERR_NOT_SUPPORTED);
     }
 
@@ -1019,10 +1033,10 @@ ks_ldap_search (ctrl_t ctrl, parsed_uri_t uri, const char *pattern,
 
   (void) ctrl;
 
-  if (opt.use_tor)
+  if (dirmngr_use_tor ())
     {
-      /* For now we do not support LDAP over TOR.  */
-      log_error (_("LDAP access not possible due to TOR mode\n"));
+      /* For now we do not support LDAP over Tor.  */
+      log_error (_("LDAP access not possible due to Tor mode\n"));
       return gpg_error (GPG_ERR_NOT_SUPPORTED);
     }
 
@@ -1457,7 +1471,7 @@ modlist_dump (LDAPMod **modlist, estream_t output)
          for ((ptr = (*m)->mod_values), (i = 1); ptr && *ptr; ptr++, i ++)
            {
              /* Assuming terminals are about 80 characters wide,
-                display at most most about 10 lines of debugging
+                display at most about 10 lines of debugging
                 output.  If we do trim the buffer, append '...' to
                 the end.  */
              const int max_len = 10 * 70;
@@ -1616,7 +1630,7 @@ extract_attributes (LDAPMod ***modlist, char *line)
 
   fields = strsplit (line, ':', '\0', &field_count);
   if (field_count == 1)
-    /* We only have a single field.  There is definately nothing to
+    /* We only have a single field.  There is definitely nothing to
        do.  */
     goto out;
 
@@ -1895,10 +1909,10 @@ ks_ldap_put (ctrl_t ctrl, parsed_uri_t uri,
   /* Elide a warning.  */
   (void) ctrl;
 
-  if (opt.use_tor)
+  if (dirmngr_use_tor ())
     {
-      /* For now we do not support LDAP over TOR.  */
-      log_error (_("LDAP access not possible due to TOR mode\n"));
+      /* For now we do not support LDAP over Tor.  */
+      log_error (_("LDAP access not possible due to Tor mode\n"));
       return gpg_error (GPG_ERR_NOT_SUPPORTED);
     }