int conntrackcgi_main(void)
{
undefined4 *puVar1;
bool bVar2;
undefined *puVar3;
int iVar4;
char *pcVar5;
char *pcVar6;
size_t sVar7;
uint uVar8;
int iVar9;
size_t sVar10;
undefined4 *__s;
int *piVar11;
code *pcVar12;
char *pcVar13;
void *__ptr;
undefined4 uVar14;
undefined **ppuVar15;
undefined **ppuVar16;
int iVar17;
int iVar18;
int iVar19;
FILE *unaff_s8;
in_addr local_568;
char local_564 [16];
char acStack_554 [128];
char local_4d4 [1156];
uint local_50;
char *local_4c;
uint local_48;
char *local_44;
char *local_40;
char *local_3c;
char *local_38;
in_addr *local_34;
char *local_30;
memset(local_4d4,0,0x80) //possible issue identified - semgrep
builtin_strncpy(local_4d4,"src=",5) //possible issue identified - semgrep
local_4d4[5] = '\0';
local_4d4[0x10] = 'd';
local_4d4[0x11] = 's';
local_4d4[0x12] = 't';
local_4d4[0x13] = '=';
local_4d4[0x14] = '\0';
local_4d4[0x15] = '\0';
local_4d4[0x20] = 's';
local_4d4[0x21] = 'p';
local_4d4[0x22] = 'o';
local_4d4[0x23] = 'r';
local_4d4[0x24] = 't';
local_4d4[0x25] = '=';
local_4d4[0x26] = '\0';
local_4d4[0x27] = '\0';
local_4d4[0x30] = 'd';
local_4d4[0x31] = 'p';
local_4d4[0x32] = 'o';
local_4d4[0x33] = 'r';
local_4d4[0x34] = 't';
local_4d4[0x35] = '=';
local_4d4[0x36] = '\0';
local_4d4[0x37] = '\0';
local_4d4[0x40] = '\0';
local_4d4[0x41] = '\0';
local_4d4[6] = '\0';
local_4d4[7] = '\0';
local_4d4[8] = '\0';
local_4d4[9] = '\0';
local_4d4[10] = '\0';
local_4d4[0xb] = '\0';
local_4d4[0xc] = '\0';
local_4d4[0xd] = '\0';
local_4d4[0xe] = '\0';
local_4d4[0xf] = '\0';
local_4d4[0x16] = '\0';
local_4d4[0x17] = '\0';
local_4d4[0x18] = '\0';
local_4d4[0x19] = '\0';
local_4d4[0x1a] = '\0';
local_4d4[0x1b] = '\0';
local_4d4[0x1c] = '\0';
local_4d4[0x1d] = '\0';
local_4d4[0x1e] = '\0';
local_4d4[0x1f] = '\0';
local_4d4[0x28] = '\0';
local_4d4[0x29] = '\0';
local_4d4[0x2a] = '\0';
local_4d4[0x2b] = '\0';
local_4d4[0x2c] = '\0';
local_4d4[0x2d] = '\0';
local_4d4[0x2e] = '\0';
local_4d4[0x2f] = '\0';
local_4d4[0x38] = '\0';
local_4d4[0x39] = '\0';
local_4d4[0x3a] = '\0';
local_4d4[0x3b] = '\0';
local_4d4[0x3c] = '\0';
local_4d4[0x3d] = '\0';
local_4d4[0x3e] = '\0';
local_4d4[0x3f] = '\0';
local_4d4[0x42] = '\0';
local_4d4[0x43] = '\0';
local_4d4[0x44] = '\0';
local_4d4[0x45] = '\0';
local_4d4[0x70] = '\0';
local_4d4[0x71] = '\0';
local_4d4[0x46] = '\0';
local_4d4[0x47] = '\0';
local_4d4[0x48] = '\0';
local_4d4[0x49] = '\0';
local_4d4[0x4a] = '\0';
local_4d4[0x4b] = '\0';
local_4d4[0x4c] = '\0';
local_4d4[0x4d] = '\0';
local_4d4[0x4e] = '\0';
local_4d4[0x4f] = '\0';
local_4d4[0x50] = '\0';
local_4d4[0x51] = '\0';
local_4d4[0x52] = '\0';
local_4d4[0x53] = '\0';
local_4d4[0x54] = '\0';
local_4d4[0x55] = '\0';
local_4d4[0x56] = '\0';
local_4d4[0x57] = '\0';
local_4d4[0x58] = '\0';
local_4d4[0x59] = '\0';
local_4d4[0x5a] = '\0';
local_4d4[0x5b] = '\0';
local_4d4[0x5c] = '\0';
local_4d4[0x5d] = '\0';
local_4d4[0x5e] = '\0';
local_4d4[0x5f] = '\0';
local_4d4[0x60] = '\0';
local_4d4[0x61] = '\0';
local_4d4[0x62] = '\0';
local_4d4[99] = '\0';
local_4d4[100] = '\0';
local_4d4[0x65] = '\0';
local_4d4[0x66] = '\0';
local_4d4[0x67] = '\0';
local_4d4[0x68] = '\0';
local_4d4[0x69] = '\0';
local_4d4[0x6a] = '\0';
local_4d4[0x6b] = '\0';
local_4d4[0x6c] = '\0';
local_4d4[0x6d] = '\0';
local_4d4[0x6e] = '\0';
local_4d4[0x6f] = '\0';
local_4d4[0x72] = '\0';
local_4d4[0x73] = '\0';
local_4d4[0x74] = '\0';
local_4d4[0x75] = '\0';
local_4d4[0x76] = '\0';
local_4d4[0x77] = '\0';
local_4d4[0x78] = '\0';
local_4d4[0x79] = '\0';
local_4d4[0x7a] = '\0';
local_4d4[0x7b] = '\0';
local_4d4[0x7c] = '\0';
local_4d4[0x7d] = '\0';
local_4d4[0x7e] = '\0';
local_4d4[0x7f] = '\0';
iVar4 = sess_validate();
if (iVar4 < 0) {
pcVar13 = "no authorized";
}
else {
pcVar13 = getenv("REQUEST_METHOD") //possible issue identified - semgrep
if (pcVar13 == (char *)0x0) {
pcVar13 = "no REQUEST";
}
else {
iVar4 = strcasecmp(pcVar13,"POST");
if (iVar4 == 0) {
pcVar12 = FUN_0040eacc;
uVar14 = 0x400;
}
else {
iVar4 = strcasecmp(pcVar13,"GET");
uVar14 = 0x40;
if (iVar4 != 0) {
pcVar13 = "unsupported HTTP request";
goto LAB_0040e0b8;
}
pcVar12 = FUN_0040ea28;
}
iVar4 = cgibin_parse_request(pcVar12,0,uVar14);
puVar3 = PTR_LOOP_00430478;
if (iVar4 < 0) {
pcVar13 = "unable to parse HTTP request";
}
else {
ppuVar15 = (undefined **)0x0;
do {
ppuVar16 = (undefined **)puVar3;
if (ppuVar15 != (undefined **)0x0) {
ppuVar16 = (undefined **)*ppuVar15;
}
if ((ppuVar16 == &PTR_LOOP_00430478) || (ppuVar16 == (undefined **)0x0))
goto LAB_0040e1e4;
iVar18 = strcmp("NETWORK",ppuVar16[2]);
ppuVar15 = ppuVar16;
} while (iVar18 != 0);
local_4c = ppuVar16[3];
if (local_4c == (char *)0x0) {
LAB_0040e1e4:
pcVar13 = "LAN network address not found.";
}
else {
ppuVar15 = (undefined **)0x0;
do {
ppuVar16 = (undefined **)puVar3;
if (ppuVar15 != (undefined **)0x0) {
ppuVar16 = (undefined **)*ppuVar15;
}
if ((ppuVar16 == &PTR_LOOP_00430478) || (ppuVar16 == (undefined **)0x0)) {
pcVar13 = (char *)0x0;
goto LAB_0040e254;
}
iVar18 = strcmp("MASK",ppuVar16[2]);
ppuVar15 = ppuVar16;
} while (iVar18 != 0);
pcVar13 = ppuVar16[3];
LAB_0040e254:
iVar18 = atoi(pcVar13);
uVar8 = -iVar18;
if (iVar18 == 0) {
uVar8 = 0xffffffe8;
}
local_48 = -1 << (uVar8 & 0x1f);
unaff_s8 = fopen("/proc/net/ip_conntrack","r") //possible issue identified - semgrep
if ((unaff_s8 != (FILE *)0x0) ||
(unaff_s8 = fopen("/proc/net/nf_conntrack","r"), unaff_s8 != (FILE *)0x0)) { //possible issue identified - semgrep
local_44 = local_4d4 + 0x80;
local_40 = local_4d4;
local_50 = 1;
local_3c = local_4d4 + 0x40;
local_38 = local_564;
local_34 = &local_568;
local_30 = local_4d4 + 0x50;
iVar19 = 0;
iVar18 = 0;
LAB_0040e788:
do {
pcVar13 = fgets(local_44,0x400,unaff_s8) //possible issue identified - semgrep
if (pcVar13 == (char *)0x0) goto LAB_0040e7a8;
pcVar13 = strrchr(local_44,0x53);
if (pcVar13 != (char *)0x0) {
iVar17 = strncmp(local_44,"tcp",3);
if (iVar17 == 0) {
pcVar13 = strstr(local_44,"ESTABLISHED");
bVar2 = true;
if (pcVar13 == (char *)0x0) goto LAB_0040e788;
}
else {
iVar17 = strncmp(local_44,"udp",3);
bVar2 = false;
if (iVar17 != 0) goto LAB_0040e788;
}
pcVar13 = strchr(local_44,0x20);
do {
pcVar13 = pcVar13 + 1;
} while (*pcVar13 == ' ');
pcVar13 = strchr(pcVar13,0x20);
pcVar5 = strchr(pcVar13 + 1,0x20);
pcVar5 = pcVar5 + 1;
iVar17 = 0;
memset(local_3c,0,0x40) //possible issue identified - semgrep
pcVar13 = local_40;
do {
pcVar5 = strstr(pcVar5,pcVar13);
if (pcVar5 == (char *)0x0) goto LAB_0040e788;
pcVar6 = strchr(pcVar5,0x20);
sVar7 = strlen(pcVar13);
strncpy(pcVar13 + 0x40,pcVar5 + sVar7,(size_t)(pcVar6 + (-sVar7 - (int)pcVar5))) //possible issue identified - semgrep
pcVar13 = pcVar13 + 0x10;
if (iVar17 == 0) {
pcVar6 = local_38;
pcVar6[0] = '\0';
pcVar6[1] = '\0';
pcVar6[2] = '\0';
pcVar6[3] = '\0';
pcVar6[4] = '\0';
pcVar6[5] = '\0';
pcVar6[6] = '\0';
pcVar6[7] = '\0';
pcVar6[8] = '\0';
pcVar6[9] = '\0';
pcVar6[10] = '\0';
pcVar6[0xb] = '\0';
pcVar6[0xc] = '\0';
pcVar6[0xd] = '\0';
pcVar6[0xe] = '\0';
pcVar6[0xf] = '\0';
inet_aton(local_3c,local_34);
uVar8 = local_48 &
(local_568.s_addr << 0x18 | local_568.s_addr >> 0x18 |
(local_568.s_addr & 0xff0000) >> 8 | (local_568.s_addr & 0xff00) << 8);
local_568.s_addr =
uVar8 << 0x18 | uVar8 >> 0x18 | (uVar8 & 0xff0000) >> 8 |
(uVar8 & 0xff00) << 8;
pcVar6 = inet_ntoa(local_568);
strcpy(local_38,pcVar6) //possible issue identified - semgrep
sVar7 = strlen(local_4c);
iVar9 = strncmp(local_38,local_4c,sVar7) //possible issue identified - semgrep
local_50 = (uint)(iVar9 == 0);
}
iVar17 = iVar17 + 1;
} while (iVar17 != 4);
iVar17 = 0;
if (local_50 == 0) {
pcVar13 = strstr(pcVar5,local_40);
if (pcVar13 == (char *)0x0) goto LAB_0040e788;
pcVar5 = strchr(pcVar13,0x20);
sVar7 = strlen(local_40);
memset(local_30,0,0x10) //possible issue identified - semgrep
sVar10 = strlen(local_40);
strncpy(local_30,pcVar13 + sVar10,(size_t)(pcVar5 + (-sVar7 - (int)pcVar13))) //possible issue identified - semgrep
iVar17 = 1;
}
puVar3 = PTR_LOOP_00430470;
pcVar13 = local_40 + (iVar17 + 4) * 0x10;
ppuVar15 = (undefined **)0x0;
do {
ppuVar16 = (undefined **)puVar3;
if (ppuVar15 != (undefined **)0x0) {
ppuVar16 = (undefined **)*ppuVar15;
}
if ((ppuVar16 == &PTR_LOOP_00430470) || (ppuVar16 == (undefined **)0x0)) {
__s = (undefined4 *)malloc(0x20) //possible issue identified - semgrep
if (__s != (undefined4 *)0x0) {
memset(__s,0,0x20) //possible issue identified - semgrep
strcpy((char *)(__s + 2),pcVar13) //possible issue identified - semgrep
if (bVar2) {
__s[6] = __s[6] + 1;
}
else {
__s[7] = __s[7] + 1;
}
puVar3 = PTR_LOOP_00430470;
puVar1 = (undefined4 *)(PTR_LOOP_00430470 + 4);
PTR_LOOP_00430470 = (undefined *)__s;
*puVar1 = __s;
*__s = puVar3;
__s[1] = &PTR_LOOP_00430470;
}
if (!bVar2) goto LAB_0040e784;
goto LAB_0040e77c;
}
iVar17 = strcmp(pcVar13,(char *)(ppuVar16 + 2));
ppuVar15 = ppuVar16;
} while (iVar17 != 0);
if (bVar2) {
ppuVar16[6] = ppuVar16[6] + 1;
LAB_0040e77c:
iVar19 = iVar19 + 1;
}
else {
ppuVar16[7] = ppuVar16[7] + 1;
LAB_0040e784:
iVar18 = iVar18 + 1;
}
}
} while( true );
}
pcVar13 = "open conntrack file failed.";
}
}
}
}
LAB_0040e0b8:
strcpy(acStack_554,pcVar13) //possible issue identified - semgrep
iVar4 = -1;
iVar19 = 0;
iVar18 = 0;
LAB_0040e7a8:
puts("HTTP/1.1 200 OK\r\nContent-Type: text/xml\r\n\r");
puts("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
puts("<conntrack>");
if (iVar4 == -1) {
printf("\t<result>FAILED</result>\n\t<essage>%s</message>\n",acStack_554);
}
else {
puts("\t<result>OK</result>");
puts("\t<essage>");
iVar17 = 0;
ppuVar15 = (undefined **)0x0;
while( true ) {
ppuVar16 = (undefined **)PTR_LOOP_00430470;
if (ppuVar15 != (undefined **)0x0) {
ppuVar16 = (undefined **)*ppuVar15;
}
if ((ppuVar16 == &PTR_LOOP_00430470) || (ppuVar16 == (undefined **)0x0)) break;
iVar17 = iVar17 + 1;
printf("\t\t<entry>\n\t\t\t<ipaddr>%s</ipaddr>\n\t\t\t<tcp>%d</tcp>\n\t\t\t<udp>%d</udp>\n\t\t</entry>\n"
,ppuVar16 + 2,ppuVar16[6],ppuVar16[7]);
ppuVar15 = ppuVar16;
}
printf("\t\t<count>%d</count>\n",iVar17);
printf("\t\t<tcp_count>%d</tcp_count>\n",iVar19);
printf("\t\t<udp_count>%d</udp_count>\n",iVar18);
puts("\t</message>");
}
puts("</conntrack>");
while (puVar3 = PTR_LOOP_00430478, (undefined **)PTR_LOOP_00430478 != &PTR_LOOP_00430478) {
piVar11 = *(int **)(PTR_LOOP_00430478 + 4);
iVar18 = *(int *)PTR_LOOP_00430478;
__ptr = *(void **)(PTR_LOOP_00430478 + 8);
*piVar11 = iVar18;
*(int **)(iVar18 + 4) = piVar11;
*(undefined4 *)puVar3 = 0;
*(undefined4 *)(puVar3 + 4) = 0;
if (__ptr != (void *)0x0) {
free(__ptr);
}
if (*(void **)(puVar3 + 0xc) != (void *)0x0) {
free(*(void **)(puVar3 + 0xc));
}
free(puVar3);
}
while (puVar3 = PTR_LOOP_00430470, (undefined **)PTR_LOOP_00430470 != &PTR_LOOP_00430470) {
piVar11 = *(int **)(PTR_LOOP_00430470 + 4);
iVar18 = *(int *)PTR_LOOP_00430470;
*piVar11 = iVar18;
*(int **)(iVar18 + 4) = piVar11;
*(undefined4 *)puVar3 = 0;
*(undefined4 *)(puVar3 + 4) = 0;
free(puVar3);
}
if (unaff_s8 != (FILE *)0x0) {
fclose(unaff_s8);
}
return iVar4;
}