oidentd suppport
This commit is contained in:
parent
f66513d224
commit
a48019b5fd
|
@ -272,7 +272,7 @@ PACKAGE_STRING=
|
||||||
PACKAGE_BUGREPORT=
|
PACKAGE_BUGREPORT=
|
||||||
|
|
||||||
ac_unique_file="src/bip.c"
|
ac_unique_file="src/bip.c"
|
||||||
ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO SET_MAKE CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT YACC LEX LEXLIB LEX_OUTPUT_ROOT DEBUG_TRUE DEBUG_FALSE LIBOBJS LTLIBOBJS'
|
ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO SET_MAKE CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT YACC LEX LEXLIB LEX_OUTPUT_ROOT DEBUG_TRUE DEBUG_FALSE OIDENTD_TRUE OIDENTD_FALSE LIBOBJS LTLIBOBJS'
|
||||||
ac_subst_files=''
|
ac_subst_files=''
|
||||||
|
|
||||||
# Initialize some variables set by options.
|
# Initialize some variables set by options.
|
||||||
|
@ -805,6 +805,7 @@ Optional Features:
|
||||||
--disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
|
--disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
|
||||||
--enable-FEATURE[=ARG] include FEATURE [ARG=yes]
|
--enable-FEATURE[=ARG] include FEATURE [ARG=yes]
|
||||||
--enable-debug Turn on debugging
|
--enable-debug Turn on debugging
|
||||||
|
--enable-oidentd Enable oidentd support (bip overwrites ~/.oidentd.conf with this on!)
|
||||||
--disable-ssl Drop OpenSSL support
|
--disable-ssl Drop OpenSSL support
|
||||||
|
|
||||||
Some influential environment variables:
|
Some influential environment variables:
|
||||||
|
@ -2925,6 +2926,29 @@ else
|
||||||
DEBUG_FALSE=
|
DEBUG_FALSE=
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
oidentd=false
|
||||||
|
# Check whether --enable-oidentd or --disable-oidentd was given.
|
||||||
|
if test "${enable_oidentd+set}" = set; then
|
||||||
|
enableval="$enable_oidentd"
|
||||||
|
|
||||||
|
cat >>confdefs.h <<\_ACEOF
|
||||||
|
#define HAVE_OIDENTD
|
||||||
|
_ACEOF
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
fi;
|
||||||
|
#[oidentd=true]
|
||||||
|
|
||||||
|
|
||||||
|
if test x$debug = xtrue; then
|
||||||
|
OIDENTD_TRUE=
|
||||||
|
OIDENTD_FALSE='#'
|
||||||
|
else
|
||||||
|
OIDENTD_TRUE='#'
|
||||||
|
OIDENTD_FALSE=
|
||||||
|
fi
|
||||||
|
|
||||||
requires_libssl=yes
|
requires_libssl=yes
|
||||||
# Check whether --enable-ssl or --disable-ssl was given.
|
# Check whether --enable-ssl or --disable-ssl was given.
|
||||||
if test "${enable_ssl+set}" = set; then
|
if test "${enable_ssl+set}" = set; then
|
||||||
|
@ -3661,6 +3685,8 @@ s,@LEXLIB@,$LEXLIB,;t t
|
||||||
s,@LEX_OUTPUT_ROOT@,$LEX_OUTPUT_ROOT,;t t
|
s,@LEX_OUTPUT_ROOT@,$LEX_OUTPUT_ROOT,;t t
|
||||||
s,@DEBUG_TRUE@,$DEBUG_TRUE,;t t
|
s,@DEBUG_TRUE@,$DEBUG_TRUE,;t t
|
||||||
s,@DEBUG_FALSE@,$DEBUG_FALSE,;t t
|
s,@DEBUG_FALSE@,$DEBUG_FALSE,;t t
|
||||||
|
s,@OIDENTD_TRUE@,$OIDENTD_TRUE,;t t
|
||||||
|
s,@OIDENTD_FALSE@,$OIDENTD_FALSE,;t t
|
||||||
s,@LIBOBJS@,$LIBOBJS,;t t
|
s,@LIBOBJS@,$LIBOBJS,;t t
|
||||||
s,@LTLIBOBJS@,$LTLIBOBJS,;t t
|
s,@LTLIBOBJS@,$LTLIBOBJS,;t t
|
||||||
CEOF
|
CEOF
|
||||||
|
|
|
@ -12,6 +12,15 @@ AC_ARG_ENABLE(debug,
|
||||||
[debug=true])
|
[debug=true])
|
||||||
AM_CONDITIONAL(DEBUG, test x$debug = xtrue)
|
AM_CONDITIONAL(DEBUG, test x$debug = xtrue)
|
||||||
|
|
||||||
|
oidentd=false
|
||||||
|
AC_ARG_ENABLE(oidentd,
|
||||||
|
[ --enable-oidentd Enable oidentd support (bip overwrites ~/.oidentd.conf with this on!)],
|
||||||
|
AC_DEFINE([HAVE_OIDENTD], [], [Enable oidentd.conf management support])
|
||||||
|
|
||||||
|
)
|
||||||
|
#[oidentd=true]
|
||||||
|
AM_CONDITIONAL(OIDENTD, test x$debug = xtrue)
|
||||||
|
|
||||||
requires_libssl=yes
|
requires_libssl=yes
|
||||||
AC_ARG_ENABLE(ssl,
|
AC_ARG_ENABLE(ssl,
|
||||||
[ --disable-ssl Drop OpenSSL support],
|
[ --disable-ssl Drop OpenSSL support],
|
||||||
|
|
|
@ -3,8 +3,8 @@ bip_SOURCES = conf.y lex.l bip.c connection.c irc.c line.c log.c md5.c util.c
|
||||||
bipmkpw_SOURCES = bipmkpw.c md5.c util.c
|
bipmkpw_SOURCES = bipmkpw.c md5.c util.c
|
||||||
AM_YFLAGS= -d
|
AM_YFLAGS= -d
|
||||||
if DEBUG
|
if DEBUG
|
||||||
AM_CFLAGS=-Wall -g
|
AM_CFLAGS+=-Wall -g
|
||||||
AM_LDFLAGS=-g
|
AM_LDFLAGS+=-g
|
||||||
else
|
else
|
||||||
AM_CFLAGS=-Wall
|
AM_CFLAGS+=-Wall
|
||||||
endif
|
endif
|
||||||
|
|
|
@ -369,9 +369,9 @@ install uninstall-am uninstall all-redirect all-am all installdirs \
|
||||||
mostlyclean-generic distclean-generic clean-generic \
|
mostlyclean-generic distclean-generic clean-generic \
|
||||||
maintainer-clean-generic clean mostlyclean distclean maintainer-clean
|
maintainer-clean-generic clean mostlyclean distclean maintainer-clean
|
||||||
|
|
||||||
@DEBUG_TRUE@ AM_CFLAGS=-Wall -g
|
@DEBUG_TRUE@ AM_CFLAGS+=-Wall -g
|
||||||
@DEBUG_TRUE@ AM_LDFLAGS=-g
|
@DEBUG_TRUE@ AM_LDFLAGS+=-g
|
||||||
@DEBUG_FALSE@ AM_CFLAGS=-Wall
|
@DEBUG_FALSE@ AM_CFLAGS+=-Wall
|
||||||
|
|
||||||
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
||||||
# Otherwise a system limit (for SysV at least) may be exceeded.
|
# Otherwise a system limit (for SysV at least) may be exceeded.
|
||||||
|
|
|
@ -3,6 +3,9 @@
|
||||||
/* Define to 1 if you have the `ssl' library (-lssl). */
|
/* Define to 1 if you have the `ssl' library (-lssl). */
|
||||||
#undef HAVE_LIBSSL
|
#undef HAVE_LIBSSL
|
||||||
|
|
||||||
|
/* Enable oidentd.conf management support */
|
||||||
|
#undef HAVE_OIDENTD
|
||||||
|
|
||||||
/* Name of package */
|
/* Name of package */
|
||||||
#undef PACKAGE
|
#undef PACKAGE
|
||||||
|
|
||||||
|
|
|
@ -21,7 +21,7 @@ extern int errno;
|
||||||
static SSL_CTX *sslctx = NULL;
|
static SSL_CTX *sslctx = NULL;
|
||||||
static BIO *errbio = NULL;
|
static BIO *errbio = NULL;
|
||||||
extern char *conf_ssl_certfile;
|
extern char *conf_ssl_certfile;
|
||||||
static int SSLize(connection_t *cn);
|
static int SSLize(connection_t *cn, int *nc);
|
||||||
static int SSL_init_context(void);
|
static int SSL_init_context(void);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -563,7 +563,7 @@ static int check_event_read(fd_set *fds, connection_t *cn)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int check_event_write(fd_set *fds, connection_t *cn)
|
static int check_event_write(fd_set *fds, connection_t *cn, int *nc)
|
||||||
{
|
{
|
||||||
if (cn_is_in_error(cn)) {
|
if (cn_is_in_error(cn)) {
|
||||||
mylog(LOG_DEBUGVERB, "Error on fd %d (state %d)",
|
mylog(LOG_DEBUGVERB, "Error on fd %d (state %d)",
|
||||||
|
@ -588,8 +588,8 @@ static int check_event_write(fd_set *fds, connection_t *cn)
|
||||||
int err, err2;
|
int err, err2;
|
||||||
socklen_t errSize = sizeof(err);
|
socklen_t errSize = sizeof(err);
|
||||||
|
|
||||||
err2 = getsockopt(cn->handle, SOL_SOCKET, SO_ERROR,(void *)&err,
|
err2 = getsockopt(cn->handle, SOL_SOCKET, SO_ERROR,
|
||||||
&errSize);
|
(void *)&err, &errSize);
|
||||||
|
|
||||||
if (err2 < 0) {
|
if (err2 < 0) {
|
||||||
mylog(LOG_WARN, "fd:%d getsockopt error: %s",
|
mylog(LOG_WARN, "fd:%d getsockopt error: %s",
|
||||||
|
@ -600,7 +600,7 @@ static int check_event_write(fd_set *fds, connection_t *cn)
|
||||||
CONN_NEED_SSLIZE) ? 0 : 1;
|
CONN_NEED_SSLIZE) ? 0 : 1;
|
||||||
|
|
||||||
} else if (err == EINPROGRESS || err == EALREADY) {
|
} else if (err == EINPROGRESS || err == EALREADY) {
|
||||||
mylog(LOG_INFO, "fd:%d Connection in progress...",
|
mylog(LOG_DEBUG, "fd:%d Connection in progress...",
|
||||||
cn->handle);
|
cn->handle);
|
||||||
return connection_timedout(cn);
|
return connection_timedout(cn);
|
||||||
} else if (err == EISCONN || err == 0) {
|
} else if (err == EISCONN || err == 0) {
|
||||||
|
@ -611,7 +611,8 @@ static int check_event_write(fd_set *fds, connection_t *cn)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
cn->connected = CONN_OK;
|
cn->connected = CONN_OK;
|
||||||
mylog(LOG_INFO, "fd:%d Connection established !",
|
*nc = 1;
|
||||||
|
mylog(LOG_DEBUG, "fd:%d Connection established !",
|
||||||
cn->handle);
|
cn->handle);
|
||||||
return 1;
|
return 1;
|
||||||
} else {
|
} else {
|
||||||
|
@ -626,7 +627,7 @@ static int check_event_write(fd_set *fds, connection_t *cn)
|
||||||
|
|
||||||
#ifdef HAVE_LIBSSL
|
#ifdef HAVE_LIBSSL
|
||||||
if (cn->connected == CONN_NEED_SSLIZE) {
|
if (cn->connected == CONN_NEED_SSLIZE) {
|
||||||
if (SSLize(cn))
|
if (SSLize(cn, nc))
|
||||||
return connection_timedout(cn);
|
return connection_timedout(cn);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -691,7 +692,7 @@ int cn_want_write(connection_t *cn)
|
||||||
return !list_is_empty(cn->outgoing);
|
return !list_is_empty(cn->outgoing);
|
||||||
}
|
}
|
||||||
|
|
||||||
list_t *wait_event(list_t *cn_list, int *msec)
|
list_t *wait_event(list_t *cn_list, int *msec, int *nc)
|
||||||
{
|
{
|
||||||
fd_set fds_read, fds_write, fds_except;
|
fd_set fds_read, fds_write, fds_except;
|
||||||
int maxfd = -1, err;
|
int maxfd = -1, err;
|
||||||
|
@ -699,6 +700,7 @@ list_t *wait_event(list_t *cn_list, int *msec)
|
||||||
list_iterator_t it;
|
list_iterator_t it;
|
||||||
struct timeval tv;
|
struct timeval tv;
|
||||||
struct timeval btv, etv;
|
struct timeval btv, etv;
|
||||||
|
*nc = 0;
|
||||||
|
|
||||||
cn_newdata = list_new(NULL);
|
cn_newdata = list_new(NULL);
|
||||||
FD_ZERO(&fds_read);
|
FD_ZERO(&fds_read);
|
||||||
|
@ -795,7 +797,7 @@ list_t *wait_event(list_t *cn_list, int *msec)
|
||||||
list_add_first(cn_newdata, cn);
|
list_add_first(cn_newdata, cn);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (check_event_write(&fds_write, cn))
|
if (check_event_write(&fds_write, cn, nc))
|
||||||
connection_ready_output(cn);
|
connection_ready_output(cn);
|
||||||
|
|
||||||
if (check_event_read(&fds_read, cn)) {
|
if (check_event_read(&fds_read, cn)) {
|
||||||
|
@ -1097,7 +1099,7 @@ prng_end:
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int SSLize(connection_t *cn)
|
static int SSLize(connection_t *cn, int *nc)
|
||||||
{
|
{
|
||||||
int err, err2;
|
int err, err2;
|
||||||
|
|
||||||
|
@ -1139,6 +1141,7 @@ static int SSLize(connection_t *cn)
|
||||||
return 1;
|
return 1;
|
||||||
}*/
|
}*/
|
||||||
cn->connected = CONN_OK;
|
cn->connected = CONN_OK;
|
||||||
|
*nc = 1;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
if (err2 == SSL_ERROR_ZERO_RETURN || err2 == SSL_ERROR_SSL) {
|
if (err2 == SSL_ERROR_ZERO_RETURN || err2 == SSL_ERROR_SSL) {
|
||||||
|
@ -1263,7 +1266,7 @@ int main(int argc,char* argv[])
|
||||||
while (cont) {
|
while (cont) {
|
||||||
conn2 = accept_new(conn);
|
conn2 = accept_new(conn);
|
||||||
if (conn2) {
|
if (conn2) {
|
||||||
mylog(LOG_INFO, "New client");
|
mylog(LOG_DEBUG, "New client");
|
||||||
cont = 0;
|
cont = 0;
|
||||||
}
|
}
|
||||||
sleep(1);
|
sleep(1);
|
||||||
|
|
|
@ -90,7 +90,7 @@ void connection_close(connection_t *cn);
|
||||||
void write_line(connection_t *cn, char *line);
|
void write_line(connection_t *cn, char *line);
|
||||||
void write_line_fast(connection_t *cn, char *line);
|
void write_line_fast(connection_t *cn, char *line);
|
||||||
list_t *read_lines(connection_t *cn, int *error);
|
list_t *read_lines(connection_t *cn, int *error);
|
||||||
list_t *wait_event(list_t *cn_list, int *msec);
|
list_t *wait_event(list_t *cn_list, int *msec, int *nc);
|
||||||
|
|
||||||
int cn_is_connected(connection_t *cn);
|
int cn_is_connected(connection_t *cn);
|
||||||
int cn_is_listening(connection_t *cn);
|
int cn_is_listening(connection_t *cn);
|
||||||
|
|
55
src/irc.c
55
src/irc.c
|
@ -1821,6 +1821,54 @@ void irc_server_shutdown(struct link_server *s)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef HAVE_OIDENTD
|
||||||
|
/* ugly */
|
||||||
|
void oidentd_dump(list_t *connl)
|
||||||
|
{
|
||||||
|
list_iterator_t it;
|
||||||
|
FILE *f;
|
||||||
|
char *home;
|
||||||
|
char tmpbuf[256];
|
||||||
|
|
||||||
|
home = getenv("HOME");
|
||||||
|
if (!home)
|
||||||
|
return;
|
||||||
|
strcpy(tmpbuf, home);
|
||||||
|
strcat(tmpbuf, "/.oidentd.conf");
|
||||||
|
f = fopen(tmpbuf, "w");
|
||||||
|
if (!f)
|
||||||
|
return;
|
||||||
|
|
||||||
|
for (list_it_init(connl, &it); list_it_item(&it); list_it_next(&it)) {
|
||||||
|
connection_t *c = list_it_item(&it);
|
||||||
|
struct link_any *la = c->user_data;
|
||||||
|
if (c->connected == CONN_OK && la &&
|
||||||
|
TYPE(la) == IRC_TYPE_SERVER) {
|
||||||
|
struct link_server *ls = (struct link_server*)la;
|
||||||
|
struct link *l = LINK(ls);
|
||||||
|
|
||||||
|
char *localip, *remoteip;
|
||||||
|
int localport, remoteport;
|
||||||
|
|
||||||
|
localip = connection_localip(CONN(ls));
|
||||||
|
localport = connection_localport(CONN(ls));
|
||||||
|
remoteip = connection_remoteip(CONN(ls));
|
||||||
|
remoteport = connection_remoteport(CONN(ls));
|
||||||
|
|
||||||
|
fprintf(f, "to %s lport %d from %s fport %d {\n",
|
||||||
|
remoteip, remoteport, localip,
|
||||||
|
localport);
|
||||||
|
fprintf(f, "\treply %s\n", l->user);
|
||||||
|
fprintf(f, "}\n");
|
||||||
|
free(localip);
|
||||||
|
free(remoteip);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fclose(f);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
struct link_client *reloading_client;
|
struct link_client *reloading_client;
|
||||||
/*
|
/*
|
||||||
* The main loop
|
* The main loop
|
||||||
|
@ -1934,8 +1982,13 @@ void irc_main(connection_t *inc, list_t *ll)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int nc;
|
||||||
/* Da main loop */
|
/* Da main loop */
|
||||||
list_t *ready = wait_event(&connl, &timeleft);
|
list_t *ready = wait_event(&connl, &timeleft, &nc);
|
||||||
|
#ifdef HAVE_OIDENTD
|
||||||
|
if (nc)
|
||||||
|
oidentd_dump(&connl);
|
||||||
|
#endif
|
||||||
while ((conn = list_remove_first(ready))) {
|
while ((conn = list_remove_first(ready))) {
|
||||||
struct link_any *lc =
|
struct link_any *lc =
|
||||||
(struct link_any *)conn->user_data;
|
(struct link_any *)conn->user_data;
|
||||||
|
|
|
@ -617,7 +617,7 @@ static char *log_beautify(char *buf, char *dest, int *raw)
|
||||||
}
|
}
|
||||||
son = p;
|
son = p;
|
||||||
/* 'date time blawithnoexcl bla bla ! bla' --> ? */
|
/* 'date time blawithnoexcl bla bla ! bla' --> ? */
|
||||||
while (*p && *p != '!' && *p != ' ')
|
while (*p && *p != '!' && *p != ' ' && *p != ':')
|
||||||
p++;
|
p++;
|
||||||
if (!p || !p[0] || !p[1])
|
if (!p || !p[0] || !p[1])
|
||||||
return buf;
|
return buf;
|
||||||
|
|
Loading…
Reference in New Issue