/* Copyright (C) 2012 Timo Sirainen, LGPLv2.1 */

/*
   eval `cat /usr/local/lib/dovecot/dovecot-config`
   gcc -fPIC -shared -DHAVE_CONFIG_H \
     `echo $DOVECOT_CFLAGS $LIBDOVECOT_INCLUDE $LIBDOVECOT_STORAGE_INCLUDE` \
     lastaccess-plugin.c -o lastaccess_plugin.so
*/

#include "lib.h"
#include "mail-user.h"
#include "mail-storage-hooks.h"

#include <utime.h>
#include <fcntl.h>
#include <unistd.h>

#define LASTACCESS_DIR "/activemailaccounts"

void lastaccess_plugin_init(struct module *module);
void lastaccess_plugin_deinit(void);

static void lastaccess_mail_user_created(struct mail_user *user)
{
	const char *path = t_strdup_printf(LASTACCESS_DIR"/%s", user->username);
	int fd, ret;

	if (utime(path, NULL) == 0)
		return;

	ret = -1;
	if (errno == ENOENT) {
		fd = open(path, O_RDWR | O_CREAT, 0600);
		if (fd >= 0)
			(void)close(fd);
		ret = utime(path, NULL);
	}
	if (ret < 0)
		i_error("utime(%s) failed: %m", path);
}

static struct mail_storage_hooks lastaccess_mail_storage_hooks = {
	.mail_user_created = lastaccess_mail_user_created
};

void lastaccess_plugin_init(struct module *module ATTR_UNUSED)
{
	mail_storage_hooks_add(module, &lastaccess_mail_storage_hooks);
}

void lastaccess_plugin_deinit(void)
{
	mail_storage_hooks_remove(&lastaccess_mail_storage_hooks);
}
