undefined4 configure_host(int *param_1)

{
  char cVar1;
  undefined4 *__s;
  int iVar2;
  size_t sVar3;
  undefined1 *__ptr;
  undefined4 uVar4;
  char *pcVar5;
  int iVar6;
  char *pcVar7;
  int *piVar8;
  undefined1 *puVar9;
  int *piVar10;
  int *piVar11;
  size_t __size;
  undefined4 local_40 [2];
  undefined4 *local_38;
  undefined4 *local_34;
  undefined4 *local_30;
  undefined4 *local_2c;
  
  dprintf(7,"configure_host","called");
  if (param_1 != (int *)0x0) {
    do {
      __s = (undefined4 *)malloc(0x40)   //possible issue identified - semgrep
      if (__s == (undefined4 *)0x0) {
        pcVar7 = (char *)param_1[1];
        pcVar5 = "memory allocation failed for host %s";
LAB_004121cc:
        dprintf(3,"configure_host",pcVar5,pcVar7);
        return 0xffffffff;
      }
      memset(__s,0,0x40)   //possible issue identified - semgrep
      local_34 = __s + 4;
      *__s = DAT_00441044;
      local_30 = __s + 7;
      __s[8] = local_30;
      pcVar5 = (char *)param_1[1];
      __s[4] = 0;
      __s[5] = local_34;
      __s[7] = 0;
      DAT_00441044 = __s;
      pcVar5 = strdup(pcVar5);
      __s[1] = pcVar5;
      if (pcVar5 == (char *)0x0) {
        pcVar7 = (char *)param_1[1];
        pcVar5 = "failed to copy host name: %s";
        goto LAB_004121cc;
      }
      piVar11 = (int *)param_1[3];
      if (piVar11 != (int *)0x0) {
        local_2c = local_40;
        local_38 = __s + 2;
        do {
          switch(piVar11[2]) {
          case 4:
            if (__s[3] != 0) {
              iVar2 = piVar11[3];
              pcVar5 = (char *)param_1[1];
              pcVar7 = "%s:%d duplicated DUID for %s";
              goto LAB_00411d94;
            }
            pcVar5 = (char *)piVar11[7];
            sVar3 = strlen(pcVar5);
            if (((int)sVar3 < 2) ||
               (iVar2 = (int)(sVar3 - 2) / 3, __size = iVar2 + 1, sVar3 - 2 != iVar2 * 3)) {   //possible issue identified - semgrep
LAB_004120c0:
              dprintf(3,"configure_duid","assumption failure (bad string)");
            }
            else if ((int)__size < 0x81) {
              __ptr = (undefined1 *)malloc(__size)   //possible issue identified - semgrep
              puVar9 = __ptr;
              if (__ptr != (undefined1 *)0x0) {
                while (cVar1 = *pcVar5, cVar1 != '\0') {
                  while (cVar1 == ':') {
                    pcVar5 = pcVar5 + 1;
                    cVar1 = *pcVar5;
                    if (cVar1 == '\0') goto LAB_0041205c;
                  }
                  iVar2 = sscanf(pcVar5,"%02x",local_2c)   //possible issue identified - semgrep
                  pcVar5 = pcVar5 + 2;
                  if (iVar2 != 1) {
                    free(__ptr);
                    goto LAB_004120c0;
                  }
                  *puVar9 = (char)local_40[0];
                  puVar9 = puVar9 + 1;
                }
LAB_0041205c:
                __s[3] = __ptr;
                __s[2] = __size;
                iVar2 = param_1[1];
                uVar4 = duidstr(local_38);
                dprintf(7,"configure_host","configure DUID for %s: %s",iVar2,uVar4);
                break;
              }
              dprintf(3,"configure_duid","memory allocation failed");
            }
            else {
              dprintf(3,"configure_duid","too long DUID (%d)",__size);
            }
            iVar2 = piVar11[3];
            pcVar5 = (char *)param_1[1];
            pcVar7 = "%s:%d failed to configure DUID for %s";
LAB_00411d94:
            dprintf(3,"configure_host",pcVar7,configfilename,iVar2,pcVar5);
            return 0xffffffff;
          case 5:
            iVar2 = FUN_0040fb5c(local_34,__s[1],5,piVar11[7]);
            if (iVar2 != 0) {
              pcVar7 = (char *)param_1[1];
              pcVar5 = "failed to configure prefix for %s";
              goto LAB_004121cc;
            }
            break;
          default:
            iVar2 = piVar11[3];
            pcVar5 = (char *)param_1[1];
            pcVar7 = "%s:%d invalid host configuration for %s";
            goto LAB_00411d94;
          case 8:
            if (__s[0xc] == 0) {
              pcVar7 = (char *)piVar11[7];
              piVar10 = (int *)DAT_00441058;
              while( true ) {
                if (piVar10 == (int *)0x0) {
                  __s[0xc] = 0;
                  pcVar5 = "failed to find key information for %s";
                  goto LAB_004121cc;
                }
                iVar2 = strcmp(pcVar7,(char *)piVar10[1]);
                if (iVar2 == 0) break;
                piVar10 = (int *)*piVar10;
              }
              uVar4 = piVar10[4];
              iVar2 = param_1[1];
              __s[0xc] = piVar10;
              dprintf(7,"configure_host","configure key for delayed auth with %s (keyid=%08x)",iVar2
                      ,uVar4);
            }
            else {
              dprintf(4,"configure_host","%s:%d: duplicate key %s for %s (ignored)",configfilename,
                      piVar11[3],piVar11[7],param_1[1]);
            }
            break;
          case 9:
            iVar2 = FUN_0040fb5c(local_30,__s[1],7,piVar11[7]);
            if (iVar2 != 0) {
              pcVar7 = (char *)param_1[1];
              pcVar5 = "failed to configure address for %s";
              goto LAB_004121cc;
            }
            break;
          case 0xb:
            piVar10 = (int *)piVar11[7];
            if (DAT_004410cc == (int *)0x0) {
LAB_0041227c:
              iVar2 = piVar11[3];
              pcVar5 = (char *)*piVar10;
              pcVar7 = "%s:%d pool \'%s\' not found";
              goto LAB_00411d94;
            }
            pcVar5 = (char *)*piVar10;
            piVar8 = DAT_004410cc;
            while (iVar2 = strcmp(pcVar5,(char *)piVar8[1]), iVar2 != 0) {
              piVar8 = (int *)*piVar8;
              if (piVar8 == (int *)0x0) goto LAB_0041227c;
            }
            if ((piVar10[2] != 0xffffffff) &&
               ((piVar10[1] == 0xffffffff || ((uint)piVar10[2] < (uint)piVar10[1])))) {
              iVar2 = piVar11[3];
              pcVar5 = "specified a larger preferred lifetime than valid lifetime";
              pcVar7 = "%s:%d ";
              goto LAB_00411d94;
            }
            iVar6 = piVar10[2];
            iVar2 = piVar10[1];
            __s[9] = *piVar10;
            __s[10] = iVar2;
            __s[0xb] = iVar6;
            pcVar5 = strdup((char *)*piVar10);
            __s[9] = pcVar5;
            if (pcVar5 == (char *)0x0) {
              dprintf(3,"configure_host","memory allocation failed",0);
              return 0xffffffff;
            }
            dprintf(7,"configure_host","pool \'%s\' is specified to the host \'%s\'",pcVar5,__s[1]);
          }
          piVar11 = (int *)*piVar11;
        } while (piVar11 != (int *)0x0);
      }
      param_1 = (int *)*param_1;
    } while (param_1 != (int *)0x0);
  }
  return 0;
}