master.c revision c0435c854a0e7246373b9752d163095cc4fbe985
/* Copyright (C) 2002 Timo Sirainen */
#include "common.h"
#include "ioloop.h"
#include "network.h"
#include "fdpass.h"
#include "master.h"
#include "client.h"
#include <unistd.h>
struct waiting_request {
struct waiting_request *next;
unsigned int id;
void *context;
};
static unsigned int master_pos;
static char master_buf[sizeof(struct master_reply)];
void *context)
{
struct waiting_request *req;
*next_request = req;
}
{
struct waiting_request *req;
i_error("Master sent us unrequested reply for id %d",
return;
}
i_fatal("Master sent invalid id for reply "
}
next_request = &requests;
}
const char *login_tag,
unsigned char cookie[AUTH_COOKIE_SIZE],
{
struct master_request req;
i_fatal("fd_send() failed: %m");
}
void master_notify_finished(void)
{
struct master_request req;
return;
/* sending -1 as fd does the notification */
i_fatal("fd_send() failed: %m");
}
void master_close(void)
{
return;
if (close(LOGIN_MASTER_SOCKET_FD) < 0)
i_fatal("close(master) failed: %m");
main_unref();
}
{
int ret;
sizeof(master_buf) - master_pos);
if (ret < 0) {
/* master died, kill all clients logging in */
master_close();
return;
}
master_pos += ret;
if (master_pos < sizeof(master_buf))
return;
/* reply is now read */
master_pos = 0;
}
void master_init(void)
{
main_ref();
next_request = &requests;
master_pos = 0;
}
void master_deinit(void)
{
struct waiting_request *next;
}
}