int FUN_00404d68(int param_1,int *param_2,undefined4 param_3,int param_4,int param_5)

{
  undefined4 *puVar1;
  int iVar2;
  undefined4 uVar3;
  int *piVar4;
  int iVar5;
  undefined4 *puVar6;
  int iVar7;
  time_t tVar8;
  int *piVar9;
  int iVar10;
  undefined4 local_50;
  undefined4 *local_4c;
  undefined4 local_48;
  undefined4 local_44;
  undefined4 local_40;
  undefined4 local_3c;
  undefined4 local_38;
  int local_30;
  undefined4 *local_2c;
  
  iVar10 = param_4 + 8;
  iVar2 = FUN_00404330(iVar10,0,*(undefined4 *)(param_1 + 8),*(undefined4 *)(param_1 + 0xc));
  if (iVar2 != 0) {
    uVar3 = FUN_00404404(iVar2);
    dprintf(7,"make_ia","we have a binding already: %s",uVar3);
    FUN_00404500(iVar2);
    local_40 = *(undefined4 *)(param_1 + 0xc);
    local_3c = 0;
    local_38 = 0;
    FUN_00403448(&local_40,iVar2 + 0x1c,param_4);
    iVar10 = dhcp6_add_listval(param_3,*(undefined4 *)(param_1 + 8),&local_40,iVar2 + 0x1c);
    if (iVar10 == 0) {
      dprintf(5,"make_ia","failed to copy binding info");
      return 0;
    }
    for (piVar9 = *(int **)(iVar2 + 0x1c); piVar9 != (int *)0x0; piVar9 = (int *)*piVar9) {
      piVar4 = (int *)dhcp6_find_listval(param_2,piVar9[2],piVar9 + 3,0);
      if (piVar4 != (int *)0x0) {
        iVar2 = *piVar4;
        if (iVar2 == 0) {
          param_2[1] = piVar4[1];
        }
        else {
          *(int *)(iVar2 + 4) = piVar4[1];
        }
        *(int *)piVar4[1] = iVar2;
        dhcp6_clear_listval();
      }
    }
    return 1;
  }
  piVar9 = (int *)*param_2;
  if (piVar9 == (int *)0x0) {
    if (*(int *)(param_1 + 8) != 6) {
      return 0;
    }
    if (*(int *)(param_4 + 0x24) == 0) {
      return 0;
    }
  }
  piVar4 = *(int **)(param_1 + 0x28);
  local_4c = &local_50;
  local_50 = 0;
  local_2c = local_4c;
  if (piVar4 == (int *)0x0) {
LAB_0040511c:
    if (piVar9 == (int *)0x0) {
      if (*(int *)(param_1 + 8) != 6) {
        return 0;
      }
      if (*(int *)(param_4 + 0x24) == 0) {
        return 0;
      }
      iVar2 = FUN_00404a7c(param_4 + 0x24,0,local_2c);
      if (iVar2 == 0) {
        return 0;
      }
      iVar2 = 1;
    }
    else {
      while ((*(int *)(param_1 + 8) == 6 && (iVar2 = is_leased(piVar9 + 5), iVar2 != 0))) {
        piVar9 = (int *)*piVar9;
        if (piVar9 == (int *)0x0) {
          return 0;
        }
      }
      iVar2 = dhcp6_add_listval(local_2c,piVar9[2],piVar9 + 3,0);
      if (iVar2 == 0) {
        return 0;
      }
      iVar2 = *piVar9;
      if (iVar2 == 0) {
        param_2[1] = piVar9[1];
      }
      else {
        *(int *)(iVar2 + 4) = piVar9[1];
      }
      *(int *)piVar9[1] = iVar2;
      dhcp6_clear_listval(piVar9);
      iVar2 = 1;
    }
  }
  else {
    local_30 = param_4 + 0x24;
    iVar2 = 0;
LAB_00404fe4:
    do {
      if (piVar4[2] != 2) {
        if (*param_2 == 0) {
          if ((*(int *)(param_1 + 8) == 6) && (*(int *)(param_4 + 0x24) != 0)) {
            iVar5 = FUN_00404a7c(local_30,piVar4,local_2c);
            if (iVar5 == 0) {
              return 0;
            }
            piVar4 = (int *)*piVar4;
            iVar2 = iVar2 + 1;
            if (piVar4 == (int *)0x0) break;
            goto LAB_00404fe4;
          }
        }
        else {
          piVar9 = (int *)dhcp6_find_listval(param_2,piVar4[2],piVar4 + 3,0);
          if (piVar9 == (int *)0x0) {
            if (piVar4[2] == 5) {
              piVar9 = (int *)dhcp6_find_listval(param_2,5,piVar4 + 3,1);
              if (piVar9 != (int *)0x0) goto LAB_00404f78;
            }
            else if (piVar4[2] == 7) {
              is_leased(piVar4 + 5);
            }
            else {
              dprintf(3,"make_match_ia","unsupported IA type");
            }
          }
          else {
LAB_00404f78:
            iVar5 = dhcp6_add_listval(local_2c,piVar9[2],piVar9 + 3,0);
            if (iVar5 != 0) {
              iVar5 = *piVar9;
              if (iVar5 == 0) {
                param_2[1] = piVar9[1];
              }
              else {
                *(int *)(iVar5 + 4) = piVar9[1];
              }
              *(int *)piVar9[1] = iVar5;
              dhcp6_clear_listval(piVar9);
              iVar2 = iVar2 + 1;
            }
          }
        }
      }
      piVar4 = (int *)*piVar4;
    } while (piVar4 != (int *)0x0);
    if (iVar2 == 0) {
      piVar9 = (int *)*param_2;
      goto LAB_0040511c;
    }
  }
  local_40 = *(undefined4 *)(param_1 + 0xc);
  local_3c = 0;
  local_38 = 0;
  FUN_00403448(&local_40,local_2c,param_4);
  if (param_5 == 0) {
LAB_0040508c:
    iVar10 = dhcp6_add_listval(param_3,*(undefined4 *)(param_1 + 8),&local_40,local_2c);
    if (iVar10 == 0) {
      iVar2 = 0;
    }
  }
  else {
    iVar5 = *(int *)(param_1 + 8);
    uVar3 = *(undefined4 *)(param_1 + 0xc);
    puVar6 = (undefined4 *)malloc(0x30)   //possible issue identified - semgrep
    if (puVar6 == (undefined4 *)0x0) {
      dprintf(5,"add_binding","failed to allocate memory");
    }
    else {
      *puVar6 = 0;
      puVar6[1] = 0;
      puVar6[3] = 0;
      puVar6[4] = 0;
      puVar6[5] = 0;
      puVar6[6] = 0;
      puVar6[7] = 0;
      puVar6[8] = 0;
      puVar6[9] = 0;
      puVar6[10] = 0;
      puVar6[0xb] = 0;
      puVar6[2] = 0;
      iVar7 = duidcpy(puVar6 + 3,iVar10);
      if (iVar7 == 0) {
        puVar6[7] = 0;
        puVar6[8] = puVar6 + 7;
        puVar6[6] = uVar3;
        puVar6[5] = iVar5;
        iVar7 = dhcp6_copy_list(puVar6 + 7,local_2c);
        if (iVar7 == 0) {
          if (iVar5 != 6) {
LAB_004052f4:
            tVar8 = time((time_t *)0x0);
            puVar6[10] = tVar8;
            FUN_0040330c(puVar6);
            if (puVar6[9] != -1) {
              iVar10 = dhcp6_add_timer(FUN_004056b4,puVar6);
              puVar6[0xb] = iVar10;
              if (iVar10 == 0) {
                dprintf(5,"add_binding","failed to add timer");
                goto LAB_00405508;
              }
              local_48 = 0xffffffff;
              local_44 = 0;
              dhcp6_set_timer(&local_48,iVar10);
            }
            *puVar6 = 0;
            *DAT_00439604 = puVar6;
            puVar1 = puVar6;
            puVar6[1] = DAT_00439604;
            DAT_00439604 = puVar1;
            uVar3 = FUN_00404404(puVar6);
            dprintf(7,"add_binding","add a new binding %s",uVar3);
            goto LAB_0040508c;
          }
          piVar9 = (int *)puVar6[7];
          if (piVar9 != (int *)0x0) {
            do {
              piVar4 = (int *)*piVar9;
              if (piVar9[2] == 7) {
                iVar5 = lease_address(piVar9 + 5,iVar10);
                if (iVar5 == 0) {
                  uVar3 = in6addr2str(piVar9 + 5,0);
                  dprintf(5,"add_binding","cannot lease address %s",uVar3);
                  iVar5 = *piVar9;
                  if (iVar5 == 0) {
                    puVar6[8] = piVar9[1];
                    iVar5 = *piVar9;
                  }
                  else {
                    *(int *)(iVar5 + 4) = piVar9[1];
                  }
                  *(int *)piVar9[1] = iVar5;
                  dhcp6_clear_listval(piVar9);
                }
              }
              else {
                dprintf(3,"add_binding","unexpected binding value type(%d)",piVar9[2]);
              }
              piVar9 = piVar4;
            } while (piVar4 != (int *)0x0);
            if (puVar6[7] != 0) goto LAB_004052f4;
          }
          dprintf(5,"add_binding","cannot lease any address");
        }
        else {
          dprintf(5,"add_binding","failed to copy binding data");
        }
      }
      else {
        dprintf(5,"add_binding","failed to copy DUID");
      }
LAB_00405508:
      FUN_00404c30(puVar6);
    }
    dprintf(5,"make_ia","failed to make a binding");
    iVar2 = 0;
  }
  dhcp6_clear_list(local_2c);
  return iVar2;
}