diff options
author | David Sommerseth <dazo@users.sourceforge.net> | 2008-12-10 22:48:56 +0100 |
---|---|---|
committer | David Sommerseth <dazo@users.sourceforge.net> | 2008-12-10 22:48:56 +0100 |
commit | 866c76a6bd60a1dabdfe593339030a09324e8aa2 (patch) | |
tree | 4a2101c60eabef6d43e70a8f73df94cb27703d75 | |
parent | 762fc375f6316407c7d3489d53de336146fc1960 (diff) | |
download | eurephia-866c76a6bd60a1dabdfe593339030a09324e8aa2.tar.gz eurephia-866c76a6bd60a1dabdfe593339030a09324e8aa2.tar.xz eurephia-866c76a6bd60a1dabdfe593339030a09324e8aa2.zip |
Updated eDBadminGetUserInfo(...) to take filtering parameter
-rw-r--r-- | database/eurephiadb_driver.h | 8 | ||||
-rw-r--r-- | database/sqlite/administration.c | 83 | ||||
-rw-r--r-- | eurephiadm/commands/users.c | 34 |
3 files changed, 73 insertions, 52 deletions
diff --git a/database/eurephiadb_driver.h b/database/eurephiadb_driver.h index 6e24f29..387e312 100644 --- a/database/eurephiadb_driver.h +++ b/database/eurephiadb_driver.h @@ -32,6 +32,12 @@ #define ATTEMPT_RESET 0x0A #define ATTEMPT_REGISTER 0x0B +#define USERINFO_user 0x01 +#define USERINFO_certs 0x02 +#define USERINFO_lastlog 0x04 +#define USERINFO_attempts 0x08 +#define USERINFO_blacklist 0x10 + #ifndef DRIVER_MODE /* Functions needed by all drivers */ @@ -95,7 +101,7 @@ int (*eDBadminConfigSet) (eurephiaCTX *ctx, const char *key, const char *val); int (*eDBadminConfigDelete) (eurephiaCTX *ctx, const char *key); eurephiaUSERLIST *(*eDBadminGetUserList) (eurephiaCTX *ctx, const char *sortkeys); -int (*eDBadminGetUserInfo) (eurephiaCTX *ctx, eurephiaUSERINFO *user); +int (*eDBadminGetUserInfo) (eurephiaCTX *ctx, int infoType, eurephiaUSERINFO *user); int (*eDBadminAddUser) (eurephiaCTX *ctx, eurephiaUSERINFO *userinfo); int (*eDBadminUpdateUser) (eurephiaCTX *ctx, const int uid, eurephiaUSERINFO *userinfo); int (*eDBadminDeleteUser) (eurephiaCTX *ctx, const int uid, eurephiaUSERINFO *userinfo); diff --git a/database/sqlite/administration.c b/database/sqlite/administration.c index d44d9a0..042bf8e 100644 --- a/database/sqlite/administration.c +++ b/database/sqlite/administration.c @@ -39,6 +39,11 @@ #include <eurephiadb_mapping.h> #include <passwd.h> +#ifndef DRIVER_MODE +#define DRIVER_MODE +#endif +#include <eurephiadb_driver.h> + #include "sqlite.h" #include "fieldmapping.h" @@ -406,7 +411,7 @@ eurephiaUSERLIST *eDBadminGetUserList(eurephiaCTX *ctx, const char *sortkeys) { // This function will read out all info from eurephiaINFO *user which is not NULL and create a query based // on these values. If a user is found, the *user struct will be updated with the user found. On success // the function returns 1. -int eDBadminGetUserInfo(eurephiaCTX *ctx, eurephiaUSERINFO *user) { +int eDBadminGetUserInfo(eurephiaCTX *ctx, int getInfo, eurephiaUSERINFO *user) { dbresult *uinf = NULL, *certinf = NULL; eDBfieldMap *uinfo_map = NULL; @@ -430,44 +435,52 @@ int eDBadminGetUserInfo(eurephiaCTX *ctx, eurephiaUSERINFO *user) { case 1: free_nullsafe(user->username); - free_nullsafe(user->password); - free_nullsafe(user->activated); - free_nullsafe(user->deactivated); - free_nullsafe(user->last_accessed); - user->username = strdup_nullsafe(sqlite_get_value(uinf, 0, 0)); - user->activated = strdup_nullsafe(sqlite_get_value(uinf, 0, 1)); - user->deactivated = strdup_nullsafe(sqlite_get_value(uinf, 0, 2)); - user->last_accessed = strdup_nullsafe(sqlite_get_value(uinf, 0, 3)); user->uid = atoi_nullsafe(sqlite_get_value(uinf, 0, 4)); - sqlite_free_results(uinf); - // Extract certificate info --- FIXME: Come up with clever idea to also add access profile - certinf = sqlite_query(ctx, - "SELECT depth, digest, common_name, organisation, email, c.registered, " - " c.certid" //, access_descr" - " FROM openvpn_certificates c" - " LEFT JOIN openvpn_usercerts uc ON (c.certid = uc.certid)" - // " LEFT JOIN openvpn_accesses a ON (uc.accessprofile = a.accessprofile)" - " WHERE uid = %i ORDER BY c.certid DESC", user->uid); - if( (certinf != NULL) && (sqlite_get_numtuples(certinf) > 0) ) { - eurephiaCERTINFO *rec = NULL; - int i; - - user->certlist = eAdminCreateCERTLIST(); - - for( i = 0; i < sqlite_get_numtuples(certinf); i++ ) { - rec = eAdminPopulateCERTINFO( - atoi_nullsafe(sqlite_get_value(certinf, i, 6)), - atoi_nullsafe(sqlite_get_value(certinf, i, 0)), - sqlite_get_value(certinf, i, 1), - sqlite_get_value(certinf, i, 2), - sqlite_get_value(certinf, i, 3), - sqlite_get_value(certinf, i, 4), - sqlite_get_value(certinf, i, 5)); - eAdminInsertCERTINFO(user->certlist, rec); + if( (getInfo & USERINFO_user) == USERINFO_user ) { + free_nullsafe(user->password); + free_nullsafe(user->activated); + free_nullsafe(user->deactivated); + free_nullsafe(user->last_accessed); + + user->activated = strdup_nullsafe(sqlite_get_value(uinf, 0, 1)); + user->deactivated = strdup_nullsafe(sqlite_get_value(uinf, 0, 2)); + user->last_accessed = strdup_nullsafe(sqlite_get_value(uinf, 0, 3)); + sqlite_free_results(uinf); + } + + if( (getInfo & USERINFO_certs) == USERINFO_certs ) { + // Extract certificate info + certinf = sqlite_query(ctx, + "SELECT depth, digest, common_name, organisation, email, " + " c.registered, c.certid, access_descr" + " FROM openvpn_certificates c" + " LEFT JOIN openvpn_usercerts uc ON (c.certid = uc.certid)" + " LEFT JOIN openvpn_accesses a " + " ON (uc.accessprofile = a.accessprofile)" + " WHERE uid = %i ORDER BY c.certid DESC", user->uid); + if( (certinf != NULL) && (sqlite_get_numtuples(certinf) > 0) ) { + eurephiaCERTINFO *rec = NULL; + int i; + + user->certlist = eAdminCreateCERTLIST(); + + for( i = 0; i < sqlite_get_numtuples(certinf); i++ ) { + rec = eAdminPopulateCERTINFO( + atoi_nullsafe(sqlite_get_value(certinf, i, 6)), + atoi_nullsafe(sqlite_get_value(certinf, i, 0)), + sqlite_get_value(certinf, i, 1), + sqlite_get_value(certinf, i, 2), + sqlite_get_value(certinf, i, 3), + sqlite_get_value(certinf, i, 4), + sqlite_get_value(certinf, i, 5)); + eAdminInsertCERTINFO(user->certlist, rec); + } + sqlite_free_results(certinf); + } else { + user->certlist = NULL; } - sqlite_free_results(certinf); } else { user->certlist = NULL; } diff --git a/eurephiadm/commands/users.c b/eurephiadm/commands/users.c index 92c7610..ca7c65c 100644 --- a/eurephiadm/commands/users.c +++ b/eurephiadm/commands/users.c @@ -189,7 +189,7 @@ int show_user(eurephiaCTX *ctx, eurephiaSESSION *sess, eurephiaVALUES *cfg, int eurephiaUSERINFO *user = NULL; char *uname = NULL; int i, uid = 0; - long int show_info = 0; // USERINFO_certs + long int show_info = USERINFO_user | USERINFO_certs; e_options activargs[] = { {"--uid", "-i", 1}, @@ -223,11 +223,11 @@ int show_user(eurephiaCTX *ctx, eurephiaSESSION *sess, eurephiaVALUES *cfg, int case 'a': case 'b': - // show_info = USERINFO_attempts | USERINFO_blacklist + show_info = USERINFO_attempts | USERINFO_blacklist; break; case 'l': - // show_info = USERINFO_lastlog + show_info = USERINFO_user | USERINFO_lastlog; break; case 'h': @@ -255,21 +255,21 @@ int show_user(eurephiaCTX *ctx, eurephiaSESSION *sess, eurephiaVALUES *cfg, int user = eAdminPopulateUSERINFO(uid, uname, NULL, NULL, NULL, NULL); assert(user != NULL); - if( eDBadminGetUserInfo(ctx, user) == 0 ) { + if( eDBadminGetUserInfo(ctx, show_info, user) == 0 ) { fprintf(stderr, "%s: User not found\n", MODULE); return 1; } - field_print_int("User id", user->uid); - field_print_str("User name", user->username); - field_print_str("Last accessed", user->last_accessed); - field_print_str("Activated", user->activated); - field_print_str("Dectivated", user->deactivated); - printf("\n"); - - // Only show this block if show_info == USERINFO_certs - // if( (show_info == USERINFO_certs) && (user->certlist != NULL) && (user->certlist->num_certs > 0) ) { + if( show_info & USERINFO_user ) { + field_print_int("User id", user->uid); + field_print_str("User name", user->username); + field_print_str("Last accessed", user->last_accessed); + field_print_str("Activated", user->activated); + field_print_str("Dectivated", user->deactivated); + printf("\n"); + } + // Show associated certificates if we have that info if( (user->certlist != NULL) && (user->certlist->num_certs > 0) ) { eurephiaCERTINFO *crt = NULL; @@ -289,8 +289,10 @@ int show_user(eurephiaCTX *ctx, eurephiaSESSION *sess, eurephiaVALUES *cfg, int printf("---------------------------------------------------------------------" "----------\n"); } else { - // Only show this line if show_info == USERINFO_certs - field_print_str("Associated certificates", "None"); + // If we wanted to show associated certs, and didn't find any - inform about it + if( (show_info & USERINFO_certs) == USERINFO_certs ) { + field_print_str("Associated certificates", "None"); + } } return 0; @@ -363,7 +365,7 @@ int account_activation(eurephiaCTX *ctx, eurephiaSESSION *sess, eurephiaVALUES * user = eAdminPopulateUSERINFO(uid, uname, NULL, NULL, NULL, NULL); assert(user != NULL); - if( eDBadminGetUserInfo(ctx, user) == 0 ) { + if( eDBadminGetUserInfo(ctx, USERINFO_user, user) == 0 ) { fprintf(stderr, "%s: User not found\n", MODULE); return 1; } |