#include "ctrlproxy.h"
#include <string.h>
-#include <unistd.h>
#include <sys/stat.h>
+#include <glib/gstdio.h>
#include <fcntl.h>
#include <errno.h>
+#include <glib.h>
#include "keyfile.h"
#include "irc.h"
#define NICKSERV_FILE_HEADER "# This file contains passwords for NickServ\n" \
- "# It has the same format as the ppp secrets files.\n" \
"# It should contain one entry per line, each entry consisting of: \n" \
"# a nick name, password and network name, separated by tabs.\n" \
"#\n"
continue;
if (!e->network) return e->pass;
- if (!g_strcasecmp(e->network, n->info.name)) return e->pass;
+ if (!g_strcasecmp(e->network, n->name)) return e->pass;
}
return NULL;
/* Don't try to identify if we're already identified */
/* FIXME: Apparently, +e indicates being registered on Freenode,
* +R is only used on OFTC */
- if (network->state->me.modes['R'])
+ if (network->external_state->me.modes['R'])
return;
pass = nickserv_find_nick(network, nick);
const char *nickserv_n = nickserv_nick(network);
char *raw;
raw = g_strdup_printf("IDENTIFY %s", pass);
- network_log(LOG_INFO, network, "Sending password for %s", nickserv_n);
+ network_log(LOG_INFO, network, "Sending NickServ password for %s", nickserv_n);
network_send_args(network, "PRIVMSG", nickserv_n, raw, NULL);
g_free(raw);
} else {
- network_log(LOG_INFO, network, "No password known for `%s'", nick);
+ network_log(LOG_TRACE, network, "No NickServ password known for `%s'", nick);
}
}
for (gl = n->global->nickserv_nicks; gl; gl = gl->next) {
e = gl->data;
- if (e->network && !g_strcasecmp(e->network, n->info.name) &&
- !g_strcasecmp(e->nick, n->state->me.nick)) {
+ if (e->network && !g_strcasecmp(e->network, n->name) &&
+ !g_strcasecmp(e->nick, n->external_state->me.nick)) {
break;
}
- if (!e->network && !g_strcasecmp(e->nick, n->state->me.nick) &&
+ if (!e->network && !g_strcasecmp(e->nick, n->external_state->me.nick) &&
!g_strcasecmp(e->pass, newpass)) {
break;
}
if (gl == NULL) {
e = g_new0(struct keyfile_entry, 1);
- e->nick = g_strdup(n->state->me.nick);
- e->network = g_strdup(n->info.name);
+ e->nick = g_strdup(n->external_state->me.nick);
+ e->network = g_strdup(n->name);
n->global->nickserv_nicks = g_list_prepend(n->global->nickserv_nicks, e);
}
if (e->pass == NULL || strcmp(e->pass, newpass) != 0) {
e->pass = g_strdup(newpass);
- network_log(LOG_INFO, n, "Caching password for nick %s", e->nick);
+ network_log(LOG_INFO, n, "Caching NickServ password for nick %s", e->nick);
}
}
-static gboolean log_data(struct irc_network *n, const struct line *l, enum data_direction dir, void *userdata)
+static gboolean log_data(struct irc_network *n, const struct irc_line *l, enum data_direction dir, void *userdata)
{
static char *nickattempt = NULL;
char *filename = g_build_filename(dir, "nickserv", NULL);
gboolean ret;
- if (global->nickserv_nicks == NULL)
- unlink(filename);
- else
+ if (global->nickserv_nicks == NULL) {
+ if (g_unlink(filename) == 0)
+ ret = TRUE;
+ else if (errno == ENOENT)
+ ret = TRUE;
+ else
+ ret = FALSE;
+ } else
ret = keyfile_write_file(global->nickserv_nicks, NICKSERV_FILE_HEADER, filename);
g_free(filename);