]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
userdb passwd-file: Fixes to user listing.
authorTimo Sirainen <tss@iki.fi>
Fri, 15 May 2009 19:08:37 +0000 (15:08 -0400)
committerTimo Sirainen <tss@iki.fi>
Fri, 15 May 2009 19:08:37 +0000 (15:08 -0400)
--HG--
branch : HEAD

src/auth/userdb-passwd-file.c

index db60ccc578167151a0ac6f2e76650015b0f69305..d5f18ccaae158dbaaafed6f70e2b06ea63e855ef 100644 (file)
@@ -88,7 +88,7 @@ passwd_file_iterate_init(struct auth_userdb *userdb,
                         userdb_iter_callback_t *callback, void *context)
 {
        struct passwd_file_userdb_module *module =
-               (struct passwd_file_userdb_module *)userdb;
+               (struct passwd_file_userdb_module *)userdb->userdb;
        struct passwd_file_userdb_iterate_context *ctx;
        int fd;
 
@@ -96,6 +96,12 @@ passwd_file_iterate_init(struct auth_userdb *userdb,
        ctx->ctx.userdb = userdb->userdb;
        ctx->ctx.callback = callback;
        ctx->ctx.context = context;
+       if (module->pwf->default_file == NULL) {
+               i_error("passwd-file: User iteration isn't currently supported "
+                       "with %%variable paths");
+               ctx->ctx.failed = TRUE;
+               return &ctx->ctx;
+       }
        ctx->path = i_strdup(module->pwf->default_file->path);
 
        /* for now we support only a single passwd-file */
@@ -137,7 +143,8 @@ static int passwd_file_iterate_deinit(struct userdb_iterate_context *_ctx)
                (struct passwd_file_userdb_iterate_context *)_ctx;
        int ret = _ctx->failed ? -1 : 0;
 
-       i_stream_destroy(&ctx->input);
+       if (ctx->input != NULL)
+               i_stream_destroy(&ctx->input);
        i_free(ctx->path);
        i_free(ctx);
        return ret;