master-login-auth.c revision 647eed98cb795ee9e42911750402dab720b57514
/* Copyright (c) 2009-2010 Dovecot authors, see the included COPYING file */
#include "lib.h"
#include "network.h"
#include "ioloop.h"
#include "istream.h"
#include "ostream.h"
#include "hex-binary.h"
#include "hash.h"
#include "str.h"
#include "master-auth.h"
#include "master-login-auth.h"
#include <stdlib.h>
#define AUTH_MAX_INBUF_SIZE 8192
struct master_login_auth_request {
void *context;
};
struct master_login_auth {
const char *auth_socket_path;
int refcount;
int fd;
unsigned int id_counter;
struct hash_table *requests;
unsigned int version_received:1;
};
{
struct master_login_auth *auth;
return auth;
}
{
struct hash_iterate_context *iter;
}
}
}
{
return;
}
{
}
static struct master_login_auth_request *
unsigned int id)
{
struct master_login_auth_request *request;
return NULL;
}
return request;
}
static bool
{
struct master_login_auth_request *request;
const char *const *list;
unsigned int id;
/* <id> <userid> [..] */
i_error("Auth server sent corrupted USER line");
return FALSE;
}
}
return TRUE;
}
static bool
const char *args)
{
struct master_login_auth_request *request;
unsigned int id;
i_error("Authenticated user not found from userdb");
}
return TRUE;
}
static bool
{
struct master_login_auth_request *request;
const char *error;
unsigned int id;
error++;
i_error("Internal auth failure");
}
return TRUE;
}
{
const char *line;
bool ret;
case 0:
return;
case -1:
/* disconnected */
return;
case -2:
/* buffer full */
i_error("Auth server sent us too long line");
return;
}
if (!auth->version_received) {
return;
/* make sure the major version matches */
i_error("Authentication server not compatible with "
"master process (mixed old and new binaries?)");
return;
}
}
else
break;
}
}
}
static int
{
int fd;
if (fd == -1) {
i_error("net_connect_unix(%s) failed: %m",
return -1;
}
return 0;
}
const struct master_auth_request *req,
void *context)
{
struct master_login_auth_request *login_req;
unsigned int id;
if (master_login_auth_connect(auth) < 0) {
return;
}
}
if (id == 0)
id++;
}
{
}