/*
DBOX Module
Copyright (C) 1994-2000 Daniel Kroening <kroening@handshake.de>
Purpose:
*/
#include <unistd.h>
#include <stdio.h>
#include <time.h>
#include <tools.h>
#include "challenge.h"
void get_challenge(string &challenge, userpt &up)
{
time_t created, now;
time(&now);
challenge="";
up.get("challenge.token", challenge);
created=atol(up|"challenge.created");
if(challenge=="" || (created+10*60)<now)
{
if(!up.lock())
{
if(challenge=="" || (created+5*60)<now)
{
up.set("challenge.oldtoken", challenge);
srand(now+getpid()+str2crc(challenge.c_str()));
char tempstr[TEXTLEN];
snprintf(tempstr, TEXTLEN, "%ld.%d.%d", now, rand(), rand());
challenge=tempstr;
up.set("challenge.token", challenge);
up.set("challenge.created", now);
up.write();
}
up.unlock();
}
}
}
bool verify_challenge(const char *challenge, userpt &up)
{
if(challenge==NULL) return TRUE;
string real_challenge;
up.get("challenge.token", real_challenge);
if(real_challenge!="" && real_challenge==challenge) return FALSE;
up.get("challenge.oldtoken", real_challenge);
if(real_challenge!="" && real_challenge==challenge) return FALSE;
return TRUE;
}
syntax highlighted by Code2HTML, v. 0.9.1