/* 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;
}