From c21fe9d832cfcfd8e033d735d6d030503886f80e Mon Sep 17 00:00:00 2001 From: "Jean-Marc Pigeon (Delson)" Date: Tue, 8 Jul 2025 07:23:04 -0400 Subject: [PATCH] Added the hash field within devsql.c --- lib/devsql.c | 42 ++++++++++++++++++++++++++---------------- lib/unisql.c | 1 + lib/unisql.h | 1 + sql/mailleur.sql | 9 +++------ 4 files changed, 31 insertions(+), 22 deletions(-) diff --git a/lib/devsql.c b/lib/devsql.c index 99fae2b..80e0bf9 100644 --- a/lib/devsql.c +++ b/lib/devsql.c @@ -36,14 +36,20 @@ typedef struct { #define SESSIONS "sessions" //session tables #define ACTIONS "actions" //action tables +typedef struct { + int num; //field number + char *name; //field name; + }FLDTYP; + //field available in table "emails" -const char *usrfield[]={ - "email", - "password", - "space", - "mxspace", - "locked", - (char *)0 +const FLDTYP usrfield[]={ + {1,"email"}, + {2,"password"}, + {3,"space"}, + {4,"mxspace"}, + {5,"locked"}, + {6,"hash"}, + {0,(char *)0} }; //field available in table "sessions" @@ -352,29 +358,33 @@ while (proceed==true) { break; case 2 : //user data extraction usr=(USRTYP *)calloc(1,sizeof(USRTYP)); - for (int i=0;usrfield[i]!=(char *)0;i++) { + for (int i=0;usrfield[i].num!=0;i++) { char *locval; - if ((locval=getvalue(sql,rs,0,usrfield[i]))==(char *)0) + if ((locval=getvalue(sql,rs,0,usrfield[i].name))==(char *)0) continue; - switch (i) { - case 0 : //user email + switch (usrfield[i].num) { + case 1 : //user email usr->email=strdup(locval); break; - case 1 : //user passwd + case 2 : //user passwd usr->passwd=strdup(locval); break; - case 2 : //user used space + case 3 : //user used space usr->space=atoi(locval); break; - case 3 : //user max space available + case 4 : //user max space available usr->mxspace=atoi(locval); break; - case 4 : //lock status + case 5 : //lock status usr->lock=atoi(locval); break; + case 6 : //'email:realm:password' MD5 + usr->hash=strdup(locval); + break; default : - (void) rou_alert(0,"%s field <%s> not used (Bug?)",OPEP,usrfield[i]); + (void) rou_alert(0,"%s field <%d:%s> not implemented (Bug?)", + OPEP,usrfield[i].num,usrfield[i].name); break; } } diff --git a/lib/unisql.c b/lib/unisql.c index da7f1e4..909a356 100644 --- a/lib/unisql.c +++ b/lib/unisql.c @@ -106,6 +106,7 @@ PUBLIC USRTYP *sql_freeusr(USRTYP *usr) { if (usr!=(USRTYP *)0) { + usr->hash=rou_freestr(usr->hash); usr->passwd=rou_freestr(usr->passwd); usr->email=rou_freestr(usr->email); (void) free(usr); diff --git a/lib/unisql.h b/lib/unisql.h index a858740..e0dcab8 100644 --- a/lib/unisql.h +++ b/lib/unisql.h @@ -24,6 +24,7 @@ typedef struct { u_int lock; //account is lock u_long space; //user space used u_long mxspace; //user maximun space + char *hash; //'email:realm:password' MD5 }USRTYP; //structure about an email session diff --git a/sql/mailleur.sql b/sql/mailleur.sql index 275c6d9..95201dd 100644 --- a/sql/mailleur.sql +++ b/sql/mailleur.sql @@ -55,11 +55,9 @@ CREATE TABLE emails ( email TEXTUNIQUE, //User email password TEXT //User password DFLT '!', - realm TEXT //'email:realm:password' MD5 - DFLT '0ABCD9', - seq BIGINT //HASH as a seq - DFLT 0, - hash TEXT, //'email:realm:passwor' MD5 + realm TEXT //user realm + DFLT 'mailleur-email', + hash TEXT, //'email:realm:password' MD5 space INTEGER //space used by user email DFLT 0, mxspace INTEGER //Maximun space available @@ -75,7 +73,6 @@ GRANT SELECT ON emails TO maildove; CREATE FUNCTION updpass() RETURNS trigger AS $$ BEGIN - NEW.seq = hashtextextended(md5(concat (NEW.email,':',NEW.realm,':',new.password)),0); NEW.hash = md5(concat (NEW.email,':',NEW.realm,':',new.password)); NEW.password = crypt(new.password, gen_salt('md5')); RETURN NEW; -- 2.47.3