From feafcbfe00ead360140d38a9dd2c03da2204b1dc Mon Sep 17 00:00:00 2001 From: Jannik Schönartz Date: Wed, 27 Nov 2019 11:09:43 +0100 Subject: [server/external-backends/infoblox] Add infoblox fix for a client registration in a network where the bas has no permission --- server/api/registration.js | 6 +++--- server/lib/external-backends/backends/infoblox-backend.js | 11 +++++++++-- 2 files changed, 12 insertions(+), 5 deletions(-) (limited to 'server') diff --git a/server/api/registration.js b/server/api/registration.js index 156ec21..202d836 100644 --- a/server/api/registration.js +++ b/server/api/registration.js @@ -152,15 +152,15 @@ noAuthRouter.postAsync('/clients', async (req, res) => { const ipCheck = await dhcp.instance.checkIp(dhcp.backend.credentials, network.ip) // If it's not leased, set the hostname as clientname - if (!ipCheck.leased && ipCheck.name !== '') { + if (!ipCheck.error && !ipCheck.leased && ipCheck.name !== '') { if (ipCheck.name) client.name = ipCheck.name if (ipCheck.id) dhcp.ref = ipCheck.id } else { client.name = client.type + '_' + client.uuid const setIp = await dhcp.instance.setIp(dhcp.backend.credentials, network.ip, network.mac, undefined, true) - dhcp.ref = setIp.ref // Check for errors. if (!setIp.error) { + dhcp.ref = setIp.ref // Client ip set successfully client.networks[0].ip = setIp.ip } else { @@ -222,7 +222,7 @@ noAuthRouter.postAsync('/clients', async (req, res) => { client.id = newClient.id // Add dhcp backend mapping - if (dhcp) dhcp.backend.addMappedClients(newClient, { through: { externalId: dhcp.ref } }) + if (dhcp && dhcp.ref) dhcp.backend.addMappedClients(newClient, { through: { externalId: dhcp.ref } }) // Add groups to the client. if (client.parents.length === 0) client.parents = await ipHelper.getGroups(client.networks[0].ip) diff --git a/server/lib/external-backends/backends/infoblox-backend.js b/server/lib/external-backends/backends/infoblox-backend.js index 3165b05..b4c69e5 100644 --- a/server/lib/external-backends/backends/infoblox-backend.js +++ b/server/lib/external-backends/backends/infoblox-backend.js @@ -77,11 +77,13 @@ class InfobloxBackend extends ExternalBackends { // Get the host and check the leased state let host = JSON.parse(await ipam.getHost(ipv4))[0] - if (host.lease_state && host.lease_state === 'ACTIVE') { + if (host && host.lease_state && host.lease_state === 'ACTIVE') { // If leased return the next 20 free ips of the subnet. const dhcpNetwork = JSON.parse(await ipam.getNetworkFromIp(ipv4)) const nextIps = await ipam.getNext(dhcpNetwork[0]._ref, 20) return { leased: true, nextIps: nextIps } + } else { + return { error: 'HOST_NOT_FOUND' } } let response = { leased: false, id: host._ref } @@ -101,7 +103,12 @@ class InfobloxBackend extends ExternalBackends { // If setNextIp is true, use the next available ip from the subnet if (setNextIp) { - const network = JSON.parse(await ipam.getNetworkFromIp(ipv4)) + try { + const network = JSON.parse(await ipam.getNetworkFromIp(ipv4)) + } catch (e) { + console.log(e) + return { error: 'ERROR_INFOBLOX', msg: 'No network found. Missing permissions?' } + } ipv4 = 'func:nextavailableip:' + network[0].network } const domain = (await ipam.getDomain())[0] -- cgit v1.2.3-55-g7522