int authentication(char *param_1,char *param_2,char *param_3,int param_4)
{
char cVar1;
uint uVar2;
int iVar3;
size_t sVar4;
int iVar5;
int iVar6;
int iVar7;
int iVar8;
char *pcVar9;
char *pcVar10;
undefined4 uVar11;
int iVar12;
byte bVar13;
byte bVar14;
int iVar15;
undefined4 local_2d8;
int local_2d4 [3];
int local_2c8;
undefined1 auStack_2c4 [16];
char local_2b4 [20];
int local_2a0;
int local_29c;
sysinfo local_294;
undefined1 auStack_254 [88];
int local_1fc;
int local_1f8;
char local_124 [16];
uint local_114;
uint local_110;
iVar3 = sobj_new();
FUN_004080bc();
FUN_00407b10(local_2d4);
iVar15 = -2;
if (iVar3 == 0) {
return -2;
}
if ((param_1 == (char *)0x0) || (param_2 == (char *)0x0)) {
LAB_00408db4:
pcVar9 = (char *)0x0;
goto LAB_00408db8;
}
if (param_4 != 0) {
sVar4 = strlen(param_2);
iVar15 = -3;
if (sVar4 != 0x20) goto LAB_00408db4;
}
local_2d8 = 0;
iVar15 = sobj_new();
iVar5 = sobj_new();
iVar6 = sobj_new();
iVar7 = xs_fopen("/var/passwd","r") //possible issue identified - semgrep
if (iVar7 == 0) {
if (iVar15 == 0) goto LAB_00408a38;
LAB_00408a14:
iVar8 = -1;
pcVar9 = (char *)0x0;
LAB_00408a1c:
sobj_del(iVar15);
}
else {
if (iVar15 != 0) {
if ((iVar5 != 0) && (iVar6 != 0)) {
while( true ) {
sobj_xstream_eatwhite(iVar7);
iVar8 = sobj_xstream_read(iVar7,iVar15,0,&local_2d8) //possible issue identified - semgrep
if (iVar8 < 1) break;
sobj_xstream_eatwhite(iVar7);
iVar8 = sobj_xstream_read(iVar7,iVar5,0,&local_2d8) //possible issue identified - semgrep
if (iVar8 < 1) break;
sobj_xstream_eatwhite(iVar7);
iVar8 = sobj_xstream_read(iVar7,iVar6,0,&local_2d8) //possible issue identified - semgrep
if (iVar8 < 1) break;
pcVar9 = (char *)sobj_get_string(iVar15);
iVar8 = strcmp(param_1,pcVar9);
if (iVar8 == 0) {
pcVar9 = (char *)sobj_strdup(iVar5);
pcVar10 = (char *)sobj_get_string(iVar6);
iVar8 = atoi(pcVar10);
goto LAB_00408a1c;
}
sobj_free(iVar15);
sobj_free(iVar5);
sobj_free(iVar6);
}
}
goto LAB_00408a14;
}
LAB_00408a38:
iVar8 = -1;
pcVar9 = (char *)0x0;
}
if (iVar5 != 0) {
sobj_del(iVar5);
}
if (iVar6 != 0) {
sobj_del(iVar6);
}
if (iVar7 != 0) {
xs_close(iVar7);
}
iVar15 = -2;
if (-1 < iVar8) {
sess_get_uid(iVar3);
uVar11 = sobj_get_string(iVar3);
iVar5 = FUN_0040819c(&local_1fc,uVar11);
if (iVar5 == 0) {
iVar15 = -1;
}
else {
if (param_4 == 0) {
iVar6 = strcmp(param_2,pcVar9);
}
else {
local_2b4[0] = '\0';
local_2b4[1] = '\0';
local_2b4[2] = '\0';
local_2b4[3] = '\0';
local_2b4[4] = '\0';
local_2b4[5] = '\0';
local_2b4[6] = '\0';
local_2b4[7] = '\0';
local_2b4[8] = '\0';
local_2b4[9] = '\0';
local_2b4[10] = '\0';
local_2b4[0xb] = '\0';
local_2b4[0xc] = '\0';
local_2b4[0xd] = '\0';
local_2b4[0xe] = '\0';
local_2b4[0xf] = '\0';
iVar15 = 0;
do {
cVar1 = param_2[iVar15] //possible issue identified - semgrep
bVar13 = cVar1 - 0x30;
bVar14 = bVar13;
if (9 < bVar13) {
bVar14 = cVar1 + 0xa9;
if ((5 < (byte)(cVar1 + 0x9fU)) && (bVar14 = 0, (byte)(cVar1 + 0xbfU) < 6)) {
bVar14 = cVar1 - 0x37;
}
bVar13 = cVar1 + 0xa9;
if ((5 < (byte)(cVar1 + 0x9fU)) && (bVar13 = 0, (byte)(cVar1 + 0xbfU) < 6)) {
bVar13 = cVar1 - 0x37;
}
}
pcVar10 = local_2b4 + iVar15;
iVar15 = iVar15 + 1;
*pcVar10 = bVar13 + bVar14 * '\x10';
} while (iVar15 != 0x10);
MD5Init(auStack_254);
sVar4 = strlen(pcVar9);
MD5Update(auStack_254,pcVar9,sVar4);
MD5Final(auStack_2c4,auStack_254);
iVar6 = memcmp(local_2b4,auStack_2c4,0x10);
}
iVar15 = -3;
if (iVar6 == 0) {
FUN_00407b10(local_2b4 + 0x10);
iVar6 = 0;
iVar15 = 1;
while (iVar7 = iVar15 + 1, iVar15 <= local_2a0) {
iVar12 = FUN_00407ea0(&local_114,iVar15,0);
uVar2 = local_114;
iVar15 = iVar7;
if ((iVar12 == 0) && (sysinfo(&local_294), (uint)local_294.uptime <= uVar2)) {
iVar6 = iVar6 - ((int)~local_110 >> 0x1f);
}
}
iVar15 = -1;
if (iVar6 < local_29c) {
if (local_2c8 != 0) {
iVar15 = -4;
if (param_3 == (char *)0x0) goto LAB_00408db8;
if ((local_124[0] == '\0') || (iVar15 = strcmp(local_124,param_3), iVar15 != 0)) {
iVar15 = -4;
goto LAB_00408db8;
}
}
local_1f8 = iVar8;
sysinfo(&local_294);
local_1fc = local_294.uptime + local_2d4[0];
FUN_00407ea0(&local_1fc,iVar5,1);
iVar15 = iVar8;
}
}
}
}
LAB_00408db8:
sobj_del(iVar3);
if (pcVar9 != (char *)0x0) {
free(pcVar9);
}
return iVar15;
}