undefined4 configure_host(int *param_1)
{
char cVar1;
undefined4 *__s;
int iVar2;
size_t sVar3;
undefined1 *__ptr;
undefined4 uVar4;
char *pcVar5;
int iVar6;
char *pcVar7;
int *piVar8;
undefined1 *puVar9;
int *piVar10;
int *piVar11;
size_t __size;
undefined4 local_40 [2];
undefined4 *local_38;
undefined4 *local_34;
undefined4 *local_30;
undefined4 *local_2c;
dprintf(7,"configure_host","called");
if (param_1 != (int *)0x0) {
do {
__s = (undefined4 *)malloc(0x40) //possible issue identified - semgrep
if (__s == (undefined4 *)0x0) {
pcVar7 = (char *)param_1[1];
pcVar5 = "memory allocation failed for host %s";
LAB_004158ec:
dprintf(3,"configure_host",pcVar5,pcVar7);
return 0xffffffff;
}
memset(__s,0,0x40) //possible issue identified - semgrep
local_34 = __s + 4;
*__s = DAT_0043cd14;
local_30 = __s + 7;
__s[8] = local_30;
pcVar5 = (char *)param_1[1];
__s[4] = 0;
__s[5] = local_34;
__s[7] = 0;
DAT_0043cd14 = __s;
pcVar5 = strdup(pcVar5);
__s[1] = pcVar5;
if (pcVar5 == (char *)0x0) {
pcVar7 = (char *)param_1[1];
pcVar5 = "failed to copy host name: %s";
goto LAB_004158ec;
}
piVar11 = (int *)param_1[3];
if (piVar11 != (int *)0x0) {
local_2c = local_40;
local_38 = __s + 2;
do {
switch(piVar11[2]) {
case 4:
if (__s[3] != 0) {
iVar2 = piVar11[3];
pcVar5 = (char *)param_1[1];
pcVar7 = "%s:%d duplicated DUID for %s";
goto LAB_004154b4;
}
pcVar5 = (char *)piVar11[7];
sVar3 = strlen(pcVar5);
if (((int)sVar3 < 2) ||
(iVar2 = (int)(sVar3 - 2) / 3, __size = iVar2 + 1, sVar3 - 2 != iVar2 * 3)) { //possible issue identified - semgrep
LAB_004157e0:
dprintf(3,"configure_duid","assumption failure (bad string)");
}
else if ((int)__size < 0x81) {
__ptr = (undefined1 *)malloc(__size) //possible issue identified - semgrep
puVar9 = __ptr;
if (__ptr != (undefined1 *)0x0) {
while (cVar1 = *pcVar5, cVar1 != '\0') {
while (cVar1 == ':') {
pcVar5 = pcVar5 + 1;
cVar1 = *pcVar5;
if (cVar1 == '\0') goto LAB_0041577c;
}
iVar2 = sscanf(pcVar5,"%02x",local_2c) //possible issue identified - semgrep
pcVar5 = pcVar5 + 2;
if (iVar2 != 1) {
free(__ptr);
goto LAB_004157e0;
}
*puVar9 = (char)local_40[0];
puVar9 = puVar9 + 1;
}
LAB_0041577c:
__s[3] = __ptr;
__s[2] = __size;
iVar2 = param_1[1];
uVar4 = duidstr(local_38);
dprintf(7,"configure_host","configure DUID for %s: %s",iVar2,uVar4);
break;
}
dprintf(3,"configure_duid","memory allocation failed");
}
else {
dprintf(3,"configure_duid","too long DUID (%d)",__size);
}
iVar2 = piVar11[3];
pcVar5 = (char *)param_1[1];
pcVar7 = "%s:%d failed to configure DUID for %s";
LAB_004154b4:
dprintf(3,"configure_host",pcVar7,configfilename,iVar2,pcVar5);
return 0xffffffff;
case 5:
iVar2 = add_prefix(local_34,__s[1],5,piVar11[7]);
if (iVar2 != 0) {
pcVar7 = (char *)param_1[1];
pcVar5 = "failed to configure prefix for %s";
goto LAB_004158ec;
}
break;
default:
iVar2 = piVar11[3];
pcVar5 = (char *)param_1[1];
pcVar7 = "%s:%d invalid host configuration for %s";
goto LAB_004154b4;
case 8:
if (__s[0xc] == 0) {
pcVar7 = (char *)piVar11[7];
piVar10 = (int *)DAT_0043cd28;
while( true ) {
if (piVar10 == (int *)0x0) {
__s[0xc] = 0;
pcVar5 = "failed to find key information for %s";
goto LAB_004158ec;
}
iVar2 = strcmp(pcVar7,(char *)piVar10[1]);
if (iVar2 == 0) break;
piVar10 = (int *)*piVar10;
}
uVar4 = piVar10[4];
iVar2 = param_1[1];
__s[0xc] = piVar10;
dprintf(7,"configure_host","configure key for delayed auth with %s (keyid=%08x)",iVar2
,uVar4);
}
else {
dprintf(4,"configure_host","%s:%d: duplicate key %s for %s (ignored)",configfilename,
piVar11[3],piVar11[7],param_1[1]);
}
break;
case 9:
iVar2 = add_prefix(local_30,__s[1],7,piVar11[7]);
if (iVar2 != 0) {
pcVar7 = (char *)param_1[1];
pcVar5 = "failed to configure address for %s";
goto LAB_004158ec;
}
break;
case 0xb:
piVar10 = (int *)piVar11[7];
if (DAT_0043cd9c == (int *)0x0) {
LAB_0041599c:
iVar2 = piVar11[3];
pcVar5 = (char *)*piVar10;
pcVar7 = "%s:%d pool \'%s\' not found";
goto LAB_004154b4;
}
pcVar5 = (char *)*piVar10;
piVar8 = DAT_0043cd9c;
while (iVar2 = strcmp(pcVar5,(char *)piVar8[1]), iVar2 != 0) {
piVar8 = (int *)*piVar8;
if (piVar8 == (int *)0x0) goto LAB_0041599c;
}
if ((piVar10[2] != 0xffffffff) &&
((piVar10[1] == 0xffffffff || ((uint)piVar10[2] < (uint)piVar10[1])))) {
iVar2 = piVar11[3];
pcVar5 = "specified a larger preferred lifetime than valid lifetime";
pcVar7 = "%s:%d ";
goto LAB_004154b4;
}
iVar6 = piVar10[2];
iVar2 = piVar10[1];
__s[9] = *piVar10;
__s[10] = iVar2;
__s[0xb] = iVar6;
pcVar5 = strdup((char *)*piVar10);
__s[9] = pcVar5;
if (pcVar5 == (char *)0x0) {
dprintf(3,"configure_host","memory allocation failed",0);
return 0xffffffff;
}
dprintf(7,"configure_host","pool \'%s\' is specified to the host \'%s\'",pcVar5,__s[1]);
}
piVar11 = (int *)*piVar11;
} while (piVar11 != (int *)0x0);
}
param_1 = (int *)*param_1;
} while (param_1 != (int *)0x0);
}
return 0;
}