From b6a1268714671904e96a49b88680dc3ff07aaa1c Mon Sep 17 00:00:00 2001 From: Kozlov Dmitry Date: Wed, 6 Oct 2010 16:43:14 +0400 Subject: project cleanup and prepare to release --- pppd_plugin/src/Makefile.am | 13 - pppd_plugin/src/Makefile.in | 528 ------------------- pppd_plugin/src/dirutil.c | 68 --- pppd_plugin/src/dirutil.h | 14 - pppd_plugin/src/if_pppox.h | 1 - pppd_plugin/src/orckit_quirks.c | 86 --- pppd_plugin/src/orckit_quirks.h | 27 - pppd_plugin/src/pppd-pptp.8 | 71 --- pppd_plugin/src/pppd/cbcp.h | 26 - pppd_plugin/src/pppd/ccp.h | 52 -- pppd_plugin/src/pppd/chap-md5.h | 31 -- pppd_plugin/src/pppd/chap-new.h | 130 ----- pppd_plugin/src/pppd/chap_ms.h | 122 ----- pppd_plugin/src/pppd/eap.h | 158 ------ pppd_plugin/src/pppd/ecp.h | 45 -- pppd_plugin/src/pppd/eui64.h | 114 ---- pppd_plugin/src/pppd/fsm.h | 168 ------ pppd_plugin/src/pppd/ipcp.h | 96 ---- pppd_plugin/src/pppd/ipv6cp.h | 171 ------ pppd_plugin/src/pppd/ipxcp.h | 94 ---- pppd_plugin/src/pppd/lcp.h | 119 ----- pppd_plugin/src/pppd/magic.h | 49 -- pppd_plugin/src/pppd/md4.h | 64 --- pppd_plugin/src/pppd/md5.h | 65 --- pppd_plugin/src/pppd/pathnames.h | 59 --- pppd_plugin/src/pppd/pppcrypt.h | 48 -- pppd_plugin/src/pppd/pppd.h | 904 -------------------------------- pppd_plugin/src/pppd/sha1.h | 31 -- pppd_plugin/src/pppd/spinlock.h | 59 --- pppd_plugin/src/pppd/tdb.h | 164 ------ pppd_plugin/src/pppd/upap.h | 110 ---- pppd_plugin/src/pptp.c | 344 ------------ pppd_plugin/src/pptp_callmgr.c | 403 -------------- pppd_plugin/src/pptp_callmgr.h | 13 - pppd_plugin/src/pptp_ctrl.c | 1077 -------------------------------------- pppd_plugin/src/pptp_ctrl.h | 57 -- pppd_plugin/src/pptp_msg.h | 303 ----------- pppd_plugin/src/pptp_options.h | 41 -- pppd_plugin/src/pptp_quirks.c | 54 -- pppd_plugin/src/pptp_quirks.h | 59 --- pppd_plugin/src/util.c | 158 ------ pppd_plugin/src/util.h | 54 -- pppd_plugin/src/vector.c | 209 -------- pppd_plugin/src/vector.h | 31 -- 44 files changed, 6490 deletions(-) delete mode 100644 pppd_plugin/src/Makefile.am delete mode 100644 pppd_plugin/src/Makefile.in delete mode 100644 pppd_plugin/src/dirutil.c delete mode 100644 pppd_plugin/src/dirutil.h delete mode 120000 pppd_plugin/src/if_pppox.h delete mode 100644 pppd_plugin/src/orckit_quirks.c delete mode 100644 pppd_plugin/src/orckit_quirks.h delete mode 100644 pppd_plugin/src/pppd-pptp.8 delete mode 100644 pppd_plugin/src/pppd/cbcp.h delete mode 100644 pppd_plugin/src/pppd/ccp.h delete mode 100644 pppd_plugin/src/pppd/chap-md5.h delete mode 100644 pppd_plugin/src/pppd/chap-new.h delete mode 100644 pppd_plugin/src/pppd/chap_ms.h delete mode 100644 pppd_plugin/src/pppd/eap.h delete mode 100644 pppd_plugin/src/pppd/ecp.h delete mode 100644 pppd_plugin/src/pppd/eui64.h delete mode 100644 pppd_plugin/src/pppd/fsm.h delete mode 100644 pppd_plugin/src/pppd/ipcp.h delete mode 100644 pppd_plugin/src/pppd/ipv6cp.h delete mode 100644 pppd_plugin/src/pppd/ipxcp.h delete mode 100644 pppd_plugin/src/pppd/lcp.h delete mode 100644 pppd_plugin/src/pppd/magic.h delete mode 100644 pppd_plugin/src/pppd/md4.h delete mode 100644 pppd_plugin/src/pppd/md5.h delete mode 100644 pppd_plugin/src/pppd/pathnames.h delete mode 100644 pppd_plugin/src/pppd/pppcrypt.h delete mode 100644 pppd_plugin/src/pppd/pppd.h delete mode 100644 pppd_plugin/src/pppd/sha1.h delete mode 100644 pppd_plugin/src/pppd/spinlock.h delete mode 100644 pppd_plugin/src/pppd/tdb.h delete mode 100644 pppd_plugin/src/pppd/upap.h delete mode 100644 pppd_plugin/src/pptp.c delete mode 100644 pppd_plugin/src/pptp_callmgr.c delete mode 100644 pppd_plugin/src/pptp_callmgr.h delete mode 100644 pppd_plugin/src/pptp_ctrl.c delete mode 100644 pppd_plugin/src/pptp_ctrl.h delete mode 100644 pppd_plugin/src/pptp_msg.h delete mode 100644 pppd_plugin/src/pptp_options.h delete mode 100644 pppd_plugin/src/pptp_quirks.c delete mode 100644 pppd_plugin/src/pptp_quirks.h delete mode 100644 pppd_plugin/src/util.c delete mode 100644 pppd_plugin/src/util.h delete mode 100644 pppd_plugin/src/vector.c delete mode 100644 pppd_plugin/src/vector.h (limited to 'pppd_plugin/src') diff --git a/pppd_plugin/src/Makefile.am b/pppd_plugin/src/Makefile.am deleted file mode 100644 index 6c4282c..0000000 --- a/pppd_plugin/src/Makefile.am +++ /dev/null @@ -1,13 +0,0 @@ - -# set the include path found by configure -INCLUDES = $(all_includes) - -# the library search path. -lib_LTLIBRARIES = pptp.la -pptp_la_LDFLAGS = -module -pptp_la_SOURCES = pptp.c pptp_callmgr.c pptp_ctrl.c util.c vector.c \ - dirutil.c pptp_quirks.c orckit_quirks.c -noinst_HEADERS = pptp_callmgr.h pptp_ctrl.h util.h vector.h pptp_options.h \ - dirutil.h pptp_quirks.h orckit_quirks.h if_pppox.h -AM_CFLAGS = -Wall -man_MANS = pppd-pptp.8 diff --git a/pppd_plugin/src/Makefile.in b/pppd_plugin/src/Makefile.in deleted file mode 100644 index 79d6101..0000000 --- a/pppd_plugin/src/Makefile.in +++ /dev/null @@ -1,528 +0,0 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ - - -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ -VPATH = @srcdir@ -pkgdatadir = $(datadir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = .. -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = @build@ -host_triplet = @host@ -subdir = src -DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \ - $(srcdir)/Makefile.in -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/configure.in -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs -CONFIG_HEADER = $(top_builddir)/config.h -CONFIG_CLEAN_FILES = -am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; -am__vpath_adj = case $$p in \ - $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ - *) f=$$p;; \ - esac; -am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; -am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(man8dir)" -libLTLIBRARIES_INSTALL = $(INSTALL) -LTLIBRARIES = $(lib_LTLIBRARIES) -pptp_la_LIBADD = -am_pptp_la_OBJECTS = pptp.lo pptp_callmgr.lo pptp_ctrl.lo util.lo \ - vector.lo dirutil.lo pptp_quirks.lo orckit_quirks.lo -pptp_la_OBJECTS = $(am_pptp_la_OBJECTS) -DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) -depcomp = $(SHELL) $(top_srcdir)/depcomp -am__depfiles_maybe = depfiles -COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ - $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CFLAGS) $(CFLAGS) -CCLD = $(CC) -LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(AM_LDFLAGS) $(LDFLAGS) -o $@ -SOURCES = $(pptp_la_SOURCES) -DIST_SOURCES = $(pptp_la_SOURCES) -man8dir = $(mandir)/man8 -NROFF = nroff -MANS = $(man_MANS) -HEADERS = $(noinst_HEADERS) -ETAGS = etags -CTAGS = ctags -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ -AMTAR = @AMTAR@ -AR = @AR@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CC = @CC@ -CCDEPMODE = @CCDEPMODE@ -CFLAGS = @CFLAGS@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CXX = @CXX@ -CXXCPP = @CXXCPP@ -CXXDEPMODE = @CXXDEPMODE@ -CXXFLAGS = @CXXFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -ECHO = @ECHO@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -F77 = @F77@ -FFLAGS = @FFLAGS@ -GREP = @GREP@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LDFLAGS = @LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -MAKEINFO = @MAKEINFO@ -OBJEXT = @OBJEXT@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -RANLIB = @RANLIB@ -SED = @SED@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -STRIP = @STRIP@ -VERSION = @VERSION@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_CXX = @ac_ct_CXX@ -ac_ct_F77 = @ac_ct_F77@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -am__tar = @am__tar@ -am__untar = @am__untar@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_os = @build_os@ -build_vendor = @build_vendor@ -datadir = @datadir@ -datarootdir = @datarootdir@ -docdir = @docdir@ -dvidir = @dvidir@ -exec_prefix = @exec_prefix@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -htmldir = @htmldir@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localedir = @localedir@ -localstatedir = @localstatedir@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -psdir = @psdir@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -sysconfdir = @sysconfdir@ -target_alias = @target_alias@ - -# set the include path found by configure -INCLUDES = $(all_includes) - -# the library search path. -lib_LTLIBRARIES = pptp.la -pptp_la_LDFLAGS = -module -pptp_la_SOURCES = pptp.c pptp_callmgr.c pptp_ctrl.c util.c vector.c \ - dirutil.c pptp_quirks.c orckit_quirks.c - -noinst_HEADERS = pptp_callmgr.h pptp_ctrl.h util.h vector.h pptp_options.h \ - dirutil.h pptp_quirks.h orckit_quirks.h if_pppox.h - -AM_CFLAGS = -Wall -man_MANS = pppd-pptp.8 -all: all-am - -.SUFFIXES: -.SUFFIXES: .c .lo .o .obj -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile'; \ - cd $(top_srcdir) && \ - $(AUTOMAKE) --gnu src/Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -install-libLTLIBRARIES: $(lib_LTLIBRARIES) - @$(NORMAL_INSTALL) - test -z "$(libdir)" || $(mkdir_p) "$(DESTDIR)$(libdir)" - @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ - if test -f $$p; then \ - f=$(am__strip_dir) \ - echo " $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \ - $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libdir)/$$f"; \ - else :; fi; \ - done - -uninstall-libLTLIBRARIES: - @$(NORMAL_UNINSTALL) - @set -x; list='$(lib_LTLIBRARIES)'; for p in $$list; do \ - p=$(am__strip_dir) \ - echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \ - $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \ - done - -clean-libLTLIBRARIES: - -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) - @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ - dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ - test "$$dir" != "$$p" || dir=.; \ - echo "rm -f \"$${dir}/so_locations\""; \ - rm -f "$${dir}/so_locations"; \ - done -pptp.la: $(pptp_la_OBJECTS) $(pptp_la_DEPENDENCIES) - $(LINK) -rpath $(libdir) $(pptp_la_LDFLAGS) $(pptp_la_OBJECTS) $(pptp_la_LIBADD) $(LIBS) - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -distclean-compile: - -rm -f *.tab.c - -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dirutil.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/orckit_quirks.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pptp.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pptp_callmgr.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pptp_ctrl.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pptp_quirks.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/util.Plo@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vector.Plo@am__quote@ - -.c.o: -@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(COMPILE) -c $< - -.c.obj: -@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` - -.c.lo: -@am__fastdepCC_TRUE@ if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs - -distclean-libtool: - -rm -f libtool -uninstall-info-am: -install-man8: $(man8_MANS) $(man_MANS) - @$(NORMAL_INSTALL) - test -z "$(man8dir)" || $(mkdir_p) "$(DESTDIR)$(man8dir)" - @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; \ - done; \ - for i in $$list; do \ - if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \ - else file=$$i; fi; \ - ext=`echo $$i | sed -e 's/^.*\\.//'`; \ - case "$$ext" in \ - 8*) ;; \ - *) ext='8' ;; \ - esac; \ - inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ - inst=`echo $$inst | sed -e 's/^.*\///'`; \ - inst=`echo $$inst | sed '$(transform)'`.$$ext; \ - echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'"; \ - $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man8dir)/$$inst"; \ - done -uninstall-man8: - @$(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; \ - done; \ - for i in $$list; do \ - ext=`echo $$i | sed -e 's/^.*\\.//'`; \ - case "$$ext" in \ - 8*) ;; \ - *) ext='8' ;; \ - esac; \ - inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ - inst=`echo $$inst | sed -e 's/^.*\///'`; \ - inst=`echo $$inst | sed '$(transform)'`.$$ext; \ - echo " rm -f '$(DESTDIR)$(man8dir)/$$inst'"; \ - rm -f "$(DESTDIR)$(man8dir)/$$inst"; \ - done - -ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - mkid -fID $$unique -tags: TAGS - -TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - tags=; \ - here=`pwd`; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ - test -n "$$unique" || unique=$$empty_fix; \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$tags $$unique; \ - fi -ctags: CTAGS -CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - tags=; \ - here=`pwd`; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - test -z "$(CTAGS_ARGS)$$tags$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$tags $$unique - -GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ - && cd $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) $$here - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ - if test -d $$d/$$file; then \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ - fi; \ - cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ - else \ - test -f $(distdir)/$$file \ - || cp -p $$d/$$file $(distdir)/$$file \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-am -all-am: Makefile $(LTLIBRARIES) $(MANS) $(HEADERS) -installdirs: - for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(man8dir)"; do \ - test -z "$$dir" || $(mkdir_p) "$$dir"; \ - done -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -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)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-am - -clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ - mostlyclean-am - -distclean: distclean-am - -rm -rf ./$(DEPDIR) - -rm -f Makefile -distclean-am: clean-am distclean-compile distclean-generic \ - distclean-libtool distclean-tags - -dvi: dvi-am - -dvi-am: - -html: html-am - -info: info-am - -info-am: - -install-data-am: install-man - -install-exec-am: install-libLTLIBRARIES - -install-info: install-info-am - -install-man: install-man8 - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -rf ./$(DEPDIR) - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-compile mostlyclean-generic \ - mostlyclean-libtool - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: uninstall-info-am uninstall-libLTLIBRARIES uninstall-man - -uninstall-man: uninstall-man8 - -.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ - clean-libLTLIBRARIES clean-libtool ctags distclean \ - distclean-compile distclean-generic distclean-libtool \ - distclean-tags distdir dvi dvi-am html html-am info info-am \ - install install-am install-data install-data-am install-exec \ - install-exec-am install-info install-info-am \ - install-libLTLIBRARIES install-man install-man8 install-strip \ - installcheck installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-compile \ - mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ - tags uninstall uninstall-am uninstall-info-am \ - uninstall-libLTLIBRARIES uninstall-man uninstall-man8 - -# 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/pppd_plugin/src/dirutil.c b/pppd_plugin/src/dirutil.c deleted file mode 100644 index e7b1a77..0000000 --- a/pppd_plugin/src/dirutil.c +++ /dev/null @@ -1,68 +0,0 @@ -/* dirutil.c ... directory utilities. - * C. Scott Ananian - * - * $Id: dirutil.c,v 1.2 2003/06/17 17:25:47 reink Exp $ - */ - -#include -#include -#include -#include -#include -#include "dirutil.h" - -/* Returned malloc'ed string representing basename */ -char *basenamex(char *pathname) -{ - char *dup = strdup(pathname); - char *ptr = strrchr(stripslash(dup), '/'); - if (ptr == NULL) return dup; - ptr = strdup(ptr+1); - free(dup); - return ptr; -} - -/* Return malloc'ed string representing directory name (no trailing slash) */ -char *dirnamex(char *pathname) -{ - char *dup = strdup(pathname); - char *ptr = strrchr(stripslash(dup), '/'); - if (ptr == NULL) { free(dup); return strdup("."); } - if (ptr == dup && dup[0] == '/') ptr++; - *ptr = '\0'; - return dup; -} - -/* In-place modify a string to remove trailing slashes. Returns arg. - * stripslash("/") returns "/"; - */ -char *stripslash(char *pathname) { - int len = strlen(pathname); - while (len > 1 && pathname[len - 1] == '/') - pathname[--len] = '\0'; - return pathname; -} - -/* ensure dirname exists, creating it if necessary. */ -int make_valid_path(char *dir, mode_t mode) -{ - struct stat st; - char *tmp = NULL, *path = stripslash(strdup(dir)); - int retval; - if (stat(path, &st) == 0) { /* file exists */ - if (S_ISDIR(st.st_mode)) { retval = 1; goto end; } - else { retval = 0; goto end; } /* not a directory. Oops. */ - } - /* Directory doesn't exist. Let's make it. */ - /* Make parent first. */ - if (!make_valid_path(tmp = dirnamex(path), mode)) { retval = 0; goto end; } - /* Now make this 'un. */ - if (mkdir(path, mode) < 0) { retval = 0; goto end; } - /* Success. */ - retval = 1; - -end: - if (tmp != NULL) free(tmp); - if (path != NULL) free(path); - return retval; -} diff --git a/pppd_plugin/src/dirutil.h b/pppd_plugin/src/dirutil.h deleted file mode 100644 index 4c9aa87..0000000 --- a/pppd_plugin/src/dirutil.h +++ /dev/null @@ -1,14 +0,0 @@ -/* dirutil.h ... directory utilities. - * C. Scott Ananian - * - * $Id: dirutil.h,v 1.1.1.1 2000/12/23 08:19:51 scott Exp $ - */ - -/* Returned malloc'ed string representing basename */ -char *basenamex(char *pathname); -/* Return malloc'ed string representing directory name (no trailing slash) */ -char *dirnamex(char *pathname); -/* In-place modify a string to remove trailing slashes. Returns arg. */ -char *stripslash(char *pathname); -/* ensure dirname exists, creating it if necessary. */ -int make_valid_path(char *dirname, mode_t mode); diff --git a/pppd_plugin/src/if_pppox.h b/pppd_plugin/src/if_pppox.h deleted file mode 120000 index 48a1663..0000000 --- a/pppd_plugin/src/if_pppox.h +++ /dev/null @@ -1 +0,0 @@ -../../kernel/driver/if_pppox.h \ No newline at end of file diff --git a/pppd_plugin/src/orckit_quirks.c b/pppd_plugin/src/orckit_quirks.c deleted file mode 100644 index 1d03737..0000000 --- a/pppd_plugin/src/orckit_quirks.c +++ /dev/null @@ -1,86 +0,0 @@ -/* orckit_quirks.c ...... fix quirks in orckit adsl modems - * mulix - * - * $Id: orckit_quirks.c,v 1.3 2002/03/01 01:23:36 quozl Exp $ - */ - -#include -#include -#include -#include "pptp_msg.h" -#include "pptp_options.h" -#include "pptp_ctrl.h" -#include "util.h" - - - -/* return 0 on success, non zero otherwise */ -int -orckit_atur3_build_hook(struct pptp_out_call_rqst* packet) -{ - unsigned int name_length = 10; - - struct pptp_out_call_rqst fixed_packet = { - PPTP_HEADER_CTRL(PPTP_OUT_CALL_RQST), - 0, /* hton16(call->callid) */ - 0, /* hton16(call->sernum) */ - hton32(PPTP_BPS_MIN), hton32(PPTP_BPS_MAX), - hton32(PPTP_BEARER_DIGITAL), hton32(PPTP_FRAME_ANY), - hton16(PPTP_WINDOW), 0, hton16(name_length), 0, - {'R','E','L','A','Y','_','P','P','P','1',0}, {0} - }; - - if (!packet) - return -1; - - memcpy(packet, &fixed_packet, sizeof(*packet)); - - return 0; -} - -/* return 0 on success, non zero otherwise */ -int -orckit_atur3_set_link_hook(struct pptp_set_link_info* packet, - int peer_call_id) -{ - struct pptp_set_link_info fixed_packet = { - PPTP_HEADER_CTRL(PPTP_SET_LINK_INFO), - hton16(peer_call_id), - 0, - 0xffffffff, - 0xffffffff}; - - if (!packet) - return -1; - - memcpy(packet, &fixed_packet, sizeof(*packet)); - return 0; -} - -/* return 0 on success, non 0 otherwise */ -int -orckit_atur3_start_ctrl_conn_hook(struct pptp_start_ctrl_conn* packet) -{ - struct pptp_start_ctrl_conn fixed_packet = { - {0}, /* we'll set the header later */ - hton16(PPTP_VERSION), 0, 0, - hton32(PPTP_FRAME_ASYNC), hton32(PPTP_BEARER_ANALOG), - hton16(0) /* max channels */, - hton16(0x6021), - {'R','E','L','A','Y','_','P','P','P','1',0}, /* hostname */ - {'M','S',' ','W','i','n',' ','N','T',0} /* vendor */ - }; - - if (!packet) - return -1; - - /* grab the header from the original packet, since we dont - know if this is a request or a reply */ - memcpy(&fixed_packet.header, &packet->header, sizeof(struct pptp_header)); - - /* and now overwrite the full packet, effectively preserving the header */ - memcpy(packet, &fixed_packet, sizeof(*packet)); - return 0; -} - - diff --git a/pppd_plugin/src/orckit_quirks.h b/pppd_plugin/src/orckit_quirks.h deleted file mode 100644 index ad0193d..0000000 --- a/pppd_plugin/src/orckit_quirks.h +++ /dev/null @@ -1,27 +0,0 @@ -/* orckit_quirks.h ...... fix quirks in orckit adsl modems - * mulix - * - * $Id: orckit_quirks.h,v 1.2 2001/11/23 03:42:51 quozl Exp $ - */ - -#ifndef INC_ORCKIT_QUIRKS_H_ -#define INC_ORCKIT_QUIRKS_H_ - -#include "pptp_options.h" -#include "pptp_ctrl.h" -#include "pptp_msg.h" - -/* return 0 on success, non zero otherwise */ -int -orckit_atur3_build_hook(struct pptp_out_call_rqst* packt); - -/* return 0 on success, non zero otherwise */ -int -orckit_atur3_set_link_hook(struct pptp_set_link_info* packet, - int peer_call_id); - -/* return 0 on success, non zero otherwise */ -int -orckit_atur3_start_ctrl_conn_hook(struct pptp_start_ctrl_conn* packet); - -#endif /* INC_ORCKIT_QUIRKS_H_ */ diff --git a/pppd_plugin/src/pppd-pptp.8 b/pppd_plugin/src/pppd-pptp.8 deleted file mode 100644 index 85b31b2..0000000 --- a/pppd_plugin/src/pppd-pptp.8 +++ /dev/null @@ -1,71 +0,0 @@ -.\" manual page [] for ACCEL-PPTP plugin for pppd 2.4 -.\" $Id: pppd-pptp.8,v 1.0 2007/10/17 13:27:17 kad Exp $ -.\" SH section heading -.\" SS subsection heading -.\" LP paragraph -.\" IP indented paragraph -.\" TP hanging label -.TH PPPD-PPTP 8 -.SH NAME -pptp.so \- PPTP VPN plugin for -.BR pppd (8) -.SH SYNOPSIS -.B pppd -[ -.I options -] -plugin pptp.so -.SH DESCRIPTION -.LP -The PPTP plugin for pppd performs interaction with pptp kernel module -and has built-in call manager (client part of PPTP). -It pasees necessary paremeters from \fIoptions\fR into kernel module -to configure ppp-pptp channel. If it runs in client mode, then additionally -call manager starts up. PPTPD daemon automaticaly invokes this plugin -in server mode and passes necessary options, so additional configuration -is not needed. - -.SH OPTIONS for client mode -The PPTP plugin introduces one additional pppd option: -.TP -.BI "pptp_server " server " (required)" -Specifies ip address or hostname of pptp server. -.TP -.BI "pptp_window " packets " (optional)" -The amount of sliding window size. -Set to 0 to turn off sliding window. - to 3-10 for low speed connections. - to >10 for hi speed connections. -.TP -.BI "pptp_phone " phone " (optional)" -The phone string that sended to pptp server. -.TP -.BI "pptp_timeout " miliseconds " (optional)" -Specifies timeout for waiting "ack" packet from server. - -.SH USAGE -Sample configuration file: -.nf -plugin "pptp.so" -pptp_server 192.168.0.1 -pptp_window 50 -name myname -remotename pptp -noauth -refuse-eap -refuse-chap -refuse-mschap -nobsdcomp -nodeflate -novj -novjccomp -require-mppe-128 -lcp-echo-interval 20 -lcp-echo-failure 3 -.fi - -.SH SEE ALSO -.BR pppd (8) " " pptpd (8) " " pptpd.conf (5) - -.SH AUTHOR -xeb xeb@mail.ru diff --git a/pppd_plugin/src/pppd/cbcp.h b/pppd_plugin/src/pppd/cbcp.h deleted file mode 100644 index c2ab3f6..0000000 --- a/pppd_plugin/src/pppd/cbcp.h +++ /dev/null @@ -1,26 +0,0 @@ -#ifndef CBCP_H -#define CBCP_H - -typedef struct cbcp_state { - int us_unit; /* Interface unit number */ - u_char us_id; /* Current id */ - u_char us_allowed; - int us_type; - char *us_number; /* Telefone Number */ -} cbcp_state; - -extern cbcp_state cbcp[]; - -extern struct protent cbcp_protent; - -#define CBCP_MINLEN 4 - -#define CBCP_REQ 1 -#define CBCP_RESP 2 -#define CBCP_ACK 3 - -#define CB_CONF_NO 1 -#define CB_CONF_USER 2 -#define CB_CONF_ADMIN 3 -#define CB_CONF_LIST 4 -#endif diff --git a/pppd_plugin/src/pppd/ccp.h b/pppd_plugin/src/pppd/ccp.h deleted file mode 100644 index 6f4a2fe..0000000 --- a/pppd_plugin/src/pppd/ccp.h +++ /dev/null @@ -1,52 +0,0 @@ -/* - * ccp.h - Definitions for PPP Compression Control Protocol. - * - * Copyright (c) 1994-2002 Paul Mackerras. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. The name(s) of the authors of this software must not be used to - * endorse or promote products derived from this software without - * prior written permission. - * - * 3. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by Paul Mackerras - * ". - * - * THE AUTHORS OF THIS SOFTWARE DISCLAIM ALL WARRANTIES WITH REGARD TO - * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY - * AND FITNESS, IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY - * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN - * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING - * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - * - * $Id: ccp.h,v 1.12 2004/11/04 10:02:26 paulus Exp $ - */ - -typedef struct ccp_options { - bool bsd_compress; /* do BSD Compress? */ - bool deflate; /* do Deflate? */ - bool predictor_1; /* do Predictor-1? */ - bool predictor_2; /* do Predictor-2? */ - bool deflate_correct; /* use correct code for deflate? */ - bool deflate_draft; /* use draft RFC code for deflate? */ - bool mppe; /* do MPPE? */ - u_short bsd_bits; /* # bits/code for BSD Compress */ - u_short deflate_size; /* lg(window size) for Deflate */ - short method; /* code for chosen compression method */ -} ccp_options; - -extern fsm ccp_fsm[]; -extern ccp_options ccp_wantoptions[]; -extern ccp_options ccp_gotoptions[]; -extern ccp_options ccp_allowoptions[]; -extern ccp_options ccp_hisoptions[]; - -extern struct protent ccp_protent; diff --git a/pppd_plugin/src/pppd/chap-md5.h b/pppd_plugin/src/pppd/chap-md5.h deleted file mode 100644 index 30d0658..0000000 --- a/pppd_plugin/src/pppd/chap-md5.h +++ /dev/null @@ -1,31 +0,0 @@ -/* - * chap-md5.h - New CHAP/MD5 implementation. - * - * Copyright (c) 2003 Paul Mackerras. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. The name(s) of the authors of this software must not be used to - * endorse or promote products derived from this software without - * prior written permission. - * - * 3. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by Paul Mackerras - * ". - * - * THE AUTHORS OF THIS SOFTWARE DISCLAIM ALL WARRANTIES WITH REGARD TO - * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY - * AND FITNESS, IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY - * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN - * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING - * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -extern void chap_md5_init(void); diff --git a/pppd_plugin/src/pppd/chap-new.h b/pppd_plugin/src/pppd/chap-new.h deleted file mode 100644 index 48235d4..0000000 --- a/pppd_plugin/src/pppd/chap-new.h +++ /dev/null @@ -1,130 +0,0 @@ -/* - * chap-new.c - New CHAP implementation. - * - * Copyright (c) 2003 Paul Mackerras. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. The name(s) of the authors of this software must not be used to - * endorse or promote products derived from this software without - * prior written permission. - * - * 3. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by Paul Mackerras - * ". - * - * THE AUTHORS OF THIS SOFTWARE DISCLAIM ALL WARRANTIES WITH REGARD TO - * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY - * AND FITNESS, IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY - * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN - * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING - * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -/* - * CHAP packets begin with a standard header with code, id, len (2 bytes). - */ -#define CHAP_HDRLEN 4 - -/* - * Values for the code field. - */ -#define CHAP_CHALLENGE 1 -#define CHAP_RESPONSE 2 -#define CHAP_SUCCESS 3 -#define CHAP_FAILURE 4 - -/* - * CHAP digest codes. - */ -#define CHAP_MD5 5 -#define CHAP_MICROSOFT 0x80 -#define CHAP_MICROSOFT_V2 0x81 - -/* - * Semi-arbitrary limits on challenge and response fields. - */ -#define MAX_CHALLENGE_LEN 64 -#define MAX_RESPONSE_LEN 64 - -/* bitmask of supported algorithms */ -#define MDTYPE_MICROSOFT_V2 0x1 -#define MDTYPE_MICROSOFT 0x2 -#define MDTYPE_MD5 0x4 -#define MDTYPE_NONE 0 - -/* hashes supported by this instance of pppd */ -extern int chap_mdtype_all; - -/* Return the digest alg. ID for the most preferred digest type. */ -#define CHAP_DIGEST(mdtype) \ - ((mdtype) & MDTYPE_MD5)? CHAP_MD5: \ - ((mdtype) & MDTYPE_MICROSOFT_V2)? CHAP_MICROSOFT_V2: \ - ((mdtype) & MDTYPE_MICROSOFT)? CHAP_MICROSOFT: \ - 0 - -/* Return the bit flag (lsb set) for our most preferred digest type. */ -#define CHAP_MDTYPE(mdtype) ((mdtype) ^ ((mdtype) - 1)) & (mdtype) - -/* Return the bit flag for a given digest algorithm ID. */ -#define CHAP_MDTYPE_D(digest) \ - ((digest) == CHAP_MICROSOFT_V2)? MDTYPE_MICROSOFT_V2: \ - ((digest) == CHAP_MICROSOFT)? MDTYPE_MICROSOFT: \ - ((digest) == CHAP_MD5)? MDTYPE_MD5: \ - 0 - -/* Can we do the requested digest? */ -#define CHAP_CANDIGEST(mdtype, digest) \ - ((digest) == CHAP_MICROSOFT_V2)? (mdtype) & MDTYPE_MICROSOFT_V2: \ - ((digest) == CHAP_MICROSOFT)? (mdtype) & MDTYPE_MICROSOFT: \ - ((digest) == CHAP_MD5)? (mdtype) & MDTYPE_MD5: \ - 0 - -/* - * The code for each digest type has to supply one of these. - */ -struct chap_digest_type { - int code; - - /* - * Note: challenge and response arguments below are formatted as - * a length byte followed by the actual challenge/response data. - */ - void (*generate_challenge)(unsigned char *challenge); - int (*verify_response)(int id, char *name, - unsigned char *secret, int secret_len, - unsigned char *challenge, unsigned char *response, - char *message, int message_space); - void (*make_response)(unsigned char *response, int id, char *our_name, - unsigned char *challenge, char *secret, int secret_len, - unsigned char *priv); - int (*check_success)(unsigned char *pkt, int len, unsigned char *priv); - void (*handle_failure)(unsigned char *pkt, int len); - - struct chap_digest_type *next; -}; - -/* Hook for a plugin to validate CHAP challenge */ -extern int (*chap_verify_hook)(char *name, char *ourname, int id, - struct chap_digest_type *digest, - unsigned char *challenge, unsigned char *response, - char *message, int message_space); - -/* Called by digest code to register a digest type */ -extern void chap_register_digest(struct chap_digest_type *); - -/* Called by authentication code to start authenticating the peer. */ -extern void chap_auth_peer(int unit, char *our_name, int digest_code); - -/* Called by auth. code to start authenticating us to the peer. */ -extern void chap_auth_with_peer(int unit, char *our_name, int digest_code); - -/* Represents the CHAP protocol to the main pppd code */ -extern struct protent chap_protent; diff --git a/pppd_plugin/src/pppd/chap_ms.h b/pppd_plugin/src/pppd/chap_ms.h deleted file mode 100644 index 168c0be..0000000 --- a/pppd_plugin/src/pppd/chap_ms.h +++ /dev/null @@ -1,122 +0,0 @@ -/* - * chap_ms.h - Challenge Handshake Authentication Protocol definitions. - * - * Copyright (c) 1995 Eric Rosenquist. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The name(s) of the authors of this software must not be used to - * endorse or promote products derived from this software without - * prior written permission. - * - * THE AUTHORS OF THIS SOFTWARE DISCLAIM ALL WARRANTIES WITH REGARD TO - * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY - * AND FITNESS, IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY - * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN - * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING - * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - * - * $Id: chap_ms.h,v 1.12 2004/11/09 22:49:05 paulus Exp $ - */ - -#ifndef __CHAPMS_INCLUDE__ - -#define MD4_SIGNATURE_SIZE 16 /* 16 bytes in a MD4 message digest */ -#define MAX_NT_PASSWORD 256 /* Max (Unicode) chars in an NT pass */ - -#define MS_CHAP_RESPONSE_LEN 49 /* Response length for MS-CHAP */ -#define MS_CHAP2_RESPONSE_LEN 49 /* Response length for MS-CHAPv2 */ -#define MS_AUTH_RESPONSE_LENGTH 40 /* MS-CHAPv2 authenticator response, */ - /* as ASCII */ - -/* E=eeeeeeeeee error codes for MS-CHAP failure messages. */ -#define MS_CHAP_ERROR_RESTRICTED_LOGON_HOURS 646 -#define MS_CHAP_ERROR_ACCT_DISABLED 647 -#define MS_CHAP_ERROR_PASSWD_EXPIRED 648 -#define MS_CHAP_ERROR_NO_DIALIN_PERMISSION 649 -#define MS_CHAP_ERROR_AUTHENTICATION_FAILURE 691 -#define MS_CHAP_ERROR_CHANGING_PASSWORD 709 - -/* - * Apparently gcc on ARM gives all structures 4-byte alignment - * by default. This tells gcc that these structures may be - * unaligned and may not have extra padding inside them. - */ -#ifdef __GNUC__ -#define PACKED __attribute__((__packed__)) -#else -#define PACKED -#endif - -/* - * Use MS_CHAP_RESPONSE_LEN, rather than sizeof(MS_ChapResponse), - * in case this struct gets padded. - */ -typedef struct { - u_char LANManResp[24]; - u_char NTResp[24]; - u_char UseNT[1]; /* If 1, ignore the LANMan response field */ -} MS_ChapResponse PACKED; - -/* - * Use MS_CHAP2_RESPONSE_LEN, rather than sizeof(MS_Chap2Response), - * in case this struct gets padded. - */ -typedef struct { - u_char PeerChallenge[16]; - u_char Reserved[8]; /* Must be zero */ - u_char NTResp[24]; - u_char Flags[1]; /* Must be zero */ -} MS_Chap2Response PACKED; - -#ifdef MPPE -#include /* MPPE_MAX_KEY_LEN */ -extern u_char mppe_send_key[MPPE_MAX_KEY_LEN]; -extern u_char mppe_recv_key[MPPE_MAX_KEY_LEN]; -extern int mppe_keys_set; - -/* These values are the RADIUS attribute values--see RFC 2548. */ -#define MPPE_ENC_POL_ENC_ALLOWED 1 -#define MPPE_ENC_POL_ENC_REQUIRED 2 -#define MPPE_ENC_TYPES_RC4_40 2 -#define MPPE_ENC_TYPES_RC4_128 4 - -/* used by plugins (using above values) */ -extern void set_mppe_enc_types(int, int); -#endif - -/* Are we the authenticator or authenticatee? For MS-CHAPv2 key derivation. */ -#define MS_CHAP2_AUTHENTICATEE 0 -#define MS_CHAP2_AUTHENTICATOR 1 - -void ChapMS __P((u_char *, char *, int, MS_ChapResponse *)); -void ChapMS2 __P((u_char *, u_char *, char *, char *, int, - MS_Chap2Response *, u_char[MS_AUTH_RESPONSE_LENGTH+1], int)); -#ifdef MPPE -void mppe_set_keys __P((u_char *, u_char[MD4_SIGNATURE_SIZE])); -void mppe_set_keys2(u_char PasswordHashHash[MD4_SIGNATURE_SIZE], - u_char NTResponse[24], int IsServer); -#endif - -void ChallengeHash __P((u_char[16], u_char *, char *, u_char[8])); - -void GenerateAuthenticatorResponse(u_char PasswordHashHash[MD4_SIGNATURE_SIZE], - u_char NTResponse[24], u_char PeerChallenge[16], - u_char *rchallenge, char *username, - u_char authResponse[MS_AUTH_RESPONSE_LENGTH+1]); - -void chapms_init(void); - -#define __CHAPMS_INCLUDE__ -#endif /* __CHAPMS_INCLUDE__ */ diff --git a/pppd_plugin/src/pppd/eap.h b/pppd_plugin/src/pppd/eap.h deleted file mode 100644 index 199d184..0000000 --- a/pppd_plugin/src/pppd/eap.h +++ /dev/null @@ -1,158 +0,0 @@ -/* - * eap.h - Extensible Authentication Protocol for PPP (RFC 2284) - * - * Copyright (c) 2001 by Sun Microsystems, Inc. - * All rights reserved. - * - * Non-exclusive rights to redistribute, modify, translate, and use - * this software in source and binary forms, in whole or in part, is - * hereby granted, provided that the above copyright notice is - * duplicated in any source form, and that neither the name of the - * copyright holder nor the author is used to endorse or promote - * products derived from this software. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. - * - * Original version by James Carlson - * - * $Id: eap.h,v 1.2 2003/06/11 23:56:26 paulus Exp $ - */ - -#ifndef PPP_EAP_H -#define PPP_EAP_H - -#ifdef __cplusplus -extern "C" { -#endif - -/* - * Packet header = Code, id, length. - */ -#define EAP_HEADERLEN 4 - - -/* EAP message codes. */ -#define EAP_REQUEST 1 -#define EAP_RESPONSE 2 -#define EAP_SUCCESS 3 -#define EAP_FAILURE 4 - -/* EAP types */ -#define EAPT_IDENTITY 1 -#define EAPT_NOTIFICATION 2 -#define EAPT_NAK 3 /* (response only) */ -#define EAPT_MD5CHAP 4 -#define EAPT_OTP 5 /* One-Time Password; RFC 1938 */ -#define EAPT_TOKEN 6 /* Generic Token Card */ -/* 7 and 8 are unassigned. */ -#define EAPT_RSA 9 /* RSA Public Key Authentication */ -#define EAPT_DSS 10 /* DSS Unilateral */ -#define EAPT_KEA 11 /* KEA */ -#define EAPT_KEA_VALIDATE 12 /* KEA-VALIDATE */ -#define EAPT_TLS 13 /* EAP-TLS */ -#define EAPT_DEFENDER 14 /* Defender Token (AXENT) */ -#define EAPT_W2K 15 /* Windows 2000 EAP */ -#define EAPT_ARCOT 16 /* Arcot Systems */ -#define EAPT_CISCOWIRELESS 17 /* Cisco Wireless */ -#define EAPT_NOKIACARD 18 /* Nokia IP smart card */ -#define EAPT_SRP 19 /* Secure Remote Password */ -/* 20 is deprecated */ - -/* EAP SRP-SHA1 Subtypes */ -#define EAPSRP_CHALLENGE 1 /* Request 1 - Challenge */ -#define EAPSRP_CKEY 1 /* Response 1 - Client Key */ -#define EAPSRP_SKEY 2 /* Request 2 - Server Key */ -#define EAPSRP_CVALIDATOR 2 /* Response 2 - Client Validator */ -#define EAPSRP_SVALIDATOR 3 /* Request 3 - Server Validator */ -#define EAPSRP_ACK 3 /* Response 3 - final ack */ -#define EAPSRP_LWRECHALLENGE 4 /* Req/resp 4 - Lightweight rechal */ - -#define SRPVAL_EBIT 0x00000001 /* Use shared key for ECP */ - -#define SRP_PSEUDO_ID "pseudo_" -#define SRP_PSEUDO_LEN 7 - -#define MD5_SIGNATURE_SIZE 16 -#define MIN_CHALLENGE_LENGTH 16 -#define MAX_CHALLENGE_LENGTH 24 - -enum eap_state_code { - eapInitial = 0, /* No EAP authentication yet requested */ - eapPending, /* Waiting for LCP (no timer) */ - eapClosed, /* Authentication not in use */ - eapListen, /* Client ready (and timer running) */ - eapIdentify, /* EAP Identify sent */ - eapSRP1, /* Sent EAP SRP-SHA1 Subtype 1 */ - eapSRP2, /* Sent EAP SRP-SHA1 Subtype 2 */ - eapSRP3, /* Sent EAP SRP-SHA1 Subtype 3 */ - eapMD5Chall, /* Sent MD5-Challenge */ - eapOpen, /* Completed authentication */ - eapSRP4, /* Sent EAP SRP-SHA1 Subtype 4 */ - eapBadAuth /* Failed authentication */ -}; - -#define EAP_STATES \ - "Initial", "Pending", "Closed", "Listen", "Identify", \ - "SRP1", "SRP2", "SRP3", "MD5Chall", "Open", "SRP4", "BadAuth" - -#define eap_client_active(esp) ((esp)->es_client.ea_state == eapListen) -#define eap_server_active(esp) \ - ((esp)->es_server.ea_state >= eapIdentify && \ - (esp)->es_server.ea_state <= eapMD5Chall) - -struct eap_auth { - char *ea_name; /* Our name */ - char *ea_peer; /* Peer's name */ - void *ea_session; /* Authentication library linkage */ - u_char *ea_skey; /* Shared encryption key */ - int ea_timeout; /* Time to wait (for retransmit/fail) */ - int ea_maxrequests; /* Max Requests allowed */ - u_short ea_namelen; /* Length of our name */ - u_short ea_peerlen; /* Length of peer's name */ - enum eap_state_code ea_state; - u_char ea_id; /* Current id */ - u_char ea_requests; /* Number of Requests sent/received */ - u_char ea_responses; /* Number of Responses */ - u_char ea_type; /* One of EAPT_* */ - u_int32_t ea_keyflags; /* SRP shared key usage flags */ -}; - -/* - * Complete EAP state for one PPP session. - */ -typedef struct eap_state { - int es_unit; /* Interface unit number */ - struct eap_auth es_client; /* Client (authenticatee) data */ - struct eap_auth es_server; /* Server (authenticator) data */ - int es_savedtime; /* Saved timeout */ - int es_rechallenge; /* EAP rechallenge interval */ - int es_lwrechallenge; /* SRP lightweight rechallenge inter */ - bool es_usepseudo; /* Use SRP Pseudonym if offered one */ - int es_usedpseudo; /* Set if we already sent PN */ - int es_challen; /* Length of challenge string */ - u_char es_challenge[MAX_CHALLENGE_LENGTH]; -} eap_state; - -/* - * Timeouts. - */ -#define EAP_DEFTIMEOUT 3 /* Timeout (seconds) for rexmit */ -#define EAP_DEFTRANSMITS 10 /* max # times to transmit */ -#define EAP_DEFREQTIME 20 /* Time to wait for peer request */ -#define EAP_DEFALLOWREQ 20 /* max # times to accept requests */ - -extern eap_state eap_states[]; - -void eap_authwithpeer __P((int unit, char *localname)); -void eap_authpeer __P((int unit, char *localname)); - -extern struct protent eap_protent; - -#ifdef __cplusplus -} -#endif - -#endif /* PPP_EAP_H */ - diff --git a/pppd_plugin/src/pppd/ecp.h b/pppd_plugin/src/pppd/ecp.h deleted file mode 100644 index df6e3ca..0000000 --- a/pppd_plugin/src/pppd/ecp.h +++ /dev/null @@ -1,45 +0,0 @@ -/* - * ecp.h - Definitions for PPP Encryption Control Protocol. - * - * Copyright (c) 2002 Google, Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The name(s) of the authors of this software must not be used to - * endorse or promote products derived from this software without - * prior written permission. - * - * THE AUTHORS OF THIS SOFTWARE DISCLAIM ALL WARRANTIES WITH REGARD TO - * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY - * AND FITNESS, IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY - * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN - * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING - * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - * - * $Id: ecp.h,v 1.2 2003/01/10 07:12:36 fcusack Exp $ - */ - -typedef struct ecp_options { - bool required; /* Is ECP required? */ - unsigned enctype; /* Encryption type */ -} ecp_options; - -extern fsm ecp_fsm[]; -extern ecp_options ecp_wantoptions[]; -extern ecp_options ecp_gotoptions[]; -extern ecp_options ecp_allowoptions[]; -extern ecp_options ecp_hisoptions[]; - -extern struct protent ecp_protent; diff --git a/pppd_plugin/src/pppd/eui64.h b/pppd_plugin/src/pppd/eui64.h deleted file mode 100644 index 0f6b6fd..0000000 --- a/pppd_plugin/src/pppd/eui64.h +++ /dev/null @@ -1,114 +0,0 @@ -/* - * eui64.h - EUI64 routines for IPv6CP. - * - * Copyright (c) 1999 Tommi Komulainen. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The name(s) of the authors of this software must not be used to - * endorse or promote products derived from this software without - * prior written permission. - * - * 4. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by Tommi Komulainen - * ". - * - * THE AUTHORS OF THIS SOFTWARE DISCLAIM ALL WARRANTIES WITH REGARD TO - * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY - * AND FITNESS, IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY - * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN - * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING - * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - * - * $Id: eui64.h,v 1.6 2002/12/04 23:03:32 paulus Exp $ -*/ - -#ifndef __EUI64_H__ -#define __EUI64_H__ - -#if !defined(INET6) -#error "this file should only be included when INET6 is defined" -#endif /* not defined(INET6) */ - -#if defined(SOL2) -#include - -typedef union { - uint8_t e8[8]; /* lower 64-bit IPv6 address */ - uint32_t e32[2]; /* lower 64-bit IPv6 address */ -} eui64_t; - -/* - * Declare the two below, since in.h only defines them when _KERNEL - * is declared - which shouldn't be true when dealing with user-land programs - */ -#define s6_addr8 _S6_un._S6_u8 -#define s6_addr32 _S6_un._S6_u32 - -#else /* else if not defined(SOL2) */ - -/* - * TODO: - * - * Maybe this should be done by processing struct in6_addr directly... - */ -typedef union -{ - u_int8_t e8[8]; - u_int16_t e16[4]; - u_int32_t e32[2]; -} eui64_t; - -#endif /* defined(SOL2) */ - -#define eui64_iszero(e) (((e).e32[0] | (e).e32[1]) == 0) -#define eui64_equals(e, o) (((e).e32[0] == (o).e32[0]) && \ - ((e).e32[1] == (o).e32[1])) -#define eui64_zero(e) (e).e32[0] = (e).e32[1] = 0; - -#define eui64_copy(s, d) memcpy(&(d), &(s), sizeof(eui64_t)) - -#define eui64_magic(e) do { \ - (e).e32[0] = magic(); \ - (e).e32[1] = magic(); \ - (e).e8[0] &= ~2; \ - } while (0) -#define eui64_magic_nz(x) do { \ - eui64_magic(x); \ - } while (eui64_iszero(x)) -#define eui64_magic_ne(x, y) do { \ - eui64_magic(x); \ - } while (eui64_equals(x, y)) - -#define eui64_get(ll, cp) do { \ - eui64_copy((*cp), (ll)); \ - (cp) += sizeof(eui64_t); \ - } while (0) - -#define eui64_put(ll, cp) do { \ - eui64_copy((ll), (*cp)); \ - (cp) += sizeof(eui64_t); \ - } while (0) - -#define eui64_set32(e, l) do { \ - (e).e32[0] = 0; \ - (e).e32[1] = htonl(l); \ - } while (0) -#define eui64_setlo32(e, l) eui64_set32(e, l) - -char *eui64_ntoa __P((eui64_t)); /* Returns ascii representation of id */ - -#endif /* __EUI64_H__ */ - diff --git a/pppd_plugin/src/pppd/fsm.h b/pppd_plugin/src/pppd/fsm.h deleted file mode 100644 index 87a78d3..0000000 --- a/pppd_plugin/src/pppd/fsm.h +++ /dev/null @@ -1,168 +0,0 @@ -/* - * fsm.h - {Link, IP} Control Protocol Finite State Machine definitions. - * - * Copyright (c) 1984-2000 Carnegie Mellon University. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The name "Carnegie Mellon University" must not be used to - * endorse or promote products derived from this software without - * prior written permission. For permission or any legal - * details, please contact - * Office of Technology Transfer - * Carnegie Mellon University - * 5000 Forbes Avenue - * Pittsburgh, PA 15213-3890 - * (412) 268-4387, fax: (412) 268-7395 - * tech-transfer@andrew.cmu.edu - * - * 4. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by Computing Services - * at Carnegie Mellon University (http://www.cmu.edu/computing/)." - * - * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO - * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY - * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE - * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN - * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING - * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - * - * $Id: fsm.h,v 1.10 2004/11/13 02:28:15 paulus Exp $ - */ - -/* - * Packet header = Code, id, length. - */ -#define HEADERLEN 4 - - -/* - * CP (LCP, IPCP, etc.) codes. - */ -#define CONFREQ 1 /* Configuration Request */ -#define CONFACK 2 /* Configuration Ack */ -#define CONFNAK 3 /* Configuration Nak */ -#define CONFREJ 4 /* Configuration Reject */ -#define TERMREQ 5 /* Termination Request */ -#define TERMACK 6 /* Termination Ack */ -#define CODEREJ 7 /* Code Reject */ - - -/* - * Each FSM is described by an fsm structure and fsm callbacks. - */ -typedef struct fsm { - int unit; /* Interface unit number */ - int protocol; /* Data Link Layer Protocol field value */ - int state; /* State */ - int flags; /* Contains option bits */ - u_char id; /* Current id */ - u_char reqid; /* Current request id */ - u_char seen_ack; /* Have received valid Ack/Nak/Rej to Req */ - int timeouttime; /* Timeout time in milliseconds */ - int maxconfreqtransmits; /* Maximum Configure-Request transmissions */ - int retransmits; /* Number of retransmissions left */ - int maxtermtransmits; /* Maximum Terminate-Request transmissions */ - int nakloops; /* Number of nak loops since last ack */ - int rnakloops; /* Number of naks received */ - int maxnakloops; /* Maximum number of nak loops tolerated */ - struct fsm_callbacks *callbacks; /* Callback routines */ - char *term_reason; /* Reason for closing protocol */ - int term_reason_len; /* Length of term_reason */ -} fsm; - - -typedef struct fsm_callbacks { - void (*resetci) /* Reset our Configuration Information */ - __P((fsm *)); - int (*cilen) /* Length of our Configuration Information */ - __P((fsm *)); - void (*addci) /* Add our Configuration Information */ - __P((fsm *, u_char *, int *)); - int (*ackci) /* ACK our Configuration Information */ - __P((fsm *, u_char *, int)); - int (*nakci) /* NAK our Configuration Information */ - __P((fsm *, u_char *, int, int)); - int (*rejci) /* Reject our Configuration Information */ - __P((fsm *, u_char *, int)); - int (*reqci) /* Request peer's Configuration Information */ - __P((fsm *, u_char *, int *, int)); - void (*up) /* Called when fsm reaches OPENED state */ - __P((fsm *)); - void (*down) /* Called when fsm leaves OPENED state */ - __P((fsm *)); - void (*starting) /* Called when we want the lower layer */ - __P((fsm *)); - void (*finished) /* Called when we don't want the lower layer */ - __P((fsm *)); - void (*protreject) /* Called when Protocol-Reject received */ - __P((int)); - void (*retransmit) /* Retransmission is necessary */ - __P((fsm *)); - int (*extcode) /* Called when unknown code received */ - __P((fsm *, int, int, u_char *, int)); - char *proto_name; /* String name for protocol (for messages) */ -} fsm_callbacks; - - -/* - * Link states. - */ -#define INITIAL 0 /* Down, hasn't been opened */ -#define STARTING 1 /* Down, been opened */ -#define CLOSED 2 /* Up, hasn't been opened */ -#define STOPPED 3 /* Open, waiting for down event */ -#define CLOSING 4 /* Terminating the connection, not open */ -#define STOPPING 5 /* Terminating, but open */ -#define REQSENT 6 /* We've sent a Config Request */ -#define ACKRCVD 7 /* We've received a Config Ack */ -#define ACKSENT 8 /* We've sent a Config Ack */ -#define OPENED 9 /* Connection available */ - - -/* - * Flags - indicate options controlling FSM operation - */ -#define OPT_PASSIVE 1 /* Don't die if we don't get a response */ -#define OPT_RESTART 2 /* Treat 2nd OPEN as DOWN, UP */ -#define OPT_SILENT 4 /* Wait for peer to speak first */ - - -/* - * Timeouts. - */ -#define DEFTIMEOUT 3 /* Timeout time in seconds */ -#define DEFMAXTERMREQS 2 /* Maximum Terminate-Request transmissions */ -#define DEFMAXCONFREQS 10 /* Maximum Configure-Request transmissions */ -#define DEFMAXNAKLOOPS 5 /* Maximum number of nak loops */ - - -/* - * Prototypes - */ -void fsm_init __P((fsm *)); -void fsm_lowerup __P((fsm *)); -void fsm_lowerdown __P((fsm *)); -void fsm_open __P((fsm *)); -void fsm_close __P((fsm *, char *)); -void fsm_input __P((fsm *, u_char *, int)); -void fsm_protreject __P((fsm *)); -void fsm_sdata __P((fsm *, int, int, u_char *, int)); - - -/* - * Variables - */ -extern int peer_mru[]; /* currently negotiated peer MRU (per unit) */ diff --git a/pppd_plugin/src/pppd/ipcp.h b/pppd_plugin/src/pppd/ipcp.h deleted file mode 100644 index 6cf14c9..0000000 --- a/pppd_plugin/src/pppd/ipcp.h +++ /dev/null @@ -1,96 +0,0 @@ -/* - * ipcp.h - IP Control Protocol definitions. - * - * Copyright (c) 1984-2000 Carnegie Mellon University. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The name "Carnegie Mellon University" must not be used to - * endorse or promote products derived from this software without - * prior written permission. For permission or any legal - * details, please contact - * Office of Technology Transfer - * Carnegie Mellon University - * 5000 Forbes Avenue - * Pittsburgh, PA 15213-3890 - * (412) 268-4387, fax: (412) 268-7395 - * tech-transfer@andrew.cmu.edu - * - * 4. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by Computing Services - * at Carnegie Mellon University (http://www.cmu.edu/computing/)." - * - * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO - * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY - * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE - * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN - * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING - * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - * - * $Id: ipcp.h,v 1.14 2002/12/04 23:03:32 paulus Exp $ - */ - -/* - * Options. - */ -#define CI_ADDRS 1 /* IP Addresses */ -#define CI_COMPRESSTYPE 2 /* Compression Type */ -#define CI_ADDR 3 - -#define CI_MS_DNS1 129 /* Primary DNS value */ -#define CI_MS_WINS1 130 /* Primary WINS value */ -#define CI_MS_DNS2 131 /* Secondary DNS value */ -#define CI_MS_WINS2 132 /* Secondary WINS value */ - -#define MAX_STATES 16 /* from slcompress.h */ - -#define IPCP_VJMODE_OLD 1 /* "old" mode (option # = 0x0037) */ -#define IPCP_VJMODE_RFC1172 2 /* "old-rfc"mode (option # = 0x002d) */ -#define IPCP_VJMODE_RFC1332 3 /* "new-rfc"mode (option # = 0x002d, */ - /* maxslot and slot number compression) */ - -#define IPCP_VJ_COMP 0x002d /* current value for VJ compression option*/ -#define IPCP_VJ_COMP_OLD 0x0037 /* "old" (i.e, broken) value for VJ */ - /* compression option*/ - -typedef struct ipcp_options { - bool neg_addr; /* Negotiate IP Address? */ - bool old_addrs; /* Use old (IP-Addresses) option? */ - bool req_addr; /* Ask peer to send IP address? */ - bool default_route; /* Assign default route through interface? */ - bool proxy_arp; /* Make proxy ARP entry for peer? */ - bool neg_vj; /* Van Jacobson Compression? */ - bool old_vj; /* use old (short) form of VJ option? */ - bool accept_local; /* accept peer's value for ouraddr */ - bool accept_remote; /* accept peer's value for hisaddr */ - bool req_dns1; /* Ask peer to send primary DNS address? */ - bool req_dns2; /* Ask peer to send secondary DNS address? */ - int vj_protocol; /* protocol value to use in VJ option */ - int maxslotindex; /* values for RFC1332 VJ compression neg. */ - bool cflag; - u_int32_t ouraddr, hisaddr; /* Addresses in NETWORK BYTE ORDER */ - u_int32_t dnsaddr[2]; /* Primary and secondary MS DNS entries */ - u_int32_t winsaddr[2]; /* Primary and secondary MS WINS entries */ -} ipcp_options; - -extern fsm ipcp_fsm[]; -extern ipcp_options ipcp_wantoptions[]; -extern ipcp_options ipcp_gotoptions[]; -extern ipcp_options ipcp_allowoptions[]; -extern ipcp_options ipcp_hisoptions[]; - -char *ip_ntoa __P((u_int32_t)); - -extern struct protent ipcp_protent; diff --git a/pppd_plugin/src/pppd/ipv6cp.h b/pppd_plugin/src/pppd/ipv6cp.h deleted file mode 100644 index cc4568d..0000000 --- a/pppd_plugin/src/pppd/ipv6cp.h +++ /dev/null @@ -1,171 +0,0 @@ -/* - * ipv6cp.h - PPP IPV6 Control Protocol. - * - * Copyright (c) 1999 Tommi Komulainen. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The name(s) of the authors of this software must not be used to - * endorse or promote products derived from this software without - * prior written permission. - * - * 4. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by Tommi Komulainen - * ". - * - * THE AUTHORS OF THIS SOFTWARE DISCLAIM ALL WARRANTIES WITH REGARD TO - * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY - * AND FITNESS, IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY - * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN - * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING - * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - * - */ - -/* Original version, based on RFC2023 : - - Copyright (c) 1995, 1996, 1997 Francis.Dupont@inria.fr, INRIA Rocquencourt, - Alain.Durand@imag.fr, IMAG, - Jean-Luc.Richier@imag.fr, IMAG-LSR. - - Copyright (c) 1998, 1999 Francis.Dupont@inria.fr, GIE DYADE, - Alain.Durand@imag.fr, IMAG, - Jean-Luc.Richier@imag.fr, IMAG-LSR. - - Ce travail a été fait au sein du GIE DYADE (Groupement d'Intérêt - Économique ayant pour membres BULL S.A. et l'INRIA). - - Ce logiciel informatique est disponible aux conditions - usuelles dans la recherche, c'est-à-dire qu'il peut - être utilisé, copié, modifié, distribué à l'unique - condition que ce texte soit conservé afin que - l'origine de ce logiciel soit reconnue. - - Le nom de l'Institut National de Recherche en Informatique - et en Automatique (INRIA), de l'IMAG, ou d'une personne morale - ou physique ayant participé à l'élaboration de ce logiciel ne peut - être utilisé sans son accord préalable explicite. - - Ce logiciel est fourni tel quel sans aucune garantie, - support ou responsabilité d'aucune sorte. - Ce logiciel est dérivé de sources d'origine - "University of California at Berkeley" et - "Digital Equipment Corporation" couvertes par des copyrights. - - L'Institut d'Informatique et de Mathématiques Appliquées de Grenoble (IMAG) - est une fédération d'unités mixtes de recherche du CNRS, de l'Institut National - Polytechnique de Grenoble et de l'Université Joseph Fourier regroupant - sept laboratoires dont le laboratoire Logiciels, Systèmes, Réseaux (LSR). - - This work has been done in the context of GIE DYADE (joint R & D venture - between BULL S.A. and INRIA). - - This software is available with usual "research" terms - with the aim of retain credits of the software. - Permission to use, copy, modify and distribute this software for any - purpose and without fee is hereby granted, provided that the above - copyright notice and this permission notice appear in all copies, - and the name of INRIA, IMAG, or any contributor not be used in advertising - or publicity pertaining to this material without the prior explicit - permission. The software is provided "as is" without any - warranties, support or liabilities of any kind. - This software is derived from source code from - "University of California at Berkeley" and - "Digital Equipment Corporation" protected by copyrights. - - Grenoble's Institute of Computer Science and Applied Mathematics (IMAG) - is a federation of seven research units funded by the CNRS, National - Polytechnic Institute of Grenoble and University Joseph Fourier. - The research unit in Software, Systems, Networks (LSR) is member of IMAG. -*/ - -/* - * Derived from : - * - * - * ipcp.h - IP Control Protocol definitions. - * - * Copyright (c) 1984-2000 Carnegie Mellon University. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The name "Carnegie Mellon University" must not be used to - * endorse or promote products derived from this software without - * prior written permission. For permission or any legal - * details, please contact - * Office of Technology Transfer - * Carnegie Mellon University - * 5000 Forbes Avenue - * Pittsburgh, PA 15213-3890 - * (412) 268-4387, fax: (412) 268-7395 - * tech-transfer@andrew.cmu.edu - * - * 4. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by Computing Services - * at Carnegie Mellon University (http://www.cmu.edu/computing/)." - * - * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO - * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY - * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE - * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN - * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING - * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - * - * $Id: ipv6cp.h,v 1.7 2002/12/04 23:03:32 paulus Exp $ - */ - -/* - * Options. - */ -#define CI_IFACEID 1 /* Interface Identifier */ -#define CI_COMPRESSTYPE 2 /* Compression Type */ - -/* No compression types yet defined. - *#define IPV6CP_COMP 0x004f - */ -typedef struct ipv6cp_options { - int neg_ifaceid; /* Negotiate interface identifier? */ - int req_ifaceid; /* Ask peer to send interface identifier? */ - int accept_local; /* accept peer's value for iface id? */ - int opt_local; /* ourtoken set by option */ - int opt_remote; /* histoken set by option */ - int use_ip; /* use IP as interface identifier */ -#if defined(SOL2) || defined(__linux__) - int use_persistent; /* use uniquely persistent value for address */ -#endif /* defined(SOL2) */ - int neg_vj; /* Van Jacobson Compression? */ - u_short vj_protocol; /* protocol value to use in VJ option */ - eui64_t ourid, hisid; /* Interface identifiers */ -} ipv6cp_options; - -extern fsm ipv6cp_fsm[]; -extern ipv6cp_options ipv6cp_wantoptions[]; -extern ipv6cp_options ipv6cp_gotoptions[]; -extern ipv6cp_options ipv6cp_allowoptions[]; -extern ipv6cp_options ipv6cp_hisoptions[]; - -extern struct protent ipv6cp_protent; diff --git a/pppd_plugin/src/pppd/ipxcp.h b/pppd_plugin/src/pppd/ipxcp.h deleted file mode 100644 index 396b6bb..0000000 --- a/pppd_plugin/src/pppd/ipxcp.h +++ /dev/null @@ -1,94 +0,0 @@ -/* - * ipxcp.h - IPX Control Protocol definitions. - * - * Copyright (c) 1984-2000 Carnegie Mellon University. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The name "Carnegie Mellon University" must not be used to - * endorse or promote products derived from this software without - * prior written permission. For permission or any legal - * details, please contact - * Office of Technology Transfer - * Carnegie Mellon University - * 5000 Forbes Avenue - * Pittsburgh, PA 15213-3890 - * (412) 268-4387, fax: (412) 268-7395 - * tech-transfer@andrew.cmu.edu - * - * 4. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by Computing Services - * at Carnegie Mellon University (http://www.cmu.edu/computing/)." - * - * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO - * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY - * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE - * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN - * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING - * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - * - * $Id: ipxcp.h,v 1.5 2002/12/04 23:03:32 paulus Exp $ - */ - -/* - * Options. - */ -#define IPX_NETWORK_NUMBER 1 /* IPX Network Number */ -#define IPX_NODE_NUMBER 2 -#define IPX_COMPRESSION_PROTOCOL 3 -#define IPX_ROUTER_PROTOCOL 4 -#define IPX_ROUTER_NAME 5 -#define IPX_COMPLETE 6 - -/* Values for the router protocol */ -#define IPX_NONE 0 -#define RIP_SAP 2 -#define NLSP 4 - -typedef struct ipxcp_options { - bool neg_node; /* Negotiate IPX node number? */ - bool req_node; /* Ask peer to send IPX node number? */ - - bool neg_nn; /* Negotiate IPX network number? */ - bool req_nn; /* Ask peer to send IPX network number */ - - bool neg_name; /* Negotiate IPX router name */ - bool neg_complete; /* Negotiate completion */ - bool neg_router; /* Negotiate IPX router number */ - - bool accept_local; /* accept peer's value for ournode */ - bool accept_remote; /* accept peer's value for hisnode */ - bool accept_network; /* accept network number */ - - bool tried_nlsp; /* I have suggested NLSP already */ - bool tried_rip; /* I have suggested RIP/SAP already */ - - u_int32_t his_network; /* base network number */ - u_int32_t our_network; /* our value for network number */ - u_int32_t network; /* the final network number */ - - u_char his_node[6]; /* peer's node number */ - u_char our_node[6]; /* our node number */ - u_char name [48]; /* name of the router */ - int router; /* routing protocol */ -} ipxcp_options; - -extern fsm ipxcp_fsm[]; -extern ipxcp_options ipxcp_wantoptions[]; -extern ipxcp_options ipxcp_gotoptions[]; -extern ipxcp_options ipxcp_allowoptions[]; -extern ipxcp_options ipxcp_hisoptions[]; - -extern struct protent ipxcp_protent; diff --git a/pppd_plugin/src/pppd/lcp.h b/pppd_plugin/src/pppd/lcp.h deleted file mode 100644 index 23f3c84..0000000 --- a/pppd_plugin/src/pppd/lcp.h +++ /dev/null @@ -1,119 +0,0 @@ -/* - * lcp.h - Link Control Protocol definitions. - * - * Copyright (c) 1984-2000 Carnegie Mellon University. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The name "Carnegie Mellon University" must not be used to - * endorse or promote products derived from this software without - * prior written permission. For permission or any legal - * details, please contact - * Office of Technology Transfer - * Carnegie Mellon University - * 5000 Forbes Avenue - * Pittsburgh, PA 15213-3890 - * (412) 268-4387, fax: (412) 268-7395 - * tech-transfer@andrew.cmu.edu - * - * 4. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by Computing Services - * at Carnegie Mellon University (http://www.cmu.edu/computing/)." - * - * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO - * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY - * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE - * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN - * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING - * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - * - * $Id: lcp.h,v 1.19 2002/12/04 23:03:32 paulus Exp $ - */ - -/* - * Options. - */ -#define CI_MRU 1 /* Maximum Receive Unit */ -#define CI_ASYNCMAP 2 /* Async Control Character Map */ -#define CI_AUTHTYPE 3 /* Authentication Type */ -#define CI_QUALITY 4 /* Quality Protocol */ -#define CI_MAGICNUMBER 5 /* Magic Number */ -#define CI_PCOMPRESSION 7 /* Protocol Field Compression */ -#define CI_ACCOMPRESSION 8 /* Address/Control Field Compression */ -#define CI_CALLBACK 13 /* callback */ -#define CI_MRRU 17 /* max reconstructed receive unit; multilink */ -#define CI_SSNHF 18 /* short sequence numbers for multilink */ -#define CI_EPDISC 19 /* endpoint discriminator */ - -/* - * LCP-specific packet types. - */ -#define PROTREJ 8 /* Protocol Reject */ -#define ECHOREQ 9 /* Echo Request */ -#define ECHOREP 10 /* Echo Reply */ -#define DISCREQ 11 /* Discard Request */ -#define CBCP_OPT 6 /* Use callback control protocol */ - -/* - * The state of options is described by an lcp_options structure. - */ -typedef struct lcp_options { - bool passive; /* Don't die if we don't get a response */ - bool silent; /* Wait for the other end to start first */ - bool restart; /* Restart vs. exit after close */ - bool neg_mru; /* Negotiate the MRU? */ - bool neg_asyncmap; /* Negotiate the async map? */ - bool neg_upap; /* Ask for UPAP authentication? */ - bool neg_chap; /* Ask for CHAP authentication? */ - bool neg_eap; /* Ask for EAP authentication? */ - bool neg_magicnumber; /* Ask for magic number? */ - bool neg_pcompression; /* HDLC Protocol Field Compression? */ - bool neg_accompression; /* HDLC Address/Control Field Compression? */ - bool neg_lqr; /* Negotiate use of Link Quality Reports */ - bool neg_cbcp; /* Negotiate use of CBCP */ - bool neg_mrru; /* negotiate multilink MRRU */ - bool neg_ssnhf; /* negotiate short sequence numbers */ - bool neg_endpoint; /* negotiate endpoint discriminator */ - int mru; /* Value of MRU */ - int mrru; /* Value of MRRU, and multilink enable */ - u_char chap_mdtype; /* which MD types (hashing algorithm) */ - u_int32_t asyncmap; /* Value of async map */ - u_int32_t magicnumber; - int numloops; /* Number of loops during magic number neg. */ - u_int32_t lqr_period; /* Reporting period for LQR 1/100ths second */ - struct epdisc endpoint; /* endpoint discriminator */ -} lcp_options; - -extern fsm lcp_fsm[]; -extern lcp_options lcp_wantoptions[]; -extern lcp_options lcp_gotoptions[]; -extern lcp_options lcp_allowoptions[]; -extern lcp_options lcp_hisoptions[]; - -#define DEFMRU 1500 /* Try for this */ -#define MINMRU 128 /* No MRUs below this */ -#define MAXMRU 16384 /* Normally limit MRU to this */ - -void lcp_open __P((int)); -void lcp_close __P((int, char *)); -void lcp_lowerup __P((int)); -void lcp_lowerdown __P((int)); -void lcp_sprotrej __P((int, u_char *, int)); /* send protocol reject */ - -extern struct protent lcp_protent; - -/* Default number of times we receive our magic number from the peer - before deciding the link is looped-back. */ -#define DEFLOOPBACKFAIL 10 diff --git a/pppd_plugin/src/pppd/magic.h b/pppd_plugin/src/pppd/magic.h deleted file mode 100644 index c81213b..0000000 --- a/pppd_plugin/src/pppd/magic.h +++ /dev/null @@ -1,49 +0,0 @@ -/* - * magic.h - PPP Magic Number definitions. - * - * Copyright (c) 1984-2000 Carnegie Mellon University. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The name "Carnegie Mellon University" must not be used to - * endorse or promote products derived from this software without - * prior written permission. For permission or any legal - * details, please contact - * Office of Technology Transfer - * Carnegie Mellon University - * 5000 Forbes Avenue - * Pittsburgh, PA 15213-3890 - * (412) 268-4387, fax: (412) 268-7395 - * tech-transfer@andrew.cmu.edu - * - * 4. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by Computing Services - * at Carnegie Mellon University (http://www.cmu.edu/computing/)." - * - * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO - * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY - * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE - * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN - * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING - * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - * - * $Id: magic.h,v 1.5 2003/06/11 23:56:26 paulus Exp $ - */ - -void magic_init __P((void)); /* Initialize the magic number generator */ -u_int32_t magic __P((void)); /* Returns the next magic number */ - -/* Fill buffer with random bytes */ -void random_bytes __P((unsigned char *buf, int len)); diff --git a/pppd_plugin/src/pppd/md4.h b/pppd_plugin/src/pppd/md4.h deleted file mode 100644 index 80e8f9a..0000000 --- a/pppd_plugin/src/pppd/md4.h +++ /dev/null @@ -1,64 +0,0 @@ - -/* -** ******************************************************************** -** md4.h -- Header file for implementation of ** -** MD4 Message Digest Algorithm ** -** Updated: 2/13/90 by Ronald L. Rivest ** -** (C) 1990 RSA Data Security, Inc. ** -** ******************************************************************** -*/ - -#ifndef __P -# if defined(__STDC__) || defined(__GNUC__) -# define __P(x) x -# else -# define __P(x) () -# endif -#endif - - -/* MDstruct is the data structure for a message digest computation. -*/ -typedef struct { - unsigned int buffer[4]; /* Holds 4-word result of MD computation */ - unsigned char count[8]; /* Number of bits processed so far */ - unsigned int done; /* Nonzero means MD computation finished */ -} MD4_CTX; - -/* MD4Init(MD4_CTX *) -** Initialize the MD4_CTX prepatory to doing a message digest -** computation. -*/ -extern void MD4Init __P((MD4_CTX *MD)); - -/* MD4Update(MD,X,count) -** Input: X -- a pointer to an array of unsigned characters. -** count -- the number of bits of X to use (an unsigned int). -** Updates MD using the first "count" bits of X. -** The array pointed to by X is not modified. -** If count is not a multiple of 8, MD4Update uses high bits of -** last byte. -** This is the basic input routine for a user. -** The routine terminates the MD computation when count < 512, so -** every MD computation should end with one call to MD4Update with a -** count less than 512. Zero is OK for a count. -*/ -extern void MD4Update __P((MD4_CTX *MD, unsigned char *X, unsigned int count)); - -/* MD4Print(MD) -** Prints message digest buffer MD as 32 hexadecimal digits. -** Order is from low-order byte of buffer[0] to high-order byte -** of buffer[3]. -** Each byte is printed with high-order hexadecimal digit first. -*/ -extern void MD4Print __P((MD4_CTX *)); - -/* MD4Final(buf, MD) -** Returns message digest from MD and terminates the message -** digest computation. -*/ -extern void MD4Final __P((unsigned char *, MD4_CTX *)); - -/* -** End of md4.h -****************************(cut)***********************************/ diff --git a/pppd_plugin/src/pppd/md5.h b/pppd_plugin/src/pppd/md5.h deleted file mode 100644 index f7a0c96..0000000 --- a/pppd_plugin/src/pppd/md5.h +++ /dev/null @@ -1,65 +0,0 @@ -/* - *********************************************************************** - ** md5.h -- header file for implementation of MD5 ** - ** RSA Data Security, Inc. MD5 Message-Digest Algorithm ** - ** Created: 2/17/90 RLR ** - ** Revised: 12/27/90 SRD,AJ,BSK,JT Reference C version ** - ** Revised (for MD5): RLR 4/27/91 ** - ** -- G modified to have y&~z instead of y&z ** - ** -- FF, GG, HH modified to add in last register done ** - ** -- Access pattern: round 2 works mod 5, round 3 works mod 3 ** - ** -- distinct additive constant for each step ** - ** -- round 4 added, working mod 7 ** - *********************************************************************** - */ - -/* - *********************************************************************** - ** Copyright (C) 1990, RSA Data Security, Inc. All rights reserved. ** - ** ** - ** License to copy and use this software is granted provided that ** - ** it is identified as the "RSA Data Security, Inc. MD5 Message- ** - ** Digest Algorithm" in all material mentioning or referencing this ** - ** software or this function. ** - ** ** - ** License is also granted to make and use derivative works ** - ** provided that such works are identified as "derived from the RSA ** - ** Data Security, Inc. MD5 Message-Digest Algorithm" in all ** - ** material mentioning or referencing the derived work. ** - ** ** - ** RSA Data Security, Inc. makes no representations concerning ** - ** either the merchantability of this software or the suitability ** - ** of this software for any particular purpose. It is provided "as ** - ** is" without express or implied warranty of any kind. ** - ** ** - ** These notices must be retained in any copies of any part of this ** - ** documentation and/or software. ** - *********************************************************************** - */ - -#ifndef __MD5_INCLUDE__ - -/* typedef a 32-bit type */ -#ifdef _LP64 -typedef unsigned int UINT4; -typedef int INT4; -#else -typedef unsigned long UINT4; -typedef long INT4; -#endif -#define _UINT4_T - -/* Data structure for MD5 (Message-Digest) computation */ -typedef struct { - UINT4 i[2]; /* number of _bits_ handled mod 2^64 */ - UINT4 buf[4]; /* scratch buffer */ - unsigned char in[64]; /* input buffer */ - unsigned char digest[16]; /* actual digest after MD5Final call */ -} MD5_CTX; - -void MD5_Init (); -void MD5_Update (); -void MD5_Final (); - -#define __MD5_INCLUDE__ -#endif /* __MD5_INCLUDE__ */ diff --git a/pppd_plugin/src/pppd/pathnames.h b/pppd_plugin/src/pppd/pathnames.h deleted file mode 100644 index 555f40f..0000000 --- a/pppd_plugin/src/pppd/pathnames.h +++ /dev/null @@ -1,59 +0,0 @@ -/* - * define path names - * - * $Id: pathnames.h,v 1.16 2004/11/13 12:02:22 paulus Exp $ - */ - -#ifdef HAVE_PATHS_H -#include - -#else /* HAVE_PATHS_H */ -#ifndef _PATH_VARRUN -#define _PATH_VARRUN "/etc/ppp/" -#endif -#define _PATH_DEVNULL "/dev/null" -#endif /* HAVE_PATHS_H */ - -#ifndef _ROOT_PATH -#define _ROOT_PATH -#endif - -#define _PATH_UPAPFILE _ROOT_PATH "/etc/ppp/pap-secrets" -#define _PATH_CHAPFILE _ROOT_PATH "/etc/ppp/chap-secrets" -#define _PATH_SRPFILE _ROOT_PATH "/etc/ppp/srp-secrets" -#define _PATH_SYSOPTIONS _ROOT_PATH "/etc/ppp/options" -#define _PATH_IPUP _ROOT_PATH "/etc/ppp/ip-up" -#define _PATH_IPDOWN _ROOT_PATH "/etc/ppp/ip-down" -#define _PATH_AUTHUP _ROOT_PATH "/etc/ppp/auth-up" -#define _PATH_AUTHDOWN _ROOT_PATH "/etc/ppp/auth-down" -#define _PATH_TTYOPT _ROOT_PATH "/etc/ppp/options." -#define _PATH_CONNERRS _ROOT_PATH "/etc/ppp/connect-errors" -#define _PATH_PEERFILES _ROOT_PATH "/etc/ppp/peers/" -#define _PATH_RESOLV _ROOT_PATH "/etc/ppp/resolv.conf" - -#define _PATH_USEROPT ".ppprc" -#define _PATH_PSEUDONYM ".ppp_pseudonym" - -#ifdef INET6 -#define _PATH_IPV6UP _ROOT_PATH "/etc/ppp/ipv6-up" -#define _PATH_IPV6DOWN _ROOT_PATH "/etc/ppp/ipv6-down" -#endif - -#ifdef IPX_CHANGE -#define _PATH_IPXUP _ROOT_PATH "/etc/ppp/ipx-up" -#define _PATH_IPXDOWN _ROOT_PATH "/etc/ppp/ipx-down" -#endif /* IPX_CHANGE */ - -#ifdef __STDC__ -#define _PATH_PPPDB _ROOT_PATH _PATH_VARRUN "pppd2.tdb" -#else /* __STDC__ */ -#ifdef HAVE_PATHS_H -#define _PATH_PPPDB "/var/run/pppd2.tdb" -#else -#define _PATH_PPPDB "/etc/ppp/pppd2.tdb" -#endif -#endif /* __STDC__ */ - -#ifdef PLUGIN -#define _PATH_PLUGIN "/usr/lib/pppd/" VERSION -#endif /* PLUGIN */ diff --git a/pppd_plugin/src/pppd/pppcrypt.h b/pppd_plugin/src/pppd/pppcrypt.h deleted file mode 100644 index adcdcbc..0000000 --- a/pppd_plugin/src/pppd/pppcrypt.h +++ /dev/null @@ -1,48 +0,0 @@ -/* - * pppcrypt.c - PPP/DES linkage for MS-CHAP and EAP SRP-SHA1 - * - * Extracted from chap_ms.c by James Carlson. - * - * Copyright (c) 1995 Eric Rosenquist. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The name(s) of the authors of this software must not be used to - * endorse or promote products derived from this software without - * prior written permission. - * - * THE AUTHORS OF THIS SOFTWARE DISCLAIM ALL WARRANTIES WITH REGARD TO - * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY - * AND FITNESS, IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY - * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN - * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING - * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#ifndef PPPCRYPT_H -#define PPPCRYPT_H - -#ifdef HAVE_CRYPT_H -#include -#endif - -#ifndef USE_CRYPT -#include -#endif - -extern bool DesSetkey __P((u_char *)); -extern bool DesEncrypt __P((u_char *, u_char *)); -extern bool DesDecrypt __P((u_char *, u_char *)); - -#endif /* PPPCRYPT_H */ diff --git a/pppd_plugin/src/pppd/pppd.h b/pppd_plugin/src/pppd/pppd.h deleted file mode 100644 index 8866bc7..0000000 --- a/pppd_plugin/src/pppd/pppd.h +++ /dev/null @@ -1,904 +0,0 @@ -/* - * pppd.h - PPP daemon global declarations. - * - * Copyright (c) 1984-2000 Carnegie Mellon University. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The name "Carnegie Mellon University" must not be used to - * endorse or promote products derived from this software without - * prior written permission. For permission or any legal - * details, please contact - * Office of Technology Transfer - * Carnegie Mellon University - * 5000 Forbes Avenue - * Pittsburgh, PA 15213-3890 - * (412) 268-4387, fax: (412) 268-7395 - * tech-transfer@andrew.cmu.edu - * - * 4. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by Computing Services - * at Carnegie Mellon University (http://www.cmu.edu/computing/)." - * - * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO - * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY - * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE - * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN - * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING - * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - * - * $Id: pppd.h,v 1.88 2004/11/13 12:02:22 paulus Exp $ - */ - -/* - * TODO: - */ - -#ifndef __PPPD_H__ -#define __PPPD_H__ - -#include /* for FILE */ -#include /* for NGROUPS_MAX */ -#include /* for MAXPATHLEN and BSD4_4, if defined */ -#include /* for u_int32_t, if defined */ -#include /* for struct timeval */ -#include - -#if defined(__STDC__) -#include -#define __V(x) x -#else -#include -#define __V(x) (va_alist) va_dcl -#define const -#define volatile -#endif - -#ifdef INET6 -#include "eui64.h" -#endif - -/* - * Limits. - */ - -#define NUM_PPP 1 /* One PPP interface supported (per process) */ -#define MAXWORDLEN 1024 /* max length of word in file (incl null) */ -#define MAXARGS 1 /* max # args to a command */ -#define MAXNAMELEN 256 /* max length of hostname or name for auth */ -#define MAXSECRETLEN 256 /* max length of password or secret */ - -/* - * Option descriptor structure. - */ - -typedef unsigned char bool; - -enum opt_type { - o_special_noarg = 0, - o_special = 1, - o_bool, - o_int, - o_uint32, - o_string, - o_wild -}; - -typedef struct { - char *name; /* name of the option */ - enum opt_type type; - void *addr; - char *description; - unsigned int flags; - void *addr2; - int upper_limit; - int lower_limit; - const char *source; - short int priority; - short int winner; -} option_t; - -/* Values for flags */ -#define OPT_VALUE 0xff /* mask for presupplied value */ -#define OPT_HEX 0x100 /* int option is in hex */ -#define OPT_NOARG 0x200 /* option doesn't take argument */ -#define OPT_OR 0x400 /* OR in argument to value */ -#define OPT_INC 0x800 /* increment value */ -#define OPT_A2OR 0x800 /* for o_bool, OR arg to *(u_char *)addr2 */ -#define OPT_PRIV 0x1000 /* privileged option */ -#define OPT_STATIC 0x2000 /* string option goes into static array */ -#define OPT_LLIMIT 0x4000 /* check value against lower limit */ -#define OPT_ULIMIT 0x8000 /* check value against upper limit */ -#define OPT_LIMITS (OPT_LLIMIT|OPT_ULIMIT) -#define OPT_ZEROOK 0x10000 /* 0 value is OK even if not within limits */ -#define OPT_HIDE 0x10000 /* for o_string, print value as ?????? */ -#define OPT_A2LIST 0x10000 /* for o_special, keep list of values */ -#define OPT_A2CLRB 0x10000 /* o_bool, clr val bits in *(u_char *)addr2 */ -#define OPT_NOINCR 0x20000 /* value mustn't be increased */ -#define OPT_ZEROINF 0x40000 /* with OPT_NOINCR, 0 == infinity */ -#define OPT_PRIO 0x80000 /* process option priorities for this option */ -#define OPT_PRIOSUB 0x100000 /* subsidiary member of priority group */ -#define OPT_ALIAS 0x200000 /* option is alias for previous option */ -#define OPT_A2COPY 0x400000 /* addr2 -> second location to rcv value */ -#define OPT_ENABLE 0x800000 /* use *addr2 as enable for option */ -#define OPT_A2CLR 0x1000000 /* clear *(bool *)addr2 */ -#define OPT_PRIVFIX 0x2000000 /* user can't override if set by root */ -#define OPT_INITONLY 0x4000000 /* option can only be set in init phase */ -#define OPT_DEVEQUIV 0x8000000 /* equiv to device name */ -#define OPT_DEVNAM (OPT_INITONLY | OPT_DEVEQUIV) -#define OPT_A2PRINTER 0x10000000 /* *addr2 is a fn for printing option */ -#define OPT_A2STRVAL 0x20000000 /* *addr2 points to current string value */ -#define OPT_NOPRINT 0x40000000 /* don't print this option at all */ - -#define OPT_VAL(x) ((x) & OPT_VALUE) - -/* Values for priority */ -#define OPRIO_DEFAULT 0 /* a default value */ -#define OPRIO_CFGFILE 1 /* value from a configuration file */ -#define OPRIO_CMDLINE 2 /* value from the command line */ -#define OPRIO_SECFILE 3 /* value from options in a secrets file */ -#define OPRIO_ROOT 100 /* added to priority if OPT_PRIVFIX && root */ - -#ifndef GIDSET_TYPE -#define GIDSET_TYPE gid_t -#endif - -/* Structure representing a list of permitted IP addresses. */ -struct permitted_ip { - int permit; /* 1 = permit, 0 = forbid */ - u_int32_t base; /* match if (addr & mask) == base */ - u_int32_t mask; /* base and mask are in network byte order */ -}; - -/* - * Unfortunately, the linux kernel driver uses a different structure - * for statistics from the rest of the ports. - * This structure serves as a common representation for the bits - * pppd needs. - */ -struct pppd_stats { - unsigned int bytes_in; - unsigned int bytes_out; - unsigned int pkts_in; - unsigned int pkts_out; -}; - -/* Used for storing a sequence of words. Usually malloced. */ -struct wordlist { - struct wordlist *next; - char *word; -}; - -/* An endpoint discriminator, used with multilink. */ -#define MAX_ENDP_LEN 20 /* maximum length of discriminator value */ -struct epdisc { - unsigned char class; - unsigned char length; - unsigned char value[MAX_ENDP_LEN]; -}; - -/* values for epdisc.class */ -#define EPD_NULL 0 /* null discriminator, no data */ -#define EPD_LOCAL 1 -#define EPD_IP 2 -#define EPD_MAC 3 -#define EPD_MAGIC 4 -#define EPD_PHONENUM 5 - -typedef void (*notify_func) __P((void *, int)); - -struct notifier { - struct notifier *next; - notify_func func; - void *arg; -}; - -/* - * Global variables. - */ - -extern int hungup; /* Physical layer has disconnected */ -extern int ifunit; /* Interface unit number */ -extern char ifname[]; /* Interface name */ -extern char hostname[]; /* Our hostname */ -extern u_char outpacket_buf[]; /* Buffer for outgoing packets */ -extern int devfd; /* fd of underlying device */ -extern int fd_ppp; /* fd for talking PPP */ -extern int phase; /* Current state of link - see values below */ -extern int baud_rate; /* Current link speed in bits/sec */ -extern char *progname; /* Name of this program */ -extern int redirect_stderr;/* Connector's stderr should go to file */ -extern char peer_authname[];/* Authenticated name of peer */ -extern int auth_done[NUM_PPP]; /* Methods actually used for auth */ -extern int privileged; /* We were run by real-uid root */ -extern int need_holdoff; /* Need holdoff period after link terminates */ -extern char **script_env; /* Environment variables for scripts */ -extern int detached; /* Have detached from controlling tty */ -extern GIDSET_TYPE groups[NGROUPS_MAX]; /* groups the user is in */ -extern int ngroups; /* How many groups valid in groups */ -extern struct pppd_stats link_stats; /* byte/packet counts etc. for link */ -extern int link_stats_valid; /* set if link_stats is valid */ -extern unsigned link_connect_time; /* time the link was up for */ -extern int using_pty; /* using pty as device (notty or pty opt.) */ -extern int log_to_fd; /* logging to this fd as well as syslog */ -extern bool log_default; /* log_to_fd is default (stdout) */ -extern char *no_ppp_msg; /* message to print if ppp not in kernel */ -extern volatile int status; /* exit status for pppd */ -extern bool devnam_fixed; /* can no longer change devnam */ -extern int unsuccess; /* # unsuccessful connection attempts */ -extern int do_callback; /* set if we want to do callback next */ -extern int doing_callback; /* set if this is a callback */ -extern int error_count; /* # of times error() has been called */ -extern char ppp_devnam[MAXPATHLEN]; -extern char remote_number[MAXNAMELEN]; /* Remote telephone number, if avail. */ -extern int ppp_session_number; /* Session number (eg PPPoE session) */ -extern int fd_devnull; /* fd open to /dev/null */ - -extern int listen_time; /* time to listen first (ms) */ -extern bool doing_multilink; -extern bool multilink_master; -extern bool bundle_eof; -extern bool bundle_terminating; - -extern struct notifier *pidchange; /* for notifications of pid changing */ -extern struct notifier *phasechange; /* for notifications of phase changes */ -extern struct notifier *exitnotify; /* for notification that we're exiting */ -extern struct notifier *sigreceived; /* notification of received signal */ -extern struct notifier *ip_up_notifier; /* IPCP has come up */ -extern struct notifier *ip_down_notifier; /* IPCP has gone down */ -extern struct notifier *auth_up_notifier; /* peer has authenticated */ -extern struct notifier *link_down_notifier; /* link has gone down */ -extern struct notifier *fork_notifier; /* we are a new child process */ - -/* Values for do_callback and doing_callback */ -#define CALLBACK_DIALIN 1 /* we are expecting the call back */ -#define CALLBACK_DIALOUT 2 /* we are dialling out to call back */ - -/* - * Variables set by command-line options. - */ - -extern int debug; /* Debug flag */ -extern int kdebugflag; /* Tell kernel to print debug messages */ -extern int default_device; /* Using /dev/tty or equivalent */ -extern char devnam[MAXPATHLEN]; /* Device name */ -extern int crtscts; /* Use hardware flow control */ -extern bool modem; /* Use modem control lines */ -extern int inspeed; /* Input/Output speed requested */ -extern u_int32_t netmask; /* IP netmask to set on interface */ -extern bool lockflag; /* Create lock file to lock the serial dev */ -extern bool nodetach; /* Don't detach from controlling tty */ -extern bool updetach; /* Detach from controlling tty when link up */ -extern char *initializer; /* Script to initialize physical link */ -extern char *connect_script; /* Script to establish physical link */ -extern char *disconnect_script; /* Script to disestablish physical link */ -extern char *welcomer; /* Script to welcome client after connection */ -extern char *ptycommand; /* Command to run on other side of pty */ -extern int maxconnect; /* Maximum connect time (seconds) */ -extern char user[MAXNAMELEN];/* Our name for authenticating ourselves */ -extern char passwd[MAXSECRETLEN]; /* Password for PAP or CHAP */ -extern bool auth_required; /* Peer is required to authenticate */ -extern bool persist; /* Reopen link after it goes down */ -extern bool uselogin; /* Use /etc/passwd for checking PAP */ -extern char our_name[MAXNAMELEN];/* Our name for authentication purposes */ -extern char remote_name[MAXNAMELEN]; /* Peer's name for authentication */ -extern bool explicit_remote;/* remote_name specified with remotename opt */ -extern bool demand; /* Do dial-on-demand */ -extern char *ipparam; /* Extra parameter for ip up/down scripts */ -extern bool cryptpap; /* Others' PAP passwords are encrypted */ -extern int idle_time_limit;/* Shut down link if idle for this long */ -extern int holdoff; /* Dead time before restarting */ -extern bool holdoff_specified; /* true if user gave a holdoff value */ -extern bool notty; /* Stdin/out is not a tty */ -extern char *pty_socket; /* Socket to connect to pty */ -extern char *record_file; /* File to record chars sent/received */ -extern bool sync_serial; /* Device is synchronous serial device */ -extern int maxfail; /* Max # of unsuccessful connection attempts */ -extern char linkname[MAXPATHLEN]; /* logical name for link */ -extern bool tune_kernel; /* May alter kernel settings as necessary */ -extern int connect_delay; /* Time to delay after connect script */ -extern int max_data_rate; /* max bytes/sec through charshunt */ -extern int req_unit; /* interface unit number to use */ -extern bool multilink; /* enable multilink operation */ -extern bool noendpoint; /* don't send or accept endpt. discrim. */ -extern char *bundle_name; /* bundle name for multilink */ -extern bool dump_options; /* print out option values */ -extern bool dryrun; /* check everything, print options, exit */ -extern int child_wait; /* # seconds to wait for children at end */ - -#ifdef MAXOCTETS -extern unsigned int maxoctets; /* Maximum octetes per session (in bytes) */ -extern int maxoctets_dir; /* Direction : - 0 - in+out (default) - 1 - in - 2 - out - 3 - max(in,out) */ -extern int maxoctets_timeout; /* Timeout for check of octets limit */ -#define PPP_OCTETS_DIRECTION_SUM 0 -#define PPP_OCTETS_DIRECTION_IN 1 -#define PPP_OCTETS_DIRECTION_OUT 2 -#define PPP_OCTETS_DIRECTION_MAXOVERAL 3 -/* same as previos, but little different on RADIUS side */ -#define PPP_OCTETS_DIRECTION_MAXSESSION 4 -#endif - -#ifdef PPP_FILTER -extern struct bpf_program pass_filter; /* Filter for pkts to pass */ -extern struct bpf_program active_filter; /* Filter for link-active pkts */ -#endif - -#ifdef MSLANMAN -extern bool ms_lanman; /* Use LanMan password instead of NT */ - /* Has meaning only with MS-CHAP challenges */ -#endif - -/* Values for auth_pending, auth_done */ -#define PAP_WITHPEER 0x1 -#define PAP_PEER 0x2 -#define CHAP_WITHPEER 0x4 -#define CHAP_PEER 0x8 -#define EAP_WITHPEER 0x10 -#define EAP_PEER 0x20 - -/* Values for auth_done only */ -#define CHAP_MD5_WITHPEER 0x40 -#define CHAP_MD5_PEER 0x80 -#define CHAP_MS_SHIFT 8 /* LSB position for MS auths */ -#define CHAP_MS_WITHPEER 0x100 -#define CHAP_MS_PEER 0x200 -#define CHAP_MS2_WITHPEER 0x400 -#define CHAP_MS2_PEER 0x800 - -extern char *current_option; /* the name of the option being parsed */ -extern int privileged_option; /* set iff the current option came from root */ -extern char *option_source; /* string saying where the option came from */ -extern int option_priority; /* priority of current options */ - -/* - * Values for phase. - */ -#define PHASE_DEAD 0 -#define PHASE_INITIALIZE 1 -#define PHASE_SERIALCONN 2 -#define PHASE_DORMANT 3 -#define PHASE_ESTABLISH 4 -#define PHASE_AUTHENTICATE 5 -#define PHASE_CALLBACK 6 -#define PHASE_NETWORK 7 -#define PHASE_RUNNING 8 -#define PHASE_TERMINATE 9 -#define PHASE_DISCONNECT 10 -#define PHASE_HOLDOFF 11 -#define PHASE_MASTER 12 - -/* - * The following struct gives the addresses of procedures to call - * for a particular protocol. - */ -struct protent { - u_short protocol; /* PPP protocol number */ - /* Initialization procedure */ - void (*init) __P((int unit)); - /* Process a received packet */ - void (*input) __P((int unit, u_char *pkt, int len)); - /* Process a received protocol-reject */ - void (*protrej) __P((int unit)); - /* Lower layer has come up */ - void (*lowerup) __P((int unit)); - /* Lower layer has gone down */ - void (*lowerdown) __P((int unit)); - /* Open the protocol */ - void (*open) __P((int unit)); - /* Close the protocol */ - void (*close) __P((int unit, char *reason)); - /* Print a packet in readable form */ - int (*printpkt) __P((u_char *pkt, int len, - void (*printer) __P((void *, char *, ...)), - void *arg)); - /* Process a received data packet */ - void (*datainput) __P((int unit, u_char *pkt, int len)); - bool enabled_flag; /* 0 iff protocol is disabled */ - char *name; /* Text name of protocol */ - char *data_name; /* Text name of corresponding data protocol */ - option_t *options; /* List of command-line options */ - /* Check requested options, assign defaults */ - void (*check_options) __P((void)); - /* Configure interface for demand-dial */ - int (*demand_conf) __P((int unit)); - /* Say whether to bring up link for this pkt */ - int (*active_pkt) __P((u_char *pkt, int len)); -}; - -/* Table of pointers to supported protocols */ -extern struct protent *protocols[]; - -/* - * This struct contains pointers to a set of procedures for - * doing operations on a "channel". A channel provides a way - * to send and receive PPP packets - the canonical example is - * a serial port device in PPP line discipline (or equivalently - * with PPP STREAMS modules pushed onto it). - */ -struct channel { - /* set of options for this channel */ - option_t *options; - /* find and process a per-channel options file */ - void (*process_extra_options) __P((void)); - /* check all the options that have been given */ - void (*check_options) __P((void)); - /* get the channel ready to do PPP, return a file descriptor */ - int (*connect) __P((void)); - /* we're finished with the channel */ - void (*disconnect) __P((void)); - /* put the channel into PPP `mode' */ - int (*establish_ppp) __P((int)); - /* take the channel out of PPP `mode', restore loopback if demand */ - void (*disestablish_ppp) __P((int)); - /* set the transmit-side PPP parameters of the channel */ - void (*send_config) __P((int, u_int32_t, int, int)); - /* set the receive-side PPP parameters of the channel */ - void (*recv_config) __P((int, u_int32_t, int, int)); - /* cleanup on error or normal exit */ - void (*cleanup) __P((void)); - /* close the device, called in children after fork */ - void (*close) __P((void)); -}; - -extern struct channel *the_channel; - -/* - * Prototypes. - */ - -/* Procedures exported from main.c. */ -void set_ifunit __P((int)); /* set stuff that depends on ifunit */ -void detach __P((void)); /* Detach from controlling tty */ -void die __P((int)); /* Cleanup and exit */ -void quit __P((void)); /* like die(1) */ -void novm __P((char *)); /* Say we ran out of memory, and die */ -void timeout __P((void (*func)(void *), void *arg, int s, int us)); - /* Call func(arg) after s.us seconds */ -void untimeout __P((void (*func)(void *), void *arg)); - /* Cancel call to func(arg) */ -void record_child __P((int, char *, void (*) (void *), void *)); -pid_t safe_fork __P((int, int, int)); /* Fork & close stuff in child */ -int device_script __P((char *cmd, int in, int out, int dont_wait)); - /* Run `cmd' with given stdin and stdout */ -pid_t run_program __P((char *prog, char **args, int must_exist, - void (*done)(void *), void *arg)); - /* Run program prog with args in child */ -void reopen_log __P((void)); /* (re)open the connection to syslog */ -void print_link_stats __P((void)); /* Print stats, if available */ -void reset_link_stats __P((int)); /* Reset (init) stats when link goes up */ -void update_link_stats __P((int)); /* Get stats at link termination */ -void script_setenv __P((char *, char *, int)); /* set script env var */ -void script_unsetenv __P((char *)); /* unset script env var */ -void new_phase __P((int)); /* signal start of new phase */ -void add_notifier __P((struct notifier **, notify_func, void *)); -void remove_notifier __P((struct notifier **, notify_func, void *)); -void notify __P((struct notifier *, int)); -int ppp_send_config __P((int, int, u_int32_t, int, int)); -int ppp_recv_config __P((int, int, u_int32_t, int, int)); -void remove_pidfiles __P((void)); -void lock_db __P((void)); -void unlock_db __P((void)); - -/* Procedures exported from tty.c. */ -void tty_init __P((void)); - -/* Procedures exported from utils.c. */ -void log_packet __P((u_char *, int, char *, int)); - /* Format a packet and log it with syslog */ -void print_string __P((char *, int, void (*) (void *, char *, ...), - void *)); /* Format a string for output */ -int slprintf __P((char *, int, char *, ...)); /* sprintf++ */ -int vslprintf __P((char *, int, char *, va_list)); /* vsprintf++ */ -size_t strlcpy __P((char *, const char *, size_t)); /* safe strcpy */ -size_t strlcat __P((char *, const char *, size_t)); /* safe strncpy */ -void dbglog __P((char *, ...)); /* log a debug message */ -void info __P((char *, ...)); /* log an informational message */ -void notice __P((char *, ...)); /* log a notice-level message */ -void warn __P((char *, ...)); /* log a warning message */ -void error __P((char *, ...)); /* log an error message */ -void fatal __P((char *, ...)); /* log an error message and die(1) */ -void init_pr_log __P((char *, int)); /* initialize for using pr_log */ -void pr_log __P((void *, char *, ...)); /* printer fn, output to syslog */ -void end_pr_log __P((void)); /* finish up after using pr_log */ -void dump_packet __P((const char *, u_char *, int)); - /* dump packet to debug log if interesting */ -ssize_t complete_read __P((int, void *, size_t)); - /* read a complete buffer */ - -/* Procedures exported from auth.c */ -void link_required __P((int)); /* we are starting to use the link */ -void link_terminated __P((int)); /* we are finished with the link */ -void link_down __P((int)); /* the LCP layer has left the Opened state */ -void upper_layers_down __P((int));/* take all NCPs down */ -void link_established __P((int)); /* the link is up; authenticate now */ -void start_networks __P((int)); /* start all the network control protos */ -void continue_networks __P((int)); /* start network [ip, etc] control protos */ -void np_up __P((int, int)); /* a network protocol has come up */ -void np_down __P((int, int)); /* a network protocol has gone down */ -void np_finished __P((int, int)); /* a network protocol no longer needs link */ -void auth_peer_fail __P((int, int)); - /* peer failed to authenticate itself */ -void auth_peer_success __P((int, int, int, char *, int)); - /* peer successfully authenticated itself */ -void auth_withpeer_fail __P((int, int)); - /* we failed to authenticate ourselves */ -void auth_withpeer_success __P((int, int, int)); - /* we successfully authenticated ourselves */ -void auth_check_options __P((void)); - /* check authentication options supplied */ -void auth_reset __P((int)); /* check what secrets we have */ -int check_passwd __P((int, char *, int, char *, int, char **)); - /* Check peer-supplied username/password */ -int get_secret __P((int, char *, char *, char *, int *, int)); - /* get "secret" for chap */ -int get_srp_secret __P((int unit, char *client, char *server, char *secret, - int am_server)); -int auth_ip_addr __P((int, u_int32_t)); - /* check if IP address is authorized */ -int auth_number __P((void)); /* check if remote number is authorized */ -int bad_ip_adrs __P((u_int32_t)); - /* check if IP address is unreasonable */ - -/* Procedures exported from demand.c */ -void demand_conf __P((void)); /* config interface(s) for demand-dial */ -void demand_block __P((void)); /* set all NPs to queue up packets */ -void demand_unblock __P((void)); /* set all NPs to pass packets */ -void demand_discard __P((void)); /* set all NPs to discard packets */ -void demand_rexmit __P((int)); /* retransmit saved frames for an NP */ -int loop_chars __P((unsigned char *, int)); /* process chars from loopback */ -int loop_frame __P((unsigned char *, int)); /* should we bring link up? */ - -/* Procedures exported from multilink.c */ -#ifdef HAVE_MULTILINK -void mp_check_options __P((void)); /* Check multilink-related options */ -int mp_join_bundle __P((void)); /* join our link to an appropriate bundle */ -void mp_exit_bundle __P((void)); /* have disconnected our link from bundle */ -void mp_bundle_terminated __P((void)); -char *epdisc_to_str __P((struct epdisc *)); /* string from endpoint discrim. */ -int str_to_epdisc __P((struct epdisc *, char *)); /* endpt disc. from str */ -#else -#define mp_bundle_terminated() /* nothing */ -#define mp_exit_bundle() /* nothing */ -#define doing_multilink 0 -#define multilink_master 0 -#endif - -/* Procedures exported from sys-*.c */ -void sys_init __P((void)); /* Do system-dependent initialization */ -void sys_cleanup __P((void)); /* Restore system state before exiting */ -int sys_check_options __P((void)); /* Check options specified */ -void sys_close __P((void)); /* Clean up in a child before execing */ -int ppp_available __P((void)); /* Test whether ppp kernel support exists */ -int get_pty __P((int *, int *, char *, int)); /* Get pty master/slave */ -int open_ppp_loopback __P((void)); /* Open loopback for demand-dialling */ -int tty_establish_ppp __P((int)); /* Turn serial port into a ppp interface */ -void tty_disestablish_ppp __P((int)); /* Restore port to normal operation */ -void generic_disestablish_ppp __P((int dev_fd)); /* Restore device setting */ -int generic_establish_ppp __P((int dev_fd)); /* Make a ppp interface */ -void make_new_bundle __P((int, int, int, int)); /* Create new bundle */ -int bundle_attach __P((int)); /* Attach link to existing bundle */ -void cfg_bundle __P((int, int, int, int)); /* Configure existing bundle */ -void destroy_bundle __P((void)); /* Tell driver to destroy bundle */ -void clean_check __P((void)); /* Check if line was 8-bit clean */ -void set_up_tty __P((int, int)); /* Set up port's speed, parameters, etc. */ -void restore_tty __P((int)); /* Restore port's original parameters */ -void setdtr __P((int, int)); /* Raise or lower port's DTR line */ -void output __P((int, u_char *, int)); /* Output a PPP packet */ -void wait_input __P((struct timeval *)); - /* Wait for input, with timeout */ -void add_fd __P((int)); /* Add fd to set to wait for */ -void remove_fd __P((int)); /* Remove fd from set to wait for */ -int read_packet __P((u_char *)); /* Read PPP packet */ -int get_loop_output __P((void)); /* Read pkts from loopback */ -void tty_send_config __P((int, u_int32_t, int, int)); - /* Configure i/f transmit parameters */ -void tty_set_xaccm __P((ext_accm)); - /* Set extended transmit ACCM */ -void tty_recv_config __P((int, u_int32_t, int, int)); - /* Configure i/f receive parameters */ -int ccp_test __P((int, u_char *, int, int)); - /* Test support for compression scheme */ -void ccp_flags_set __P((int, int, int)); - /* Set kernel CCP state */ -int ccp_fatal_error __P((int)); /* Test for fatal decomp error in kernel */ -int get_idle_time __P((int, struct ppp_idle *)); - /* Find out how long link has been idle */ -int get_ppp_stats __P((int, struct pppd_stats *)); - /* Return link statistics */ -void netif_set_mtu __P((int, int)); /* Set PPP interface MTU */ -int netif_get_mtu __P((int)); /* Get PPP interface MTU */ -int sifvjcomp __P((int, int, int, int)); - /* Configure VJ TCP header compression */ -int sifup __P((int)); /* Configure i/f up for one protocol */ -int sifnpmode __P((int u, int proto, enum NPmode mode)); - /* Set mode for handling packets for proto */ -int sifdown __P((int)); /* Configure i/f down for one protocol */ -int sifaddr __P((int, u_int32_t, u_int32_t, u_int32_t)); - /* Configure IPv4 addresses for i/f */ -int cifaddr __P((int, u_int32_t, u_int32_t)); - /* Reset i/f IP addresses */ -#ifdef INET6 -int sif6addr __P((int, eui64_t, eui64_t)); - /* Configure IPv6 addresses for i/f */ -int cif6addr __P((int, eui64_t, eui64_t)); - /* Remove an IPv6 address from i/f */ -#endif -int sifdefaultroute __P((int, u_int32_t, u_int32_t)); - /* Create default route through i/f */ -int cifdefaultroute __P((int, u_int32_t, u_int32_t)); - /* Delete default route through i/f */ -int sifproxyarp __P((int, u_int32_t)); - /* Add proxy ARP entry for peer */ -int cifproxyarp __P((int, u_int32_t)); - /* Delete proxy ARP entry for peer */ -u_int32_t GetMask __P((u_int32_t)); /* Get appropriate netmask for address */ -int lock __P((char *)); /* Create lock file for device */ -int relock __P((int)); /* Rewrite lock file with new pid */ -void unlock __P((void)); /* Delete previously-created lock file */ -void logwtmp __P((const char *, const char *, const char *)); - /* Write entry to wtmp file */ -int get_host_seed __P((void)); /* Get host-dependent random number seed */ -int have_route_to __P((u_int32_t)); /* Check if route to addr exists */ -#ifdef PPP_FILTER -int set_filters __P((struct bpf_program *pass, struct bpf_program *active)); - /* Set filter programs in kernel */ -#endif -#ifdef IPX_CHANGE -int sipxfaddr __P((int, unsigned long, unsigned char *)); -int cipxfaddr __P((int)); -#endif -int get_if_hwaddr __P((u_char *addr, char *name)); -char *get_first_ethernet __P((void)); - -/* Procedures exported from options.c */ -int setipaddr __P((char *, char **, int)); /* Set local/remote ip addresses */ -int parse_args __P((int argc, char **argv)); - /* Parse options from arguments given */ -int options_from_file __P((char *filename, int must_exist, int check_prot, - int privileged)); - /* Parse options from an options file */ -int options_from_user __P((void)); /* Parse options from user's .ppprc */ -int options_for_tty __P((void)); /* Parse options from /etc/ppp/options.tty */ -int options_from_list __P((struct wordlist *, int privileged)); - /* Parse options from a wordlist */ -int getword __P((FILE *f, char *word, int *newlinep, char *filename)); - /* Read a word from a file */ -void option_error __P((char *fmt, ...)); - /* Print an error message about an option */ -int int_option __P((char *, int *)); - /* Simplified number_option for decimal ints */ -void add_options __P((option_t *)); /* Add extra options */ -void check_options __P((void)); /* check values after all options parsed */ -int override_value __P((const char *, int, const char *)); - /* override value if permitted by priority */ -void print_options __P((void (*) __P((void *, char *, ...)), void *)); - /* print out values of all options */ - -int parse_dotted_ip __P((char *, u_int32_t *)); - -/* - * Hooks to enable plugins to change various things. - */ -extern int (*new_phase_hook) __P((int)); -extern int (*idle_time_hook) __P((struct ppp_idle *)); -extern int (*holdoff_hook) __P((void)); -extern int (*pap_check_hook) __P((void)); -extern int (*pap_auth_hook) __P((char *user, char *passwd, char **msgp, - struct wordlist **paddrs, - struct wordlist **popts)); -extern void (*pap_logout_hook) __P((void)); -extern int (*pap_passwd_hook) __P((char *user, char *passwd)); -extern int (*allowed_address_hook) __P((u_int32_t addr)); -extern void (*ip_up_hook) __P((void)); -extern void (*ip_down_hook) __P((void)); -extern void (*ip_choose_hook) __P((u_int32_t *)); - -extern int (*chap_check_hook) __P((void)); -extern int (*chap_passwd_hook) __P((char *user, char *passwd)); - -/* Let a plugin snoop sent and received packets. Useful for L2TP */ -extern void (*snoop_recv_hook) __P((unsigned char *p, int len)); -extern void (*snoop_send_hook) __P((unsigned char *p, int len)); - -/* - * Inline versions of get/put char/short/long. - * Pointer is advanced; we assume that both arguments - * are lvalues and will already be in registers. - * cp MUST be u_char *. - */ -#define GETCHAR(c, cp) { \ - (c) = *(cp)++; \ -} -#define PUTCHAR(c, cp) { \ - *(cp)++ = (u_char) (c); \ -} - - -#define GETSHORT(s, cp) { \ - (s) = *(cp)++ << 8; \ - (s) |= *(cp)++; \ -} -#define PUTSHORT(s, cp) { \ - *(cp)++ = (u_char) ((s) >> 8); \ - *(cp)++ = (u_char) (s); \ -} - -#define GETLONG(l, cp) { \ - (l) = *(cp)++ << 8; \ - (l) |= *(cp)++; (l) <<= 8; \ - (l) |= *(cp)++; (l) <<= 8; \ - (l) |= *(cp)++; \ -} -#define PUTLONG(l, cp) { \ - *(cp)++ = (u_char) ((l) >> 24); \ - *(cp)++ = (u_char) ((l) >> 16); \ - *(cp)++ = (u_char) ((l) >> 8); \ - *(cp)++ = (u_char) (l); \ -} - -#define INCPTR(n, cp) ((cp) += (n)) -#define DECPTR(n, cp) ((cp) -= (n)) - -/* - * System dependent definitions for user-level 4.3BSD UNIX implementation. - */ - -#define TIMEOUT(r, f, t) timeout((r), (f), (t), 0) -#define UNTIMEOUT(r, f) untimeout((r), (f)) - -#define BCOPY(s, d, l) memcpy(d, s, l) -#define BZERO(s, n) memset(s, 0, n) -#define BCMP(s1, s2, l) memcmp(s1, s2, l) - -#define PRINTMSG(m, l) { info("Remote message: %0.*v", l, m); } - -/* - * MAKEHEADER - Add Header fields to a packet. - */ -#define MAKEHEADER(p, t) { \ - PUTCHAR(PPP_ALLSTATIONS, p); \ - PUTCHAR(PPP_UI, p); \ - PUTSHORT(t, p); } - -/* - * Exit status values. - */ -#define EXIT_OK 0 -#define EXIT_FATAL_ERROR 1 -#define EXIT_OPTION_ERROR 2 -#define EXIT_NOT_ROOT 3 -#define EXIT_NO_KERNEL_SUPPORT 4 -#define EXIT_USER_REQUEST 5 -#define EXIT_LOCK_FAILED 6 -#define EXIT_OPEN_FAILED 7 -#define EXIT_CONNECT_FAILED 8 -#define EXIT_PTYCMD_FAILED 9 -#define EXIT_NEGOTIATION_FAILED 10 -#define EXIT_PEER_AUTH_FAILED 11 -#define EXIT_IDLE_TIMEOUT 12 -#define EXIT_CONNECT_TIME 13 -#define EXIT_CALLBACK 14 -#define EXIT_PEER_DEAD 15 -#define EXIT_HANGUP 16 -#define EXIT_LOOPBACK 17 -#define EXIT_INIT_FAILED 18 -#define EXIT_AUTH_TOPEER_FAILED 19 -#ifdef MAXOCTETS -#define EXIT_TRAFFIC_LIMIT 20 -#endif -#define EXIT_CNID_AUTH_FAILED 21 - -/* - * Debug macros. Slightly useful for finding bugs in pppd, not particularly - * useful for finding out why your connection isn't being established. - */ -#ifdef DEBUGALL -#define DEBUGMAIN 1 -#define DEBUGFSM 1 -#define DEBUGLCP 1 -#define DEBUGIPCP 1 -#define DEBUGIPV6CP 1 -#define DEBUGUPAP 1 -#define DEBUGCHAP 1 -#endif - -#ifndef LOG_PPP /* we use LOG_LOCAL2 for syslog by default */ -#if defined(DEBUGMAIN) || defined(DEBUGFSM) || defined(DEBUGSYS) \ - || defined(DEBUGLCP) || defined(DEBUGIPCP) || defined(DEBUGUPAP) \ - || defined(DEBUGCHAP) || defined(DEBUG) || defined(DEBUGIPV6CP) -#define LOG_PPP LOG_LOCAL2 -#else -#define LOG_PPP LOG_DAEMON -#endif -#endif /* LOG_PPP */ - -#ifdef DEBUGMAIN -#define MAINDEBUG(x) if (debug) dbglog x -#else -#define MAINDEBUG(x) -#endif - -#ifdef DEBUGSYS -#define SYSDEBUG(x) if (debug) dbglog x -#else -#define SYSDEBUG(x) -#endif - -#ifdef DEBUGFSM -#define FSMDEBUG(x) if (debug) dbglog x -#else -#define FSMDEBUG(x) -#endif - -#ifdef DEBUGLCP -#define LCPDEBUG(x) if (debug) dbglog x -#else -#define LCPDEBUG(x) -#endif - -#ifdef DEBUGIPCP -#define IPCPDEBUG(x) if (debug) dbglog x -#else -#define IPCPDEBUG(x) -#endif - -#ifdef DEBUGIPV6CP -#define IPV6CPDEBUG(x) if (debug) dbglog x -#else -#define IPV6CPDEBUG(x) -#endif - -#ifdef DEBUGUPAP -#define UPAPDEBUG(x) if (debug) dbglog x -#else -#define UPAPDEBUG(x) -#endif - -#ifdef DEBUGCHAP -#define CHAPDEBUG(x) if (debug) dbglog x -#else -#define CHAPDEBUG(x) -#endif - -#ifdef DEBUGIPXCP -#define IPXCPDEBUG(x) if (debug) dbglog x -#else -#define IPXCPDEBUG(x) -#endif - -#ifndef SIGTYPE -#if defined(sun) || defined(SYSV) || defined(POSIX_SOURCE) -#define SIGTYPE void -#else -#define SIGTYPE int -#endif /* defined(sun) || defined(SYSV) || defined(POSIX_SOURCE) */ -#endif /* SIGTYPE */ - -#ifndef MIN -#define MIN(a, b) ((a) < (b)? (a): (b)) -#endif -#ifndef MAX -#define MAX(a, b) ((a) > (b)? (a): (b)) -#endif - -#ifndef offsetof -#define offsetof(type, member) ((size_t) &((type *)0)->member) -#endif - -#endif /* __PPP_H__ */ diff --git a/pppd_plugin/src/pppd/sha1.h b/pppd_plugin/src/pppd/sha1.h deleted file mode 100644 index 83f64df..0000000 --- a/pppd_plugin/src/pppd/sha1.h +++ /dev/null @@ -1,31 +0,0 @@ -/* sha1.h */ - -/* If OpenSSL is in use, then use that version of SHA-1 */ -#ifdef OPENSSL -#include -#define __SHA1_INCLUDE_ -#endif - -#ifndef __SHA1_INCLUDE_ - -#ifndef SHA1_SIGNATURE_SIZE -#ifdef SHA_DIGESTSIZE -#define SHA1_SIGNATURE_SIZE SHA_DIGESTSIZE -#else -#define SHA1_SIGNATURE_SIZE 20 -#endif -#endif - -typedef struct { - u_int32_t state[5]; - u_int32_t count[2]; - unsigned char buffer[64]; -} SHA1_CTX; - -extern void SHA1_Init(SHA1_CTX *); -extern void SHA1_Update(SHA1_CTX *, const unsigned char *, unsigned int); -extern void SHA1_Final(unsigned char[SHA1_SIGNATURE_SIZE], SHA1_CTX *); - -#define __SHA1_INCLUDE_ -#endif /* __SHA1_INCLUDE_ */ - diff --git a/pppd_plugin/src/pppd/spinlock.h b/pppd_plugin/src/pppd/spinlock.h deleted file mode 100644 index 967fe37..0000000 --- a/pppd_plugin/src/pppd/spinlock.h +++ /dev/null @@ -1,59 +0,0 @@ -#ifndef __SPINLOCK_H__ -#define __SPINLOCK_H__ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include "tdb.h" - -#ifdef USE_SPINLOCKS - -#define RWLOCK_BIAS 0x1000UL - -/* OS SPECIFIC */ -#define MAX_BUSY_LOOPS 1000 -#undef USE_SCHED_YIELD - -/* ARCH SPECIFIC */ -/* We should make sure these are padded to a cache line */ -#if defined(SPARC_SPINLOCKS) -typedef volatile char spinlock_t; -#elif defined(POWERPC_SPINLOCKS) -typedef volatile unsigned long spinlock_t; -#elif defined(INTEL_SPINLOCKS) -typedef volatile int spinlock_t; -#elif defined(MIPS_SPINLOCKS) -typedef volatile unsigned long spinlock_t; -#else -#error Need to implement spinlock code in spinlock.h -#endif - -typedef struct { - spinlock_t lock; - volatile int count; -} tdb_rwlock_t; - -int tdb_spinlock(TDB_CONTEXT *tdb, int list, int rw_type); -int tdb_spinunlock(TDB_CONTEXT *tdb, int list, int rw_type); -int tdb_create_rwlocks(int fd, unsigned int hash_size); -int tdb_clear_spinlocks(TDB_CONTEXT *tdb); - -#define TDB_SPINLOCK_SIZE(hash_size) (((hash_size) + 1) * sizeof(tdb_rwlock_t)) - -#else /* !USE_SPINLOCKS */ -#if 0 -#define tdb_create_rwlocks(fd, hash_size) 0 -#define tdb_spinlock(tdb, list, rw_type) (-1) -#define tdb_spinunlock(tdb, list, rw_type) (-1) -#else -int tdb_spinlock(TDB_CONTEXT *tdb, int list, int rw_type); -int tdb_spinunlock(TDB_CONTEXT *tdb, int list, int rw_type); -int tdb_create_rwlocks(int fd, unsigned int hash_size); -#endif -int tdb_clear_spinlocks(TDB_CONTEXT *tdb); -#define TDB_SPINLOCK_SIZE(hash_size) 0 - -#endif - -#endif diff --git a/pppd_plugin/src/pppd/tdb.h b/pppd_plugin/src/pppd/tdb.h deleted file mode 100644 index 153b6e9..0000000 --- a/pppd_plugin/src/pppd/tdb.h +++ /dev/null @@ -1,164 +0,0 @@ -#ifndef __TDB_H__ -#define __TDB_H__ - -/* - Unix SMB/CIFS implementation. - - trivial database library - - Copyright (C) Andrew Tridgell 1999-2004 - - ** NOTE! The following LGPL license applies to the tdb - ** library. This does NOT imply that all of Samba is released - ** under the LGPL - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -*/ - -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef PRINTF_ATTRIBUTE -/** Use gcc attribute to check printf fns. a1 is the 1-based index of - * the parameter containing the format, and a2 the index of the first - * argument. Note that some gcc 2.x versions don't handle this - * properly **/ -#if (__GNUC__ >= 3) -#define PRINTF_ATTRIBUTE(a1, a2) __attribute__ ((format (__printf__, a1, a2))) -#else -#define PRINTF_ATTRIBUTE(a1, a2) -#endif -#endif - -/* flags to tdb_store() */ -#define TDB_REPLACE 1 -#define TDB_INSERT 2 -#define TDB_MODIFY 3 - -/* flags for tdb_open() */ -#define TDB_DEFAULT 0 /* just a readability place holder */ -#define TDB_CLEAR_IF_FIRST 1 -#define TDB_INTERNAL 2 /* don't store on disk */ -#define TDB_NOLOCK 4 /* don't do any locking */ -#define TDB_NOMMAP 8 /* don't use mmap */ -#define TDB_CONVERT 16 /* convert endian (internal use) */ -#define TDB_BIGENDIAN 32 /* header is big-endian (internal use) */ - -#define TDB_ERRCODE(code, ret) ((tdb->ecode = (code)), ret) - -/* error codes */ -enum TDB_ERROR {TDB_SUCCESS=0, TDB_ERR_CORRUPT, TDB_ERR_IO, TDB_ERR_LOCK, - TDB_ERR_OOM, TDB_ERR_EXISTS, TDB_ERR_NOLOCK, TDB_ERR_LOCK_TIMEOUT, - TDB_ERR_NOEXIST}; - -#ifndef u32 -#define u32 unsigned -#endif - -typedef struct { - char *dptr; - size_t dsize; -} TDB_DATA; - -typedef u32 tdb_len; -typedef u32 tdb_off; - -/* this is stored at the front of every database */ -struct tdb_header { - char magic_food[32]; /* for /etc/magic */ - u32 version; /* version of the code */ - u32 hash_size; /* number of hash entries */ - tdb_off rwlocks; - tdb_off reserved[31]; -}; - -struct tdb_lock_type { - u32 count; - u32 ltype; -}; - -struct tdb_traverse_lock { - struct tdb_traverse_lock *next; - u32 off; - u32 hash; -}; - -/* this is the context structure that is returned from a db open */ -typedef struct tdb_context { - char *name; /* the name of the database */ - void *map_ptr; /* where it is currently mapped */ - int fd; /* open file descriptor for the database */ - tdb_len map_size; /* how much space has been mapped */ - int read_only; /* opened read-only */ - struct tdb_lock_type *locked; /* array of chain locks */ - enum TDB_ERROR ecode; /* error code for last tdb error */ - struct tdb_header header; /* a cached copy of the header */ - u32 flags; /* the flags passed to tdb_open */ - struct tdb_traverse_lock travlocks; /* current traversal locks */ - struct tdb_context *next; /* all tdbs to avoid multiple opens */ - dev_t device; /* uniquely identifies this tdb */ - ino_t inode; /* uniquely identifies this tdb */ - void (*log_fn)(struct tdb_context *tdb, int level, const char *, ...) PRINTF_ATTRIBUTE(3,4); /* logging function */ - u32 (*hash_fn)(TDB_DATA *key); - int open_flags; /* flags used in the open - needed by reopen */ -} TDB_CONTEXT; - -typedef int (*tdb_traverse_func)(TDB_CONTEXT *, TDB_DATA, TDB_DATA, void *); -typedef void (*tdb_log_func)(TDB_CONTEXT *, int , const char *, ...); -typedef u32 (*tdb_hash_func)(TDB_DATA *key); - -TDB_CONTEXT *tdb_open(const char *name, int hash_size, int tdb_flags, - int open_flags, mode_t mode); -TDB_CONTEXT *tdb_open_ex(const char *name, int hash_size, int tdb_flags, - int open_flags, mode_t mode, - tdb_log_func log_fn, - tdb_hash_func hash_fn); - -int tdb_reopen(TDB_CONTEXT *tdb); -int tdb_reopen_all(void); -void tdb_logging_function(TDB_CONTEXT *tdb, tdb_log_func); -enum TDB_ERROR tdb_error(TDB_CONTEXT *tdb); -const char *tdb_errorstr(TDB_CONTEXT *tdb); -TDB_DATA tdb_fetch(TDB_CONTEXT *tdb, TDB_DATA key); -int tdb_delete(TDB_CONTEXT *tdb, TDB_DATA key); -int tdb_store(TDB_CONTEXT *tdb, TDB_DATA key, TDB_DATA dbuf, int flag); -int tdb_append(TDB_CONTEXT *tdb, TDB_DATA key, TDB_DATA new_dbuf); -int tdb_close(TDB_CONTEXT *tdb); -TDB_DATA tdb_firstkey(TDB_CONTEXT *tdb); -TDB_DATA tdb_nextkey(TDB_CONTEXT *tdb, TDB_DATA key); -int tdb_traverse(TDB_CONTEXT *tdb, tdb_traverse_func fn, void *); -int tdb_exists(TDB_CONTEXT *tdb, TDB_DATA key); -int tdb_lockkeys(TDB_CONTEXT *tdb, u32 number, TDB_DATA keys[]); -void tdb_unlockkeys(TDB_CONTEXT *tdb); -int tdb_lockall(TDB_CONTEXT *tdb); -void tdb_unlockall(TDB_CONTEXT *tdb); - -/* Low level locking functions: use with care */ -void tdb_set_lock_alarm(sig_atomic_t *palarm); -int tdb_chainlock(TDB_CONTEXT *tdb, TDB_DATA key); -int tdb_chainunlock(TDB_CONTEXT *tdb, TDB_DATA key); - -/* Debug functions. Not used in production. */ -void tdb_dump_all(TDB_CONTEXT *tdb); -int tdb_printfreelist(TDB_CONTEXT *tdb); - -extern TDB_DATA tdb_null; - -#ifdef __cplusplus -} -#endif - -#endif /* tdb.h */ diff --git a/pppd_plugin/src/pppd/upap.h b/pppd_plugin/src/pppd/upap.h deleted file mode 100644 index 5cb59e9..0000000 --- a/pppd_plugin/src/pppd/upap.h +++ /dev/null @@ -1,110 +0,0 @@ -/* - * upap.h - User/Password Authentication Protocol definitions. - * - * Copyright (c) 1984-2000 Carnegie Mellon University. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The name "Carnegie Mellon University" must not be used to - * endorse or promote products derived from this software without - * prior written permission. For permission or any legal - * details, please contact - * Office of Technology Transfer - * Carnegie Mellon University - * 5000 Forbes Avenue - * Pittsburgh, PA 15213-3890 - * (412) 268-4387, fax: (412) 268-7395 - * tech-transfer@andrew.cmu.edu - * - * 4. Redistributions of any form whatsoever must retain the following - * acknowledgment: - * "This product includes software developed by Computing Services - * at Carnegie Mellon University (http://www.cmu.edu/computing/)." - * - * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO - * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY - * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE - * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN - * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING - * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - * - * $Id: upap.h,v 1.8 2002/12/04 23:03:33 paulus Exp $ - */ - -/* - * Packet header = Code, id, length. - */ -#define UPAP_HEADERLEN 4 - - -/* - * UPAP codes. - */ -#define UPAP_AUTHREQ 1 /* Authenticate-Request */ -#define UPAP_AUTHACK 2 /* Authenticate-Ack */ -#define UPAP_AUTHNAK 3 /* Authenticate-Nak */ - - -/* - * Each interface is described by upap structure. - */ -typedef struct upap_state { - int us_unit; /* Interface unit number */ - char *us_user; /* User */ - int us_userlen; /* User length */ - char *us_passwd; /* Password */ - int us_passwdlen; /* Password length */ - int us_clientstate; /* Client state */ - int us_serverstate; /* Server state */ - u_char us_id; /* Current id */ - int us_timeouttime; /* Timeout (seconds) for auth-req retrans. */ - int us_transmits; /* Number of auth-reqs sent */ - int us_maxtransmits; /* Maximum number of auth-reqs to send */ - int us_reqtimeout; /* Time to wait for auth-req from peer */ -} upap_state; - - -/* - * Client states. - */ -#define UPAPCS_INITIAL 0 /* Connection down */ -#define UPAPCS_CLOSED 1 /* Connection up, haven't requested auth */ -#define UPAPCS_PENDING 2 /* Connection down, have requested auth */ -#define UPAPCS_AUTHREQ 3 /* We've sent an Authenticate-Request */ -#define UPAPCS_OPEN 4 /* We've received an Ack */ -#define UPAPCS_BADAUTH 5 /* We've received a Nak */ - -/* - * Server states. - */ -#define UPAPSS_INITIAL 0 /* Connection down */ -#define UPAPSS_CLOSED 1 /* Connection up, haven't requested auth */ -#define UPAPSS_PENDING 2 /* Connection down, have requested auth */ -#define UPAPSS_LISTEN 3 /* Listening for an Authenticate */ -#define UPAPSS_OPEN 4 /* We've sent an Ack */ -#define UPAPSS_BADAUTH 5 /* We've sent a Nak */ - - -/* - * Timeouts. - */ -#define UPAP_DEFTIMEOUT 3 /* Timeout (seconds) for retransmitting req */ -#define UPAP_DEFREQTIME 30 /* Time to wait for auth-req from peer */ - -extern upap_state upap[]; - -void upap_authwithpeer __P((int, char *, char *)); -void upap_authpeer __P((int)); - -extern struct protent pap_protent; diff --git a/pppd_plugin/src/pptp.c b/pppd_plugin/src/pptp.c deleted file mode 100644 index 1522d19..0000000 --- a/pppd_plugin/src/pptp.c +++ /dev/null @@ -1,344 +0,0 @@ -/*************************************************************************** - * Copyright (C) 2006 by Kozlov D. * - * xeb@mail.ru * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License as published by * - * the Free Software Foundation; either version 2 of the License, or * - * (at your option) any later version. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License * - * along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - ***************************************************************************/ - - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "pppd/pppd.h" -#include "pppd/fsm.h" -#include "pppd/lcp.h" -#include "pppd/ipcp.h" -#include "pppd/ccp.h" -#include "pppd/pathnames.h" - -#include "pptp_callmgr.h" -#include -#include -#include "if_pppox.h" - -#include -#include - - - -extern char** environ; - -char pppd_version[] = PPPD_VERSION; -extern int new_style_driver; - - -char *pptp_server = NULL; -char *pptp_client = NULL; -char *pptp_phone = NULL; -int pptp_sock=-1; -int pptp_timeout=100000; -struct in_addr localbind = { INADDR_NONE }; - -static int callmgr_sock; -static int pptp_fd; -int call_ID; - -//static struct in_addr get_ip_address(char *name); -static int open_callmgr(int call_id,struct in_addr inetaddr, char *phonenr,int window); -static void launch_callmgr(int call_is,struct in_addr inetaddr, char *phonenr,int window); -static int get_call_id(int sock, pid_t gre, pid_t pppd, u_int16_t *peer_call_id); - -//static int pptp_devname_hook(char *cmd, char **argv, int doit); -static option_t Options[] = -{ - { "pptp_server", o_string, &pptp_server, - "PPTP Server" }, - { "pptp_client", o_string, &pptp_client, - "PPTP Client" }, - { "pptp_sock",o_int, &pptp_sock, - "PPTP socket" }, - { "pptp_phone", o_string, &pptp_phone, - "PPTP Phone number" }, - { NULL } -}; - -static int pptp_connect(void); -//static void pptp_send_config(int mtu,u_int32_t asyncmap,int pcomp,int accomp); -//static void pptp_recv_config(int mru,u_int32_t asyncmap,int pcomp,int accomp); -static void pptp_disconnect(void); - -struct channel pptp_channel = { - options: Options, - //process_extra_options: &PPPOEDeviceOptions, - check_options: NULL, - connect: &pptp_connect, - disconnect: &pptp_disconnect, - establish_ppp: &generic_establish_ppp, - disestablish_ppp: &generic_disestablish_ppp, - //send_config: &pptp_send_config, - //recv_config: &pptp_recv_config, - close: NULL, - cleanup: NULL -}; - -static int pptp_start_server(void) -{ - pptp_fd=pptp_sock; - sprintf(ppp_devnam,"pptp (%s)",pptp_client); - - return pptp_fd; -} -static int pptp_start_client(void) -{ - socklen_t len; - struct sockaddr_pppox src_addr,dst_addr; - struct hostent *hostinfo; - - hostinfo=gethostbyname(pptp_server); - if (!hostinfo) - { - error("PPTP: Unknown host %s\n", pptp_server); - return -1; - } - dst_addr.sa_addr.pptp.sin_addr=*(struct in_addr*)hostinfo->h_addr; - { - int sock; - struct sockaddr_in addr; - len=sizeof(addr); - addr.sin_addr=dst_addr.sa_addr.pptp.sin_addr; - addr.sin_family=AF_INET; - addr.sin_port=htons(1700); - sock=socket(AF_INET,SOCK_DGRAM,0); - if (connect(sock,(struct sockaddr*)&addr,sizeof(addr))) - { - close(sock); - error("PPTP: connect failed (%s)\n",strerror(errno)); - return -1; - } - getsockname(sock,(struct sockaddr*)&addr,&len); - src_addr.sa_addr.pptp.sin_addr=addr.sin_addr; - close(sock); - } - //info("PPTP: connect server=%s\n",inet_ntoa(conn.sin_addr)); - //conn.loc_addr.s_addr=INADDR_NONE; - //conn.timeout=1; - //conn.window=pptp_window; - - src_addr.sa_family=AF_PPPOX; - src_addr.sa_protocol=PX_PROTO_PPTP; - src_addr.sa_addr.pptp.call_id=0; - - dst_addr.sa_family=AF_PPPOX; - dst_addr.sa_protocol=PX_PROTO_PPTP; - dst_addr.sa_addr.pptp.call_id=0; - - pptp_fd=socket(AF_PPPOX,SOCK_STREAM,PX_PROTO_PPTP); - if (pptp_fd<0) - { - error("PPTP: failed to create PPTP socket (%s)\n",strerror(errno)); - return -1; - } - if (bind(pptp_fd,(struct sockaddr*)&src_addr,sizeof(src_addr))) - { - close(pptp_fd); - error("PPTP: failed to bind PPTP socket (%s)\n",strerror(errno)); - return -1; - } - len=sizeof(src_addr); - getsockname(pptp_fd,(struct sockaddr*)&src_addr,&len); - call_ID=src_addr.sa_addr.pptp.call_id; - - do { - /* - * Open connection to call manager (Launch call manager if necessary.) - */ - callmgr_sock = open_callmgr(src_addr.sa_addr.pptp.call_id,dst_addr.sa_addr.pptp.sin_addr, pptp_phone,50); - if (callmgr_sock<0) - { - close(pptp_fd); - return -1; - } - /* Exchange PIDs, get call ID */ - } while (get_call_id(callmgr_sock, getpid(), getpid(), &dst_addr.sa_addr.pptp.call_id) < 0); - - if (connect(pptp_fd,(struct sockaddr*)&dst_addr,sizeof(dst_addr))) - { - close(callmgr_sock); - close(pptp_fd); - error("PPTP: failed to connect PPTP socket (%s)\n",strerror(errno)); - return -1; - } - - sprintf(ppp_devnam,"pptp (%s)",pptp_server); - - return pptp_fd; -} -static int pptp_connect(void) -{ - if ((!pptp_server && !pptp_client) || (pptp_server && pptp_client)) - { - fatal("PPTP: unknown mode (you must specify pptp_server or pptp_client option)"); - return -1; - } - - if (pptp_server) return pptp_start_client(); - return pptp_start_server(); -} - -static void pptp_disconnect(void) -{ - if (pptp_server) close(callmgr_sock); - close(pptp_fd); -} - -static int open_callmgr(int call_id,struct in_addr inetaddr, char *phonenr,int window) -{ - /* Try to open unix domain socket to call manager. */ - struct sockaddr_un where; - const int NUM_TRIES = 3; - int i, fd; - pid_t pid; - int status; - /* Open socket */ - if ((fd = socket(AF_UNIX, SOCK_STREAM, 0)) < 0) - { - fatal("Could not create unix domain socket: %s", strerror(errno)); - } - /* Make address */ - callmgr_name_unixsock(&where, inetaddr, localbind); - for (i = 0; i < NUM_TRIES; i++) - { - if (connect(fd, (struct sockaddr *) &where, sizeof(where)) < 0) - { - /* couldn't connect. We'll have to launch this guy. */ - - unlink (where.sun_path); - - /* fork and launch call manager process */ - switch (pid = fork()) - { - case -1: /* failure */ - fatal("fork() to launch call manager failed."); - case 0: /* child */ - { - close (fd); - close(pptp_fd); - /* close the pty and gre in the call manager */ - // close(pty_fd); - //close(gre_fd); - launch_callmgr(call_id,inetaddr, phonenr,window); - } - default: /* parent */ - waitpid(pid, &status, 0); - if (status!= 0) - { - close(fd); - error("Call manager exited with error %d", status); - return -1; - } - break; - } - sleep(1); - } - else return fd; - } - close(fd); - error("Could not launch call manager after %d tries.", i); - return -1; /* make gcc happy */ -} - -/*** call the call manager main ***********************************************/ -static void launch_callmgr(int call_id,struct in_addr inetaddr, char *phonenr,int window) -{ - char win[10]; - char call[10]; - char *my_argv[9] = { "pptp", inet_ntoa(inetaddr), "--call_id",call,"--phone",phonenr,"--window",win,NULL }; - char buf[128]; - sprintf(win,"%u",window); - sprintf(call,"%u",call_id); - snprintf(buf, sizeof(buf), "pptp: call manager for %s", my_argv[1]); - //inststr(argc, argv, envp, buf); - exit(callmgr_main(8, my_argv, environ)); -} - -/*** exchange data with the call manager *************************************/ -/* XXX need better error checking XXX */ -static int get_call_id(int sock, pid_t gre, pid_t pppd, - u_int16_t *peer_call_id) -{ - u_int16_t m_call_id, m_peer_call_id; - /* write pid's to socket */ - /* don't bother with network byte order, because pid's are meaningless - * outside the local host. - */ - int rc; - rc = write(sock, &gre, sizeof(gre)); - if (rc != sizeof(gre)) - return -1; - rc = write(sock, &pppd, sizeof(pppd)); - if (rc != sizeof(pppd)) - return -1; - rc = read(sock, &m_call_id, sizeof(m_call_id)); - if (rc != sizeof(m_call_id)) - return -1; - rc = read(sock, &m_peer_call_id, sizeof(m_peer_call_id)); - if (rc != sizeof(m_peer_call_id)) - return -1; - /* - * XXX FIXME ... DO ERROR CHECKING & TIME-OUTS XXX - * (Rhialto: I am assuming for now that timeouts are not relevant - * here, because the read and write calls would return -1 (fail) when - * the peer goes away during the process. We know it is (or was) - * running because the connect() call succeeded.) - * (James: on the other hand, if the route to the peer goes away, we - * wouldn't get told by read() or write() for quite some time.) - */ - *peer_call_id = m_peer_call_id; - return 0; -} - -void plugin_init(void) -{ - /*if (!ppp_available() && !new_style_driver) - { - fatal("Linux kernel does not support PPP -- are you running 2.4.x?"); - }*/ - - add_options(Options); - - info("PPTP plugin version %s compiled for pppd-%s, linux-%s", - VERSION, PPPD_VERSION,KERNELVERSION); - - the_channel = &pptp_channel; - modem = 0; -} - diff --git a/pppd_plugin/src/pptp_callmgr.c b/pppd_plugin/src/pptp_callmgr.c deleted file mode 100644 index 20bb736..0000000 --- a/pppd_plugin/src/pptp_callmgr.c +++ /dev/null @@ -1,403 +0,0 @@ -/* pptp_callmgr.c ... Call manager for PPTP connections. - * Handles TCP port 1723 protocol. - * C. Scott Ananian - * - * $Id: pptp_callmgr.c,v 1.20 2005/03/31 07:42:39 quozl Exp $ - */ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "pptp_callmgr.h" -#include "pptp_ctrl.h" -#include "pptp_msg.h" -#include "dirutil.h" -#include "vector.h" -#include "util.h" - -extern struct in_addr localbind; /* from pptp.c */ -extern int call_ID; - -int open_inetsock(struct in_addr inetaddr); -int open_unixsock(struct in_addr inetaddr); -void close_inetsock(int fd, struct in_addr inetaddr); -void close_unixsock(int fd, struct in_addr inetaddr); - -sigjmp_buf callmgr_env; - -void callmgr_sighandler(int sig) { - /* TODO: according to signal(2), siglongjmp() is unsafe used here */ - siglongjmp (callmgr_env, 1); -} - -void callmgr_do_nothing(int sig) { - /* do nothing signal handler */ -} - -struct local_callinfo { - int unix_sock; - pid_t pid[2]; -}; - -struct local_conninfo { - VECTOR * call_list; - fd_set * call_set; -}; - -/* Call callback */ -void call_callback(PPTP_CONN *conn, PPTP_CALL *call, enum call_state state) -{ - struct local_callinfo *lci; - struct local_conninfo *conninfo; - u_int16_t call_id[2]; - switch(state) { - case CALL_OPEN_DONE: - /* okey dokey. This means that the call_id and peer_call_id are - * now valid, so lets send them on to our friends who requested - * this call. */ - lci = pptp_call_closure_get(conn, call); assert(lci != NULL); - pptp_call_get_ids(conn, call, &call_id[0], &call_id[1]); - write(lci->unix_sock, &call_id, sizeof(call_id)); - /* Our duty to the fatherland is now complete. */ - break; - case CALL_OPEN_FAIL: - case CALL_CLOSE_RQST: - case CALL_CLOSE_DONE: - /* don't need to do anything here, except make sure tables - * are sync'ed */ - log("Closing connection (call state)"); - conninfo = pptp_conn_closure_get(conn); - lci = pptp_call_closure_get(conn, call); - assert(lci != NULL && conninfo != NULL); - if (vector_contains(conninfo->call_list, lci->unix_sock)) { - vector_remove(conninfo->call_list, lci->unix_sock); - close(lci->unix_sock); - FD_CLR(lci->unix_sock, conninfo->call_set); - //if(lci->pid[0] > 1) kill(lci->pid[0], SIGTERM); - //if(lci->pid[1] > 1) kill(lci->pid[1], SIGTERM); - } - break; - default: - log("Unhandled call callback state [%d].", (int) state); - break; - } -} - -/****************************************************************************** - * NOTE ABOUT 'VOLATILE': - * several variables here get a volatile qualifier to silence warnings - * from older (before 3.0) gccs. if the longjmp stuff is removed, - * the volatile qualifiers should be removed as well. - *****************************************************************************/ - -/*** Call Manager *************************************************************/ -int callmgr_main(int argc, char **argv, char **envp) -{ - struct in_addr inetaddr; - int inet_sock, unix_sock; - fd_set call_set; - PPTP_CONN * conn; - VECTOR * call_list; - int max_fd = 0; - volatile int first = 1; - int retval; - int i; - char * volatile phonenr=NULL; - int volatile window=10; - //int volatile call_id=0; - /* Step 0: Check arguments */ - if (argc < 2) - fatal("Usage: %s ip.add.ress.here [--phone ]", argv[0]); - //phonenr = argc == 3 ? argv[2] : NULL; - for(i=2; icall_list = call_list; - conninfo->call_set = &call_set; - pptp_conn_closure_put(conn, conninfo); - } - if (sigsetjmp(callmgr_env, 1) != 0) goto shutdown; - /* Step 3: Get FD_SETs */ - max_fd = unix_sock; - do { - int rc; - fd_set read_set = call_set, write_set; - FD_ZERO (&write_set); - if (pptp_conn_established(conn)) { - FD_SET (unix_sock, &read_set); - if (unix_sock > max_fd) max_fd = unix_sock; - } - pptp_fd_set(conn, &read_set, &write_set, &max_fd); - for (; max_fd > 0 ; max_fd--) { - if (FD_ISSET (max_fd, &read_set) || - FD_ISSET (max_fd, &write_set)) - break; - } - /* Step 4: Wait on INET or UNIX event */ - if ((rc = select(max_fd + 1, &read_set, &write_set, NULL, NULL)) <0) { - if (errno == EBADF) break; - /* a signal or somesuch. */ - continue; - } - /* Step 5a: Handle INET events */ - rc = pptp_dispatch(conn, &read_set, &write_set); - if (rc < 0) - break; - /* Step 5b: Handle new connection to UNIX socket */ - if (FD_ISSET(unix_sock, &read_set)) { - /* New call! */ - struct sockaddr_un from; - int len = sizeof(from); - PPTP_CALL * call; - struct local_callinfo *lci; - int s; - /* Accept the socket */ - FD_CLR (unix_sock, &read_set); - if ((s = accept(unix_sock, (struct sockaddr *) &from, &len)) < 0) { - warn("Socket not accepted: %s", strerror(errno)); - goto skip_accept; - } - /* Allocate memory for local call information structure. */ - if ((lci = malloc(sizeof(*lci))) == NULL) { - warn("Out of memory."); close(s); goto skip_accept; - } - lci->unix_sock = s; - /* Give the initiator time to write the PIDs while we open - * the call */ - call = pptp_call_open(conn, call_ID,call_callback, phonenr,window); - /* Read and store the associated pids */ - read(s, &lci->pid[0], sizeof(lci->pid[0])); - read(s, &lci->pid[1], sizeof(lci->pid[1])); - /* associate the local information with the call */ - pptp_call_closure_put(conn, call, (void *) lci); - /* The rest is done on callback. */ - /* Keep alive; wait for close */ - retval = vector_insert(call_list, s, call); assert(retval); - if (s > max_fd) max_fd = s; - FD_SET(s, &call_set); - first = 0; - } -skip_accept: /* Step 5c: Handle socket close */ - for (i = 0; i < max_fd + 1; i++) - if (FD_ISSET(i, &read_set)) { - /* close it */ - PPTP_CALL * call; - retval = vector_search(call_list, i, &call); - if (retval) { - struct local_callinfo *lci = - pptp_call_closure_get(conn, call); - log("Closing connection (unhandled)"); - //if(lci->pid[0] > 1) kill(lci->pid[0], SIGTERM); - //if(lci->pid[1] > 1) kill(lci->pid[1], SIGTERM); - free(lci); - /* soft shutdown. Callback will do hard shutdown later */ - pptp_call_close(conn, call); - vector_remove(call_list, i); - } - FD_CLR(i, &call_set); - close(i); - } - } while (vector_size(call_list) > 0 || first); -shutdown: - { - int rc; - fd_set read_set, write_set; - struct timeval tv; - signal(SIGINT, callmgr_do_nothing); - signal(SIGTERM, callmgr_do_nothing); - /* warn("Shutdown"); */ - /* kill all open calls */ - for (i = 0; i < vector_size(call_list); i++) { - PPTP_CALL *call = vector_get_Nth(call_list, i); - //struct local_callinfo *lci = pptp_call_closure_get(conn, call); - log("Closing connection (shutdown)"); - pptp_call_close(conn, call); - //if(lci->pid[0] > 1) kill(lci->pid[0], SIGTERM); - //if(lci->pid[1] > 1) kill(lci->pid[1], SIGTERM); - } - /* attempt to dispatch these messages */ - FD_ZERO(&read_set); - FD_ZERO(&write_set); - pptp_fd_set(conn, &read_set, &write_set, &max_fd); - tv.tv_sec = 0; - tv.tv_usec = 0; - select(max_fd + 1, &read_set, &write_set, NULL, &tv); - rc = pptp_dispatch(conn, &read_set, &write_set); - if (rc > 0) { - /* wait for a respond, a timeout because there might not be one */ - FD_ZERO(&read_set); - FD_ZERO(&write_set); - pptp_fd_set(conn, &read_set, &write_set, &max_fd); - tv.tv_sec = 2; - tv.tv_usec = 0; - select(max_fd + 1, &read_set, &write_set, NULL, &tv); - rc = pptp_dispatch(conn, &read_set, &write_set); - if (rc > 0) { - if (i > 0) sleep(2); - /* no more open calls. Close the connection. */ - pptp_conn_close(conn, PPTP_STOP_LOCAL_SHUTDOWN); - /* wait for a respond, a timeout because there might not be one */ - FD_ZERO(&read_set); - FD_ZERO(&write_set); - pptp_fd_set(conn, &read_set, &write_set, &max_fd); - tv.tv_sec = 2; - tv.tv_usec = 0; - select(max_fd + 1, &read_set, &write_set, NULL, &tv); - pptp_dispatch(conn, &read_set, &write_set); - if (rc > 0) sleep(2); - } - } - /* with extreme prejudice */ - pptp_conn_destroy(conn); - vector_destroy(call_list); - } -cleanup: - signal(SIGINT, callmgr_do_nothing); - signal(SIGTERM, callmgr_do_nothing); - close_inetsock(inet_sock, inetaddr); - close_unixsock(unix_sock, inetaddr); - return 0; -} - -/*** open_inetsock ************************************************************/ -int open_inetsock(struct in_addr inetaddr) -{ - struct sockaddr_in dest, src; - int s; - dest.sin_family = AF_INET; - dest.sin_port = htons(PPTP_PORT); - dest.sin_addr = inetaddr; - if ((s = socket(AF_INET, SOCK_STREAM, 0)) < 0) { - warn("socket: %s", strerror(errno)); - return s; - } - if (localbind.s_addr != INADDR_NONE) { - bzero(&src, sizeof(src)); - src.sin_family = AF_INET; - src.sin_addr = localbind; - if (bind(s, (struct sockaddr *) &src, sizeof(src)) != 0) { - warn("bind: %s", strerror(errno)); - close(s); return -1; - } - } - if (connect(s, (struct sockaddr *) &dest, sizeof(dest)) < 0) { - warn("connect: %s", strerror(errno)); - close(s); return -1; - } - return s; -} - -/*** open_unixsock ************************************************************/ -int open_unixsock(struct in_addr inetaddr) -{ - struct sockaddr_un where; - struct stat st; - char *dir; - int s; - if ((s = socket(AF_UNIX, SOCK_STREAM, 0)) < 0) { - warn("socket: %s", strerror(errno)); - return s; - } - callmgr_name_unixsock( &where, inetaddr, localbind); - if (stat(where.sun_path, &st) >= 0) - { - warn("Call manager for %s is already running.", inet_ntoa(inetaddr)); - close(s); return -1; - } - /* Make sure path is valid. */ - dir = dirnamex(where.sun_path); - if (!make_valid_path(dir, 0770)) - fatal("Could not make path to %s: %s", where.sun_path, strerror(errno)); - free(dir); - if (bind(s, (struct sockaddr *) &where, sizeof(where)) < 0) { - warn("bind: %s", strerror(errno)); - close(s); return -1; - } - chmod(where.sun_path, 0777); - listen(s, 127); - return s; -} - -/*** close_inetsock ***********************************************************/ -void close_inetsock(int fd, struct in_addr inetaddr) -{ - close(fd); -} - -/*** close_unixsock ***********************************************************/ -void close_unixsock(int fd, struct in_addr inetaddr) -{ - struct sockaddr_un where; - close(fd); - callmgr_name_unixsock(&where, inetaddr, localbind); - unlink(where.sun_path); -} - -/*** make a unix socket address ***********************************************/ -void callmgr_name_unixsock(struct sockaddr_un *where, - struct in_addr inetaddr, - struct in_addr localbind) -{ - char localaddr[16], remoteaddr[16]; - where->sun_family = AF_UNIX; - strncpy(localaddr, inet_ntoa(localbind), 16); - strncpy(remoteaddr, inet_ntoa(inetaddr), 16); - snprintf(where->sun_path, sizeof(where->sun_path), - PPTP_SOCKET_PREFIX "%s:%i", remoteaddr,call_ID); -} diff --git a/pppd_plugin/src/pptp_callmgr.h b/pppd_plugin/src/pptp_callmgr.h deleted file mode 100644 index d7bc2d6..0000000 --- a/pppd_plugin/src/pptp_callmgr.h +++ /dev/null @@ -1,13 +0,0 @@ -/* pptp_callmgr.h ... Call manager for PPTP connections. - * Handles TCP port 1723 protocol. - * C. Scott Ananian - * - * $Id: pptp_callmgr.h,v 1.3 2003/02/17 00:22:17 quozl Exp $ - */ - -#define PPTP_SOCKET_PREFIX "/var/run/pptp/" - -int callmgr_main(int argc, char**argv, char**envp); -void callmgr_name_unixsock(struct sockaddr_un *where, - struct in_addr inetaddr, - struct in_addr localbind); diff --git a/pppd_plugin/src/pptp_ctrl.c b/pppd_plugin/src/pptp_ctrl.c deleted file mode 100644 index 1bab3f9..0000000 --- a/pppd_plugin/src/pptp_ctrl.c +++ /dev/null @@ -1,1077 +0,0 @@ -/* pptp_ctrl.c ... handle PPTP control connection. - * C. Scott Ananian - * - * $Id: pptp_ctrl.c,v 1.31 2005/03/31 07:42:39 quozl Exp $ - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "pptp_msg.h" -#include "pptp_ctrl.h" -#include "pptp_options.h" -#include "vector.h" -#include "util.h" -#include "pptp_quirks.h" - -/* BECAUSE OF SIGNAL LIMITATIONS, EACH PROCESS CAN ONLY MANAGE ONE - * CONNECTION. SO THIS 'PPTP_CONN' STRUCTURE IS A BIT MISLEADING. - * WE'LL KEEP CONNECTION-SPECIFIC INFORMATION IN THERE ANYWAY (AS - * OPPOSED TO USING GLOBAL VARIABLES), BUT BEWARE THAT THE ENTIRE - * UNIX SIGNAL-HANDLING SEMANTICS WOULD HAVE TO CHANGE (OR THE - * TIME-OUT CODE DRASTICALLY REWRITTEN) BEFORE YOU COULD DO A - * PPTP_CONN_OPEN MORE THAN ONCE PER PROCESS AND GET AWAY WITH IT. - */ - -/* This structure contains connection-specific information that the - * signal handler needs to see. Thus, it needs to be in a global - * variable. If you end up using pthreads or something (why not - * just processes?), this would have to be placed in a thread-specific - * data area, using pthread_get|set_specific, etc., so I've - * conveniently encapsulated it for you. - * [linux threads will have to support thread-specific signals - * before this would work at all, which, as of this writing - * (linux-threads v0.6, linux kernel 2.1.72), it does not.] - */ - -/* Globals */ - -/* control the number of times echo packets will be logged */ -static int nlogecho = 10; - -static struct thread_specific { - struct sigaction old_sigaction; /* evil signals */ - PPTP_CONN * conn; -} global; - -#define INITIAL_BUFSIZE 512 /* initial i/o buffer size. */ - -struct PPTP_CONN { - int inet_sock; - /* Connection States */ - enum { - CONN_IDLE, CONN_WAIT_CTL_REPLY, CONN_WAIT_STOP_REPLY, CONN_ESTABLISHED - } conn_state; /* on startup: CONN_IDLE */ - /* Keep-alive states */ - enum { - KA_NONE, KA_OUTSTANDING - } ka_state; /* on startup: KA_NONE */ - /* Keep-alive ID; monotonically increasing (watch wrap-around!) */ - u_int32_t ka_id; /* on startup: 1 */ - /* Other properties. */ - u_int16_t version; - u_int16_t firmware_rev; - u_int8_t hostname[64], vendor[64]; - /* XXX these are only PNS properties, currently XXX */ - /* Call assignment information. */ - u_int16_t call_serial_number; - VECTOR *call; - void * closure; - pptp_conn_cb callback; - /******* IO buffers ******/ - char * read_buffer, *write_buffer; - size_t read_alloc, write_alloc; - size_t read_size, write_size; -}; - -struct PPTP_CALL { - /* Call properties */ - enum { - PPTP_CALL_PAC, PPTP_CALL_PNS - } call_type; - union { - enum pptp_pac_state { - PAC_IDLE, PAC_WAIT_REPLY, PAC_ESTABLISHED, PAC_WAIT_CS_ANS - } pac; - enum pptp_pns_state { - PNS_IDLE, PNS_WAIT_REPLY, PNS_ESTABLISHED, PNS_WAIT_DISCONNECT - } pns; - } state; - u_int16_t call_id, peer_call_id; - u_int16_t sernum; - u_int32_t speed; - /* For user data: */ - pptp_call_cb callback; - void * closure; -}; - - -/* PPTP error codes: ----------------------------------------------*/ - -/* (General Error Codes) */ -static const struct { - const char *name, *desc; -} pptp_general_errors[] = { -#define PPTP_GENERAL_ERROR_NONE 0 - { "(None)", "No general error" }, -#define PPTP_GENERAL_ERROR_NOT_CONNECTED 1 - { "(Not-Connected)", "No control connection exists yet for this " - "PAC-PNS pair" }, -#define PPTP_GENERAL_ERROR_BAD_FORMAT 2 - { "(Bad-Format)", "Length is wrong or Magic Cookie value is incorrect" }, -#define PPTP_GENERAL_ERROR_BAD_VALUE 3 - { "(Bad-Value)", "One of the field values was out of range or " - "reserved field was non-zero" }, -#define PPTP_GENERAL_ERROR_NO_RESOURCE 4 - { "(No-Resource)", "Insufficient resources to handle this command now" }, -#define PPTP_GENERAL_ERROR_BAD_CALLID 5 - { "(Bad-Call ID)", "The Call ID is invalid in this context" }, -#define PPTP_GENERAL_ERROR_PAC_ERROR 6 - { "(PAC-Error)", "A generic vendor-specific error occured in the PAC" } -}; - -#define MAX_GENERAL_ERROR ( sizeof(pptp_general_errors) / \ - sizeof(pptp_general_errors[0]) - 1) - -/* Outgoing Call Reply Result Codes */ -static const char *pptp_out_call_reply_result[] = { -/* 0 */ "Unknown Result Code", -/* 1 */ "Connected", -/* 2 */ "General Error", -/* 3 */ "No Carrier Detected", -/* 4 */ "Busy Signal", -/* 5 */ "No Dial Tone", -/* 6 */ "Time Out", -/* 7 */ "Not Accepted, Call is administratively prohibited" }; - -#define MAX_OUT_CALL_REPLY_RESULT 7 - -/* Call Disconnect Notify Result Codes */ -static const char *pptp_call_disc_ntfy[] = { -/* 0 */ "Unknown Result Code", -/* 1 */ "Lost Carrier", -/* 2 */ "General Error", -/* 3 */ "Administrative Shutdown", -/* 4 */ "(your) Request" }; - -#define MAX_CALL_DISC_NTFY 4 - -/* Call Disconnect Notify Result Codes */ -static const char *pptp_start_ctrl_conn_rply[] = { -/* 0 */ "Unknown Result Code", -/* 1 */ "Successful Channel Establishment", -/* 2 */ "General Error", -/* 3 */ "Command Channel Already Exists", -/* 4 */ "Requester is not Authorized" }; - -#define MAX_START_CTRL_CONN_REPLY 4 - -/* timing options */ -int idle_wait = PPTP_TIMEOUT; -int max_echo_wait = PPTP_TIMEOUT; - -/* Local prototypes */ -static void pptp_reset_timer(void); -static void pptp_handle_timer(); -/* Write/read as much as we can without blocking. */ -int pptp_write_some(PPTP_CONN * conn); -int pptp_read_some(PPTP_CONN * conn); -/* Make valid packets from read_buffer */ -int pptp_make_packet(PPTP_CONN * conn, void **buf, size_t *size); -/* Add packet to write_buffer */ -int pptp_send_ctrl_packet(PPTP_CONN * conn, void * buffer, size_t size); -/* Dispatch packets (general) */ -int pptp_dispatch_packet(PPTP_CONN * conn, void * buffer, size_t size); -/* Dispatch packets (control messages) */ -int ctrlp_disp(PPTP_CONN * conn, void * buffer, size_t size); -/* Set link info, for pptp servers that need it. - this is a noop, unless the user specified a quirk and - there's a set_link hook defined in the quirks table - for that quirk */ -void pptp_set_link(PPTP_CONN * conn, int peer_call_id); - -/*** log error information in control packets *********************************/ -static void ctrlp_error( int result, int error, int cause, - const char *result_text[], int max_result) -{ - if( cause >= 0) - log("Result code is %d '%s'. Error code is %d, Cause code is %d", - result, result_text[result <= max_result ? result : 0], error, - cause ); - else - log("Reply result code is %d '%s'. Error code is %d", - result, result_text[result <= max_result ? result : 0], error); - if ((error > 0) && (error <= MAX_GENERAL_ERROR)){ - if( result != PPTP_RESULT_GENERAL_ERROR ) - log("Result code is something else then \"general error\", " - "so the following error is probably bogus."); - log("Error is '%s', Error message: '%s'", - pptp_general_errors[error].name, - pptp_general_errors[error].desc); - } -} - -static const char *ctrl_msg_types[] = { - "invalid control message type", -/* (Control Connection Management) */ - "Start-Control-Connection-Request", /* 1 */ - "Start-Control-Connection-Reply", /* 2 */ - "Stop-Control-Connection-Request", /* 3 */ - "Stop-Control-Connection-Reply", /* 4 */ - "Echo-Request", /* 5 */ - "Echo-Reply", /* 6 */ -/* (Call Management) */ - "Outgoing-Call-Request", /* 7 */ - "Outgoing-Call-Reply", /* 8 */ - "Incoming-Call-Request", /* 9 */ - "Incoming-Call-Reply", /* 10 */ - "Incoming-Call-Connected", /* 11 */ - "Call-Clear-Request", /* 12 */ - "Call-Disconnect-Notify", /* 13 */ -/* (Error Reporting) */ - "WAN-Error-Notify", /* 14 */ -/* (PPP Session Control) */ - "Set-Link-Info" /* 15 */ -}; -#define MAX_CTRLMSG_TYPE 15 - -/*** report a sent packet ****************************************************/ -static void ctrlp_rep( void * buffer, int size, int isbuff) -{ - struct pptp_header *packet = buffer; - unsigned int type; - if(size < sizeof(struct pptp_header)) return; - type = ntoh16(packet->ctrl_type); - /* FIXME: do not report sending echo requests as long as they are - * sent in a signal handler. This may dead lock as the syslog call - * is not reentrant */ - if( type == PPTP_ECHO_RQST ) return; - /* don't keep reporting sending of echo's */ - if( (type == PPTP_ECHO_RQST || type == PPTP_ECHO_RPLY) && nlogecho <= 0 ) return; - log("%s control packet type is %d '%s'\n",isbuff ? "Buffered" : "Sent", - type, ctrl_msg_types[type <= MAX_CTRLMSG_TYPE ? type : 0]); - -} - - - -/* Open new pptp_connection. Returns NULL on failure. */ -PPTP_CONN * pptp_conn_open(int inet_sock, int isclient, pptp_conn_cb callback) -{ - PPTP_CONN *conn; - /* Allocate structure */ - if ((conn = malloc(sizeof(*conn))) == NULL) return NULL; - if ((conn->call = vector_create()) == NULL) { free(conn); return NULL; } - /* Initialize */ - conn->inet_sock = inet_sock; - conn->conn_state = CONN_IDLE; - conn->ka_state = KA_NONE; - conn->ka_id = 1; - conn->call_serial_number = 0; - conn->callback = callback; - /* Create I/O buffers */ - conn->read_size = conn->write_size = 0; - conn->read_alloc = conn->write_alloc = INITIAL_BUFSIZE; - conn->read_buffer = - malloc(sizeof(*(conn->read_buffer)) * conn->read_alloc); - conn->write_buffer = - malloc(sizeof(*(conn->write_buffer)) * conn->write_alloc); - if (conn->read_buffer == NULL || conn->write_buffer == NULL) { - if (conn->read_buffer != NULL) free(conn->read_buffer); - if (conn->write_buffer != NULL) free(conn->write_buffer); - vector_destroy(conn->call); free(conn); return NULL; - } - /* Make this socket non-blocking. */ - fcntl(conn->inet_sock, F_SETFL, O_NONBLOCK); - /* Request connection from server, if this is a client */ - if (isclient) { - struct pptp_start_ctrl_conn packet = { - PPTP_HEADER_CTRL(PPTP_START_CTRL_CONN_RQST), - hton16(PPTP_VERSION), 0, 0, - hton32(PPTP_FRAME_CAP), hton32(PPTP_BEARER_CAP), - hton16(PPTP_MAX_CHANNELS), hton16(PPTP_FIRMWARE_VERSION), - PPTP_HOSTNAME, PPTP_VENDOR - }; - /* fix this packet, if necessary */ - int idx, rc; - idx = get_quirk_index(); - if (idx != -1 && pptp_fixups[idx].start_ctrl_conn) { - if ((rc = pptp_fixups[idx].start_ctrl_conn(&packet))) - warn("calling the start_ctrl_conn hook failed (%d)", rc); - } - if (pptp_send_ctrl_packet(conn, &packet, sizeof(packet))) - conn->conn_state = CONN_WAIT_CTL_REPLY; - else - return NULL; /* could not send initial start request. */ - } - /* Set up interval/keep-alive timer */ - /* First, register handler for SIGALRM */ - sigpipe_create(); - sigpipe_assign(SIGALRM); - global.conn = conn; - /* Reset event timer */ - pptp_reset_timer(); - /* all done. */ - return conn; -} - -int pptp_conn_established(PPTP_CONN *conn) { - return (conn->conn_state == CONN_ESTABLISHED); -} - -/* This currently *only* works for client call requests. - * We need to do something else to allocate calls for incoming requests. - */ -PPTP_CALL * pptp_call_open(PPTP_CONN * conn, int call_id,pptp_call_cb callback, - char *phonenr,int window) -{ - PPTP_CALL * call; - int idx, rc; - /* Send off the call request */ - struct pptp_out_call_rqst packet = { - PPTP_HEADER_CTRL(PPTP_OUT_CALL_RQST), - 0,0, /*call_id, sernum */ - hton32(PPTP_BPS_MIN), hton32(PPTP_BPS_MAX), - hton32(PPTP_BEARER_CAP), hton32(PPTP_FRAME_CAP), - hton16(window), 0, 0, 0, {0}, {0} - }; - assert(conn && conn->call); - assert(conn->conn_state == CONN_ESTABLISHED); - /* Assign call id */ - if (!call_id && !vector_scan(conn->call, 0, PPTP_MAX_CHANNELS - 1, &call_id)) - /* no more calls available! */ - return NULL; - /* allocate structure. */ - if ((call = malloc(sizeof(*call))) == NULL) return NULL; - /* Initialize call structure */ - call->call_type = PPTP_CALL_PNS; - call->state.pns = PNS_IDLE; - call->call_id = (u_int16_t) call_id; - call->sernum = conn->call_serial_number++; - call->callback = callback; - call->closure = NULL; - packet.call_id = htons(call->call_id); - packet.call_sernum = htons(call->sernum); - /* if we have a quirk, build a new packet to fit it */ - idx = get_quirk_index(); - if (idx != -1 && pptp_fixups[idx].out_call_rqst_hook) { - if ((rc = pptp_fixups[idx].out_call_rqst_hook(&packet))) - warn("calling the out_call_rqst hook failed (%d)", rc); - } - /* fill in the phone number if it was specified */ - if (phonenr) { - strncpy(packet.phone_num, phonenr, sizeof(packet.phone_num)); - packet.phone_len = strlen(phonenr); - if( packet.phone_len > sizeof(packet.phone_num)) - packet.phone_len = sizeof(packet.phone_num); - packet.phone_len = hton16 (packet.phone_len); - } - if (pptp_send_ctrl_packet(conn, &packet, sizeof(packet))) { - pptp_reset_timer(); - call->state.pns = PNS_WAIT_REPLY; - /* and add it to the call vector */ - vector_insert(conn->call, call_id, call); - return call; - } else { /* oops, unsuccessful. Deallocate. */ - free(call); - return NULL; - } -} - -/*** pptp_call_close **********************************************************/ -void pptp_call_close(PPTP_CONN * conn, PPTP_CALL * call) -{ - struct pptp_call_clear_rqst rqst = { - PPTP_HEADER_CTRL(PPTP_CALL_CLEAR_RQST), 0, 0 - }; - assert(conn && conn->call); assert(call); - assert(vector_contains(conn->call, call->call_id)); - /* haven't thought about PAC yet */ - assert(call->call_type == PPTP_CALL_PNS); - assert(call->state.pns != PNS_IDLE); - rqst.call_id = hton16(call->call_id); - /* don't check state against WAIT_DISCONNECT... allow multiple disconnect - * requests to be made. - */ - pptp_send_ctrl_packet(conn, &rqst, sizeof(rqst)); - pptp_reset_timer(); - call->state.pns = PNS_WAIT_DISCONNECT; - /* call structure will be freed when we have confirmation of disconnect. */ -} - -/*** hard close ***************************************************************/ -void pptp_call_destroy(PPTP_CONN *conn, PPTP_CALL *call) -{ - assert(conn && conn->call); assert(call); - assert(vector_contains(conn->call, call->call_id)); - /* notify */ - if (call->callback != NULL) call->callback(conn, call, CALL_CLOSE_DONE); - /* deallocate */ - vector_remove(conn->call, call->call_id); - free(call); -} - -/*** this is a soft close *****************************************************/ -void pptp_conn_close(PPTP_CONN * conn, u_int8_t close_reason) -{ - struct pptp_stop_ctrl_conn rqst = { - PPTP_HEADER_CTRL(PPTP_STOP_CTRL_CONN_RQST), - hton8(close_reason), 0, 0 - }; - int i; - assert(conn && conn->call); - /* avoid repeated close attempts */ - if (conn->conn_state == CONN_IDLE || conn->conn_state == CONN_WAIT_STOP_REPLY) - return; - /* close open calls, if any */ - for (i = 0; i < vector_size(conn->call); i++) - pptp_call_close(conn, vector_get_Nth(conn->call, i)); - /* now close connection */ - log("Closing PPTP connection"); - pptp_send_ctrl_packet(conn, &rqst, sizeof(rqst)); - pptp_reset_timer(); /* wait 60 seconds for reply */ - conn->conn_state = CONN_WAIT_STOP_REPLY; - return; -} - -/*** this is a hard close *****************************************************/ -void pptp_conn_destroy(PPTP_CONN * conn) -{ - int i; - assert(conn != NULL); assert(conn->call != NULL); - /* destroy all open calls */ - for (i = 0; i < vector_size(conn->call); i++) - pptp_call_destroy(conn, vector_get_Nth(conn->call, i)); - /* notify */ - if (conn->callback != NULL) conn->callback(conn, CONN_CLOSE_DONE); - sigpipe_close(); - close(conn->inet_sock); - /* deallocate */ - vector_destroy(conn->call); - free(conn); -} - -/*** Deal with messages, in a non-blocking manner - * Add file descriptors used by pptp to fd_set. - */ -void pptp_fd_set(PPTP_CONN * conn, fd_set * read_set, fd_set * write_set, - int * max_fd) -{ - assert(conn && conn->call); - /* Add fd to write_set if there are outstanding writes. */ - if (conn->write_size > 0) - FD_SET(conn->inet_sock, write_set); - /* Always add fd to read_set. (always want something to read) */ - FD_SET(conn->inet_sock, read_set); - if (*max_fd < conn->inet_sock) *max_fd = conn->inet_sock; - /* Add signal pipe file descriptor to set */ - int sig_fd = sigpipe_fd(); - FD_SET(sig_fd, read_set); - if (*max_fd < sig_fd) *max_fd = sig_fd; -} - -/*** handle any pptp file descriptors set in fd_set, and clear them ***********/ -int pptp_dispatch(PPTP_CONN * conn, fd_set * read_set, fd_set * write_set) -{ - int r = 0; - assert(conn && conn->call); - /* Check for signals */ - if (FD_ISSET(sigpipe_fd(), read_set)) { - if (sigpipe_read() == SIGALRM) pptp_handle_timer(); - FD_CLR(sigpipe_fd(), read_set); - } - /* Check write_set could be set. */ - if (FD_ISSET(conn->inet_sock, write_set)) { - FD_CLR(conn->inet_sock, write_set); - if (conn->write_size > 0) - r = pptp_write_some(conn);/* write as much as we can without blocking */ - } - /* Check read_set */ - if (r >= 0 && FD_ISSET(conn->inet_sock, read_set)) { - void *buffer; size_t size; - FD_CLR(conn->inet_sock, read_set); - r = pptp_read_some(conn); /* read as much as we can without blocking */ - if (r < 0) - return r; - /* make packets of the buffer, while we can. */ - while (r >= 0 && pptp_make_packet(conn, &buffer, &size)) { - r = pptp_dispatch_packet(conn, buffer, size); - free(buffer); - } - } - /* That's all, folks. Simple, eh? */ - return r; -} - -/*** Non-blocking write *******************************************************/ -int pptp_write_some(PPTP_CONN * conn) { - ssize_t retval; - assert(conn && conn->call); - retval = write(conn->inet_sock, conn->write_buffer, conn->write_size); - if (retval < 0) { /* error. */ - if (errno == EAGAIN || errno == EINTR) { - return 0; - } else { /* a real error */ - log("write error: %s", strerror(errno)); - return -1; - } - } - assert(retval <= conn->write_size); - conn->write_size -= retval; - memmove(conn->write_buffer, conn->write_buffer + retval, conn->write_size); - ctrlp_rep(conn->write_buffer, retval, 0); - return 0; -} - -/*** Non-blocking read ********************************************************/ -int pptp_read_some(PPTP_CONN * conn) -{ - ssize_t retval; - assert(conn && conn->call); - if (conn->read_size == conn->read_alloc) { /* need to alloc more memory */ - char *new_buffer = realloc(conn->read_buffer, - sizeof(*(conn->read_buffer)) * conn->read_alloc * 2); - if (new_buffer == NULL) { - log("Out of memory"); return -1; - } - conn->read_alloc *= 2; - conn->read_buffer = new_buffer; - } - retval = read(conn->inet_sock, conn->read_buffer + conn->read_size, - conn->read_alloc - conn->read_size); - if (retval == 0) { - log("read returned zero, peer has closed"); - return -1; - } - if (retval < 0) { - if (errno == EINTR || errno == EAGAIN) - return 0; - else { /* a real error */ - log("read error: %s", strerror(errno)); - return -1; - } - } - conn->read_size += retval; - assert(conn->read_size <= conn->read_alloc); - return 0; -} - -/*** Packet formation *********************************************************/ -int pptp_make_packet(PPTP_CONN * conn, void **buf, size_t *size) -{ - struct pptp_header *header; - size_t bad_bytes = 0; - assert(conn && conn->call); assert(buf != NULL); assert(size != NULL); - /* Give up unless there are at least sizeof(pptp_header) bytes */ - while ((conn->read_size-bad_bytes) >= sizeof(struct pptp_header)) { - /* Throw out bytes until we have a valid header. */ - header = (struct pptp_header *) (conn->read_buffer + bad_bytes); - if (ntoh32(header->magic) != PPTP_MAGIC) goto throwitout; - if (ntoh16(header->reserved0) != 0) - log("reserved0 field is not zero! (0x%x) Cisco feature? \n", - ntoh16(header->reserved0)); - if (ntoh16(header->length) < sizeof(struct pptp_header)) goto throwitout; - if (ntoh16(header->length) > PPTP_CTRL_SIZE_MAX) goto throwitout; - /* well. I guess it's good. Let's see if we've got it all. */ - if (ntoh16(header->length) > (conn->read_size-bad_bytes)) - /* nope. Let's wait until we've got it, then. */ - goto flushbadbytes; - /* One last check: */ - if ((ntoh16(header->pptp_type) == PPTP_MESSAGE_CONTROL) && - (ntoh16(header->length) != - PPTP_CTRL_SIZE(ntoh16(header->ctrl_type)))) - goto throwitout; - /* well, I guess we've got it. */ - *size = ntoh16(header->length); - *buf = malloc(*size); - if (*buf == NULL) { log("Out of memory."); return 0; /* ack! */ } - memcpy(*buf, conn->read_buffer + bad_bytes, *size); - /* Delete this packet from the read_buffer. */ - conn->read_size -= (bad_bytes + *size); - memmove(conn->read_buffer, conn->read_buffer + bad_bytes + *size, - conn->read_size); - if (bad_bytes > 0) - log("%lu bad bytes thrown away.", (unsigned long) bad_bytes); - return 1; -throwitout: - bad_bytes++; - } -flushbadbytes: - /* no more packets. Let's get rid of those bad bytes */ - conn->read_size -= bad_bytes; - memmove(conn->read_buffer, conn->read_buffer + bad_bytes, conn->read_size); - if (bad_bytes > 0) - log("%lu bad bytes thrown away.", (unsigned long) bad_bytes); - return 0; -} - -/*** pptp_send_ctrl_packet ****************************************************/ -int pptp_send_ctrl_packet(PPTP_CONN * conn, void * buffer, size_t size) -{ - assert(conn && conn->call); assert(buffer); - if( conn->write_size > 0) pptp_write_some( conn); - if( conn->write_size == 0) { - ssize_t retval; - retval = write(conn->inet_sock, buffer, size); - if (retval < 0) { /* error. */ - if (errno == EAGAIN || errno == EINTR) { - /* ignore */; - retval = 0; - } else { /* a real error */ - log("write error: %s", strerror(errno)); - pptp_conn_destroy(conn); /* shut down fast. */ - return 0; - } - } - ctrlp_rep( buffer, retval, 0); - size -= retval; - if( size <= 0) return 1; - } - /* Shove anything not written into the write buffer */ - if (conn->write_size + size > conn->write_alloc) { /* need more memory */ - char *new_buffer = realloc(conn->write_buffer, - sizeof(*(conn->write_buffer)) * conn->write_alloc * 2); - if (new_buffer == NULL) { - log("Out of memory"); return 0; - } - conn->write_alloc *= 2; - conn->write_buffer = new_buffer; - } - memcpy(conn->write_buffer + conn->write_size, buffer, size); - conn->write_size += size; - ctrlp_rep( buffer,size,1); - return 1; -} - -/*** Packet Dispatch **********************************************************/ -int pptp_dispatch_packet(PPTP_CONN * conn, void * buffer, size_t size) -{ - int r = 0; - struct pptp_header *header = (struct pptp_header *)buffer; - assert(conn && conn->call); assert(buffer); - assert(ntoh32(header->magic) == PPTP_MAGIC); - assert(ntoh16(header->length) == size); - switch (ntoh16(header->pptp_type)) { - case PPTP_MESSAGE_CONTROL: - r = ctrlp_disp(conn, buffer, size); - break; - case PPTP_MESSAGE_MANAGE: - /* MANAGEMENT messages aren't even part of the spec right now. */ - log("PPTP management message received, but not understood."); - break; - default: - log("Unknown PPTP control message type received: %u", - (unsigned int) ntoh16(header->pptp_type)); - break; - } - return r; -} - -/*** log echo request/replies *************************************************/ -static void logecho( int type) -{ - /* hack to stop flooding the log files (the most interesting part is right - * after the connection built-up) */ - if( nlogecho > 0) { - log( "Echo Re%s received.", type == PPTP_ECHO_RQST ? "quest" :"ply"); - if( --nlogecho == 0) - log("no more Echo Reply/Request packets will be reported."); - } -} - -/*** pptp_dispatch_ctrl_packet ************************************************/ -int ctrlp_disp(PPTP_CONN * conn, void * buffer, size_t size) -{ - struct pptp_header *header = (struct pptp_header *)buffer; - u_int8_t close_reason = PPTP_STOP_NONE; - assert(conn && conn->call); assert(buffer); - assert(ntoh32(header->magic) == PPTP_MAGIC); - assert(ntoh16(header->length) == size); - assert(ntoh16(header->pptp_type) == PPTP_MESSAGE_CONTROL); - if (size < PPTP_CTRL_SIZE(ntoh16(header->ctrl_type))) { - log("Invalid packet received [type: %d; length: %d].", - (int) ntoh16(header->ctrl_type), (int) size); - return 0; - } - switch (ntoh16(header->ctrl_type)) { - /* ----------- STANDARD Start-Session MESSAGES ------------ */ - case PPTP_START_CTRL_CONN_RQST: - { - struct pptp_start_ctrl_conn *packet = - (struct pptp_start_ctrl_conn *) buffer; - struct pptp_start_ctrl_conn reply = { - PPTP_HEADER_CTRL(PPTP_START_CTRL_CONN_RPLY), - hton16(PPTP_VERSION), 0, 0, - hton32(PPTP_FRAME_CAP), hton32(PPTP_BEARER_CAP), - hton16(PPTP_MAX_CHANNELS), hton16(PPTP_FIRMWARE_VERSION), - PPTP_HOSTNAME, PPTP_VENDOR }; - int idx, rc; - log("Received Start Control Connection Request"); - /* fix this packet, if necessary */ - idx = get_quirk_index(); - if (idx != -1 && pptp_fixups[idx].start_ctrl_conn) { - if ((rc = pptp_fixups[idx].start_ctrl_conn(&reply))) - warn("calling the start_ctrl_conn hook failed (%d)", rc); - } - if (conn->conn_state == CONN_IDLE) { - if (ntoh16(packet->version) < PPTP_VERSION) { - /* Can't support this (earlier) PPTP_VERSION */ - reply.version = packet->version; - /* protocol version not supported */ - reply.result_code = hton8(5); - pptp_send_ctrl_packet(conn, &reply, sizeof(reply)); - pptp_reset_timer(); /* give sender a chance for a retry */ - } else { /* same or greater version */ - if (pptp_send_ctrl_packet(conn, &reply, sizeof(reply))) { - conn->conn_state = CONN_ESTABLISHED; - log("server connection ESTABLISHED."); - pptp_reset_timer(); - } - } - } - break; - } - case PPTP_START_CTRL_CONN_RPLY: - { - struct pptp_start_ctrl_conn *packet = - (struct pptp_start_ctrl_conn *) buffer; - log("Received Start Control Connection Reply"); - if (conn->conn_state == CONN_WAIT_CTL_REPLY) { - /* XXX handle collision XXX [see rfc] */ - if (ntoh16(packet->version) != PPTP_VERSION) { - if (conn->callback != NULL) - conn->callback(conn, CONN_OPEN_FAIL); - close_reason = PPTP_STOP_PROTOCOL; - goto pptp_conn_close; - } - if (ntoh8(packet->result_code) != 1 && - /* J'ai change le if () afin que la connection ne se ferme - * pas pour un "rien" :p adel@cybercable.fr - - * - * Don't close the connection if the result code is zero - * (feature found in certain ADSL modems) - */ - ntoh8(packet->result_code) != 0) { - log("Negative reply received to our Start Control " - "Connection Request"); - ctrlp_error(packet->result_code, packet->error_code, - -1, pptp_start_ctrl_conn_rply, - MAX_START_CTRL_CONN_REPLY); - if (conn->callback != NULL) - conn->callback(conn, CONN_OPEN_FAIL); - close_reason = PPTP_STOP_PROTOCOL; - goto pptp_conn_close; - } - conn->conn_state = CONN_ESTABLISHED; - /* log session properties */ - conn->version = ntoh16(packet->version); - conn->firmware_rev = ntoh16(packet->firmware_rev); - memcpy(conn->hostname, packet->hostname, sizeof(conn->hostname)); - memcpy(conn->vendor, packet->vendor, sizeof(conn->vendor)); - pptp_reset_timer(); /* 60 seconds until keep-alive */ - log("Client connection established."); - if (conn->callback != NULL) - conn->callback(conn, CONN_OPEN_DONE); - } /* else goto pptp_conn_close; */ - break; - } - /* ----------- STANDARD Stop-Session MESSAGES ------------ */ - case PPTP_STOP_CTRL_CONN_RQST: - { - /* conn_state should be CONN_ESTABLISHED, but it could be - * something else */ - struct pptp_stop_ctrl_conn reply = { - PPTP_HEADER_CTRL(PPTP_STOP_CTRL_CONN_RPLY), - hton8(1), hton8(PPTP_GENERAL_ERROR_NONE), 0 - }; - log("Received Stop Control Connection Request."); - if (conn->conn_state == CONN_IDLE) break; - if (pptp_send_ctrl_packet(conn, &reply, sizeof(reply))) { - if (conn->callback != NULL) - conn->callback(conn, CONN_CLOSE_RQST); - conn->conn_state = CONN_IDLE; - return -1; - } - break; - } - case PPTP_STOP_CTRL_CONN_RPLY: - { - log("Received Stop Control Connection Reply."); - /* conn_state should be CONN_WAIT_STOP_REPLY, but it - * could be something else */ - if (conn->conn_state == CONN_IDLE) break; - conn->conn_state = CONN_IDLE; - return -1; - } - /* ----------- STANDARD Echo/Keepalive MESSAGES ------------ */ - case PPTP_ECHO_RPLY: - { - struct pptp_echo_rply *packet = - (struct pptp_echo_rply *) buffer; - logecho( PPTP_ECHO_RPLY); - if ((conn->ka_state == KA_OUTSTANDING) && - (ntoh32(packet->identifier) == conn->ka_id)) { - conn->ka_id++; - conn->ka_state = KA_NONE; - pptp_reset_timer(); - } - break; - } - case PPTP_ECHO_RQST: - { - struct pptp_echo_rqst *packet = - (struct pptp_echo_rqst *) buffer; - struct pptp_echo_rply reply = { - PPTP_HEADER_CTRL(PPTP_ECHO_RPLY), - packet->identifier, /* skip hton32(ntoh32(id)) */ - hton8(1), hton8(PPTP_GENERAL_ERROR_NONE), 0 - }; - logecho( PPTP_ECHO_RQST); - pptp_send_ctrl_packet(conn, &reply, sizeof(reply)); - pptp_reset_timer(); - break; - } - /* ----------- OUTGOING CALL MESSAGES ------------ */ - case PPTP_OUT_CALL_RQST: - { - struct pptp_out_call_rqst *packet = - (struct pptp_out_call_rqst *)buffer; - struct pptp_out_call_rply reply = { - PPTP_HEADER_CTRL(PPTP_OUT_CALL_RPLY), - 0 /* callid */, packet->call_id, 1, PPTP_GENERAL_ERROR_NONE, 0, - hton32(PPTP_CONNECT_SPEED), - hton16(PPTP_WINDOW), hton16(PPTP_DELAY), 0 - }; - log("Received Outgoing Call Request."); - /* XXX PAC: eventually this should make an outgoing call. XXX */ - reply.result_code = hton8(7); /* outgoing calls verboten */ - pptp_send_ctrl_packet(conn, &reply, sizeof(reply)); - break; - } - case PPTP_OUT_CALL_RPLY: - { - struct pptp_out_call_rply *packet = - (struct pptp_out_call_rply *)buffer; - PPTP_CALL * call; - u_int16_t callid = ntoh16(packet->call_id_peer); - log("Received Outgoing Call Reply."); - if (!vector_search(conn->call, (int) callid, &call)) { - log("PPTP_OUT_CALL_RPLY received for non-existant call: " - "peer call ID (us) %d call ID (them) %d.", - callid, ntoh16(packet->call_id)); - break; - } - if (call->call_type != PPTP_CALL_PNS) { - log("Ack! How did this call_type get here?"); /* XXX? */ - break; - } - if (call->state.pns != PNS_WAIT_REPLY) { - warn("Unexpected(?) Outgoing Call Reply will be ignored."); - break; - } - /* check for errors */ - if (packet->result_code != 1) { - /* An error. Log it verbosely. */ - log("Our outgoing call request [callid %d] has not been " - "accepted.", (int) callid); - ctrlp_error(packet->result_code, packet->error_code, - packet->cause_code, pptp_out_call_reply_result, - MAX_OUT_CALL_REPLY_RESULT); - call->state.pns = PNS_IDLE; - if (call->callback != NULL) - call->callback(conn, call, CALL_OPEN_FAIL); - pptp_call_destroy(conn, call); - } else { - /* connection established */ - call->state.pns = PNS_ESTABLISHED; - call->peer_call_id = ntoh16(packet->call_id); - call->speed = ntoh32(packet->speed); - pptp_reset_timer(); - /* call pptp_set_link. unless the user specified a quirk - and this quirk has a set_link hook, this is a noop */ - pptp_set_link(conn, call->peer_call_id); - if (call->callback != NULL) - call->callback(conn, call, CALL_OPEN_DONE); - log("Outgoing call established (call ID %u, peer's " - "call ID %u).\n", call->call_id, call->peer_call_id); - } - break; - } - /* ----------- INCOMING CALL MESSAGES ------------ */ - /* XXX write me XXX */ - /* ----------- CALL CONTROL MESSAGES ------------ */ - case PPTP_CALL_CLEAR_RQST: - { - struct pptp_call_clear_rqst *packet = - (struct pptp_call_clear_rqst *)buffer; - struct pptp_call_clear_ntfy reply = { - PPTP_HEADER_CTRL(PPTP_CALL_CLEAR_NTFY), packet->call_id, - 1, PPTP_GENERAL_ERROR_NONE, 0, 0, {0} - }; - log("Received Call Clear Request."); - if (vector_contains(conn->call, ntoh16(packet->call_id))) { - PPTP_CALL * call; - vector_search(conn->call, ntoh16(packet->call_id), &call); - if (call->callback != NULL) - call->callback(conn, call, CALL_CLOSE_RQST); - pptp_send_ctrl_packet(conn, &reply, sizeof(reply)); - pptp_call_destroy(conn, call); - log("Call closed (RQST) (call id %d)", (int) call->call_id); - } - break; - } - case PPTP_CALL_CLEAR_NTFY: - { - struct pptp_call_clear_ntfy *packet = - (struct pptp_call_clear_ntfy *)buffer; - log("Call disconnect notification received (call id %d)", - ntoh16(packet->call_id)); - if (vector_contains(conn->call, ntoh16(packet->call_id))) { - PPTP_CALL * call; - ctrlp_error(packet->result_code, packet->error_code, - packet->cause_code, pptp_call_disc_ntfy, - MAX_CALL_DISC_NTFY); - vector_search(conn->call, ntoh16(packet->call_id), &call); - pptp_call_destroy(conn, call); - } - /* XXX we could log call stats here XXX */ - /* XXX not all servers send this XXX */ - break; - } - case PPTP_SET_LINK_INFO: - { - /* I HAVE NO CLUE WHAT TO DO IF send_accm IS NOT 0! */ - /* this is really dealt with in the HDLC deencapsulation, anyway. */ - struct pptp_set_link_info *packet = - (struct pptp_set_link_info *)buffer; - /* log it. */ - log("PPTP_SET_LINK_INFO received from peer_callid %u", - (unsigned int) ntoh16(packet->call_id_peer)); - log(" send_accm is %08lX, recv_accm is %08lX", - (unsigned long) ntoh32(packet->send_accm), - (unsigned long) ntoh32(packet->recv_accm)); - if (!(ntoh32(packet->send_accm) == 0 && - ntoh32(packet->recv_accm) == 0)) - warn("Non-zero Async Control Character Maps are not supported!"); - break; - } - default: - log("Unrecognized Packet %d received.", - (int) ntoh16(((struct pptp_header *)buffer)->ctrl_type)); - /* goto pptp_conn_close; */ - break; - } - return 0; -pptp_conn_close: - warn("pptp_conn_close(%d)", (int) close_reason); - pptp_conn_close(conn, close_reason); - return 0; -} - -/*** pptp_set_link **************************************************************/ -void pptp_set_link(PPTP_CONN* conn, int peer_call_id) -{ - int idx, rc; - /* if we need to send a set_link packet because of buggy - hardware or pptp server, do it now */ - if ((idx = get_quirk_index()) != -1 && pptp_fixups[idx].set_link_hook) { - struct pptp_set_link_info packet; - if ((rc = pptp_fixups[idx].set_link_hook(&packet, peer_call_id))) - warn("calling the set_link hook failed (%d)", rc); - if (pptp_send_ctrl_packet(conn, &packet, sizeof(packet))) { - pptp_reset_timer(); - } - } -} - -/*** Get info from call structure *********************************************/ -/* NOTE: The peer_call_id is undefined until we get a server response. */ -void pptp_call_get_ids(PPTP_CONN * conn, PPTP_CALL * call, - u_int16_t * call_id, u_int16_t * peer_call_id) -{ - assert(conn != NULL); assert(call != NULL); - *call_id = call->call_id; - *peer_call_id = call->peer_call_id; -} - -/*** pptp_call_closure_put ****************************************************/ -void pptp_call_closure_put(PPTP_CONN * conn, PPTP_CALL * call, void *cl) -{ - assert(conn != NULL); assert(call != NULL); - call->closure = cl; -} - -/*** pptp_call_closure_get ****************************************************/ -void * pptp_call_closure_get(PPTP_CONN * conn, PPTP_CALL * call) -{ - assert(conn != NULL); assert(call != NULL); - return call->closure; -} - -/*** pptp_conn_closure_put ****************************************************/ -void pptp_conn_closure_put(PPTP_CONN * conn, void *cl) -{ - assert(conn != NULL); - conn->closure = cl; -} - -/*** pptp_conn_closure_get ****************************************************/ -void * pptp_conn_closure_get(PPTP_CONN * conn) -{ - assert(conn != NULL); - return conn->closure; -} - -/*** Reset keep-alive timer ***************************************************/ -static void pptp_reset_timer(void) -{ - const struct itimerval tv = { { 0, 0 }, /* stop on time-out */ - { idle_wait, 0 } }; - if (idle_wait) setitimer(ITIMER_REAL, &tv, NULL); -} - - -/*** Handle keep-alive timer **************************************************/ -static void pptp_handle_timer() -{ - int i; - /* "Keep Alives and Timers, 1": check connection state */ - if (global.conn->conn_state != CONN_ESTABLISHED) { - if (global.conn->conn_state == CONN_WAIT_STOP_REPLY) - /* hard close. */ - pptp_conn_destroy(global.conn); - else /* soft close */ - pptp_conn_close(global.conn, PPTP_STOP_NONE); - } - /* "Keep Alives and Timers, 2": check echo status */ - if (global.conn->ka_state == KA_OUTSTANDING) { - /* no response to keep-alive */ - log ("closing control connection due to missing echo reply"); - pptp_conn_close(global.conn, PPTP_STOP_NONE); - } else { /* ka_state == NONE */ /* send keep-alive */ - struct pptp_echo_rqst rqst = { - PPTP_HEADER_CTRL(PPTP_ECHO_RQST), hton32(global.conn->ka_id) }; - pptp_send_ctrl_packet(global.conn, &rqst, sizeof(rqst)); - global.conn->ka_state = KA_OUTSTANDING; - } - /* check incoming/outgoing call states for !IDLE && !ESTABLISHED */ - for (i = 0; i < vector_size(global.conn->call); i++) { - PPTP_CALL * call = vector_get_Nth(global.conn->call, i); - if (call->call_type == PPTP_CALL_PNS) { - if (call->state.pns == PNS_WAIT_REPLY) { - /* send close request */ - pptp_call_close(global.conn, call); - assert(call->state.pns == PNS_WAIT_DISCONNECT); - } else if (call->state.pns == PNS_WAIT_DISCONNECT) { - /* hard-close the call */ - pptp_call_destroy(global.conn, call); - } - } else if (call->call_type == PPTP_CALL_PAC) { - if (call->state.pac == PAC_WAIT_REPLY) { - /* XXX FIXME -- drop the PAC connection XXX */ - } else if (call->state.pac == PAC_WAIT_CS_ANS) { - /* XXX FIXME -- drop the PAC connection XXX */ - } - } - } - pptp_reset_timer(); -} diff --git a/pppd_plugin/src/pptp_ctrl.h b/pppd_plugin/src/pptp_ctrl.h deleted file mode 100644 index a7bb506..0000000 --- a/pppd_plugin/src/pptp_ctrl.h +++ /dev/null @@ -1,57 +0,0 @@ -/* pptp_ctrl.h ... handle PPTP control connection. - * C. Scott Ananian - * - * $Id: pptp_ctrl.h,v 1.5 2004/11/09 01:42:32 quozl Exp $ - */ - -#ifndef INC_PPTP_CTRL_H -#define INC_PPTP_CTRL_H -#include - -typedef struct PPTP_CONN PPTP_CONN; -typedef struct PPTP_CALL PPTP_CALL; - -enum call_state { CALL_OPEN_RQST, CALL_OPEN_DONE, CALL_OPEN_FAIL, - CALL_CLOSE_RQST, CALL_CLOSE_DONE }; -enum conn_state { CONN_OPEN_RQST, CONN_OPEN_DONE, CONN_OPEN_FAIL, - CONN_CLOSE_RQST, CONN_CLOSE_DONE }; - -typedef void (*pptp_call_cb)(PPTP_CONN*, PPTP_CALL*, enum call_state); -typedef void (*pptp_conn_cb)(PPTP_CONN*, enum conn_state); - -/* if 'isclient' is true, then will send 'conn open' packet to other host. - * not necessary if this is being opened by a server process after - * receiving a conn_open packet from client. - */ -PPTP_CONN * pptp_conn_open(int inet_sock, int isclient, - pptp_conn_cb callback); -PPTP_CALL * pptp_call_open(PPTP_CONN * conn, int call_id, - pptp_call_cb callback, char *phonenr,int window); -int pptp_conn_established(PPTP_CONN * conn); -/* soft close. Will callback on completion. */ -void pptp_call_close(PPTP_CONN * conn, PPTP_CALL * call); -/* hard close. */ -void pptp_call_destroy(PPTP_CONN *conn, PPTP_CALL *call); -/* soft close. Will callback on completion. */ -void pptp_conn_close(PPTP_CONN * conn, u_int8_t close_reason); -/* hard close */ -void pptp_conn_destroy(PPTP_CONN * conn); - -/* Add file descriptors used by pptp to fd_set. */ -void pptp_fd_set(PPTP_CONN * conn, fd_set * read_set, fd_set * write_set, int *max_fd); -/* handle any pptp file descriptors set in fd_set, and clear them */ -int pptp_dispatch(PPTP_CONN * conn, fd_set * read_set, fd_set * write_set); - -/* Get info about connection, call */ -void pptp_call_get_ids(PPTP_CONN * conn, PPTP_CALL * call, - u_int16_t * call_id, u_int16_t * peer_call_id); -/* Arbitrary user data about this call/connection. - * It is the caller's responsibility to free this data before calling - * pptp_call|conn_close() - */ -void * pptp_conn_closure_get(PPTP_CONN * conn); -void pptp_conn_closure_put(PPTP_CONN * conn, void *cl); -void * pptp_call_closure_get(PPTP_CONN * conn, PPTP_CALL * call); -void pptp_call_closure_put(PPTP_CONN * conn, PPTP_CALL * call, void *cl); - -#endif /* INC_PPTP_CTRL_H */ diff --git a/pppd_plugin/src/pptp_msg.h b/pppd_plugin/src/pptp_msg.h deleted file mode 100644 index e50ce0c..0000000 --- a/pppd_plugin/src/pptp_msg.h +++ /dev/null @@ -1,303 +0,0 @@ -/* pptp.h: packet structures and magic constants for the PPTP protocol - * C. Scott Ananian - * - * $Id: pptp_msg.h,v 1.3 2003/02/15 10:37:21 quozl Exp $ - */ - -#ifndef INC_PPTP_H -#define INC_PPTP_H - -/* Grab definitions of int16, int32, etc. */ -#include -/* define "portable" htons, etc. */ -#define hton8(x) (x) -#define ntoh8(x) (x) -#define hton16(x) htons(x) -#define ntoh16(x) ntohs(x) -#define hton32(x) htonl(x) -#define ntoh32(x) ntohl(x) - -/* PPTP magic numbers: ----------------------------------------- */ - -#define PPTP_MAGIC 0x1A2B3C4D /* Magic cookie for PPTP datagrams */ -#define PPTP_PORT 1723 /* PPTP TCP port number */ -#define PPTP_PROTO 47 /* PPTP IP protocol number */ - -/* Control Connection Message Types: --------------------------- */ - -#define PPTP_MESSAGE_CONTROL 1 -#define PPTP_MESSAGE_MANAGE 2 - -/* Control Message Types: -------------------------------------- */ - -/* (Control Connection Management) */ -#define PPTP_START_CTRL_CONN_RQST 1 -#define PPTP_START_CTRL_CONN_RPLY 2 -#define PPTP_STOP_CTRL_CONN_RQST 3 -#define PPTP_STOP_CTRL_CONN_RPLY 4 -#define PPTP_ECHO_RQST 5 -#define PPTP_ECHO_RPLY 6 - -/* (Call Management) */ -#define PPTP_OUT_CALL_RQST 7 -#define PPTP_OUT_CALL_RPLY 8 -#define PPTP_IN_CALL_RQST 9 -#define PPTP_IN_CALL_RPLY 10 -#define PPTP_IN_CALL_CONNECT 11 -#define PPTP_CALL_CLEAR_RQST 12 -#define PPTP_CALL_CLEAR_NTFY 13 - -/* (Error Reporting) */ -#define PPTP_WAN_ERR_NTFY 14 - -/* (PPP Session Control) */ -#define PPTP_SET_LINK_INFO 15 - -/* PPTP version information: --------------------------------------*/ -#define PPTP_VERSION_STRING "1.00" -#define PPTP_VERSION 0x100 -#define PPTP_FIRMWARE_STRING "0.01" -#define PPTP_FIRMWARE_VERSION 0x001 - -/* PPTP capabilities: ---------------------------------------------*/ - -/* (Framing capabilities for msg sender) */ -#define PPTP_FRAME_ASYNC 1 -#define PPTP_FRAME_SYNC 2 -#define PPTP_FRAME_ANY 3 - -/* (Bearer capabilities for msg sender) */ -#define PPTP_BEARER_ANALOG 1 -#define PPTP_BEARER_DIGITAL 2 -#define PPTP_BEARER_ANY 3 - -#define PPTP_RESULT_GENERAL_ERROR 2 - -/* (Reasons to close a connection) */ -#define PPTP_STOP_NONE 1 /* no good reason */ -#define PPTP_STOP_PROTOCOL 2 /* can't support peer's protocol version */ -#define PPTP_STOP_LOCAL_SHUTDOWN 3 /* requester is being shut down */ - -/* PPTP datagram structures (all data in network byte order): ----------*/ - -struct pptp_header { - u_int16_t length; /* message length in octets, including header */ - u_int16_t pptp_type; /* PPTP message type. 1 for control message. */ - u_int32_t magic; /* this should be PPTP_MAGIC. */ - u_int16_t ctrl_type; /* Control message type (0-15) */ - u_int16_t reserved0; /* reserved. MUST BE ZERO. */ -}; - -struct pptp_start_ctrl_conn { /* for control message types 1 and 2 */ - struct pptp_header header; - - u_int16_t version; /* PPTP protocol version. = PPTP_VERSION */ - u_int8_t result_code; /* these two fields should be zero on rqst msg*/ - u_int8_t error_code; /* 0 unless result_code==2 (General Error) */ - u_int32_t framing_cap; /* Framing capabilities */ - u_int32_t bearer_cap; /* Bearer Capabilities */ - u_int16_t max_channels; /* Maximum Channels (=0 for PNS, PAC ignores) */ - u_int16_t firmware_rev; /* Firmware or Software Revision */ - u_int8_t hostname[64]; /* Host Name (64 octets, zero terminated) */ - u_int8_t vendor[64]; /* Vendor string (64 octets, zero term.) */ - /* MS says that end of hostname/vendor fields should be filled with */ - /* octets of value 0, but Win95 PPTP driver doesn't do this. */ -}; - -struct pptp_stop_ctrl_conn { /* for control message types 3 and 4 */ - struct pptp_header header; - - u_int8_t reason_result; /* reason for rqst, result for rply */ - u_int8_t error_code; /* MUST be 0, unless rply result==2 (general err)*/ - u_int16_t reserved1; /* MUST be 0 */ -}; - -struct pptp_echo_rqst { /* for control message type 5 */ - struct pptp_header header; - u_int32_t identifier; /* arbitrary value set by sender which is used */ - /* to match up reply and request */ -}; - -struct pptp_echo_rply { /* for control message type 6 */ - struct pptp_header header; - u_int32_t identifier; /* should correspond to id of rqst */ - u_int8_t result_code; - u_int8_t error_code; /* =0, unless result_code==2 (general error) */ - u_int16_t reserved1; /* MUST BE ZERO */ -}; - -struct pptp_out_call_rqst { /* for control message type 7 */ - struct pptp_header header; - u_int16_t call_id; /* Call ID (unique id used to multiplex data) */ - u_int16_t call_sernum; /* Call Serial Number (used for logging) */ - u_int32_t bps_min; /* Minimum BPS (lowest acceptable line speed) */ - u_int32_t bps_max; /* Maximum BPS (highest acceptable line speed) */ - u_int32_t bearer; /* Bearer type */ - u_int32_t framing; /* Framing type */ - u_int16_t recv_size; /* Recv. Window Size (no. of buffered packets) */ - u_int16_t delay; /* Packet Processing Delay (in 1/10 sec) */ - u_int16_t phone_len; /* Phone Number Length (num. of valid digits) */ - u_int16_t reserved1; /* MUST BE ZERO */ - u_int8_t phone_num[64]; /* Phone Number (64 octets, null term.) */ - u_int8_t subaddress[64]; /* Subaddress (64 octets, null term.) */ -}; - -struct pptp_out_call_rply { /* for control message type 8 */ - struct pptp_header header; - u_int16_t call_id; /* Call ID (used to multiplex data over tunnel)*/ - u_int16_t call_id_peer; /* Peer's Call ID (call_id of pptp_out_call_rqst)*/ - u_int8_t result_code; /* Result Code (1 is no errors) */ - u_int8_t error_code; /* Error Code (=0 unless result_code==2) */ - u_int16_t cause_code; /* Cause Code (addt'l failure information) */ - u_int32_t speed; /* Connect Speed (in BPS) */ - u_int16_t recv_size; /* Recv. Window Size (no. of buffered packets) */ - u_int16_t delay; /* Packet Processing Delay (in 1/10 sec) */ - u_int32_t channel; /* Physical Channel ID (for logging) */ -}; - -struct pptp_in_call_rqst { /* for control message type 9 */ - struct pptp_header header; - u_int16_t call_id; /* Call ID (unique id used to multiplex data) */ - u_int16_t call_sernum; /* Call Serial Number (used for logging) */ - u_int32_t bearer; /* Bearer type */ - u_int32_t channel; /* Physical Channel ID (for logging) */ - u_int16_t dialed_len; /* Dialed Number Length (# of valid digits) */ - u_int16_t dialing_len; /* Dialing Number Length (# of valid digits) */ - u_int8_t dialed_num[64]; /* Dialed Number (64 octets, zero term.) */ - u_int8_t dialing_num[64]; /* Dialing Number (64 octets, zero term.) */ - u_int8_t subaddress[64]; /* Subaddress (64 octets, zero term.) */ -}; - -struct pptp_in_call_rply { /* for control message type 10 */ - struct pptp_header header; - u_int16_t call_id; /* Call ID (used to multiplex data over tunnel)*/ - u_int16_t call_id_peer; /* Peer's Call ID (call_id of pptp_out_call_rqst)*/ - u_int8_t result_code; /* Result Code (1 is no errors) */ - u_int8_t error_code; /* Error Code (=0 unless result_code==2) */ - u_int16_t recv_size; /* Recv. Window Size (no. of buffered packets) */ - u_int16_t delay; /* Packet Processing Delay (in 1/10 sec) */ - u_int16_t reserved1; /* MUST BE ZERO */ -}; - -struct pptp_in_call_connect { /* for control message type 11 */ - struct pptp_header header; - u_int16_t call_id_peer; /* Peer's Call ID (call_id of pptp_out_call_rqst)*/ - u_int16_t reserved1; /* MUST BE ZERO */ - u_int32_t speed; /* Connect Speed (in BPS) */ - u_int16_t recv_size; /* Recv. Window Size (no. of buffered packets) */ - u_int16_t delay; /* Packet Processing Delay (in 1/10 sec) */ - u_int32_t framing; /* Framing type */ -}; - -struct pptp_call_clear_rqst { /* for control message type 12 */ - struct pptp_header header; - u_int16_t call_id; /* Call ID (used to multiplex data over tunnel)*/ - u_int16_t reserved1; /* MUST BE ZERO */ -}; - -struct pptp_call_clear_ntfy { /* for control message type 13 */ - struct pptp_header header; - u_int16_t call_id; /* Call ID (used to multiplex data over tunnel)*/ - u_int8_t result_code; /* Result Code */ - u_int8_t error_code; /* Error Code (=0 unless result_code==2) */ - u_int16_t cause_code; /* Cause Code (for ISDN, is Q.931 cause code) */ - u_int16_t reserved1; /* MUST BE ZERO */ - u_int8_t call_stats[128]; /* Call Statistics: 128 octets, ascii, 0-term */ -}; - -struct pptp_wan_err_ntfy { /* for control message type 14 */ - struct pptp_header header; - u_int16_t call_id_peer; /* Peer's Call ID (call_id of pptp_out_call_rqst)*/ - u_int16_t reserved1; /* MUST BE ZERO */ - u_int32_t crc_errors; /* CRC errors */ - u_int32_t frame_errors; /* Framing errors */ - u_int32_t hard_errors; /* Hardware overruns */ - u_int32_t buff_errors; /* Buffer overruns */ - u_int32_t time_errors; /* Time-out errors */ - u_int32_t align_errors; /* Alignment errors */ -}; - -struct pptp_set_link_info { /* for control message type 15 */ - struct pptp_header header; - u_int16_t call_id_peer; /* Peer's Call ID (call_id of pptp_out_call_rqst) */ - u_int16_t reserved1; /* MUST BE ZERO */ - u_int32_t send_accm; /* Send ACCM (for PPP packets; default 0xFFFFFFFF)*/ - u_int32_t recv_accm; /* Receive ACCM (for PPP pack.;default 0xFFFFFFFF)*/ -}; - -/* helpful #defines: -------------------------------------------- */ -#define pptp_isvalid_ctrl(header, type, length) \ - (!( ( ntoh16(((struct pptp_header *)header)->length) < (length) ) || \ - ( ntoh16(((struct pptp_header *)header)->pptp_type) !=(type) ) || \ - ( ntoh32(((struct pptp_header *)header)->magic) !=PPTP_MAGIC) || \ - ( ntoh16(((struct pptp_header *)header)->ctrl_type) > PPTP_SET_LINK_INFO) || \ - ( ntoh16(((struct pptp_header *)header)->reserved0) !=0 ) )) - -#define PPTP_HEADER_CTRL(type) \ -{ hton16(PPTP_CTRL_SIZE(type)), \ - hton16(PPTP_MESSAGE_CONTROL), \ - hton32(PPTP_MAGIC), \ - hton16(type), 0 } - -#define PPTP_CTRL_SIZE(type) ( \ -(type==PPTP_START_CTRL_CONN_RQST)?sizeof(struct pptp_start_ctrl_conn): \ -(type==PPTP_START_CTRL_CONN_RPLY)?sizeof(struct pptp_start_ctrl_conn): \ -(type==PPTP_STOP_CTRL_CONN_RQST )?sizeof(struct pptp_stop_ctrl_conn): \ -(type==PPTP_STOP_CTRL_CONN_RPLY )?sizeof(struct pptp_stop_ctrl_conn): \ -(type==PPTP_ECHO_RQST )?sizeof(struct pptp_echo_rqst): \ -(type==PPTP_ECHO_RPLY )?sizeof(struct pptp_echo_rply): \ -(type==PPTP_OUT_CALL_RQST )?sizeof(struct pptp_out_call_rqst): \ -(type==PPTP_OUT_CALL_RPLY )?sizeof(struct pptp_out_call_rply): \ -(type==PPTP_IN_CALL_RQST )?sizeof(struct pptp_in_call_rqst): \ -(type==PPTP_IN_CALL_RPLY )?sizeof(struct pptp_in_call_rply): \ -(type==PPTP_IN_CALL_CONNECT )?sizeof(struct pptp_in_call_connect): \ -(type==PPTP_CALL_CLEAR_RQST )?sizeof(struct pptp_call_clear_rqst): \ -(type==PPTP_CALL_CLEAR_NTFY )?sizeof(struct pptp_call_clear_ntfy): \ -(type==PPTP_WAN_ERR_NTFY )?sizeof(struct pptp_wan_err_ntfy): \ -(type==PPTP_SET_LINK_INFO )?sizeof(struct pptp_set_link_info): \ -0) -#define max(a,b) (((a)>(b))?(a):(b)) -#define PPTP_CTRL_SIZE_MAX ( \ -max(sizeof(struct pptp_start_ctrl_conn), \ -max(sizeof(struct pptp_echo_rqst), \ -max(sizeof(struct pptp_echo_rply), \ -max(sizeof(struct pptp_out_call_rqst), \ -max(sizeof(struct pptp_out_call_rply), \ -max(sizeof(struct pptp_in_call_rqst), \ -max(sizeof(struct pptp_in_call_rply), \ -max(sizeof(struct pptp_in_call_connect), \ -max(sizeof(struct pptp_call_clear_rqst), \ -max(sizeof(struct pptp_call_clear_ntfy), \ -max(sizeof(struct pptp_wan_err_ntfy), \ -max(sizeof(struct pptp_set_link_info), 0))))))))))))) - - -/* gre header structure: -------------------------------------------- */ - -#define PPTP_GRE_PROTO 0x880B -#define PPTP_GRE_VER 0x1 - -#define PPTP_GRE_FLAG_C 0x80 -#define PPTP_GRE_FLAG_R 0x40 -#define PPTP_GRE_FLAG_K 0x20 -#define PPTP_GRE_FLAG_S 0x10 -#define PPTP_GRE_FLAG_A 0x80 - -#define PPTP_GRE_IS_C(f) ((f)&PPTP_GRE_FLAG_C) -#define PPTP_GRE_IS_R(f) ((f)&PPTP_GRE_FLAG_R) -#define PPTP_GRE_IS_K(f) ((f)&PPTP_GRE_FLAG_K) -#define PPTP_GRE_IS_S(f) ((f)&PPTP_GRE_FLAG_S) -#define PPTP_GRE_IS_A(f) ((f)&PPTP_GRE_FLAG_A) - -struct pptp_gre_header { - u_int8_t flags; /* bitfield */ - u_int8_t ver; /* should be PPTP_GRE_VER (enhanced GRE) */ - u_int16_t protocol; /* should be PPTP_GRE_PROTO (ppp-encaps) */ - u_int16_t payload_len; /* size of ppp payload, not inc. gre header */ - u_int16_t call_id; /* peer's call_id for this session */ - u_int32_t seq; /* sequence number. Present if S==1 */ - u_int32_t ack; /* seq number of highest packet recieved by */ - /* sender in this session */ -}; - -#endif /* INC_PPTP_H */ diff --git a/pppd_plugin/src/pptp_options.h b/pppd_plugin/src/pptp_options.h deleted file mode 100644 index ebc1c31..0000000 --- a/pppd_plugin/src/pptp_options.h +++ /dev/null @@ -1,41 +0,0 @@ -/* pptp_options.h ...... various constants used in the PPTP protocol. - * #define STANDARD to emulate NT 4.0 exactly. - * C. Scott Ananian - * - * $Id: pptp_options.h,v 1.3 2004/11/09 01:42:32 quozl Exp $ - */ - -#ifndef INC_PPTP_OPTIONS_H -#define INC_PPTP_OPTIONS_H - -#undef PPTP_FIRMWARE_STRING -#undef PPTP_FIRMWARE_VERSION -#define PPTP_BUF_MAX 65536 -#define PPTP_TIMEOUT 60 /* seconds */ -extern int idle_wait; -extern int max_echo_wait; -#define PPTP_CONNECT_SPEED 1000000000 -#define PPTP_WINDOW 3 -#define PPTP_DELAY 0 -#define PPTP_BPS_MIN 2400 -#define PPTP_BPS_MAX 1000000000 - -#ifndef STANDARD -#define PPTP_MAX_CHANNELS 65535 -#define PPTP_FIRMWARE_STRING "0.01" -#define PPTP_FIRMWARE_VERSION 0x001 -#define PPTP_HOSTNAME {'l','o','c','a','l',0} -#define PPTP_VENDOR {'c','a','n','a','n','i','a','n',0} -#define PPTP_FRAME_CAP PPTP_FRAME_ANY -#define PPTP_BEARER_CAP PPTP_BEARER_ANY -#else -#define PPTP_MAX_CHANNELS 5 -#define PPTP_FIRMWARE_STRING "0.01" -#define PPTP_FIRMWARE_VERSION 0 -#define PPTP_HOSTNAME {'l','o','c','a','l',0} -#define PPTP_VENDOR {'N','T',0} -#define PPTP_FRAME_CAP 2 -#define PPTP_BEARER_CAP 1 -#endif - -#endif /* INC_PPTP_OPTIONS_H */ diff --git a/pppd_plugin/src/pptp_quirks.c b/pppd_plugin/src/pptp_quirks.c deleted file mode 100644 index e4c9013..0000000 --- a/pppd_plugin/src/pptp_quirks.c +++ /dev/null @@ -1,54 +0,0 @@ -/* pptp_quirks.c ...... various options to fix quirks found in buggy adsl modems - * mulix - * - * $Id: pptp_quirks.c,v 1.2 2001/11/23 03:42:51 quozl Exp $ - */ - -#include -#include "orckit_quirks.h" -#include "pptp_quirks.h" - -static int quirk_index = -1; - -struct pptp_fixup pptp_fixups[] = { - {BEZEQ_ISRAEL, ORCKIT, ORCKIT_ATUR3, - orckit_atur3_build_hook, - orckit_atur3_start_ctrl_conn_hook, - orckit_atur3_set_link_hook} -}; - -static int fixups_sz = sizeof(pptp_fixups)/sizeof(pptp_fixups[0]); - -/* return 0 on success, non 0 otherwise */ -int set_quirk_index(int index) -{ - if (index >= 0 && index < fixups_sz) { - quirk_index = index; - return 0; - } - - return -1; -} - -int get_quirk_index() -{ - return quirk_index; -} - -/* return the index for this isp in the quirks table, -1 if not found */ -int find_quirk(const char* isp_name) -{ - int i = 0; - if (isp_name) { - while (i < fixups_sz && pptp_fixups[i].isp) { - if (!strcmp(pptp_fixups[i].isp, isp_name)) { - return i; - } - ++i; - } - } - - return -1; -} - - diff --git a/pppd_plugin/src/pptp_quirks.h b/pppd_plugin/src/pptp_quirks.h deleted file mode 100644 index 291f3d6..0000000 --- a/pppd_plugin/src/pptp_quirks.h +++ /dev/null @@ -1,59 +0,0 @@ -/* pptp_quirks.h ...... various options to fix quirks found in buggy adsl modems - * mulix - * - * $Id: pptp_quirks.h,v 1.1 2001/11/20 06:30:10 quozl Exp $ - */ - -#ifndef INC_PPTP_QUIRKS_H -#define INC_PPTP_QUIRKS_H - -/* isp defs - correspond to slots in the fixups table */ -#define BEZEQ_ISRAEL "BEZEQ_ISRAEL" - -/* vendor defs */ - -#define ORCKIT 1 -#define ALCATEL 2 - -/* device defs */ - -#define ORCKIT_ATUR2 1 -#define ORCKIT_ATUR3 2 - -#include "pptp_msg.h" -#include "pptp_ctrl.h" - -struct pptp_fixup { - const char* isp; /* which isp? e.g. Bezeq in Israel */ - int vendor; /* which vendor? e.g. Orckit */ - int device; /* which device? e.g. Orckit Atur3 */ - - /* use this hook to build your own out call request packet */ - int (*out_call_rqst_hook)(struct pptp_out_call_rqst* packet); - - /* use this hook to build your own start control connection packet */ - /* note that this hook is called from two different places, depending - on whether this is a request or reply */ - int (*start_ctrl_conn)(struct pptp_start_ctrl_conn* packet); - - /* use this hook if you need to send a 'set_link' packet once - the connection is established */ - int (*set_link_hook)(struct pptp_set_link_info* packet, - int peer_call_id); -}; - -extern struct pptp_fixup pptp_fixups[]; - -/* find the index for this isp in the quirks table */ -/* return the index on success, -1 if not found */ -int find_quirk(const char* isp_name); - -/* set the global quirk index. return 0 on success, non 0 otherwise */ -int set_quirk_index(int index); - -/* get the global quirk index. return the index on success, - -1 if no quirk is defined */ -int get_quirk_index(); - - -#endif /* INC_PPTP_QUIRKS_H */ diff --git a/pppd_plugin/src/util.c b/pppd_plugin/src/util.c deleted file mode 100644 index dabddbe..0000000 --- a/pppd_plugin/src/util.c +++ /dev/null @@ -1,158 +0,0 @@ -/* util.c ....... error message utilities. - * C. Scott Ananian - * - * $Id: util.c,v 1.11 2005/08/22 00:49:48 quozl Exp $ - */ - -#include -#include -#include -#include -#include -#include "util.h" - -#ifndef PROGRAM_NAME -#define PROGRAM_NAME "pptp" -#endif - -/* implementation of log_string, defined as extern in util.h */ -char *log_string = "anon"; - -static void open_log(void) __attribute__ ((constructor)); -static void close_log(void) __attribute__ ((destructor)); - -#define MAKE_STRING(label) \ -va_list ap; \ -char buf[256], string[256]; \ -va_start(ap, format); \ -vsnprintf(buf, sizeof(buf), format, ap); \ -snprintf(string, sizeof(string), "%s %s[%s:%s:%d]: %s", \ - log_string, label, func, file, line, buf); \ -va_end(ap) - -/*** open log *****************************************************************/ -static void open_log(void) { - openlog(PROGRAM_NAME, LOG_PID, LOG_DAEMON); -} - -/*** close log ****************************************************************/ -static void close_log(void) -{ - closelog(); -} - -/*** print a message to syslog ************************************************/ -void _log(const char *func, const char *file, int line, const char *format, ...) -{ - MAKE_STRING("log"); - open_log(); - syslog(LOG_NOTICE, "%s", string); - close_log(); -} - -/*** print a warning to syslog ************************************************/ -void _warn(const char *func, const char *file, int line, const char *format, ...) -{ - MAKE_STRING("warn"); - open_log(); - fprintf(stderr, "%s\n", string); - syslog(LOG_WARNING, "%s", string); - close_log(); -} - -/*** print a fatal warning to syslog and exit *********************************/ -void _fatal(const char *func, const char *file, int line, const char *format, ...) -{ - MAKE_STRING("fatal"); - fprintf(stderr, "%s\n", string); - syslog(LOG_CRIT, "%s", string); - exit(1); -} - -/*** connect a file to a file descriptor **************************************/ -int file2fd(const char *path, const char *mode, int fd) -{ - int ok = 0; - FILE *file = NULL; - file = fopen(path, mode); - if (file != NULL && dup2(fileno(file), fd) != -1) - ok = 1; - if (file) fclose(file); - return ok; -} - -/* signal to pipe delivery implementation */ -#include -#include -#include -#include - -/* pipe private to process */ -static int sigpipe[2]; - -/* create a signal pipe, returns 0 for success, -1 with errno for failure */ -int sigpipe_create() -{ - int rc; - - rc = pipe(sigpipe); - if (rc < 0) return rc; - - fcntl(sigpipe[0], F_SETFD, FD_CLOEXEC); - fcntl(sigpipe[1], F_SETFD, FD_CLOEXEC); - -#ifdef O_NONBLOCK -#define FLAG_TO_SET O_NONBLOCK -#else -#ifdef SYSV -#define FLAG_TO_SET O_NDELAY -#else /* BSD */ -#define FLAG_TO_SET FNDELAY -#endif -#endif - - rc = fcntl(sigpipe[1], F_GETFL); - if (rc != -1) - rc = fcntl(sigpipe[1], F_SETFL, rc | FLAG_TO_SET); - if (rc < 0) return rc; - return 0; -#undef FLAG_TO_SET -} - -/* generic handler for signals, writes signal number to pipe */ -void sigpipe_handler(int signum) -{ - write(sigpipe[1], &signum, sizeof(signum)); - signal(signum, sigpipe_handler); -} - -/* assign a signal number to the pipe */ -void sigpipe_assign(int signum) -{ - struct sigaction sa; - - memset(&sa, 0, sizeof(sa)); - sa.sa_handler = sigpipe_handler; - sigaction(signum, &sa, NULL); -} - -/* return the signal pipe read file descriptor for select(2) */ -int sigpipe_fd() -{ - return sigpipe[0]; -} - -/* read and return the pending signal from the pipe */ -int sigpipe_read() -{ - int signum; - read(sigpipe[0], &signum, sizeof(signum)); - return signum; -} - -void sigpipe_close() -{ - close(sigpipe[0]); - close(sigpipe[1]); -} - diff --git a/pppd_plugin/src/util.h b/pppd_plugin/src/util.h deleted file mode 100644 index 1ed5079..0000000 --- a/pppd_plugin/src/util.h +++ /dev/null @@ -1,54 +0,0 @@ -/* util.h ....... error message utilities. - * C. Scott Ananian - * - * $Id: util.h,v 1.6 2005/03/10 01:18:20 quozl Exp $ - */ - -#ifndef INC_UTIL_H -#define INC_UTIL_H - -/* log_string is an identifier for this pptp process, passed from - command line using --log-string=X, and included with every log message. - Useful for people with multiple pptp sessions open at a time */ -extern char * log_string; - -/* log_level sets the logging verbosity. Values range from 0 (errors only) - to 1 (errors and warnings) to 2 (high verbosity, for debugging) */ -extern int log_level; - -void _log(const char *func, const char *file, int line, const char *format, ...) - __attribute__ ((format (printf, 4, 5))); -void _warn(const char *func, const char *file, int line, const char *format, ...) - __attribute__ ((format (printf, 4, 5))); -void _fatal(const char *func, const char *file, int line, const char *format, ...) - __attribute__ ((format (printf, 4, 5))) __attribute__ ((noreturn)); - -#define log(format, args...) \ - _log(__FUNCTION__,__FILE__,__LINE__, format , ## args) -#define warn(format, args...) \ - _warn(__FUNCTION__,__FILE__,__LINE__, format , ## args) -#define fatal(format, args...) \ - _fatal(__FUNCTION__,__FILE__,__LINE__, format , ## args) - -int file2fd(const char *path, const char *mode, int fd); - -/* signal to pipe delivery implementation */ - -/* create a signal pipe, returns 0 for success, -1 with errno for failure */ -int sigpipe_create(); - -/* generic handler for signals, writes signal number to pipe */ -void sigpipe_handler(int signum); - -/* assign a signal number to the pipe */ -void sigpipe_assign(int signum); - -/* return the signal pipe read file descriptor for select(2) */ -int sigpipe_fd(); - -/* read and return the pending signal from the pipe */ -int sigpipe_read(); - -void sigpipe_close(); - -#endif /* INC_UTIL_H */ diff --git a/pppd_plugin/src/vector.c b/pppd_plugin/src/vector.c deleted file mode 100644 index a26c5de..0000000 --- a/pppd_plugin/src/vector.c +++ /dev/null @@ -1,209 +0,0 @@ -/* vector.c ..... store a vector of PPTP_CALL information and search it - * efficiently. - * C. Scott Ananian - * - * $Id: vector.c,v 1.3 2003/06/17 10:12:55 reink Exp $ - */ - -#include -#include -#include -#include "pptp_ctrl.h" -#include "vector.h" -/* #define VECTOR_DEBUG */ -#ifndef TRUE -#define TRUE 1 -#endif -#ifndef FALSE -#define FALSE 0 -#endif - -struct vector_item { - int key; - PPTP_CALL *call; -}; - -struct vector_struct { - struct vector_item *item; - int size; - int alloc; -#ifdef VECTOR_DEBUG - int key_max; -#endif -}; - -static struct vector_item *binary_search(VECTOR *v, int key); - -/*** vector_create ************************************************************/ -VECTOR *vector_create() -{ - const int INITIAL_SIZE = 4; - - VECTOR *v = malloc(sizeof(*v)); - if (v == NULL) return v; - - v->size = 0; - v->alloc = INITIAL_SIZE; - v->item = malloc(sizeof(*(v->item)) * (v->alloc)); -#ifdef VECTOR_DEBUG - v->key_max = -1; -#endif - if (v->item == NULL) { free(v); return NULL; } - else return v; -} - -/*** vector_destroy ***********************************************************/ -void vector_destroy(VECTOR *v) -{ - free(v->item); -#ifdef VECTOR_DEBUG - v->item = NULL; -#endif - free(v); -} - -/*** vector_size **************************************************************/ -int vector_size(VECTOR *v) -{ - assert(v != NULL); - return v->size; -} - -/*** vector_insert************************************************************* - * nice thing about file descriptors is that we are assured by POSIX - * that they are monotonically increasing. - */ -int vector_insert(VECTOR *v, int key, PPTP_CALL * call) -{ - int i; - assert(v != NULL && call != NULL); - assert(!vector_contains(v, key)); -#ifdef VECTOR_DEBUG - assert(v->key_max < key); -#endif - if (!(v->size < v->alloc)) { - void *tmp = realloc(v->item, sizeof(*(v->item)) * 2 * v->alloc); - if (tmp != NULL) { - v->alloc *= 2; - v->item = tmp; - } else return FALSE; /* failed to alloc memory. */ - } - assert(v->size < v->alloc); - /* for safety, we make this work in the general case; - * but this is optimized for adding call to the end of the vector. - */ - for(i = v->size - 1; i >= 0; i--) - if (v->item[i].key < key) - break; - /* insert after item i */ - memmove(&v->item[i + 2], &v->item[i + 1], - (v->size - i - 1) * sizeof(*(v->item))); - v->item[i + 1].key = key; - v->item[i + 1].call = call; - v->size++; -#ifdef VECTOR_DEBUG - if (v->key_max < key) /* ie, always. */ - v->key_max = key; -#endif - return TRUE; -} - -/*** vector_remove ************************************************************/ -int vector_remove(VECTOR *v, int key) -{ - struct vector_item *tmp; - assert(v != NULL); - if ((tmp =binary_search(v,key)) == NULL) return FALSE; - assert(tmp >= v->item && tmp < v->item + v->size); - memmove(tmp, tmp + 1, (v->size - (v->item - tmp) - 1) * sizeof(*(v->item))); - v->size--; - return TRUE; -} - -/*** vector_search ************************************************************/ -int vector_search(VECTOR *v, int key, PPTP_CALL **call) -{ - struct vector_item *tmp; - assert(v != NULL); - tmp = binary_search(v, key); - if (tmp ==NULL) return FALSE; - *call = tmp->call; - return TRUE; -} - -/*** vector_contains **********************************************************/ -int vector_contains(VECTOR *v, int key) -{ - assert(v != NULL); - return (binary_search(v, key) != NULL); -} - -/*** vector_item **************************************************************/ -static struct vector_item *binary_search(VECTOR *v, int key) -{ - int l,r,x; - l = 0; - r = v->size - 1; - while (r >= l) { - x = (l + r)/2; - if (key < v->item[x].key) r = x - 1; else l = x + 1; - if (key == v->item[x].key) return &(v->item[x]); - } - return NULL; -} - -/*** vector_scan *************************************************************** - * Hmm. Let's be fancy and use a binary search for the first - * unused key, taking advantage of the list is stored sorted; ie - * we can look at pointers and keys at two different locations, - * and if (ptr1 - ptr2) = (key1 - key2) then all the slots - * between ptr1 and ptr2 are filled. Note that ptr1-ptr2 should - * never be greater than key1-key2 (no duplicate keys!)... we - * check for this. - */ -int vector_scan(VECTOR *v, int lo, int hi, int *key) -{ - int l,r,x; - assert(v != NULL); - assert(key != NULL); - if ((v->size<1) || (lo < v->item[0].key)) { *key = lo; return TRUE; } - /* our array bounds */ - l = 0; r = v->size - 1; - while (r > l) { - /* check for a free spot right after l */ - if (v->item[l].key + 1 < v->item[l + 1].key) { /* found it! */ - *key = v->item[l].key + 1; - return TRUE; - } - /* no dice. Let's see if the free spot is before or after the midpoint */ - x = (l + r)/2; - /* Okay, we have right (r), left (l) and the probe (x). */ - assert(x - l <= v->item[x].key - v->item[l].key); - assert(r - x <= v->item[r].key - v->item[x].key); - if (x - l < v->item[x].key - v->item[l].key) - /* room between l and x */ - r = x; - else /* no room between l and x */ - if (r - x < v->item[r].key - v->item[x].key) - /* room between x and r */ - l = x; - else /* no room between x and r, either */ - break; /* game over, man. */ - } - /* no room found in already allocated space. Check to see if - * there's free space above allocated entries. */ - if (v->item[v->size - 1].key < hi) { - *key = v->item[v->size - 1].key + 1; - return TRUE; - } - /* outta luck */ - return FALSE; -} - -/*** vector_get_Nth ***********************************************************/ -PPTP_CALL * vector_get_Nth(VECTOR *v, int n) -{ - assert(v != NULL); - assert(0 <= n && n < vector_size(v)); - return v->item[n].call; -} diff --git a/pppd_plugin/src/vector.h b/pppd_plugin/src/vector.h deleted file mode 100644 index b18899f..0000000 --- a/pppd_plugin/src/vector.h +++ /dev/null @@ -1,31 +0,0 @@ -/* vector.h ..... store a vector of PPTP_CALL information and search it - * efficiently. - * C. Scott Ananian - * - * $Id: vector.h,v 1.1.1.1 2000/12/23 08:19:51 scott Exp $ - */ - -#ifndef INC_VECTOR_H -#define INC_VECTOR_H - -#include "pptp_ctrl.h" /* for definition of PPTP_CALL */ - -typedef struct vector_struct VECTOR; - -VECTOR *vector_create(); -void vector_destroy(VECTOR *v); - -int vector_size(VECTOR *v); - -/* vector_insert and vector_search return TRUE on success, FALSE on failure. */ -int vector_insert(VECTOR *v, int key, PPTP_CALL * call); -int vector_remove(VECTOR *v, int key); -int vector_search(VECTOR *v, int key, PPTP_CALL ** call); -/* vector_contains returns FALSE if not found, TRUE if found. */ -int vector_contains(VECTOR *v, int key); -/* find first unused key. Returns TRUE on success, FALSE if no. */ -int vector_scan(VECTOR *v, int lo, int hi, int *key); -/* get a specific PPTP_CALL ... useful only when iterating. */ -PPTP_CALL * vector_get_Nth(VECTOR *v, int n); - -#endif /* INC_VECTOR_H */ -- cgit v1.2.3