summaryrefslogtreecommitdiffstats
path: root/database/sqlite/administration/useraccount.c
diff options
context:
space:
mode:
Diffstat (limited to 'database/sqlite/administration/useraccount.c')
-rw-r--r--database/sqlite/administration/useraccount.c99
1 files changed, 72 insertions, 27 deletions
diff --git a/database/sqlite/administration/useraccount.c b/database/sqlite/administration/useraccount.c
index a936294..a989257 100644
--- a/database/sqlite/administration/useraccount.c
+++ b/database/sqlite/administration/useraccount.c
@@ -123,9 +123,12 @@ static xmlDoc *useracc_view(eurephiaCTX *ctx, unsigned int infoType,
" ON (os.uid = users.uid)",
NULL, uinfo_map, sortkeys);
- if( uinf == NULL ) {
+ if( sqlite_query_status(uinf) != dbSUCCESS ) {
eurephia_log(ctx, LOG_ERROR, 0, "Error querying the database for a user");
- return eurephiaXML_ResultMsg(ctx, exmlERROR, NULL, "Failed to query the user database");
+ info_n = sqlite_log_error_xml(ctx, uinf);
+ doc = eurephiaXML_ResultMsg(ctx, exmlERROR, info_n, "Failed to query the user database");
+ xmlFreeNode(info_n);
+ goto exit;
}
eurephiaXML_CreateDoc(ctx, 1, "UserAccount", &doc, &root_n);
@@ -188,7 +191,7 @@ static xmlDoc *useracc_view(eurephiaCTX *ctx, unsigned int infoType,
info_n = xmlNewChild(user_n, NULL, (xmlChar *) "certificates", NULL);
assert( info_n != NULL );
- if( (qres != NULL) && (sqlite_get_numtuples(qres) > 0) ) {
+ if( (sqlite_query_status(qres) == dbSUCCESS) && (sqlite_get_numtuples(qres) > 0) ) {
int i;
xmlNode *cert, *acpr;
xmlChar *tmp = NULL;
@@ -216,6 +219,8 @@ static xmlDoc *useracc_view(eurephiaCTX *ctx, unsigned int infoType,
sqlite_xml_value(acpr, XML_ATTR, "accessprofile", qres, i, 7);
sqlite_xml_value(acpr, XML_ATTR, "fwdestination", qres, i, 9);
}
+ } else if( sqlite_query_status(qres) == dbERROR ) {
+ sqlite_log_error(ctx, qres);
}
sqlite_free_results(qres);
}
@@ -238,11 +243,15 @@ static xmlDoc *useracc_view(eurephiaCTX *ctx, unsigned int infoType,
" LEFT JOIN openvpn_certificates cert ON(ll.certid=cert.certid)"
" WHERE uid = '%i' ORDER BY login, logout", uid);
- if( qres == NULL ) {
+ if( sqlite_query_status(qres) != dbSUCCESS ) {
eurephia_log(ctx, LOG_ERROR, 0, "Querying the lastlog failed");
xmlFreeDoc(doc);
- return eurephiaXML_ResultMsg(ctx, exmlERROR, NULL,
+ info_n = sqlite_log_error_xml(ctx, qres);
+ doc = eurephiaXML_ResultMsg(ctx, exmlERROR, info_n,
"Failed to query the lastlog");
+ sqlite_free_results(qres);
+ xmlFreeNode(info_n);
+ return doc;
}
lastl = xmlNewChild(user_n, NULL, (xmlChar *) "lastlog", NULL);
@@ -303,12 +312,18 @@ static xmlDoc *useracc_view(eurephiaCTX *ctx, unsigned int infoType,
" FROM openvpn_attempts "
" WHERE username = '%q'", username);
- if( (qres == NULL) || (sqlite_get_numtuples(qres) > 1) ) {
+ if( (sqlite_query_status(qres) != dbSUCCESS) || (sqlite_get_numtuples(qres) > 1) ) {
eurephia_log(ctx, LOG_ERROR, 0, "Querying for login attempts failed");
- sqlite_free_results(qres);
+ info_n = NULL;
+ if( sqlite_query_status(qres) == dbERROR ) {
+ info_n = sqlite_log_error_xml(ctx, qres);
+ }
xmlFreeDoc(doc);
- return eurephiaXML_ResultMsg(ctx, exmlERROR, NULL,
+ doc = eurephiaXML_ResultMsg(ctx, exmlERROR, info_n,
"Failed to query the login attempts log");
+ sqlite_free_results(qres);
+ xmlFreeNode(info_n);
+ return doc;
}
atmpt = xmlNewChild(user_n, NULL, (xmlChar *) "attempts", NULL);
@@ -331,12 +346,18 @@ static xmlDoc *useracc_view(eurephiaCTX *ctx, unsigned int infoType,
" FROM openvpn_blacklist "
" WHERE username = '%q'", username);
- if( (qres == NULL) || (sqlite_get_numtuples(qres) > 1) ) {
- eurephia_log(ctx, LOG_ERROR, 0, "Querying blacklist log failed");
- sqlite_free_results(qres);
+ if( (sqlite_query_status(qres) != dbSUCCESS) || (sqlite_get_numtuples(qres) > 1) ) {
xmlFreeDoc(doc);
- return eurephiaXML_ResultMsg(ctx, exmlERROR, NULL,
+ eurephia_log(ctx, LOG_ERROR, 0, "Querying blacklist log failed");
+ info_n = NULL;
+ if( sqlite_query_status(qres) == dbERROR ) {
+ info_n = sqlite_log_error_xml(ctx, qres);
+ }
+ doc = eurephiaXML_ResultMsg(ctx, exmlERROR, info_n,
"Failed to query the blacklist log");
+ sqlite_free_results(qres);
+ xmlFreeNode(info_n);
+ return doc;
}
atmpt = xmlNewChild(user_n, NULL, (xmlChar *) "blacklist", NULL);
@@ -351,6 +372,7 @@ static xmlDoc *useracc_view(eurephiaCTX *ctx, unsigned int infoType,
}
}
+ exit:
sqlite_free_results(uinf);
return doc;
}
@@ -380,10 +402,16 @@ static xmlDoc *useracc_add(eurephiaCTX *ctx, eDBfieldMap *usrinf_map) {
// Register the user
res = sqlite_query_mapped(ctx, SQL_INSERT, "INSERT INTO openvpn_users", usrinf_map, NULL, NULL);
- if( (res == NULL) || (sqlite_get_affected_rows(res) == 0) ) {
+ if( (sqlite_query_status(res) != dbSUCCESS) || (sqlite_get_affected_rows(res) == 0) ) {
+ xmlNode *err_n = NULL;
+
eurephia_log(ctx, LOG_FATAL, 0, "Could not register the new user account");
- res_d = eurephiaXML_ResultMsg(ctx, exmlERROR, NULL,
+ if( sqlite_query_status(res) == dbERROR ) {
+ err_n = sqlite_log_error_xml(ctx, res);
+ }
+ res_d = eurephiaXML_ResultMsg(ctx, exmlERROR, err_n,
"Failed to register the user account");
+ xmlFreeNode(err_n);
} else {
xmlChar *uid = malloc_nullsafe(ctx, 34);
xmlNode *info_n = NULL;
@@ -445,9 +473,13 @@ static xmlDoc *useracc_update(eurephiaCTX *ctx, const int uid, eDBfieldMap *valu
// UPDATE the database
uinf = sqlite_query_mapped(ctx, SQL_UPDATE, "UPDATE openvpn_users", value_map, srch_map, NULL);
- if( uinf == NULL ) {
+ if( sqlite_query_status(uinf) != dbSUCCESS ) {
+ xmlNode *err_n = NULL;
+
eurephia_log(ctx, LOG_ERROR, 0, "Error querying the database for a user");
- eurephiaXML_ResultMsg(ctx, exmlERROR, NULL, "Failed to update user (uid %i)", uid);
+ err_n = sqlite_log_error_xml(ctx, uinf);
+ res_d = eurephiaXML_ResultMsg(ctx, exmlERROR, err_n, "Failed to update user (uid %i)", uid);
+ xmlFreeNode(err_n);
} else if( sqlite_get_affected_rows(uinf) == 0 ) {
res_d = eurephiaXML_ResultMsg(ctx, exmlERROR, NULL,
"Could not find any user account with uid %i", uid);
@@ -488,10 +520,14 @@ static xmlDoc *useracc_delete(eurephiaCTX *ctx, const unsigned int uid) {
// Delete the user
res = sqlite_query(ctx, "DELETE FROM openvpn_users WHERE uid = '%i'", uid);
- if( res == NULL ) {
+ if( sqlite_query_status(res) != dbSUCCESS ) {
+ xmlNode *err_n = NULL;
+
eurephia_log(ctx, LOG_FATAL, 0, "Could not delete the user account (uid %i)", uid);
- res_d = eurephiaXML_ResultMsg(ctx, exmlERROR, NULL,
+ err_n = sqlite_log_error_xml(ctx, res);
+ res_d = eurephiaXML_ResultMsg(ctx, exmlERROR, err_n,
"Failed to delete the user account (uid %i)", uid);
+ xmlFreeNode(err_n);
} else if( sqlite_get_affected_rows(res) == 0 ) {
res_d = eurephiaXML_ResultMsg(ctx, exmlERROR, NULL,
"Could not find any user account with uid %i", uid);
@@ -606,10 +642,13 @@ xmlDoc *adminacclvl_Get(eurephiaCTX *ctx, eDBfieldMap *fmap) {
" FROM eurephia_adminaccess eac"
" LEFT JOIN openvpn_users USING(uid)",
NULL, fmap, "uid, interface, access");
- if( res == NULL ) {
+ if( sqlite_query_status(res) != dbSUCCESS ) {
eurephia_log(ctx, LOG_ERROR, 0, "Error querying the database for a access levels");
- return eurephiaXML_ResultMsg(ctx, exmlERROR, NULL,
+ tmp_n = sqlite_log_error_xml(ctx, res);
+ doc = eurephiaXML_ResultMsg(ctx, exmlERROR, tmp_n,
"Error querying the database for a access levels");
+ xmlFreeNode(tmp_n);
+ goto exit;
}
eurephiaXML_CreateDoc(ctx, 1, "admin_access_list", &doc, &root_n);
@@ -628,6 +667,7 @@ xmlDoc *adminacclvl_Get(eurephiaCTX *ctx, eDBfieldMap *fmap) {
tmp_n = sqlite_xml_value(acl_n, XML_NODE, "access", res, i, 3);
sqlite_xml_value(tmp_n, XML_ATTR, "interface", res, i, 2);
}
+ exit:
sqlite_free_results(res);
return doc;
}
@@ -639,7 +679,7 @@ xmlDoc *adminacclvl_Get(eurephiaCTX *ctx, eDBfieldMap *fmap) {
xmlDoc *eDBadminAccessLevel(eurephiaCTX *ctx, xmlDoc *qryxml) {
dbresult *sqlres = NULL;
xmlDoc *res_d = NULL;
- xmlNode *qry_n = NULL, *fmap_n = NULL;
+ xmlNode *qry_n = NULL, *fmap_n = NULL, *err_n = NULL;
eDBfieldMap *fmap_m = NULL;
char *mode = NULL;
@@ -675,17 +715,19 @@ xmlDoc *eDBadminAccessLevel(eurephiaCTX *ctx, xmlDoc *qryxml) {
if( strcmp(mode, "grant") == 0 ) {
sqlres = sqlite_query_mapped(ctx, SQL_INSERT, "INSERT INTO eurephia_adminaccess",
fmap_m, NULL, NULL);
- if( sqlres && (sqlite_get_affected_rows(sqlres) > 0) ) {
+ if( (sqlite_query_status(sqlres) == dbSUCCESS) && (sqlite_get_affected_rows(sqlres) > 0) ) {
res_d = eurephiaXML_ResultMsg(ctx, exmlRESULT, NULL,
"Access level %s (%s) was granted to uid %s",
eDBmappingGetValue(fmap_m, FIELD_ACCESSLVL),
eDBmappingGetValue(fmap_m, FIELD_INTERFACE),
eDBmappingGetValue(fmap_m, FIELD_UID));
+ } else if( sqlite_query_status(sqlres) == dbERROR ) {
+ err_n = sqlite_log_error_xml(ctx, sqlres);
}
} else if( strcmp(mode, "revoke") == 0 ) {
sqlres = sqlite_query_mapped(ctx, SQL_DELETE, "DELETE FROM eurephia_adminaccess",
NULL, fmap_m, NULL);
- if( sqlres && (sqlite_get_affected_rows(sqlres) > 0) ) {
+ if( (sqlite_query_status(sqlres) == dbSUCCESS) && (sqlite_get_affected_rows(sqlres) > 0) ) {
const char *uid = eDBmappingGetValue(fmap_m, FIELD_UID);
const char *acclvl = eDBmappingGetValue(fmap_m, FIELD_ACCESSLVL);
@@ -699,18 +741,21 @@ xmlDoc *eDBadminAccessLevel(eurephiaCTX *ctx, xmlDoc *qryxml) {
"%i access levels was removed from uid %s",
sqlite_get_affected_rows(sqlres), uid);
}
- }
+ } else if( sqlite_query_status(sqlres) == dbERROR ) {
+ err_n = sqlite_log_error_xml(ctx, sqlres);
+ }
} else if( strcmp(mode, "list") == 0 ) {
res_d = adminacclvl_Get(ctx, fmap_m);
}
if( res_d == NULL ) {
eurephia_log(ctx, LOG_ERROR, 0, "Failed to update admin access");
- res_d = eurephiaXML_ResultMsg(ctx, exmlERROR, NULL, "Failed to complete %s operation", mode);
+ res_d = eurephiaXML_ResultMsg(ctx, exmlERROR, err_n, "Failed to complete %s operation", mode);
}
- if( sqlres ) {
- sqlite_free_results(sqlres);
+ if( err_n != NULL ) {
+ xmlFreeNode(err_n);
}
+ sqlite_free_results(sqlres);
eDBfreeMapping(fmap_m);
return res_d;