示例#1
0
static void last_login_user_deinit(struct mail_user *user)
{
	struct last_login_user *luser = LAST_LOGIN_USER_CONTEXT(user);

	last_login_dict_deinit(user);
	luser->module_ctx.super.deinit(user);
}
示例#2
0
static void last_login_dict_deinit(struct mail_user *user)
{
	struct last_login_user *luser = LAST_LOGIN_USER_CONTEXT(user);

	if (luser->dict != NULL) {
		dict_wait(luser->dict);
		dict_deinit(&luser->dict);
	}
	/* remove timeout after dict_wait(), which may trigger
	   last_login_dict_commit() */
	if (luser->to != NULL)
		timeout_remove(&luser->to);
}
示例#3
0
static void
last_login_dict_commit(const struct dict_commit_result *result,
		       void *context)
{
	struct mail_user *user = context;
	struct last_login_user *luser = LAST_LOGIN_USER_CONTEXT(user);

	switch(result->ret) {
	case DICT_COMMIT_RET_OK:
	case DICT_COMMIT_RET_NOTFOUND:
		break;
	case DICT_COMMIT_RET_FAILED:
		i_error("last_login_dict: Failed to write value for user %s: %s",
			user->username, result->error);
		break;
	case DICT_COMMIT_RET_WRITE_UNCERTAIN:
		i_error("last_login_dict: Write was unconfirmed (timeout or disconnect) for user %s: %s",
			 user->username, result->error);
		break;
	};

	/* don't deinit the dict immediately here, lib-dict will just crash */
	luser->to = timeout_add(0, last_login_dict_deinit, user);
}
示例#4
0
}

static void last_login_user_deinit(struct mail_user *user)
{
	struct last_login_user *luser = LAST_LOGIN_USER_CONTEXT(user);

	last_login_dict_deinit(user);
	luser->module_ctx.super.deinit(user);
}

static void
last_login_dict_commit(const struct dict_commit_result *result ATTR_UNUSED,
		       void *context)
{
	struct mail_user *user = context;
	struct last_login_user *luser = LAST_LOGIN_USER_CONTEXT(user);

	/* don't deinit the dict immediately here, lib-dict will just crash */
	luser->to = timeout_add(0, last_login_dict_deinit, user);
}

static void last_login_mail_user_created(struct mail_user *user)
{
	struct mail_user_vfuncs *v = user->vlast;
	struct last_login_user *luser;
	struct dict *dict;
	struct dict_settings set;
	struct dict_transaction_context *trans;
	const char *dict_value, *key_name, *precision, *error;

	if (user->autocreated) {