Imported from conserver-8.2.0.tar.gz

This commit is contained in:
Bryan Stansell 2014-04-20 21:47:40 -07:00
parent 484806e667
commit 8534a21cef
40 changed files with 1618 additions and 3342 deletions

16
CHANGES
View File

@ -1,6 +1,20 @@
CHANGES
=======
version 8.2.0 (Apr 20, 2014):
- added --with-trust-uds-cred which uses getsockopt() to fetch and
trust the client uid, bypassing password lookups - patch by Anton
Lundin <glance@acc.umu.se>
- missing closedir() causing memory leak - patch by Anton Lundin
<glance@acc.umu.se>
- sending a break signal over IPMI was broken - based on patch by
Alexander Y. Fomichev <git.user@gmail.com>
- IPv6 support (marked as experimental at this point because it's
untested (except by the author), there's a lack of documentation, and
I'm hoping for non-getifaddrs() system support) - patch by Milos
Vyletel <milos.vyletel@gmail.com>
- no more K&R compiler support
version 8.1.20 (Apr 4, 2014):
- IPMI serial over LAN support via FreeIPMI - based on patch by Anton
D. Kachalov <mouse@yandex-team.ru>
@ -938,5 +952,5 @@ before version 6.05:
and enhancements of various types were applied.
#
# $Id: CHANGES,v 1.239 2014/04/04 16:27:38 bryan Exp $
# $Id: CHANGES,v 1.247 2014/04/21 04:47:37 bryan Exp $
#

17
INSTALL
View File

@ -156,8 +156,9 @@ Detailed Instructions
--with-port=PORT Specify port number [conserver]
--with-base=PORT Base port for secondary channel [0]
--with-master=MASTER Specify master server hostname [console]
--with-cffile=CFFILE Specify config filename
[SYSCONFDIR/conserver.cf]
--with-ccffile=CFFILE Specify client config filename
[SYSCONFDIR/console.cf]
--with-cffile=CFFILE Specify config filename [SYSCONFDIR/conserver.cf]
--with-pwdfile=PWDFILE Specify password filename
[SYSCONFDIR/conserver.passwd]
--with-logfile=LOGFILE Specify log filename [/var/log/conserver]
@ -166,12 +167,22 @@ Detailed Instructions
--with-timeout=TIMEOUT Specify connect() timeout in seconds [10]
--with-trustrevdns Trust reverse DNS information
--with-extmsgs Produce extended messages
--with-rpath Use -R as well as -L for libraries
--with-cycladests (deprecated - noop) Build for a Cyclades TS
--with-uds[=DIR] Use Unix domain sockets for client/server
communication [/tmp/conserver]
--with-trust-uds-cred Trust UDS credentials obtained via socket
--with-libwrap[=PATH] Compile in libwrap (tcp_wrappers) support
--with-openssl[=PATH] Compile in OpenSSL support
--with-req-server-cert Require server SSL certificate by client
--with-gssapi[=PATH] Compile in GSS-API support
--with-striprealm retry username without @REALM with gss-api
authentication
--with-freeipmi[=PATH] Compile in FreeIPMI support
--with-dmalloc[=PATH] Compile in dmalloc support
--with-pam Enable PAM support
--with-ipv6 (experimental) Use IPv6 for client/server
communication
Not surprisingly, some match the old conserver/cons.h items...here
they are for reference:
@ -278,5 +289,5 @@ Other Information And Gotchas
#
# $Id: INSTALL,v 1.39 2005/05/21 13:47:16 bryan Exp $
# $Id: INSTALL,v 1.41 2014/04/20 06:45:07 bryan Exp $
#

View File

@ -34,13 +34,13 @@
* to change the /etc/security/audit_event line.
*/
#define AUE_autologin 32900
# define AUE_autologin 32900
#include <sys/unistd.h>
#include <netdb.h>
#include <bsm/audit.h>
#include <bsm/libbsm.h>
#include <libintl.h>
# include <sys/unistd.h>
# include <netdb.h>
# include <bsm/audit.h>
# include <bsm/libbsm.h>
# include <libintl.h>
#endif
#include <compat.h>
@ -69,7 +69,7 @@
*/
#ifndef lint
char *rcsid = "$Id: autologin.c,v 1.27 2013/09/20 21:15:13 bryan Exp $";
char *rcsid = "$Id: autologin.c,v 1.28 2014/04/20 06:45:07 bryan Exp $";
#endif /* not lint */
extern char *progname;
gid_t awGrps[NGROUPS_MAX];
@ -86,7 +86,7 @@ void make_utmp();
void usage();
int
Process()
Process(void)
{
int iErrs = 0;
int i, iNewGrp;
@ -411,8 +411,7 @@ Process()
#ifndef HAVE_PUTENV
int
putenv(pcAssign)
char *pcAssign;
putenv(char *pcAssign)
{
register char *pcEq;
@ -427,8 +426,7 @@ putenv(pcAssign)
#endif
int
addgroup(pcGrp)
char *pcGrp;
addgroup(char *pcGrp)
{
struct group *grp;
@ -451,9 +449,7 @@ addgroup(pcGrp)
/* install a utmp entry to show the use we know is here is here (ksb)
*/
void
make_utmp(pclogin, pctty)
char *pclogin;
char *pctty;
make_utmp(char *pclogin, char *pctty)
{
register int iFound, iPos;
register int fdUtmp;
@ -513,7 +509,7 @@ make_utmp(pclogin, pctty)
(void)strncpy(utmp.ut_line, pcDev, sizeof(utmp.ut_line));
}
#else
#ifdef HAVE_SETTTYENT
# ifdef HAVE_SETTTYENT
{
register struct ttyent *ty;
@ -534,7 +530,7 @@ make_utmp(pclogin, pctty)
(void)strncpy(utmp.ut_line, pcDev, sizeof(utmp.ut_line));
(void)strncpy(utmp.ut_name, pclogin, sizeof(utmp.ut_name));
(void)strncpy(utmp.ut_host, "(autologin)", sizeof(utmp.ut_host));
#else
# else
/* look through /etc/utmp by hand (sigh)
*/
iFound = iPos = 0;
@ -546,7 +542,7 @@ make_utmp(pclogin, pctty)
iPos++;
}
(void)strncpy(utmp.ut_name, pclogin, sizeof(utmp.ut_name));
#endif
# endif
#endif
utmp.ut_time = time((time_t *)0);
@ -562,7 +558,7 @@ make_utmp(pclogin, pctty)
void
usage()
usage(void)
{
char *u_pch;
int u_loop;

View File

@ -20,9 +20,7 @@ static int
* does +arg if you give a last argument of "+", else give (char *)0
*/
static int
getopt(nargc, nargv, ostr)
int nargc;
char **nargv, *ostr;
getopt(int nargc, char **nargv, char *ostr)
{
register char *oli; /* option letter list index */
static char EMSG[] = ""; /* just a null place */
@ -84,7 +82,7 @@ getopt(nargc, nargv, ostr)
char
*progname =
"$Id: main.c,v 1.2 2013/09/20 21:15:13 bryan Exp $", *au_terse[] = {
"$Id: main.c,v 1.3 2014/04/20 06:45:07 bryan Exp $", *au_terse[] = {
" [-u] [-c cmd] [-e env=value] [-g group] [-l login] [-t tty]",
" -h",
" -V",
@ -104,18 +102,16 @@ int
fMakeUtmp = 1, iErrs = 0;
#ifndef u_terse
#define u_terse (au_terse[0])
# define u_terse (au_terse[0])
#endif
static char *rcsid = "$Id: main.c,v 1.2 2013/09/20 21:15:13 bryan Exp $";
static char *rcsid = "$Id: main.c,v 1.3 2014/04/20 06:45:07 bryan Exp $";
/*
* parser
*/
int
main(argc, argv)
int argc;
char **argv;
main(int argc, char **argv)
{
static char
sbOpt[] = "c:e:g:hl:t:uV", *u_pch = (char *)0;

View File

@ -4,7 +4,7 @@
extern char *progname, *au_terse[4], *u_help[9];
#ifndef u_terse
#define u_terse (au_terse[0])
# define u_terse (au_terse[0])
#endif
extern int main();
extern int fMakeUtmp, iErrs;

View File

@ -49,15 +49,15 @@
/* For legacy compile-time setting of the port...
*/
#if ! defined(DEFPORT)
# if defined(SERVICENAME)
# define DEFPORT SERVICENAME
# if defined(SERVICENAME)
# define DEFPORT SERVICENAME
# else
# if defined(PORTNUMBER)
# define DEFPORT PORTNUMBER
# else
# if defined(PORTNUMBER)
# define DEFPORT PORTNUMBER
# else
# define DEFPORT "conserver"
# endif
# define DEFPORT "conserver"
# endif
# endif
#endif
#if STDC_HEADERS
@ -129,7 +129,7 @@ typedef long fd_set;
#endif
#if HAVE_TYPES_H
#include <sys/types.h>
# include <sys/types.h>
#endif
#if HAVE_SYS_WAIT_H
@ -138,30 +138,30 @@ typedef long fd_set;
#define LO(s) ((unsigned)((s) & 0377))
#define HI(s) ((unsigned)(((s) >> 8) & 0377))
#if !defined(WIFEXITED)
#define WIFEXITED(s) (LO(s)==0)
# define WIFEXITED(s) (LO(s)==0)
#endif
#if !defined(WEXITSTATUS)
#define WEXITSTATUS(s) HI(s)
# define WEXITSTATUS(s) HI(s)
#endif
#if !defined(WIFSIGNALED)
#define WIFSIGNALED(s) ((LO(s)>0)&&(HI(s)==0))
# define WIFSIGNALED(s) ((LO(s)>0)&&(HI(s)==0))
#endif
#if !defined(WTERMSIG)
#define WTERMSIG(s) (LO(s)&0177)
# define WTERMSIG(s) (LO(s)&0177)
#endif
#if !defined(WIFSTOPPED)
#define WIFSTOPPED(s) ((LO(s)==0177)&&(HI(s)!=0))
# define WIFSTOPPED(s) ((LO(s)==0177)&&(HI(s)!=0))
#endif
#if !defined(WSTOPSIG)
#define WSTOPSIG(s) HI(s)
# define WSTOPSIG(s) HI(s)
#endif
#if HAVE_SYSEXITS_H
#include <sysexits.h>
# include <sysexits.h>
#else
#define EX_OK 0
#define EX_UNAVAILABLE 69
#define EX_TEMPFAIL 75
# define EX_OK 0
# define EX_UNAVAILABLE 69
# define EX_TEMPFAIL 75
#endif
#include <errno.h>
@ -235,19 +235,19 @@ extern char *h_errlist[];
#endif
#ifdef HAVE_USERSEC_H
#include <usersec.h>
# include <usersec.h>
#endif
#ifdef HAVE_PTY_H
#include <pty.h>
# include <pty.h>
#endif
#ifdef HAVE_LIBUTIL_H
#include <libutil.h>
# include <libutil.h>
#endif
#ifdef HAVE_UTIL_H
#include <util.h>
# include <util.h>
#endif
@ -280,58 +280,66 @@ typedef int socklen_t;
* as legacy definitions.
*/
#ifndef IUCLC
#define IUCLC 0
# define IUCLC 0
#endif
#ifndef OLCUC
#define OLCUC 0
# define OLCUC 0
#endif
#ifndef XCASE
#define XCASE 0
# define XCASE 0
#endif
/* Some systems don't have OFILL or *DLY. */
#ifndef OFILL
#define OFILL 0
# define OFILL 0
#endif
#ifndef NLDLY
#define NLDLY 0
# define NLDLY 0
#endif
#ifndef CRDLY
#define CRDLY 0
# define CRDLY 0
#endif
#ifndef TABDLY
#define TABDLY 0
# define TABDLY 0
#endif
#ifndef BSDLY
#define BSDLY 0
# define BSDLY 0
#endif
#ifndef ONOCR
#define ONOCR 0
# define ONOCR 0
#endif
#ifndef ONLRET
#define ONLRET 0
# define ONLRET 0
#endif
#ifndef SEEK_SET
#define SEEK_SET L_SET
#endif
#ifndef PARAMS
# if PROTOTYPES
# define PARAMS(protos) protos
# else /* no PROTOTYPES */
# define PARAMS(protos) ()
# endif /* no PROTOTYPES */
# define SEEK_SET L_SET
#endif
/* setup a conditional debugging line */
#ifndef CONDDEBUG
#define CONDDEBUG(line) if (fDebug) {debugFileName=__FILE__; debugLineNo=__LINE__; Debug line;}
# define CONDDEBUG(line) if (fDebug) {debugFileName=__FILE__; debugLineNo=__LINE__; Debug line;}
#endif
#if HAVE_DMALLOC
#include <dmalloc.h>
# include <dmalloc.h>
#endif
#if HAVE_FREEIPMI
#include <ipmiconsole.h>
# include <ipmiconsole.h>
#endif
#ifndef INADDR_STYPE
# if USE_IPV6
# define INADDR_STYPE struct sockaddr_storage
# else
# define INADDR_STYPE struct in_addr
# endif
#endif
#ifndef SOCKADDR_STYPE
# if USE_IPV6
# define SOCKADDR_STYPE struct sockaddr_storage
# else
# define SOCKADDR_STYPE struct sockaddr_in
# endif
#endif

View File

@ -330,9 +330,6 @@
/* pidfile to write to */
#undef PIDFILE
/* Define to 1 if the C compiler supports function prototypes. */
#undef PROTOTYPES
/* Defined if client requires server SSL certificate */
#undef REQ_SERVER_CERT
@ -351,12 +348,27 @@
/* Defined if we trust reverse DNS */
#undef TRUST_REVERSE_DNS
/* Defined if we trust credentials from UDS client */
#undef TRUST_UDS_CRED
/* Directory for Unix domain sockets */
#undef UDSDIR
/* Defined to UDS credential socket option */
#undef UDS_CRED_SO
/* Defined to UDS credential structure name */
#undef UDS_CRED_STYPE
/* Defined to UDS credential structure uid field */
#undef UDS_CRED_UID
/* Defined if we produce extended messages */
#undef USE_EXTENDED_MESSAGES
/* Defined if building with IPv6 support */
#undef USE_IPV6
/* use tcp_wrappers libwrap */
#undef USE_LIBWRAP
@ -395,9 +407,6 @@
/* Define to 1 if you need to in order for `stat' and other things to work. */
#undef _POSIX_SOURCE
/* Define like PROTOTYPES; this can be used by system headers. */
#undef __PROTOTYPES
/* Define to empty if `const' does not conform to ANSI C. */
#undef const

243
configure vendored
View File

@ -682,9 +682,10 @@ with_maxmemb
with_timeout
with_trustrevdns
with_extmsgs
with_uds
with_rpath
with_cycladests
with_uds
with_trust_uds_cred
with_libwrap
with_openssl
with_req_server_cert
@ -693,6 +694,7 @@ with_striprealm
with_freeipmi
with_dmalloc
with_pam
with_ipv6
'
ac_precious_vars='build_alias
host_alias
@ -1329,10 +1331,11 @@ Optional Packages:
--with-timeout=TIMEOUT Specify connect() timeout in seconds [10]
--with-trustrevdns Trust reverse DNS information
--with-extmsgs Produce extended messages
--with-rpath Use -R as well as -L for libraries
--with-cycladests (deprecated - noop) Build for a Cyclades TS
--with-uds[=DIR] Use Unix domain sockets for client/server
communication [/tmp/conserver]
--with-rpath Use -R as well as -L for libraries
--with-cycladests Build for a Cyclades TS
--with-trust-uds-cred Trust UDS credentials obtained via socket
--with-libwrap[=PATH] Compile in libwrap (tcp_wrappers) support
--with-openssl[=PATH] Compile in OpenSSL support
--with-req-server-cert Require server SSL certificate by client
@ -1342,6 +1345,8 @@ Optional Packages:
--with-freeipmi[=PATH] Compile in FreeIPMI support
--with-dmalloc[=PATH] Compile in dmalloc support
--with-pam Enable PAM support
--with-ipv6 (experimental) Use IPv6 for client/server
communication
Some influential environment variables:
CC C compiler command
@ -2604,52 +2609,6 @@ $as_echo "no" >&6; }
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use Unix domain sockets" >&5
$as_echo_n "checking whether to use Unix domain sockets... " >&6; }
cons_with_uds="NO"
# Check whether --with-uds was given.
if test "${with_uds+set}" = set; then :
withval=$with_uds; case "$withval" in
yes)
cat >>confdefs.h <<_ACEOF
#define UDSDIR "/tmp/conserver"
_ACEOF
$as_echo "#define USE_UNIX_DOMAIN_SOCKETS 1" >>confdefs.h
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: /tmp/conserver" >&5
$as_echo "/tmp/conserver" >&6; }
cons_with_uds="YES"
;;
no)
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
;;
*)
cat >>confdefs.h <<_ACEOF
#define UDSDIR "$withval"
_ACEOF
$as_echo "#define USE_UNIX_DOMAIN_SOCKETS 1" >>confdefs.h
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: '$withval'" >&5
$as_echo "'$withval'" >&6; }
cons_with_uds="YES"
if expr "$withval" : '/' >/dev/null 2>&1; then
:
else
echo "*** WARNING *** you may have better success using a fully-qualified path"
echo "*** WARNING *** instead of '$withval'"
fi
;;
esac
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
fi
use_dash_r=no
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use -R paths as well as -L" >&5
$as_echo_n "checking whether to use -R paths as well as -L... " >&6; }
@ -4192,22 +4151,6 @@ $as_echo "#define const /**/" >>confdefs.h
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for function prototypes" >&5
$as_echo_n "checking for function prototypes... " >&6; }
if test "$ac_cv_prog_cc_c89" != no; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
$as_echo "#define PROTOTYPES 1" >>confdefs.h
$as_echo "#define __PROTOTYPES 1" >>confdefs.h
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
@ -4995,6 +4938,149 @@ fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use Unix domain sockets" >&5
$as_echo_n "checking whether to use Unix domain sockets... " >&6; }
cons_with_uds="NO"
# Check whether --with-uds was given.
if test "${with_uds+set}" = set; then :
withval=$with_uds; case "$withval" in
yes)
cat >>confdefs.h <<_ACEOF
#define UDSDIR "/tmp/conserver"
_ACEOF
$as_echo "#define USE_UNIX_DOMAIN_SOCKETS 1" >>confdefs.h
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: /tmp/conserver" >&5
$as_echo "/tmp/conserver" >&6; }
cons_with_uds="YES"
;;
no)
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
;;
*)
cat >>confdefs.h <<_ACEOF
#define UDSDIR "$withval"
_ACEOF
$as_echo "#define USE_UNIX_DOMAIN_SOCKETS 1" >>confdefs.h
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: '$withval'" >&5
$as_echo "'$withval'" >&6; }
cons_with_uds="YES"
if expr "$withval" : '/' >/dev/null 2>&1; then
:
else
echo "*** WARNING *** you may have better success using a fully-qualified path"
echo "*** WARNING *** instead of '$withval'"
fi
;;
esac
if test $cons_with_uds = YES; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to trust UDS credentials" >&5
$as_echo_n "checking whether to trust UDS credentials... " >&6; }
# Check whether --with-trust-uds-cred was given.
if test "${with_trust_uds_cred+set}" = set; then :
withval=$with_trust_uds_cred; case "$withval" in
yes)
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <sys/types.h>
#include <sys/socket.h>
int
main ()
{
struct ucred u;
u.uid = 0;
#if !defined(SO_PEERCRED)
#error "no SO_PEERCRED defined"
#endif
;
return 0;
}
_ACEOF
if ac_fn_c_try_compile "$LINENO"; then :
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
$as_echo "#define UDS_CRED_STYPE ucred" >>confdefs.h
$as_echo "#define UDS_CRED_UID uid" >>confdefs.h
$as_echo "#define UDS_CRED_SO SO_PEERCRED" >>confdefs.h
$as_echo "#define TRUST_UDS_CRED 1" >>confdefs.h
else
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <sys/types.h>
#include <sys/socket.h>
int
main ()
{
struct peercred_struct u;
u.euid = 0;
#if !defined(SO_PEERID)
#error "no SO_PEERID defined"
#endif
;
return 0;
}
_ACEOF
if ac_fn_c_try_compile "$LINENO"; then :
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
$as_echo "#define UDS_CRED_STYPE peercred_struct" >>confdefs.h
$as_echo "#define UDS_CRED_UID euid" >>confdefs.h
$as_echo "#define UDS_CRED_SO SO_PEERID" >>confdefs.h
$as_echo "#define TRUST_UDS_CRED 1" >>confdefs.h
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
;;
*)
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
;;
esac
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
fi
fi
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
fi
cons_with_libwrap="NO"
# Check whether --with-libwrap was given.
@ -5574,6 +5660,32 @@ $as_echo "no" >&6; }
fi
cons_with_ipv6="NO"
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to support IPv6" >&5
$as_echo_n "checking whether to support IPv6... " >&6; }
# Check whether --with-ipv6 was given.
if test "${with_ipv6+set}" = set; then :
withval=$with_ipv6; case "$withval" in
yes)
$as_echo "#define USE_IPV6 1" >>confdefs.h
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
cons_with_ipv6="YES"
;;
*)
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
;;
esac
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
fi
for ac_header in pty.h libutil.h util.h
do :
as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
@ -7065,6 +7177,7 @@ echo " strip @REALM (--with-striprealm): $cons_strip_realm"
fi
echo " dmalloc (--with-dmalloc) : $cons_with_dmalloc"
echo " PAM support (--with-pam) : $cons_with_pam"
echo " IPv6 support (--with-ipv6) : $cons_with_ipv6"
echo ""
echo "=============================================================="

