From ff0396b74c224e3660ec0593f00b398928ddffc6 Mon Sep 17 00:00:00 2001 From: pemontto Date: Fri, 13 Oct 2023 11:38:19 +0100 Subject: [PATCH] =?UTF-8?q?=F0=9F=A7=B9=20Make=20sure=20to=20unbind=20LDAP?= =?UTF-8?q?=20and=20return=20cleanly?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/nodes-base/nodes/Ldap/Ldap.node.ts | 47 +++++++++++++++++++-- 1 file changed, 43 insertions(+), 4 deletions(-) diff --git a/packages/nodes-base/nodes/Ldap/Ldap.node.ts b/packages/nodes-base/nodes/Ldap/Ldap.node.ts index 54b1814e515a5..38659c8786673 100644 --- a/packages/nodes-base/nodes/Ldap/Ldap.node.ts +++ b/packages/nodes-base/nodes/Ldap/Ldap.node.ts @@ -103,14 +103,16 @@ export class Ldap implements INodeType { credential: ICredentialsDecrypted, ): Promise { const credentials = credential.data as ICredentialDataDecryptedObject; + const client = await createLdapClient(credentials); try { - const client = await createLdapClient(credentials); await client.bind(credentials.bindDN as string, credentials.bindPassword as string); } catch (error) { return { status: 'Error', message: error.message, }; + } finally { + await client.unbind(); } return { status: 'OK', @@ -126,11 +128,21 @@ export class Ldap implements INodeType { try { await client.bind(credentials.bindDN as string, credentials.bindPassword as string); } catch (error) { + await client.unbind(); console.log(error); + return []; } + let results; const baseDN = this.getNodeParameter('baseDN', 0) as string; - const results = await client.search(baseDN, { sizeLimit: 200, paged: false }); // should this size limit be set in credentials? + try { + results = await client.search(baseDN, { sizeLimit: 200, paged: false }); // should this size limit be set in credentials? + } catch (error) { + console.log(error); + return []; + } finally { + await client.unbind(); + } const unique = Object.keys(Object.assign({}, ...results.searchEntries)); return unique.map((x) => ({ @@ -145,11 +157,23 @@ export class Ldap implements INodeType { try { await client.bind(credentials.bindDN as string, credentials.bindPassword as string); } catch (error) { + await client.unbind(); console.log(error); + return []; } const baseDN = this.getNodeParameter('baseDN', 0) as string; - const results = await client.search(baseDN, { sizeLimit: 10, paged: false }); // should this size limit be set in credentials? + + let results; + try { + results = await client.search(baseDN, { sizeLimit: 10, paged: false }); // should this size limit be set in credentials? + } catch (error) { + console.log(error); + return []; + } finally { + await client.unbind(); + } + const objects = []; for (const entry of results.searchEntries) { if (typeof entry.objectClass === 'string') { @@ -177,11 +201,21 @@ export class Ldap implements INodeType { try { await client.bind(credentials.bindDN as string, credentials.bindPassword as string); } catch (error) { + await client.unbind(); console.log(error); + return []; } + let results; const baseDN = this.getNodeParameter('dn', 0) as string; - const results = await client.search(baseDN, { sizeLimit: 1, paged: false }); + try { + results = await client.search(baseDN, { sizeLimit: 1, paged: false }); + } catch (error) { + console.log(error); + return []; + } finally { + await client.unbind(); + } const unique = Object.keys(Object.assign({}, ...results.searchEntries)); return unique.map((x) => ({ @@ -218,6 +252,7 @@ export class Ldap implements INodeType { await client.bind(credentials.bindDN as string, credentials.bindPassword as string); } catch (error) { delete error.cert; + await client.unbind(); if (this.continueOnFail()) { return [ items.map((x) => { @@ -386,6 +421,7 @@ export class Ldap implements INodeType { if (this.continueOnFail()) { returnItems.push({ json: items[itemIndex].json, error, pairedItem: itemIndex }); } else { + await client.unbind(); if (error.context) { error.context.itemIndex = itemIndex; throw error; @@ -399,6 +435,9 @@ export class Ldap implements INodeType { if (nodeDebug) { Logger.info(`[${this.getNode().type} | ${this.getNode().name}] - Finished`); } + + await client.unbind(); + return [returnItems]; } }