Don't actually delete the attributes in res.send()

This commit is contained in:
Mark Cavage 2011-11-22 13:29:19 -08:00
parent 57831b56d1
commit e9c1de31f9
3 changed files with 23 additions and 8 deletions

View File

@ -37,14 +37,16 @@ var SERVER_PROBES = {
'server-bind-done': ['int', 'char *', 'char *', 'char *', 'int', 'char *'], 'server-bind-done': ['int', 'char *', 'char *', 'char *', 'int', 'char *'],
// 4: attribute, 5: value // 4: attribute, 5: value
'server-compare-start': ['int', 'char *', 'char *', 'char *', 'char *', 'char *'], 'server-compare-start': ['int', 'char *', 'char *', 'char *',
'char *', 'char *'],
'server-compare-done': ['int', 'char *', 'char *', 'char *', 'int', 'char *'], 'server-compare-done': ['int', 'char *', 'char *', 'char *', 'int', 'char *'],
'server-delete-start': ['int', 'char *', 'char *', 'char *'], 'server-delete-start': ['int', 'char *', 'char *', 'char *'],
'server-delete-done': ['int', 'char *', 'char *', 'char *', 'int', 'char *'], 'server-delete-done': ['int', 'char *', 'char *', 'char *', 'int', 'char *'],
// 4: requestName, 5: requestValue // 4: requestName, 5: requestValue
'server-exop-start': ['int', 'char *', 'char *', 'char *', 'char *', 'char *'], 'server-exop-start': ['int', 'char *', 'char *', 'char *', 'char *',
'char *'],
'server-exop-done': ['int', 'char *', 'char *', 'char *', 'int', 'char *'], 'server-exop-done': ['int', 'char *', 'char *', 'char *', 'int', 'char *'],
// 4: changes.length // 4: changes.length
@ -52,11 +54,14 @@ var SERVER_PROBES = {
'server-modify-done': ['int', 'char *', 'char *', 'char *', 'int', 'char *'], 'server-modify-done': ['int', 'char *', 'char *', 'char *', 'int', 'char *'],
// 4: newRdn, 5: newSuperior // 4: newRdn, 5: newSuperior
'server-modifydn-start': ['int', 'char *', 'char *', 'char *', 'char *', 'char *'], 'server-modifydn-start': ['int', 'char *', 'char *', 'char *', 'char *',
'server-modifydn-done': ['int', 'char *', 'char *', 'char *', 'int', 'char *'], 'char *'],
'server-modifydn-done': ['int', 'char *', 'char *', 'char *', 'int',
'char *'],
// 4: scope, 5: filter // 4: scope, 5: filter
'server-search-start': ['int', 'char *', 'char *', 'char *', 'char *', 'char *'], 'server-search-start': ['int', 'char *', 'char *', 'char *', 'char *',
'char *'],
'server-search-done': ['int', 'char *', 'char *', 'char *', 'int', 'char *'], 'server-search-done': ['int', 'char *', 'char *', 'char *', 'int', 'char *'],
// Last two are searchEntry.DN and seachEntry.attributes.length // Last two are searchEntry.DN and seachEntry.attributes.length
'server-search-entry': ['int', 'char *', 'char *', 'char *', 'char *', 'int'], 'server-search-entry': ['int', 'char *', 'char *', 'char *', 'char *', 'int'],
@ -65,7 +70,7 @@ var SERVER_PROBES = {
'server-unbind-done': ['int', 'char *', 'char *', 'char *', 'int', 'char *'], 'server-unbind-done': ['int', 'char *', 'char *', 'char *', 'int', 'char *'],
// remote IP // remote IP
'server-connection': ['char *'], 'server-connection': ['char *']
}; };

View File

@ -59,16 +59,20 @@ SearchResponse.prototype.send = function(entry, nofiltering) {
if (!entry.attributes) if (!entry.attributes)
throw new Error('entry.attributes required'); throw new Error('entry.attributes required');
var savedAttrs = {};
var all = (self.attributes.indexOf('*') !== -1); var all = (self.attributes.indexOf('*') !== -1);
Object.keys(entry.attributes).forEach(function(a) { Object.keys(entry.attributes).forEach(function(a) {
var _a = a.toLowerCase(); var _a = a.toLowerCase();
if (!nofiltering && _a.length && _a[0] === '_') { if (!nofiltering && _a.length && _a[0] === '_') {
savedAttrs[a] = entry.attributes[a];
delete entry.attributes[a]; delete entry.attributes[a];
} else if (!nofiltering && self.notAttributes.indexOf(_a) !== -1) { } else if (!nofiltering && self.notAttributes.indexOf(_a) !== -1) {
savedAttrs[a] = entry.attributes[a];
delete entry.attributes[a]; delete entry.attributes[a];
} else if (all) { } else if (all) {
// noop // noop
} else if (self.attributes.length && self.attributes.indexOf(_a) === -1) { } else if (self.attributes.length && self.attributes.indexOf(_a) === -1) {
savedAttrs[a] = entry.attributes[a];
delete entry.attributes[a]; delete entry.attributes[a];
} }
}); });
@ -98,10 +102,16 @@ SearchResponse.prototype.send = function(entry, nofiltering) {
c.ldap.bindDN ? c.ldap.bindDN.toString() : '', c.ldap.bindDN ? c.ldap.bindDN.toString() : '',
(self.requestDN ? self.requestDN.toString() : ''), (self.requestDN ? self.requestDN.toString() : ''),
entry.objectName.toString(), entry.objectName.toString(),
entry.attributes.length, entry.attributes.length
]; ];
}); });
} }
// Restore attributes
Object.keys(savedAttrs).forEach(function(k) {
save.attributes[k] = savedAttrs[k];
});
} catch (e) { } catch (e) {
this.log.warn('%s failure to write message %j: %s', this.log.warn('%s failure to write message %j: %s',
this.connection.ldap.id, this.json, e.toString()); this.connection.ldap.id, this.json, e.toString());

View File

@ -175,7 +175,7 @@ function fireDTraceProbe(req, res) {
req._dtraceId, req._dtraceId,
req.connection.remoteAddress || 'localhost', req.connection.remoteAddress || 'localhost',
req.connection.ldap.bindDN.toString(), req.connection.ldap.bindDN.toString(),
req.dn.toString(), req.dn.toString()
]; ];
var op; var op;