}SQLTYP;
//SQL database request
-#define SELFROM "SELECT * FROM"
#define EMAILS "emails" //emails tables
+
+//field available in table "EMAILS"
+const char *usrfield[]={
+ "email",
+ "passwd",
+ "space",
+ "mxspace",
+ (char *)0
+ };
+
/*
\f
*/
return value;
#undef OPEP
}
-#ifdef JMPDBG
+#ifdef GETFIELD
/*
\f
*/
*/
/********************************************************/
/* */
+/* Procedure to select a user from emails tables */
+/* and return contents; */
+/* */
+/********************************************************/
+static USRTYP *select_user(SQLTYP *sql,char *email)
+
+{
+#define OPEP "devsql.c:select_user,"
+#define SELUSR "SELECT * FROM "EMAILS" WHERE email='%s'"
+
+USRTYP *usr;
+SQLRES *rs;
+char cmd[300];
+register int phase;
+register _Bool proceed;
+
+usr=(USRTYP *)0;
+rs=(SQLRES *)0;
+(void) snprintf(cmd,sizeof(cmd),SELUSR,email);
+phase=0;
+proceed=true;
+while (proceed==true) {
+ switch (phase) {
+ case 0 : //Selecting user
+ if ((rs=gettupple(sql,cmd))==(SQLRES *)0) {
+ (void) rou_alert(0,"%s Unable to get data for user <%s> (Database?)",
+ OPEP,email);
+ phase=999; //user not found within database
+ }
+ break;
+ case 1 : //do we have ONE user
+ int nbr;
+
+ nbr=nbrtupple(sql,rs);
+ switch (nbr) {
+ case 0 : //No user email found
+ phase=999; //this could append
+ break;
+ case 1 : //we have only one record, found user
+ break;
+ default : //such case should never ever happen
+ (void) rou_alert(0,"<%s> return '%d' record %s (Database corrupted?)",
+ cmd,nbr,"while only 1 is expected");
+ phase=999;
+ break;
+ }
+ break;
+ case 2 : //user data extraction
+ 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 : //user email
+ usr->email=strdup(locval);
+ break;
+ case 1 : //user passwd
+ usr->passwd=strdup(locval);
+ break;
+ case 2 : //user used space
+ usr->space=atoi(locval);
+ break;
+ case 3 : //user max space available
+ usr->mxspace=atoi(locval);
+ break;
+ default :
+ (void) rou_alert(0,"%s field <%s> not used (Bug?)",OPEP,usrfield[i]);
+ break;
+ }
+ }
+ break;
+ default : //SAFE Guard
+ rs=dropresult(sql,rs);
+ proceed=false;
+ break;
+ }
+ phase++;
+ }
+return usr;
+
+#undef SELUSR
+#undef OPEP
+}
+/*
+\f
+*/
+/********************************************************/
+/* */
/* Procedure to establish a link with the */
/* designated SQL server. */
/* */
/* known within database. */
/* */
/********************************************************/
-PUBLIC USRTYP *sql_getusr(SQLPTR *sqlptr,char *email,USRTYP **usr)
+PUBLIC _Bool sql_mngusr(SQLPTR *sqlptr,SQLENUM action,char *email,USRTYP **usr)
{
-#define OPEP "devsql.c:sql_getuser,"
-#define SELUSR "%s %s WHERE email='%s'"
-
-//field avalable in table "EMAILS"
-const char *usrfield[]={
- "email",
- "passwd",
- "space",
- "mxspace",
- (char *)0
- };
+#define OPEP "devsql.c:sql_mngusr,"
SQLTYP *sql;
-SQLRES *rs;
+_Bool isok;
int phase;
_Bool proceed;
sql=(SQLTYP *)sqlptr;
-rs=(SQLRES *)0;
+isok=false;
phase=0;
proceed=true;
while (proceed==true) {
}
break;
case 1 : //getting user information
- if ((rs=gettupple(sql,SELUSR,SELFROM,EMAILS,email))==(SQLRES *)0) {
- (void) rou_alert(0,"%s Unable to get data for user <%s> (Database?)",
- OPEP,email);
- phase=999; //Trouble trouble
- }
- break;
- case 2 : //do we have a user information?
- int nbr;
-
- 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];
-
- (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;
+ switch (action) {
+ case sql_select :
+ if ((*usr=select_user(sql,email))!=(USRTYP *)0)
+ isok=true;
break;
- }
- break;
- case 3 : //preparing user data
- *usr=sql_freeusr(*usr);
- *usr=(USRTYP *)calloc(1,sizeof(USRTYP));
- break;
- case 4 : //extracting user data
- 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 : //user email
- (*usr)->email=strdup(locval);
- break;
- case 1 : //user passwd
- (*usr)->passwd=strdup(locval);
- break;
- case 2 : //user used space
- (*usr)->space=atoi(locval);
- break;
- case 3 : //user max space available
- (*usr)->mxspace=atoi(locval);
- break;
- default :
- (void) rou_alert(0,"%s field <%s> not used (Bug?)",OPEP,usrfield[i]);
- break;
- }
+ default :
+ (void) rou_alert(0,"%s action='%d' not yet implemented!",OPEP,action);
}
break;
default :
- rs=dropresult(sql,rs);
proceed=false;
break;
}
phase++;
}
-return *usr;
+return isok;
-#undef SELUSR
#undef OPEP
}