summaryrefslogtreecommitdiffstats
path: root/ldap/xpcom/src/nsLDAPProtocolModule.cpp
blob: 6f72e7c43c99b651e9f5c3292cd7e2d34956a985 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
 * 
 * This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

#include "nsIClassInfoImpl.h"
#include "mozilla/ModuleUtils.h"

#include "nsLDAPInternal.h"
#include "nsLDAPURL.h"
#include "nsLDAPConnection.h"
#include "nsLDAPOperation.h"
#include "nsLDAPMessage.h"
#include "nsLDAPModification.h"
#include "nsLDAPServer.h"
#include "nsLDAPService.h"
#include "nsLDAPBERValue.h"
#include "nsLDAPBERElement.h"
#include "nsLDAPControl.h"
#ifdef MOZ_PREF_EXTENSIONS
#include "nsLDAPSyncQuery.h"
#endif
#include "ldappr.h"
#include "mozilla/Logging.h"

// use the default constructor
//
NS_GENERIC_FACTORY_CONSTRUCTOR(nsLDAPConnection)
NS_GENERIC_FACTORY_CONSTRUCTOR(nsLDAPOperation)
NS_GENERIC_FACTORY_CONSTRUCTOR(nsLDAPMessage)
NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsLDAPModification, Init)
NS_GENERIC_FACTORY_CONSTRUCTOR(nsLDAPServer)
NS_GENERIC_FACTORY_CONSTRUCTOR(nsLDAPURL)
NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsLDAPService, Init)
NS_GENERIC_FACTORY_CONSTRUCTOR(nsLDAPBERValue)
NS_GENERIC_FACTORY_CONSTRUCTOR(nsLDAPBERElement)
NS_GENERIC_FACTORY_CONSTRUCTOR(nsLDAPControl)
#ifdef MOZ_PREF_EXTENSIONS
NS_GENERIC_FACTORY_CONSTRUCTOR(nsLDAPSyncQuery)
#endif

NS_DEFINE_NAMED_CID(NS_LDAPCONNECTION_CID);
NS_DEFINE_NAMED_CID(NS_LDAPOPERATION_CID);
NS_DEFINE_NAMED_CID(NS_LDAPMESSAGE_CID);
NS_DEFINE_NAMED_CID(NS_LDAPMODIFICATION_CID);
NS_DEFINE_NAMED_CID(NS_LDAPSERVER_CID);
NS_DEFINE_NAMED_CID(NS_LDAPSERVICE_CID);
NS_DEFINE_NAMED_CID(NS_LDAPURL_CID);
NS_DEFINE_NAMED_CID(NS_LDAPBERVALUE_CID);
NS_DEFINE_NAMED_CID(NS_LDAPBERELEMENT_CID);
#ifdef MOZ_PREF_EXTENSIONS
NS_DEFINE_NAMED_CID(NS_LDAPSYNCQUERY_CID);
#endif
NS_DEFINE_NAMED_CID(NS_LDAPCONTROL_CID);

// a table of the CIDs implemented by this module
//

const mozilla::Module::CIDEntry kLDAPProtocolCIDs[] = {
  { &kNS_LDAPCONNECTION_CID, false, NULL, nsLDAPConnectionConstructor},
  { &kNS_LDAPOPERATION_CID, false, NULL, nsLDAPOperationConstructor},
  { &kNS_LDAPMESSAGE_CID, false, NULL, nsLDAPMessageConstructor},
  { &kNS_LDAPMODIFICATION_CID, false, NULL, nsLDAPModificationConstructor},
  { &kNS_LDAPSERVER_CID, false, NULL, nsLDAPServerConstructor},
  { &kNS_LDAPSERVICE_CID, false, NULL, nsLDAPServiceConstructor},
  { &kNS_LDAPURL_CID, false, NULL, nsLDAPURLConstructor},
  { &kNS_LDAPBERVALUE_CID, false, NULL, nsLDAPBERValueConstructor},
  { &kNS_LDAPBERELEMENT_CID, false, NULL, nsLDAPBERElementConstructor},
#ifdef MOZ_PREF_EXTENSIONS
  { &kNS_LDAPSYNCQUERY_CID, false, NULL, nsLDAPSyncQueryConstructor},
#endif
  { &kNS_LDAPCONTROL_CID, false, NULL, nsLDAPControlConstructor},
  { NULL }
};


const mozilla::Module::ContractIDEntry kLDAPProtocolContracts[] = {
  { "@mozilla.org/network/ldap-connection;1", &kNS_LDAPCONNECTION_CID},
  { "@mozilla.org/network/ldap-operation;1", &kNS_LDAPOPERATION_CID},
  { "@mozilla.org/network/ldap-message;1", &kNS_LDAPMESSAGE_CID},
  { "@mozilla.org/network/ldap-modification;1", &kNS_LDAPMODIFICATION_CID},
  { "@mozilla.org/network/ldap-server;1", &kNS_LDAPSERVER_CID},
  { "@mozilla.org/network/ldap-service;1", &kNS_LDAPSERVICE_CID},
  { "@mozilla.org/network/ldap-url;1", &kNS_LDAPURL_CID},
  { "@mozilla.org/network/ldap-ber-value;1", &kNS_LDAPBERVALUE_CID},
  { "@mozilla.org/network/ldap-ber-element;1", &kNS_LDAPBERELEMENT_CID},
#ifdef MOZ_PREF_EXTENSIONS
  { "@mozilla.org/ldapsyncquery;1", &kNS_LDAPSYNCQUERY_CID},
#endif
  { "@mozilla.org/network/ldap-control;1", &kNS_LDAPCONTROL_CID},
  { NULL }
};

static nsresult
nsLDAPInitialize()
{
#ifdef PR_LOGGING
    gLDAPLogModule = PR_NewLogModule("ldap");
    if (!gLDAPLogModule) {
        PR_fprintf(PR_STDERR, 
                   "nsLDAP_Initialize(): PR_NewLogModule() failed\n");
        return NS_ERROR_NOT_AVAILABLE;
    }
#endif

    // use NSPR under the hood for all networking
    //
    int rv = prldap_install_routines( NULL, 1 /* shared */ );

    if (rv != LDAP_SUCCESS) {
        MOZ_LOG(gLDAPLogModule, mozilla::LogLevel::Error,
               ("nsLDAPInitialize(): pr_ldap_install_routines() failed: %s\n",
               ldap_err2string(rv)));
        return NS_ERROR_FAILURE;
    }

    // Never block for more than 10000 milliseconds (ie 10 seconds) doing any 
    // sort of I/O operation.
    //
    rv = prldap_set_session_option(0, 0, PRLDAP_OPT_IO_MAX_TIMEOUT, 
                                   10000);
    if (rv != LDAP_SUCCESS) {
        MOZ_LOG(gLDAPLogModule, mozilla::LogLevel::Error,
               ("nsLDAPInitialize(): error setting PRLDAP_OPT_IO_MAX_TIMEOUT:"
                " %s\n", ldap_err2string(rv)));
        return NS_ERROR_FAILURE;
    }

    return NS_OK;
}

static const mozilla::Module kLDAPProtocolModule = {
    mozilla::Module::kVersion,
    kLDAPProtocolCIDs,
    kLDAPProtocolContracts,
    NULL,
    NULL,
    nsLDAPInitialize,
    NULL
};

NSMODULE_DEFN(nsLDAPProtocolModule) = &kLDAPProtocolModule;

#ifdef PR_LOGGING
PRLogModuleInfo *gLDAPLogModule = 0;
#endif