undefined4
FUN_0040621c(undefined4 param_1,undefined4 param_2,undefined4 *param_3,undefined4 param_4,
int param_5,undefined4 param_6,int param_7,int *param_8,int param_9)
{
undefined4 uVar1;
int iVar2;
undefined4 *puVar3;
undefined4 uVar4;
int iVar5;
int local_1150;
undefined1 *local_114c;
undefined4 local_1148;
undefined4 local_1144;
undefined4 local_1140;
undefined4 local_113c;
undefined4 local_1138;
undefined4 local_1134;
undefined4 local_1130;
undefined1 auStack_1128 [184];
undefined1 auStack_1070 [8];
undefined1 auStack_1068 [56];
undefined1 local_1030;
undefined1 uStack_102f;
undefined1 uStack_102e;
undefined1 uStack_102d;
undefined2 uStack_102c;
int local_102a;
int local_1026;
int local_1022;
int local_101e;
int local_101a;
int local_1016;
int local_1012;
undefined1 auStack_100e [4062];
undefined4 *****local_30;
undefined1 *local_2c;
uVar1 = *param_3;
local_30 = &local_30;
uStack_102f = (undefined1)((uint)uVar1 >> 8);
uStack_102e = (undefined1)((uint)uVar1 >> 0x10);
uStack_102d = (undefined1)((uint)uVar1 >> 0x18);
local_1030 = (undefined1)param_1;
iVar2 = dhcp6_set_options(param_1,&uStack_102c,local_30,param_7);
iVar5 = iVar2 + 4;
if (iVar2 < 0) {
dprintf(6,"server6_send","failed to construct reply options");
uVar1 = 0xffffffff;
}
else {
if (*(int *)(param_7 + 0xcc) == 2) {
if ((param_9 == 0) || (*(int *)(param_9 + 0x30) == 0)) {
dprintf(3,"server6_send","authentication required but not key provided");
}
else {
iVar2 = dhcp6_calc_mac(&local_1030,iVar5,2,*(undefined4 *)(param_7 + 0xd0),
*(int *)(param_7 + 0xec) + 4,*(int *)(param_9 + 0x30));
if (iVar2 != 0) {
dprintf(4,"server6_send","failed to calculate MAC");
return 0xffffffff;
}
}
}
param_8 = (int *)*param_8;
puVar3 = DAT_00439608;
if (param_8 != (int *)0x0) {
local_2c = auStack_1070;
do {
dhcp6_init_options(auStack_1128);
local_1150 = iVar5;
local_114c = &local_1030;
iVar2 = dhcp6_vbuf_copy(local_2c,&local_1150);
if (iVar2 != 0) {
return 0xffffffff;
}
if ((param_8[0xc] != 0) && (iVar2 = dhcp6_vbuf_copy(auStack_1068,param_8 + 0xb), iVar2 != 0)
) {
dhcp6_vbuf_free(local_2c);
return 0xffffffff;
}
memset(&local_1030,0,0x22) //possible issue identified - semgrep
local_1030 = 0xd;
uStack_102f = (undefined1)param_8[2];
local_1022 = param_8[6];
local_102a = param_8[4];
local_1026 = param_8[5];
iVar2 = param_8[3];
uStack_102e = (undefined1)iVar2;
uStack_102d = (undefined1)((uint)iVar2 >> 8);
uStack_102c = (undefined2)((uint)iVar2 >> 0x10);
local_1012 = param_8[10];
local_101a = param_8[8];
local_1016 = param_8[9];
local_101e = param_8[7];
iVar2 = dhcp6_set_options(0xd,auStack_100e,local_30,auStack_1128);
iVar5 = iVar2 + 0x22;
if (iVar2 < 0) {
dprintf(6,"server6_send","failed to construct relay message");
dhcp6_clear_options(auStack_1128);
return 0xffffffff;
}
dhcp6_clear_options(auStack_1128);
param_8 = (int *)*param_8;
puVar3 = DAT_0043960c;
} while (param_8 != (int *)0x0);
}
local_1148 = *puVar3;
local_1144 = puVar3[1];
local_113c = *(undefined4 *)(param_5 + 0xc);
local_1138 = *(undefined4 *)(param_5 + 0x10);
local_1134 = *(undefined4 *)(param_5 + 0x14);
local_1130 = *(undefined4 *)(param_5 + 0x18);
local_1140 = *(undefined4 *)(param_5 + 8);
iVar2 = transmit_sa(outsock,&local_1148,&local_1030,iVar5);
if (iVar2 == 0) {
uVar1 = dhcp6msgstr(param_1);
uVar4 = addr2str(&local_1148);
dprintf(7,"server6_send","transmit %s to %s",uVar1,uVar4);
uVar1 = 0;
}
else {
uVar1 = dhcp6msgstr(param_1);
uVar4 = addr2str(&local_1148);
dprintf(3,"server6_send","transmit %s to %s failed",uVar1,uVar4);
uVar1 = 0xffffffff;
}
}
return uVar1;
}