View File

@ -22,9 +22,11 @@ AH_TEMPLATE([HAVE_SA_LEN],[Defined if sa_len member exists in struct sockaddr])
AH_TEMPLATE([TRUST_REVERSE_DNS],[Defined if we trust reverse DNS])
AH_TEMPLATE([USE_EXTENDED_MESSAGES],[Defined if we produce extended messages])
AH_TEMPLATE([USE_UNIX_DOMAIN_SOCKETS],[Defined if we use Unix domain sockets])
AH_TEMPLATE([USE_IPV6], [Defined if building with IPv6 support])
AH_TEMPLATE([UDSDIR], [Directory for Unix domain sockets])
AH_TEMPLATE([FOR_CYCLADES_TS], [Defined if building for a Cyclades TS])
AH_TEMPLATE([REQ_SERVER_CERT], [Defined if client requires server SSL certificate])
AH_TEMPLATE([TRUST_UDS_CRED], [Defined if we trust credentials from UDS client])
dnl ### Normal initialization. ######################################
AC_INIT
@ -258,35 +260,6 @@ AC_ARG_WITH(extmsgs,
;;
esac],[AC_MSG_RESULT(no)])
AC_MSG_CHECKING(whether to use Unix domain sockets)
cons_with_uds="NO"
AC_ARG_WITH(uds,
AS_HELP_STRING([--with-uds@<:@=DIR@:>@ ],
[Use Unix domain sockets for client/server communication @<:@/tmp/conserver@:>@]),
[case "$withval" in
yes)
AC_DEFINE_UNQUOTED(UDSDIR, "/tmp/conserver")
AC_DEFINE(USE_UNIX_DOMAIN_SOCKETS)
AC_MSG_RESULT([/tmp/conserver])
cons_with_uds="YES"
;;
no)
AC_MSG_RESULT(no)
;;
*)
AC_DEFINE_UNQUOTED(UDSDIR, "$withval")
AC_DEFINE(USE_UNIX_DOMAIN_SOCKETS)
AC_MSG_RESULT('$withval')
cons_with_uds="YES"
if expr "$withval" : '/' >/dev/null 2>&1; then
:
else
echo "*** WARNING *** you may have better success using a fully-qualified path"
echo "*** WARNING *** instead of '$withval'"
fi
;;
esac],[AC_MSG_RESULT(no)])
use_dash_r=no
AC_MSG_CHECKING(whether to use -R paths as well as -L)
AC_ARG_WITH(rpath,
@ -304,7 +277,7 @@ AC_ARG_WITH(rpath,
AC_MSG_CHECKING(whether we are building for a Cyclades TS)
AC_ARG_WITH(cycladests,
AS_HELP_STRING([--with-cycladests],[Build for a Cyclades TS]),
AS_HELP_STRING([--with-cycladests],[(deprecated - noop) Build for a Cyclades TS]),
[case "$withval" in
yes)
AC_DEFINE(FOR_CYCLADES_TS)
@ -325,7 +298,6 @@ AC_PROG_MAKE_SET
dnl ### Compiler characteristics. ##################################
AC_AIX
AC_C_CONST
AC_C_PROTOTYPES
dnl AC_CHECK_SIZEOF(long)
dnl if test "$ac_cv_sizeof_long" -gt 4; then
@ -402,6 +374,81 @@ AC_SEARCH_LIBS(crypt,crypt)
AC_SUBST(CONSLIBS)
AC_SUBST(CONSCPPFLAGS)
AC_SUBST(CONSLDFLAGS)
AC_MSG_CHECKING(whether to use Unix domain sockets)
cons_with_uds="NO"
AC_ARG_WITH(uds,
AS_HELP_STRING([--with-uds@<:@=DIR@:>@ ],
[Use Unix domain sockets for client/server communication @<:@/tmp/conserver@:>@]),
[case "$withval" in
yes)
AC_DEFINE_UNQUOTED(UDSDIR, "/tmp/conserver")
AC_DEFINE(USE_UNIX_DOMAIN_SOCKETS)
AC_MSG_RESULT([/tmp/conserver])
cons_with_uds="YES"
;;
no)
AC_MSG_RESULT(no)
;;
*)
AC_DEFINE_UNQUOTED(UDSDIR, "$withval")
AC_DEFINE(USE_UNIX_DOMAIN_SOCKETS)
AC_MSG_RESULT('$withval')
cons_with_uds="YES"
if expr "$withval" : '/' >/dev/null 2>&1; then
:
else
echo "*** WARNING *** you may have better success using a fully-qualified path"
echo "*** WARNING *** instead of '$withval'"
fi
;;
esac
if test $cons_with_uds = YES; then
AC_MSG_CHECKING(whether to trust UDS credentials)
AC_ARG_WITH(trust-uds-cred,
AS_HELP_STRING([--with-trust-uds-cred],[Trust UDS credentials obtained via socket]),
[case "$withval" in
yes)
AC_TRY_COMPILE([#include <sys/types.h>
#include <sys/socket.h>],
[
struct ucred u;
u.uid = 0;
#if !defined(SO_PEERCRED)
#error "no SO_PEERCRED defined"
#endif
],
[AC_MSG_RESULT(yes)
AC_DEFINE(UDS_CRED_STYPE, ucred, [Defined to UDS credential structure name])
AC_DEFINE(UDS_CRED_UID, uid, [Defined to UDS credential structure uid field])
AC_DEFINE(UDS_CRED_SO, SO_PEERCRED, [Defined to UDS credential socket option])
AC_DEFINE(TRUST_UDS_CRED)],
[
AC_TRY_COMPILE([#include <sys/types.h>
#include <sys/socket.h>],
[
struct peercred_struct u;
u.euid = 0;
#if !defined(SO_PEERID)
#error "no SO_PEERID defined"
#endif
],
[AC_MSG_RESULT(yes)
AC_DEFINE(UDS_CRED_STYPE, peercred_struct, [Defined to UDS credential structure name])
AC_DEFINE(UDS_CRED_UID, euid, [Defined to UDS credential structure uid field])
AC_DEFINE(UDS_CRED_SO, SO_PEERID, [Defined to UDS credential socket option])
AC_DEFINE(TRUST_UDS_CRED)],
[AC_MSG_RESULT(no)])
])
;;
*)
AC_MSG_RESULT(no)
;;
esac],[AC_MSG_RESULT(no)])
fi
],[AC_MSG_RESULT(no)])
cons_with_libwrap="NO"
AC_ARG_WITH(libwrap,
AS_HELP_STRING([--with-libwrap@<:@=PATH@:>@],
@ -749,6 +796,23 @@ AC_ARG_WITH(pam,
AC_MSG_RESULT(no)
fi],[AC_MSG_RESULT(no)])
cons_with_ipv6="NO"
AC_MSG_CHECKING(whether to support IPv6)
AC_ARG_WITH(ipv6,
AS_HELP_STRING([--with-ipv6],
[(experimental) Use IPv6 for client/server communication]),
[case "$withval" in
yes)
AC_DEFINE(USE_IPV6)
AC_MSG_RESULT(yes)
cons_with_ipv6="YES"
;;
*)
AC_MSG_RESULT(no)
;;
esac],[AC_MSG_RESULT(no)])
dnl Checks for pty allocation...
dnl According to the xemacs distribution:
dnl getpt() is the preferred pty allocation method on glibc systems.
@ -796,6 +860,7 @@ echo " strip @REALM (--with-striprealm): $cons_strip_realm"
fi
echo " dmalloc (--with-dmalloc) : $cons_with_dmalloc"
echo " PAM support (--with-pam) : $cons_with_pam"
echo " IPv6 support (--with-ipv6) : $cons_with_ipv6"
echo ""
echo "=============================================================="
]

View File

@ -1,5 +1,5 @@
.\" $Id: conserver.cf.man,v 1.85 2014/04/04 16:17:45 bryan Exp $
.TH CONSERVER.CF 5 "2014/04/04" "conserver-8.1.20" "conserver"
.TH CONSERVER.CF 5 "2014/04/04" "conserver-8.2.0" "conserver"
.SH NAME
conserver.cf \- console configuration file for
.BR conserver (8)

View File

@ -1,5 +1,5 @@
.\" $Id: conserver.passwd.man,v 1.10 2004/01/08 16:12:33 bryan Exp $
.TH CONSERVER.PASSWD 5 "2004/01/08" "conserver-8.1.20" "conserver"
.TH CONSERVER.PASSWD 5 "2004/01/08" "conserver-8.2.0" "conserver"
.SH NAME
conserver.passwd \- user access information for
.BR conserver (8)

View File

@ -177,8 +177,8 @@ body {
<H3>Downloading</H3>
<P>The current version, released on Apr 4, 2014, is
<A href="8.1.20.tar.gz">8.1.20.tar.gz</A>. See the <A href=
<P>The current version, released on Apr 20, 2014, is
<A href="8.2.0.tar.gz">8.2.0.tar.gz</A>. See the <A href=
"CHANGES">CHANGES</A> file for information on the latest
updates.</P>

View File

@ -1,5 +1,5 @@
/*
* $Id: access.c,v 5.73 2004/05/23 16:44:25 bryan Exp $
* $Id: access.c,v 5.74 2014/04/20 06:45:07 bryan Exp $
*
* Copyright conserver.com, 2000
*
@ -44,7 +44,14 @@
#include <readcfg.h>
#include <main.h>
#if USE_IPV6
# include <net/if.h>
# include <ifaddrs.h>
# include <sys/socket.h>
# include <netdb.h>
#endif
#if !USE_IPV6
/* Compare an Internet address (IPv4 expected), with an address pattern
* passed as a character string representing an address in the Internet
* standard `.' notation, optionally followed by a slash and an integer
@ -58,20 +65,14 @@
* Returns 0 if the addresses match, else returns 1.
*/
int
#if PROTOTYPES
AddrCmp(struct in_addr *addr, char *pattern)
#else
AddrCmp(addr, pattern)
struct in_addr *addr;
char *pattern;
#endif
{
in_addr_t hostaddr, pattern_addr, netmask;
char *p, *slash_posn;
static STRING *buf = (STRING *)0;
#if HAVE_INET_ATON
# if HAVE_INET_ATON
struct in_addr inetaddr;
#endif
# endif
if (buf == (STRING *)0)
buf = AllocString();
@ -84,15 +85,15 @@ AddrCmp(addr, pattern)
} else
p = pattern;
#if HAVE_INET_ATON
# if HAVE_INET_ATON
if (inet_aton(p, &inetaddr) == 0)
return 1;
pattern_addr = inetaddr.s_addr;
#else
# else
pattern_addr = inet_addr(p);
if (pattern_addr == (in_addr_t) (-1))
return 1; /* malformed address */
#endif
# endif
if (slash_posn) {
/* convert explicit netmask */
@ -121,33 +122,70 @@ AddrCmp(addr, pattern)
pattern_addr & netmask, pattern_addr, netmask));
return (hostaddr & netmask) != (pattern_addr & netmask);
}
#endif /* USE_IPV6 */
/* return the access type for a given host entry (ksb)
*/
char
#if PROTOTYPES
AccType(struct in_addr *addr, char **peername)
#else
AccType(addr, peername)
struct in_addr *addr;
char **peername;
#endif
AccType(INADDR_STYPE *addr, char **peername)
{
ACCESS *pACtmp;
socklen_t so;
char ret;
#if USE_IPV6
int error;
char host[NI_MAXHOST];
char ipaddr[NI_MAXHOST];
#else
struct hostent *he = (struct hostent *)0;
int a;
char ret;
#if TRUST_REVERSE_DNS
# if TRUST_REVERSE_DNS
char **revNames = (char **)0;
#endif
# endif
CONDDEBUG((1, "AccType(): ip=%s", inet_ntoa(*addr)));
#endif /* USE_IPV6 */
ret = config->defaultaccess;
so = sizeof(*addr);
#if TRUST_REVERSE_DNS
#if USE_IPV6
error =
getnameinfo((struct sockaddr *)addr, so, ipaddr, sizeof(ipaddr),
NULL, 0, NI_NUMERICHOST);
if (error) {
Error("AccType(): getnameinfo failed: %s", gai_strerror(error));
goto common_ret;
}
CONDDEBUG((1, "AccType(): ip=%s", ipaddr));
error =
getnameinfo((struct sockaddr *)addr, so, host, sizeof(host), NULL,
0, 0);
if (!error)
CONDDEBUG((1, "AccType(): host=%s", host));
for (pACtmp = pACList; pACtmp != (ACCESS *)0; pACtmp = pACtmp->pACnext) {
CONDDEBUG((1, "AccType(): who=%s, trust=%c", pACtmp->pcwho,
pACtmp->ctrust));
if (strstr(ipaddr, pACtmp->pcwho) != NULL) {
CONDDEBUG((1, "AccType(): match for ip=%s", ipaddr));
ret = pACtmp->ctrust;
goto common_ret;
}
if (!error && strstr(host, pACtmp->pcwho) != NULL) {
CONDDEBUG((1, "AccType(): match for host=%s", host));
ret = pACtmp->ctrust;
goto common_ret;
}
}
common_ret:
if (config->loghostnames == FLAGTRUE && !error)
*peername = StrDup(host);
#else
# if TRUST_REVERSE_DNS
/* if we trust reverse dns, we get the names associated with
* the address we're checking and then check each of those
* against the access list entries (below).
@ -177,7 +215,7 @@ AccType(addr, peername)
}
}
}
#endif
# endif
for (pACtmp = pACList; pACtmp != (ACCESS *)0; pACtmp = pACtmp->pACnext) {
CONDDEBUG((1, "AccType(): who=%s, trust=%c", pACtmp->pcwho,
@ -203,20 +241,20 @@ AccType(addr, peername)
inet_ntoa(*(struct in_addr *)
(he->h_addr_list[a]))));
if (
#if HAVE_MEMCMP
# if HAVE_MEMCMP
memcmp(&(addr->s_addr), he->h_addr_list[a],
he->h_length)
#else
# else
bcmp(&(addr->s_addr), he->h_addr_list[a],
he->h_length)
#endif
# endif
== 0) {
ret = pACtmp->ctrust;
goto common_ret;
}
}
}
#if TRUST_REVERSE_DNS
# if TRUST_REVERSE_DNS
/* we chop bits off client names so that we can put domain
* names in access lists or even top-level domains.
* allowed conserver.com, net;
@ -245,43 +283,49 @@ AccType(addr, peername)
}
}
}
#endif
# endif
}
common_ret:
if (config->loghostnames == FLAGTRUE && peername != (char **)0) {
#if TRUST_REVERSE_DNS
# if TRUST_REVERSE_DNS
if (revNames != (char **)0 && revNames[0] != (char *)0)
*peername = StrDup(revNames[0]);
#else
# else
if ((he =
gethostbyaddr((char *)addr, so,
AF_INET)) != (struct hostent *)0) {
*peername = StrDup(he->h_name);
}
#endif
# endif
}
#if TRUST_REVERSE_DNS
# if TRUST_REVERSE_DNS
common_ret2:
if (revNames != (char **)0) {
for (a = 0; revNames[a] != (char *)0; a++)
free(revNames[a]);
free(revNames);
}
#endif
# endif
#endif /* USE_IPV6 */
return ret;
}
void
#if PROTOTYPES
SetDefAccess(struct in_addr *pAddr, char *pHost)
SetDefAccess(
#if USE_IPV6
void
#else
SetDefAccess(pAddr, pHost)
struct in_addr *pAddr;
char *pHost;
struct in_addr *pAddr, char *pHost
#endif
)
{
ACCESS *a;
#if USE_IPV6
int error;
char addr[NI_MAXHOST];
struct ifaddrs *myAddrs, *ifa;
#endif /* USE_IPV6 */
while (pACList != (ACCESS *)0) {
a = pACList->pACnext;
@ -289,7 +333,39 @@ SetDefAccess(pAddr, pHost)
pACList = a;
}
#if USE_UNIX_DOMAIN_SOCKETS
#if USE_IPV6
/* get list of all addresses on system */
error = getifaddrs(&myAddrs);
if (error) {
Error("SetDefAccess(): getifaddrs: %s", strerror(errno));
return;
}
for (ifa = myAddrs; ifa != NULL; ifa = ifa->ifa_next) {
/* skip interfaces without address or in down state */
if (ifa->ifa_addr == NULL || !(ifa->ifa_flags & IFF_UP))
continue;
error =
getnameinfo(ifa->ifa_addr, sizeof(struct sockaddr_storage),
addr, sizeof(addr), NULL, 0, NI_NUMERICHOST);
if (error)
continue;
if ((a = (ACCESS *)calloc(1, sizeof(ACCESS))) == (ACCESS *)0)
OutOfMem();
if ((a->pcwho = StrDup(addr)) == (char *)0)
OutOfMem();
a->ctrust = 'a';
a->pACnext = pACList;
pACList = a;
CONDDEBUG((1, "SetDefAccess(): trust=%c, who=%s", pACList->ctrust,
pACList->pcwho));
}
freeifaddrs(myAddrs);
#elif USE_UNIX_DOMAIN_SOCKETS
if ((pACList = (ACCESS *)calloc(1, sizeof(ACCESS))) == (ACCESS *)0)
OutOfMem();
if ((pACList->pcwho = StrDup("127.0.0.1")) == (char *)0)
@ -318,12 +394,7 @@ SetDefAccess(pAddr, pHost)
}
void
#if PROTOTYPES
DestroyAccessList(ACCESS *pACList)
#else
DestroyAccessList(pACList)
ACCESS *pACList;
#endif
{
if (pACList == (ACCESS *)0)
return;

View File

@ -1,5 +1,5 @@
/*
* $Id: access.h,v 5.26 2003/08/10 18:11:20 bryan Exp $
* $Id: access.h,v 5.27 2014/04/20 06:45:07 bryan Exp $
*
* Copyright conserver.com, 2000
*
@ -44,6 +44,12 @@ typedef struct access {
struct access *pACnext; /* next access list */
} ACCESS;
extern char AccType PARAMS((struct in_addr *, char **));
extern void SetDefAccess PARAMS((struct in_addr *, char *));
extern void DestroyAccessList PARAMS((ACCESS *));
extern char AccType(INADDR_STYPE *, char **);
extern void SetDefAccess(
#if USE_IPV6
void
#else
struct in_addr *, char *
#endif
);
extern void DestroyAccessList(ACCESS *);

