Source code

Revision control

Copy as Markdown

Other Tools

/* global processLDAPValues */
/* -*- tab-width: 4; indent-tabs-mode: nil; js-indent-level: 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/. */
/* globals gSandbox */
const LDAPSyncQueryContractID = "@mozilla.org/ldapsyncquery;1";
var gVersion;
var gIsUTF8;
function getPrefBranch() {
return Services.prefs.getBranch(null);
}
function pref(prefName, value) {
try {
var prefBranch = getPrefBranch();
if (typeof value == "string") {
if (gIsUTF8) {
prefBranch.setStringPref(prefName, value);
return;
}
prefBranch.setCharPref(prefName, value);
} else if (typeof value == "number") {
prefBranch.setIntPref(prefName, value);
} else if (typeof value == "boolean") {
prefBranch.setBoolPref(prefName, value);
}
} catch (e) {
displayError("pref", e);
}
}
function defaultPref(prefName, value) {
try {
var prefBranch = Services.prefs.getDefaultBranch(null);
if (typeof value == "string") {
if (gIsUTF8) {
prefBranch.setStringPref(prefName, value);
return;
}
prefBranch.setCharPref(prefName, value);
} else if (typeof value == "number") {
prefBranch.setIntPref(prefName, value);
} else if (typeof value == "boolean") {
prefBranch.setBoolPref(prefName, value);
}
} catch (e) {
displayError("defaultPref", e);
}
}
function lockPref(prefName, value) {
try {
var prefBranch = getPrefBranch();
if (prefBranch.prefIsLocked(prefName)) {
prefBranch.unlockPref(prefName);
}
defaultPref(prefName, value);
prefBranch.lockPref(prefName);
} catch (e) {
displayError("lockPref", e);
}
}
function unlockPref(prefName) {
try {
var prefBranch = getPrefBranch();
prefBranch.unlockPref(prefName);
} catch (e) {
displayError("unlockPref", e);
}
}
function getPref(prefName) {
try {
var prefBranch = getPrefBranch();
switch (prefBranch.getPrefType(prefName)) {
case prefBranch.PREF_STRING:
if (gIsUTF8) {
return prefBranch.getStringPref(prefName);
}
return prefBranch.getCharPref(prefName);
case prefBranch.PREF_INT:
return prefBranch.getIntPref(prefName);
case prefBranch.PREF_BOOL:
return prefBranch.getBoolPref(prefName);
default:
return null;
}
} catch (e) {
displayError("getPref", e);
}
return undefined;
}
function clearPref(prefName) {
try {
var prefBranch = getPrefBranch();
prefBranch.clearUserPref(prefName);
} catch (e) {}
}
function setLDAPVersion(version) {
gVersion = version;
}
function getLDAPAttributes(host, base, filter, attribs, isSecure) {
try {
var urlSpec =
"ldap" +
(isSecure ? "s" : "") +
"://" +
host +
(isSecure ? ":636" : "") +
"/" +
base +
"?" +
attribs +
"?sub?" +
filter;
// nsILDAP* are only defined in comm-central.
// eslint-disable-next-line mozilla/valid-ci-uses
var url = Services.io.newURI(urlSpec).QueryInterface(Ci.nsILDAPURL);
var ldapquery = Cc[LDAPSyncQueryContractID].createInstance(
// eslint-disable-next-line mozilla/valid-ci-uses
Ci.nsILDAPSyncQuery
);
// default to LDAP v3
if (!gVersion) {
// eslint-disable-next-line mozilla/valid-ci-uses
gVersion = Ci.nsILDAPConnection.VERSION3;
}
// user supplied method
if ("processLDAPValues" in gSandbox) {
gSandbox.processLDAPValues(ldapquery.getQueryResults(url, gVersion));
} else {
processLDAPValues(ldapquery.getQueryResults(url, gVersion));
}
} catch (e) {
displayError("getLDAPAttributes", e);
}
}
function getLDAPValue(str, key) {
try {
if (str == null || key == null) {
return null;
}
var search_key = "\n" + key + "=";
var start_pos = str.indexOf(search_key);
if (start_pos == -1) {
return null;
}
start_pos += search_key.length;
var end_pos = str.indexOf("\n", start_pos);
if (end_pos == -1) {
end_pos = str.length;
}
return str.substring(start_pos, end_pos);
} catch (e) {
displayError("getLDAPValue", e);
}
return undefined;
}
function displayError(funcname, message) {
try {
var bundle = Services.strings.createBundle(
);
var title = bundle.GetStringFromName("autoConfigTitle");
var msg = bundle.formatStringFromName("autoConfigMsg", [funcname]);
Services.prompt.alert(null, title, msg + " " + message);
} catch (e) {}
}
function getenv(name) {
try {
return Services.env.get(name);
} catch (e) {
displayError("getEnvironment", e);
}
return undefined;
}
var APIs = {
pref,
defaultPref,
lockPref,
unlockPref,
getPref,
clearPref,
setLDAPVersion,
getLDAPAttributes,
getLDAPValue,
displayError,
getenv,
};
for (let [defineAs, func] of Object.entries(APIs)) {
Cu.exportFunction(func, gSandbox, { defineAs });
}
Object.defineProperty(Cu.waiveXrays(gSandbox), "gIsUTF8", {
get: Cu.exportFunction(() => gIsUTF8, gSandbox),
});