diff options
author | David Sommerseth <dazo@users.sourceforge.net> | 2008-12-19 12:42:19 +0100 |
---|---|---|
committer | David Sommerseth <dazo@users.sourceforge.net> | 2008-12-19 12:42:19 +0100 |
commit | 7a61aea700649c48c087d89425acca65a6f9b839 (patch) | |
tree | 46d91f8cead669c09f4b1c9fb78bb2a0fd193e89 | |
parent | a755481dbe8946a168988ed00561e153fecc8636 (diff) | |
download | eurephia-7a61aea700649c48c087d89425acca65a6f9b839.tar.gz eurephia-7a61aea700649c48c087d89425acca65a6f9b839.tar.xz eurephia-7a61aea700649c48c087d89425acca65a6f9b839.zip |
sqlite - admin: Added fetching login attempt for user. Fixed a memory leak and removed XML dump for debug
-rw-r--r-- | database/sqlite/administration.c | 34 |
1 files changed, 30 insertions, 4 deletions
diff --git a/database/sqlite/administration.c b/database/sqlite/administration.c index 389f446..079e49c 100644 --- a/database/sqlite/administration.c +++ b/database/sqlite/administration.c @@ -426,6 +426,7 @@ xmlDoc *eDBadminGetUserInfo(eurephiaCTX *ctx, int getInfo, xmlDoc *srch) { dbresult *uinf = NULL, *qres = NULL; eDBfieldMap *uinfo_map = NULL; int flag = 0, uid = 0; + char *username = NULL; xmlDoc *doc = NULL; xmlNode *root_n = NULL, *info_n = NULL, *fieldmap = NULL; @@ -465,10 +466,11 @@ xmlDoc *eDBadminGetUserInfo(eurephiaCTX *ctx, int getInfo, xmlDoc *srch) { case 1: uid = atoi_nullsafe(sqlite_get_value(uinf, 0, 4)); + username = sqlite_get_value(uinf, 0, 0); eurephiaXML_CreateDoc(ctx, 1, "user", &doc, &root_n); - sqlite_xml_value(root_n, XML_ATTR, "uid", uinf, 0, 4); sqlite_xml_value(root_n, XML_NODE, "username", uinf, 0, 0); + sqlite_xml_value(root_n, XML_ATTR, "uid", uinf, 0, 4); if( (getInfo & USERINFO_user) == USERINFO_user ) { info_n = xmlNewChild(root_n, NULL, (xmlChar *) "flags", NULL); @@ -500,8 +502,6 @@ xmlDoc *eDBadminGetUserInfo(eurephiaCTX *ctx, int getInfo, xmlDoc *srch) { sqlite_xml_value(root_n, XML_NODE, "deactivated", uinf, 0, 2); info_n = sqlite_xml_value(root_n, XML_NODE, "last_accessed", uinf, 0, 3); sqlite_xml_value(info_n, XML_ATTR, "logincount", uinf, 0, 7); - - sqlite_free_results(uinf); } if( (getInfo & USERINFO_certs) == USERINFO_certs ) { @@ -601,9 +601,35 @@ xmlDoc *eDBadminGetUserInfo(eurephiaCTX *ctx, int getInfo, xmlDoc *srch) { sqlite_xml_value(tmp2, XML_ATTR, "accessprofile", qres, i, 17); sqlite_xml_value(tmp2, XML_ATTR, "fwdestination", qres, i, 19); } - xmlSaveFormatFileEnc("-", doc, "UTF-8", 1); + sqlite_free_results(qres); } + if( (getInfo & USERINFO_attempts) == USERINFO_attempts ) { + xmlNode *atmpt = NULL; + + qres = sqlite_query(ctx, + "SELECT attempts, registered, last_attempt, atpid" + " FROM openvpn_attempts " + " WHERE username = '%q'", username); + + if( (qres == NULL) || (sqlite_get_numtuples(qres) > 1) ) { + eurephia_log(ctx, LOG_ERROR, 0, "Quering for login attempts failed"); + sqlite_free_results(qres); + xmlFreeDoc(doc); + return NULL; + } + + atmpt = xmlNewChild(root_n, NULL, (xmlChar *) "attempts", NULL); + if( sqlite_get_numtuples(qres) == 1 ) { + sqlite_xml_value(atmpt, XML_ATTR, "atpid", qres, 0, 3); + sqlite_xml_value(atmpt, XML_ATTR, "attempts", qres, 0, 0); + sqlite_xml_value(atmpt, XML_NODE, "first_attempt", qres, 0, 1); + sqlite_xml_value(atmpt, XML_NODE, "last_attempt", qres, 0, 2); + } + sqlite_free_results(qres); + } + + sqlite_free_results(uinf); return doc; default: sqlite_free_results(uinf); |