char *decoded;
TIMESPEC cur;
char *seq;
-char *b64;
+char *code;
+USRTYP *usr;
char *line;
int got;
int phase;
(void) rou_asprintf(&seq,"<%05d-%s@%s>",
cur.tv_nsec,contact->session->sessid,contact->locname);
(void) rou_alert(0,"%s JMPDBG SEQ=<%s>",OPEP,seq);
-b64=cnv_setb64(seq);
+code=(char *)0;
+usr=(USRTYP *)0;
line=(char *)0;
got=0;
phase=0;
proceed=true;
while (proceed==true) {
switch (phase) {
- case 0 : //preparing a string an sending it
+ case 0 : { //preparing a string an sending it
+ char *b64;
+
+ b64=cnv_setb64(seq);
(void) transmit(contact,true,"%d %s",SENDB64,b64);
got=tcp_getline(contact->socptr,delay,&line);
+ if (got<0)
+ phase=999; //Answer not received in due time
+ b64=rou_freestr(b64);
+ }
break;
- case 1 : //extracting B64
- if (got>0) {
- char *code;
+ case 1 : { //extracting code
+ char *name; //extracted name
+ char *ptr;
- code=cnv_getb64(line);
- (void) rou_alert(0,"%s JMPDBG md5 Got <%s>",OPEP,code);
+ code=cnv_getb64(line);
+ name=(char *)0;
+ if ((ptr=strchr(code,' '))!=(char *)0) {
+ *ptr='\000';
+ name=strdup(code);
+ ptr++;
+ (void) memmove(code,ptr,strlen(ptr)+1);
+ }
+ if (name!=(char *)0) {
+ (void) sql_mngusr(contact->sqlptr,sql_select,name,&usr);
+ (void) rou_alert(0,"%s JMPDBG md5 name=<%s>",OPEP,name);
+ name=rou_freestr(name);
+ }
+ if (usr==(USRTYP *)0) {
code=rou_freestr(code);
- line=rou_freestr(line);
+ phase=999;
}
+ line=rou_freestr(line);
+ }
break;
+ case 2 : { //comparing hmac
+ char *local;
+
+ local=cnv_hashmd5(usr->passwd,(unsigned char *)seq);
+ (void) rou_alert(0,"JMPDBG local=<%s>",local);
+ (void) rou_alert(0,"JMPDBG remote=<%s>",code);
+ local=rou_freestr(local);
+ usr=sql_freeusr(usr);
+ }
default : //SAFE Guard
proceed=false;
break;
}
phase++;
}
-b64=rou_freestr(b64);
seq=rou_freestr(seq);
return decoded;