From e091580e02cf6e92dcd905d75dba48f718e1774d Mon Sep 17 00:00:00 2001 From: hawkspar <quentin.chevalier@polytechnique.edu> Date: Tue, 15 Jan 2019 21:18:35 +0100 Subject: [PATCH] userData and groupData to classes, clean search, escape filter in Tools not Basics --- src/ldap/internal/basics.ts | 7 +------ src/ldap/internal/tools.ts | 5 +++++ 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/ldap/internal/basics.ts b/src/ldap/internal/basics.ts index c14dbb9..10dfabe 100644 --- a/src/ldap/internal/basics.ts +++ b/src/ldap/internal/basics.ts @@ -105,10 +105,6 @@ export class Basics { if (domain == "gr") { dn+=ldapConfig.dn_groups; } else { dn+=ldapConfig.dn_users; } // Interrogation LDAP selon filter - console.log(dn); - //filter = ldapEscape.filter("${txt}", { txt: filter }); - console.log(filter); - let promise = new Promise<void>(function(resolve, reject) { client.search(dn, { // Must be escaped in case of a malignious false id "scope": "sub", @@ -147,7 +143,7 @@ export class Basics { */ static async searchSingle(domain: 'gr'|'us', attribute: string, id: string=null, filter: string="(objectClass=*)") : Promise<string[]> { let vals=[]; - Basics.search(domain, [attribute], id, filter, entry => { + await Basics.search(domain, [attribute], id, filter, entry => { // Cas un seul attribut où le résultat est une liste directement vals.push(entry.object[attribute]); }); @@ -172,7 +168,6 @@ export class Basics { let vals=[]; await Basics.search(domain, attributes, id, filter, entry => { // Cas plusieurs attributs donc résultat dictionnaire - console.log("Found entry!!"); vals.push({}); attributes.forEach(attribute => { vals.slice(-1)[0][attribute]=entry.object[attribute]; diff --git a/src/ldap/internal/tools.ts b/src/ldap/internal/tools.ts index d22325a..5ee4b03 100644 --- a/src/ldap/internal/tools.ts +++ b/src/ldap/internal/tools.ts @@ -3,6 +3,9 @@ * @author hawkspar */ +// Toutes les entrées utilisateur sont escapées par sécurité +import ldapEscape from 'ldap-escape'; +// Imports internes import {ldapConfig} from './config'; import {Basics} from './basics'; import {userData} from '../export/user'; @@ -82,6 +85,8 @@ export class Tools { let attribute = ""; if (domain="us") { attribute = ldapConfig.user[key]; } else { attribute = ldapConfig.group[key]; } + // Escape user input + val = ldapEscape.dn("${fil}", { fil: val}); // Creation incrémentale du filtre filter="(&"+filter+ "(|("+attribute+"="+ val+")"+ // On cherche la valeur exacte "(|("+attribute+"=*"+val+")"+ // La valeur finale avec des trucs avant ; wildcard * (MEF la wildcart ne marche pas pour tous les attributs) -- GitLab