]> SAFE projects GIT repository - jmp/mailleur/commitdiff
Able to read user within database (postgresql)
authorJean-Marc Pigeon (Delson) <jmp@safe.ca>
Wed, 25 Jun 2025 16:31:09 +0000 (12:31 -0400)
committerJean-Marc Pigeon (Delson) <jmp@safe.ca>
Wed, 25 Jun 2025 16:31:09 +0000 (12:31 -0400)
lib/devsql.c

index 632a1d160e55fc57c9f7c2479a2481b05f1e25e2..25ca7d9484a438ab7551ec8496e35967bdc989c7 100644 (file)
@@ -6,6 +6,7 @@
 /*                                                     */
 /********************************************************/
 #include        <ctype.h>
+#include        <stdio.h>
 #include        <stdlib.h>
 #include        <string.h>
 
@@ -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
 /*
 \f
 */
@@ -127,6 +135,7 @@ switch(sql->sqldb) {
 return value;
 #undef  OPEP
 }
+#endif
 /*
 \f
 */
@@ -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;
     }