master.c revision a7024a121041f5498d35f36ef56078acbf7a0677
02c335c23bf5fa225a467c19f2c063fb0dc7b8c3Timo Sirainen/* Copyright (C) 2002 Timo Sirainen */
fd2f5fbc1f07aa93e2214a28cdf02437fb7d06c8Timo Sirainen#define MAX_OUTBUF_SIZE (10 * sizeof(struct auth_cookie_reply_data))
8aacc9e7c84f8376822823ec98c2f551d4919b2eTimo Sirainenstatic struct auth_cookie_reply_data failure_reply;
6b85bc4b03e552cfaeeae872d63c2d8ac5fcb7c4Timo Sirainenstatic unsigned int master_pos;
6b85bc4b03e552cfaeeae872d63c2d8ac5fcb7c4Timo Sirainenstatic char master_buf[sizeof(struct auth_cookie_request_data)];
4ee00532a265bdfb38539d811fcd12d51210ac35Timo Sirainenstatic void master_handle_request(struct auth_cookie_request_data *request,
6b85bc4b03e552cfaeeae872d63c2d8ac5fcb7c4Timo Sirainen struct auth_cookie_reply_data *reply, temp_reply;
992a13add4eea0810e4db0f042a595dddf85536aTimo Sirainen cookie = cookie_lookup_and_remove(request->login_pid, request->cookie);
0f833d18af36bf307cd69f235eb3fb779245b478Timo Sirainen if (cookie->auth_fill_reply(cookie, &temp_reply))
7d75b95c260e58ee5039fa3afd79e9fda3bc8002Timo Sirainen switch (o_stream_send(output, reply, sizeof(*reply))) {
7d75b95c260e58ee5039fa3afd79e9fda3bc8002Timo Sirainen i_fatal("Master transmit buffer full, aborting");
dd4b5f14b71b01a84af942e720a2d6e5f15ee1a7Timo Sirainen /* master died, kill ourself too */
dd4b5f14b71b01a84af942e720a2d6e5f15ee1a7Timo Sirainenstatic void master_input(void *context __attr_unused__, int fd,
dd4b5f14b71b01a84af942e720a2d6e5f15ee1a7Timo Sirainen ret = net_receive(fd, master_buf + master_pos,
e015e2f7e7f48874495f9df8b0dd192b7ffcb5ccTimo Sirainen /* master died, kill ourself too */
9a583c7a827f7a4d89ee43774f2d51ea6a214543Timo Sirainen /* reply is now read */
e015e2f7e7f48874495f9df8b0dd192b7ffcb5ccTimo Sirainen master_handle_request((struct auth_cookie_request_data *) master_buf,
e015e2f7e7f48874495f9df8b0dd192b7ffcb5ccTimo Sirainen memset(&failure_reply, 0, sizeof(failure_reply));
e015e2f7e7f48874495f9df8b0dd192b7ffcb5ccTimo Sirainen output = o_stream_create_file(MASTER_SOCKET_FD, default_pool,
e015e2f7e7f48874495f9df8b0dd192b7ffcb5ccTimo Sirainen io_master = io_add(MASTER_SOCKET_FD, IO_READ, master_input, NULL);
992a13add4eea0810e4db0f042a595dddf85536aTimo Sirainen /* just a note to master that we're ok. if we die before,
1171f0abf442638bac1827bb24a0b6b8eb682a82Timo Sirainen master should shutdown itself. */