/* known within database. */
/* */
/********************************************************/
-PUBLIC USRTYP *sql_getusr(SQLPTR *sqlptr,char *email)
+PUBLIC USRTYP *sql_getusr(SQLPTR *sqlptr,char *email,USRTYP **usr)
{
#define OPEP "devsql.c:sql_getuser,"
(char *)0
};
-USRTYP *usr;
SQLTYP *sql;
SQLRES *rs;
int phase;
_Bool proceed;
-usr=(USRTYP *)0;
sql=(SQLTYP *)sqlptr;
rs=(SQLRES *)0;
phase=0;
(void) rou_alert(0,"%s SQL pointer is NUll (Bug?)",OPEP);
phase=999;
}
- break;
- case 1 : //is email defined?
- if ((email==(char *)0)||(strlen(email)==0)) {
- (void) rou_alert(0,"%s Email <%s> is NUll or empty (Bug?)",OPEP,email);
+ if (sql_check_key(email)==false) {
+ (void) rou_alert(0,"%s %s table, key <%s> not acceptable!",
+ OPEP,EMAILS,email);
phase=999;
}
break;
- case 2 : //check email structure
- for (int i=0,l=strlen(email);i<l;i++) {
- register char car;
-
- car=email[i];
- switch (car) {
- case '@' :
- case '.' :
- continue;
- break;
- default :
- if (isalnum((int)car)!=0)
- continue;
- break;
- }
- (void) rou_alert(0,"%s Email <%s> not accepted, '%c' not an email char",
- OPEP,email,car);
- phase=999;
- break;
- }
- break;
- case 3 : //getting user information
+ 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 4 : //do we have a user information?
+ case 2 : //do we have a user information?
int nbr;
nbr=nbrtupple(sql,rs);
break;
}
break;
- case 5 : //extracting user data
- usr=(USRTYP *)calloc(1,sizeof(USRTYP));
+ 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;
continue;
switch (i) {
case 0 : //user email
- usr->email=strdup(locval);
+ (*usr)->email=strdup(locval);
break;
case 1 : //user passwd
- usr->passwd=strdup(locval);
+ (*usr)->passwd=strdup(locval);
break;
case 2 : //user used space
- usr->space=atoi(locval);
+ (*usr)->space=atoi(locval);
break;
case 3 : //user max space available
- usr->mxspace=atoi(locval);
+ (*usr)->mxspace=atoi(locval);
break;
default :
(void) rou_alert(0,"%s field <%s> not used (Bug?)",OPEP,usrfield[i]);
}
phase++;
}
-return usr;
+return *usr;
#undef SELUSR
#undef OPEP
phase++;
}
}
+/*
+\f
+*/
+/************************************************/
+/* */
+/* Routine to check if key is acceptable */
+/* to be used as a search element. */
+/* return true if OK. */
+/* */
+/************************************************/
+PUBLIC _Bool sql_check_key(char *key)
+
+{
+#define OPEP "unisql.c:sql_check_key,"
+
+_Bool isok;
+
+isok=true;
+if ((key!=(char *)0)&&(strlen(key)>0)) {
+ for (int i=0,l=strlen(key);i<l;i++) {
+ register char car;
+
+ car=key[i];
+ switch (car) {
+ case '@' :
+ case '.' :
+ continue;
+ break;
+ default :
+ if (isalnum((int)car)!=0)
+ continue;
+ break;
+ }
+ isok=false;
+ (void) rou_alert(0,"%s search key <%s> not accepted, '%c' is not "
+ "an acceptable char",OPEP,key,car);
+ break; //no need to check further
+ }
+ }
+return isok;
+
+#undef OPEP
+}