undefined4
FUN_00406b14(int param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4,int *param_5,
int param_6,undefined4 param_7,int param_8)
{
int iVar1;
int iVar2;
int *piVar3;
uint uVar4;
undefined4 uVar5;
undefined4 uVar6;
char *pcVar7;
int *piVar8;
void *__s1;
short local_140 [2];
undefined4 local_13c;
undefined4 *local_138;
undefined1 auStack_130 [8];
undefined1 auStack_128 [40];
undefined1 auStack_100 [16];
undefined1 auStack_f0 [184];
void *local_38;
int *local_34;
undefined1 *local_30;
local_140[0] = 0;
if (param_5[2] != 0) {
dprintf(6,"react_confirm","server ID option found");
return 0xffffffff;
}
local_30 = auStack_130;
if (*param_5 == 0) {
dprintf(6,"react_confirm","no client ID option");
return 0xffffffff;
}
dhcp6_init_options(local_30);
iVar1 = duidcpy(auStack_128,&DAT_0043a634);
if (iVar1 == 0) {
iVar1 = duidcpy(local_30,param_5);
if (iVar1 == 0) {
iVar1 = find_hostconf(param_5);
if (iVar1 != 0) {
dprintf(7,"react_confirm","found a host configuration named %s",*(undefined4 *)(iVar1 + 4));
}
iVar2 = FUN_00403aac(param_3,param_4,iVar1,param_5,local_30);
if (iVar2 != 0) {
if (iVar1 == 0) {
uVar5 = duidstr(param_5);
}
else {
uVar5 = *(undefined4 *)(iVar1 + 4);
}
dprintf(6,"react_confirm","failed to process authentication information for %s",uVar5);
goto LAB_00406be8;
}
if (iVar1 == 0) {
if (*(int *)(param_1 + 0x38) == 0) {
pcVar7 = "no client_conf";
}
else {
iVar1 = create_dynamic_hostconf(param_5,param_1 + 0x38);
if (iVar1 != 0) goto LAB_00406d18;
pcVar7 = "failed to make host configuration";
}
dprintf(5,"react_confirm",pcVar7);
}
else {
LAB_00406d18:
local_13c = 0;
local_138 = &local_13c;
iVar2 = dhcp6_copy_list(&local_13c,iVar1 + 0x1c);
if (iVar2 == 0) {
piVar3 = (int *)param_5[0xc];
local_34 = piVar3;
if (piVar3 == (int *)0x0) {
dprintf(6,"react_confirm","no IA-NA option found");
}
else {
local_38 = (void *)(param_1 + 0x1c);
do {
piVar8 = (int *)piVar3[10];
if (piVar8 == (int *)0x0) {
dprintf(6,"react_confirm","no IA-ADDR option found in IA-NA %d",piVar3[3]);
goto LAB_00406be8;
}
uVar4 = *(uint *)(param_6 + 8);
do {
__s1 = local_38;
if ((uVar4 & 0xc0ff) != 0x80fe) {
if (param_8 == 0) {
dprintf(6,"react_confirm","no link-addr found");
goto LAB_00406be8;
}
__s1 = (void *)(**(int **)(*(int *)(param_8 + 4) + 4) + 0xc);
}
iVar2 = memcmp(__s1,piVar8 + 5,8);
if (iVar2 != 0) {
uVar5 = in6addr2str(piVar8 + 5,0);
uVar6 = in6addr2str(__s1,0);
dprintf(6,"react_confirm","%s does not seem to belong to %s\'s link",uVar5,uVar6);
local_140[0] = 4;
goto LAB_00406f10;
}
piVar8 = (int *)*piVar8;
} while (piVar8 != (int *)0x0);
piVar3 = (int *)*piVar3;
} while (piVar3 != (int *)0x0);
do {
iVar2 = FUN_00404d68(local_34,&local_13c,auStack_100,iVar1,1);
if (iVar2 == 0) {
dprintf(7,"react_confirm","IA-NA configuration not found");
goto LAB_00406be8;
}
local_34 = (int *)*local_34;
} while (local_34 != (int *)0x0);
if (local_140[0] == 0) {
dhcp6_clear_list(auStack_100);
}
LAB_00406f10:
iVar2 = dhcp6_add_listval(auStack_f0,2,local_140,0);
if (iVar2 != 0) {
FUN_0040621c(7,param_1,param_3,param_5,param_6,param_7,local_30,param_8,iVar1);
dhcp6_clear_options(local_30);
dhcp6_clear_list(&local_13c);
}
}
}
else {
dprintf(5,"react_confirm","failed to make local data");
}
}
goto LAB_00406be8;
}
pcVar7 = "failed to copy client ID";
}
else {
pcVar7 = "failed to copy server ID";
}
dprintf(3,"react_confirm",pcVar7);
LAB_00406be8:
dhcp6_clear_options(local_30);
dhcp6_clear_list(&local_13c);
return 0xffffffff;
}