replicator-queue-auth.c revision f59c16625dc8fb1b734fddbba58012ec42cf945d
bcb4e51a409d94ae670de96afb8483a4f7855294Stephan Bosch/* Copyright (c) 2013-2014 Dovecot authors, see the included COPYING file */
447e086422f1ab7cc16833583ed70a4af7a84bc5Timo Sirainen
447e086422f1ab7cc16833583ed70a4af7a84bc5Timo Sirainen#include "lib.h"
447e086422f1ab7cc16833583ed70a4af7a84bc5Timo Sirainen#include "auth-master.h"
bdd36cfdba3ff66d25570a9ff568d69e1eb543cfTimo Sirainen#include "replicator-queue.h"
447e086422f1ab7cc16833583ed70a4af7a84bc5Timo Sirainen
447e086422f1ab7cc16833583ed70a4af7a84bc5Timo Sirainen#define REPLICATOR_AUTH_SERVICE_NAME "replicator"
447e086422f1ab7cc16833583ed70a4af7a84bc5Timo Sirainen
447e086422f1ab7cc16833583ed70a4af7a84bc5Timo Sirainenvoid replicator_queue_add_auth_users(struct replicator_queue *queue,
447e086422f1ab7cc16833583ed70a4af7a84bc5Timo Sirainen const char *auth_socket_path,
447e086422f1ab7cc16833583ed70a4af7a84bc5Timo Sirainen const char *usermask, time_t last_update)
447e086422f1ab7cc16833583ed70a4af7a84bc5Timo Sirainen{
447e086422f1ab7cc16833583ed70a4af7a84bc5Timo Sirainen struct auth_master_connection *auth_conn;
447e086422f1ab7cc16833583ed70a4af7a84bc5Timo Sirainen struct auth_master_user_list_ctx *ctx;
447e086422f1ab7cc16833583ed70a4af7a84bc5Timo Sirainen struct auth_user_info user_info;
447e086422f1ab7cc16833583ed70a4af7a84bc5Timo Sirainen struct replicator_user *user;
447e086422f1ab7cc16833583ed70a4af7a84bc5Timo Sirainen const char *username;
447e086422f1ab7cc16833583ed70a4af7a84bc5Timo Sirainen
447e086422f1ab7cc16833583ed70a4af7a84bc5Timo Sirainen auth_conn = auth_master_init(auth_socket_path,
447e086422f1ab7cc16833583ed70a4af7a84bc5Timo Sirainen AUTH_MASTER_FLAG_NO_IDLE_TIMEOUT);
447e086422f1ab7cc16833583ed70a4af7a84bc5Timo Sirainen
009217abb57a24a4076092e8e4e165545747839eStephan Bosch memset(&user_info, 0, sizeof(user_info));
009217abb57a24a4076092e8e4e165545747839eStephan Bosch user_info.service = REPLICATOR_AUTH_SERVICE_NAME;
447e086422f1ab7cc16833583ed70a4af7a84bc5Timo Sirainen
447e086422f1ab7cc16833583ed70a4af7a84bc5Timo Sirainen /* add all users into replication queue, so that we can start doing
447e086422f1ab7cc16833583ed70a4af7a84bc5Timo Sirainen full syncs for everyone whose state can't be found */
447e086422f1ab7cc16833583ed70a4af7a84bc5Timo Sirainen ctx = auth_master_user_list_init(auth_conn, usermask, &user_info);
447e086422f1ab7cc16833583ed70a4af7a84bc5Timo Sirainen while ((username = auth_master_user_list_next(ctx)) != NULL) {
447e086422f1ab7cc16833583ed70a4af7a84bc5Timo Sirainen user = replicator_queue_add(queue, username,
447e086422f1ab7cc16833583ed70a4af7a84bc5Timo Sirainen REPLICATION_PRIORITY_NONE);
447e086422f1ab7cc16833583ed70a4af7a84bc5Timo Sirainen user->last_update = last_update;
447e086422f1ab7cc16833583ed70a4af7a84bc5Timo Sirainen }
a75d470c9223a75801418fcdda258885c36317e0Timo Sirainen if (auth_master_user_list_deinit(&ctx) < 0)
447e086422f1ab7cc16833583ed70a4af7a84bc5Timo Sirainen i_error("listing users failed, can't replicate existing data");
447e086422f1ab7cc16833583ed70a4af7a84bc5Timo Sirainen auth_master_deinit(&auth_conn);
447e086422f1ab7cc16833583ed70a4af7a84bc5Timo Sirainen}
447e086422f1ab7cc16833583ed70a4af7a84bc5Timo Sirainen