1
0
forked from bip/bip

A fix for rbot on join.

Give up more gracefully on error when dumping oidentd
This commit is contained in:
nohar 2007-02-08 23:14:06 +00:00
parent 052ec2cfbb
commit fd87c58cef

View File

@ -479,7 +479,14 @@ int irc_dispatch_server(struct link_server *server, struct line *line)
/* send join and related stuff to client */ /* send join and related stuff to client */
static void irc_send_join(struct link_client *ic, struct channel *chan) static void irc_send_join(struct link_client *ic, struct channel *chan)
{ {
WRITE_LINE1(CONN(ic), LINK(ic)->l_server->nick, "JOIN", chan->name); char *ircmask; /* fake an irc mask for rbot */
ircmask = malloc(strlen(LINK(ic)->l_server->nick) +
strlen("!bip@bip.bip.bip") + 1);
strcpy(ircmask, LINK(ic)->l_server->nick);
strcat(ircmask, "!bip@bip.bip.bip");
WRITE_LINE1(CONN(ic), ircmask, "JOIN", chan->name);
free(ircmask);
if (chan->topic) if (chan->topic)
WRITE_LINE3(CONN(ic), P_SERV, "332", LINK(ic)->l_server->nick, WRITE_LINE3(CONN(ic), P_SERV, "332", LINK(ic)->l_server->nick,
chan->name, chan->topic); chan->name, chan->topic);
@ -2021,7 +2028,7 @@ void oidentd_dump(list_t *connl)
{ {
list_iterator_t it; list_iterator_t it;
FILE *f; FILE *f;
char *home, *filename, *content; char *home, *filename;
char *bipstart = NULL, *bipend = NULL; char *bipstart = NULL, *bipend = NULL;
struct stat stats; struct stat stats;
char tag_written = 0; char tag_written = 0;
@ -2048,6 +2055,7 @@ void oidentd_dump(list_t *connl)
return; return;
} }
} else { } else {
char *content;
f = fopen(filename, "r+"); f = fopen(filename, "r+");
if (!f) { if (!f) {
@ -2069,6 +2077,7 @@ void oidentd_dump(list_t *connl)
if (fread(content, 1, stats.st_size, f) != if (fread(content, 1, stats.st_size, f) !=
(size_t)stats.st_size) { (size_t)stats.st_size) {
mylog(LOG_WARN, "Can't read %s fully", filename); mylog(LOG_WARN, "Can't read %s fully", filename);
free(content);
goto clean_oidentd; goto clean_oidentd;
} }
@ -2083,6 +2092,7 @@ void oidentd_dump(list_t *connl)
if (ftruncate(fileno(f), 0) == -1) { if (ftruncate(fileno(f), 0) == -1) {
mylog(LOG_DEBUG, "Can't reset %s size", mylog(LOG_DEBUG, "Can't reset %s size",
filename); filename);
free(content);
goto clean_oidentd; goto clean_oidentd;
} }
@ -2145,7 +2155,6 @@ void oidentd_dump(list_t *connl)
clean_oidentd: clean_oidentd:
fclose(f); fclose(f);
free(content);
free(filename); free(filename);
} }
#endif #endif