summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Sommerseth <dazo@users.sourceforge.net>2008-12-10 22:48:56 +0100
committerDavid Sommerseth <dazo@users.sourceforge.net>2008-12-10 22:48:56 +0100
commit866c76a6bd60a1dabdfe593339030a09324e8aa2 (patch)
tree4a2101c60eabef6d43e70a8f73df94cb27703d75
parent762fc375f6316407c7d3489d53de336146fc1960 (diff)
downloadeurephia-866c76a6bd60a1dabdfe593339030a09324e8aa2.tar.gz
eurephia-866c76a6bd60a1dabdfe593339030a09324e8aa2.tar.xz
eurephia-866c76a6bd60a1dabdfe593339030a09324e8aa2.zip
Updated eDBadminGetUserInfo(...) to take filtering parameter
-rw-r--r--database/eurephiadb_driver.h8
-rw-r--r--database/sqlite/administration.c83
-rw-r--r--eurephiadm/commands/users.c34
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;
}