From 2b9e63386e34db81d76d746811170832d9614468 Mon Sep 17 00:00:00 2001 From: "Jean-Marc Pigeon (Delson)" Date: Wed, 25 Jun 2025 12:31:09 -0400 Subject: [PATCH] Able to read user within database (postgresql) --- lib/devsql.c | 89 +++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 71 insertions(+), 18 deletions(-) diff --git a/lib/devsql.c b/lib/devsql.c index 632a1d1..25ca7d9 100644 --- a/lib/devsql.c +++ b/lib/devsql.c @@ -6,6 +6,7 @@ /* */ /********************************************************/ #include +#include #include #include @@ -47,18 +48,20 @@ static SQLRES *dropresult(SQLTYP *sql,SQLRES *rs) { #define OPEP "devsql.c:dropresult," -switch(sql->sqldb) { - case db_postgres : - rs=(SQLRES *)pos_dropresult((POSRES *)rs); - break; - case db_maria : - rs=(SQLRES *)pos_dropresult((MARRES *)rs); - break; - default : - (void) rou_alert(0,"%s Unexpected type='%d' (BUG!?)", - OPEP,(int)sql->sqldb); - rs=(SQLRES *)0; - break; +if (rs!=(SQLRES *)0) { + switch(sql->sqldb) { + case db_postgres : + rs=(SQLRES *)pos_dropresult((POSRES *)rs); + break; + case db_maria : + rs=(SQLRES *)pos_dropresult((MARRES *)rs); + break; + default : + (void) rou_alert(0,"%s Unexpected type='%d' (BUG!?)", + OPEP,(int)sql->sqldb); + rs=(SQLRES *)0; + break; + } } return rs; #undef OPEP @@ -92,9 +95,14 @@ switch(sql->sqldb) { OPEP,(int)sql->sqldb); break; } +if (value==(char *)0) { + (void) rou_alert(0,"%s value is NULL for field=<%s> (BUG!?)",OPEP,fieldname); + value="00000"; //force value! + } return value; #undef OPEP } +#ifdef JMPDBG /* */ @@ -127,6 +135,7 @@ switch(sql->sqldb) { return value; #undef OPEP } +#endif /* */ @@ -425,6 +434,14 @@ PUBLIC USRTYP *sql_getusr(SQLPTR *sqlptr,char *email) #define OPEP "devsql.c:sql_getuser," #define SELUSR "%s %s WHERE email='%s'" +//field avalable in table "EMAILS" +const char *usrfield[]={ + "email", + "space", + "mxspace", + (char *)0 + }; + USRTYP *usr; SQLTYP *sql; SQLRES *rs; @@ -433,6 +450,7 @@ _Bool proceed; usr=(USRTYP *)0; sql=(SQLTYP *)sqlptr; +rs=(SQLRES *)0; phase=0; proceed=true; while (proceed==true) { @@ -477,18 +495,53 @@ while (proceed==true) { phase=999; //Trouble trouble } break; - case 4 : //getting user information + case 4 : //do we have a user information? int nbr; - if ((nbr=nbrtupple(sql,rs))==1) { - char *rcpt; + nbr=nbrtupple(sql,rs); + switch (nbr) { + case 0 : //No user email found + phase=999; + break; + case 1 : //we have only one record + break; + default : { + char cmt[200]; - rcpt=getvalue(sql,rs,0,"email"); - (void) rou_alert(0,"%s JMPDBG db_rcpt=<%s>",OPEP,rcpt); + (void) memset(cmt,'\000',sizeof(cmt)); + (void) snprintf(cmt,sizeof(cmt)-1,SELUSR,SELFROM,EMAILS,email); + (void) rou_alert(0,"<%s> return '%d' record %s (Database corrupted?)", + cmt,nbr,"while only 1 is expected"); + } + phase=999; + break; + } + break; + case 5 : //extracting user data + usr=(USRTYP *)calloc(1,sizeof(USRTYP)); + for (int i=0;usrfield[i]!=(char *)0;i++) { + char *locval; + + if ((locval=getvalue(sql,rs,0,usrfield[i]))==(char *)0) + continue; + switch (i) { + case 0 : + usr->email=strdup(locval); + break; + case 1 : + usr->space=atoi(locval); + break; + case 2 : + usr->mxspace=atoi(locval); + break; + default : + (void) rou_alert(0,"%s field <%s> not used (Bug?)",OPEP,usrfield[i]); + break; + } } - rs=dropresult(sql,rs); break; default : + rs=dropresult(sql,rs); proceed=false; break; } -- 2.47.3