summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Sommerseth <dazo@users.sourceforge.net>2008-12-11 14:16:56 +0100
committerDavid Sommerseth <dazo@users.sourceforge.net>2008-12-11 14:16:56 +0100
commit5875ca215d75d2a5e2c3ca147b19a5197bcb2dbf (patch)
treeb7e33d4dc30acfa170840d4da9acfeb3b8d73b1c
parentc132838440c3f602283bf92146433800ee1bf9b2 (diff)
downloadeurephia-5875ca215d75d2a5e2c3ca147b19a5197bcb2dbf.tar.gz
eurephia-5875ca215d75d2a5e2c3ca147b19a5197bcb2dbf.tar.xz
eurephia-5875ca215d75d2a5e2c3ca147b19a5197bcb2dbf.zip
Added logincount and setting user account flags
-rw-r--r--common/eurephia_admin_struct.h1
-rw-r--r--database/sqlite/administration.c22
-rw-r--r--eurephiadm/commands/users.c27
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");
}