diff options
author | Jacques Vidrine <nectar@FreeBSD.org> | 2002-02-19 15:46:56 +0000 |
---|---|---|
committer | Jacques Vidrine <nectar@FreeBSD.org> | 2002-02-19 15:46:56 +0000 |
commit | 4137ff4cc173ea2e05227027e1c9e0ea42bcc0dc (patch) | |
tree | 85ecf91fd00875cec4b93111d3a8ed9eec9cddfe /crypto/heimdal/appl/ftp/ftpd | |
parent | 5a83b025a988368a32c549e5bd9fd3e0478c0198 (diff) |
Import of Heimdal Kerberos from KTH repository circa 2002/02/17.
Notes
Notes:
svn path=/vendor-crypto/heimdal/dist/; revision=90926
Diffstat (limited to 'crypto/heimdal/appl/ftp/ftpd')
-rw-r--r-- | crypto/heimdal/appl/ftp/ftpd/Makefile.am | 9 | ||||
-rw-r--r-- | crypto/heimdal/appl/ftp/ftpd/Makefile.in | 456 | ||||
-rw-r--r-- | crypto/heimdal/appl/ftp/ftpd/ftpcmd.y | 10 | ||||
-rw-r--r-- | crypto/heimdal/appl/ftp/ftpd/ftpd.8 | 12 | ||||
-rw-r--r-- | crypto/heimdal/appl/ftp/ftpd/ftpd.c | 41 | ||||
-rw-r--r-- | crypto/heimdal/appl/ftp/ftpd/gss_userok.c | 5 | ||||
-rw-r--r-- | crypto/heimdal/appl/ftp/ftpd/ls.c | 292 | ||||
-rw-r--r-- | crypto/heimdal/appl/ftp/ftpd/popen.c | 10 |
8 files changed, 508 insertions, 327 deletions
diff --git a/crypto/heimdal/appl/ftp/ftpd/Makefile.am b/crypto/heimdal/appl/ftp/ftpd/Makefile.am index 87537392f1c3..20f8b57cfbd4 100644 --- a/crypto/heimdal/appl/ftp/ftpd/Makefile.am +++ b/crypto/heimdal/appl/ftp/ftpd/Makefile.am @@ -1,4 +1,4 @@ -# $Id: Makefile.am,v 1.23 2001/01/28 23:17:36 assar Exp $ +# $Id: Makefile.am,v 1.26 2001/09/06 12:18:34 assar Exp $ include $(top_srcdir)/Makefile.am.common @@ -46,11 +46,10 @@ CLEANFILES = security.c security.h krb4.c gssapi.c ftpcmd.c man_MANS = ftpd.8 ftpusers.5 LDADD = ../common/libcommon.a \ - $(LIB_kafs) \ - $(LIB_gssapi) \ $(LIB_otp) \ + $(LIB_gssapi) \ $(LIB_krb5) \ + $(LIB_kafs) \ $(LIB_krb4) \ $(LIB_des) \ - $(LIB_roken) \ - $(DBLIB) + $(LIB_roken) diff --git a/crypto/heimdal/appl/ftp/ftpd/Makefile.in b/crypto/heimdal/appl/ftp/ftpd/Makefile.in index cd6737669447..1795007e4531 100644 --- a/crypto/heimdal/appl/ftp/ftpd/Makefile.in +++ b/crypto/heimdal/appl/ftp/ftpd/Makefile.in @@ -1,6 +1,6 @@ -# Makefile.in generated automatically by automake 1.4b from Makefile.am +# Makefile.in generated automatically by automake 1.5 from Makefile.am. -# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000 +# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 # Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -11,6 +11,16 @@ # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. +@SET_MAKE@ + +# $Id: Makefile.am,v 1.26 2001/09/06 12:18:34 assar Exp $ + + +# $Id: Makefile.am.common,v 1.3 1999/04/01 14:58:43 joda Exp $ + + +# $Id: Makefile.am.common,v 1.31 2001/09/01 11:12:18 assar Exp $ + SHELL = @SHELL@ srcdir = @srcdir@ @@ -31,11 +41,9 @@ infodir = @infodir@ mandir = @mandir@ includedir = @includedir@ oldincludedir = /usr/include - pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ - top_builddir = ../../.. ACLOCAL = @ACLOCAL@ @@ -47,21 +55,17 @@ INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_FLAG = +INSTALL_HEADER = $(INSTALL_DATA) transform = @program_transform_name@ - NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : - -@SET_MAKE@ host_alias = @host_alias@ host_triplet = @host@ AIX_EXTRA_KAFS = @AIX_EXTRA_KAFS@ -AMDEP = @AMDEP@ AMTAR = @AMTAR@ AS = @AS@ AWK = @AWK@ @@ -69,11 +73,11 @@ CANONICAL_HOST = @CANONICAL_HOST@ CATMAN = @CATMAN@ CATMANEXT = @CATMANEXT@ CC = @CC@ +COMPILE_ET = @COMPILE_ET@ CPP = @CPP@ -CXX = @CXX@ -CXXCPP = @CXXCPP@ DBLIB = @DBLIB@ DEPDIR = @DEPDIR@ +DIR_com_err = @DIR_com_err@ DIR_des = @DIR_des@ DIR_roken = @DIR_roken@ DLLTOOL = @DLLTOOL@ @@ -82,20 +86,27 @@ EXTRA_LIB45 = @EXTRA_LIB45@ GROFF = @GROFF@ INCLUDES_roken = @INCLUDES_roken@ INCLUDE_ = @INCLUDE_@ +INCLUDE_des = @INCLUDE_des@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LEX = @LEX@ LIBOBJS = @LIBOBJS@ LIBTOOL = @LIBTOOL@ LIB_ = @LIB_@ LIB_AUTH_SUBDIRS = @LIB_AUTH_SUBDIRS@ +LIB_NDBM = @LIB_NDBM@ +LIB_com_err = @LIB_com_err@ +LIB_com_err_a = @LIB_com_err_a@ +LIB_com_err_so = @LIB_com_err_so@ LIB_des = @LIB_des@ +LIB_des_a = @LIB_des_a@ LIB_des_appl = @LIB_des_appl@ +LIB_des_so = @LIB_des_so@ LIB_kdb = @LIB_kdb@ LIB_otp = @LIB_otp@ LIB_roken = @LIB_roken@ LIB_security = @LIB_security@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ -MAKEINFO = @MAKEINFO@ NEED_WRITEAUTH_FALSE = @NEED_WRITEAUTH_FALSE@ NEED_WRITEAUTH_TRUE = @NEED_WRITEAUTH_TRUE@ NROFF = @NROFF@ @@ -103,38 +114,32 @@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ RANLIB = @RANLIB@ -STRIP = @STRIP@ VERSION = @VERSION@ VOID_RETSIGTYPE = @VOID_RETSIGTYPE@ WFLAGS = @WFLAGS@ WFLAGS_NOIMPLICITINT = @WFLAGS_NOIMPLICITINT@ WFLAGS_NOUNUSED = @WFLAGS_NOUNUSED@ +X_CFLAGS = @X_CFLAGS@ +X_EXTRA_LIBS = @X_EXTRA_LIBS@ +X_LIBS = @X_LIBS@ +X_PRE_LIBS = @X_PRE_LIBS@ YACC = @YACC@ +am__include = @am__include@ +am__quote = @am__quote@ dpagaix_CFLAGS = @dpagaix_CFLAGS@ dpagaix_LDADD = @dpagaix_LDADD@ install_sh = @install_sh@ -# $Id: Makefile.am,v 1.23 2001/01/28 23:17:36 assar Exp $ - - -# $Id: Makefile.am.common,v 1.3 1999/04/01 14:58:43 joda Exp $ - - -# $Id: Makefile.am.common,v 1.26 2001/05/21 13:27:48 joda Exp $ - - -AUTOMAKE_OPTIONS = foreign no-dependencies +AUTOMAKE_OPTIONS = foreign no-dependencies 1.4b SUFFIXES = .et .h .1 .3 .5 .8 .cat1 .cat3 .cat5 .cat8 .x INCLUDES = -I$(top_builddir)/include $(INCLUDES_roken) -I$(srcdir)/../common $(INCLUDE_krb4) -DFTP_SERVER -AM_CFLAGS = $(WFLAGS) +AM_CFLAGS = $(WFLAGS) CP = cp -COMPILE_ET = $(top_builddir)/lib/com_err/compile_et - buildinclude = $(top_builddir)/include LIB_XauReadAuth = @LIB_XauReadAuth@ @@ -152,8 +157,8 @@ LIB_getsockopt = @LIB_getsockopt@ LIB_logout = @LIB_logout@ LIB_logwtmp = @LIB_logwtmp@ LIB_odm_initialize = @LIB_odm_initialize@ +LIB_openpty = @LIB_openpty@ LIB_pidfile = @LIB_pidfile@ -LIB_readline = @LIB_readline@ LIB_res_search = @LIB_res_search@ LIB_setpcred = @LIB_setpcred@ LIB_setsockopt = @LIB_setsockopt@ @@ -175,25 +180,27 @@ INCLUDE_openldap = @INCLUDE_openldap@ LIB_openldap = @LIB_openldap@ INCLUDE_readline = @INCLUDE_readline@ +LIB_readline = @LIB_readline@ LEXLIB = @LEXLIB@ NROFF_MAN = groff -mandoc -Tascii -@KRB4_TRUE@LIB_kafs = @KRB4_TRUE@$(top_builddir)/lib/kafs/libkafs.la $(AIX_EXTRA_KAFS) +@KRB4_TRUE@LIB_kafs = $(top_builddir)/lib/kafs/libkafs.la $(AIX_EXTRA_KAFS) -@KRB5_TRUE@LIB_krb5 = @KRB5_TRUE@$(top_builddir)/lib/krb5/libkrb5.la \ +@KRB5_TRUE@LIB_krb5 = $(top_builddir)/lib/krb5/libkrb5.la \ @KRB5_TRUE@ $(top_builddir)/lib/asn1/libasn1.la -@KRB5_TRUE@LIB_gssapi = @KRB5_TRUE@$(top_builddir)/lib/gssapi/libgssapi.la -@DCE_TRUE@LIB_kdfs = @DCE_TRUE@$(top_builddir)/lib/kdfs/libkdfs.la +@KRB5_TRUE@LIB_gssapi = $(top_builddir)/lib/gssapi/libgssapi.la + +@DCE_TRUE@LIB_kdfs = $(top_builddir)/lib/kdfs/libkdfs.la CHECK_LOCAL = libexec_PROGRAMS = ftpd -@KRB4_TRUE@krb4_sources = @KRB4_TRUE@krb4.c kauth.c -@KRB5_TRUE@krb5_sources = @KRB5_TRUE@gssapi.c gss_userok.c +@KRB4_TRUE@krb4_sources = krb4.c kauth.c +@KRB5_TRUE@krb5_sources = gssapi.c gss_userok.c ftpd_SOURCES = \ extern.h \ @@ -216,159 +223,151 @@ CLEANFILES = security.c security.h krb4.c gssapi.c ftpcmd.c man_MANS = ftpd.8 ftpusers.5 LDADD = ../common/libcommon.a \ - $(LIB_kafs) \ - $(LIB_gssapi) \ $(LIB_otp) \ + $(LIB_gssapi) \ $(LIB_krb5) \ + $(LIB_kafs) \ $(LIB_krb4) \ $(LIB_des) \ - $(LIB_roken) \ - $(DBLIB) + $(LIB_roken) subdir = appl/ftp/ftpd mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs -CONFIG_HEADER = ../../../include/config.h -CONFIG_CLEAN_FILES = -libexec_PROGRAMS = ftpd$(EXEEXT) -PROGRAMS = $(libexec_PROGRAMS) - - -DEFS = @DEFS@ -I. -I$(srcdir) -I../../../include +CONFIG_HEADER = $(top_builddir)/include/config.h +CONFIG_CLEAN_FILES = +libexec_PROGRAMS = ftpd$(EXEEXT) +PROGRAMS = $(libexec_PROGRAMS) + +@KRB4_FALSE@@KRB5_TRUE@am_ftpd_OBJECTS = ftpcmd.$(OBJEXT) ftpd.$(OBJEXT) \ +@KRB4_FALSE@@KRB5_TRUE@ logwtmp.$(OBJEXT) ls.$(OBJEXT) \ +@KRB4_FALSE@@KRB5_TRUE@ popen.$(OBJEXT) security.$(OBJEXT) \ +@KRB4_FALSE@@KRB5_TRUE@ gssapi.$(OBJEXT) gss_userok.$(OBJEXT) +@KRB4_FALSE@@KRB5_FALSE@am_ftpd_OBJECTS = ftpcmd.$(OBJEXT) \ +@KRB4_FALSE@@KRB5_FALSE@ ftpd.$(OBJEXT) logwtmp.$(OBJEXT) \ +@KRB4_FALSE@@KRB5_FALSE@ ls.$(OBJEXT) popen.$(OBJEXT) \ +@KRB4_FALSE@@KRB5_FALSE@ security.$(OBJEXT) +@KRB4_TRUE@@KRB5_TRUE@am_ftpd_OBJECTS = ftpcmd.$(OBJEXT) ftpd.$(OBJEXT) \ +@KRB4_TRUE@@KRB5_TRUE@ logwtmp.$(OBJEXT) ls.$(OBJEXT) \ +@KRB4_TRUE@@KRB5_TRUE@ popen.$(OBJEXT) security.$(OBJEXT) \ +@KRB4_TRUE@@KRB5_TRUE@ krb4.$(OBJEXT) kauth.$(OBJEXT) \ +@KRB4_TRUE@@KRB5_TRUE@ gssapi.$(OBJEXT) gss_userok.$(OBJEXT) +@KRB4_TRUE@@KRB5_FALSE@am_ftpd_OBJECTS = ftpcmd.$(OBJEXT) ftpd.$(OBJEXT) \ +@KRB4_TRUE@@KRB5_FALSE@ logwtmp.$(OBJEXT) ls.$(OBJEXT) \ +@KRB4_TRUE@@KRB5_FALSE@ popen.$(OBJEXT) security.$(OBJEXT) \ +@KRB4_TRUE@@KRB5_FALSE@ krb4.$(OBJEXT) kauth.$(OBJEXT) +ftpd_OBJECTS = $(am_ftpd_OBJECTS) +ftpd_LDADD = $(LDADD) +@KRB4_FALSE@@KRB5_TRUE@ftpd_DEPENDENCIES = ../common/libcommon.a \ +@KRB4_FALSE@@KRB5_TRUE@ $(top_builddir)/lib/gssapi/libgssapi.la \ +@KRB4_FALSE@@KRB5_TRUE@ $(top_builddir)/lib/krb5/libkrb5.la \ +@KRB4_FALSE@@KRB5_TRUE@ $(top_builddir)/lib/asn1/libasn1.la +@KRB4_FALSE@@KRB5_FALSE@ftpd_DEPENDENCIES = ../common/libcommon.a +@KRB4_TRUE@@KRB5_TRUE@ftpd_DEPENDENCIES = ../common/libcommon.a \ +@KRB4_TRUE@@KRB5_TRUE@ $(top_builddir)/lib/gssapi/libgssapi.la \ +@KRB4_TRUE@@KRB5_TRUE@ $(top_builddir)/lib/krb5/libkrb5.la \ +@KRB4_TRUE@@KRB5_TRUE@ $(top_builddir)/lib/asn1/libasn1.la \ +@KRB4_TRUE@@KRB5_TRUE@ $(top_builddir)/lib/kafs/libkafs.la +@KRB4_TRUE@@KRB5_FALSE@ftpd_DEPENDENCIES = ../common/libcommon.a \ +@KRB4_TRUE@@KRB5_FALSE@ $(top_builddir)/lib/kafs/libkafs.la +ftpd_LDFLAGS = + +DEFS = @DEFS@ +DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)/include CPPFLAGS = @CPPFLAGS@ LDFLAGS = @LDFLAGS@ -X_CFLAGS = @X_CFLAGS@ -X_LIBS = @X_LIBS@ -X_EXTRA_LIBS = @X_EXTRA_LIBS@ -X_PRE_LIBS = @X_PRE_LIBS@ -@KRB4_FALSE@@KRB5_FALSE@am_ftpd_OBJECTS = ftpcmd.$(OBJEXT) \ -@KRB4_FALSE@@KRB5_FALSE@ftpd.$(OBJEXT) logwtmp.$(OBJEXT) ls.$(OBJEXT) \ -@KRB4_FALSE@@KRB5_FALSE@popen.$(OBJEXT) security.$(OBJEXT) -@KRB4_FALSE@@KRB5_TRUE@am_ftpd_OBJECTS = ftpcmd.$(OBJEXT) \ -@KRB4_FALSE@@KRB5_TRUE@ftpd.$(OBJEXT) logwtmp.$(OBJEXT) ls.$(OBJEXT) \ -@KRB4_FALSE@@KRB5_TRUE@popen.$(OBJEXT) security.$(OBJEXT) \ -@KRB4_FALSE@@KRB5_TRUE@gssapi.$(OBJEXT) gss_userok.$(OBJEXT) -@KRB4_TRUE@@KRB5_FALSE@am_ftpd_OBJECTS = ftpcmd.$(OBJEXT) \ -@KRB4_TRUE@@KRB5_FALSE@ftpd.$(OBJEXT) logwtmp.$(OBJEXT) ls.$(OBJEXT) \ -@KRB4_TRUE@@KRB5_FALSE@popen.$(OBJEXT) security.$(OBJEXT) \ -@KRB4_TRUE@@KRB5_FALSE@krb4.$(OBJEXT) kauth.$(OBJEXT) -@KRB4_TRUE@@KRB5_TRUE@am_ftpd_OBJECTS = ftpcmd.$(OBJEXT) ftpd.$(OBJEXT) \ -@KRB4_TRUE@@KRB5_TRUE@logwtmp.$(OBJEXT) ls.$(OBJEXT) popen.$(OBJEXT) \ -@KRB4_TRUE@@KRB5_TRUE@security.$(OBJEXT) krb4.$(OBJEXT) kauth.$(OBJEXT) \ -@KRB4_TRUE@@KRB5_TRUE@gssapi.$(OBJEXT) gss_userok.$(OBJEXT) -ftpd_OBJECTS = $(am_ftpd_OBJECTS) -ftpd_LDADD = $(LDADD) -@KRB4_FALSE@@KRB5_FALSE@ftpd_DEPENDENCIES = ../common/libcommon.a -@KRB4_FALSE@@KRB5_TRUE@ftpd_DEPENDENCIES = ../common/libcommon.a \ -@KRB4_FALSE@@KRB5_TRUE@$(top_builddir)/lib/gssapi/libgssapi.la \ -@KRB4_FALSE@@KRB5_TRUE@$(top_builddir)/lib/krb5/libkrb5.la \ -@KRB4_FALSE@@KRB5_TRUE@$(top_builddir)/lib/asn1/libasn1.la -@KRB4_TRUE@@KRB5_FALSE@ftpd_DEPENDENCIES = ../common/libcommon.a \ -@KRB4_TRUE@@KRB5_FALSE@$(top_builddir)/lib/kafs/libkafs.la -@KRB4_TRUE@@KRB5_TRUE@ftpd_DEPENDENCIES = ../common/libcommon.a \ -@KRB4_TRUE@@KRB5_TRUE@$(top_builddir)/lib/kafs/libkafs.la \ -@KRB4_TRUE@@KRB5_TRUE@$(top_builddir)/lib/gssapi/libgssapi.la \ -@KRB4_TRUE@@KRB5_TRUE@$(top_builddir)/lib/krb5/libkrb5.la \ -@KRB4_TRUE@@KRB5_TRUE@$(top_builddir)/lib/asn1/libasn1.la -ftpd_LDFLAGS = -COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -CFLAGS = @CFLAGS@ +depcomp = +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) \ + $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) -LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ -DIST_SOURCES = $(ftpd_SOURCES) $(EXTRA_ftpd_SOURCES) -man5dir = $(mandir)/man5 -man8dir = $(mandir)/man8 -MANS = $(man_MANS) -depcomp = -DIST_COMMON = Makefile.am Makefile.in ftpcmd.c - - -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +CFLAGS = @CFLAGS@ +YACCCOMPILE = $(YACC) $(YFLAGS) $(AM_YFLAGS) +LTYACCCOMPILE = $(LIBTOOL) --mode=compile $(YACC) $(YFLAGS) $(AM_YFLAGS) +YLWRAP = $(top_srcdir)/ylwrap +DIST_SOURCES = $(ftpd_SOURCES) $(EXTRA_ftpd_SOURCES) -GZIP_ENV = --best +NROFF = nroff +MANS = $(man_MANS) +DIST_COMMON = Makefile.am Makefile.in ftpcmd.c SOURCES = $(ftpd_SOURCES) $(EXTRA_ftpd_SOURCES) -OBJECTS = $(am_ftpd_OBJECTS) -all: all-redirect +all: all-am + .SUFFIXES: .SUFFIXES: .et .h .1 .3 .5 .8 .cat1 .cat3 .cat5 .cat8 .x .c .lo .o .obj .y -$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) $(top_srcdir)/Makefile.am.common $(top_srcdir)/cf/Makefile.am.common - cd $(top_srcdir) && $(AUTOMAKE) --foreign appl/ftp/ftpd/Makefile - -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - cd $(top_builddir) \ - && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status - - -mostlyclean-libexecPROGRAMS: -clean-libexecPROGRAMS: - -test -z "$(libexec_PROGRAMS)" || rm -f $(libexec_PROGRAMS) - -distclean-libexecPROGRAMS: +mostlyclean-libtool: + -rm -f *.lo -maintainer-clean-libexecPROGRAMS: +clean-libtool: + -rm -rf .libs _libs +distclean-libtool: + -rm -f libtool +$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/Makefile.am.common $(top_srcdir)/cf/Makefile.am.common $(top_srcdir)/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && \ + $(AUTOMAKE) --foreign appl/ftp/ftpd/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + cd $(top_builddir) && \ + CONFIG_HEADERS= CONFIG_LINKS= \ + CONFIG_FILES=$(subdir)/$@ $(SHELL) ./config.status install-libexecPROGRAMS: $(libexec_PROGRAMS) @$(NORMAL_INSTALL) $(mkinstalldirs) $(DESTDIR)$(libexecdir) @list='$(libexec_PROGRAMS)'; for p in $$list; do \ - if test -f $$p; then \ - f="`echo $$p|sed -e 's/$(EXEEXT)$$//' -e '$(transform)' -e 's/$$/$(EXEEXT)/'`"; \ - echo " $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) $(INSTALL_STRIP_FLAG) $$p $(DESTDIR)$(libexecdir)/$$f"; \ - $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) $(INSTALL_STRIP_FLAG) $$p $(DESTDIR)$(libexecdir)/$$f; \ + p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ + if test -f $$p \ + || test -f $$p1 \ + ; then \ + f=`echo $$p1|sed '$(transform);s/$$/$(EXEEXT)/'`; \ + echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) $$p $(DESTDIR)$(libexecdir)/$$f"; \ + $(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) $$p $(DESTDIR)$(libexecdir)/$$f; \ else :; fi; \ done uninstall-libexecPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(libexec_PROGRAMS)'; for p in $$list; do \ - f="`echo $$p|sed -e 's/$(EXEEXT)$$//' -e '$(transform)' -e 's/$$/$(EXEEXT)/'`"; \ + f=`echo $$p|sed 's/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \ echo " rm -f $(DESTDIR)$(libexecdir)/$$f"; \ rm -f $(DESTDIR)$(libexecdir)/$$f; \ done -mostlyclean-compile: - -rm -f *.o core *.core - -rm -f *.$(OBJEXT) +clean-libexecPROGRAMS: + -test -z "$(libexec_PROGRAMS)" || rm -f $(libexec_PROGRAMS) +ftpd$(EXEEXT): $(ftpd_OBJECTS) $(ftpd_DEPENDENCIES) + @rm -f ftpd$(EXEEXT) + $(LINK) $(ftpd_LDFLAGS) $(ftpd_OBJECTS) $(ftpd_LDADD) $(LIBS) -clean-compile: +mostlyclean-compile: + -rm -f *.$(OBJEXT) core *.core distclean-compile: -rm -f *.tab.c -maintainer-clean-compile: - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs - -distclean-libtool: - -maintainer-clean-libtool: - -ftpd$(EXEEXT): $(ftpd_OBJECTS) $(ftpd_DEPENDENCIES) - @rm -f ftpd$(EXEEXT) - $(LINK) $(ftpd_LDFLAGS) $(ftpd_OBJECTS) $(ftpd_LDADD) $(LIBS) .c.o: - $(COMPILE) -c $< + $(COMPILE) -c `test -f $< || echo '$(srcdir)/'`$< + .c.obj: $(COMPILE) -c `cygpath -w $<` + .c.lo: - $(LTCOMPILE) -c -o $@ $< -.y.c: - $(YACC) $(AM_YFLAGS) $(YFLAGS) $< && mv y.tab.c $*.c - if test -f y.tab.h; then \ - if cmp -s y.tab.h $*.h; then rm -f y.tab.h; else mv y.tab.h $*.h; fi; \ - else :; fi + $(LTCOMPILE) -c -o $@ `test -f $< || echo '$(srcdir)/'`$< +.y.c: + $(SHELL) $(YLWRAP) $< y.tab.c $@ y.tab.h $*.h -- $(YACCCOMPILE) +uninstall-info-am: -install-man5: +man5dir = $(mandir)/man5 +install-man5: $(man5_MANS) $(man_MANS) + @$(NORMAL_INSTALL) $(mkinstalldirs) $(DESTDIR)$(man5dir) - @list='$(man5_MANS)'; \ - l2='$(man_MANS)'; for i in $$l2; do \ + @list='$(man5_MANS) $(dist_man5_MANS) $(nodist_man5_MANS)'; \ + l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \ + for i in $$l2; do \ case "$$i" in \ *.5*) list="$$list $$i" ;; \ esac; \ @@ -383,10 +382,11 @@ install-man5: echo " $(INSTALL_DATA) $$file $(DESTDIR)$(man5dir)/$$inst"; \ $(INSTALL_DATA) $$file $(DESTDIR)$(man5dir)/$$inst; \ done - uninstall-man5: - @list='$(man5_MANS)'; \ - l2='$(man_MANS)'; for i in $$l2; do \ + @$(NORMAL_UNINSTALL) + @list='$(man5_MANS) $(dist_man5_MANS) $(nodist_man5_MANS)'; \ + l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \ + for i in $$l2; do \ case "$$i" in \ *.5*) list="$$list $$i" ;; \ esac; \ @@ -400,10 +400,13 @@ uninstall-man5: rm -f $(DESTDIR)$(man5dir)/$$inst; \ done -install-man8: +man8dir = $(mandir)/man8 +install-man8: $(man8_MANS) $(man_MANS) + @$(NORMAL_INSTALL) $(mkinstalldirs) $(DESTDIR)$(man8dir) - @list='$(man8_MANS)'; \ - l2='$(man_MANS)'; for i in $$l2; do \ + @list='$(man8_MANS) $(dist_man8_MANS) $(nodist_man8_MANS)'; \ + l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \ + for i in $$l2; do \ case "$$i" in \ *.8*) list="$$list $$i" ;; \ esac; \ @@ -418,10 +421,11 @@ install-man8: echo " $(INSTALL_DATA) $$file $(DESTDIR)$(man8dir)/$$inst"; \ $(INSTALL_DATA) $$file $(DESTDIR)$(man8dir)/$$inst; \ done - uninstall-man8: - @list='$(man8_MANS)'; \ - l2='$(man_MANS)'; for i in $$l2; do \ + @$(NORMAL_UNINSTALL) + @list='$(man8_MANS) $(dist_man8_MANS) $(nodist_man8_MANS)'; \ + l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \ + for i in $$l2; do \ case "$$i" in \ *.8*) list="$$list $$i" ;; \ esac; \ @@ -434,12 +438,6 @@ uninstall-man8: echo " rm -f $(DESTDIR)$(man8dir)/$$inst"; \ rm -f $(DESTDIR)$(man8dir)/$$inst; \ done -install-man: $(MANS) - @$(NORMAL_INSTALL) - $(MAKE) $(AM_MAKEFLAGS) install-man5 install-man8 -uninstall-man: - @$(NORMAL_UNINSTALL) - $(MAKE) $(AM_MAKEFLAGS) uninstall-man5 uninstall-man8 tags: TAGS @@ -468,22 +466,23 @@ TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ GTAGS: here=`CDPATH=: && cd $(top_builddir) && pwd` \ && cd $(top_srcdir) \ - && gtags -i $$here - -mostlyclean-tags: - -clean-tags: + && gtags -i $(GTAGS_ARGS) $$here distclean-tags: - -rm -f TAGS ID + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH -maintainer-clean-tags: +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) +top_distdir = ../../.. +distdir = $(top_distdir)/$(PACKAGE)-$(VERSION) distdir: $(DISTFILES) @for file in $(DISTFILES); do \ - d=$(srcdir); \ + if test -f $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + $(mkinstalldirs) "$(distdir)/$$dir"; \ + fi; \ if test -d $$d/$$file; then \ cp -pR $$d/$$file $(distdir) \ || exit 1; \ @@ -493,91 +492,97 @@ distdir: $(DISTFILES) || exit 1; \ fi; \ done - $(MAKE) $(AM_MAKEFLAGS) top_distdir="$(top_distdir)" distdir="$(distdir)" dist-hook -info-am: -info: info-am -dvi-am: -dvi: dvi-am + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="${top_distdir}" distdir="$(distdir)" \ + dist-hook check-am: all-am $(MAKE) $(AM_MAKEFLAGS) check-local check: check-am -installcheck-am: -installcheck: installcheck-am -install-exec-am: install-libexecPROGRAMS - @$(NORMAL_INSTALL) - $(MAKE) $(AM_MAKEFLAGS) install-exec-hook -install-exec: install-exec-am +all-am: Makefile $(PROGRAMS) $(MANS) all-local -install-data-am: install-man install-data-local -install-data: install-data-am +installdirs: + $(mkinstalldirs) $(DESTDIR)$(libexecdir) $(DESTDIR)$(man5dir) $(DESTDIR)$(man8dir) -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am install: install-am -uninstall-am: uninstall-libexecPROGRAMS uninstall-man +install-exec: install-exec-am +install-data: install-data-am uninstall: uninstall-am -all-am: Makefile $(PROGRAMS) $(MANS) all-local -all-redirect: all-am -install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_STRIP_FLAG=-s install -installdirs: - $(mkinstalldirs) $(DESTDIR)$(libexecdir) $(DESTDIR)$(mandir)/man5 \ - $(DESTDIR)$(mandir)/man8 +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: - -rm -f Makefile $(CONFIG_CLEAN_FILES) - -rm -f config.cache config.log stamp-h stamp-h[0-9]* + -rm -f Makefile $(CONFIG_CLEAN_FILES) stamp-h stamp-h[0-9]* maintainer-clean-generic: - -rm -f Makefile.in - -test -z "ftpcmd.c" || rm -f ftpcmd.c -mostlyclean-am: mostlyclean-libexecPROGRAMS mostlyclean-compile \ - mostlyclean-libtool mostlyclean-tags \ - mostlyclean-generic + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am -mostlyclean: mostlyclean-am +clean-am: clean-generic clean-libexecPROGRAMS clean-libtool \ + mostlyclean-am -clean-am: clean-libexecPROGRAMS clean-compile clean-libtool clean-tags \ - clean-generic mostlyclean-am +distclean: distclean-am -clean: clean-am +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-libtool distclean-tags -distclean-am: distclean-libexecPROGRAMS distclean-compile \ - distclean-libtool distclean-tags distclean-generic \ - clean-am - -rm -f libtool +dvi: dvi-am -distclean: distclean-am +dvi-am: -maintainer-clean-am: maintainer-clean-libexecPROGRAMS \ - maintainer-clean-compile maintainer-clean-libtool \ - maintainer-clean-tags maintainer-clean-generic \ - distclean-am - @echo "This command is intended for maintainers to use;" - @echo "it deletes files that may require special tools to rebuild." +info: info-am + +info-am: + +install-data-am: install-data-local install-man + +install-exec-am: install-libexecPROGRAMS + @$(NORMAL_INSTALL) + $(MAKE) $(AM_MAKEFLAGS) install-exec-hook + +install-info: install-info-am + +install-man: install-man5 install-man8 + +installcheck-am: maintainer-clean: maintainer-clean-am -.PHONY: mostlyclean-libexecPROGRAMS distclean-libexecPROGRAMS \ -clean-libexecPROGRAMS maintainer-clean-libexecPROGRAMS \ -uninstall-libexecPROGRAMS install-libexecPROGRAMS mostlyclean-compile \ -distclean-compile clean-compile maintainer-clean-compile \ -mostlyclean-libtool distclean-libtool clean-libtool \ -maintainer-clean-libtool install-man5 uninstall-man5 install-man8 \ -uninstall-man8 install-man uninstall-man tags mostlyclean-tags \ -distclean-tags clean-tags maintainer-clean-tags distdir info-am info \ -dvi-am dvi check-local check check-am installcheck-am installcheck \ -install-exec-am install-exec install-data-local install-data-am \ -install-data install-am install uninstall-am uninstall all-local \ -all-redirect all-am all install-strip installdirs mostlyclean-generic \ -distclean-generic clean-generic maintainer-clean-generic clean \ -mostlyclean distclean maintainer-clean +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +uninstall-am: uninstall-info-am uninstall-libexecPROGRAMS uninstall-man + +uninstall-man: uninstall-man5 uninstall-man8 + +.PHONY: GTAGS all all-am all-local check check-am check-local clean \ + clean-generic clean-libexecPROGRAMS clean-libtool distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am info info-am install \ + install-am install-data install-data-am install-data-local \ + install-exec install-exec-am install-info install-info-am \ + install-libexecPROGRAMS install-man install-man5 install-man8 \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ + tags uninstall uninstall-am uninstall-info-am \ + uninstall-libexecPROGRAMS uninstall-man uninstall-man5 \ + uninstall-man8 install-suid-programs: @@ -718,7 +723,6 @@ krb4.c: @test -f krb4.c || $(LN_S) $(srcdir)/../ftp/krb4.c . gssapi.c: @test -f gssapi.c || $(LN_S) $(srcdir)/../ftp/gssapi.c . - # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff --git a/crypto/heimdal/appl/ftp/ftpd/ftpcmd.y b/crypto/heimdal/appl/ftp/ftpd/ftpcmd.y index 8a67a6198f81..2c90987d65d7 100644 --- a/crypto/heimdal/appl/ftp/ftpd/ftpcmd.y +++ b/crypto/heimdal/appl/ftp/ftpd/ftpcmd.y @@ -43,7 +43,7 @@ %{ #include "ftpd_locl.h" -RCSID("$Id: ftpcmd.y,v 1.60 2000/11/05 16:53:20 joda Exp $"); +RCSID("$Id: ftpcmd.y,v 1.61 2001/08/05 06:39:29 assar Exp $"); off_t restart_point; @@ -1238,9 +1238,9 @@ yylex(void) cpos++; return (SP); } - if (isdigit(cbuf[cpos])) { + if (isdigit((unsigned char)cbuf[cpos])) { cp = &cbuf[cpos]; - while (isdigit(cbuf[++cpos])) + while (isdigit((unsigned char)cbuf[++cpos])) ; c = cbuf[cpos]; cbuf[cpos] = '\0'; @@ -1253,9 +1253,9 @@ yylex(void) goto dostr1; case ARGS: - if (isdigit(cbuf[cpos])) { + if (isdigit((unsigned char)cbuf[cpos])) { cp = &cbuf[cpos]; - while (isdigit(cbuf[++cpos])) + while (isdigit((unsigned char)cbuf[++cpos])) ; c = cbuf[cpos]; cbuf[cpos] = '\0'; diff --git a/crypto/heimdal/appl/ftp/ftpd/ftpd.8 b/crypto/heimdal/appl/ftp/ftpd/ftpd.8 index 32d500269cfd..22152be6cf5e 100644 --- a/crypto/heimdal/appl/ftp/ftpd/ftpd.8 +++ b/crypto/heimdal/appl/ftp/ftpd/ftpd.8 @@ -42,7 +42,7 @@ .Sh SYNOPSIS .Nm .Op Fl a Ar authmode -.Op Fl dilv +.Op Fl dilvU .Op Fl g Ar umask .Op Fl p Ar port .Op Fl T Ar maxtimeout @@ -128,6 +128,14 @@ The inactivity timeout period is set to seconds (the default is 15 minutes). .It Fl u Set the initial umask to something else than the default 027. +.It Fl U +In previous versions of +.Nm ftpd , +when a passive mode client requested a data connection to the server, the +server would use data ports in the range 1024..4999. Now, by default, +if the system supports the IP_PORTRANGE socket option, the server will +use data ports in the range 49152..65535. Specifying this option will +revert to the old behavior. .It Fl v Verbose mode. .It Xo @@ -460,7 +468,7 @@ Login access for Kerberos. .Xr otp 1 , .Xr getusershell 3 , .Xr ftpusers 5 , -.Xr syslogd 8 , +.Xr syslogd 8 .Sh STANDARDS .Bl -tag -compact -width "RFC 1938" .It Cm RFC 959 diff --git a/crypto/heimdal/appl/ftp/ftpd/ftpd.c b/crypto/heimdal/appl/ftp/ftpd/ftpd.c index faf07ff37480..7dde7425bec5 100644 --- a/crypto/heimdal/appl/ftp/ftpd/ftpd.c +++ b/crypto/heimdal/appl/ftp/ftpd/ftpd.c @@ -38,7 +38,7 @@ #endif #include "getarg.h" -RCSID("$Id: ftpd.c,v 1.157 2001/04/19 14:41:29 joda Exp $"); +RCSID("$Id: ftpd.c,v 1.160 2001/09/13 09:17:14 joda Exp $"); static char version[] = "Version 6.00"; @@ -68,6 +68,7 @@ struct passwd *pw; int debug = 0; int ftpd_timeout = 900; /* timeout after 15 minutes of inactivity */ int maxtimeout = 7200;/* don't allow idle time to be set beyond 2 hours */ +int restricted_data_ports = 1; int logging; int guest; int dochroot; @@ -217,6 +218,7 @@ struct getargs args[] = { { NULL, 't', arg_integer, &ftpd_timeout, "initial timeout" }, { NULL, 'T', arg_integer, &maxtimeout, "max timeout" }, { NULL, 'u', arg_string, &umask_string, "umask for user logins" }, + { NULL, 'U', arg_negative_flag, &restricted_data_ports, "don't use high data ports" }, { NULL, 'd', arg_flag, &debug, "enable debugging" }, { NULL, 'v', arg_flag, &debug, "enable debugging" }, { "builtin-ls", 'B', arg_flag, &use_builtin_ls, "use built-in ls to list files" }, @@ -1244,6 +1246,26 @@ bad: return (NULL); } +static int +accept_with_timeout(int socket, + struct sockaddr *address, + size_t *address_len, + struct timeval *timeout) +{ + int ret; + fd_set rfd; + FD_ZERO(&rfd); + FD_SET(socket, &rfd); + ret = select(socket + 1, &rfd, NULL, NULL, timeout); + if(ret < 0) + return ret; + if(ret == 0) { + errno = ETIMEDOUT; + return -1; + } + return accept(socket, address, address_len); +} + static FILE * dataconn(const char *name, off_t size, const char *mode) { @@ -1260,10 +1282,13 @@ dataconn(const char *name, off_t size, const char *mode) if (pdata >= 0) { struct sockaddr_storage from_ss; struct sockaddr *from = (struct sockaddr *)&from_ss; + struct timeval timeout; int s; socklen_t fromlen = sizeof(from_ss); - s = accept(pdata, from, &fromlen); + timeout.tv_sec = 15; + timeout.tv_usec = 0; + s = accept_with_timeout(pdata, from, &fromlen, &timeout); if (s < 0) { reply(425, "Can't open data connection."); close(pdata); @@ -1951,6 +1976,8 @@ pasv(void) socket_set_address_and_port (pasv_addr, socket_get_address (ctrl_addr), 0); + socket_set_portrange(pdata, restricted_data_ports, + pasv_addr->sa_family); seteuid(0); if (bind(pdata, pasv_addr, socket_sockaddr_size (pasv_addr)) < 0) { seteuid(pw->pw_uid); @@ -1993,6 +2020,8 @@ epsv(char *proto) socket_set_address_and_port (pasv_addr, socket_get_address (ctrl_addr), 0); + socket_set_portrange(pdata, restricted_data_ports, + pasv_addr->sa_family); seteuid(0); if (bind(pdata, pasv_addr, socket_sockaddr_size (pasv_addr)) < 0) { seteuid(pw->pw_uid); @@ -2165,7 +2194,13 @@ send_file_list(char *whichf) char buf[MaxPathLen]; if (strpbrk(whichf, "~{[*?") != NULL) { - int flags = GLOB_BRACE|GLOB_NOCHECK|GLOB_QUOTE|GLOB_TILDE|GLOB_LIMIT; + int flags = GLOB_BRACE|GLOB_NOCHECK|GLOB_QUOTE|GLOB_TILDE| +#ifdef GLOB_MAXPATH + GLOB_MAXPATH +#else + GLOB_LIMIT +#endif + ; memset(&gl, 0, sizeof(gl)); freeglob = 1; diff --git a/crypto/heimdal/appl/ftp/ftpd/gss_userok.c b/crypto/heimdal/appl/ftp/ftpd/gss_userok.c index 7b3caf25298b..ec263d06534d 100644 --- a/crypto/heimdal/appl/ftp/ftpd/gss_userok.c +++ b/crypto/heimdal/appl/ftp/ftpd/gss_userok.c @@ -35,7 +35,7 @@ #include <gssapi.h> #include <krb5.h> -RCSID("$Id: gss_userok.c,v 1.7 2001/01/30 00:36:58 assar Exp $"); +RCSID("$Id: gss_userok.c,v 1.8 2001/08/05 06:38:57 assar Exp $"); /* XXX a bit too much of krb5 dependency here... What is the correct way to do this? @@ -88,7 +88,8 @@ gss_userok(void *app_data, char *username) goto fail; } - asprintf (&ticketfile, "%s%u", KRB5_DEFAULT_CCROOT, pw->pw_uid); + asprintf (&ticketfile, "%s%u", KRB5_DEFAULT_CCROOT, + (unsigned)pw->pw_uid); ret = krb5_cc_resolve(gssapi_krb5_context, ticketfile, &ccache); if (ret) diff --git a/crypto/heimdal/appl/ftp/ftpd/ls.c b/crypto/heimdal/appl/ftp/ftpd/ls.c index 9311119d316b..7d80be1f371e 100644 --- a/crypto/heimdal/appl/ftp/ftpd/ls.c +++ b/crypto/heimdal/appl/ftp/ftpd/ls.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999 - 2000 Kungliga Tekniska Högskolan + * Copyright (c) 1999 - 2001 Kungliga Tekniska Högskolan * (Royal Institute of Technology, Stockholm, Sweden). * All rights reserved. * @@ -33,7 +33,7 @@ #ifndef TEST #include "ftpd_locl.h" -RCSID("$Id: ls.c,v 1.20 2001/01/25 01:33:15 joda Exp $"); +RCSID("$Id: ls.c,v 1.23 2001/09/14 11:32:52 joda Exp $"); #else #include <stdio.h> @@ -49,14 +49,21 @@ RCSID("$Id: ls.c,v 1.20 2001/01/25 01:33:15 joda Exp $"); #define sec_fprintf2 fprintf #define sec_fflush fflush -void -builtin_ls(FILE *out, const char *file); +static void list_files(FILE *out, const char **files, int n_files, int flags); +static int parse_flags(const char *options); + int main(int argc, char **argv) { - int i; - for(i = 1; i < argc; i++) - builtin_ls(stdout, argv[i]); + int i = 1; + int flags; + if(argc > 1 && argv[1][0] == '-') { + flags = parse_flags(argv[1]); + i = 2; + } else + flags = parse_flags(NULL); + + list_files(stdout, (const char **)argv + i, argc - i, flags); return 0; } #endif @@ -107,6 +114,11 @@ free_fileinfo(struct fileinfo *f) #define LS_DISP_LONG (1 << 8) #define LS_DISP_COLUMN (2 << 8) #define LS_DISP_CROSS (3 << 8) +#define LS_SHOW_ALL (1 << 10) +#define LS_RECURSIVE (1 << 11) +#define LS_EXTRA_BLANK (1 << 12) +#define LS_SHOW_DIRNAME (1 << 13) +#define LS_DIR_FLAG (1 << 14) /* these files come via list_dir */ #ifndef S_ISTXT #define S_ISTXT S_ISVTX @@ -120,19 +132,25 @@ free_fileinfo(struct fileinfo *f) #define S_ISLNK(mode) (((mode) & _S_IFMT) == S_IFLNK) #endif +static size_t +block_convert(size_t blocks) +{ +#ifdef S_BLKSIZE + return blocks * S_BLKSIZE / 1024; +#else + return blocks * 512 / 1024; +#endif +} + static void -make_fileinfo(const char *filename, struct fileinfo *file, int flags) +make_fileinfo(FILE *out, const char *filename, struct fileinfo *file, int flags) { char buf[128]; int file_type = 0; struct stat *st = &file->st; file->inode = st->st_ino; -#ifdef S_BLKSIZE - file->bsize = st->st_blocks * S_BLKSIZE / 1024; -#else - file->bsize = st->st_blocks * 512 / 1024; -#endif + file->bsize = block_convert(st->st_blocks); if(S_ISDIR(st->st_mode)) { file->mode[0] = 'd'; @@ -251,7 +269,7 @@ make_fileinfo(const char *filename, struct fileinfo *file, int flags) buf[n] = '\0'; file->link = strdup(buf); } else - warn("%s: readlink", filename); + sec_fprintf2(out, "readlink(%s): %s", filename, strerror(errno)); } } @@ -443,11 +461,20 @@ lstat_file (const char *file, struct stat *sb) return lstat (file, sb); } +#define IS_DOT_DOTDOT(X) ((X)[0] == '.' && ((X)[1] == '\0' || \ + ((X)[1] == '.' && (X)[2] == '\0'))) + static void list_files(FILE *out, const char **files, int n_files, int flags) { struct fileinfo *fi; int i; + int *dirs = NULL; + size_t total_blocks = 0; + int n_print = 0; + + if(n_files > 1) + flags |= LS_SHOW_DIRNAME; fi = calloc(n_files, sizeof(*fi)); if (fi == NULL) { @@ -459,12 +486,23 @@ list_files(FILE *out, const char **files, int n_files, int flags) sec_fprintf2(out, "%s: %s\r\n", files[i], strerror(errno)); fi[i].filename = NULL; } else { - if((flags & LS_DIRS) == 0 && S_ISDIR(fi[i].st.st_mode)) { - if(n_files > 1) - sec_fprintf2(out, "%s:\r\n", files[i]); - list_dir(out, files[i], flags); - } else { - make_fileinfo(files[i], &fi[i], flags); + int include_in_list = 1; + total_blocks += block_convert(fi[i].st.st_blocks); + if(S_ISDIR(fi[i].st.st_mode)) { + if(dirs == NULL) + dirs = calloc(n_files, sizeof(*dirs)); + if(dirs == NULL) { + sec_fprintf2(out, "%s: %s\r\n", + files[i], strerror(errno)); + goto out; + } + dirs[i] = 1; + if((flags & LS_DIRS) == 0) + include_in_list = 0; + } + if(include_in_list) { + make_fileinfo(out, files[i], &fi[i], flags); + n_print++; } } } @@ -521,7 +559,9 @@ list_files(FILE *out, const char **files, int n_files, int flags) max_inode = log10(max_inode); max_bsize = log10(max_bsize); max_n_link = log10(max_n_link); - + + if(n_print > 0) + sec_fprintf2(out, "total %lu\r\n", (unsigned long)total_blocks); if(flags & LS_SORT_REVERSE) for(i = n_files - 1; i >= 0; i--) print_file(out, @@ -553,6 +593,7 @@ list_files(FILE *out, const char **files, int n_files, int flags) } else if(DISP_MODE(flags) == LS_DISP_COLUMN || DISP_MODE(flags) == LS_DISP_CROSS) { int max_len = 0; + int size_len = 0; int num_files = n_files; int columns; int j; @@ -563,14 +604,30 @@ list_files(FILE *out, const char **files, int n_files, int flags) } if(strlen(fi[i].filename) > max_len) max_len = strlen(fi[i].filename); + if(log10(fi[i].bsize) > size_len) + size_len = log10(fi[i].bsize); } - columns = 80 / (max_len + 1); /* get space between columns */ - max_len = 80 / columns; + if(num_files == 0) + goto next; + if(flags & LS_SIZE) { + columns = 80 / (size_len + 1 + max_len + 1); + max_len = 80 / columns - size_len - 1; + } else { + columns = 80 / (max_len + 1); /* get space between columns */ + max_len = 80 / columns; + } + if(flags & LS_SIZE) + sec_fprintf2(out, "total %lu\r\n", + (unsigned long)total_blocks); if(DISP_MODE(flags) == LS_DISP_CROSS) { for(i = 0, j = 0; i < n_files; i++) { if(fi[i].filename == NULL) continue; - sec_fprintf2(out, "%-*s", max_len, fi[i].filename); + if(flags & LS_SIZE) + sec_fprintf2(out, "%*u %-*s", size_len, fi[i].bsize, + max_len, fi[i].filename); + else + sec_fprintf2(out, "%-*s", max_len, fi[i].filename); j++; if(j == columns) { sec_fprintf2(out, "\r\n"); @@ -578,7 +635,7 @@ list_files(FILE *out, const char **files, int n_files, int flags) } } if(j > 0) - sec_fprintf2(out, "\r\n"); + sec_fprintf2(out, "\r\n"); } else { int skip = (num_files + columns - 1) / columns; j = 0; @@ -586,7 +643,11 @@ list_files(FILE *out, const char **files, int n_files, int flags) for(j = i; j < n_files;) { while(j < n_files && fi[j].filename == NULL) j++; - sec_fprintf2(out, "%-*s", max_len, fi[j].filename); + if(flags & LS_SIZE) + sec_fprintf2(out, "%*u %-*s", size_len, fi[j].bsize, + max_len, fi[j].filename); + else + sec_fprintf2(out, "%-*s", max_len, fi[j].filename); j += skip; } sec_fprintf2(out, "\r\n"); @@ -599,9 +660,32 @@ list_files(FILE *out, const char **files, int n_files, int flags) sec_fprintf2(out, "%s\r\n", fi[i].filename); } } + next: + if(((flags & LS_DIRS) == 0 || (flags & LS_RECURSIVE)) && dirs != NULL) { + for(i = 0; i < n_files; i++) { + if(dirs[i]) { + const char *p = strrchr(files[i], '/'); + if(p == NULL) + p = files[i]; + else + p++; + if(!(flags & LS_DIR_FLAG) || !IS_DOT_DOTDOT(p)) { + if((flags & LS_SHOW_DIRNAME)) { + if ((flags & LS_EXTRA_BLANK)) + sec_fprintf2(out, "\r\n"); + sec_fprintf2(out, "%s:\r\n", files[i]); + } + list_dir(out, files[i], flags | LS_DIRS | LS_EXTRA_BLANK); + } + } + } + } + out: for(i = 0; i < n_files; i++) free_fileinfo(&fi[i]); free(fi); + if(dirs != NULL) + free(dirs); } static void @@ -614,6 +698,22 @@ free_files (char **files, int n) free (files); } +static int +hide_file(const char *filename, int flags) +{ + if(filename[0] != '.') + return 0; + if((flags & LS_IGNORE_DOT)) + return 1; + if(filename[1] == '\0' || (filename[1] == '.' && filename[2] == '\0')) { + if((flags & LS_SHOW_ALL)) + return 0; + else + return 1; + } + return 0; +} + static void list_dir(FILE *out, const char *directory, int flags) { @@ -629,14 +729,8 @@ list_dir(FILE *out, const char *directory, int flags) while((ent = readdir(d)) != NULL) { void *tmp; - if(ent->d_name[0] == '.') { - if (flags & LS_IGNORE_DOT) - continue; - if (ent->d_name[1] == 0) /* Ignore . */ - continue; - if (ent->d_name[1] == '.' && ent->d_name[2] == 0) /* Ignore .. */ - continue; - } + if(hide_file(ent->d_name, flags)) + continue; tmp = realloc(files, (n_files + 1) * sizeof(*files)); if (tmp == NULL) { sec_fprintf2(out, "%s: out of memory\r\n", directory); @@ -655,62 +749,96 @@ list_dir(FILE *out, const char *directory, int flags) ++n_files; } closedir(d); - list_files(out, (const char**)files, n_files, flags | LS_DIRS); + list_files(out, (const char**)files, n_files, flags | LS_DIR_FLAG); +} + +static int +parse_flags(const char *options) +{ +#ifdef TEST + int flags = LS_SORT_NAME | LS_IGNORE_DOT | LS_DISP_COLUMN; +#else + int flags = LS_SORT_NAME | LS_IGNORE_DOT | LS_DISP_LONG; +#endif + + const char *p; + if(options == NULL || *options != '-') + return flags; + for(p = options + 1; *p; p++) { + switch(*p) { + case '1': + flags = (flags & ~LS_DISP_MODE); + break; + case 'a': + flags |= LS_SHOW_ALL; + /*FALLTHROUGH*/ + case 'A': + flags &= ~LS_IGNORE_DOT; + break; + case 'C': + flags = (flags & ~LS_DISP_MODE) | LS_DISP_COLUMN; + break; + case 'd': + flags |= LS_DIRS; + break; + case 'f': + flags = (flags & ~LS_SORT_MODE); + break; + case 'F': + flags |= LS_TYPE; + break; + case 'i': + flags |= LS_INODE; + break; + case 'l': + flags = (flags & ~LS_DISP_MODE) | LS_DISP_LONG; + break; + case 'r': + flags |= LS_SORT_REVERSE; + break; + case 'R': + flags |= LS_RECURSIVE; + break; + case 's': + flags |= LS_SIZE; + break; + case 'S': + flags = (flags & ~LS_SORT_MODE) | LS_SORT_SIZE; + break; + case 't': + flags = (flags & ~LS_SORT_MODE) | LS_SORT_MTIME; + break; + case 'x': + flags = (flags & ~LS_DISP_MODE) | LS_DISP_CROSS; + break; + /* these are a bunch of unimplemented flags from BSD ls */ + case 'k': /* display sizes in kB */ + case 'c': /* last change time */ + case 'L': /* list symlink target */ + case 'm': /* stream output */ + case 'o': /* BSD file flags */ + case 'p': /* display / after directories */ + case 'q': /* print non-graphic characters */ + case 'u': /* use last access time */ + case 'T': /* display complete time */ + case 'W': /* include whiteouts */ + break; + } + } + return flags; } void builtin_ls(FILE *out, const char *file) { - int flags = LS_SORT_NAME | LS_IGNORE_DOT | LS_DISP_LONG; + int flags; if(*file == '-') { - const char *p; - for(p = file + 1; *p; p++) { - switch(*p) { - case '1': - flags = (flags & ~LS_DISP_MODE); - break; - case 'a': - case 'A': - flags &= ~LS_IGNORE_DOT; - break; - case 'C': - flags = (flags & ~LS_DISP_MODE) | LS_DISP_COLUMN; - break; - case 'd': - flags |= LS_DIRS; - break; - case 'f': - flags = (flags & ~LS_SORT_MODE); - break; - case 'F': - flags |= LS_TYPE; - break; - case 'i': - flags |= LS_INODE; - break; - case 'l': - flags = (flags & ~LS_DISP_MODE) | LS_DISP_LONG; - break; - case 't': - flags = (flags & ~LS_SORT_MODE) | LS_SORT_MTIME; - break; - case 's': - flags |= LS_SIZE; - break; - case 'S': - flags = (flags & ~LS_SORT_MODE) | LS_SORT_SIZE; - break; - case 'r': - flags |= LS_SORT_REVERSE; - break; - case 'x': - flags = (flags & ~LS_DISP_MODE) | LS_DISP_CROSS; - break; - } - } + flags = parse_flags(file); file = "."; - } + } else + flags = parse_flags(""); + list_files(out, &file, 1, flags); sec_fflush(out); } diff --git a/crypto/heimdal/appl/ftp/ftpd/popen.c b/crypto/heimdal/appl/ftp/ftpd/popen.c index 52c88243e710..fb43922f82f6 100644 --- a/crypto/heimdal/appl/ftp/ftpd/popen.c +++ b/crypto/heimdal/appl/ftp/ftpd/popen.c @@ -37,7 +37,7 @@ #ifdef HAVE_CONFIG_H #include <config.h> -RCSID("$Id: popen.c,v 1.24 2001/03/26 11:41:02 assar Exp $"); +RCSID("$Id: popen.c,v 1.25 2001/06/19 10:00:25 assar Exp $"); #endif #include <sys/types.h> @@ -139,7 +139,13 @@ ftpd_popen(char *program, char *type, int do_stderr, int no_glob) for (gargc = argc = 1; argv[argc] && gargc < MAXGLOBS - 1; argc++) { glob_t gl; int flags = GLOB_BRACE|GLOB_NOCHECK|GLOB_QUOTE|GLOB_TILDE - | GLOB_LIMIT; + | +#ifdef GLOB_MAXPATH + GLOB_MAXPATH +#else + GLOB_LIMIT +#endif + ; memset(&gl, 0, sizeof(gl)); if (no_glob || glob(argv[argc], flags, NULL, &gl)) |