diff options
| author | David Sommerseth <dazo@users.sourceforge.net> | 2008-12-11 14:16:56 +0100 |
|---|---|---|
| committer | David Sommerseth <dazo@users.sourceforge.net> | 2008-12-11 14:16:56 +0100 |
| commit | 5875ca215d75d2a5e2c3ca147b19a5197bcb2dbf (patch) | |
| tree | b7e33d4dc30acfa170840d4da9acfeb3b8d73b1c | |
| parent | c132838440c3f602283bf92146433800ee1bf9b2 (diff) | |
| download | eurephia-5875ca215d75d2a5e2c3ca147b19a5197bcb2dbf.tar.gz eurephia-5875ca215d75d2a5e2c3ca147b19a5197bcb2dbf.tar.xz eurephia-5875ca215d75d2a5e2c3ca147b19a5197bcb2dbf.zip | |
Added logincount and setting user account flags
| -rw-r--r-- | common/eurephia_admin_struct.h | 1 | ||||
| -rw-r--r-- | database/sqlite/administration.c | 22 | ||||
| -rw-r--r-- | eurephiadm/commands/users.c | 27 |
3 files changed, 45 insertions, 5 deletions
diff --git a/common/eurephia_admin_struct.h b/common/eurephia_admin_struct.h index 074604f..ab58923 100644 --- a/common/eurephia_admin_struct.h +++ b/common/eurephia_admin_struct.h @@ -67,6 +67,7 @@ typedef struct _eurephiaUSERINFO_s { char *deactivated; char *last_accessed; int uid; + int logincount; long int account_flags; long int setnull_flags; eurephiaCERTLIST *certlist; diff --git a/database/sqlite/administration.c b/database/sqlite/administration.c index b7d09ef..6eb1205 100644 --- a/database/sqlite/administration.c +++ b/database/sqlite/administration.c @@ -415,12 +415,19 @@ int eDBadminGetUserInfo(eurephiaCTX *ctx, int getInfo, eurephiaUSERINFO *user) { dbresult *uinf = NULL, *certinf = NULL; eDBfieldMap *uinfo_map = NULL; - uinfo_map = eDBmkMapping_USERINFO(ctx, tbl_sqlite_users, user); + uinfo_map = eDBmkMapping_USERINFO(ctx, tbl_sqlite_users, "u", user); // Query the database, find the user defined in the user map uinf = sqlite_query_mapped(ctx, SQL_SELECT, - "SELECT username, activated, deactivated, last_accessed, uid" - " FROM openvpn_users", NULL, uinfo_map); + "SELECT u.username, u.activated, u.deactivated, u.last_accessed, u.uid," + " (bl.username IS NOT NULL), opensess, logincount" + " FROM openvpn_users u" + " LEFT JOIN openvpn_blacklist bl USING(username)" + " LEFT JOIN (SELECT uid, count(*) AS logincount FROM openvpn_lastlog) lc" + " ON (lc.uid = u.uid)" + " LEFT JOIN (SELECT uid, count(*)>0 AS opensess FROM openvpn_lastlog) os" + " ON (os.uid = u.uid) ", + NULL, uinfo_map); if( uinf == NULL ) { eurephia_log(ctx, LOG_ERROR, 0, "Error querying the database for a user"); @@ -437,6 +444,10 @@ int eDBadminGetUserInfo(eurephiaCTX *ctx, int getInfo, eurephiaUSERINFO *user) { free_nullsafe(user->username); user->username = strdup_nullsafe(sqlite_get_value(uinf, 0, 0)); user->uid = atoi_nullsafe(sqlite_get_value(uinf, 0, 4)); + user->account_flags = ((sqlite_get_value(uinf, 0, 3) == NULL) ? ACCFLAG_NEVERUSED : 0); + user->account_flags|= ((sqlite_get_value(uinf, 0, 2) != NULL) ? ACCFLAG_DEACTIVATED : 0); + user->account_flags|= ((atoi(sqlite_get_value(uinf, 0, 5)) == 1) ? ACCFLAG_BLACKLISTED : 0); + user->account_flags|= ((atoi_nullsafe(sqlite_get_value(uinf, 0, 6))==1) ? ACCFLAG_BLACKLISTED : 0); if( (getInfo & USERINFO_user) == USERINFO_user ) { free_nullsafe(user->password); @@ -447,6 +458,7 @@ int eDBadminGetUserInfo(eurephiaCTX *ctx, int getInfo, eurephiaUSERINFO *user) { 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->logincount = atoi_nullsafe(sqlite_get_value(uinf, 0, 7)); sqlite_free_results(uinf); } @@ -519,9 +531,9 @@ int eDBadminUpdateUser(eurephiaCTX *ctx, const int uid, eurephiaUSERINFO *usrinf assert( (ctx != NULL) && (uid == usrinf->uid) ); srch = eAdminPopulateUSERINFO(uid, NULL, NULL, NULL, NULL, NULL); - srch_map = eDBmkMapping_USERINFO(ctx, tbl_sqlite_users, srch); + srch_map = eDBmkMapping_USERINFO(ctx, tbl_sqlite_users, NULL, srch); - data_map = eDBmkMapping_USERINFO(ctx, tbl_sqlite_users, usrinf); + data_map = eDBmkMapping_USERINFO(ctx, tbl_sqlite_users, NULL, usrinf); // Query the database, find the user defined in the user map uinf = sqlite_query_mapped(ctx, SQL_UPDATE, "UPDATE openvpn_users", data_map, srch_map); diff --git a/eurephiadm/commands/users.c b/eurephiadm/commands/users.c index aaeb666..fed586f 100644 --- a/eurephiadm/commands/users.c +++ b/eurephiadm/commands/users.c @@ -184,6 +184,31 @@ int list_users(eurephiaCTX *ctx, eurephiaSESSION *sess, eurephiaVALUES *cfg, int return 0; } +char *accountFlags_str(int flags) { + static char flagstr[8194]; + + memset(&flagstr, 0, 8194); + + if( flags == 0 ) { + return "-"; + } + + if( (flags & ACCFLAG_NEVERUSED) ) { + strcat(flagstr, "NEVERUSED "); + } + if( (flags & ACCFLAG_OPENSESSION) ) { + strcat(flagstr, "OPENSESSION "); + } + if( (flags & ACCFLAG_BLACKLISTED) ) { + strcat(flagstr, "BLACKLISTED "); + } + if( (flags & ACCFLAG_DEACTIVATED) ) { + strcat(flagstr, "DEACTIVATED "); + } + return flagstr; +} + + // Show account information for a particular user int show_user(eurephiaCTX *ctx, eurephiaSESSION *sess, eurephiaVALUES *cfg, int argc, char **argv) { eurephiaUSERINFO *user = NULL; @@ -263,9 +288,11 @@ int show_user(eurephiaCTX *ctx, eurephiaSESSION *sess, eurephiaVALUES *cfg, int if( show_info & USERINFO_user ) { field_print_int("User id", user->uid); field_print_str("User name", user->username); + field_print_int("Login count", user->logincount); field_print_str("Last accessed", user->last_accessed); field_print_str("Activated", user->activated); field_print_str("Dectivated", user->deactivated); + field_print_str("Flags", accountFlags_str(user->account_flags)); printf("\n"); } |
