#endif
#include <pwd.h>
#include "internals.h"
+#include "daemon/daemon.h"
#include "daemon/client.h"
#include "daemon/user.h"
#include "daemon/backend.h"
}
daemon_user_free(dc->user);
- g_free(dc->credentials.nick);
- g_free(dc->credentials.password);
- g_free(dc->credentials.realname);
- g_free(dc->credentials.servername);
- g_free(dc->credentials.servicename);
- g_free(dc->credentials.unused);
- g_free(dc->credentials.username);
+ g_free(dc->login_details->nick);
+ g_free(dc->login_details->password);
+ g_free(dc->login_details->realname);
+ g_free(dc->login_details->servername);
+ g_free(dc->login_details->servicename);
+ g_free(dc->login_details->unused);
+ g_free(dc->login_details->username);
+ g_free(dc->login_details);
g_free(dc->description);
g_free(dc);
- if (dc->inetd)
+ if (dc->inetd) {
exit(0);
+ }
}
void daemon_client_forward_credentials(struct daemon_client *dc)
{
g_assert(dc->backend != NULL);
- if (dc->credentials.servername != NULL && dc->credentials.servicename != NULL)
- transport_send_args(dc->backend->transport, "CONNECT", dc->credentials.servername, dc->credentials.servicename, NULL);
- transport_send_args(dc->backend->transport, "USER", dc->credentials.username, dc->credentials.mode, dc->credentials.unused, dc->credentials.realname, NULL);
- transport_send_args(dc->backend->transport, "NICK", dc->credentials.nick, NULL);
+ if (dc->login_details->servername != NULL)
+ transport_send_args(dc->backend->transport, "CONNECT", dc->login_details->servername, dc->login_details->servicename, NULL);
+ transport_send_args(dc->backend->transport, "USER", dc->login_details->username, dc->login_details->mode, dc->login_details->unused, dc->login_details->realname, NULL);
+ transport_send_args(dc->backend->transport, "NICK", dc->login_details->nick, NULL);
daemon_clients = g_list_append(daemon_clients, dc);
}
gss_buffer_desc namebuf;
namebuf.value = NULL;
- namebuf.length = 0;
+ namebuf.length = 0
major_status = gss_export_name(&minor_status, username, &namebuf);
if (GSS_ERROR(major_status)) {
static void backend_disconnect(struct daemon_backend *backend)
{
struct daemon_client *cd = backend->userdata;
+
listener_log(LOG_INFO, cd->listener, "Backend of %s disconnected", cd->description);
daemon_client_kill(cd);
static gboolean backend_recv(struct daemon_backend *backend, const struct irc_line *line)
{
struct daemon_client *cd = backend->userdata;
+
return transport_send_line(cd->client_transport, line);
}
/* Only called after authentication */
- cd->credentials.servername = g_strdup(hostname);
- cd->credentials.servicename = g_strdup_printf("%d", port);
+ cd->login_details->servername = g_strdup(hostname);
+ cd->login_details->servicename = g_strdup_printf("%d", port);
cd->description = g_io_channel_ip_get_description(cl->connection);
listener_log(LOG_INFO, cl->listener, "Accepted new client %s for user %s", cd->description, cd->user->username);
}
if (!g_strcasecmp(l->args[0], "PASS")) {
- cd->credentials.password = g_strdup(l->args[1]);
+ cd->login_details->password = g_strdup(l->args[1]);
} else if (!g_strcasecmp(l->args[0], "CONNECT")) {
- cd->credentials.servername = g_strdup(l->args[1]);
- cd->credentials.servicename = g_strdup(l->args[2]);
+ cd->login_details->servername = g_strdup(l->args[1]);
+ cd->login_details->servicename = g_strdup(l->args[2]);
} else if (!g_strcasecmp(l->args[0], "USER") && l->argc > 4) {
- cd->credentials.username = g_strdup(l->args[1]);
- cd->credentials.mode = g_strdup(l->args[2]);
- cd->credentials.unused = g_strdup(l->args[3]);
- cd->credentials.realname = g_strdup(l->args[4]);
+ cd->login_details->username = g_strdup(l->args[1]);
+ cd->login_details->mode = g_strdup(l->args[2]);
+ cd->login_details->unused = g_strdup(l->args[3]);
+ cd->login_details->realname = g_strdup(l->args[4]);
} else if (!g_strcasecmp(l->args[0], "NICK")) {
- cd->credentials.nick = g_strdup(l->args[1]);
+ cd->login_details->nick = g_strdup(l->args[1]);
} else if (!g_strcasecmp(l->args[0], "QUIT")) {
return FALSE;
} else {
g_io_channel_flush(pc->connection, NULL);
}
- if (cd->credentials.username != NULL && cd->credentials.password != NULL && cd->credentials.nick != NULL) {
- if (!daemon_client_connect_backend(cd, pc, cd->credentials.username))
+ if (cd->login_details->username != NULL && cd->login_details->password != NULL && cd->login_details->nick != NULL) {
+ if (!daemon_client_connect_backend(cd, pc, cd->login_details->username))
return FALSE;
cd->description = g_io_channel_ip_get_description(pc->connection);
cd->client_transport = irc_transport_new_iochannel(pc->connection);
- daemon_backend_authenticate(cd->backend, cd->credentials.password, plain_handle_auth_finish);
+ daemon_backend_authenticate(cd->backend, cd->login_details->password, plain_handle_auth_finish);
irc_transport_set_callbacks(cd->client_transport, &daemon_client_callbacks, cd);
static void daemon_new_client(struct pending_client *pc)
{
struct daemon_client *cd = g_new0(struct daemon_client, 1);
+ cd->login_details = g_new0(struct login_details, 1);
cd->listener = pc->listener;
cd->config = global_daemon_config;
pc->private_data = cd;