View File

@ -1,5 +1,5 @@
/*
* $Id: client.c,v 5.96 2014/04/02 04:45:31 bryan Exp $
* $Id: client.c,v 5.97 2014/04/20 06:45:07 bryan Exp $
*
* Copyright conserver.com, 2000
*
@ -43,9 +43,14 @@
#include <group.h>
#include <readcfg.h>
#if USE_IPV6
# include <sys/socket.h>
# include <netdb.h>
#endif /* USE_IPV6 */
#if defined(USE_LIBWRAP)
#include <syslog.h>
#include <tcpd.h>
# include <syslog.h>
# include <tcpd.h>
int allow_severity = LOG_INFO;
int deny_severity = LOG_WARNING;
#endif
@ -54,12 +59,7 @@ int deny_severity = LOG_WARNING;
/* find the next guy who wants to write on the console (ksb)
*/
void
#if PROTOTYPES
FindWrite(CONSENT *pCE)
#else
FindWrite(pCE)
CONSENT *pCE;
#endif
{
CONSCLIENT *pCLfound = (CONSCLIENT *)0;
CONSCLIENT *pCL;
@ -91,13 +91,7 @@ FindWrite(pCE)
}
void
#if PROTOTYPES
BumpClient(CONSENT *pCE, char *message)
#else
BumpClient(pCE, message)
CONSENT *pCE;
char *message;
#endif
{
if ((CONSCLIENT *)0 == pCE->pCLwr)
return;
@ -118,14 +112,7 @@ BumpClient(pCE, message)
#define REPLAYBUFFER 4096
void
#if PROTOTYPES
Replay(CONSENT *pCE, CONSFILE *fdOut, unsigned short back)
#else
Replay(pCE, fdOut, back)
CONSENT *pCE;
CONSFILE *fdOut;
unsigned short back;
#endif
{
CONSFILE *fdLog = (CONSFILE *)0;
STRING *line = (STRING *)0;
@ -424,12 +411,7 @@ static HELP aHLTable[] = {
/* list the commands we know for the user (ksb)
*/
void
#if PROTOTYPES
HelpUser(CONSCLIENT *pCL)
#else
HelpUser(pCL, pCE)
CONSCLIENT *pCL;
#endif
{
int i, j, iCmp;
static char
@ -505,34 +487,19 @@ HelpUser(pCL, pCE)
}
int
#if PROTOTYPES
ClientAccessOk(CONSCLIENT *pCL)
#else
ClientAccessOk(pCL)
CONSCLIENT *pCL;
#endif
{
char *peername = (char *)0;
int retval = 1;
#if USE_UNIX_DOMAIN_SOCKETS
struct in_addr addr;
# if HAVE_INET_ATON
inet_aton("127.0.0.1", &addr);
# else
addr.s_addr = inet_addr("127.0.0.1");
# endif
pCL->caccess = AccType(&addr, &peername);
if (pCL->caccess == 'r') {
FileWrite(pCL->fd, FLAGFALSE, "access from your host refused\r\n",
-1);
retval = 0;
}
#else
#if USE_IPV6 || !USE_UNIX_DOMAIN_SOCKETS
socklen_t so;
int cfd;
struct sockaddr_in in_port;
# if USE_IPV6
int error;
char addr[NI_MAXHOST];
# endif
SOCKADDR_STYPE in_port;
int getpeer = -1;
cfd = FileFDNum(pCL->fd);
@ -559,20 +526,56 @@ ClientAccessOk(pCL)
retval = 0;
goto setpeer;
}
pCL->caccess = AccType(&in_port.sin_addr, &peername);
pCL->caccess = AccType(
# if USE_IPV6
&in_port,
# else
&in_port.sin_addr,
# endif
&peername);
if (pCL->caccess == 'r') {
FileWrite(pCL->fd, FLAGFALSE, "access from your host refused\r\n",
-1);
retval = 0;
}
setpeer:
#else
struct in_addr addr;
# if HAVE_INET_ATON
inet_aton("127.0.0.1", &addr);
# else
addr.s_addr = inet_addr("127.0.0.1");
# endif
pCL->caccess = AccType(&addr, &peername);
if (pCL->caccess == 'r') {
FileWrite(pCL->fd, FLAGFALSE, "access from your host refused\r\n",
-1);
retval = 0;
}
#endif
if (pCL->peername != (STRING *)0) {
BuildString((char *)0, pCL->peername);
if (peername != (char *)0)
BuildString(peername, pCL->peername);
#if USE_UNIX_DOMAIN_SOCKETS
#if USE_IPV6
else if (getpeer != -1) {
error =
getnameinfo((struct sockaddr *)&in_port, so, addr,
sizeof(addr), NULL, 0, NI_NUMERICHOST);
if (error) {
FileWrite(pCL->fd, FLAGFALSE, "getnameinfo failed\r\n",
-1);
Error("ClientAccessOk(): gatenameinfo: %s",
gai_strerror(error));
retval = 0;
}
BuildString(addr, pCL->peername);
} else
BuildString("<unknown>", pCL->peername);
#elif USE_UNIX_DOMAIN_SOCKETS
else
BuildString("127.0.0.1", pCL->peername);
#else

View File

@ -1,5 +1,5 @@
/*
* $Id: client.h,v 5.44 2013/09/23 22:58:21 bryan Exp $
* $Id: client.h,v 5.45 2014/04/20 06:45:07 bryan Exp $
*
* Copyright conserver.com, 2000
*
@ -87,15 +87,14 @@ typedef struct client { /* Connection Information: */
IOSTATE ioState; /* state of the socket */
time_t stateTimer; /* timer for various ioState states */
STRING *accmd; /* the command the user issued */
struct sockaddr_in
cnct_port; /* where from */
INADDR_STYPE cnct_port; /* where from */
FLAG confirmed; /* confirm state */
CLIENTSTATE cState; /* state needing confirmation */
char cOption; /* option initiating the confirmation */
} CONSCLIENT;
extern void Replay PARAMS((CONSENT *, CONSFILE *, unsigned short));
extern void HelpUser PARAMS((CONSCLIENT *));
extern void FindWrite PARAMS((CONSENT *));
extern int ClientAccessOk PARAMS((CONSCLIENT *));
extern void BumpClient PARAMS((CONSENT *, char *));
extern void Replay(CONSENT *, CONSFILE *, unsigned short);
extern void HelpUser(CONSCLIENT *);
extern void FindWrite(CONSENT *);
extern int ClientAccessOk(CONSCLIENT *);
extern void BumpClient(CONSENT *, char *);

View File

@ -1,5 +1,5 @@
/*
* $Id: consent.c,v 5.154 2014/04/02 04:45:31 bryan Exp $
* $Id: consent.c,v 5.155 2014/04/20 06:45:07 bryan Exp $
*
* Copyright conserver.com, 2000
*
@ -88,37 +88,37 @@ BAUD baud[] = {
{"3500000", 32},
{"4000000", 33},
#else /* FOR_CYCLADES_TS */
#if defined(B115200)
# if defined(B115200)
{"115200", B115200},
#endif
#if defined(B57600)
# endif
# if defined(B57600)
{"57600", B57600},
#endif
#if defined(B38400)
# endif
# if defined(B38400)
{"38400", B38400},
#endif
#if defined(B19200)
# endif
# if defined(B19200)
{"19200", B19200},
#endif
#if defined(B9600)
# endif
# if defined(B9600)
{"9600", B9600},
#endif
#if defined(B4800)
# endif
# if defined(B4800)
{"4800", B4800},
#endif
#if defined(B2400)
# endif
# if defined(B2400)
{"2400", B2400},
#endif
#if defined(B1800)
# endif
# if defined(B1800)
{"1800", B1800},
#endif
# endif
{"1200", B1200},
#if defined(B600)
# if defined(B600)
{"600", B600},
#endif
#if defined(B300)
# endif
# if defined(B300)
{"300", B300},
#endif
# endif
#endif /* FOR_CYCLADES_TS */
};
@ -126,12 +126,7 @@ BAUD baud[] = {
/* find a baud rate for the string "9600x" -> B9600 (ksb)
*/
BAUD *
#if PROTOTYPES
FindBaud(char *pcMode)
#else
FindBaud(pcMode)
char *pcMode;
#endif
{
int i;
@ -143,9 +138,9 @@ FindBaud(pcMode)
}
# if !defined(PAREXT)
# define PAREXT 0
# endif
#if !defined(PAREXT)
# define PAREXT 0
#endif
struct parity parity[] = {
{"even", PARENB | CS7, 0},
{"mark", PARENB | CS7 | PARODD | PAREXT, 0},
@ -157,12 +152,7 @@ struct parity parity[] = {
/* find a parity "even" or "E" or "ev" -> EVEN
*/
PARITY *
#if PROTOTYPES
FindParity(char *pcMode)
#else
FindParity(pcMode)
char *pcMode;
#endif
{
int i;
@ -177,12 +167,7 @@ FindParity(pcMode)
/* setup a tty device (ksb)
*/
static int
#if PROTOTYPES
TtyDev(CONSENT *pCE)
#else
TtyDev(pCE)
CONSENT *pCE;
#endif
{
struct termios termp;
struct stat stPerm;
@ -290,25 +275,20 @@ TtyDev(pCE)
}
#endif
}
# if HAVE_STROPTS_H
#if HAVE_STROPTS_H
/*
* eat all the streams modules upto and including ttcompat
*/
while (ioctl(cofile, I_FIND, "ttcompat") == 1) {
ioctl(cofile, I_POP, 0);
}
# endif
#endif
pCE->fup = 1;
return 0;
}
void
#if PROTOTYPES
StopInit(CONSENT *pCE)
#else
StopInit(pCE)
CONSENT *pCE;
#endif
{
if (pCE->initcmd == (char *)0)
return;
@ -341,12 +321,7 @@ StopInit(pCE)
#if HAVE_FREEIPMI
ipmiconsole_ctx_t
#if PROTOTYPES
IpmiSOLCreate(CONSENT *pCE)
#else
IpmiSOLCreate(pCE)
CONSENT *pCE;
#endif
{
ipmiconsole_ctx_t ctx;
struct ipmiconsole_ipmi_config ipmi;
@ -389,12 +364,7 @@ IpmiSOLCreate(pCE)
/* invoke the initcmd command */
void
#if PROTOTYPES
StartInit(CONSENT *pCE)
#else
StartInit(pCE)
CONSENT *pCE;
#endif
{
int i;
pid_t iNewGrp;
@ -495,15 +465,15 @@ StartInit(pCE)
close(1);
close(0);
# if HAVE_SETSID
#if HAVE_SETSID
iNewGrp = setsid();
if (-1 == iNewGrp) {
Error("[%s] setsid(): %s", pCE->server, strerror(errno));
iNewGrp = getpid();
}
# else
#else
iNewGrp = getpid();
# endif
#endif
if (dup(pout[0]) != 0 || dup(pin[1]) != 1) {
Error("[%s] StartInit(): fd sync error", pCE->server);
@ -534,17 +504,11 @@ StartInit(pCE)
/* We exit() here, so only call this in a child process before an exec() */
void
#if PROTOTYPES
SetupTty(CONSENT *pCE, int fd)
#else
SetupTty(pCE, fd)
CONSENT *pCE;
int fd;
#endif
{
struct termios n_tio;
# if HAVE_STROPTS_H && !defined(_AIX)
#if HAVE_STROPTS_H && !defined(_AIX)
/* SYSVr4 semantics for opening stream ptys (gregf)
* under PTX (others?) we have to push the compatibility
* streams modules `ptem', `ld', and `ttcompat'
@ -552,7 +516,7 @@ SetupTty(pCE, fd)
ioctl(1, I_PUSH, "ptem");
ioctl(1, I_PUSH, "ldterm");
ioctl(1, I_PUSH, "ttcompat");
# endif
#endif
if (0 != tcgetattr(1, &n_tio)) {
exit(EX_OSERR);
@ -587,12 +551,7 @@ SetupTty(pCE, fd)
/* setup a virtual device (ksb)
*/
static int
#if PROTOTYPES
VirtDev(CONSENT *pCE)
#else
VirtDev(pCE)
CONSENT *pCE;
#endif
{
int i;
pid_t iNewGrp;
@ -645,15 +604,15 @@ VirtDev(pCE)
close(1);
close(0);
# if HAVE_SETSID
#if HAVE_SETSID
iNewGrp = setsid();
if (-1 == iNewGrp) {
Error("[%s] setsid(): %s", pCE->server, strerror(errno));
iNewGrp = getpid();
}
# else
#else
iNewGrp = getpid();
# endif
#endif
if (dup(pCE->execSlaveFD) != 0 || dup(pCE->execSlaveFD) != 1) {
Error("[%s] fd sync error", pCE->server);
@ -707,12 +666,7 @@ VirtDev(pCE)
}
char *
#if PROTOTYPES
ConsState(CONSENT *pCE)
#else
ConsState(pCE)
CONSENT *pCE;
#endif
{
if (!pCE->fup)
return "down";
@ -747,14 +701,7 @@ ConsState(pCE)
* with the "runtime" members of the structure here.
*/
void
#if PROTOTYPES
ConsDown(CONSENT *pCE, FLAG downHard, FLAG force)
#else
ConsDown(pCE, downHard, force)
CONSENT *pCE;
FLAG downHard;
FLAG force;
#endif
{
if (force != FLAGTRUE &&
!(FileBufEmpty(pCE->fdlog) && FileBufEmpty(pCE->cofile) &&
@ -811,15 +758,10 @@ ConsDown(pCE, downHard, force)
* We also maintian the select set for the caller.
*/
void
#if PROTOTYPES
ConsInit(CONSENT *pCE)
#else
ConsInit(pCE)
CONSENT *pCE;
#endif
{
time_t tyme;
extern int FallBack PARAMS((char **, int *));
extern int FallBack(char **, int *);
int cofile = -1;
int ret;
#if HAVE_GETTIMEOFDAY
@ -914,19 +856,86 @@ ConsInit(pCE)
break;
case HOST:
{
#if USE_IPV6
int error;
char host[NI_MAXHOST];
char serv[NI_MAXSERV];
struct addrinfo *ai, *rp, hints;
#else
struct sockaddr_in port;
struct hostent *hp;
#endif /* USE_IPV6 */
#if HAVE_SETSOCKOPT
int one = 1;
#endif
usleep(100000); /* Not all terminal servers can keep up */
#if HAVE_MEMSET
memset((void *)&port, 0, sizeof(port));
#if USE_IPV6
# if HAVE_MEMSET
memset(&hints, 0, sizeof(hints));
# else
bzero(&hints, sizeof(hints));
# endif
hints.ai_flags = AI_ADDRCONFIG;
hints.ai_socktype = SOCK_STREAM;
snprintf(serv, sizeof(serv), "%hu", pCE->netport);
error = getaddrinfo(pCE->host, serv, &hints, &ai);
if (error) {
Error("[%s] getaddrinfo(%s): %s: forcing down",
pCE->server, pCE->host, gai_strerror(error));
ConsDown(pCE, FLAGTRUE, FLAGTRUE);
return;
}
rp = ai;
while (rp) {
error =
getnameinfo(rp->ai_addr, rp->ai_addrlen, host,
sizeof(host), serv, sizeof(serv),
NI_NUMERICHOST | NI_NUMERICSERV);
if (error)
continue;
CONDDEBUG((1,
"[%s]: trying hostname=%s, ip=%s, port=%s",
pCE->server, pCE->host, host, serv));
cofile =
socket(rp->ai_family, rp->ai_socktype,
rp->ai_protocol);
if (cofile != -1) {
# if HAVE_SETSOCKOPT
if (setsockopt
(cofile, SOL_SOCKET, SO_KEEPALIVE,
(char *)&one, sizeof(one)) < 0)
goto fail;
# endif
if (!SetFlags(cofile, O_NONBLOCK, 0))
goto fail;
if ((ret =
connect(cofile, rp->ai_addr,
rp->ai_addrlen)) == 0)
goto success;
fail:
close(cofile);
}
rp = rp->ai_next;
}
Error("[%s]: Unable to connect to %s:%s", pCE->server,
host, serv);
ConsDown(pCE, FLAGTRUE, FLAGTRUE);
return;
success:
freeaddrinfo(ai);
#else
# if HAVE_MEMSET
memset((void *)&port, 0, sizeof(port));
# else
bzero((char *)&port, sizeof(port));
#endif
# endif
if ((hp = gethostbyname(pCE->host)) == NULL) {
Error("[%s] gethostbyname(%s): %s: forcing down",
@ -934,13 +943,13 @@ ConsInit(pCE)
ConsDown(pCE, FLAGTRUE, FLAGTRUE);
return;
}
#if HAVE_MEMCPY
# if HAVE_MEMCPY
memcpy(&port.sin_addr.s_addr, hp->h_addr_list[0],
hp->h_length);
#else
# else
bcopy(hp->h_addr_list[0], &port.sin_addr.s_addr,
hp->h_length);
#endif
# endif
port.sin_family = hp->h_addrtype;
port.sin_port = htons(pCE->netport);
@ -951,7 +960,7 @@ ConsInit(pCE)
ConsDown(pCE, FLAGTRUE, FLAGTRUE);
return;
}
#if HAVE_SETSOCKOPT
# if HAVE_SETSOCKOPT
if (setsockopt
(cofile, SOL_SOCKET, SO_KEEPALIVE, (char *)&one,
sizeof(one)) < 0) {
@ -962,7 +971,7 @@ ConsInit(pCE)
close(cofile);
return;
}
#endif
# endif
if (!SetFlags(cofile, O_NONBLOCK, 0)) {
ConsDown(pCE, FLAGTRUE, FLAGTRUE);
@ -982,6 +991,7 @@ ConsInit(pCE)
return;
}
}
#endif /* USE_IPV6 */
}
if ((pCE->cofile =
FileOpenFD(cofile, simpleSocket)) == (CONSFILE *)0) {
@ -1238,48 +1248,93 @@ ConsInit(pCE)
}
int
#if PROTOTYPES
AddrsMatch(char *addr1, char *addr2)
#else
AddrsMatch(addr1, addr2)
char *addr1;
char *addr2;
#endif
{
#if USE_IPV6
int error, ret = 0;
struct addrinfo *ai1, *ai2, hints;
#else
/* so, since we might use inet_addr, we're going to use
* (in_addr_t)(-1) as a sign of an invalid ip address.
* sad, but true.
*/
in_addr_t inAddr1 = (in_addr_t) (-1);
in_addr_t inAddr2 = (in_addr_t) (-1);
#if HAVE_INET_ATON
# if HAVE_INET_ATON
struct in_addr inetAddr1;
struct in_addr inetAddr2;
#endif
# endif
#endif /* USE_IPV6 */
/* first try simple character string match */
if (strcasecmp(addr1, addr2) == 0)
return 1;
#if USE_IPV6
# if HAVE_MEMSET
memset(&hints, 0, sizeof(hints));
# else
bzero(&hints, sizeof(hints));
# endif
hints.ai_flags = AI_ADDRCONFIG;
hints.ai_socktype = SOCK_STREAM;
error = getaddrinfo(addr1, NULL, &hints, &ai1);
if (error) {
Error("getaddrinfo(%s): %s", addr1, gai_strerror(error));
goto done;
}
error = getaddrinfo(addr2, NULL, &hints, &ai2);
if (error) {
Error("getaddrinfo(%s): %s", addr2, gai_strerror(error));
goto done;
}
for (; ai1 != NULL; ai1 = ai1->ai_next) {
for (; ai2 != NULL; ai2 = ai2->ai_next) {
if (ai1->ai_addr->sa_family != ai2->ai_addr->sa_family)
continue;
if (
# if HAVE_MEMCMP
memcmp(&ai1->ai_addr, &ai2->ai_addr,
sizeof(struct sockaddr_storage))
# else
bcmp(&ai1->ai_addr, &ai2->ai_addr,
sizeof(struct sockaddr_storage))
# endif
== 0) {
ret = 1;
goto done;
}
}
}
done:
freeaddrinfo(ai1);
freeaddrinfo(ai2);
Msg("compare %s and %s returns %d", addr1, addr2, ret);
return ret;
#else
/* now try ip address match (could have leading zeros or something) */
#if HAVE_INET_ATON
# if HAVE_INET_ATON
if (inet_aton(addr1, &inetAddr1) != 0)
inAddr1 = inetAddr1.s_addr;
if (inet_aton(addr2, &inetAddr2) != 0)
inAddr2 = inetAddr2.s_addr;
#else
# else
inAddr1 = inet_addr(addr1);
inAddr2 = inet_addr(addr2);
#endif
# endif
/* if both are ip addresses, we just match */
if (inAddr1 != (in_addr_t) (-1) && inAddr2 != (in_addr_t) (-1))
return !
#if HAVE_MEMCMP
# if HAVE_MEMCMP
memcmp(&inAddr1, &inAddr2, sizeof(inAddr1))
#else
# else
bcmp(&inAddr1, &inAddr2, sizeof(inAddr1))
#endif
# endif
;
/* both are hostnames...this sucks 'cause we have to copy one
@ -1307,11 +1362,11 @@ AddrsMatch(addr1, addr2)
if (addrs == (in_addr_t *) 0)
OutOfMem();
for (i = 0; i < c; i++) {
#if HAVE_MEMCPY
# if HAVE_MEMCPY
memcpy(&(addrs[i]), he->h_addr_list[i], he->h_length);
#else
# else
bcopy(he->h_addr_list[i], &(addrs[i]), he->h_length);
#endif
# endif
}
/* now process the second hostname */
@ -1331,12 +1386,12 @@ AddrsMatch(addr1, addr2)
for (j = 0; he->h_addr_list[j] != (char *)0; j++) {
for (i = 0; i < c; i++) {
if (
#if HAVE_MEMCMP
# if HAVE_MEMCMP
memcmp(&(addrs[i]), he->h_addr_list[j],
he->h_length)
#else
# else
bcmp(&(addrs[i]), he->h_addr_list[j], he->h_length)
#endif
# endif
== 0) {
free(addrs);
return 1;
@ -1370,28 +1425,24 @@ AddrsMatch(addr1, addr2)
}
for (i = 0; he->h_addr_list[i] != (char *)0; i++) {
if (
#if HAVE_MEMCMP
# if HAVE_MEMCMP
memcmp(iaddr, he->h_addr_list[i], he->h_length)
#else
# else
bcmp(iaddr, he->h_addr_list[i], he->h_length)
#endif
# endif
== 0)
return 1;
}
}
return 0;
#endif /* USE_IPV6 */
}
/* thread ther list of uniq console server machines, aliases for (ksb)
* machines will screw us up
*/
REMOTE *
#if PROTOTYPES
FindUniq(REMOTE *pRCAll)
#else
FindUniq(pRCAll)
REMOTE *pRCAll;
#endif
{
REMOTE *pRC;
@ -1414,12 +1465,7 @@ FindUniq(pRCAll)
}
void
#if PROTOTYPES
DestroyRemoteConsole(REMOTE *pRCList)
#else
DestroyRemoteConsole(pRCList)
REMOTE *pRCList;
#endif
{
NAMES *name = (NAMES *)0;

View File

@ -1,5 +1,5 @@
/*
* $Id: consent.h,v 5.74 2014/04/04 16:17:10 bryan Exp $
* $Id: consent.h,v 5.75 2014/04/20 06:45:07 bryan Exp $
*
* Copyright conserver.com, 2000
*
@ -64,10 +64,10 @@ typedef enum consType {
} CONSTYPE;
#if HAVE_FREEIPMI
#define IPMIL_UNKNOWN (0)
#define IPMIL_USER (IPMICONSOLE_PRIVILEGE_USER+1)
#define IPMIL_OPERATOR (IPMICONSOLE_PRIVILEGE_OPERATOR+1)
#define IPMIL_ADMIN (IPMICONSOLE_PRIVILEGE_ADMIN+1)
# define IPMIL_UNKNOWN (0)
# define IPMIL_USER (IPMICONSOLE_PRIVILEGE_USER+1)
# define IPMIL_OPERATOR (IPMICONSOLE_PRIVILEGE_OPERATOR+1)
# define IPMIL_ADMIN (IPMICONSOLE_PRIVILEGE_ADMIN+1)
#endif
typedef struct names {
@ -209,13 +209,13 @@ typedef struct remote { /* console at another host */
NAMES *aliases; /* aliases for remote server name */
} REMOTE;
extern PARITY *FindParity PARAMS((char *));
extern BAUD *FindBaud PARAMS((char *));
extern void ConsInit PARAMS((CONSENT *));
extern void ConsDown PARAMS((CONSENT *, FLAG, FLAG));
extern REMOTE *FindUniq PARAMS((REMOTE *));
extern void DestroyRemoteConsole PARAMS((REMOTE *));
extern void StartInit PARAMS((CONSENT *));
extern void StopInit PARAMS((CONSENT *));
extern char *ConsState PARAMS((CONSENT *));
extern void SetupTty PARAMS((CONSENT *, int));
extern PARITY *FindParity(char *);
extern BAUD *FindBaud(char *);
extern void ConsInit(CONSENT *);
extern void ConsDown(CONSENT *, FLAG, FLAG);
extern REMOTE *FindUniq(REMOTE *);
extern void DestroyRemoteConsole(REMOTE *);
extern void StartInit(CONSENT *);
extern void StopInit(CONSENT *);
extern char *ConsState(CONSENT *);
extern void SetupTty(CONSENT *, int);

View File

@ -1,6 +1,6 @@
.\" @(#)conserver.8 01/06/91 OSU CIS; Thomas A. Fine
.\" $Id: conserver.man,v 1.54 2006/12/31 02:02:48 bryan Exp $
.TH CONSERVER 8 "2006/12/31" "conserver-8.1.20" "conserver"
.TH CONSERVER 8 "2006/12/31" "conserver-8.2.0" "conserver"
.SH NAME
conserver \- console server daemon
.SH SYNOPSIS

View File

@ -1,5 +1,5 @@
/*
* $Id: convert.c,v 1.13 2014/04/02 04:45:32 bryan Exp $
* $Id: convert.c,v 1.14 2014/04/20 06:45:07 bryan Exp $
*
* Copyright conserver.com, 2000
*
@ -58,14 +58,7 @@ DestroyDataStructures()
}
char *
#if PROTOTYPES
ReadLine2(FILE *fp, STRING *save, int *iLine)
#else
ReadLine2(fp, save, iLine)
FILE *fp;
STRING *save;
int *iLine;
#endif
{
static char buf[1024];
char *wholeline = (char *)0;
@ -154,13 +147,7 @@ ReadLine2(fp, save, iLine)
* to manage the consoles
*/
void
#if PROTOTYPES
ReadCfg(char *pcFile, FILE *fp)
#else
ReadCfg(pcFile, fp)
char *pcFile;
FILE *fp;
#endif
{
int iLine;
unsigned char *acIn;
@ -480,13 +467,7 @@ ReadCfg(pcFile, fp)
}
int
#if PROTOTYPES
main(int argc, char **argv)
#else
main(argc, argv)
int argc;
char **argv;
#endif
{
char *pcFile;
FILE *fp;

File diff suppressed because it is too large Load Diff

View File

@ -1,22 +1,18 @@
/*
* $Id: cutil.h,v 1.69 2009/09/26 09:23:04 bryan Exp $
* $Id: cutil.h,v 1.70 2014/04/20 06:45:07 bryan Exp $
*
* Copyright conserver.com, 2000
*
* Maintainer/Enhancer: Bryan Stansell (bryan@conserver.com)
*/
#if PROTOTYPES
#include <stdarg.h>
#else
#include <varargs.h>
#endif
#if HAVE_OPENSSL
#include <openssl/ssl.h>
#include <openssl/err.h>
# include <openssl/ssl.h>
# include <openssl/err.h>
#endif
#if HAVE_GSSAPI
#include <gssapi/gssapi.h>
# include <gssapi/gssapi.h>
#endif
/* communication constants
@ -98,15 +94,15 @@ typedef struct consFile {
typedef struct item {
char *id;
void (*reg) PARAMS((char *));
void (*reg) (char *);
} ITEM;
typedef struct section {
char *id;
void (*begin) PARAMS((char *));
void (*end) PARAMS((void));
void (*abort) PARAMS((void));
void (*destroy) PARAMS((void));
void (*begin) (char *);
void (*end) (void);
void (*abort) (void);
void (*destroy) (void);
ITEM *items;
} SECTION;
@ -119,14 +115,14 @@ typedef enum substToken {
typedef struct subst {
/* function to retrieve a token type based on a character
*/
SUBSTTOKEN (*token) PARAMS((char));
SUBSTTOKEN (*token) (char);
/* data for callback function
*/
void *data;
/* function to retrieve a value (as a char* or int or both) for
* a substitution
*/
int (*value) PARAMS((char, char **, int *));
int (*value) (char, char **, int *);
} SUBST;
extern int isMultiProc, fDebug, fVerbose, fErrorPrinted;
@ -134,7 +130,9 @@ extern char *progname;
extern pid_t thepid;
#define MAXHOSTNAME 1024
extern char myHostname[];
#if !USE_IPV6
extern struct in_addr *myAddrs;
#endif
extern fd_set rinit;
extern fd_set winit;
extern int maxfd;
@ -145,73 +143,74 @@ extern char *file; /* used by ParseFile */
extern SECTION sections[]; /* used by ParseFile */
extern int isMaster;
extern const char *StrTime PARAMS((time_t *));
extern void Debug PARAMS((int, char *, ...));
extern void Error PARAMS((char *, ...));
extern void Msg PARAMS((char *, ...));
extern void Verbose PARAMS((char *, ...));
extern void SimpleSignal PARAMS((int, RETSIGTYPE(*)(int)));
extern int GetMaxFiles PARAMS(());
extern char *FmtCtl PARAMS((int, STRING *));
extern void FmtCtlStr PARAMS((char *, int, STRING *));
extern CONSFILE *FileOpenFD PARAMS((int, enum consFileType));
extern CONSFILE *FileOpenPipe PARAMS((int, int));
extern CONSFILE *FileOpen PARAMS((const char *, int, int));
extern int FileClose PARAMS((CONSFILE **));
extern int FileRead PARAMS((CONSFILE *, void *, int));
extern int FileWrite PARAMS((CONSFILE *, FLAG, char *, int));
extern void FileVWrite PARAMS((CONSFILE *, FLAG, char *, va_list));
extern void FilePrint PARAMS((CONSFILE *, FLAG, char *, ...));
extern int FileStat PARAMS((CONSFILE *, struct stat *));
extern int FileSeek PARAMS((CONSFILE *, off_t, int));
extern int FileSend PARAMS((CONSFILE *, const void *, size_t, int));
extern int FileFDNum PARAMS((CONSFILE *));
extern int FileFDOutNum PARAMS((CONSFILE *));
extern int FileUnopen PARAMS((CONSFILE *));
extern void OutOfMem PARAMS(());
extern char *BuildTmpString PARAMS((const char *));
extern char *BuildTmpStringChar PARAMS((const char));
extern char *BuildTmpStringPrint PARAMS((char *, ...));
extern char *BuildString PARAMS((const char *, STRING *));
extern char *BuildStringChar PARAMS((const char, STRING *));
extern char *BuildStringPrint PARAMS((STRING *, char *, ...));
extern char *BuildStringN PARAMS((const char *, int, STRING *));
extern char *ShiftString PARAMS((STRING *, int));
extern void InitString PARAMS((STRING *));
extern void DestroyString PARAMS((STRING *));
extern void DestroyStrings PARAMS((void));
extern STRING *AllocString PARAMS((void));
extern char *ReadLine PARAMS((FILE *, STRING *, int *));
extern enum consFileType FileGetType PARAMS((CONSFILE *));
extern void FileSetType PARAMS((CONSFILE *, enum consFileType));
extern void FileSetQuoteIAC PARAMS((CONSFILE *, FLAG));
extern FLAG FileSawQuoteSusp PARAMS((CONSFILE *));
extern FLAG FileSawQuoteExec PARAMS((CONSFILE *));
extern FLAG FileSawQuoteAbrt PARAMS((CONSFILE *));
extern FLAG FileSawQuoteGoto PARAMS((CONSFILE *));
extern void Bye PARAMS((int));
extern void DestroyDataStructures PARAMS((void));
extern int IsMe PARAMS((char *));
extern char *PruneSpace PARAMS((char *));
extern int FileCanRead PARAMS((CONSFILE *, fd_set *, fd_set *));
extern int FileCanWrite PARAMS((CONSFILE *, fd_set *, fd_set *));
extern int FileBufEmpty PARAMS((CONSFILE *));
extern int SetFlags PARAMS((int, int, int));
extern char *StrDup PARAMS((const char *));
extern int ParseIACBuf PARAMS((CONSFILE *, void *, int *));
extern void *MemMove PARAMS((void *, void *, size_t));
extern char *StringChar PARAMS((STRING *, int, char));
extern void ParseFile PARAMS((char *, FILE *, int));
extern void ProbeInterfaces PARAMS((in_addr_t));
extern void ProcessSubst
PARAMS((SUBST *, char **, char **, char *, char *));
extern char *MyVersion PARAMS((void));
extern unsigned int AtoU PARAMS((char *));
extern void StrCpy PARAMS((char *, const char *, unsigned int));
#if HAVE_OPENSSL
extern SSL *FileGetSSL PARAMS((CONSFILE *));
extern void FileSetSSL PARAMS((CONSFILE *, SSL *));
extern int SSLVerifyCallback PARAMS((int, X509_STORE_CTX *));
extern int FileSSLAccept PARAMS((CONSFILE *));
extern int FileCanSSLAccept PARAMS((CONSFILE *, fd_set *, fd_set *));
extern const char *StrTime(time_t *);
extern void Debug(int, char *, ...);
extern void Error(char *, ...);
extern void Msg(char *, ...);
extern void Verbose(char *, ...);
extern void SimpleSignal(int, RETSIGTYPE(*)(int));
extern int GetMaxFiles();
extern char *FmtCtl(int, STRING *);
extern void FmtCtlStr(char *, int, STRING *);
extern CONSFILE *FileOpenFD(int, enum consFileType);
extern CONSFILE *FileOpenPipe(int, int);
extern CONSFILE *FileOpen(const char *, int, int);
extern int FileClose(CONSFILE **);
extern int FileRead(CONSFILE *, void *, int);
extern int FileWrite(CONSFILE *, FLAG, char *, int);
extern void FileVWrite(CONSFILE *, FLAG, char *, va_list);
extern void FilePrint(CONSFILE *, FLAG, char *, ...);
extern int FileStat(CONSFILE *, struct stat *);
extern int FileSeek(CONSFILE *, off_t, int);
extern int FileSend(CONSFILE *, const void *, size_t, int);
extern int FileFDNum(CONSFILE *);
extern int FileFDOutNum(CONSFILE *);
extern int FileUnopen(CONSFILE *);
extern void OutOfMem();
extern char *BuildTmpString(const char *);
extern char *BuildTmpStringChar(const char);
extern char *BuildTmpStringPrint(char *, ...);
extern char *BuildString(const char *, STRING *);
extern char *BuildStringChar(const char, STRING *);
extern char *BuildStringPrint(STRING *, char *, ...);
extern char *BuildStringN(const char *, int, STRING *);
extern char *ShiftString(STRING *, int);
extern void InitString(STRING *);
extern void DestroyString(STRING *);
extern void DestroyStrings(void);
extern STRING *AllocString(void);
extern char *ReadLine(FILE *, STRING *, int *);
extern enum consFileType FileGetType(CONSFILE *);
extern void FileSetType(CONSFILE *, enum consFileType);
extern void FileSetQuoteIAC(CONSFILE *, FLAG);
extern FLAG FileSawQuoteSusp(CONSFILE *);
extern FLAG FileSawQuoteExec(CONSFILE *);
extern FLAG FileSawQuoteAbrt(CONSFILE *);
extern FLAG FileSawQuoteGoto(CONSFILE *);
extern void Bye(int);
extern void DestroyDataStructures(void);
extern int IsMe(char *);
extern char *PruneSpace(char *);
extern int FileCanRead(CONSFILE *, fd_set *, fd_set *);
extern int FileCanWrite(CONSFILE *, fd_set *, fd_set *);
extern int FileBufEmpty(CONSFILE *);
extern int SetFlags(int, int, int);
extern char *StrDup(const char *);
extern int ParseIACBuf(CONSFILE *, void *, int *);
extern void *MemMove(void *, void *, size_t);
extern char *StringChar(STRING *, int, char);
extern void ParseFile(char *, FILE *, int);
#if !USE_IPV6
extern void ProbeInterfaces(in_addr_t);
#endif
extern void ProcessSubst(SUBST *, char **, char **, char *, char *);
extern char *MyVersion(void);
extern unsigned int AtoU(char *);
extern void StrCpy(char *, const char *, unsigned int);
#if HAVE_OPENSSL
extern SSL *FileGetSSL(CONSFILE *);
extern void FileSetSSL(CONSFILE *, SSL *);
extern int SSLVerifyCallback(int, X509_STORE_CTX *);
extern int FileSSLAccept(CONSFILE *);
extern int FileCanSSLAccept(CONSFILE *, fd_set *, fd_set *);
#endif

View File

@ -1,5 +1,5 @@
/*
* $Id: fallback.c,v 5.61 2004/04/16 16:58:09 bryan Exp $
* $Id: fallback.c,v 5.62 2014/04/20 06:45:07 bryan Exp $
*
* Copyright conserver.com, 2000
*
@ -27,44 +27,38 @@
* packages, i think things are ok...hopefully it's true!
*/
static int
#if PROTOTYPES
GetPseudoTTY(STRING *slave, int *slaveFD)
#else
GetPseudoTTY(slave, slaveFD)
STRING *slave;
int *slaveFD;
#endif
{
#if HAVE_OPENPTY
int fd = -1;
int sfd = -1;
int opty = 0;
char *pcName;
#if HAVE_SIGACTION
# if HAVE_SIGACTION
sigset_t oldmask, newmask;
#else
extern RETSIGTYPE FlagReapVirt PARAMS((int));
#endif
# else
extern RETSIGTYPE FlagReapVirt(int);
# endif
#if HAVE_SIGACTION
# if HAVE_SIGACTION
sigemptyset(&newmask);
sigaddset(&newmask, SIGCHLD);
if (sigprocmask(SIG_BLOCK, &newmask, &oldmask) < 0)
Error("GetPseudoTTY(): sigprocmask(SIG_BLOCK): %s",
strerror(errno));
#else
# else
SimpleSignal(SIGCHLD, SIG_DFL);
#endif
# endif
opty = openpty(&fd, &sfd, NULL, NULL, NULL);
#if HAVE_SIGACTION
# if HAVE_SIGACTION
if (sigprocmask(SIG_SETMASK, &oldmask, NULL) < 0)
Error("GetPseudoTTY(): sigprocmask(SIG_SETMASK): %s",
strerror(errno));
#else
# else
SimpleSignal(SIGCHLD, FlagReapVirt);
#endif
# endif
if (opty != 0) {
if (fd >= 0)
@ -84,15 +78,15 @@ GetPseudoTTY(slave, slaveFD)
*slaveFD = sfd;
return fd;
#else
#if (HAVE_PTSNAME && HAVE_GRANTPT && HAVE_UNLOCKPT) || defined(_AIX)
# if (HAVE_PTSNAME && HAVE_GRANTPT && HAVE_UNLOCKPT) || defined(_AIX)
int fd = -1;
int sfd = -1;
char *pcName;
#if HAVE_SIGACTION
# if HAVE_SIGACTION
sigset_t oldmask, newmask;
#else
extern RETSIGTYPE FlagReapVirt PARAMS((int));
#endif
# else
extern RETSIGTYPE FlagReapVirt(int);
# endif
int c;
/* clone list and idea stolen from xemacs distribution */
static char *clones[] = {
@ -111,48 +105,48 @@ GetPseudoTTY(slave, slaveFD)
if (fd < 0)
return -1;
#if HAVE_SIGACTION
# if HAVE_SIGACTION
sigemptyset(&newmask);
sigaddset(&newmask, SIGCHLD);
if (sigprocmask(SIG_BLOCK, &newmask, &oldmask) < 0)
Error("GetPseudoTTY(): sigprocmask(SIG_BLOCK): %s",
strerror(errno));
#else
# else
SimpleSignal(SIGCHLD, SIG_DFL);
#endif
# endif
#if HAVE_GRANTPT
# if HAVE_GRANTPT
grantpt(fd); /* change permission of slave */
#endif
# endif
#if HAVE_SIGACTION
# if HAVE_SIGACTION
if (sigprocmask(SIG_SETMASK, &oldmask, NULL) < 0)
Error("GetPseudoTTY(): sigprocmask(SIG_SETMASK): %s",
strerror(errno));
#else
# else
SimpleSignal(SIGCHLD, FlagReapVirt);
#endif
# endif
#if HAVE_UNLOCKPT
# if HAVE_UNLOCKPT
unlockpt(fd); /* unlock slave */
#endif
# endif
#if defined(_AIX)
# if defined(_AIX)
if ((pcName = ttyname(fd)) == (char *)0) {
close(fd);
return -1;
}
#else
# if HAVE_PTSNAME
# else
# if HAVE_PTSNAME
if ((pcName = ptsname(fd)) == (char *)0) {
close(fd);
return -1;
}
# else
# else
close(fd);
return -1;
# endif
#endif
# endif
# endif
/* go ahead and open the slave */
if ((sfd = open(pcName, O_RDWR, 0)) < 0) {
@ -166,7 +160,7 @@ GetPseudoTTY(slave, slaveFD)
*slaveFD = sfd;
return fd;
#else
# else
/*
* Below is the string for finding /dev/ptyXX. For each architecture we
* leave some pty's world writable because we don't have source for
@ -234,7 +228,7 @@ GetPseudoTTY(slave, slaveFD)
*slaveFD = sfd;
return fd;
#endif /* (HAVE_PTSNAME && HAVE_GRANTPT && HAVE_UNLOCKPT) || defined(_AIX) */
# endif /* (HAVE_PTSNAME && HAVE_GRANTPT && HAVE_UNLOCKPT) || defined(_AIX) */
#endif /* HAVE_OPENPTY */
}
@ -242,13 +236,7 @@ GetPseudoTTY(slave, slaveFD)
* get a pty using the GetPseudoTTY code above
*/
int
#if PROTOTYPES
FallBack(char **slave, int *sfd)
#else
FallBack(slave, sfd)
char **slave;
int *sfd;
#endif
{
int fd;
static STRING *pcTSlave = (STRING *)0;

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,5 @@
/*
* $Id: group.h,v 5.51 2013/09/23 23:17:42 bryan Exp $
* $Id: group.h,v 5.52 2014/04/20 06:45:07 bryan Exp $
*
* Copyright conserver.com, 2000
*
@ -64,25 +64,24 @@ typedef struct grpent { /* group info */
extern time_t timers[];
extern void Spawn PARAMS((GRPENT *, int));
extern int CheckPass PARAMS((char *, char *, FLAG));
extern void TagLogfile PARAMS((const CONSENT *, char *, ...));
extern void TagLogfileAct PARAMS((const CONSENT *, char *, ...));
extern void DestroyGroup PARAMS((GRPENT *));
extern void DestroyConsent PARAMS((GRPENT *, CONSENT *));
extern void SendClientsMsg PARAMS((CONSENT *, char *));
extern void ResetMark PARAMS((void));
extern void DestroyConsentUsers PARAMS((CONSENTUSERS **));
extern CONSENTUSERS *ConsentFindUser PARAMS((CONSENTUSERS *, char *));
extern int ConsentUserOk PARAMS((CONSENTUSERS *, char *));
extern void DisconnectClient
PARAMS((GRPENT *, CONSCLIENT *, char *, FLAG));
extern int ClientAccess PARAMS((CONSENT *, char *));
extern void DestroyClient PARAMS((CONSCLIENT *));
extern int CheckPasswd PARAMS((CONSCLIENT *, char *, FLAG));
extern void DeUtmp PARAMS((GRPENT *, int));
extern void ClientWantsWrite PARAMS((CONSCLIENT *));
extern void SendIWaitClientsMsg PARAMS((CONSENT *, char *));
extern void Spawn(GRPENT *, int);
extern int CheckPass(char *, char *, FLAG);
extern void TagLogfile(const CONSENT *, char *, ...);
extern void TagLogfileAct(const CONSENT *, char *, ...);
extern void DestroyGroup(GRPENT *);
extern void DestroyConsent(GRPENT *, CONSENT *);
extern void SendClientsMsg(CONSENT *, char *);
extern void ResetMark(void);
extern void DestroyConsentUsers(CONSENTUSERS **);
extern CONSENTUSERS *ConsentFindUser(CONSENTUSERS *, char *);
extern int ConsentUserOk(CONSENTUSERS *, char *);
extern void DisconnectClient(GRPENT *, CONSCLIENT *, char *, FLAG);
extern int ClientAccess(CONSENT *, char *);
extern void DestroyClient(CONSCLIENT *);
extern int CheckPasswd(CONSCLIENT *, char *, FLAG);
extern void DeUtmp(GRPENT *, int);
extern void ClientWantsWrite(CONSCLIENT *);
extern void SendIWaitClientsMsg(CONSENT *, char *);
#if HAVE_OPENSSL
extern int AttemptSSL PARAMS((CONSCLIENT *));
extern int AttemptSSL(CONSCLIENT *);
#endif

View File

@ -1,5 +1,5 @@
/*
* $Id: main.c,v 5.210 2014/04/04 16:17:10 bryan Exp $
* $Id: main.c,v 5.212 2014/04/20 06:45:07 bryan Exp $
*
* Copyright conserver.com, 2000
*
@ -54,9 +54,15 @@ int fAll = 0, fNoinit = 0, fVersion = 0, fStrip = 0, fReopen =
char *pcConfig = CONFIGFILE;
int cMaxMemb = MAXMEMB;
#if USE_IPV6
struct addrinfo *bindAddr;
struct addrinfo *bindBaseAddr;
#else
in_addr_t bindAddr = INADDR_ANY;
unsigned short bindPort;
unsigned short bindBasePort;
struct sockaddr_in in_port;
#endif
static STRING *startedMsg = (STRING *)0;
CONFIG *optConf = (CONFIG *)0;
CONFIG *config = (CONFIG *)0;
@ -73,7 +79,6 @@ CONFIG defConfig =
#endif
};
struct sockaddr_in in_port;
CONSFILE *unifiedlog = (CONSFILE *)0;
#if HAVE_DMALLOC && DMALLOC_MARK_MAIN
@ -89,11 +94,7 @@ DH *dh4096 = (DH *)0;
DH *
#if PROTOTYPES
GetDH512(void)
#else
GetDH512()
#endif
{
static unsigned char dh512_p[] = {
0xF5, 0x2A, 0xFF, 0x3C, 0xE1, 0xB1, 0x29, 0x40, 0x18, 0x11, 0x8D,
@ -121,11 +122,7 @@ GetDH512()
}
DH *
#if PROTOTYPES
GetDH1024(void)
#else
GetDH1024()
#endif
{
static unsigned char dh1024_p[] = {
0xF4, 0x88, 0xFD, 0x58, 0x4E, 0x49, 0xDB, 0xCD, 0x20, 0xB4, 0x9D,
@ -159,11 +156,7 @@ GetDH1024()
}
DH *
#if PROTOTYPES
GetDH2048(void)
#else
GetDH2048()
#endif
{
static unsigned char dh2048_p[] = {
0xF6, 0x42, 0x57, 0xB7, 0x08, 0x7F, 0x08, 0x17, 0x72, 0xA2, 0xBA,
@ -210,11 +203,7 @@ GetDH2048()
}
DH *
#if PROTOTYPES
GetDH4096(void)
#else
GetDH4096()
#endif
{
static unsigned char dh4096_p[] = {
0xFA, 0x14, 0x72, 0x52, 0xC1, 0x4D, 0xE1, 0x5A, 0x49, 0xD4, 0xEF,
@ -287,14 +276,7 @@ GetDH4096()
}
DH *
#if PROTOTYPES
TmpDHCallback(SSL *ssl, int is_export, int keylength)
#else
TmpDHCallback(ssl, is_export, keylength)
SSL *ssl;
int is_export;
int keylength;
#endif
{
CONDDEBUG((1, "TmpDHCallback(): asked for a DH key length %u",
keylength));
@ -319,11 +301,7 @@ TmpDHCallback(ssl, is_export, keylength)
}
void
#if PROTOTYPES
SetupSSL(void)
#else
SetupSSL()
#endif
{
if (ctx == (SSL_CTX *)0) {
char *ciphers;
@ -411,11 +389,7 @@ gss_name_t gss_myname = GSS_C_NO_NAME;
gss_cred_id_t gss_mycreds = GSS_C_NO_CREDENTIAL;
void
#if PROTOTYPES
SetupGSSAPI(void)
#else
SetupGSSAPI()
#endif
{
OM_uint32 stmaj, stmin;
char namestr[128];
@ -443,11 +417,7 @@ SetupGSSAPI()
#endif
void
#if PROTOTYPES
ReopenLogfile(void)
#else
ReopenLogfile()
#endif
{
static int tag = 1;
/* redirect stdout and stderr to the logfile.
@ -489,11 +459,7 @@ ReopenLogfile()
}
void
#if PROTOTYPES
ReopenUnifiedlog(void)
#else
ReopenUnifiedlog()
#endif
{
/* close any existing */
if (unifiedlog != (CONSFILE *)0)
@ -516,11 +482,7 @@ ReopenUnifiedlog()
/* become a daemon (ksb)
*/
static void
#if PROTOTYPES
Daemonize()
#else
Daemonize()
#endif
Daemonize(void)
{
int res;
#if !HAVE_SETSID
@ -581,12 +543,7 @@ Daemonize()
/* output a long message to the user (ksb)
*/
static void
#if PROTOTYPES
Usage(int wantfull)
#else
Usage(wantfull)
int wantfull;
#endif
{
static char u_terse[] =
"[-7dDEFhinoRSuvV] [-a type] [-m max] [-M master] [-p port] [-b port] [-c cred] [-C config] [-P passwd] [-L logfile] [-O min] [-U logfile]";
@ -645,11 +602,7 @@ Usage(wantfull)
/* show the user our version info (ksb)
*/
static void
#if PROTOTYPES
Version()
#else
Version()
#endif
Version(void)
{
static STRING *acA1 = (STRING *)0;
static STRING *acA2 = (STRING *)0;
@ -723,12 +676,12 @@ Version()
BuildStringChar('0' + DMALLOC_VERSION_MINOR, acA1);
BuildStringChar('.', acA1);
BuildStringChar('0' + DMALLOC_VERSION_PATCH, acA1);
#if defined(DMALLOC_VERSION_BETA)
# if defined(DMALLOC_VERSION_BETA)
if (DMALLOC_VERSION_BETA != 0) {
BuildString("-b", acA1);
BuildStringChar('0' + DMALLOC_VERSION_BETA, acA1);
}
#endif
# endif
Msg("dmalloc version: %s", acA1->string);
#endif
#if HAVE_FREEIPMI
@ -751,11 +704,7 @@ Version()
}
void
#if PROTOTYPES
DestroyDataStructures(void)
#else
DestroyDataStructures()
#endif
{
GRPENT *pGE;
REMOTE *pRC;
@ -798,8 +747,14 @@ DestroyDataStructures()
DH_free(dh4096);
#endif
#if USE_IPV6
/* clean up addrinfo stucts */
freeaddrinfo(bindAddr);
freeaddrinfo(bindBaseAddr);
#else
if (myAddrs != (struct in_addr *)0)
free(myAddrs);
#endif
DestroyBreakList();
DestroyTaskList();
@ -810,11 +765,7 @@ DestroyDataStructures()
}
void
#if PROTOTYPES
SummarizeDataStructures(void)
#else
SummarizeDataStructures()
#endif
{
GRPENT *pGE;
REMOTE *pRC;
@ -943,11 +894,7 @@ SummarizeDataStructures()
}
void
#if PROTOTYPES
DumpDataStructures(void)
#else
DumpDataStructures()
#endif
{
GRPENT *pGE;
CONSENT *pCE;
@ -1149,17 +1096,14 @@ DumpDataStructures()
*/
#if USE_UNIX_DOMAIN_SOCKETS
int
#if PROTOTYPES
VerifyEmptyDirectory(char *d)
#else
VerifyEmptyDirectory(d)
char *d;
#endif
{
struct stat dstat;
DIR *dir;
struct dirent *de;
# if 0 /* See below */
STRING *path = (STRING *)0;
# endif
int retval = 0;
while (1) {
@ -1200,7 +1144,7 @@ VerifyEmptyDirectory(d)
* database, config files, etc. too many important files could be
* shredded with a small typo.
*/
#if 0
# if 0
if (path == (STRING *)0)
path = AllocString();
BuildStringPrint(path, "%s/%s", d, de->d_name);
@ -1222,11 +1166,16 @@ VerifyEmptyDirectory(d)
break;
}
}
#endif
# endif
}
# if 0 /* See above */
if (path != (STRING *)0)
DestroyString(path);
# endif
/* free dir data structure */
closedir(dir);
return retval;
}
@ -1241,13 +1190,7 @@ VerifyEmptyDirectory(d)
* exit happy
*/
int
#if PROTOTYPES
main(int argc, char **argv)
#else
main(argc, argv)
int argc;
char **argv;
#endif
{
int i;
FILE *fpConfig = (FILE *)0;
@ -1260,9 +1203,14 @@ main(argc, argv)
int curuid = 0;
GRPENT *pGE = (GRPENT *)0;
#if !USE_UNIX_DOMAIN_SOCKETS
#if HAVE_INET_ATON
# if USE_IPV6
int s;
struct addrinfo hints;
# else
# if HAVE_INET_ATON
struct in_addr inetaddr;
#endif
# endif
# endif
#endif
isMultiProc = 1; /* make sure stuff has the pid */
@ -1460,7 +1408,115 @@ main(argc, argv)
if (fSyntaxOnly)
Msg("performing configuration file syntax check");
#if USE_UNIX_DOMAIN_SOCKETS
/* must do all this so IsMe() works right */
if (gethostname(myHostname, MAXHOSTNAME) != 0) {
Error("gethostname(): %s", strerror(errno));
Bye(EX_OSERR);
}
#if !USE_IPV6
ProbeInterfaces(bindAddr);
#endif
/* initialize the timers */
for (i = 0; i < T_MAX; i++)
timers[i] = (time_t)0;
/* read the config file */
if ((FILE *)0 == (fpConfig = fopen(pcConfig, "r"))) {
Error("fopen(%s): %s", pcConfig, strerror(errno));
Bye(EX_NOINPUT);
}
ReadCfg(pcConfig, fpConfig);
fclose(fpConfig);
#if !USE_UNIX_DOMAIN_SOCKETS
/* set up the port to bind to */
if (optConf->primaryport != (char *)0)
config->primaryport = StrDup(optConf->primaryport);
else if (pConfig->primaryport != (char *)0)
config->primaryport = StrDup(pConfig->primaryport);
else
config->primaryport = StrDup(defConfig.primaryport);
if (config->primaryport == (char *)0)
OutOfMem();
# if !USE_IPV6
/* Look for non-numeric characters */
for (i = 0; config->primaryport[i] != '\000'; i++)
if (!isdigit((int)config->primaryport[i]))
break;
if (config->primaryport[i] == '\000') {
/* numeric only */
bindPort = atoi(config->primaryport);
} else {
/* non-numeric only */
struct servent *pSE;
if ((struct servent *)0 ==
(pSE = getservbyname(config->primaryport, "tcp"))) {
Error("getservbyname(%s) failed", config->primaryport);
Bye(EX_OSERR);
} else {
bindPort = ntohs((unsigned short)pSE->s_port);
}
}
# endif
/* set up the secondary port to bind to */
if (optConf->secondaryport != (char *)0)
config->secondaryport = StrDup(optConf->secondaryport);
else if (pConfig->secondaryport != (char *)0)
config->secondaryport = StrDup(pConfig->secondaryport);
else
config->secondaryport = StrDup(defConfig.secondaryport);
if (config->secondaryport == (char *)0)
OutOfMem();
# if !USE_IPV6
/* Look for non-numeric characters */
for (i = 0; config->secondaryport[i] != '\000'; i++)
if (!isdigit((int)config->secondaryport[i]))
break;
if (config->secondaryport[i] == '\000') {
/* numeric only */
bindBasePort = atoi(config->secondaryport);
} else {
/* non-numeric only */
struct servent *pSE;
if ((struct servent *)0 ==
(pSE = getservbyname(config->secondaryport, "tcp"))) {
Error("getservbyname(%s) failed", config->secondaryport);
Bye(EX_OSERR);
} else {
bindBasePort = ntohs((unsigned short)pSE->s_port);
}
}
# endif
#endif
#if USE_IPV6
/* set up the address to bind to */
memset(&hints, 0, sizeof(hints));
hints.ai_family = AF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;
hints.ai_flags |= AI_PASSIVE;
/* create list or IPs suitable for primaryport */
s = getaddrinfo(interface, config->primaryport, &hints, &bindAddr);
if (s) {
Error("getaddrinfo(%s): %s", interface, gai_strerror(s));
Bye(EX_OSERR);
}
/* create list or IPs suitable for secondaryport */
s = getaddrinfo(interface, config->secondaryport, &hints,
&bindBaseAddr);
if (s) {
Error("getaddrinfo(%s): %s", interface, gai_strerror(s));
Bye(EX_OSERR);
}
#elif USE_UNIX_DOMAIN_SOCKETS
/* Don't do any redirects if we're purely local
* (but it allows them to see where remote consoles are)
*/
@ -1494,87 +1550,6 @@ main(argc, argv)
}
#endif
/* must do all this so IsMe() works right */
if (gethostname(myHostname, MAXHOSTNAME) != 0) {
Error("gethostname(): %s", strerror(errno));
Bye(EX_OSERR);
}
ProbeInterfaces(bindAddr);
/* initialize the timers */
for (i = 0; i < T_MAX; i++)
timers[i] = (time_t)0;
/* read the config file */
if ((FILE *)0 == (fpConfig = fopen(pcConfig, "r"))) {
Error("fopen(%s): %s", pcConfig, strerror(errno));
Bye(EX_NOINPUT);
}
ReadCfg(pcConfig, fpConfig);
fclose(fpConfig);
#if !USE_UNIX_DOMAIN_SOCKETS
/* set up the port to bind to */
if (optConf->primaryport != (char *)0)
config->primaryport = StrDup(optConf->primaryport);
else if (pConfig->primaryport != (char *)0)
config->primaryport = StrDup(pConfig->primaryport);
else
config->primaryport = StrDup(defConfig.primaryport);
if (config->primaryport == (char *)0)
OutOfMem();
/* Look for non-numeric characters */
for (i = 0; config->primaryport[i] != '\000'; i++)
if (!isdigit((int)config->primaryport[i]))
break;
if (config->primaryport[i] == '\000') {
/* numeric only */
bindPort = atoi(config->primaryport);
} else {
/* non-numeric only */
struct servent *pSE;
if ((struct servent *)0 ==
(pSE = getservbyname(config->primaryport, "tcp"))) {
Error("getservbyname(%s) failed", config->primaryport);
Bye(EX_OSERR);
} else {
bindPort = ntohs((unsigned short)pSE->s_port);
}
}
/* set up the secondary port to bind to */
if (optConf->secondaryport != (char *)0)
config->secondaryport = StrDup(optConf->secondaryport);
else if (pConfig->secondaryport != (char *)0)
config->secondaryport = StrDup(pConfig->secondaryport);
else
config->secondaryport = StrDup(defConfig.secondaryport);
if (config->secondaryport == (char *)0)
OutOfMem();
/* Look for non-numeric characters */
for (i = 0; config->secondaryport[i] != '\000'; i++)
if (!isdigit((int)config->secondaryport[i]))
break;
if (config->secondaryport[i] == '\000') {
/* numeric only */
bindBasePort = atoi(config->secondaryport);
} else {
/* non-numeric only */
struct servent *pSE;
if ((struct servent *)0 ==
(pSE = getservbyname(config->secondaryport, "tcp"))) {
Error("getservbyname(%s) failed", config->secondaryport);
Bye(EX_OSERR);
} else {
bindBasePort = ntohs((unsigned short)pSE->s_port);
}
}
#endif
if (optConf->passwdfile != (char *)0)
config->passwdfile = StrDup(optConf->passwdfile);
else if (pConfig->passwdfile != (char *)0)
@ -1727,7 +1702,11 @@ main(argc, argv)
/* if no one can use us we need to come up with a default
*/
if (pACList == (ACCESS *)0)
#if USE_IPV6
SetDefAccess();
#else
SetDefAccess(myAddrs, myHostname);
#endif
/* spawn all the children, so fix kids has an initial pid
*/
@ -1749,13 +1728,15 @@ main(argc, argv)
local += pGE->imembers;
for (pRC = pRCList; (REMOTE *)0 != pRC; pRC = pRC->pRCnext)
remote++;
# if USE_UNIX_DOMAIN_SOCKETS
setproctitle("master: port 0, %d local, %d remote", local,
remote);
#else
setproctitle("master: port %hu, %d local, %d remote", bindPort,
setproctitle("master: port %hu, %d local, %d remote",
# if USE_IPV6
config->primaryport,
# elif USE_UNIX_DOMAIN_SOCKETS
0,
# else
bindPort,
# endif
local, remote);
#endif
}
#endif

View File

@ -1,5 +1,5 @@
/*
* $Id: main.h,v 5.54 2009/09/26 09:23:04 bryan Exp $
* $Id: main.h,v 5.55 2014/04/20 06:45:07 bryan Exp $
*
* Copyright conserver.com, 2000
*
@ -39,11 +39,16 @@
extern char rcsid[];
extern int fAll, fNoinit, fInteractive, fStrip, fDaemon, fReopen,
fNoautoreup, fSyntaxOnly;
#if USE_IPV6
extern struct addrinfo *bindAddr;
extern struct addrinfo *bindBaseAddr;
#else
extern in_addr_t bindAddr;
extern struct sockaddr_in in_port;
#endif
extern unsigned short bindPort, bindBasePort;
extern char *pcConfig;
extern int cMaxMemb;
extern struct sockaddr_in in_port;
extern CONFIG *optConf;
extern CONFIG *config;
extern CONFIG defConfig;
@ -58,6 +63,6 @@ extern SSL_CTX *ctx;
extern gss_name_t gss_myname;
extern gss_cred_id_t gss_mycreds;
#endif
extern void ReopenLogfile PARAMS((void));
extern void ReopenUnifiedlog PARAMS((void));
extern void DumpDataStructures PARAMS((void));
extern void ReopenLogfile(void);
extern void ReopenUnifiedlog(void);
extern void DumpDataStructures(void);

View File

@ -1,5 +1,5 @@
/*
* $Id: master.c,v 5.139 2013/09/23 23:17:42 bryan Exp $
* $Id: master.c,v 5.141 2014/04/20 06:45:07 bryan Exp $
*
* Copyright conserver.com, 2000
*
@ -49,12 +49,7 @@ static unsigned long dmallocMarkClientConnection = 0;
static RETSIGTYPE
#if PROTOTYPES
FlagSawCHLD(int sig)
#else
FlagSawCHLD(sig)
int sig;
#endif
{
fSawCHLD = 1;
#if !HAVE_SIGACTION
@ -66,12 +61,7 @@ FlagSawCHLD(sig)
* Called when master process receives SIGCHLD
*/
static void
#if PROTOTYPES
FixKids(int msfd)
#else
FixKids(msfd)
int msfd;
#endif
{
pid_t pid;
int UWbuf;
@ -135,12 +125,7 @@ FixKids(msfd)
* Called when master process receives SIGTERM
*/
static RETSIGTYPE
#if PROTOTYPES
FlagQuitIt(int arg)
#else
FlagQuitIt(arg)
int arg;
#endif
{
fSawQuit = 1;
#if !HAVE_SIGACTION
@ -152,12 +137,7 @@ FlagQuitIt(arg)
* want to do something special on SIGINT at some point.
*/
static RETSIGTYPE
#if PROTOTYPES
FlagSawINT(int arg)
#else
FlagSawINT(arg)
int arg;
#endif
{
fSawQuit = 1;
#if !HAVE_SIGACTION
@ -166,12 +146,7 @@ FlagSawINT(arg)
}
static RETSIGTYPE
#if PROTOTYPES
FlagSawHUP(int arg)
#else
FlagSawHUP(arg)
int arg;
#endif
{
fSawHUP = 1;
#if !HAVE_SIGACTION
@ -180,12 +155,7 @@ FlagSawHUP(arg)
}
static RETSIGTYPE
#if PROTOTYPES
FlagSawUSR2(int arg)
#else
FlagSawUSR2(arg)
int arg;
#endif
{
fSawUSR2 = 1;
#if !HAVE_SIGACTION
@ -194,12 +164,7 @@ FlagSawUSR2(arg)
}
static RETSIGTYPE
#if PROTOTYPES
FlagSawUSR1(int arg)
#else
FlagSawUSR1(arg)
int arg;
#endif
{
fSawUSR1 = 1;
#if !HAVE_SIGACTION
@ -210,12 +175,7 @@ FlagSawUSR1(arg)
/* Signal all the kids...
*/
void
#if PROTOTYPES
SignalKids(int arg)
#else
SignalKids(arg)
int arg;
#endif
{
GRPENT *pGE;
@ -232,12 +192,7 @@ SignalKids(arg)
}
REMOTE *
#if PROTOTYPES
FindRemoteConsole(char *args)
#else
FindRemoteConsole(args)
char *args;
#endif
{
REMOTE *pRC;
NAMES *name;
@ -254,13 +209,7 @@ FindRemoteConsole(args)
}
void
#if PROTOTYPES
CommandCall(CONSCLIENT *pCL, char *args)
#else
CommandCall(pCL, args)
CONSCLIENT *pCL;
char *args;
#endif
{
int found;
REMOTE *pRC, *pRCFound;
@ -383,13 +332,7 @@ CommandCall(pCL, args)
}
void
#if PROTOTYPES
DropMasterClient(CONSCLIENT *pCLServing, FLAG force)
#else
DropMasterClient(pCLServing, force)
CONSCLIENT *pCLServing;
FLAG force;
#endif
{
/* if we have data buffered and aren't forced to close,
* we can't close quite yet
@ -425,12 +368,7 @@ DropMasterClient(pCLServing, force)
}
void
#if PROTOTYPES
DoNormalRead(CONSCLIENT *pCLServing)
#else
DoNormalRead(pCLServing)
CONSCLIENT *pCLServing;
#endif
{
char *pcCmd;
char *pcArgs;
@ -586,11 +524,9 @@ DoNormalRead(pCLServing)
int iSep = 1;
if ((GRPENT *)0 != pGroups) {
#if USE_UNIX_DOMAIN_SOCKETS
FilePrint(pCLServing->fd, FLAGTRUE, "@0");
iSep = 0;
#else
struct sockaddr_in lcl;
#if USE_IPV6 || !USE_UNIX_DOMAIN_SOCKETS
SOCKADDR_STYPE lcl;
socklen_t so = sizeof(lcl);
if (-1 ==
getsockname(FileFDNum(pCLServing->fd),
@ -602,10 +538,25 @@ DoNormalRead(pCLServing)
FileFDNum(pCLServing->fd), strerror(errno));
iSep = -1;
} else {
# if USE_IPV6
int error;
char addr[NI_MAXHOST];
error =
getnameinfo((struct sockaddr *)&lcl, so, addr,
sizeof(addr), NULL, 0,
NI_NUMERICHOST);
if (!error)
FilePrint(pCLServing->fd, FLAGTRUE, "@%s",
addr);
# else
FilePrint(pCLServing->fd, FLAGTRUE, "@%s",
inet_ntoa(lcl.sin_addr));
# endif
iSep = 0;
}
#else
FilePrint(pCLServing->fd, FLAGTRUE, "@0");
iSep = 0;
#endif
}
if (iSep >= 0) {
@ -723,24 +674,24 @@ DoNormalRead(pCLServing)
/* this routine is used by the master console server process (ksb)
*/
void
#if PROTOTYPES
Master(void)
#else
Master()
#endif
{
int cfd;
int msfd;
socklen_t so;
fd_set rmask, wmask;
#if USE_UNIX_DOMAIN_SOCKETS
struct sockaddr_un master_port;
static STRING *portPath = (STRING *)0;
#else
#if USE_IPV6 || !USE_UNIX_DOMAIN_SOCKETS
# if USE_IPV6
struct addrinfo *rp;
# else
struct sockaddr_in master_port;
# endif
# if HAVE_SETSOCKOPT
int true = 1;
# endif
#else
struct sockaddr_un master_port;
static STRING *portPath = (STRING *)0;
#endif
FILE *fp;
CONSCLIENT *pCLServing = (CONSCLIENT *)0;
@ -780,13 +731,44 @@ Master()
/* set up port for master to listen on
*/
#if HAVE_MEMSET
#if !USE_IPV6
# if HAVE_MEMSET
memset((void *)&master_port, 0, sizeof(master_port));
#else
# else
bzero((char *)&master_port, sizeof(master_port));
# endif
#endif
#if USE_UNIX_DOMAIN_SOCKETS
#if USE_IPV6
for (rp = bindAddr; rp != NULL; rp = rp->ai_next) {
if ((msfd =
socket(rp->ai_family, rp->ai_socktype, rp->ai_protocol)) < 0)
continue;
# if HAVE_SETSOCKOPT
if (setsockopt
(msfd, SOL_SOCKET, SO_REUSEADDR, (char *)&true,
sizeof(true)) < 0)
goto fail;
# endif
if (!SetFlags(msfd, O_NONBLOCK, 0))
goto fail;
if (bind(msfd, rp->ai_addr, rp->ai_addrlen) == 0)
break;
fail:
close(msfd);
}
if (listen(msfd, SOMAXCONN) < 0) {
Error("Master(): listen(): %s", strerror(errno));
return;
}
/* save addrlen for accept */
so = rp->ai_addrlen;
#elif USE_UNIX_DOMAIN_SOCKETS
master_port.sun_family = AF_UNIX;
if (portPath == (STRING *)0)
@ -819,6 +801,11 @@ Master()
strerror(errno));
return;
}
# ifdef TRUST_UDS_CRED
/* Allow everyone to connect, but we later auth them via SO_PEERCRED */
chmod(master_port.sun_path, 0666);
# endif
#else
master_port.sin_family = AF_INET;
master_port.sin_addr.s_addr = bindAddr;
@ -985,7 +972,9 @@ Master()
dmallocMarkClientConnection = dmalloc_mark();
#endif
#if !USE_IPV6
so = sizeof(struct sockaddr_in);
#endif
for (cfd = 0; cfd == 0;) {
cfd =
accept(msfd, (struct sockaddr *)&pCLmfree->cnct_port, &so);

View File

@ -1,5 +1,5 @@
/*
* $Id: master.h,v 5.17 2003/10/03 14:23:37 bryan Exp $
* $Id: master.h,v 5.18 2014/04/20 06:45:07 bryan Exp $
*
* Copyright conserver.com, 2000
*
@ -39,5 +39,5 @@
*/
extern CONSCLIENT *pCLmall;
extern CONSCLIENT *pCLmfree;
extern void Master PARAMS((void));
extern void SignalKids PARAMS((int));
extern void Master(void);
extern void SignalKids(int);

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,5 @@
/*
* $Id: readcfg.h,v 5.49 2013/09/23 22:58:21 bryan Exp $
* $Id: readcfg.h,v 5.50 2014/04/20 06:45:07 bryan Exp $
*
* Copyright conserver.com, 2000
*
@ -63,12 +63,12 @@ extern SUBST *taskSubst; /* substitution function data for tasks */
extern CONFIG *pConfig; /* settings seen by config parser */
extern SUBST *substData; /* substitution function data */
extern void ReadCfg PARAMS((char *, FILE *));
extern void ReReadCfg PARAMS((int, int));
extern void DestroyBreakList PARAMS((void));
extern void DestroyTaskList PARAMS((void));
extern void DestroyUserList PARAMS((void));
extern void DestroyConfig PARAMS((CONFIG *));
extern NAMES *FindUserList PARAMS((char *));
extern NAMES *AddUserList PARAMS((char *));
extern CONSENT *FindConsoleName PARAMS((CONSENT *, char *));
extern void ReadCfg(char *, FILE *);
extern void ReReadCfg(int, int);
extern void DestroyBreakList(void);
extern void DestroyTaskList(void);
extern void DestroyUserList(void);
extern void DestroyConfig(CONFIG *);
extern NAMES *FindUserList(char *);
extern NAMES *AddUserList(char *);
extern CONSENT *FindConsoleName(CONSENT *, char *);

View File

@ -1,5 +1,5 @@
/*
* $Id: version.h,v 1.79 2014/04/02 04:45:32 bryan Exp $
* $Id: version.h,v 1.81 2014/04/20 06:45:07 bryan Exp $
*
* Copyright conserver.com, 2000
*
@ -15,7 +15,7 @@
All rights reserved.\n"
#define VERSION_MAJOR 8
#define VERSION_MINOR 1
#define VERSION_REV 20
#define VERSION_MINOR 2
#define VERSION_REV 0
#define VERSION_TEXT "conserver.com version"
#define VERSION_UINT (VERSION_MAJOR * 1000000 + VERSION_MINOR * 1000 + VERSION_REV)

View File

@ -1,5 +1,5 @@
/*
* $Id: console.c,v 5.189 2014/04/02 00:02:47 bryan Exp $
* $Id: console.c,v 5.190 2014/04/20 06:45:07 bryan Exp $
*
* Copyright conserver.com, 2000
*
@ -36,12 +36,16 @@
#include <readconf.h>
#include <version.h>
#if HAVE_OPENSSL
#include <openssl/ssl.h>
#include <openssl/err.h>
#include <openssl/opensslv.h>
# include <openssl/ssl.h>
# include <openssl/err.h>
# include <openssl/opensslv.h>
#endif
#if HAVE_GSSAPI
#include <gssapi/gssapi.h>
# include <gssapi/gssapi.h>
#endif
#if USE_IPV6
# include <sys/socket.h>
# include <netdb.h>
#endif
@ -70,11 +74,7 @@ struct winsize ws;
SSL_CTX *ctx = (SSL_CTX *)0;
void
#if PROTOTYPES
SetupSSL(void)
#else
SetupSSL()
#endif
{
if (ctx == (SSL_CTX *)0) {
char *ciphers;
@ -120,11 +120,11 @@ SetupSSL()
}
ciphers = "ALL:!LOW:!EXP:!MD5:!aNULL:@STRENGTH";
} else {
#if defined(REQ_SERVER_CERT)
# if defined(REQ_SERVER_CERT)
ciphers = "ALL:!LOW:!EXP:!MD5:!aNULL:@STRENGTH";
#else
# else
ciphers = "ALL:!LOW:!EXP:!MD5:@STRENGTH";
#endif
# endif
}
SSL_CTX_set_verify(ctx, SSL_VERIFY_PEER, SSLVerifyCallback);
SSL_CTX_set_options(ctx,
@ -142,12 +142,7 @@ SetupSSL()
}
void
#if PROTOTYPES
AttemptSSL(CONSFILE *pcf)
#else
AttemptSSL(pcf)
CONSFILE *pcf;
#endif
{
SSL *ssl;
@ -179,12 +174,7 @@ gss_ctx_id_t secctx = GSS_C_NO_CONTEXT;
gss_buffer_desc mytok = GSS_C_EMPTY_BUFFER;
int
#if PROTOTYPES
CanGetGSSContext(const char *servername)
#else
CanGetGSSContext(servername)
const char *servername;
#endif
{
char namestr[128];
gss_buffer_desc namebuf, dbuf;
@ -220,12 +210,7 @@ CanGetGSSContext(servername)
}
int
#if PROTOTYPES
AttemptGSSAPI(CONSFILE *pcf)
#else
AttemptGSSAPI(pcf)
CONSFILE *pcf;
#endif
{
OM_uint32 stmaj, stmin;
gss_buffer_desc servertok;
@ -257,13 +242,7 @@ AttemptGSSAPI(pcf)
/* output a control (or plain) character as a UNIX user would expect it (ksb)
*/
static void
#if PROTOTYPES
PutCtlc(int c, FILE *fp)
#else
PutCtlc(c, fp)
int c;
FILE *fp;
#endif
{
if (0 != (0200 & c)) {
putc('M', fp);
@ -285,12 +264,7 @@ PutCtlc(c, fp)
/* output a long message to the user
*/
static void
#if PROTOTYPES
Usage(int wantfull)
#else
Usage(wantfull)
int wantfull;
#endif
{
static char *full[] = {
"7 strip the high bit off all console data",
@ -354,11 +328,7 @@ Usage(wantfull)
/* expain who we are and which revision we are (ksb)
*/
static void
#if PROTOTYPES
Version()
#else
Version()
#endif
Version(void)
{
int i;
static STRING *acA1 = (STRING *)0;
@ -418,12 +388,12 @@ Version()
BuildStringChar('0' + DMALLOC_VERSION_MINOR, acA1);
BuildStringChar('.', acA1);
BuildStringChar('0' + DMALLOC_VERSION_PATCH, acA1);
#if defined(DMALLOC_VERSION_BETA)
# if defined(DMALLOC_VERSION_BETA)
if (DMALLOC_VERSION_BETA != 0) {
BuildString("-b", acA1);
BuildStringChar('0' + DMALLOC_VERSION_BETA, acA1);
}
#endif
# endif
Msg("dmalloc version: %s", acA1->string);
#endif
#if HAVE_OPENSSL
@ -441,12 +411,7 @@ Version()
* c a plain character
*/
static int
#if PROTOTYPES
ParseChar(char **ppcSrc, char *pcOut)
#else
ParseChar(ppcSrc, pcOut)
char **ppcSrc, *pcOut;
#endif
{
int cvt, n;
char *pcScan = *ppcSrc;
@ -490,11 +455,7 @@ ParseChar(ppcSrc, pcOut)
/*
*/
static void
#if PROTOTYPES
ValidateEsc()
#else
ValidateEsc()
#endif
ValidateEsc(void)
{
unsigned char c1, c2;
@ -517,12 +478,7 @@ ValidateEsc()
/* find the two characters that makeup the users escape sequence (ksb)
*/
static void
#if PROTOTYPES
ParseEsc(char *pcText)
#else
ParseEsc(pcText)
char *pcText;
#endif
{
char *pcTemp;
char c1, c2;
@ -547,16 +503,15 @@ ParseEsc(pcText)
* as a side effect we set ThisHost to a short name for this host
*/
CONSFILE *
#if PROTOTYPES
GetPort(char *pcToHost, unsigned short sPort)
#else
GetPort(pcToHost, sPort)
char *pcToHost;
unsigned short sPort;
#endif
{
int s;
#if USE_UNIX_DOMAIN_SOCKETS
#if USE_IPV6
int error;
char host[NI_MAXHOST];
char serv[NI_MAXSERV];
struct addrinfo *ai, *rp, hints;
#elif USE_UNIX_DOMAIN_SOCKETS
struct sockaddr_un port;
static STRING *portPath = (STRING *)0;
#else
@ -564,13 +519,59 @@ GetPort(pcToHost, sPort)
struct sockaddr_in port;
#endif
#if HAVE_MEMSET
memset((void *)(&port), '\000', sizeof(port));
#if USE_IPV6
# if HAVE_MEMSET
memset(&hints, 0, sizeof(hints));
# else
bzero(&hints, sizeof(hints));
# endif
#else
# if HAVE_MEMSET
memset((void *)(&port), '\000', sizeof(port));
# else
bzero((char *)(&port), sizeof(port));
# endif
#endif
#if USE_UNIX_DOMAIN_SOCKETS
#if USE_IPV6
hints.ai_flags = AI_ADDRCONFIG;
hints.ai_socktype = SOCK_STREAM;
snprintf(serv, sizeof(serv), "%hu", sPort);
error = getaddrinfo(pcToHost, serv, &hints, &ai);
if (error) {
Error("getaddrinfo(%s): %s", pcToHost, gai_strerror(error));
return (CONSFILE *)0;
}
rp = ai;
while (rp) {
error =
getnameinfo(rp->ai_addr, rp->ai_addrlen, host, sizeof(host),
serv, sizeof(serv),
NI_NUMERICHOST | NI_NUMERICSERV);
if (error) {
continue;
}
CONDDEBUG((1, "GetPort: hostname=%s, ip=%s, port=%s", pcToHost,
host, serv));
/* set up the socket to talk to the server for all consoles
* (it will tell us who to talk to to get a real connection)
*/
s = socket(rp->ai_family, rp->ai_socktype, rp->ai_protocol);
if (s != -1) {
if (connect(s, rp->ai_addr, rp->ai_addrlen) == 0)
goto success;
close(s);
}
rp = rp->ai_next;
}
Error("Unable to connect to %s:%s", host, serv);
return (CONSFILE *)0;
success:
freeaddrinfo(ai);
#elif USE_UNIX_DOMAIN_SOCKETS
if (portPath == (STRING *)0)
portPath = AllocString();
BuildStringPrint(portPath, "%s/%hu", config->master, sPort);
@ -663,11 +664,7 @@ static struct termios o_tios;
* we really use cbreak at PUCC because we need even parity...
*/
static void
#if PROTOTYPES
C2Raw()
#else
C2Raw()
#endif
C2Raw(void)
{
struct termios n_tios;
@ -695,11 +692,7 @@ C2Raw()
* put the tty back as it was, however that was
*/
static void
#if PROTOTYPES
C2Cooked()
#else
C2Cooked()
#endif
C2Cooked(void)
{
if (!screwy)
return;
@ -708,11 +701,7 @@ C2Cooked()
}
void
#if PROTOTYPES
DestroyDataStructures(void)
#else
DestroyDataStructures()
#endif
{
C2Cooked();
if (cfstdout != (CONSFILE *)0)
@ -721,21 +710,17 @@ DestroyDataStructures()
DestroyConfig(optConf);
DestroyConfig(config);
DestroyTerminal(pTerm);
#if !USE_IPV6
if (myAddrs != (struct in_addr *)0)
free(myAddrs);
#endif
DestroyStrings();
if (substData != (SUBST *)0)
free(substData);
}
char *
#if PROTOTYPES
ReadReply(CONSFILE *fd, FLAG toEOF)
#else
ReadReply(fd, toEOF)
CONSFILE *fd;
FLAG toEOF;
#endif
{
int nr;
static char buf[1024];
@ -787,11 +772,7 @@ ReadReply(fd, toEOF)
}
static void
#if PROTOTYPES
ReapVirt(void)
#else
ReapVirt()
#endif
{
pid_t pid;
int UWbuf;
@ -832,12 +813,7 @@ static sig_atomic_t fSawReapVirt = 0;
static
#endif
RETSIGTYPE
#if PROTOTYPES
FlagReapVirt(int sig)
#else
FlagReapVirt(sig)
int sig;
#endif
{
fSawReapVirt = 1;
#if !HAVE_SIGACTION
@ -847,11 +823,7 @@ FlagReapVirt(sig)
/* invoke the execcmd command */
void
#if PROTOTYPES
ExecCmd(void)
#else
ExecCmd()
#endif
{
int i;
pid_t iNewGrp;
@ -929,15 +901,15 @@ ExecCmd()
close(1);
close(0);
# if HAVE_SETSID
#if HAVE_SETSID
iNewGrp = setsid();
if (-1 == iNewGrp) {
Error("ExecCmd(): setsid(): %s", strerror(errno));
iNewGrp = thepid;
}
# else
#else
iNewGrp = thepid;
# endif
#endif
if (dup(pout[0]) != 0 || dup(pin[1]) != 1) {
Error("ExecCmd(): fd sync error");
@ -957,12 +929,7 @@ ExecCmd()
}
void
#if PROTOTYPES
GetUserInput(STRING *str)
#else
GetUserInput(str)
STRING *str;
#endif
{
char c;
@ -1008,12 +975,7 @@ GetUserInput(str)
}
void
#if PROTOTYPES
DoExec(CONSFILE *pcf)
#else
DoExec(pcf)
CONSFILE *pcf;
#endif
{
showExecData = 1;
FileWrite(cfstdout, FLAGFALSE, "exec: ", 6);
@ -1063,13 +1025,7 @@ DoExec(pcf)
}
void
#if PROTOTYPES
ExpandString(char *str, CONSFILE *c)
#else
ExpandString(str, c)
char *str;
CONSFILE *c;
#endif
{
char s;
short backslash = 0;
@ -1159,15 +1115,7 @@ ExpandString(str, c)
}
void
#if PROTOTYPES
PrintSubst(CONSFILE *pcf, char *pcMach, char *string, char *subst)
#else
PrintSubst(pcf, pcMach, string, subst)
CONSFILE *pcf;
char *pcMach;
char *string;
char *subst;
#endif
{
if (string == (char *)0)
return;
@ -1186,13 +1134,7 @@ PrintSubst(pcf, pcMach, string, subst)
}
void
#if PROTOTYPES
Interact(CONSFILE *pcf, char *pcMach)
#else
Interact(pcf, pcMach)
CONSFILE *pcf;
char *pcMach;
#endif
{
int i;
int nc;
@ -1415,14 +1357,8 @@ Interact(pcf, pcMach)
/* interact with a group server (ksb)
*/
void
#if PROTOTYPES
CallUp(CONSFILE *pcf, char *pcMaster, char *pcMach, char *pcHow,
char *result)
#else
CallUp(pcf, pcMaster, pcMach, pcHow, result)
CONSFILE *pcf;
char *pcMaster, *pcMach, *pcHow, *result;
#endif
{
int fIn = '-';
char *r = (char *)0;
@ -1606,14 +1542,7 @@ char *cmdarg = (char *)0;
* and ask the machine master at pop.stat for more group leaders
*/
int
#if PROTOTYPES
DoCmds(char *master, char *pports, int cmdi)
#else
DoCmds(master, pports, cmdi)
char *master;
char *pports;
int cmdi;
#endif
{
CONSFILE *pcf;
char *t;
@ -1657,7 +1586,9 @@ DoCmds(master, pports, cmdi)
#endif
if (*ports == '\000') {
#if USE_UNIX_DOMAIN_SOCKETS
#if USE_IPV6
port = bindPort;
#elif USE_UNIX_DOMAIN_SOCKETS
port = 0;
#else
port = htons(bindPort);
@ -1666,7 +1597,9 @@ DoCmds(master, pports, cmdi)
Error("invalid port spec for %s: `%s'", serverName, ports);
continue;
} else {
#if USE_UNIX_DOMAIN_SOCKETS
#if USE_IPV6
port = (short)atoi(ports);
#elif USE_UNIX_DOMAIN_SOCKETS
port = (short)atoi(ports);
#else
port = htons((short)atoi(ports));
@ -1933,13 +1866,7 @@ DoCmds(master, pports, cmdi)
* exit happy or sad
*/
int
#if PROTOTYPES
main(int argc, char **argv)
#else
main(argc, argv)
int argc;
char **argv;
#endif
{
char *pcCmd;
struct passwd *pwdMe = (struct passwd *)0;
@ -2230,8 +2157,9 @@ main(argc, argv)
Version();
Bye(EX_OK);
}
#if !USE_IPV6
ProbeInterfaces(INADDR_ANY);
#endif
if (readSystemConf)
ReadConf(CLIENTCONFIGFILE, FLAGFALSE);
@ -2485,11 +2413,11 @@ main(argc, argv)
#if defined(TIOCGWINSZ)
if (interact == FLAGTRUE) {
int fd;
#if HAVE_MEMSET
# if HAVE_MEMSET
memset((void *)(&ws), '\000', sizeof(ws));
#else
# else
bzero((char *)(&ws), sizeof(ws));
#endif
# endif
if ((fd = open("/dev/tty", O_RDONLY)) != -1) {
ioctl(fd, TIOCGWINSZ, &ws);
}

View File

@ -1,5 +1,5 @@
.\" $Id: console.man,v 1.65 2013/09/25 22:10:30 bryan Exp $
.TH CONSOLE 1 "2013/09/25" "conserver-8.1.20" "conserver"
.TH CONSOLE 1 "2013/09/25" "conserver-8.2.0" "conserver"
.SH NAME
console \- console server client program
.SH SYNOPSIS

View File

@ -1,5 +1,5 @@
/*
* $Id: getpassword.c,v 1.8 2003/11/20 13:56:41 bryan Exp $
* $Id: getpassword.c,v 1.9 2014/04/20 06:45:07 bryan Exp $
*
* Copyright conserver.com, 2000
*
@ -31,12 +31,7 @@ static STRING *pass = (STRING *)0;
* we really use cbreak at PUCC because we need even parity...
*/
static void
#if PROTOTYPES
C2Raw(int fd)
#else
C2Raw(fd)
int fd;
#endif
{
struct termios n_tios;
@ -64,12 +59,7 @@ C2Raw(fd)
* put the tty back as it was, however that was
*/
static void
#if PROTOTYPES
C2Normal(int fd)
#else
C2Normal(fd)
int fd;
#endif
{
if (!screwy)
return;
@ -78,12 +68,7 @@ C2Normal(fd)
}
char *
#if PROTOTYPES
GetPassword(char *prompt)
#else
GetPassword(prompt)
char *prompt;
#endif
{
int fd;
int nc;
@ -140,11 +125,7 @@ GetPassword(prompt)
}
void
#if PROTOTYPES
ClearPassword(void)
#else
ClearPassword()
#endif
{
if (pass == (STRING *)0 || pass->allocated == 0)
return;

View File

@ -1,10 +1,10 @@
/*
* $Id: getpassword.h,v 1.3 2003/09/11 09:10:58 bryan Exp $
* $Id: getpassword.h,v 1.4 2014/04/20 06:45:07 bryan Exp $
*
* Copyright conserver.com, 2000
*
* Maintainer/Enhancer: Bryan Stansell (bryan@conserver.com)
*/
extern char *GetPassword PARAMS((char *));
extern void *ClearPassword PARAMS((void));
extern char *GetPassword(char *);
extern void *ClearPassword(void);

View File

@ -1,5 +1,5 @@
/*
* $Id: readconf.c,v 5.7 2013/09/18 14:31:39 bryan Exp $
* $Id: readconf.c,v 5.8 2014/04/20 06:45:07 bryan Exp $
*
* Copyright conserver.com, 2000
*
@ -19,12 +19,7 @@ TERM *parserTermDefault = (TERM *)0;
TERM *pTerm = (TERM *)0;
void
#if PROTOTYPES
DestroyConfig(CONFIG *c)
#else
DestroyConfig(c)
CONFIG *c;
#endif
{
if (c == (CONFIG *)0)
return;
@ -48,12 +43,7 @@ DestroyConfig(c)
}
void
#if PROTOTYPES
ApplyConfigDefault(CONFIG *c)
#else
ApplyConfigDefault(c)
CONFIG *c;
#endif
{
if (parserConfigDefault == (CONFIG *)0)
return;
@ -121,12 +111,7 @@ ApplyConfigDefault(c)
}
void
#if PROTOTYPES
ConfigBegin(char *id)
#else
ConfigBegin(id)
char *id;
#endif
{
CONDDEBUG((1, "ConfigBegin(%s) [%s:%d]", id, file, line));
if (id == (char *)0 || id[0] == '\000') {
@ -144,11 +129,7 @@ ConfigBegin(id)
}
void
#if PROTOTYPES
ConfigEnd(void)
#else
ConfigEnd()
#endif
{
CONDDEBUG((1, "ConfigEnd() [%s:%d]", file, line));
@ -170,11 +151,7 @@ ConfigEnd()
}
void
#if PROTOTYPES
ConfigAbort(void)
#else
ConfigAbort()
#endif
{
CONDDEBUG((1, "ConfigAbort() [%s:%d]", file, line));
if (parserConfigTemp == (CONFIG *)0)
@ -185,11 +162,7 @@ ConfigAbort()
}
void
#if PROTOTYPES
ConfigDestroy(void)
#else
ConfigDestroy()
#endif
{
CONDDEBUG((1, "ConfigDestroy() [%s:%d]", file, line));
@ -206,12 +179,7 @@ ConfigDestroy()
}
void
#if PROTOTYPES
DestroyTerminal(TERM *t)
#else
DestroyTerminal(t)
TERM *t;
#endif
{
if (t == (TERM *)0)
return;
@ -227,12 +195,7 @@ DestroyTerminal(t)
}
void
#if PROTOTYPES
ApplyTermDefault(TERM *t)
#else
ApplyTermDefault(t)
TERM *t;
#endif
{
if (parserTermDefault == (TERM *)0)
return;
@ -266,12 +229,7 @@ ApplyTermDefault(t)
}
void
#if PROTOTYPES
TerminalBegin(char *id)
#else
TerminalBegin(id)
char *id;
#endif
{
CONDDEBUG((1, "TerminalBegin(%s) [%s:%d]", id, file, line));
if (id == (char *)0 || id[0] == '\000') {
@ -289,11 +247,7 @@ TerminalBegin(id)
}
void
#if PROTOTYPES
TerminalEnd(void)
#else
TerminalEnd()
#endif
{
static char *term = (char *)0;
@ -323,11 +277,7 @@ TerminalEnd()
}
void
#if PROTOTYPES
TerminalAbort(void)
#else
TerminalAbort()
#endif
{
CONDDEBUG((1, "TerminalAbort() [%s:%d]", file, line));
if (parserTermTemp == (TERM *)0)
@ -338,11 +288,7 @@ TerminalAbort()
}
void
#if PROTOTYPES
TerminalDestroy(void)
#else
TerminalDestroy()
#endif
{
CONDDEBUG((1, "TerminalDestroy() [%s:%d]", file, line));
@ -359,13 +305,7 @@ TerminalDestroy()
}
void
#if PROTOTYPES
ProcessYesNo(char *id, FLAG *flag)
#else
ProcessYesNo(id, flag)
char *id;
FLAG *flag;
#endif
{
if (id == (char *)0 || id[0] == '\000')
*flag = FLAGFALSE;
@ -378,12 +318,7 @@ ProcessYesNo(id, flag)
}
void
#if PROTOTYPES
ConfigItemEscape(char *id)
#else
ConfigItemEscape(id)
char *id;
#endif
{
CONDDEBUG((1, "ConfigItemEscape(%s) [%s:%d]", id, file, line));
@ -399,12 +334,7 @@ ConfigItemEscape(id)
}
void
#if PROTOTYPES
ConfigItemMaster(char *id)
#else
ConfigItemMaster(id)
char *id;
#endif
{
CONDDEBUG((1, "ConfigItemMaster(%s) [%s:%d]", id, file, line));
@ -420,12 +350,7 @@ ConfigItemMaster(id)
}
void
#if PROTOTYPES
ConfigItemPlayback(char *id)
#else
ConfigItemPlayback(id)
char *id;
#endif
{
int i;
@ -449,12 +374,7 @@ ConfigItemPlayback(id)
}
void
#if PROTOTYPES
ConfigItemPort(char *id)
#else
ConfigItemPort(id)
char *id;
#endif
{
CONDDEBUG((1, "ConfigItemPort(%s) [%s:%d]", id, file, line));
@ -470,12 +390,7 @@ ConfigItemPort(id)
}
void
#if PROTOTYPES
ConfigItemReplay(char *id)
#else
ConfigItemReplay(id)
char *id;
#endif
{
int i;
@ -499,12 +414,7 @@ ConfigItemReplay(id)
}
void
#if PROTOTYPES
ConfigItemSslcredentials(char *id)
#else
ConfigItemSslcredentials(id)
char *id;
#endif
{
CONDDEBUG((1, "ConfigItemSslcredentials(%s) [%s:%d]", id, file, line));
#if HAVE_OPENSSL
@ -525,12 +435,7 @@ ConfigItemSslcredentials(id)
}
void
#if PROTOTYPES
ConfigItemSslcacertificatefile(char *id)
#else
ConfigItemSslcacertificatefile(id)
char *id;
#endif
{
CONDDEBUG((1, "ConfigItemSslcacertificatefile(%s) [%s:%d]", id, file,
line));
@ -552,12 +457,7 @@ ConfigItemSslcacertificatefile(id)
}
void
#if PROTOTYPES
ConfigItemSslcacertificatepath(char *id)
#else
ConfigItemSslcacertificatepath(id)
char *id;
#endif
{
CONDDEBUG((1, "ConfigItemSslcacertificatepath(%s) [%s:%d]", id, file,
line));
@ -579,12 +479,7 @@ ConfigItemSslcacertificatepath(id)
}
void
#if PROTOTYPES
ConfigItemSslrequired(char *id)
#else
ConfigItemSslrequired(id)
char *id;
#endif
{
CONDDEBUG((1, "ConfigItemSslrequired(%s) [%s:%d]", id, file, line));
#if HAVE_OPENSSL
@ -597,12 +492,7 @@ ConfigItemSslrequired(id)
}
void
#if PROTOTYPES
ConfigItemSslenabled(char *id)
#else
ConfigItemSslenabled(id)
char *id;
#endif
{
CONDDEBUG((1, "ConfigItemSslenabled(%s) [%s:%d]", id, file, line));
#if HAVE_OPENSSL
@ -614,24 +504,14 @@ ConfigItemSslenabled(id)
}
void
#if PROTOTYPES
ConfigItemStriphigh(char *id)
#else
ConfigItemStriphigh(id)
char *id;
#endif
{
CONDDEBUG((1, "ConfigItemStriphigh(%s) [%s:%d]", id, file, line));
ProcessYesNo(id, &(parserConfigTemp->striphigh));
}
void
#if PROTOTYPES
ConfigItemUsername(char *id)
#else
ConfigItemUsername(id)
char *id;
#endif
{
CONDDEBUG((1, "ConfigItemUsername(%s) [%s:%d]", id, file, line));
@ -649,12 +529,7 @@ ConfigItemUsername(id)
SUBST *substData = (SUBST *)0;
SUBSTTOKEN
#if PROTOTYPES
SubstToken(char c)
#else
SubstToken(c)
char c;
#endif
{
switch (c) {
case 'u':
@ -666,14 +541,7 @@ SubstToken(c)
}
int
#if PROTOTYPES
SubstValue(char c, char **s, int *i)
#else
SubstValue(c, s, i)
char c;
char **s;
int *i;
#endif
{
int retval = 0;
@ -696,11 +564,7 @@ SubstValue(c, s, i)
}
void
#if PROTOTYPES
InitSubstCallback(void)
#else
InitSubstCallback()
#endif
{
if (substData == (SUBST *)0) {
if ((substData = (SUBST *)calloc(1, sizeof(SUBST))) == (SUBST *)0)
@ -712,12 +576,7 @@ InitSubstCallback()
void
#if PROTOTYPES
TerminalItemAttach(char *id)
#else
TerminalItemAttach(id)
char *id;
#endif
{
CONDDEBUG((1, "TerminalItemAttach(%s) [%s:%d]", id, file, line));
@ -733,12 +592,7 @@ TerminalItemAttach(id)
}
void
#if PROTOTYPES
TerminalItemAttachsubst(char *id)
#else
TerminalItemAttachsubst(id)
char *id;
#endif
{
CONDDEBUG((1, "TerminalItemAttachsubst(%s) [%s:%d]", id, file, line));
ProcessSubst(substData, (char **)0, &(parserTermTemp->attachsubst),
@ -746,12 +600,7 @@ TerminalItemAttachsubst(id)
}
void
#if PROTOTYPES
TerminalItemDetach(char *id)
#else
TerminalItemDetach(id)
char *id;
#endif
{
CONDDEBUG((1, "TerminalItemDetach(%s) [%s:%d]", id, file, line));
@ -767,12 +616,7 @@ TerminalItemDetach(id)
}
void
#if PROTOTYPES
TerminalItemDetachsubst(char *id)
#else
TerminalItemDetachsubst(id)
char *id;
#endif
{
CONDDEBUG((1, "TerminalItemDetachsubst(%s) [%s:%d]", id, file, line));
ProcessSubst(substData, (char **)0, &(parserTermTemp->detachsubst),
@ -812,13 +656,7 @@ SECTION sections[] = {
};
void
#if PROTOTYPES
ReadConf(char *filename, FLAG verbose)
#else
ReadConf(filename, verbose)
char *filename;
FLAG verbose;
#endif
{
FILE *fp;

View File

@ -1,5 +1,5 @@
/*
* $Id: readconf.h,v 5.6 2013/09/18 14:31:39 bryan Exp $
* $Id: readconf.h,v 5.7 2014/04/20 06:45:07 bryan Exp $
*
* Copyright conserver.com, 2000
*
@ -37,6 +37,6 @@ extern CONFIG *pConfig;
extern TERM *pTerm;
extern SUBST *substData;
extern void ReadConf PARAMS((char *, FLAG));
extern void DestroyConfig PARAMS((CONFIG *));
extern void DestroyTerminal PARAMS((TERM *));
extern void ReadConf(char *, FLAG);
extern void DestroyConfig(CONFIG *);
extern void DestroyTerminal(TERM *);

View File

@ -4,7 +4,7 @@
#
%define pkg conserver
%define ver 8.1.20
%define ver 8.2.0
# define the name of the machine on which the main conserver
# daemon will be running if you don't want to use the default

View File

@ -1,7 +1,7 @@
PKG="conserver"
NAME="Console server and client"
CATEGORY="system"
VERSION="8.1.20"
VERSION="8.2.0"
DESC="Console server and client"
CLASSES=none
ARCH=sparc