undefined4
mrt_membership_report
(in_addr param_1,in_addr param_2,in_addr param_3,undefined1 param_4,undefined4 param_5)
{
char *pcVar1;
uint uVar2;
int iVar3;
undefined4 uVar4;
undefined4 **ppuVar5;
undefined4 *puVar6;
undefined4 *puVar7;
int iVar8;
undefined4 **ppuVar9;
char *__s;
uint uVar10;
code *pcVar11;
char acStack_1a0 [32];
char acStack_180 [32];
char acStack_160 [32];
char acStack_140 [32];
char acStack_120 [128];
char acStack_a0 [128];
pcVar1 = inet_ntoa(param_1);
strcpy(acStack_1a0,pcVar1) //possible issue identified - semgrep
pcVar1 = inet_ntoa(param_2);
strcpy(acStack_180,pcVar1) //possible issue identified - semgrep
pcVar1 = inet_ntoa(param_3);
strcpy(acStack_160,pcVar1) //possible issue identified - semgrep
uVar2 = vifs_find_by_ip(param_1.s_addr,1,1);
uVar10 = uVar2 & 0xffff;
if ((int)uVar2 < 0) {
LAB_004064a8:
uVar4 = 0xffffffff;
}
else {
iVar3 = vifs_is_upstream(uVar10);
uVar4 = 0xffffffff;
if (iVar3 == 0) {
uVar4 = igmp_type(param_4);
verbose("%s: %s %s --> %s for %s\n","mrt_membership_report",uVar4,acStack_1a0,acStack_180,
acStack_160);
ppuVar9 = (undefined4 **)0x0;
do {
ppuVar5 = (undefined4 **)DAT_0041b9c0;
if (ppuVar9 != (undefined4 **)0x0) {
ppuVar5 = (undefined4 **)*ppuVar9;
}
if ((ppuVar5 == &DAT_0041b9c0) || (ppuVar5 == (undefined4 **)0x0)) {
ppuVar5 = (undefined4 **)malloc(0x50) //possible issue identified - semgrep
if (ppuVar5 == (undefined4 **)0x0) goto LAB_004064a8;
memset(ppuVar5,0,0x50) //possible issue identified - semgrep
ppuVar5[5] = ppuVar5 + 5;
ppuVar5[6] = ppuVar5 + 5;
ppuVar5[3] = ppuVar5 + 3;
ppuVar5[2] = (undefined4 *)param_3.s_addr;
ppuVar5[4] = ppuVar5 + 3;
puVar6 = (undefined4 *)sloop_register_timeout(0,0,FUN_00405688,ppuVar5);
puVar7 = DAT_0041b9c4;
*ppuVar5 = &DAT_0041b9c0;
DAT_0041b9c4 = ppuVar5;
ppuVar5[7] = puVar6;
*puVar7 = ppuVar5;
ppuVar5[1] = puVar7;
break;
}
ppuVar9 = ppuVar5;
} while (ppuVar5[2] != (undefined4 *)param_3.s_addr);
FUN_004056e8(ppuVar5,param_5);
insert_multicast_ip(param_3.s_addr << 0x18 | param_3.s_addr >> 0x18 |
(param_3.s_addr & 0xff0000) >> 8 | (param_3.s_addr & 0xff00) << 8,
param_1.s_addr << 0x18 | param_1.s_addr >> 0x18 |
(param_1.s_addr & 0xff0000) >> 8 | (param_1.s_addr & 0xff00) << 8);
ppuVar9 = (undefined4 **)0x0;
do {
if (ppuVar9 == (undefined4 **)0x0) {
ppuVar9 = (undefined4 **)ppuVar5[5];
}
else {
ppuVar9 = (undefined4 **)*ppuVar9;
}
if ((ppuVar9 == ppuVar5 + 5) || (ppuVar9 == (undefined4 **)0x0)) {
ppuVar9 = (undefined4 **)malloc(0x24) //possible issue identified - semgrep
if (ppuVar9 == (undefined4 **)0x0) {
return 0xffffffff;
}
memset(ppuVar9,0,0x24) //possible issue identified - semgrep
ppuVar9[3] = ppuVar9 + 2;
iVar3 = o_helperscript;
puVar7 = ppuVar5[6];
ppuVar9[2] = ppuVar9 + 2;
*ppuVar9 = ppuVar5 + 5;
ppuVar5[6] = ppuVar9;
*puVar7 = ppuVar9;
ppuVar9[4] = ppuVar5;
*(short *)(ppuVar9 + 5) = (short)uVar2;
ppuVar9[1] = puVar7;
if (iVar3 != 0) {
pcVar1 = inet_ntoa((in_addr)ppuVar5[2]);
uVar4 = vifs_get_name(uVar10);
snprintf(acStack_120,0x7f,"sh %s add \"%s\" \"%s\"",iVar3,pcVar1,uVar4) //possible issue identified - semgrep
system(acStack_120) //possible issue identified - semgrep
}
FUN_004050a4(ppuVar5);
break;
}
} while (*(ushort *)(ppuVar9 + 5) != uVar10);
pcVar1 = inet_ntoa(param_1);
strcpy(acStack_140,pcVar1) //possible issue identified - semgrep
ppuVar5 = (undefined4 **)0x0;
do {
if (ppuVar5 == (undefined4 **)0x0) {
ppuVar5 = (undefined4 **)ppuVar9[2];
}
else {
ppuVar5 = (undefined4 **)*ppuVar5;
}
if ((ppuVar5 == ppuVar9 + 2) || (ppuVar5 == (undefined4 **)0x0)) {
puVar7 = (undefined4 *)malloc(0x18) //possible issue identified - semgrep
if (puVar7 == (undefined4 *)0x0) break;
uVar2 = ppuVar9[4][2];
*(undefined1 *)(puVar7 + 4) = 0;
*(undefined1 *)((int)puVar7 + 0x11) = 0;
*(undefined1 *)((int)puVar7 + 0x12) = 0;
*(undefined1 *)((int)puVar7 + 0x13) = 0;
*(undefined1 *)(puVar7 + 5) = 0;
*(undefined1 *)((int)puVar7 + 0x15) = 0;
iVar8 = FUN_00405dcc(acStack_140,puVar7 + 4);
iVar3 = o_helperscript;
if (iVar8 == -1) {
pcVar11 = puts;
__s = "can\'t find mac in arp table, igmp return";
}
else {
puVar6 = ppuVar9[3];
*puVar7 = ppuVar9 + 2;
ppuVar9[3] = puVar7;
puVar7[3] = param_1.s_addr;
*puVar6 = puVar7;
puVar7[2] = ppuVar9;
puVar7[1] = puVar6;
if (iVar3 == 0) break;
pcVar1 = inet_ntoa((in_addr)ppuVar9[4][2]);
uVar4 = vifs_get_name(*(undefined2 *)(ppuVar9 + 5));
__s = acStack_a0;
snprintf(__s,0x7f,
"sh %s add_member \"%s\" \"%s\" \"%s\" \"%02x:%02x:%02x:%02x:%02x:%02x\" \"%02x:%02x:%02x:%02x:%02x:%02x\""
,iVar3,pcVar1,uVar4,acStack_140,1,0,0x5e,((uVar2 & 0x7f00) << 8) >> 0x10,
(uVar2 >> 8 & 0xff00) >> 8,uVar2 >> 0x18,(uint)*(byte *)(puVar7 + 4),
(uint)*(byte *)((int)puVar7 + 0x11),(uint)*(byte *)((int)puVar7 + 0x12),
(uint)*(byte *)((int)puVar7 + 0x13),(uint)*(byte *)(puVar7 + 5),
(uint)*(byte *)((int)puVar7 + 0x15)) //possible issue identified - semgrep
pcVar11 = system;
}
(*pcVar11)(__s);
break;
}
} while ((undefined4 *)param_1.s_addr != ppuVar5[3]);
if (ppuVar9[7] != (undefined4 *)0x0) {
sloop_cancel_timeout();
}
puVar7 = (undefined4 *)sloop_register_timeout(0x7d,0,FUN_004054bc,ppuVar9);
ppuVar9[7] = puVar7;
ppuVar9[6] = (undefined4 *)0x0;
uVar4 = 0;
}
}
return uVar4;
}