summaryrefslogtreecommitdiff
path: root/usr/src/lib/libldap4/common/open.c
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/lib/libldap4/common/open.c')
-rw-r--r--usr/src/lib/libldap4/common/open.c433
1 files changed, 0 insertions, 433 deletions
diff --git a/usr/src/lib/libldap4/common/open.c b/usr/src/lib/libldap4/common/open.c
deleted file mode 100644
index 78211659f2..0000000000
--- a/usr/src/lib/libldap4/common/open.c
+++ /dev/null
@@ -1,433 +0,0 @@
-/*
- * Copyright (c) 1995-2001 by Sun Microsystems, Inc.
- * All rights reserved.
- */
-
-#pragma ident "%Z%%M% %I% %E% SMI"
-
-/*
- * Copyright (c) 1995 Regents of the University of Michigan.
- * All rights reserved.
- *
- * open.c
- */
-
-#ifndef lint
-static char copyright[] = "@(#) Copyright (c) 1995 Regents of the "
- "University of Michigan.\nAll rights reserved.\n";
-#endif
-
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h> /* calloc(), free(), atoi() for Solaris */
-#include <locale.h>
-#include <thread.h>
-
-#ifdef MACOS
-#include <stdlib.h>
-#include "macos.h"
-#endif /* MACOS */
-
-#if defined(DOS) || defined(_WIN32)
-#include "msdos.h"
-#include <stdlib.h>
-#endif /* DOS */
-
-#if !defined(MACOS) && !defined(DOS) && !defined(_WIN32)
-#include <sys/time.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#ifndef VMS
-#include <sys/param.h>
-#endif
-#include <netinet/in.h>
-#endif
-#include "lber.h"
-#include "ldap.h"
-#include "ldap-private.h"
-#include "ldap-int.h"
-
-#ifdef LDAP_DEBUG
-int ldap_debug;
-#endif
-
-#ifndef INADDR_LOOPBACK
-#define INADDR_LOOPBACK ((unsigned int) 0x7f000001)
-#endif
-
-#ifndef MAXHOSTNAMELEN
-#define MAXHOSTNAMELEN 64
-#endif
-
-extern int thr_kill(thread_t, int);
-
-/*
- * ldap_open - initialize and connect to an ldap server. A magic cookie to
- * be used for future communication is returned on success, NULL on failure.
- * "host" may be a space-separated list of hosts or IP addresses
- *
- * Example:
- * LDAP *ld;
- * ld = ldap_open( hostname, port );
- */
-
-LDAP *
-ldap_open(char *host, int port)
-{
- LDAP *ld;
- int err;
-
- if ((ld = ldap_init(host, port)) == NULL) {
- return (NULL);
- }
-
- Debug(LDAP_DEBUG_TRACE, catgets(slapdcat, 1, 113,
- "ldap_open (after ldap_init)\n"), 0, 0, 0);
-
-#ifdef _REENTRANT
- LOCK_LDAP(ld);
-#endif
- if ((err = open_default_ldap_connection(ld)) != LDAP_SUCCESS) {
-#ifdef _REENTRANT
- UNLOCK_LDAP(ld);
-#endif
- ldap_ld_free(ld, 0);
- Debug(LDAP_DEBUG_ANY, catgets(slapdcat, 1, 1275,
- "ldap_open failed, %s\n"),
- ldap_err2string(err), 0, 0);
- return (NULL);
- }
-
- Debug(LDAP_DEBUG_TRACE, catgets(slapdcat, 1, 194,
- "ldap_open successful, ld_host is %s\n"),
- (ld->ld_host == NULL) ? "(null)" : ld->ld_host, 0, 0);
-#ifdef _REENTRANT
- UNLOCK_LDAP(ld);
-#endif
- return (ld);
-
-}
-
-/*
- * Open the default connection
- * ld->ld_defconn MUST be null when calling this function,
- * ie the connection was never established
- * ld should be LOCKed before calling this function
- */
-int
-open_default_ldap_connection(LDAP *ld)
-{
- LDAPServer *srv;
- int err;
-
- if ((srv = (LDAPServer *)calloc(1, sizeof (LDAPServer))) ==
- NULL || (ld->ld_defhost != NULL && (srv->lsrv_host =
- strdup(ld->ld_defhost)) == NULL)) {
- return (LDAP_NO_MEMORY);
- }
- srv->lsrv_port = ld->ld_defport;
-
- if ((ld->ld_defconn = new_connection(ld, &srv, 1, 1, 0)) ==
- NULL) {
- err = ld->ld_errno;
- Debug(LDAP_DEBUG_ANY, catgets(slapdcat, 1, 1276,
- "Default connection to ldap server %s couldn't be "
- "opened (%d)\n"), ld->ld_defhost, err, 0);
-
- if (ld->ld_defhost != NULL)
- free(srv->lsrv_host);
- free((char *)srv);
- return (err);
- }
-
- /* so it never gets closed/freed */
- ++ld->ld_defconn->lconn_refcnt;
-
- return (LDAP_SUCCESS);
-}
-
-static pthread_mutex_t ldap_thr_index_mutex = {0};
-static pthread_t ldap_thr_table[MAX_THREAD_ID] = {0};
-
-int
-ldap_thr_index()
-{
- int i = 0;
- int free = 0;
- pthread_t cur = thr_self();
- for (i = 1; i < MAX_THREAD_ID; ++i) {
- if (ldap_thr_table[i] == cur) {
- return (i);
- } /* end if */
- } /* end for */
- /*
- * not in the table, allocate a new entry
- */
- pthread_mutex_lock(&ldap_thr_index_mutex);
- for (i = 1; i < MAX_THREAD_ID; ++i) {
- if (ldap_thr_table[i] == 0 ||
- thr_kill(ldap_thr_table[i], 0) != 0) {
- ldap_thr_table[i] = cur;
- pthread_mutex_unlock(&ldap_thr_index_mutex);
- return (i);
- } /* end if */
- } /* end for */
- pthread_mutex_unlock(&ldap_thr_index_mutex);
- /* if table is full, return the first entry, so that it */
- /* doesn't core dump */
- return (0);
-}
-
-/*
- * ldap_init - initialize the LDAP library. A magic cookie to be used for
- * future communication is returned on success, NULL on failure.
- * "defhost" may be a space-separated list of hosts or IP addresses
- *
- * Example:
- * LDAP *ld;
- * ld = ldap_init( default_hostname, default_port );
- */
-LDAP *
-ldap_init(char *defhost, int defport)
-{
- LDAP *ld;
- char *locale;
-
- locale = setlocale(LC_ALL, "");
- i18n_catopen("sdserver");
-
- Debug(LDAP_DEBUG_TRACE, catgets(slapdcat, 1, 195,
- "ldap_init\n"), 0, 0, 0);
-
-
- if ((ld = (LDAP *) calloc(1, sizeof (LDAP))) == NULL) {
- return (NULL);
- }
-
-#ifdef _REENTRANT
- pthread_mutex_init(&ld->ld_ldap_mutex, DEFAULT_TYPE);
- pthread_mutex_init(&ld->ld_response_mutex, DEFAULT_TYPE);
- pthread_mutex_init(&ld->ld_poll_mutex, DEFAULT_TYPE);
- ld->ld_lockthread = 0;
-#endif
-
- if ((ld->ld_selectinfo = new_select_info()) == NULL) {
- free((char *)ld);
- return (NULL);
- }
- ld->ld_follow_referral = 1;
-
- /*
- * default to localhost when hostname is not specified
- * or if null string is passed as hostname
- */
-
- if ((defhost != NULL) && (*defhost != NULL) &&
- (ld->ld_defhost = strdup(defhost)) == NULL) {
- free_select_info(ld->ld_selectinfo);
- free((char *)ld);
- return (NULL);
- }
-
- ld->ld_defport = (defport == 0) ? LDAP_PORT : defport;
- ld->ld_version = LDAP_VERSION;
- ld->ld_lberoptions = LBER_USE_DER;
- ld->ld_refhoplimit = LDAP_DEFAULT_REFHOPLIMIT;
- ld->ld_connect_timeout = LDAP_X_IO_TIMEOUT_NO_TIMEOUT;
-
-#if defined(STR_TRANSLATION) && defined(LDAP_DEFAULT_CHARSET)
- ld->ld_lberoptions |= LBER_TRANSLATE_STRINGS;
-#if LDAP_CHARSET_8859 == LDAP_DEFAULT_CHARSET
- ldap_set_string_translators(ld, ldap_8859_to_t61,
- ldap_t61_to_8859);
-#endif /* LDAP_CHARSET_8859 == LDAP_DEFAULT_CHARSET */
-#endif /* STR_TRANSLATION && LDAP_DEFAULT_CHARSET */
-
- return (ld);
-}
-
-
-/* ARGSUSED */
-int
-open_ldap_connection(LDAP *ld, Sockbuf *sb, char *host, int defport,
- char **krbinstancep, int async)
-{
- int rc, port;
- char *p, *q, *r;
- char *curhost, hostname[ 2*MAXHOSTNAMELEN ];
- int bindTimeout;
-
- Debug(LDAP_DEBUG_TRACE, catgets(slapdcat, 1, 196,
- "open_ldap_connection\n"), 0, 0, 0);
-
- defport = htons(defport);
- bindTimeout = ld->ld_connect_timeout;
-
- if (host != NULL) {
- for (p = host; p != NULL && *p != '\0'; p = q) {
- if ((q = strchr(p, ' ')) != NULL) {
- (void) strncpy(hostname, p, q - p);
- hostname[ q - p ] = '\0';
- curhost = hostname;
- while (*q == ' ') {
- ++q;
- }
- } else {
- /* avoid copy if possible */
- curhost = p;
- q = NULL;
- }
-
- if ((r = strchr(curhost, ':')) != NULL) {
- if (curhost != hostname) {
- /* now copy */
- (void) strcpy(hostname, curhost);
- r = hostname + (r - curhost);
- curhost = hostname;
- }
- *r++ = '\0';
- port = htons((short)atoi(r));
- } else {
- port = defport;
- }
-
- if ((rc = connect_to_host(sb, curhost, 0,
- port, async, bindTimeout)) != -1) {
- break;
- }
- }
- } else {
- rc = connect_to_host(sb, NULL, htonl(INADDR_LOOPBACK),
- defport, async, bindTimeout);
- }
-
- if (rc == -1) {
- return (rc);
- }
-
- if (krbinstancep != NULL) {
-#ifdef KERBEROS
- if ((*krbinstancep = host_connected_to(sb)) != NULL &&
- (p = strchr(*krbinstancep, '.')) != NULL) {
- *p = '\0';
- }
-#else /* KERBEROS */
- krbinstancep = NULL;
-#endif /* KERBEROS */
- }
-
- return (0);
-}
-
-/*
- * ldap_ssl_open - initialize and connect to an ssl secured ldap
- * server. First ldap_open() is called and then ssl is layered on top
- * of the socket. A magic cookie to be used for future communication
- * is returned on success, NULL on failure. "host" may be a
- * space-separated list of hosts or IP addresses. CAfile and CApath
- * are used first time through, subsequent calls are ignored and can
- * be NULL.
- *
- * Example:
- * LDAP *ld;
- * ld = ldap_ssl_open( hostname, port, key );
- */
-
-#ifdef LDAP_SSL
-
-#include "security/ssl.h"
-
-int
-establish_ssl_connection(LDAP *ld)
-{
- SSL *ssl = NULL; /* The Client's SSL connection */
-
- /*
- * Creates a new SSL connection. This holds information
- * pertinent to this
- * connection.
- */
- if ((ssl = SSL_new()) == NULL) {
- Debug(LDAP_DEBUG_TRACE, catgets(slapdcat, 1, 198,
- "SSL_new() failed: %s\n"),
- SSL_strerr(SSL_errno(ssl)), 0, 0);
- return (-1);
- }
-
- /* if keyname is non-null, set ssl keypackage name from it */
- if (ld->ld_ssl_key != NULL) {
- if (SSL_set_userid(ssl, ld->ld_ssl_key, 0) == NULL) {
- Debug(LDAP_DEBUG_TRACE, catgets(slapdcat, 1,
- 199, "SSL_set_userid() failed: %s\n"),
- SSL_strerr(SSL_errno(ssl)), 0, 0);
- return (-1);
- }
- }
-
- /* Start the SSL connection */
- if (SSL_connect(ssl, ld->ld_sb.sb_sd) < 1) {
- Debug(LDAP_DEBUG_TRACE, catgets(slapdcat, 1, 200,
- "SSL_connect() failed: %s\n"),
- SSL_strerr(SSL_errno(ssl)), 0, 0);
- return (-1);
- }
-
- ld->ld_sb.sb_ssl = ssl;
- return (0);
-}
-
-
-LDAP *
-ldap_ssl_open(char *host, int port, char *keyname)
-{
- LDAP *ld;
- int rval;
-
-
- if (port == 0)
- port = SSL_LDAP_PORT;
-
- ld = ldap_open(host, port);
-
- Debug(LDAP_DEBUG_TRACE, catgets(slapdcat, 1, 197,
- "ldap_ssl_open (after ldap_open)\n"), 0, 0, 0);
-
- if (ld == NULL)
- return (NULL);
-
- ld->ld_use_ssl = 1;
- if (keyname)
- ld->ld_ssl_key = strdup(keyname);
-
- if (establish_ssl_connection(ld) != 0) {
- ldap_ld_free(ld, 1);
- return (NULL);
- }
-
- return (ld);
-}
-
-LDAP *
-ldap_ssl_init(char *defhost, int defport, char *keyname)
-{
- LDAP *ld;
- int rval;
-
-
- if (defport == 0)
- defport = SSL_LDAP_PORT;
-
- ld = ldap_init(defhost, defport);
-
- Debug(LDAP_DEBUG_TRACE, catgets(slapdcat, 1, 197,
- "ldap_ssl_open (after ldap_open)\n"), 0, 0, 0);
-
- if (ld == NULL)
- return (NULL);
- ld->ld_use_ssl = 1;
- ld->ld_ssl_key = strdup(keyname);
-
- return (ld);
-}
-
-#endif /* LDAP_SSL */