summaryrefslogtreecommitdiffstats
path: root/server/db
diff options
context:
space:
mode:
authorStephen Gallagher <sgallagh@redhat.com>2009-03-05 15:39:26 -0500
committerSimo Sorce <ssorce@redhat.com>2009-03-05 17:25:50 -0500
commit132ccd66fb7f7bf583a6ddbed031a2bf5eef473c (patch)
treed8356cdc4c71a6c5f038bf391aa4f22623580ac1 /server/db
parent16802de42f27a9060eb395751e82c9ad85cb8fe3 (diff)
downloadsssd-132ccd66fb7f7bf583a6ddbed031a2bf5eef473c.tar.gz
sssd-132ccd66fb7f7bf583a6ddbed031a2bf5eef473c.tar.xz
sssd-132ccd66fb7f7bf583a6ddbed031a2bf5eef473c.zip
Implement GetCachedUsers in the InfoPipe
This function allows a caller to retrieve a list of users who have logged in on the system, specifying an optional minimum last login time to trim the list. I modified sysdb_enumpwent to accept an optional search argument. GetCachedUsers takes advantage of this argument to limit the search by the last login time. I also found and fixed a few additional low-memory conditions around D-BUS message replies.
Diffstat (limited to 'server/db')
-rw-r--r--server/db/sysdb.h3
-rw-r--r--server/db/sysdb_search.c7
2 files changed, 9 insertions, 1 deletions
diff --git a/server/db/sysdb.h b/server/db/sysdb.h
index 544a81f5a..1302cddbd 100644
--- a/server/db/sysdb.h
+++ b/server/db/sysdb.h
@@ -84,6 +84,8 @@
#define SYSDB_INITGR_LEGACY_FILTER "(&(objectclass="SYSDB_GROUP_CLASS")("SYSDB_LEGACY_MEMBER"=%s))"
+#define SYSDB_GETCACHED_FILTER "(&(objectclass="SYSDB_USER_CLASS")("SYSDB_USER_ATTR_LAST_LOGIN">=%llu))"
+
#define SYSDB_PW_ATTRS {SYSDB_PW_NAME, SYSDB_PW_UIDNUM, \
SYSDB_PW_GIDNUM, SYSDB_PW_FULLNAME, \
SYSDB_PW_HOMEDIR, SYSDB_PW_SHELL, \
@@ -199,6 +201,7 @@ int sysdb_enumpwent(TALLOC_CTX *mem_ctx,
struct sysdb_ctx *ctx,
const char *domain,
bool legacy,
+ const char *expression,
sysdb_callback_t fn, void *ptr);
int sysdb_getgrnam(TALLOC_CTX *mem_ctx,
diff --git a/server/db/sysdb_search.c b/server/db/sysdb_search.c
index ff18419e9..8b14221da 100644
--- a/server/db/sysdb_search.c
+++ b/server/db/sysdb_search.c
@@ -264,6 +264,7 @@ int sysdb_enumpwent(TALLOC_CTX *mem_ctx,
struct sysdb_ctx *ctx,
const char *domain,
bool legacy,
+ const char *expression,
sysdb_callback_t fn, void *ptr)
{
static const char *attrs[] = SYSDB_PW_ATTRS;
@@ -278,7 +279,11 @@ int sysdb_enumpwent(TALLOC_CTX *mem_ctx,
return ENOMEM;
}
- sctx->expression = SYSDB_PWENT_FILTER;
+ if (expression)
+ sctx->expression = expression;
+ else
+ sctx->expression = SYSDB_PWENT_FILTER;
+
sctx->attrs = attrs;
return sysdb_operation(mem_ctx, ctx, user_search, sctx);