/* WARNING: Removing unreachable block (ram,0x00412478) */
/* WARNING: Heritage AFTER dead removal. Example location: r0x00438d84 : 0x00412228 */
/* WARNING: Restarted to delay deadcode elimination for space: ram */

undefined4 configure_authinfo(int *param_1)

{
  undefined4 *puVar1;
  int iVar2;
  char *pcVar3;
  int *piVar4;
  
  if (param_1 != (int *)0x0) {
    do {
      puVar1 = (undefined4 *)malloc(0x14)   //possible issue identified - semgrep
      if (puVar1 == (undefined4 *)0x0) {
        iVar2 = param_1[1];
        pcVar3 = "memory allocation failed for auth info %s";
LAB_00412454:
        dprintf(3,"configure_authinfo",pcVar3,iVar2);
        return 0xffffffff;
      }
      puVar1[1] = 0;
      pcVar3 = (char *)param_1[1];
      *puVar1 = DAT_0043cd30;
      puVar1[2] = 0xffffffff;
      DAT_0043cd30 = puVar1;
      puVar1[3] = 0xffffffff;
      puVar1[4] = 0xffffffff;
      pcVar3 = strdup(pcVar3);
      puVar1[1] = pcVar3;
      if (pcVar3 == (char *)0x0) {
        iVar2 = param_1[1];
        pcVar3 = "failed to copy auth info name: %s";
        goto LAB_00412454;
      }
      for (piVar4 = (int *)param_1[3]; piVar4 != (int *)0x0; piVar4 = (int *)*piVar4) {
        iVar2 = piVar4[2];
        if (iVar2 == 0x27) {
          if (puVar1[3] == -1) {
            puVar1[3] = piVar4[4];
          }
          else {
            dprintf(4,"configure_authinfo","%s:%d duplicate algorithm for auth info %s (ignored)",
                    configfilename,piVar4[3],param_1[1]);
          }
        }
        else if (iVar2 < 0x28) {
          if (iVar2 != 0x26) {
LAB_00412214:
            dprintf(3,"configure_authinfo","%s:%d invalid auth info parameter for %s",configfilename
                    ,piVar4[3],param_1[1]);
            return 0xffffffff;
          }
          if (puVar1[2] == -1) {
            puVar1[2] = piVar4[4];
          }
          else {
            dprintf(4,"configure_authinfo","%s:%d duplicate protocol for auth info %s (ignored)",
                    configfilename,piVar4[3],param_1[1]);
          }
        }
        else if (iVar2 == 0x28) {
          if (puVar1[4] == -1) {
            puVar1[4] = piVar4[4];
          }
          else {
            dprintf(4,"configure_authinfo","%s:%d duplicate RDM for auth info %s (ignored)",
                    configfilename,piVar4[3],param_1[1]);
          }
        }
        else {
          if (iVar2 != 0x29) goto LAB_00412214;
          dprintf(4,"configure_authinfo","%s:%d auth info specific keys are not supported",
                  configfilename,piVar4[3]);
        }
      }
      iVar2 = puVar1[2];
      if (iVar2 == 2) {
        dprintf(3,"configure_authinfo","client-only auth protocol is specified");
        return 0xffffffff;
      }
      if ((iVar2 != 3) && (iVar2 == -1)) {
        iVar2 = param_1[1];
        pcVar3 = "auth protocol is not specified for %s";
        goto LAB_00412454;
      }
      if (puVar1[3] == -1) {
        puVar1[3] = 1;
      }
      if (puVar1[4] == -1) {
        puVar1[4] = 0;
      }
      param_1 = (int *)*param_1;
    } while (param_1 != (int *)0x0);
  }
  return 0;
}