Discussion:
[lsc-changes] [Ldap Synchronization...] page added: documentation:howto:adrangescript
webmaster
2014-05-16 14:57:39 UTC
Permalink
A page in your DokuWiki was added or changed. Here are the details:

Date : 2014/05/16 16:57
Browser : Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:29.0) Gecko/20100101 Firefox/29.0
IP-Address : 88.173.78.196
Hostname : mne69-10-88-173-78-196.fbx.proxad.net
Old Revision: none
New Revision: http://lsc-project.org/wiki/documentation/howto/adrangescript
Edit Summary: created
User : coudot

====== Script to bypass AD range ======

Active Directory has a default limit for returning values of a multi-valued attribute, called range.

The following script can be used to bypass this limit. You can register it in an external js file (see [[documentation:latest:scripting:]]).

<file javascript>
function getRangeValues(attrName) {
var newDataset = new Array();
var rangeStart = null;
var rangeEnd = null;
var rangeSize = null;
var arrayCounter = 0;
var tmpDataset = srcBean.getDatasetValuesById(attrName).toArray();
if (tmpDataset.length > 0) {
rangeStart = 0
rangeEnd = "*"
rangeSize = 0
} else {
var attrList = srcBean.getDatasetsNames().toArray()
if (attrList != null) {
if (attrList.length > 0) {
for (var i = 0; i < attrList.length; i++) {
if (attrList[i].toString().contains(attrName + ";range")) {
var startPos = null
var sepPos = null
startPos = attrList[i].toString().indexOf(";range=") + 7
sepPos = attrList[i].toString().indexOf("-", startPos)
rangeStart = attrList[i].toString().substring(startPos, sepPos)
rangeEnd = attrList[i].toString().substring(sepPos + 1)
rangeSize = Number(rangeEnd) - Number(rangeStart)
break
}
}
}
}
}
if (rangeStart != null) {
var tmpAttrName = "";
while (rangeStart != "*") {
if (rangeStart == "0" && rangeEnd != "*") {
tmpAttrName = attrName + ";range=" + rangeStart.toString() + "-" + rangeEnd.toString()
tmpDataset = srcBean.getDatasetValuesById(tmpAttrName).toArray()
} else if (rangeStart != "0") {
tmpAttrName = "member;range=" + rangeStart.toString() + "-" + rangeEnd.toString()
tmpDataset = srcLdap.attribute(srcBean.getMainIdentifier(), tmpAttrName).toArray()
}
if (rangeEnd == "*") {
rangeStart = "*"
}
if (tmpDataset != null) {
if (tmpDataset.length > 0) {
for (var i = 0; i < tmpDataset.length; i++) {
// Add attribute value processing logic here;
// Be sure to explicitly type the array elements to prevent conversion to an object array;
newDataset[arrayCounter++] = String(tmpDataset[i])
}
if (rangeEnd != "*") {
rangeStart = Number(rangeEnd) + 1
rangeEnd = Number(rangeStart) + Number(rangeSize)
}
} else {
rangeEnd = "*"
}
} else {
rangeEnd = "*"
}
}
}
return newDataset;
}
</file>
--
This mail was generated by DokuWiki at
http://lsc-project.org/wiki/
Loading...