/* WARNING: Removing unreachable block (ram,0x00406cec) */
/* WARNING: Removing unreachable block (ram,0x00406cf4) */
/* WARNING: Removing unreachable block (ram,0x00406cfc) */
/* WARNING: Removing unreachable block (ram,0x00406d3c) */
/* WARNING: Removing unreachable block (ram,0x00406d30) */
/* WARNING: Removing unreachable block (ram,0x00406d40) */
/* WARNING: Removing unreachable block (ram,0x00406844) */
/* WARNING: Removing unreachable block (ram,0x00406f64) */
/* WARNING: Removing unreachable block (ram,0x00406fb0) */
/* WARNING: Removing unreachable block (ram,0x00406fcc) */
/* WARNING: Removing unreachable block (ram,0x00406fec) */
/* WARNING: Removing unreachable block (ram,0x00406ff4) */
/* WARNING: Removing unreachable block (ram,0x00407088) */
/* WARNING: Removing unreachable block (ram,0x004070a0) */
/* WARNING: Removing unreachable block (ram,0x00407064) */
int fwup_main(void)
{
bool bVar1;
undefined *__ptr;
char *pcVar2;
int iVar3;
char *pcVar4;
int iVar5;
FILE *pFVar6;
int iVar7;
undefined4 uVar8;
int iVar9;
undefined4 uVar10;
undefined4 uVar11;
int *piVar12;
void *pvVar13;
char *__s;
code *pcVar14;
bool bVar15;
char acStack_1b0 [80];
stat asStack_160 [3];
int iStack_30;
pcVar2 = (char *)sobj_new();
iVar3 = sobj_new();
if (((pcVar2 == (char *)0x0) || (iVar3 == 0)) ||
(pcVar4 = getenv("REQUEST_METHOD"), pcVar4 == (char *)0x0)) { //possible issue identified - semgrep
iVar5 = -1;
goto LAB_004070d8;
}
iVar5 = strcasecmp(pcVar4,"POST");
if (iVar5 != 0) {
cgibin_print_http_status(400,"unsupported HTTP request","unsupported HTTP request");
iVar5 = -1;
goto LAB_004070d8;
}
iVar5 = cgibin_parse_request(&LAB_00407228,0,0x3a0000);
if (-1 < iVar5) {
pcVar4 = (char *)FUN_00405b10("REPORT_METHOD");
bVar15 = true;
if (pcVar4 != (char *)0x0) {
iVar7 = strcasecmp(pcVar4,"xml");
bVar15 = iVar7 != 0;
}
iVar7 = FUN_00405b10("REPORT");
if (iVar7 == 0) {
pcVar4 = getenv("HTTP_REFERER") //possible issue identified - semgrep
pcVar14 = strdup;
}
else {
sobj_add_string(pcVar2,"http://");
pcVar4 = getenv("HTTP_HOST") //possible issue identified - semgrep
sobj_add_string(pcVar2,pcVar4);
pcVar4 = getenv("SERVER_PORT") //possible issue identified - semgrep
iVar9 = strcasecmp(pcVar4,"80");
if (iVar9 != 0) {
sobj_add_char(pcVar2,0x3a);
pcVar4 = getenv("SERVER_PORT") //possible issue identified - semgrep
sobj_add_string(pcVar2,pcVar4);
}
sobj_add_char(pcVar2,0x2f);
sobj_add_string(pcVar2,iVar7);
pcVar14 = sobj_strdup;
pcVar4 = pcVar2;
}
pvVar13 = (void *)(*pcVar14)(pcVar4);
pcVar4 = (char *)FUN_00405b10("DELAY");
iStack_30 = 0;
if (pcVar4 != (char *)0x0) {
iStack_30 = atoi(pcVar4);
}
iVar7 = sess_ispoweruser();
if (iVar7 == 0) {
cgibin_print_http_resp(bVar15,pvVar13,&DAT_0041e01c,"ERR_UNAUTHORIZED_SESSION",0xffffffff,"");
fwupgrade_log(3);
LAB_00406ca4:
iVar5 = -1;
}
else {
uVar8 = sess_validate();
pFVar6 = fopen("/etc/config/image_sign","r") //possible issue identified - semgrep
if (pFVar6 != (FILE *)0x0) {
pcVar4 = fgets(&DAT_00430de0,0x80,pFVar6) //possible issue identified - semgrep
if (pcVar4 == (char *)0x0) {
cgibin_print_http_resp(bVar15,pvVar13,&DAT_0041e01c,"ERR_READ_SIGN_FAIL",0xffffffff,"");
goto LAB_00406ca4;
}
fclose(pFVar6);
cgibin_reatwhite(&DAT_00430de0);
iVar7 = stat("/var/run/fwseama.lock",asStack_160) //possible issue identified - semgrep
if ((iVar7 == -1) && (iVar7 = open("/var/run/fwseama.lock",0x302,0x1ff), iVar7 != 0)) { //possible issue identified - semgrep
iVar9 = lockf(iVar7,1,0);
bVar1 = true;
if (iVar9 == 0) {
sobj_free(pcVar2);
iVar5 = FUN_00405bb8(pcVar2,1);
FUN_0040667c(iVar3);
if (iVar5 == 0) {
pcVar4 = "SUCCESS";
}
else {
pcVar4 = "FAIL";
}
uVar10 = sobj_get_string(pcVar2);
uVar11 = sobj_get_string(iVar3);
cgibin_print_http_resp(bVar15,pvVar13,pcVar4,uVar10,uVar8,uVar11);
if (iVar5 == 0) {
sprintf(acStack_1b0 + 0x10,"preupdate:%d:event PREFWUPDATE",iStack_30) //possible issue identified - semgrep
xmldbc_timer(0,0,acStack_1b0 + 0x10);
bVar1 = false;
}
else {
fwupgrade_log(2);
bVar1 = false;
}
}
close(iVar7);
if (iVar5 != 0) {
unlink("/var/run/fwseama.lock") //possible issue identified - semgrep
}
iVar5 = 0;
if (!bVar1) goto LAB_004070b8;
}
FUN_0040667c(iVar3);
uVar10 = sobj_get_string(iVar3);
cgibin_print_http_resp
(bVar15,pvVar13,&DAT_0041e01c,"ERR_ANOTHER_FWUP_PROGRESS",uVar8,uVar10);
iVar5 = 0;
}
}
LAB_004070b8:
if (pvVar13 != (void *)0x0) {
free(pvVar13);
}
goto LAB_004070d8;
}
if (iVar5 == -100) {
pcVar4 = (char *)FUN_00405b10("REPORT");
if (pcVar4 == (char *)0x0) {
pFVar6 = fopen("/htdocs/web/info.php","r") //possible issue identified - semgrep
if (pFVar6 == (FILE *)0x0) {
acStack_1b0[0] = '\0';
acStack_1b0[1] = '\0';
acStack_1b0[2] = '\0';
acStack_1b0[3] = '\0';
acStack_1b0[4] = '\0';
acStack_1b0[5] = '\0';
acStack_1b0[6] = '\0';
acStack_1b0[7] = '\0';
acStack_1b0[8] = '\0';
acStack_1b0[9] = '\0';
acStack_1b0[10] = '\0';
acStack_1b0[0xb] = '\0';
acStack_1b0[0xc] = '\0';
acStack_1b0[0xd] = '\0';
acStack_1b0[0xe] = '\0';
acStack_1b0[0xf] = '\0';
pcVar4 = getenv("CONTENT_LENGTH") //possible issue identified - semgrep
__s = acStack_1b0;
iVar7 = atoi(pcVar4);
sprintf(__s,"%d",iVar7) //possible issue identified - semgrep
pcVar4 = acStack_1b0 + 8;
sprintf(pcVar4,"%d",0x3a0000) //possible issue identified - semgrep
uVar8 = 0x19d;
goto LAB_004069d0;
}
fclose(pFVar6);
pcVar4 = "info.php";
}
FUN_0040667c(iVar3);
uVar8 = sobj_get_string(iVar3);
cgibin_print_http_resp(1,pcVar4,&DAT_0041e01c,"ERR_REQ_TOO_LONG",0,uVar8);
}
else {
pcVar4 = "unsupported HTTP request";
uVar8 = 400;
__s = "unsupported HTTP request";
LAB_004069d0:
cgibin_print_http_status(uVar8,pcVar4,__s);
}
LAB_004070d8:
if (DAT_00430e60 != 0) {
free((void *)DAT_00430e60);
}
if (pcVar2 != (char *)0x0) {
sobj_del(pcVar2);
}
if (iVar3 != 0) {
sobj_del(iVar3);
}
while (__ptr = PTR_LOOP_00430420, (undefined **)PTR_LOOP_00430420 != &PTR_LOOP_00430420) {
piVar12 = *(int **)(PTR_LOOP_00430420 + 4);
iVar3 = *(int *)PTR_LOOP_00430420;
pvVar13 = *(void **)(PTR_LOOP_00430420 + 8);
*piVar12 = iVar3;
*(int **)(iVar3 + 4) = piVar12;
*(undefined4 *)__ptr = 0;
*(undefined4 *)(__ptr + 4) = 0;
if (pvVar13 != (void *)0x0) {
free(pvVar13);
}
if (*(void **)(__ptr + 0xc) != (void *)0x0) {
free(*(void **)(__ptr + 0xc));
}
free(__ptr);
}
cgibin_clean_tempfiles();
return iVar5;
}