diff --git a/acconfig.h b/acconfig.h index 6c4713eed..8d0560b6a 100644 --- a/acconfig.h +++ b/acconfig.h @@ -1,5 +1,9 @@ @BOTTOM@ +/* This should be handled by automake */ +#undef VERSION +#undef PACKAGE + #undef HAVE_INT8_T #undef HAVE_INT16_T #undef HAVE_INT32_T @@ -9,12 +13,63 @@ #undef HAVE_U_INT32_T #undef HAVE_U_INT64_T +/* define if you have h_errno */ +#undef HAVE_H_ERRNO + +/* define if you have h_errlist but not hstrerror */ +#undef HAVE_H_ERRLIST + +/* define if you have h_nerr but not hstrerror */ +#undef HAVE_H_NERR + +/* define if your system doesn't declare h_errlist */ +#undef HAVE_H_ERRLIST_DECLARATION + +/* define if your system doesn't declare h_nerr */ +#undef HAVE_H_NERR_DECLARATION + +/* define this if you need a declaration for h_errno */ +#undef HAVE_H_ERRNO_DECLARATION + +/* define if you need a declaration for optarg */ +#undef HAVE_OPTARG_DECLARATION + +/* define if you need a declaration for optind */ +#undef HAVE_OPTIND_DECLARATION + +/* define if you need a declaration for opterr */ +#undef HAVE_OPTERR_DECLARATION + +/* define if you need a declaration for optopt */ +#undef HAVE_OPTOPT_DECLARATION + +/* define if you need a declaration for __progname */ +#undef HAVE___PROGNAME_DECLARATION + +/* define if the system is missing a prototype for crypt() */ +#undef NEED_CRYPT_PROTO + +/* define if the system is missing a prototype for strtok_r() */ +#undef NEED_STRTOK_R_PROTO + /* Define this if your `struct tm' has a field `tm_gmtoff' */ #undef HAVE_STRUCT_TM_TM_GMTOFF +/* define if getcwd() is broken (such as in SunOS) */ +#undef BROKEN_GETCWD + /* Define this if you have a variable `timezone' */ #undef HAVE_TIMEZONE +/* Define this if struct winsize is declared in sys/termios.h */ +#undef HAVE_STRUCT_WINSIZE + +/* Define this if struct winsize have ws_xpixel */ +#undef HAVE_WS_XPIXEL + +/* Define this if struct winsize have ws_ypixel */ +#undef HAVE_WS_YPIXEL + #undef VOID_RETSIGTYPE #ifdef VOID_RETSIGTYPE @@ -23,7 +78,14 @@ #define SIGRETURN(x) return (RETSIGTYPE)(x) #endif +/* Define if you have a readline compatible library */ +#undef HAVE_READLINE + #define RCSID(msg) \ static /**/const char *const rcsid[] = { (char *)rcsid, "\100(#)" msg } #undef PROTOTYPES + +/* Maximum values on all known systems */ +#define MaxHostNameLen (64+4) +#define MaxPathLen (1024+4) diff --git a/acinclude.m4 b/acinclude.m4 index 1ebe22aa2..991d3dae0 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -75,6 +75,13 @@ if test -n "$LIB_$1"; then fi ]) +dnl +dnl Warning! +dnl + +dnl undefine(AC_REPLACE_FUNCS) +dnl define(AC_BROKEN,AC_REPLACE_FUNCS) + dnl dnl Same as AC _REPLACE_FUNCS, just define HAVE_func if found in normal dnl libraries @@ -86,7 +93,7 @@ AC_CHECK_FUNC($ac_func, [ changequote(, )dnl ac_tr_func=HAVE_`echo $ac_func | tr '[a-z]' '[A-Z]'` changequote([, ])dnl -AC_DEFINE_UNQUOTED($ac_tr_func)],[LIBOBJS="$LIBOBJS ${ac_func}.o"]) +AC_DEFINE_UNQUOTED($ac_tr_func)],[LIBOBJS[]="$LIBOBJS ${ac_func}.o"]) # autoheader tricks *sigh* : << END @@@funcs="$funcs $1"@@@ @@ -102,7 +109,7 @@ dnl AC_DEFUN(AC_FIND_IF_NOT_BROKEN, [AC_FIND_FUNC([$1], [$2], [$3], [$4]) if eval "test \"$ac_cv_func_$1\" != yes"; then -LIBOBJS="$LIBOBJS $1.o" +LIBOBJS[]="$LIBOBJS $1.o" fi AC_SUBST(LIBOBJS)dnl ]) @@ -275,29 +282,25 @@ dnl dnl Check if we need the prototype for a function dnl -dnl AC_NEED_PROTO(includes, code, function) -AC_DEFUN(AC_NEED_PROTO, [ -AC_MSG_CHECKING([if $3 needs a proto]) -AC_CACHE_VAL(ac_cv_func_$3_proto, [ -AC_TRY_COMPILE([$1], -[$2], -eval "ac_cv_func_$3_proto=no", -eval "ac_cv_func_$3_proto=yes") -]) -changequote(, )dnl -eval "ac_tr_func=NEED_`echo $3 | tr '[a-z]' '[A-Z]'`_PROTO" -changequote([, ])dnl +dnl AC_NEED_PROTO(includes, function) -define([foo], [NEED_]translit($3, [a-z], [A-Z])[_PROTO]) +AC_DEFUN(AC_NEED_PROTO, [ +AC_CACHE_CHECK([if $2 needs a prototype], ac_cv_func_$2_noproto, +AC_TRY_COMPILE([$1], +[struct foo { int foo; } xx; +extern int $2 (struct foo*); +$2(&xx); +], +eval "ac_cv_func_$2_noproto=yes", +eval "ac_cv_func_$2_noproto=no")) +define([foo], [NEED_]translit($2, [a-z], [A-Z])[_PROTO]) +if test "$ac_cv_func_$2_noproto" = yes; then + AC_DEFINE(foo) +fi : << END @@@syms="$syms foo"@@@ END undefine([foo]) - -AC_MSG_RESULT($ac_cv_func_$3_proto) -if eval "test \"\$ac_cv_func_$3_proto\" = yes"; then - AC_DEFINE_UNQUOTED($ac_tr_func) -fi ]) dnl AC_HAVE_STRUCT_FIELD(includes, struct, type, field) @@ -325,6 +328,35 @@ if eval "test \"\$ac_cv_struct_$2_$4\" = yes"; then fi ]) +dnl +dnl Check if we need the declaration of a variable +dnl + +dnl AC_HAVE_DECLARATION(includes, variable) +AC_DEFUN(AC_CHECK_DECLARATION, [ +AC_MSG_CHECKING([if $2 is properly declared]) +AC_CACHE_VAL(ac_cv_var_$2_declaration, [ +AC_TRY_COMPILE([$1 +extern struct { int foo; } $2;], +[$2.foo = 1;], +eval "ac_cv_var_$2_declaration=no", +eval "ac_cv_var_$2_declaration=yes") +]) + +ac_tr_var=[HAVE_]translit($2, [a-z], [A-Z])[_DECLARATION] + +define([foo], [HAVE_]translit($2, [a-z], [A-Z])[_DECLARATION]) +: << END +@@@syms="$syms foo"@@@ +END +undefine([foo]) + +AC_MSG_RESULT($ac_cv_var_$2_declaration) +if eval "test \"\$ac_cv_var_$2_declaration\" = yes"; then + AC_DEFINE_UNQUOTED($ac_tr_var) +fi +]) + dnl dnl Specific tests dnl @@ -477,3 +509,27 @@ for i in $1; do AC_MSG_RESULT($ac_res) done ]) + +dnl +dnl Search for struct winsize +dnl + +AC_DEFUN(AC_KRB_STRUCT_WINSIZE, [ +AC_MSG_CHECKING(for struct winsize) +AC_CACHE_VAL(ac_cv_struct_winsize, [ +ac_cv_struct_winsize=no +for i in sys/termios.h sys/ioctl.h; do +AC_EGREP_HEADER( +changequote(, )dnl +struct[ ]*winsize,dnl +changequote([,])dnl +$i, ac_cv_struct_winsize=yes; break)dnl +done +]) +if test "$ac_cv_struct_winsize" = "yes"; then + AC_DEFINE(HAVE_STRUCT_WINSIZE, 1)dnl +fi +AC_MSG_RESULT($ac_cv_struct_winsize) +AC_EGREP_HEADER(ws_xpixel, termios.h, AC_DEFINE(HAVE_WS_XPIXEL)) +AC_EGREP_HEADER(ws_ypixel, termios.h, AC_DEFINE(HAVE_WS_YPIXEL)) +]) diff --git a/admin/Makefile.am b/admin/Makefile.am index da3e43fff..382d6c067 100644 --- a/admin/Makefile.am +++ b/admin/Makefile.am @@ -2,12 +2,11 @@ AUTOHEADER_FLAGS = no-dependencies -INCLUDES = -I$(top_builddir)/include -I/usr/athena/include +INCLUDES = -I$(top_builddir)/include $(INCLUDE_readline) bin_PROGRAMS = kdb_edit kdb_edit_SOURCES = kdb_edit.c load.c ank.c dump.c init.c get.c delete.c \ extkeytab.c -LDADD = -L$(top_builddir)/lib/hdb -lhdb -L$(top_builddir)/lib/krb5 -lkrb5 -L$(top_builddir)/lib/des -ldes -L$(top_builddir)/lib/asn1 -lasn1 -L/usr/athena/lib -lsl -leditline -ledit -ltermcap - +LDADD = -L$(top_builddir)/lib/hdb -lhdb -L$(top_builddir)/lib/krb5 -lkrb5 -L$(top_builddir)/lib/des -ldes -L$(top_builddir)/lib/asn1 -lasn1 -L$(top_builddir)/lib/sl -lsl $(LIB_readline) -L$(top_builddir)/lib/roken -lroken diff --git a/configure.in b/configure.in index eadf0eaa3..50752d2da 100644 --- a/configure.in +++ b/configure.in @@ -28,24 +28,12 @@ if test "$withval" = no; then fi ]) +AC_TEST_PACKAGE(readline,readline.h,libreadline.a,-lreadline) + AC_C_BIGENDIAN dnl AM_C_PROTOTYPES -dnl Checks for libraries. - -AC_FIND_FUNC(socket, socket) -AC_FIND_FUNC(gethostbyname, nsl) -AC_FIND_FUNC(dbopen, $berkeley_db) -AC_FIND_FUNC(dbm_firstkey, $berkeley_db gdbm ndbm) -AC_FIND_FUNC(syslog, syslog) - -dnl Checks for header files. -AC_HEADER_STDC -AC_CHECK_HEADERS(fcntl.h limits.h sys/ioctl.h sys/time.h unistd.h) -AC_CHECK_HEADERS(sys/bitypes.h sys/filio.h sys/types.h) -AC_CHECK_HEADERS(db.h ndbm.h) - dnl Checks for typedefs, structures, and compiler characteristics. AC_C_CONST AC_TYPE_OFF_T @@ -54,9 +42,53 @@ AC_HEADER_TIME AC_STRUCT_TM AC_DECL_YYTEXT +dnl Checks for header files. +AC_HEADER_STDC + +AC_CHECK_HEADERS(arpa/inet.h crypt.h db.h dbm.h fcntl.h grp.h) +AC_CHECK_HEADERS(limits.h ndbm.h netdb.h netinet/in.h paths.h pwd.h) +AC_CHECK_HEADERS(rpcsvc/dbm.h shadow.h sys/bitypes.h sys/filio.h) +AC_CHECK_HEADERS(sys/ioctl.h sys/param.h sys/proc.h sys/resource.h) +AC_CHECK_HEADERS(sys/socket.h sys/stat.h sys/sysctl.h sys/time.h) +AC_CHECK_HEADERS(sys/tty.h sys/types.h syslog.h termios.h unistd.h) + +dnl Checks for libraries. + +AC_FIND_FUNC(socket, socket) +AC_FIND_FUNC(gethostbyname, nsl) +AC_FIND_FUNC(dbopen, $berkeley_db) +AC_FIND_FUNC(dbm_firstkey, $berkeley_db gdbm ndbm) +AC_FIND_FUNC(syslog, syslog) + +AC_FIND_FUNC_NO_LIBS(tgetent, termcap) + dnl Checks for library functions. -AC_CHECK_FUNCS(gethostname mktime timegm select strdup strstr) -AC_CHECK_FUNCS(random rand setitimer) + +AC_CACHE_CHECK(for working snprintf,ac_cv_func_snprintf_working, +ac_cv_func_snprintf_working=yes +AC_TRY_RUN([ +#include +#include +int main() +{ +changequote(`,')dnl + char foo[3]; +changequote([,])dnl + snprintf(foo, 2, "12"); + return strcmp(foo, "1"); +}],:,ac_cv_func_snprintf_working=no,:)) +: << END +@@@funcs="$funcs snprintf"@@@ +END +if test "$ac_cv_func_snprintf_working" = yes; then + foo=HAVE_SNPRINTF + AC_DEFINE_UNQUOTED($foo) +fi + +AC_CHECK_FUNCS(asnprintf asprintf vasprintf vasnprintf vsnprintf) + +AC_CHECK_FUNCS(gethostname mktime timegm select strstr) +AC_CHECK_FUNCS(random rand setitimer setsid) AC_TYPE_SIGNAL if test "$ac_cv_type_signal" = "void" ; then @@ -64,12 +96,127 @@ if test "$ac_cv_type_signal" = "void" ; then fi AC_SUBST(VOID_RETSIGTYPE) +dnl AC_FIND_IF_NOT_BROKEN(hstrerror, resolv, +dnl [#ifdef HAVE_NETDB_H +dnl #include +dnl #endif], +dnl 17) + +AC_BROKEN(chown daemon err errx fchown getcwd getdtablesize) +AC_BROKEN(getusershell inet_aton initgroups lstat memmove mkstemp) +AC_BROKEN(putenv rcmd setegid setenv seteuid strcasecmp strdup) +AC_BROKEN(strerror strftime strlwr strnlen strtok_r strupr unsetenv) +AC_BROKEN(verr verrx vwarn vwarnx warn warnx) + +dnl AC_KRB_FUNC_GETCWD_BROKEN + +dnl +dnl Checks for prototypes and declarations +dnl + +AC_NEED_PROTO([ +#ifdef HAVE_CRYPT_H +#include +#endif +#ifdef HAVE_UNISTD_H +#include +#endif +], +crypt) + +AC_NEED_PROTO([ +#include +], +strtok_r) + +AC_CHECK_VAR([#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_NETDB_H +#include +#endif], +h_errno) + +AC_CHECK_VAR([#ifdef HAVE_NETDB_H +#include +#endif], +h_errlist) + +AC_CHECK_VAR([#ifdef HAVE_NETDB_H +#include +#endif], +h_nerr) + +AC_CHECK_VAR([#ifdef HAVE_ERR_H +#include +#endif],[__progname]) + +AC_CHECK_DECLARATION([#include ], optarg) +AC_CHECK_DECLARATION([#include ], optind) +AC_CHECK_DECLARATION([#include ], opterr) +AC_CHECK_DECLARATION([#include ], optopt) + +dnl +dnl Check for struct winsize +dnl + +AC_KRB_STRUCT_WINSIZE + +dnl +dnl Check for some common types +dnl + +AC_TYPE_PID_T +AC_TYPE_UID_T +AC_TYPE_OFF_T +AC_TYPE_SIZE_T + +dnl AC_SUBST(LIBOBJS) + AC_GROK_TYPES(int8_t int16_t int32_t int64_t) AC_GROK_TYPES(u_int8_t u_int16_t u_int32_t u_int64_t) +dnl +dnl Tests for editline +dnl + +AC_FIND_FUNC_NO_LIBS(el_init, edit) +AC_FIND_FUNC_NO_LIBS(readline, readline) + +if test "$with_readline"; then + AC_DEFINE(HAVE_READLINE, 1) + editline_OBJS= + LIB_readline="$READLINELIB "'$(LIB_tgetent)' + INCLUDE_readline="$READLINEINCLUDE" +elif test "$ac_cv_func_el_init" = yes; then + AC_DEFINE(HAVE_READLINE, 1) + + editline_OBJS=edit_compat.o + LIB_readline='-L$(top_builddir)/lib/editline -leditline '"$LIB_el_init"' $(LIB_tgetent)' + + INCLUDE_readline='-I$(top_builddir)/lib/editline -I$(top_srcdir)/lib/editline' +elif test "$ac_cv_func_readline" = yes; then + AC_DEFINE(HAVE_READLINE, 1) + editline_OBJS= + LIB_readline='-lreadline $(LIB_tgetent)' + INCLUDE_readline= +else + AC_DEFINE(HAVE_READLINE, 1) + editline_OBJS="editline.o complete.o sysunix.o" + LIB_readline='-L$(top_builddir)/lib/editline -leditline $(LIB_tgetent)' + INCLUDE_readline='-I$(top_builddir)/lib/editline -I$(top_srcdir)/lib/editline' +fi +AC_SUBST(LIB_tgetent) +AC_SUBST(LIB_readline) +AC_SUBST(INCLUDE_readline) +AC_SUBST(editline_OBJS) + AC_OUTPUT(Makefile \ include/Makefile \ lib/Makefile \ + lib/roken/Makefile \ + lib/editline/Makefile \ + lib/sl/Makefile \ lib/asn1/Makefile \ lib/des/Makefile \ lib/krb5/Makefile \ diff --git a/include/Makefile.in b/include/Makefile.in index 80fa4aaff..97e02ebc0 100644 --- a/include/Makefile.in +++ b/include/Makefile.in @@ -1,5 +1,6 @@ HEADERS = krb5.h krb5_err.h asn1_err.h hdb_err.h asn1.h des.h hdb.h md4.h \ - md5.h sha.h bits.h cache.h keytab.h config_file.h store.h gssapi.h + md5.h sha.h bits.h cache.h keytab.h config_file.h store.h gssapi.h \ + roken.h sl.h srcdir = @srcdir@ VPATH = $(srcdir) @@ -67,6 +68,12 @@ store.h: gssapi.h: $(LN_S) $(top_srcdir)/lib/gssapi/gssapi.h . +roken.h: + $(LN_S) $(top_srcdir)/lib/roken/roken.h . + +sl.h: + $(LN_S) $(top_srcdir)/lib/sl/sl.h . + bits.h: bits ./bits bits.h diff --git a/kdc/Makefile.am b/kdc/Makefile.am index b8004ee98..d1e82c890 100644 --- a/kdc/Makefile.am +++ b/kdc/Makefile.am @@ -8,5 +8,4 @@ bin_PROGRAMS = string2key kdc kdc_SOURCES = connect.c kerberos4.c kerberos5.c main.c misc.c -LDADD = -L$(top_builddir)/lib/hdb -lhdb -L$(top_builddir)/lib/krb5 -lkrb5 -L$(top_builddir)/lib/des -ldes -L$(top_builddir)/lib/asn1 -lasn1 - +LDADD = -L$(top_builddir)/lib/hdb -lhdb -L$(top_builddir)/lib/krb5 -lkrb5 -L$(top_builddir)/lib/des -ldes -L$(top_builddir)/lib/asn1 -lasn1 -L$(top_builddir)/lib/roken -lroken diff --git a/kuser/Makefile.am b/kuser/Makefile.am index 50e171ebf..1437dcd04 100644 --- a/kuser/Makefile.am +++ b/kuser/Makefile.am @@ -1,3 +1,4 @@ +# $Id$ AUTOHEADER_FLAGS = no-dependencies @@ -5,4 +6,4 @@ INCLUDES = -I$(top_builddir)/include bin_PROGRAMS = kinit klist kfoo -LDADD = -L$(top_builddir)/lib/krb5 -lkrb5 -L$(top_builddir)/lib/des -ldes -L$(top_builddir)/lib/asn1 -lasn1 +LDADD = -L$(top_builddir)/lib/krb5 -lkrb5 -L$(top_builddir)/lib/des -ldes -L$(top_builddir)/lib/asn1 -lasn1 -L$(top_builddir)/lib/roken -lroken diff --git a/lib/Makefile.am b/lib/Makefile.am index f6288e614..de7b2c66b 100644 --- a/lib/Makefile.am +++ b/lib/Makefile.am @@ -1,5 +1,4 @@ # $Id$ AUTOMAKE_OPTIONS = foreign no-dependencies -SUBDIRS = asn1 des krb5 hdb gssapi - +SUBDIRS = roken editline sl asn1 des krb5 hdb gssapi diff --git a/lib/editline/Makefile.am b/lib/editline/Makefile.am new file mode 100644 index 000000000..5ed18fe9f --- /dev/null +++ b/lib/editline/Makefile.am @@ -0,0 +1,17 @@ +# $Id$ + +AUTOMAKE_OPTIONS = no-dependencies foreign + +INCLUDES = -I$(top_builddir)/include + +lib_LIBRARIES = libeditline.a + +## hata + +libeditline_a_SOURCES = foo.c + +EXTRA_libeditline_a_SOURCES = \ +complete.c edit_compat.c editline.c sysunix.c + +libeditline_a_LIBADD = @editline_OBJS@ +libeditline_a_DEPENDENCIES = $(libeditline_a_LIBADD) diff --git a/lib/roken/Makefile.am b/lib/roken/Makefile.am new file mode 100644 index 000000000..e76e12311 --- /dev/null +++ b/lib/roken/Makefile.am @@ -0,0 +1,13 @@ +# $Id$ + +AUTOMAKE_OPTIONS = no-dependencies foreign + +INCLUDES = -I$(top_builddir)/include + +lib_LIBRARIES = libroken.a + +libroken_a_SOURCES = \ +k_getpwuid.c k_getpwnam.c signal.c verify.c inaddr2str.o mini_inetd.c \ +get_window_size.c warnerr.c snprintf.c + +libroken_a_LIBADD = @LIBOBJS@ diff --git a/lib/roken/getcwd.c b/lib/roken/getcwd.c index f12e9cfe6..2b8cf2858 100644 --- a/lib/roken/getcwd.c +++ b/lib/roken/getcwd.c @@ -44,7 +44,6 @@ RCSID("$Id$"); #include #include -#include "protos.h" #include "roken.h" char* diff --git a/lib/roken/roken.h b/lib/roken/roken.h index d3b8cf609..ccdfc6efc 100644 --- a/lib/roken/roken.h +++ b/lib/roken/roken.h @@ -69,8 +69,6 @@ #include #endif -#include "protos.h" - #if !defined(HAVE_SETSID) && defined(HAVE__SETSID) #define setsid _setsid #endif @@ -181,10 +179,6 @@ int inet_aton(const char *cp, struct in_addr *adr); char* getcwd(char *path, size_t size); #endif -#ifndef HAVE_GETENT -int getent(char *cp, char *name); -#endif - #ifdef HAVE_PWD_H #include struct passwd *k_getpwnam (char *user); diff --git a/lib/roken/roken.h.in b/lib/roken/roken.h.in index d3b8cf609..ccdfc6efc 100644 --- a/lib/roken/roken.h.in +++ b/lib/roken/roken.h.in @@ -69,8 +69,6 @@ #include #endif -#include "protos.h" - #if !defined(HAVE_SETSID) && defined(HAVE__SETSID) #define setsid _setsid #endif @@ -181,10 +179,6 @@ int inet_aton(const char *cp, struct in_addr *adr); char* getcwd(char *path, size_t size); #endif -#ifndef HAVE_GETENT -int getent(char *cp, char *name); -#endif - #ifdef HAVE_PWD_H #include struct passwd *k_getpwnam (char *user);