diff --git a/CHANGES b/CHANGES index 482dab7..53f5063 100644 --- a/CHANGES +++ b/CHANGES @@ -1,5 +1,9 @@  -####################### V 1.7.4.5: +Features: + Added the --experimental option that enables use of features that might + change in the future. + +####################### V 1.7.4.5 (not released): Corrections: On connect() failure and in some other situations Socat tries to get diff --git a/VERSION b/VERSION index e17e390..ceaf471 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -"1.7.4.5" +"1.7.4.5+" diff --git a/configure.ac b/configure.ac index 7c7b1f1..693ab3d 100644 --- a/configure.ac +++ b/configure.ac @@ -472,8 +472,8 @@ if test -n "$WITH_READLINE"; then CFLAGS_ORIG=$CFLAGS LIBS_ORIG=$LIBS sc_usable_readline_found= - - for D in "" "/usr/local" "/opt/local" "/sw" "/opt/freeware" "/usr/sfw"; do + + for D in "" "/usr/local" "/opt/local" "/sw" "/opt/freeware" "/usr/sfw"; do if test -n "$D" ; then CPPFLAGS="$CPPFLAGS -I$D/include" CFLAGS="$CFLAGS -L$D/lib" @@ -482,12 +482,12 @@ if test -n "$WITH_READLINE"; then DLOC="in default location" fi AC_MSG_CHECKING(for usable readline $DLOC) - + # Some systems require -lcurses, some require -lncurses. # Mac OS X 10.4 (and others) ships with libedit masquerading as readline, # but it doesn't work well with socat. It can be recognized by the absence # of append_history. - + for L in "" "-lcurses" "-lncurses"; do LIBS="$LIBS_ORIG -lreadline $L" AC_TRY_LINK( @@ -499,7 +499,7 @@ if test -n "$WITH_READLINE"; then [ sc_usable_readline_found=1 break ]) done - + if test -n "$sc_usable_readline_found"; then AC_MSG_RESULT(yes) AC_DEFINE(HAVE_READLINE_READLINE_H,1) @@ -514,7 +514,7 @@ if test -n "$WITH_READLINE"; then LIBS=$LIBS_ORIG fi done - + if test -z "$sc_usable_readline_found"; then AC_MSG_WARN([no suitable version of readline found; perhaps you need to install a newer version]) fi @@ -1161,7 +1161,7 @@ if test "$ac_cv___extensions__" = yes; then AC_MSG_RESULT($ac_cv__posix_pthread_semantics) fi - + # struct timespec AC_MSG_CHECKING(for struct timespec) AC_CACHE_VAL(sc_cv_struct_timespec, @@ -1540,7 +1540,7 @@ if test -n "$WITH_OPENSSL_METHOD" -o -z "$ac_cv_have_tls_client_method" -o -z "$ dnl Search for SSLv2_client_method, SSLv2_server_method AC_CHECK_FUNC(SSLv2_client_method, AC_DEFINE(HAVE_SSLv2_client_method), AC_CHECK_LIB(crypt, SSLv2_client_method, [LIBS=-lcrypt $LIBS])) AC_CHECK_FUNC(SSLv2_server_method, AC_DEFINE(HAVE_SSLv2_server_method), AC_CHECK_LIB(crypt, SSLv2_server_method, [LIBS=-lcrypt $LIBS])) -dnl +dnl AC_CHECK_FUNC(SSLv3_client_method, AC_DEFINE(HAVE_SSLv3_client_method), AC_CHECK_LIB(crypt, SSLv3_client_method, [LIBS=-lcrypt $LIBS])) AC_CHECK_FUNC(SSLv3_server_method, AC_DEFINE(HAVE_SSLv3_server_method), AC_CHECK_LIB(crypt, SSLv3_server_method, [LIBS=-lcrypt $LIBS])) AC_CHECK_FUNC(SSLv23_client_method, AC_DEFINE(HAVE_SSLv23_client_method), AC_CHECK_LIB(crypt, SSLv23_client_method, [LIBS=-lcrypt $LIBS])) @@ -1675,7 +1675,7 @@ dnl the matching type. dnl If this method does not seem to work we run test programs that print the dnl length and signedness of the type. -dnl do we have a -Werror option? +dnl do we have a -Werror option? dnl Does the test code compile with -Werror when types fit? CHANCE_TO_TYPECHECK=1 CFLAGS1="$CFLAGS"; CFLAGS="$ERRONWARN $(echo "$CFLAGS1" | sed -e 's@-Wall@@g')" @@ -2089,7 +2089,7 @@ if test -n "$WITH_LIBWRAP"; then fi AC_MSG_RESULT($sc_cv_have_hosts_allow_table) fi # test -n "$WITH_LIBWRAP" - + if test "$GCC" = yes; then CFLAGS="$CFLAGS" diff --git a/doc/socat.yo b/doc/socat.yo index 64c1851..02a70c0 100644 --- a/doc/socat.yo +++ b/doc/socat.yo @@ -118,6 +118,9 @@ dit(bf(tt(-d -d -d -d))) Prints fatal, error, warning, notice, info, and debug messages. dit(bf(tt(-D))) Logs information about file descriptors before starting the transfer phase. +dit(bf(tt(--experimental))) + New features that are not well tested or are subject to change in the future + must me explicitely enabled using this option. dit(bf(tt(-ly[]))) Writes messages to syslog instead of stderr; severity as defined with -d option. With optional link()(TYPE_FACILITY), the syslog type can diff --git a/socat.c b/socat.c index 44b7f64..664dc37 100644 --- a/socat.c +++ b/socat.c @@ -264,8 +264,9 @@ int main(int argc, const char *argv[]) { } } break; - case 'W': if (socat_opts.lock.lockfile) + case 'W': if (socat_opts.lock.lockfile) { Error("only one -L and -W option allowed"); + } if (arg1[0][2]) { socat_opts.lock.lockfile = *arg1+2; } else { @@ -291,6 +292,13 @@ int main(int argc, const char *argv[]) { xioopts.preferred_ip = arg1[0][1]; break; #endif /* WITH_IP4 || WITH_IP6 */ + case '-': + if (!strcmp("experimental", &arg1[0][2])) { + xioopts.experimental = true; + } else { + Error1("unknown option \"%s\"; use option \"-h\" for help", arg1[0]); + } + break; case '\0': case ',': case ':': @@ -389,6 +397,7 @@ void socat_usage(FILE *fd) { #if WITH_FILAN fputs(" -D analyze file descriptors before loop\n", fd); #endif + fputs(" --experimental enable experimental features\n", fd); fputs(" -ly[facility] log to syslog, using facility (default is daemon)\n", fd); fputs(" -lf log to file\n", fd); fputs(" -ls log to stderr (default if no other log)\n", fd); diff --git a/xio-readline.c b/xio-readline.c index 0fbbb88..96e21f7 100644 --- a/xio-readline.c +++ b/xio-readline.c @@ -30,8 +30,7 @@ static int xioopen_readline(int argc, const char *argv[], struct opt *opts, int dummy1, int dummy2, int dummy3); -const struct addrdesc addr_readline = { - "readline", 3, xioopen_readline, GROUP_FD|GROUP_TERMIOS|GROUP_READLINE, 0, 0, 0 HELP(NULL) }; +const struct addrdesc addr_readline = { "readline", 3, xioopen_readline, GROUP_FD|GROUP_TERMIOS|GROUP_READLINE, 0, 0, 0 HELP(NULL) }; const struct optdesc opt_history_file = { "history-file", "history", OPT_HISTORY_FILE, GROUP_READLINE, PH_LATE, TYPE_STRING, OFUNC_OFFSET, XIO_OFFSETOF(para.readline.history_file) }; const struct optdesc opt_prompt = { "prompt", NULL, OPT_PROMPT, GROUP_READLINE, PH_LATE, TYPE_STRING, OFUNC_OFFSET, XIO_OFFSETOF(para.readline.prompt) }; diff --git a/xio.h b/xio.h index 0f89e55..fad024d 100644 --- a/xio.h +++ b/xio.h @@ -102,6 +102,7 @@ typedef struct { char default_ip; /* default prot.fam for IP based listen ('4' or '6') */ char preferred_ip; /* preferred prot.fam. for name resolution ('0' for unspecified, '4', or '6') */ + bool experimental; /* enable some features */ } xioopts_t; /* pack the description of a lock file */ diff --git a/xioparam.c b/xioparam.c index e225a3c..132cf34 100644 --- a/xioparam.c +++ b/xioparam.c @@ -20,7 +20,8 @@ xioopts_t xioopts = { '\0', /* logopt */ NULL, /* syslogfac */ '4', /* default_ip */ - '4' /* preferred_ip */ + '4', /* preferred_ip */ + false /* experimental */ } ;